Ë
    ÃkÎjÃk  ã                   ó¨  — d dl Z e j                  j                  d d«       d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dl Z d dl!Z!d dl"Z"d dl#Z#d dl$Z$d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZA  eddg¬«      ZBdedeCfd„ZDeBj‹                  ddd¬ «       e	d!d"¬#«       ee«      fd$eFd%efd&„«       ZGeBj‹                  d'd(d)¬ «       e	d!d*¬#«       ee«      fd+eHd%efd,„«       ZIeBj‹                  d-d.d/¬ «       e	d!«       e
d!«       ee«      fd$eFd0eHd%efd1„«       ZJeBj—                  d2d3d4¬ «       e	d!d5¬#«      d ee«      fd$eFd6ed%efd7„«       ZLeBj‹                  d8d9d:¬ «       e	d!d;¬#«       ee«      fd$eFd%efd<„«       ZMeBj‹                  d=d>d?¬ «       e	d!d@¬#«       ee«      fd+eHd%efdA„«       ZNeBj—                  dBdCdD¬ «       e	d!dE¬#«      d ee«      fd+eHd6ed%efdF„«       ZOeBj‹                  dGdHdI¬ «       e	d!dJ¬#«       ee«      fdKeHd%efdL„«       ZPdMeHfdN„ZQdO„ ZRdP„ ZSeBj‹                  dQdRdS¬ «       e	d!dT¬#«       e
dUdV¬#«       ee«      fdKeHdWeHd%efdX„«       ZTeBj‹                  dYdZd[¬ «       e
d!d\¬#«       ee«      fd]eHd%efd^„«       ZUeBj‹                  d_d`da¬ «       e
d!d\¬#«       e
dUdb¬#«       ee«      fd]eHdWeHd%efdc„«       ZVeBj¯                  dddde¬ «       e	d!d;¬#«       ee«      fd$eFd%efdf„«       ZXy)gé    Nz/var/www/html/metafoliadorv2)ÚSyncSiteRequest)Ú	APIRouterÚDependsÚHTTPExceptionÚPathÚQuery)ÚResponseÚFileResponse)ÚSession)Úget_dbÚtenant_db_url_ctxÚSessionLocal)ÚAlfrescoSite)ÚAlfrescoConnection)ÚAlfrescoFolder)ÚSyncProgress©Údecrypt_credential)Úsettings)Úetree)ÚWorkbook)ÚFontÚPatternFillÚ	AlignmentÚBorderÚSide)ÚA4Ú	landscape)Úcm)Úcolors)ÚSimpleDocTemplateÚTableÚ
TableStyleÚ	ParagraphÚSpacer)ÚgetSampleStyleSheetÚParagraphStyle)Ú	TA_CENTERÚTA_LEFTz/api/v1/foldersÚfolders)ÚprefixÚtagsÚfÚreturnc                 óR  — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  r| j                  ndt        | dd«      t        t        | dd«      «      | j                  r| j                  j                  «       dœ
S d dœ
S )Nr   Úhas_childrenFÚ	is_closed)
ÚidÚ	parent_idÚnameÚ	node_pathÚhas_index_xmlÚindex_xml_node_idÚlevelr0   r1   Ú	synced_at)r2   r3   r4   r5   r6   r7   r8   ÚgetattrÚboolr9   Ú	isoformat)r-   s    ú6/var/www/html/metafoliadorv2/app/api/routes/folders.pyÚ_serialize_folderr>   #   s‹   € à�d‰dØ—[‘[Ø—‘Ø—[‘[ØŸ™Ø×0Ñ0ØŸGšG�—’¨Ü  >°5Ó9Üœ' ! [°%Ó8Ó9Ø01·²�Q—[‘[×*Ñ*Ó,ñð ð BFñð ó    z/site/{site_id}u    Obtener cuadro de clasificaciÃ³nu}   Devuelve todas las Series, Subseries y Expedientes de un sitio como lista plana. El frontend construye el cuadro jerÃ¡rquico.)ÚsummaryÚdescription.zID del sitio Alfresco)rA   Úsite_idÚdbc              ƒ   óÌ  K  — |j                  t        «      j                  t        j                  | k(  «      j	                  «       }|st        dd¬«      ‚|j                  t        «      j                  t        j                  | k(  t        j                  dk(  «      j	                  «       }|r|j                  nd }|j                  t        «      j                  t        j                  | k(  t        j                  dk(  t        j                  |j                  k(  t        j                  d k(  z  t        j                  |k(  z  «      j                  t        j                  «      j                  «       }|D �cg c]  }|j                  ‘Œ }}ddlm} |j                  t        j                  |j!                  t        j                  «      «      j                  t        j                  j#                  |«      t        j                  dk(  «      j%                  t        j                  «      j                  «       }	|	D �
ci c]  }
|
d   |
d   dkD  “Œ }}
g }|D ]=  }t'        |«      }|j)                  |j                  d«      |d	<   |j+                  |«       Œ? | |j                  |j,                  r|j,                  n|j                  |j                  |t/        |«      d
œS c c}w c c}
w ­w)Né”  úSitio no encontrado©Ústatus_codeÚdetailÚdocumentLibraryFr   ©Úfuncé   r0   )rB   Ú	site_nameÚ
site_titleÚroot_folder_idÚitemsÚtotal)Úqueryr   Úfilterr2   Úfirstr   r   rB   r4   Údeletedr3   rP   Úorder_byÚallÚ
sqlalchemyrL   ÚcountÚin_Úgroup_byr>   ÚgetÚappendÚtitleÚlen)rB   rC   ÚsiteÚdoc_libÚ
doc_lib_idr*   r-   Ú
folder_idsrL   Úchild_countsÚrowÚhas_children_maprQ   Únodes                 r=   Úget_folders_treeri   2   s\  è ø€ à�8‰8”LÓ!×(Ñ(¬¯©¸GÑ)CÓD×JÑJÓL€DÙÜ¨Ð4IÔJÐJà�h‰h”~Ó&×-Ñ-Ü×Ñ 'Ñ)Ü×ÑÐ0Ñ0ó÷ �eƒgð ñ
  '�—’¨D€Jð �h‰h”~Ó&×-Ñ-Ü×Ñ 'Ñ)Ü×Ñ %Ñ'Ü	×	!Ñ	! T×%8Ñ%8Ñ	8Ü	×	!Ñ	! TÑ	)ñ	+ä	×	!Ñ	! ZÑ	/ñ	1ó÷ �hŒ~×"Ñ"Ó#§C¡C£Eð ð !(Ö(˜1�!—$“$Ð(€JÐ(ÝØ—8‘8œN×4Ñ4°d·j±jÄ×ARÑARÓ6SÓT×[Ñ[Ü× Ñ ×$Ñ$ ZÓ0Ü×Ñ %Ñ'ó÷ �hŒ~×'Ñ'Ó(¯©«ð ð 7CÖC¨s˜˜A™  A¡¨¡
Ñ*ÐCÐÐCà€EØò ˆÜ  Ó#ˆØ/×3Ñ3°A·D±D¸%Ó@ˆˆ^ÑØ�‰�TÕðð Ø—Y‘YØ$(§J¢J�d—j’j°D·I±IØ×-Ñ-ØÜ�U“ñð ùò )ùò Dùs    ‚E2K$Å4KÆB2K$È9KÉBK$z/{folder_id}/childrenzObtener subseries y expedientesud   Devuelve las subseries y expedientes hijas directas de una Serie, Subserie o Expediente especÃ­fico.z<Node ID de la Serie, Subserie o Expediente padre en AlfrescoÚ	folder_idc              ƒ   ó
  K  — |j                  t        «      j                  t        j                  | k(  «      j	                  «       }|st        dd¬«      ‚|j                  t        «      j                  t        j                  | k(  t        j                  dk(  «      j                  t        j                  «      j                  «       }|D �cg c]  }|j                  ‘Œ }}ddlm} |j                  t        j                  |j                  t        j                  «      «      j                  t        j                  j                  |«      t        j                  dk(  «      j                  t        j                  «      j                  «       }|D �ci c]  }|d   |d   dkD  “Œ }	}g }
