Tryag File Manager
Home
-
Turbo Force
Current Path :
/
usr
/
lib
/
python2.4
/
site-packages
/
sos
/
Upload File :
New :
File
Dir
//usr/lib/python2.4/site-packages/sos/plugintools.pyo
mò {ÃWc�����������@���sã���d��Z��d�k�Td�k�l�Z�l�Z�d�k�Z�d�k�Z�d�k�Z�d�k�Z�d�k �Z �d�k �Z �d�k�Z�d�k�Z�d�k �Z �d�k�Td�k�l�Z�d�k�Z�e�i�d�d�j�o*�e�i�d�d�j��o�d �„��Z�e�e�_�n�d �f��d�„��ƒ��YZ�d�S(���s.��� This is the base class for sosreport plugins (���t���*(���s���Threads���activeCountN(���s���timei����i���i���i���c����������C���s?���d��k��}�|�i��ƒ��}��t�i�d�|��ƒ�|��i�ƒ��}�|��i�ƒ��|�S(���Nt���file(���t���StringIOt���outputt ���tracebackt ���print_exct���getvaluet���torett���close(���R���R���R���(����(����t3���/usr/lib/python2.4/site-packages/sos/plugintools.pyt ���format_exc)���s���� t ���PluginBasec�����������B���s…��t��Z�d��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z �d�„��Z �d �„��Z�d �d�„�Z�d�„��Z �d �„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�e�e�d�„�Z�d�„��Z�d�„��Z�d�„��Z�e�e�d�„�Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z�d�„��Z �e�d�„�Z!�e�e�d�„�Z"�d �„��Z#�d!�„��Z$�d"�„��Z%�d#�„��Z&�d$�„��Z'�d%�„��Z(�d&�„��Z)�d'�„��Z*�d(�„��Z+�RS()���s ��� Base class for plugins c���������C���s;��y�t��|��i�ƒ�Wn�g��|��_�n�Xg��|��_�g��|��_�g��|��_�g��|��_�g��|��_�d�|��_�g��|��_ �g��|��_ �|�|��_�|�|��_�g��|��_�g��|��_�g��|��_�d��|��_�d��|��_�d�|��_�d��|��_�d��|��_�t�i�d�ƒ�|��_�x\�|��i�D]Q�}�|��i �i�|�d�ƒ�|��i �i�h��d�|�d�<d�|�d�<d�|�d �<ƒ�qâ�Wd��S( ���Nt����i���t���sosi����t���desct���speedi���t���enabledi���(���t���lent���selft ���optionListt���copiedFilest ���copiedDirst���executedCommandst ���diagnose_msgst���alertst ���customTextt���optNamest���optParmst ���pluginnamet���piNamet���commonst���cInfot���forbiddenPathst ���copyPathst���collectProgst���Nonet���threadt���pidt ���eta_weightt ���time_startt ���time_stopt���loggingt ���getLoggert���soslogt���optt���append(���R���R���R���R,���(����(����R ���t���__init__8���s6���� �c��� ������C���sX��t��|��i�ƒ�oDxA|��i�D]2}�t�i�|�d�|�ƒ�ot�i�i�|��i �d�|�d�i �t�i�i�ƒ�ƒ�} �yy�t �| �d�ƒ�}�t�i�|�|�|�i�ƒ��ƒ�\�}�}�|�i�ƒ��|�d�j�o.�t �| �d�ƒ�}�|�i�|�ƒ�|�i�ƒ��|�Sn�WqLt�j �o �t�‚�qLt�j �o �t�‚�qLt�j �o*�}�|��i�i�t�i�d�| �|�f�ƒ�PqLXq�q�Wn�t �S(���sE���Apply a regexp substitution to a file archived by sosreport. t���srcpatht���dstroott���ri����t���ws���Problem at path %s (%s)N(!���R���R���R���t���afilet���fnmatchR/���t���ost���patht���joinR���t���lstript���sept���abspatht���opent���fpt���ret���subnt���regexpt���substt���readt���tmpoutt���occursR���t���writet ���SystemExitt���KeyboardInterruptt ���Exceptiont���eR+���t���logR)���t���VERBOSEt���False( ���R���R/���R?���R@���R<���RH���RB���RC���R3���R:���(����(����R ���t ���doRegexSubZ���s0����� �! c���������C���sk���g��}�t�|�d�ƒ�}�|�i�ƒ��}�|�i�ƒ��t�i�|�t�i �ƒ�}�x$�|�i�|�ƒ�D]�}�|�i�|�ƒ�qP�W|�S(���sG��� Return a list of all non overlapping matches in the string(s) R1���N(���t���outR;���t���fnamet���fRA���t���contentR���R=���t���compilet���regext ���MULTILINEt���regt���findallt���iR-���(���R���RR���RN���RO���RV���RP���RT���RM���(����(����R ���t���doRegexFindAllt���s����� �c���������C���sé��d�}�x1�|��i�D]&�}�|�i�|�ƒ�d�j�o �d�}�q�q�W|�o�d�Sn�t�i�i�|�ƒ�p�|��i�i �d�|�ƒ�d�Sn�t�i�i �|�ƒ�oút�i�i�|�ƒ�o�d�Sn�t�i�|�ƒ�}�t�i�i�|��i�d�|�i�t�i�i�ƒ�ƒ�}�t�i�i�|�ƒ�oD�t�t�i�i�|�ƒ�t�i�i�|��i�d�|�i�t�i�i�ƒ�ƒ�ƒ�} �n�|�} �t�i�i�|�ƒ�o"�|��i�i�t�i�d�|�ƒ�d�Sn�t�i�i�t�i�i�|�ƒ�ƒ�o�t�i�i�t�i�i�|�ƒ�ƒ�p�t�i�t�i�i�|�ƒ�ƒ�n�|��i�i�t�i�d�|�| �f�ƒ�t�i�| �|�ƒ�t�i�i�|�ƒ�o�|��i�|�ƒ�n)�|��i�t�i�i�t�i�i�|�ƒ�|�ƒ�ƒ�|��i�i�h��d �|�<d �| �<d�d�<d �|�<ƒ�d�Sni�t�i�i�|�ƒ�oU�xJ�t�i �|�ƒ�D]9�}�|�d�j�p �|�d�j�o�q¨|��i�|�d�|�ƒ�q¨Wd�Sn�|��i�i�t�i�d�|�ƒ�y�|��i"�|�ƒ�\�}�}�Wn—�d�j �o%�|��i�i�t�i�d�|�ƒ�d�Snh�t%�j �o#�} �|��i�i'�d�|�ƒ�| �‚�n:�t(�j �o-�} �|��i�i�t�i)�d�|�| �f�ƒ�d�Sn�X|��i�i�h��d �|�<d �|�<d�d�<ƒ�|�S(���sÎ��� Copy file or directory to the destination tree. If a directory, then everything below it is recursively copied. A list of copied files are saved for use later in preparing a report i����i���R���s#���file or directory %s does not existNR0���s.���skipping symlink creation: already exists (%s)s���creating symlink %s -> %sR/���t���dstpatht���symlinkt���yest���pointstot���.s���..t���/s���copying file %st ���AlreadyExistss&���error copying file %s (already exists)s���error copying file %s (IOError)s���error copying file %s (%s)t���no(*���t���copyProhibitedR���R ���R6���R/���t���countR5���t���existsR+���t���debugt���islinkt���isdirt���readlinkt���linkR7���R���R8���R9���t ���dstslnamet���isabst ���sosRelPatht���dirnamet���rpthRI���R)���t���DEBUGt���makedirst���VERBOSE3RY���t���doCopyFileOrDirR���R-���t���listdirR3���t���_PluginBase__copyFilet���tdstpathR:���t���IOErrorRH���t���warningRG���t���VERBOSE2(���R���R/���Rs���Rg���Rh���R6���R3���R`���R:���Rl���RH���(����(����R ���Rp������sh����� �+D> (4� +c���������C���sø���y’�t��d�|�d�|��i�d�ƒ�\�}�}�}�|�o�|��i�i�|�ƒ�n�t �i �i�|��i�d�|�i�t �i �i �ƒ�ƒ�}�t�|��i�d�|�ƒ�}�|�|�f�SWn_�t�j �o �t�‚�nH�t�j �o �t�‚�n0�t�j �o#�}�|��i�i�d�|�|�f�ƒ�n�Xd�S(���sn��� call cp to copy a file, collect return status and output. Returns the destination file name. s@���/bin/cp --parents -P --preserve=mode,ownership,timestamps,links t��� R0���t���rptdirs���Problem copying file %s (%s)N(���t���sosGetCommandOutputt���srcR���R���t���statust���shoutt���runtimeR+���Rc���R5���R6���R7���R8���R9���R:���Rj���t���relpathRE���RF���RG���RH���Ru���(���R���Rz���R{���RH���R|���R}���R:���R~���(����(����R ���t ���__copyFileÖ���s�����(+ c���������C���s.���x'�t��i��|�ƒ�D]�}�|��i�i�|�ƒ�q�Wd�S(���sN���Specify a path to not copy, even if it's part of a copyPaths[] entry. N(���t���globt ���forbiddenPatht���filespecR���R ���R-���(���R���R���R‚���(����(����R ���t���addForbiddenPathé���s������c���������C���s���|��i�|��i�f�S(���s7��� return a list of all options selected N(���R���R���R���(���R���(����(����R ���t ���getAllOptionsð���s�����c���������C���sE���x>�t��|��i�|��i�ƒ�D]'�\�}�}�|�|�j�o�|�|�d�<q�q�Wd�S(���s-��� enable or disable the named option. R���N(���t���zipR���R���R���t���namet���parmst ���optionnamet���enable(���R���Rˆ���R‰���R†���R‡���(����(����R ���t ���setOptionö���s ������ c���������C���sC���x<�t��|��i�|��i�ƒ�D]%�\�}�}�|�|�j�o�|�d�Sq�q�Wd�S(���s2��� see whether the named option is enabled. R���i����N(���R…���R���R���R���R†���R‡���Rˆ���(���R���Rˆ���R‡���R†���(����(����R ���t���isOptionEnabledý���s������ i����c���������C���s��|�d�j�o�|��i�|�ƒ�Sn�t�i�|�ƒ�}�t�|�ƒ�p�|��i�i�d�|�ƒ�d�Sn�|�i �ƒ��d�}�t�}�|�d�d�9}�xQ�|�D]I�}�|�t�i�|�ƒ�t�7}�|�o�|�|�j�o�t�}�Pn�|��i�|�ƒ�q�W|�|�d�j�o<�|�o5�|��i�d�|�|�f�d�t�i�i�|�ƒ�|�d�ƒ�n�d�S(���s/���Add a file specification (with limits) i����s���glob %s is emptyNi���s���tail -c%d %st���tail_i���(���t ���sizelimitR���t���addCopySpect���copyspecR€���t���filesR���R+���Rc���t���sortt���cursizeRK���t ���limit_reachedt���flogR5���t���statt���ST_SIZEt���Truet���collectExtOutputR6���t���basename(���R���R���R���R���R“���R’���R”���(����(����R ���t���addCopySpecLimit��s*����� �c���������C���s.���x'�t��i��|�ƒ�D]�}�|��i�i�|�ƒ�q�Wd�S(���sz��� Add a file specification (can be file, dir,or shell glob) to be copied into the sosreport by this module N(���R€���R���R‚���R���R!���R-���(���R���R���R‚���(����(����R ���RŽ�����s������c���������C���s1���t��i�i�d�ƒ�t��i�i�d�ƒ�|��i�|�ƒ�d�S(���sA��� Deprecated - please modify modules to use addCopySpec() s@���Warning: thecopyFileGlob() function has been deprecated. Pleases6���use addCopySpec() instead. Calling addCopySpec() now.N(���t���syst���stderrRD���R���RŽ���t���srcglob(���R���R���(����(����R ���t���copyFileGlob'��s�����c���������C���s*���t��i�i�d�ƒ�t��i�i�d�ƒ�t�‚�d�S(���sA��� Deprecated - please modify modules to use addCopySpec() sC���Warning: the copyFileOrDir() function has been deprecated. Please s7���use addCopySpec() instead. Calling addCopySpec() now. N(���R›���Rœ���RD���t ���ValueError(���R���R/���(����(����R ���t ���copyFileOrDir.��s�����c���������C���s4���t��i�i�d�ƒ�t��i�i�d�ƒ�t��i�i�d�ƒ�d�S(���s(��� Deprecated - use callExtProg() sC���Warning: the runExeInd() function has been deprecated. Please use s8���the callExtProg() function. This should only be called s���if collect() is overridden.N(���R›���Rœ���RD���(���R���t���exe(����(����R ���t ���runExeInd6��s�����c���������C���sa���t��i�|�i�ƒ��d�t��i�ƒ�p(�|��i�i�t�i �d�|�i�ƒ��d�ƒ�n�t �|�ƒ�\�}�}�}�|�S(���s[��� Execute a command independantly of the output gathering part of sosreport i����s-���binary '%s' does not exist or is not runnableN(���R5���t���accesst���progt���splitt���X_OKR���R+���RI���R)���RJ���Ry���R{���R|���R}���(���R���R¤���R{���R|���R}���(����(����R ���t���callExtProg>��s ����� (c���������C���sR���t��i�|�i�ƒ��d�t��i�ƒ�p(�|��i�i�t�i �d�|�i�ƒ��d�ƒ�n�t �|�ƒ�S(���s[��� Execute a command independantly of the output gathering part of sosreport i����s-���binary '%s' does not exist or is not runnableN(���R5���R£���R¤���R¥���R¦���R���R+���RI���R)���RJ���Ry���(���R���R¤���(����(����R ���t���callExtProgWithOutputJ��s����� (c���������C���s$���t��i�i�d�ƒ�t��i�i�d�ƒ�d�S(���s-��� Deprecated - use collectExtOutput() s@���Warning: the runExe() function has been deprecated. Please use s!���the collectExtOutput() function. N(���R›���Rœ���RD���(���R���R¡���(����(����R ���t���runExeU��s�����c���������C���s���|��i�i�|�|�|�f�ƒ�d�S(���s6��� Run a program and collect the output N(���R���R"���R-���R¡���t���suggest_filenameRY���(���R���R¡���Rª���RY���(����(����R ���R˜���\��s�����c���������C���s^���g��}�t�|�d�ƒ�}�x8�|�i�ƒ��D]*�}�t�i�|�|�ƒ�o�|�i �|�ƒ�q"�q"�W|�i �ƒ��|�S(���NR1���(���t���resultsR;���RN���R<���t ���readlinest���lineR=���t���matchR?���R-���R���(���R���R?���RN���R<���R«���R���(����(����R ���t���fileGrepb��s���� � c���������C���sS���t��i�d�d�|�ƒ�}�t��i�d�d�|�ƒ�}�t��i�d�d�|�ƒ�i�d�ƒ�d�d �!}�|�S( ���Ns���^/(usr/|)(bin|sbin)/R���s���[^\w\-\.\/]+t���_R]���R\���s��� ._-i����i@���(���R=���t���subR¡���t���manglednamet���strip(���R���R¡���R²���(����(����R ���t ���mangleCommandl��s����%c���������C���s‘���|��i�d�d�|��i�d�|��i�|�ƒ�}�t�i�i�|�ƒ�oQ�d�}�xH�t �o<�d�|�|�f�}�t�i�i�|�ƒ�p�|�}�Pn�|�d�7}�qE�Wn�|�S(���sA��� The internal function to build up a filename based on a command t���cmddirR]���i���s���%s_%di���N(���R���R���R���R´���R¡���t���outfnR5���R6���Rb���t���incR—���t���newfn(���R���R¡���R¸���R¶���R·���(����(����R ���t���makeCommandFilenames��s�����)�c������ ���C���sa��t��i�|�i�ƒ��d�t��i�ƒ�p(�|��i�i�t�i �d�|�i�ƒ��d�ƒ�n�t �|�ƒ�\�}�}�}�|�o�|��i�|�ƒ�} �n�|��i�|�ƒ�} �t��i�i�t��i�i�| �ƒ�ƒ�p�t��i�t��i�i�| �ƒ�ƒ�n�|�d�j�p �|�d�j�py?�t�| �d�ƒ�}�t�|�ƒ�o�|�i�|�d�ƒ�n�|�i�ƒ��Wn�t�j �o�}�|�‚�n�X|�o�| �t�|��i�d�ƒ�d�}�d �t�i �|�d �ƒ�|�} �t��i"�ƒ��}�t��i$�|��i�d�ƒ�y�t��i�| �|�i%�d�ƒ�ƒ�Wn�n�Xt��i$�|�ƒ�n�| �t�|��i�d�ƒ�d�} �n'�|��i�i�t�i �d �|�ƒ�d�} �d�} �|��i(�i)�h��d�|�<d�| �<ƒ�|��i�d�i*�d�|�d�|�d�| �d�|�ƒ�| �S(���s]��� Execute a command and save the output to a file for inclusion in the report i����s=���binary '%s' does not exist or is not runnable, trying anywaysi���i���R2���s��� R0���i���s���../R]���s���/.Rµ���s���could not run command: %sR¡���R���t ���xmlreportt���cmdlinet���exitcodet���f_stdoutR}���N(+���R5���R£���R¡���R¥���R¦���R���R+���RI���R)���RJ���Ry���R{���R|���R}���Rª���R¹���R¶���R6���Re���Rk���t���mkdirR;���t���outfdR���RD���R���Rt���RH���RY���R���t ���dst_from_roott���stringRa���t���targett���getcwdt���curdirt���chdirR³���t���outfn_stripR#���R���R-���t���add_command(���R���R¡���Rª���RY���RÀ���R|���RÄ���R{���RH���RÂ���RÆ���R¿���R}���R¶���(����(����R ���t���collectOutputNow„��sD����� ( ")c���������C���s—���|��i�|�ƒ�}�t�i�i�t�i�i�|�ƒ�ƒ�p�t�i�t�i�i�|�ƒ�ƒ�n�t �|�d�ƒ�}�|�i�|�ƒ�|�i �ƒ��|��i�i�h��d�|�<d�|�<ƒ�|�S(���s �� A function that allows you to write a random text string to the command output location referenced by exe; this is useful if you want to conditionally collect information, but still want the output file to exist so as not to confuse readers R2���R¡���R���N(���R���R¹���R¡���R¶���R5���R6���Re���Rk���R¾���R;���R¿���RD���t���textR���R���R-���(���R���R¡���RÉ���R¿���R¶���(����(����R ���t���writeTextToCommandº��s����� "c���������C���s���|��i�i�|�ƒ�d�S(���s”��� Add a configuration sanity warning for this plugin. These will be displayed on-screen before collection and in the report as well. N(���R���R���R-���t���alertstring(���R���RË���(����(����R ���t���addDiagnoseÍ��s�����c���������C���s���|��i�i�|�ƒ�d�S(���sq��� Add an alert to the collection of alerts for this plugin. These will be displayed in the report N(���R���R���R-���RË���(���R���RË���(����(����R ���t���addAlertÕ��s�����c���������C���s���|��i�|�|��_�d�S(���sw��� Append text to the custom text that is included in the report. This is freeform and can include html. N(���R���R���RÉ���(���R���RÉ���(����(����R ���t ���addCustomTextÝ��s�����c���������C���s���|��i�d�t�ƒ�S(���sŠ��� This function has been replaced with copyStuff(threaded = True). Please change your module calls. Calling setup() now. t���threadedN(���R���t ���copyStuffR—���(���R���(����(����R ���t ���doCollectä��s�����c���������C���s���|��i�o�|��i�i�ƒ��Sn�d�S(���s2��� if threaded, is thread running ? N(���R���R$���t���isAliveR#���(���R���(����(����R ���t ���isRunningê��s����� �c���������C���s���|��i�i�|�ƒ�|��i�i�ƒ��S(���sT��� wait for a thread to complete - only called for threaded execution N(���R���R$���R7���t���timeoutRÒ���(���R���RÔ���(����(����R ���t���waitñ��s�����c���������C���sò��|�oV�|��i�d�j�oF�t�d�|��i�d�|��i�d�d�t�|�g�ƒ�|��_�|��i�i �ƒ��|��i�Sn�|�o�|�i �ƒ��n�|��i�i�t �i�d�|��i�ƒ�t�ƒ��|��_�d�|��_�xò�|��i�D]ç�}�|��i�i�d�|�ƒ�y�|��i�|�ƒ�Wq®�t�j �o�}�|�‚�q®�t�j �o�|�o�t�Sq•t�‚�q®�t�j �o�|�o�t�Sq•t�‚�q®�t�j �oE�}�|��i�i�t �i�d�|�|�f�ƒ�|��i�i�t �i�t�i�ƒ��ƒ�q®�Xq®�Wxí�|��i�D]â�\�}�}�}�|��i�i�d�|�ƒ�y�|��i"�|�|�|�ƒ�Wq£t�j �o�}�|�‚�q£t�j �o�|�o�t�Sq…t�‚�q£t�j �o�|�o�t�Sq…t�‚�q£|��i�i�t �i�d �|�ƒ�|��i�i�t �i�t�i�ƒ��ƒ�q£Xq£Wt�ƒ��|��_�|�o�|�i#�ƒ��n�|��i�i�t �i�d �|��i�ƒ�t$�i%�i&�d�|��i�f�ƒ�t$�i%�i'�ƒ��d�S( ���s/��� Collect the data for a plugin RÂ���R†���s���-threadt���argss���starting threaded plugin %ss���copying pathspec %ss7���error copying from pathspec %s (%s), traceback follows:s���collecting output of '%s's3���error collection output of '%s', traceback follows:s���plugin %s returnings+��� plugin %s finished ... N((���RÏ���R���R$���R#���t���ThreadRÐ���R���R—���t ���semaphoret���startt���acquireR+���RI���R)���RJ���t���timeR'���R(���R!���R6���Rc���Rp���Rt���RH���RE���RF���RG���Rv���R���R ���R"���R¤���Rª���RY���RÈ���t���releaseR›���t���stdoutRD���t���flush(���R���RÏ���RØ���RY���R¤���R6���RH���Rª���(����(����R ���RÐ���ø��sh�����. � � % � $�c���������C���s#���y�|��i�i�ƒ��SWn�d�Sn�Xd�S(���s9��� This function will return the description for the plugins���<no description available>N(���R���t���__doc__R³���(���R���(����(����R ���t���get_description8��s �����c���������C���s���t��S(���sg��� This function can be overidden to let the plugin decide whether it should run or not. N(���R—���(���R���(����(����R ���t���checkenabled?��s�����c���������C���s���t��S(���sw���This devices whether a plugin should be automatically loaded or only if manually specified in the command line.N(���R—���(���R���(����(����R ���t���defaultenabledE��s�����c���������C���s���|��i�ƒ��d�S(���sw��� This function has been replaced with setup(). Please change your module calls. Calling setup() now. N(���R���t���setup(���R���(����(����R ���t���collectJ��s�����c���������C���s���d�S(���s~���This class must be overridden to check the sanity of the system's configuration before the collection begins. N(����(���R���(����(����R ���t���diagnoseP��s����c���������C���s���d�S(���sˆ���This class must be overridden to add the copyPaths, forbiddenPaths, and external programs to be collected at a minimum. N(����(���R���(����(����R ���Rã���V��s����c���������C���s���d�S(���sM��� perform any analysis. To be replaced by a plugin if desired N(����(���R���(����(����R ���t���analyze\��s����c���������C���s���d�S(���sS��� perform any postprocessing. To be replaced by a plugin if desired N(����(���R���(����(����R ���t���postprocb��s����c���������C���s`��d�|��i�}�|�d�|��i�d�}�t�|��i�ƒ�oy�|�d�}�x^�|��i�D]S�}�|�d�|�d�|�d�f�}�|�d�d �j�o�|�d �|�d�}�n�|�d�}�qF�W|�d �}�n�t�|��i�ƒ�oy�|�d�}�x^�|��i�D]S�}�|�d�|�d�|�d�f�}�|�d�d �j�o�|�d �|�d�}�n�|�d�}�qÏ�W|�d �}�n�t�|��i�ƒ�oŸ�|�d�}�x„�|��i�D]y�}�|�d�oV�t�|�d�ƒ�oE�t �|��i�d�|��i�d�d�|�d�ƒ�}�|�d�|�|�d�f�}�qX|�d�|�d�}�qXW|�d �}�n�t�|��i �ƒ�o:�|�d�}�x�|��i �D]�}�|�d�|�}�qW|�d �}�n�|��i�d�j�o�|�d�}�|�|��i�d�}�n�|�S(���sm��� Present all information that was gathered in an html file that allows browsing the results. s���<hr/><a name="%s"></a> s���<h2> Plugin <em>s���</em></h2> s���<p>Files copied:<br><ul> s���<li><a href="%s">%s</a>RX���R/���RY���RZ���s��� (symlink to %s)R[���s���</li> s ���</ul></p> s���<p>Directories Copied:<br><ul> s���<li><a href="%s">%s</a> s���<p>Commands Executed:<br><ul> R���Rx���Rµ���R]���s���<li><a href="%s">%s</a></li> R¡���s���<li>%s</li> s���<p>Alerts:<br><ul> R���s���<p>Additional Information:<br> s���</p> N(���R���R���t���htmlR���R���R3���R���t���adirR���t���cmdRj���R���t ���cmdOutRelPathR���t���alertR���(���R���Rë���Ré���Rê���Rì���Rè���R3���(����(����R ���t���reporth��sP����� � � �) � (,���t���__name__t ���__module__Rß���R.���RL���RW���Rp���Rr���Rƒ���R„���RŠ���R‹���Rš���RŽ���Rž���R ���R¢���R§���R¨���R©���R#���R˜���R¯���R´���R¹���RK���RÈ���RÊ���RÌ���RÍ���RÎ���RÑ���RÓ���RÕ���RÐ���Rà���Rá���Râ���Rä���Rå���Rã���Ræ���Rç���Rí���(����(����(����R ���R���4���sP���� " U 6 @ (���Rß���t���sos.helperst ���threadingR×���t���activeCountR5���t���os.pathR›���RÁ���t ���itertoolsR€���R=���R���R)���R•���RÛ���R4���t���version_infoR ���R���(���R›���R)���RÁ���R×���R ���R€���R���R���Rò���R=���Rô���RÛ���R4���R5���(����(����R ���t���?���s���H (