|D ]=  }t!        |«      }|	j#                  |j                  d«      |d<   |
j%                  |«       Œ? | |j                  |
d	œS c c}w c c}w ­w)
NrE   ú*Serie, Subserie o Expediente no encontradorG   Fr   rK   rM   r0   )rj   Úfolder_namerQ   )rS   r   rT   r2   rU   r   r3   rV   rW   r4   rX   rY   rL   rZ   r[   r\   r>   r]   r^   )rj   rC   ÚfolderÚchildrenÚcÚ	child_idsrL   re   rf   rg   rQ   rh   s               r=   Úget_folder_childrenrr   `   s®  è ø€ à�X‰X”nÓ%×,Ñ,¬^×->Ñ->À)Ñ-KÓL×RÑRÓT€FÙÜ¨Ð4`ÔaÐaà�x‰xœÓ'×.Ñ.Ü× Ñ  IÑ-Ü×Ñ %Ñ'ó÷ �hŒ~×"Ñ"Ó#§C¡C£Eð ð
  (Ö(˜!�—“Ð(€IÐ(ÝØ—8‘8œN×4Ñ4°d·j±jÄ×ARÑARÓ6SÓT×[Ñ[Ü× Ñ ×$Ñ$ YÓ/Ü×Ñ %Ñ'ó÷ �hŒ~×'Ñ'Ó(¯©«ð ð 7CÖC¨s˜˜A™  A¡¨¡
Ñ*ÐCÐÐCà€EØò ˆÜ  Ó#ˆØ/×3Ñ3°A·D±D¸%Ó@ˆˆ^ÑØ�‰�TÕðð Ø—{‘{Øñð ùò )ùò Dùs    ‚C	HÃG9ÃB2HÆG>Æ#A Hz/site/{site_id}/searchzBuscar carpetasz'Busca carpetas por nombre usando ILIKE.Úqc           	   ƒ   óŒ  K  — |rt        |«      dk  rdg iS |j                  t        «      j                  t        j                  | k(  t        j
                  dk(  t        j                  j                  d|› d�«      «      j                  d«      j                  «       }g }|D ]  }|j                  t        |«      «       Œ d|iS ­w)Né   rQ   Fú%é2   )r`   rS   r   rT   rB   rV   r4   ÚilikeÚlimitrX   r^   r>   )rB   rs   rC   r*   rQ   r-   s         r=   Úsearch_foldersrz   €   sµ   è ø€ á”�A“˜’
Ø˜ˆ}ÐØ�h‰h”~Ó&×-Ñ-Ü×Ñ 'Ñ)Ü×Ñ %Ñ'Ü×Ñ×!Ñ! A a S¨ (Ó+ó÷ �eˆBƒi—‘“ð	 ð €EØò +ˆØ�‰Ô& qÓ)Õ*ð+à�UÐÐùó   ‚CCz/site/{site_id}/synczSincronizar sitio completou¤   Dispara una tarea Celery que recorre recursivamente Series, Subseries y Expedientes y archivos desde Alfresco, detecta eliminados y regenera Ã­ndices electrÃ³nicos.zID del sitio a sincronizarÚbodyc              ƒ   ó.  K  — |j                   }|j                  }|j                  t        «      j	                  t        j
                  | k(  t        j                  d k(  t        j                  j                  ddg«      «      j                  «       }|rt        dd¬«      ‚|j                  t        «      j	                  t        j                  | k(  «      j                  «       }|st        dd¬«      ‚|j                  st        dd	¬«      ‚d
dlm} t!        j"                  «       xs t$        j&                  }|j)                  | |||«      }	t        | |	j                  dd¬«      }
|j+                  |
«       |j-                  «        d|	j                  dddœS ­w)NÚpendingÚrunningé™  z2Ya hay una sincronizacion en curso para este sitiorG   rE   rF   é�  zroot_folder_id no configurador   )Úsync_site_foldersz#Enviado a cola de sincronizacion...)rB   Útask_idÚstatusÚmessageTz(Sincronizacion en segundo plano iniciada)Úokrƒ   r„   r…   )ÚdeepÚgenerate_indexrS   r   rT   rB   rj   r„   r[   rU   r   r   r2   rP   Úapp.worker_tasksr‚   r   r]   r   Údatabase_urlÚdelayÚaddÚcommit)rB   r|   rC   r‡   rˆ   Úexistingra   Úcelery_sync_siteÚdb_urlÚtaskÚprogresss              r=   r‚   r‚   �   sQ  è ø€ à�9‰9€DØ×(Ñ(€Nà�x‰xœÓ%×,Ñ,Ü×Ñ Ñ'Ü×Ñ $Ñ&Ü×Ñ×Ñ ¨IÐ 6Ó7ó÷ �eƒgð	 ñ
 Ü¨Ð4hÔiÐià�8‰8”LÓ!×(Ñ(¬¯©¸GÑ)CÓD×JÑJÓL€DÙÜ¨Ð4IÔJÐJØ×ÒÜ¨Ð4SÔTÐTåFÜ×"Ñ"Ó$Ò=¬×(=Ñ(=€FØ×!Ñ! '¨4°ÀÓH€DäØØ—‘ØØ5ô	€Hð ‡F�Fˆ8ÔØ‡I�I„Kà 4§7¡7°iÐLvÑwÐwùs   ‚FFz/site/{site_id}/statusu#   Estado de sincronizaciÃ³n del sitiouF   Consulta el progreso del Ãºltimo job de sincronizaciÃ³n para el sitio.zID del sitioc              ƒ   óŒ  K  — |j                  t        «      j                  t        j                  | k(  t        j                  d k(  «      j                  t        j                  j                  «       «      j                  «       }|sdddœS |j                  |j                  |j                  |j                  |j                  dœS ­w)NÚnoneúSin sincronizaciones©r„   r…   )r„   r’   r…   rƒ   Útotal_folders)rS   r   rT   rB   rj   rW   Ú
created_atÚdescrU   r„   r’   r…   rƒ   r—   )rB   rC   r’   s      r=   Úget_sync_statusrš   ³   s§   è ø€ à�x‰xœÓ%×,Ñ,Ü×Ñ Ñ'Ü×Ñ $Ñ&ó÷ �hŒ|×&Ñ&×+Ñ+Ó-Ó.¯u©u«wð ñ
 Ø Ð-CÑDÐDð —/‘/Ø×%Ñ%Ø×#Ñ#Ø×#Ñ#Ø!×/Ñ/ñð ùr{   z/folder/{folder_id}/statusu9   Estado de sincronizaciÃ³n de Serie, Subserie o Expedienteuj   Consulta el progreso del Ãºltimo job de sincronizaciÃ³n para una Serie, Subserie o Expediente especÃ­fico.z*Node ID de la Serie, Subserie o Expedientec              ƒ   óR  K  — |j                  t        «      j                  t        j                  | k(  «      j	                  t        j
                  j                  «       «      j                  «       }|sdddœS |j                  |j                  |j                  |j                  dœS ­w)Nr”   r•   r–   )r„   r’   r…   rƒ   )rS   r   rT   rj   rW   r˜   r™   rU   r„   r’   r…   rƒ   )rj   rC   r’   s      r=   Úget_folder_sync_statusrœ   Æ   sŽ   è ø€ à�x‰xœÓ%×,Ñ,Ü×Ñ )Ñ+óç�hŒ|×&Ñ&×+Ñ+Ó-Ó.¯u©u«wð ñ Ø Ð-CÑDÐDð —/‘/Ø×%Ñ%Ø×#Ñ#Ø×#Ñ#ñ	ð ùs   ‚B%B'z/{folder_id}/syncz(Sincronizar Serie, Subserie o Expedienteu|   Dispara una tarea Celery para sincronizar los hijos de una Serie, Subserie o Expediente y regenerar su Ã­ndice electrÃ³nico.z8Node ID de la Serie, Subserie o Expediente a sincronizarc           	   ƒ   ó  K  — |j                   }|j                  }|j                  t        «      j	                  t        j
                  | k(  «      j                  «       }|st        dd¬«      ‚|j                  t        «      j	                  t        j                  | k(  t        j                  j                  ddg«      «      j                  «       }|rt        dd¬«      ‚dd	lm} t        j                  «       xs t         j"                  }|j%                  | |||«      }	t        |j&                  | |	j
                  dd
|j(                  › d�¬«      }
|j+                  |
«       |j-                  «        d|	j
                  ddœS ­w)NrE   rl   rG   r~   r   r€   zIYa hay una sincronizacion en curso para esta Serie, Subserie o Expedienter   )Úsync_folder_childrenzSincronizando z...)rB   rj   rƒ   r„   r…   T)r†   rƒ   r„   )r‡   rˆ   rS   r   rT   r2   rU   r   r   rj   r„   r[   r‰   rž   r   r]   r   rŠ   r‹   rB   r4   rŒ   r�   )rj   r|   rC   r‡   rˆ   rn   rŽ   Úcelery_sync_folderr�   r‘   r’   s              r=   rž   rž   ×   sE  è ø€ à�9‰9€DØ×(Ñ(€Nà�X‰X”nÓ%×,Ñ,¬^×->Ñ->À)Ñ-KÓL×RÑRÓT€FÙÜ¨Ð4`ÔaÐaà�x‰xœÓ%×,Ñ,Ü×Ñ )Ñ+Ü×Ñ×Ñ ¨IÐ 6Ó7ó÷ �eƒgð ñ Ü¨Ð4ô  Að  	AåKÜ×"Ñ"Ó$Ò=¬×(=Ñ(=€FØ×#Ñ# I¨t°^ÀVÓL€DäØ—‘ØØ—‘ØØ  §¡ ¨SÐ1ô€Hð ‡F�Fˆ8ÔØ‡I�I„Kà 4§7¡7°iÑ@Ð@ùs   ‚F Fz/{node_id}/index-xmlu   Obtener Ã­ndice electrÃ³nicou®   Descarga el contenido del archivo index.xml desde Alfresco para una Serie, Subserie, Expediente o node ID. Si el archivo no existe en Alfresco, marca el elemento sin Ã­ndice.zMNode ID de la Serie, Subserie, Expediente o del archivo index.xml en AlfrescoÚnode_idc              ƒ   ó€  K  — d }d}d }|j                  t        «      j                  t        j                  | k(  «      j	                  «       }|r0|j
                  }|j                  }|j                  r|j                  }|s_|j                  t        «      j                  t        j                  | k(  «      j	                  «       }|r|j
                  }|j                  }| }|s| }d}|j                  t        «      j                  t        j                  dk(  «      j	                  «       }|sß|j                  t        «      j                  t        j                  | k(  «      j	                  «       }|rš|j                  t        «      j                  t        j                  |j                  k(  «      j	                  «       }|j                  t        «      j                  t        j                  |j                  k(  «      j	                  «       }|r|j                  st        dd¬«      ‚t        |j                  «      }t        j                   |j"                  |«      }		 |j$                  › d|› d�}
t        j&                  d	d
¬«      4 ƒd {  –—† }|j)                  |
|	¬«      ƒ d {  –—† }|j*                  dk(  rr|rc|j                  t        «      j                  t        j                  |k(  «      j	                  «       }|rd
|_        d |_        |j/                  «        t        dd¬«      ‚|j*                  dk7  rt        dd|j*                  › �¬«      ‚d|j0                  ||dœcd d d «      ƒd {  –—†  S 7 Œë7 ŒÒ7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w# t        $ r ‚ t2        $ r}t        dt5        |«      ¬«      ‚d }~ww xY w­w)NÚ ú	index.xmlTr�   zConexion no disponiblerG   ú9/alfresco/api/-default-/public/alfresco/versions/1/nodes/ú/contenté   F)ÚtimeoutÚverify)ÚauthrE   z;El indice electronico no existe o fue eliminado de AlfrescoéÈ   iö  úAlfresco respondio HTTP )r†   Úcontentrm   rj   éô  )rS   r   rT   r2   rU   r4   r7   r   Úactiver   rB   Úconnection_idr   r   Úpassword_hashÚhttpxÚ	BasicAuthÚusernameÚbase_urlÚAsyncClientr]   rH   r6   r�   ÚtextÚ	ExceptionÚstr)r    rC   r7   rm   rj   rn   Úconnra   Úpwdr©   ÚurlÚclientÚrespÚfldÚes                  r=   Úget_folder_index_xmlrÀ   ø   s#  è ø€ ð ÐØ€KØ€Ið �X‰X”nÓ%×,Ñ,¬^×->Ñ->À'Ñ-IÓJ×PÑPÓR€FÙØ—k‘kˆØ—I‘Iˆ	Ø×#Ò#Ø &× 8Ñ 8ÐáØ—‘œ.Ó)×0Ñ0´×1QÑ1QÐU\Ñ1\Ó]×cÑcÓeˆÙØ Ÿ+™+ˆKØŸ	™	ˆIØ 'ÐÙà#ÐØ!ˆð �8‰8Ô&Ó'×.Ñ.Ô/A×/HÑ/HÈDÑ/PÓQ×WÑWÓY€DÙà—‘œ.Ó)×0Ñ0´×1QÑ1QÐU\Ñ1\Ó]×cÑcÓeˆÙØ—8‘8œLÓ)×0Ñ0´·±ÀFÇNÁNÑ1RÓS×YÑYÓ[ˆDØ—8‘8Ô.Ó/×6Ñ6Ô7I×7LÑ7LÐPT×PbÑPbÑ7bÓc×iÑiÓkˆDÙ�t—{’{Ü¨Ð4LÔMÐMä
˜T×/Ñ/Ó
0€CÜ�?‰?˜4Ÿ=™=¨#Ó.€Dð<Ø—‘�ÐXÐYjÐXkÐksÐtˆÜ×$Ñ$¨R¸Ô>÷ 	jð 	jÀ&ØŸ™ C¨d˜Ó3×3ˆDØ×Ñ 3Ò&ÙØŸ(™(¤>Ó2×9Ñ9¼.×:KÑ:KÈyÑ:XÓY×_Ñ_Óa�CÙØ,1˜Ô)Ø04˜Ô-ØŸ	™	œÜ#°Ð<yÔzÐzØ×Ñ 3Ò&Ü#°Ð>VÐW[×WgÑWgÐVhÐ<iÔjÐjØ¨4¯9©9À[Ð_hÑi÷	j÷ 	jò 	jøØ3øð	jø÷ 	j÷ 	jñ 	jûô ò ØÜò <Ü¨´C¸³FÔ;Ð;ûð<üs‘   ‚IN>É-N ÊM3ÊN ÊM9Ê"M5Ê#B>M9Í!N Í-M7Í.N Í2N>Í3N Í5M9Í7N Í9NÍ?NÎ NÎN Î
N>ÎN ÎN;Î N6Î6N;Î;N>r�   c                 ó€   — ddl m}m} ddlm} ddlm}  || «      }|j                  |d|«         |dd|¬«      «       S )Nr   )Úcreate_engineÚevent)Úsessionmaker)Ú_set_session_utcÚconnectF)Ú
autocommitÚ	autoflushÚbind)rY   rÂ   rÃ   Úsqlalchemy.ormrÄ   Úapp.models.databaserÅ   Úlisten)r�   rÂ   rÃ   rÄ   rÅ   Úengines         r=   Ú_make_sessionrÎ   5  s:   € ß/Ý+Ý4Ù˜6Ó"€FØ	‡L�L�˜Ð$4Ô5ØG‰< 5°EÀÔGÓIÐIr?   c                 ó8  — g }|}|rf| j                  t        «      j                  t        j                  |k(  «      j	                  «       }|sn |j                  |«       |j                  }|rŒf|j                  «        |D �cg c]  }|j                  dk7  sŒ|‘Œ }}t        |«      dk\  r|d   j                  nd}t        |«      dk\  r|d   j                  nd}t        |«      dk\  r|d   j                  nd}	dj                  d„ |D «       «      }
|||	|
fS c c}w )	zýRecorre la cadena de padres desde folder_id hasta el root.
    Retorna (dependencia, serie, subserie, ruta_completa).
    La dependencia es el primer nivel bajo documentLibrary, serie el segundo, subserie el tercero.
    La ruta excluye documentLibrary.rJ   rM   r   r¢   ru   é   z / c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)r4   )Ú.0Úas     r=   ú	<genexpr>z(_get_folder_hierarchy.<locals>.<genexpr>T  s   è ø€ Ò. �a—f•fÑ.ùs   ‚)rS   r   rT   r2   rU   r^   r3   Úreverser4   r`   Újoin)Údb2rj   Ú	ancestorsÚ
current_idr-   rÔ   ÚcleanedÚdependenciaÚserieÚsubserieÚrutas              r=   Ú_get_folder_hierarchyrà   >  s  € ð
 €IØ€JÙ
Ø�I‰I”nÓ%×,Ñ,¬^×->Ñ->À*Ñ-LÓM×SÑSÓUˆÙØØ×Ñ˜ÔØ—[‘[ˆ
ò ð ×ÑÔð $ÖC�Q q§v¡vÐ1BÓ'BŠqÐC€GÐCä%(¨£\°QÒ%6�'˜!‘*—/’/¸B€KÜ" 7›|¨qÒ0ˆG�A‰J�OŠO°b€EÜ"% g£,°!Ò"3ˆw�q‰z�Š¸€HØ�:‰:Ñ. gÔ.Ó.€Dà˜˜x¨Ð-Ð-ùò Ds   ÂDÂDc                 ó  — ddl m} t        |«      }	 ddd|f\  }	}
}}|r	 t        ||«      \  }	}
}}|j                  t        «      j                  t        j                  dk(  «      j                  «       }|st	        d«      ‚ ||j                  «      }t        j                  |j                  |«      }|j                  › d|› d�}t        j                  ||dd	¬
«      }|j                   dk7  rt	        d|j                   › �«      ‚t#        j$                  |j&                  «      }|j)                  d«      }g d¢}d„ }g }|D ]ƒ  }|j+                   ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«       ||d«      g«       Œ… |j-                  dd«      j-                  d d!«      d"d# }d$|	fd%|
fd&|fd'|fg}t/        d(d)d	¬*«      }t/        d(d)dd+¬,«      }|d-k(  �r@t1        «       }|j                  }d.|_        t/        d(d/dd0¬,«      }t5        d+d+d1¬2«      }t7        d3d3d¬4«      } t/        d(d)¬5«      }!t7        d3d¬6«      }"t9        t;        d7d8¬9«      t;        d7d8¬9«      t;        d7d8¬9«      t;        d7d8¬9«      ¬:«      }#d;}$|D ]b  \  }%}&|j=                  |$d;|%¬<«      }'||'_        t7        d3¬=«      |'_         |j=                  |$d>|&¬<«      }(||(_        t7        d3¬=«      |(_         |$d;z  }$Œd |$d;z   })tC        |d;«      D ]5  \  }*}+|j=                  |)|*|+¬<«      },||,_        ||,_"        | |,_         |#|,_#        Œ7 tC        ||)d;z   «      D ]B  \  }-}.tC        |.d;«      D ].  \  }*}/|j=                  |-|*|/¬<«      },|!|,_        |"|,_         |#|,_#        Œ0 ŒD g d?¢}0d}1tC        |0d;«      D ]8  \  }*}2|j=                  |)|*¬@«      jH                  }3|2|jJ                  |3   _&        |3}1Œ: |)tO        |«      z   }4dA|)› dB|1› |4› �|jP                  _)        dA|)d;z   › �|_*        dC}5dD|› |5› �}6|jW                  |6«       �n|tY        jZ                  «       }7t]        t^        «      }8ta        |7|8d;tb        z  d;tb        z  d;tb        z  d;tb        z  ¬E«      }9te        «       }:tg        dF|:dG   dHdIth        jj                  tl        d)¬J«      };tg        dK|:dG   dLdItn        d)¬M«      }<|D �=cg c]  }=tq        |=|;«      ‘Œ }>}=|>g}?|D ]2  }.|?j+                  |.D �@cg c]  }@tq        |@r@d"d# nd|<«      ‘Œ c}@«       Œ4 g dN¢}Ats        |?|Ad;¬O«      }B|Bju                  tw        dPdQdRti        jx                  dS«      fdTdQdRth        jj                  fdUdVdWdQdXdYti        jx                  dZ«      fd[d\dXth        jj                  ti        jx                  d]«      gfd^d_d`dag
«      «       tg        db|:dG   dLdctn        dd¬M«      }Ctg        de|:dG   dHdcti        jx                  dS«      tn        dd¬J«      }Dg }E|D ]&  \  }%}&Ej+                  tq        df|%› dg|&› �C«      «       Œ( Ej+                  t{        d;dhtb        z  «      «       |Ej+                  B«       |9j}                  |E«       di}5dD|› |5› �}6t        |6dj«      5 }F|Fj�                  |7jƒ                  «       «       d"d"d"«       t        |«      }G	 Gj                  t„        «      j                  t„        j†                  |k(  «      j                  «       }H|Hr7dkH_D        dl|j‹                  «       › dm�|H_F        dn|H_G        Gj‘                  «        Gj“                  «        	 |j“                  «        y"# t        $ r Y �Œ]w xY wc c}=w c c}@w # 1 sw Y   ŒÍxY w# Gj“                  «        w xY w# t        $ r«}It        |«      }G	 Gj                  t„        «      j                  t„        j†                  |k(  «      j                  «       }H|Hr*doH_D        t•        I«      d"dp |H_K        Gj‘                  «        Gj“                  «        n# Gj“                  «        w xY wY d"}I~IŒûd"}I~Iww xY w# |j“                  «        w xY w)qz]Hilo de fondo: descarga index.xml, genera Excel/PDF, guarda en /tmp y actualiza SyncProgress.r   r   r¢   TzNo hay conexion Alfresco activar¤   r¥   r¦   F)r©   r§   r¨   rª   r«   ÚDocumentoIndizado)ÚIdÚOrdenzNombre DocumentozTipologia DocumentalzFecha CreacionzFecha IncorporacionÚAutorÚVersionzValor HuellazFuncion ResumenzPagina Inicioz
Pagina FinÚFormatoÚTamanoc                 óx   — | j                  |«      }|�&|j                  r|j                  j                  «       S dS )Nr¢   )Úfindr¶   Ústrip)ÚelÚtagÚchilds      r=   Ú_textz*_generate_index_report_file.<locals>._texty  s2   € Ø—G‘G˜C“LˆEØ).Ð):¸u¿zºz�5—:‘:×#Ñ#Ó%ÐQÈrÐQr?   rã   ÚOrden_Documento_ExpedienteÚNombre_DocumentoÚTipologia_DocumentalÚFecha_Creacion_DocumentoÚFecha_Incorporacion_Expedienterå   ræ   ÚValor_HuellaÚFuncion_ResumenÚPagina_InicioÚ
Pagina_Finrç   rè   ú/ú-ú Ú_Né<   ÚDependenciaÚSerieÚSubserieÚRutaÚCalibrié	   )r4   ÚsizeÚboldÚ6366F1)r4   r  r  ÚcolorÚexcelzIndice Electronicoé
   ÚFFFFFFÚsolid)Ústart_colorÚ	end_colorÚ	fill_typeÚcenter)Ú
horizontalÚverticalÚ	wrap_text)r4   r  )r  r  ÚthinÚD1D5DB)Ústyler  )ÚleftÚrightÚtopÚbottomrM   )rf   ÚcolumnÚvalue)r  ru   )r¦   é   é    é   é   r  é   r	  é   r	  r	  r	  r	  r	  )rf   r  ÚAú:ú.xlsxú/tmp/index_report_)ÚpagesizeÚ
leftMarginÚrightMarginÚ	topMarginÚbottomMarginÚheader_styleÚNormalzHelvetica-Boldé   )ÚparentÚfontNameÚfontSizeÚ	textColorÚ	alignmentÚleadingÚ
cell_styleÚ	Helvetica)r.  r/  r0  r2  r3  )rý   é   éx   éP   é8   r9  r8  é(   éd   r:  r:  r:  é,   r:  )Ú	colWidthsÚ
repeatRowsÚ
BACKGROUND©r   r   ©éÿÿÿÿr   z#6366F1Ú	TEXTCOLOR)ÚALIGNr@  rA  ÚCENTER)ÚVALIGNr@  ©rB  rB  ÚMIDDLEÚGRIDrG  g      à?z#D1D5DBÚROWBACKGROUNDS)r   rM   z#F3F4F6)Ú
TOPPADDINGr@  rG  rÐ   )ÚBOTTOMPADDINGr@  rG  rÐ   )ÚLEFTPADDINGr@  rG  é   )ÚRIGHTPADDINGr@  rG  rN  Ú
info_styleé   é   Ú
info_labelz<font color='#6366F1'><b>z:</b></font> gš™™™™™Ù?ú.pdfÚwbÚ	completedzReporte z	 generador;  Úerrorr­   )LÚapp.services.auth_servicer   rÎ   rà   r·   rS   r   rT   r®   rU   r°   r±   r²   r³   r´   r]   rH   r   Ú
fromstringr¬   Úfindallr^   Úreplacer   r   r_   r   r   r   r   ÚcellÚfontr2  Ú	enumerateÚfillÚborderÚcolumn_letterÚcolumn_dimensionsÚwidthr`   Úauto_filterÚrefÚfreeze_panesÚsaveÚioÚBytesIOr   r   r!   r   r&   r'   r    Úwhiter(   r)   r$   r"   ÚsetStyler#   ÚHexColorr%   ÚbuildÚopenÚwriteÚgetvaluer   rƒ   r„   Úupperr…   r’   r�   Úcloser¸   Úerror_message)JrC   r7   rm   ÚfmtÚjob_idr�   rj   r   rØ   rÜ   rÝ   rÞ   rß   r¹   rº   r©   r»   r½   ÚrootÚdocsÚcolumnsrï   ÚrowsÚdocÚ	safe_nameÚheader_infoÚ	info_fontÚinfo_label_fontrU  ÚwsÚheader_fontÚheader_fillÚheader_alignÚ	cell_fontÚ
cell_alignÚthin_borderÚinfo_rowÚlabelr  ÚclÚcvÚtable_startÚciÚcol_namer\  ÚriÚrow_dataÚvalÚ
col_widthsÚlast_col_letterÚwÚletterÚdata_endÚextÚpathÚ
pdf_bufferÚpage_wÚdoc_pdfÚstylesr+  r4  rp   Ú	hdr_cellsÚ
table_dataÚvÚcol_widths_pdfÚtblrP  Úinfo_label_styleÚelementsr-   Údb3Úpr¿   sJ                                                                             r=   Ú_generate_index_report_filer¤  Y  sý  € å<Ü
˜Ó
€CðzØ-/°°R¸Ð-DÑ*ˆ�U˜H dÙðÜ5JÈ3ÐPYÓ5ZÑ2�˜U H¨dð �y‰yÔ+Ó,×3Ñ3Ô4F×4MÑ4MÐQUÑ4UÓV×\Ñ\Ó^ˆÙÜÐ=Ó>Ð>á  ×!3Ñ!3Ó4ˆÜ�‰˜tŸ}™}¨cÓ2ˆØ—‘�ÐXÐYjÐXkÐksÐtˆÜ�y‰y˜ 4°¸EÔBˆØ×Ñ˜sÒ"ÜÐ6°t×7GÑ7GÐ6HÐIÓJÐJä×Ñ §¡Ó-ˆØ�|‰|Ð/Ó0ˆò
ˆò	Rð ˆØò 	ˆCØ�K‰KÙ�c˜4Ó Ù�cÐ7Ó8Ù�cÐ-Ó.Ù�cÐ1Ó2Ù�cÐ5Ó6Ù�cÐ;Ó<Ù�c˜7Ó#Ù�c˜9Ó%Ù�c˜>Ó*Ù�cÐ,Ó-Ù�c˜?Ó+Ù�c˜<Ó(Ù�c˜9Ó%Ù�c˜8Ó$ðõ ð	ð$  ×'Ñ'¨¨SÓ1×9Ñ9¸#¸sÓCÀCÀRÐHˆ	ð ˜KÐ(Ø�eÐØ˜Ð"Ø�TˆNð	
ˆô ˜i¨a°eÔ<ˆ	Ü I°A¸DÈÔQˆà�'‹>Ü“ˆBØ—‘ˆBØ+ˆBŒHä I°B¸TÈÔRˆKÜ%°(ÀhÐZaÔbˆKÜ$°À8ÐW[Ô\ˆLÜ )°!Ô4ˆIÜ"¨HÀÔEˆJÜ Ü ¨hÔ7Ü ¨xÔ8Ü˜v¨XÔ6Ü &°Ô9ô	ˆKð ˆHØ +ò ‘��uØ—W‘W °!¸5�WÓA�Ø)�”Ü(°(Ô;�”Ø—W‘W °!¸5�WÓA�Ø#�”Ü(°(Ô;�”Ø˜A‘‘ðð # Q™,ˆKÜ )¨'°1Ó 5ò *‘��HØ—w‘w ;°rÀ�wÓJ�Ø'�”	Ø'�”	Ø!-�”Ø)�•ð*ô !*¨$°¸a±Ó @ò .‘��HÜ(¨°1Ó5ò .‘G�B˜ØŸ7™7 r°"¸C˜7Ó@�DØ )�D”IØ%/�D”NØ"-�D•Kñ	.ð.ò QˆJØ ˆOÜ" :¨qÓ1ò )‘��AØŸ™ [¸˜Ó<×JÑJ�Ø56�×$Ñ$ VÑ,Ô2Ø"(‘ð)ð
 #¤S¨£YÑ.ˆHØ#$ [ M°°?Ð2CÀHÀ:Ð!NˆB�N‰NÔØ ! +°¡/Ð!2Ð3ˆBŒOàˆCØ'¨ x°¨uÐ5ˆDØ�G‰G�DŽMô Ÿ™›ˆJÜœr“]ˆFÜ'¨
¸VÐPQÔRTÑPTÐbcÔdfÑbfÐrsÔtvÑrvð  FGô  HJñ  FJô  KˆGÜ(Ó*ˆFä)¨.ÀÈÑAQÐ\lÐwxô  EK÷  EQñ  EQô  ]fð  pqô  rˆLÜ'¨¸VÀHÑ=MÐXcÐnoô  |Cð  MNô  OˆJà=DÖE¸œ 1 lÕ3ÐEˆIÐEØ#˜ˆJØ ò b�Ø×!Ñ!ÐW_Ö"`ÐRS¤9±q¨Q¨s°©V¸bÀ*Õ#MÒ"`Õaðbò XˆNÜ˜
¨nÈÔKˆCØ�L‰LœØ˜v w´·±À	Ó0JÐKØ˜f g¬v¯|©|Ð<Ø4Ø6Ø˜ ¨3´·±À	Ó0JÐKØ! 6¨8´f·l±lÄFÇOÁOÐT]ÓD^Ð5_Ð`Ø3Ø6Ø4Ø5ð%ó ô ô (¨¸VÀHÑ=MÐXcÐnoô  |Cð  MOô  PˆJÜ-¨lÀ6È(ÑCSÐ^nÐyzô  GM÷  GVñ  GVð  W`ó  Gaô  mtð  ~@ô   AÐàˆHØ +ò p‘��uØ—‘¤	Ð,EÀeÀWÈMÐZ_ÐY`Ð*aÐcmÓ nÕoðpà�O‰OœF 1 c¬"¡fÓ-Ô.Ø�O‰O˜CÔ Ø�M‰M˜(Ô#àˆCØ'¨ x°¨uÐ5ˆDÜ�d˜DÓ!ð / QØ—‘˜
×+Ñ+Ó-Ô.÷/ô ˜FÓ#ˆð	Ø—	‘	œ,Ó'×.Ñ.¬|×/CÑ/CÀvÑ/MÓN×TÑTÓVˆAÙØ&�”Ø& s§y¡y£{ m°9Ð=�”	Ø �”
Ø—
‘
”à�I‰I�Kð 	�	‰	�øôk ò Úðüòx Fùò #a÷:/ð /ûð �I‰I�Kûäò 	Ü˜FÓ#ˆð	Ø—	‘	œ,Ó'×.Ñ.¬|×/CÑ/CÀvÑ/MÓN×TÑTÓVˆAÙØ"�”Ü"% a£&¨¨# ,�”Ø—
‘
”à�I‰I�KøˆC�I‰I�KúŒKûð	ûð 	�	‰	�úsµ   “^> ¡^ ²S^> Ó:^Ô^> Ô&^
Õ E1^> Ú1 ^Û^> Û%A<^) Ý!^> Ý1a5 Þ	^Þ^> Þ^Þ^> Þ^&Þ"^> Þ)^;Þ;^> Þ>	a2ßa-ßA/aáa-áa%á%a-á(a5 á-a2á2a5 á5bz/{node_id}/index-reportz&Generar reporte del indice electronicozŠInicia la generacion asincrona de un reporte tabla (Excel o PDF) desde el index.xml. Devuelve un job_id para consultar estado y descargar.zNNode ID del archivo index.xml en Alfresco o de la Serie, Subserie o Expedienter  zFormato de salida: excel o pdfÚformatc              ƒ   ó°  ‡‡‡‡‡	‡
‡K  — ‰dvrt        dd¬«      ‚d Š	dŠd }‰j                  t        «      j                  t        j                  | k(  «      j                  «       }|r0|j                  Š|j                  }|j                  r|j                  Š	‰	s_‰j                  t        «      j                  t        j                  | k(  «      j                  «       }|r|j                  Š|j                  }| Š	‰	s| Š	dŠ‰	st        dd¬«      ‚t        t        j                  «       «      Š
t        ‰
|d	d
‰j                  «       › d�¬«      }‰j                  |«       ‰j                  «        t!        j"                  «       xs t$        j&                  Š|r|j                  nd Šˆˆˆˆˆ	ˆ
ˆfd„}t)        j*                  |d¬«      j-                  «        d‰
dœS ­w)N)r  Úpdfr�   z%Formato invalido. Use 'excel' o 'pdf'rG   r¢   r£   rE   z$No se encontro el indice electronicor   zGenerando reporte z del indice...)rƒ   rB   r„   r…   c            	      ó(   •— t        ‰ ‰‰‰‰‰‰«       y rÒ   )r¤  )rC   r�   rm   r¥  r7   ru  Úreport_folder_ids   €€€€€€€r=   Ú
run_reportz&start_index_report.<locals>.run_reportG  s   ø€ Ü# BÐ(9¸;ÈÐPVÐX^Ð`pÕqr?   T)ÚtargetÚdaemon)r†   ru  )r   rS   r   rT   r2   rU   r4   rB   r7   r¸   ÚuuidÚuuid4r   rq  rŒ   r�   r   r]   r   rŠ   Ú	threadingÚThreadÚstart)r    r¥  rC   rB   rn   r’   rª  r�   rm   r7   ru  r©  s    ``    @@@@@r=   Ústart_index_reportr²    s˜  þè ø€ ð Ð%Ñ%Ü¨Ð4[Ô\Ð\àÐØ€KØ€Gà�X‰X”nÓ%×,Ñ,¬^×->Ñ->À'Ñ-IÓJ×PÑPÓR€FÙØ—k‘kˆØ—.‘.ˆØ×#Ò#Ø &× 8Ñ 8ÐÙØ—‘œ.Ó)×0Ñ0´×1QÑ1QÐU\Ñ1\Ó]×cÑcÓeˆÙØ Ÿ+™+ˆKØ—n‘nˆGØ 'ÐÙØ#ÐØ!ˆáÜ¨Ð4ZÔ[Ð[ä”—‘“Ó€FÜØØØØ$ V§\¡\£^Ð$4°NÐCô	€Hð ‡F�Fˆ8ÔØ‡I�I„Kä×"Ñ"Ó$Ò=¬×(=Ñ(=€FÙ$*�v—y’y°Ð÷rò rô ×Ñ˜J¨tÔ4×:Ñ:Ô<Ø &Ñ)Ð)ùs   ‰GGz/index-report-statuszEstado de reporte de indicezSConsulta el estado de generacion de un reporte de indice electronico por su job_id.zID del trabajoru  c              ƒ   óÖ   K  — |j                  t        «      j                  t        j                  | k(  «      j	                  «       }|sddiS |j
                  |j                  xs ddœS ­w)Nr„   Ú	not_foundr¢   )r„   rW  )rS   r   rT   rƒ   rU   r„   rs  )ru  rC   r’   s      r=   Úindex_report_statusrµ  N  s]   è ø€ ð
 �x‰xœÓ%×,Ñ,¬\×-AÑ-AÀVÑ-KÓL×RÑRÓT€HÙØ˜+Ð&Ð&Ø—o‘o°×0FÑ0FÒ0LÈ"ÑMÐMùs   ‚A'A)z/index-report-downloadzDescargar reporte de indicezKDescarga el archivo Excel o PDF del reporte de indice electronico generado.zFormato del archivo generadoc              ƒ   óú  K  — |j                  t        «      j                  t        j                  | k(  «      j	                  «       }|r|j
                  dk7  rt        dd¬«      ‚|dk(  rdnd}|dk(  rdnd	}d
| › |› �}t        j                  j                  |«      st        dd¬«      ‚|j                  |«       |j                  «        ddlm}  |«       j                  d«      }d|› |› �}	t        ||	|¬«      S ­w)NrV  rE   zReporte no disponiblerG   r  r$  rT  zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetzapplication/pdfr%  zArchivo no encontrador   )Únowz%Y%m%d_%H%M%SÚindice_)ÚfilenameÚ
media_type)rS   r   rT   rƒ   rU   r„   r   Úosr–  ÚexistsÚdeleter�   Úapp.services.timezoner·  Ústrftimer
   )
ru  r¥  rC   r’   r•  Úcontent_typer–  ÚtznowÚtsÚfnames
             r=   Úindex_report_downloadrÄ  Y  sð   è ø€ ð �x‰xœÓ%×,Ñ,¬\×-AÑ-AÀVÑ-KÓL×RÑRÓT€HÙ�x—‘¨+Ò5Ü¨Ð4KÔLÐLà˜wÒ&‰'¨F€Cð �WÒñ 	LØ"3ð ð   ˜x¨ uÐ-€DÜ�7‰7�>‰>˜$ÔÜ¨Ð4KÔLÐLà‡I�IˆhÔØ‡I�I„Kå2Ù	‹×	Ñ	˜/Ó	*€BØ�b�T˜#˜Ð€EÜ˜ u¸ÔFÐFùs   ‚C9C;u!   Eliminar cuadro de clasificaciÃ³nziBorra todas las Series, Subseries y Expedientes del sitio de la base de datos local (no afecta Alfresco).c              ƒ   óº   K  — |j                  t        «      j                  t        j                  | k(  «      j	                  «        |j                  «        dddœS ­w)NTu"   Cuadro de clasificaciÃ³n eliminado)r†   r…   )rS   r   rT   rB   r½  r�   )rB   rC   s     r=   Úclear_site_foldersrÆ  u  sF   è ø€ à‡H�HŒ^Ó×#Ñ#¤N×$:Ñ$:¸gÑ$EÓF×MÑMÔOØ‡I�I„KØÐ#GÑHÐHùs   ‚AA)YÚsysr–  ÚinsertÚapp.schemasr   Úfastapir   r   r   r   r   Úfastapi.responsesr	   r
   rÊ   r   rË   r   r   r   Úapp.models.alfresco_siter   Úapp.models.alfresco_connectionr   Úapp.models.alfresco_folderr   Úapp.models.sync_progressr   rX  r   Ú
app.configr   r±   rh  r»  r­  r¯  Úlxmlr   Úopenpyxlr   Úopenpyxl.stylesr   r   r   r   r   Úreportlab.lib.pagesizesr   r   Úreportlab.lib.unitsr   Úreportlab.libr    Úreportlab.platypusr!   r"   r#   r$   r%   Úreportlab.lib.stylesr&   r'   Úreportlab.lib.enumsr(   r)   ÚrouterÚdictr>   r]   Úintri   r¸   rr   rz   Úpostr‚   rš   rœ   rž   rÀ   rÎ   rà   r¤  r²  rµ  rÄ  r½  rÆ  © r?   r=   ú<module>rß     s?  ðÛ 
Ø ‡�‡��Ð1Ô 2å 'ç BÕ Bß 4Ý "ç GÑ GÝ 1Ý =Ý 5Ý 1Ý 8Ý Û Û 	Û 	Û Û Ý Ý ß FÕ Fß 1Ý "Ý  ß VÕ Vß Dß 2á	Ð+°9°+Ô	>€ð˜ð ¨Dó ð ‡�ÐÐ'Ið  XW€ó  XÙ*.¨sÐ@WÔ*XÑhoÐpvÓhwñ * Cð *Ð^eò *ó Xð*ðZ ‡�Ð#Ð-Nð  ]C€ó  DÙ/3°Cð  FDô  0Eñ  U\ð  ]có  Udñ ¨ð ð  KRò ó Dðð> ‡�Ð$Ð.?ÐMv€ÓwÙ(,¨S«	¹EÀ#»JÑV]Ð^dÓVeñ  #ð °cð ÈGò ó xðð ‡�Ð#Ð-Ið  X~€ó  Ù+/°ÐA]Ô+^Ðx|ñ  MTð  U[ó  M\ñ x Sð xÐfuð xð  CJò xó ðxðD ‡�Ð$Ð.Sð  bj€ó  kÙ)-¨c¸~Ô)NÑ^eÐflÓ^mñ  3ð ÐT[ò ó kðð$ ‡�Ð(Ð2mð  |h€ó  iÙ26°sÐHtÔ2uñ  FMð  NTó  FUñ ¨Cð ð  |Cò ó iðð  ‡�Ð Ð*Tð  ca€ó  bÙ04°Sð  GAô  1Bð  \`ñ  pwð  x~ó  pñ A¨#ð Að  JYð Að  fmò Aó bðAð@ ‡�Ð"Ð,Jð  YI€ó  JÙ.2°3ð  ETô  /Uñ  elð  msó  etñ 9<¨ð 9<ð  [bò 9<ó Jð9<ðxJ˜#ó Jò.ò6~ðB ‡�Ð%Ð/Wð  fr€ó  sá˜Ð)yÔzÙ˜Ð-MÔNÙ˜&“/ñ0*Øð0*àð0*ð 	ò0*ó sð0*ðf ‡�Ð"Ð,Ið  Xm€ó  ná˜Ð)9Ô:Ù˜&“/ñNØðNàòNó nðNð ‡�Ð$Ð.Kð  Zg€ó  há˜Ð)9Ô:Ù˜Ð-KÔLÙ˜&“/ñGØðGàðGð 	òGó hðGð6 ‡�Ð Ð*Mð  \G€ó  HÙ,0°À.Ô,QÑahÐioÓapñ I cð IÐW^ò Ió HñIr?   