From b2143821d2bca1c2068502cc1092545f67ef5f08 Mon Sep 17 00:00:00 2001 From: fedpo Date: Mon, 2 Dec 2024 22:53:04 +0000 Subject: [PATCH] Bueno combinados los forms de nacho y mios --- Controladora/ControladoraClientes.cs | 6 ++ Controladora/ControladoraInformes.cs | 9 +- Modelo/RepositorioFactura.cs | 11 ++- .../FrmInformeFacturaPorFecha.Designer.cs | 5 + Vista/Informes/FrmInformeFacturaPorFecha.cs | 67 ++++++++++++- .../FrmInformeFacturasPorCliente.Designer.cs | 14 ++- .../Informes/FrmInformeFacturasPorCliente.cs | 90 +++++++++++++++++- Vista/daslug.db | Bin 167936 -> 0 bytes 8 files changed, 186 insertions(+), 16 deletions(-) delete mode 100644 Vista/daslug.db diff --git a/Controladora/ControladoraClientes.cs b/Controladora/ControladoraClientes.cs index d450dc0..9a69fda 100644 --- a/Controladora/ControladoraClientes.cs +++ b/Controladora/ControladoraClientes.cs @@ -58,5 +58,11 @@ namespace Controladora .ToList() .AsReadOnly(); } + public ReadOnlyCollection ListarTodos() + { + return repositorioClientes.Listar() + .ToList() + .AsReadOnly(); + } } } diff --git a/Controladora/ControladoraInformes.cs b/Controladora/ControladoraInformes.cs index a251529..9c80051 100644 --- a/Controladora/ControladoraInformes.cs +++ b/Controladora/ControladoraInformes.cs @@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Conventions; using Modelo; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Text.Json; @@ -18,20 +19,20 @@ namespace Controladora private RepositorioFactura repositorioFactura = new(new Context()); - public List? MostrarFacturasEnRangoDeFechas(DateTime FechaInicio, DateTime FechaFinal) + public ReadOnlyCollection? MostrarFacturasEnRangoDeFechas(DateTime FechaInicio, DateTime FechaFinal) { if (FechaFinal < FechaInicio) return null; - List list = repositorioFactura.ObtenerFacturasEnRangoFechas(FechaInicio, FechaFinal); + ReadOnlyCollection list = repositorioFactura.ObtenerFacturasEnRangoFechas(FechaInicio, FechaFinal); return list; } - public List? MostrarFacturasDeClienteEnRangoDeFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) + public ReadOnlyCollection? MostrarFacturasDeClienteEnRangoDeFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) { if (fecFin < fecInicio) return null; if (cli.Cuit <= 0) return null; - List list = repositorioFactura.ObtenerFacturasDeClienteEnRangoFechas(cli, fecInicio, fecFin); + ReadOnlyCollection list = repositorioFactura.ObtenerFacturasDeClienteEnRangoFechas(cli, fecInicio, fecFin); return list; } diff --git a/Modelo/RepositorioFactura.cs b/Modelo/RepositorioFactura.cs index e9f2e67..fabb3ca 100644 --- a/Modelo/RepositorioFactura.cs +++ b/Modelo/RepositorioFactura.cs @@ -68,22 +68,25 @@ namespace Modelo return factura; } - public List ObtenerFacturasDeClienteEnRangoFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) + public ReadOnlyCollection ObtenerFacturasDeClienteEnRangoFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) { return context.Facturas .AsNoTracking() .Include(x => x.Detalles) + .ThenInclude(x => x.Producto) .Include(x => x.Cliente) .Where(x => x.Fecha > fecInicio && x.Fecha < fecFin && x.Cliente.Cuit == cli.Cuit) - .ToList(); + .ToList().AsReadOnly(); } - public List ObtenerFacturasEnRangoFechas(DateTime fecInicio, DateTime fecFinal) + public ReadOnlyCollection ObtenerFacturasEnRangoFechas(DateTime fecInicio, DateTime fecFinal) { return context.Facturas .AsNoTracking() .Include(x => x.Detalles) + .ThenInclude(x=>x.Producto) + .Include(x => x.Cliente) .Where(x => (x.Fecha > fecInicio && x.Fecha < fecFinal)) - .ToList(); + .ToList().AsReadOnly(); } diff --git a/Vista/Informes/FrmInformeFacturaPorFecha.Designer.cs b/Vista/Informes/FrmInformeFacturaPorFecha.Designer.cs index 53e5f74..087a597 100644 --- a/Vista/Informes/FrmInformeFacturaPorFecha.Designer.cs +++ b/Vista/Informes/FrmInformeFacturaPorFecha.Designer.cs @@ -50,6 +50,7 @@ btnBuscar.TabIndex = 0; btnBuscar.Text = "Hacer Busqueda"; btnBuscar.UseVisualStyleBackColor = true; + btnBuscar.Click += btnBuscar_Click; // // dateInicio // @@ -69,6 +70,8 @@ // dgvFactura.AllowUserToAddRows = false; dgvFactura.AllowUserToDeleteRows = false; + dgvFactura.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dgvFactura.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; dgvFactura.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvFactura.EditMode = DataGridViewEditMode.EditProgrammatically; dgvFactura.Location = new Point(271, 24); @@ -78,11 +81,13 @@ dgvFactura.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvFactura.Size = new Size(475, 469); dgvFactura.TabIndex = 3; + dgvFactura.CellClick += dgvFactura_CellClick; // // dgvDetalles // dgvDetalles.AllowUserToAddRows = false; dgvDetalles.AllowUserToDeleteRows = false; + dgvDetalles.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dgvDetalles.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvDetalles.EditMode = DataGridViewEditMode.EditProgrammatically; dgvDetalles.Location = new Point(763, 24); diff --git a/Vista/Informes/FrmInformeFacturaPorFecha.cs b/Vista/Informes/FrmInformeFacturaPorFecha.cs index 166cede..edec856 100644 --- a/Vista/Informes/FrmInformeFacturaPorFecha.cs +++ b/Vista/Informes/FrmInformeFacturaPorFecha.cs @@ -1,5 +1,8 @@ -using System; +using Controladora; +using Entidades; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Drawing; @@ -12,9 +15,69 @@ namespace Vista.Informes { public partial class FrmInformeFacturaPorFecha : Form { + private ReadOnlyCollection? facturas; public FrmInformeFacturaPorFecha() { InitializeComponent(); } + + private void btnBuscar_Click(object sender, EventArgs e) + { + if (dateInicio.Value >= dateFin.Value) + { + MessageBox.Show("La fecha de inicio no puede ser mayor que la fecha final.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + facturas = ControladoraInformes.Instance.MostrarFacturasEnRangoDeFechas(dateInicio.Value, dateFin.Value); + + + if (facturas == null) + { + MessageBox.Show("No se encontraron facturas en el rango de fechas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + RefrescarTablaFacturas(facturas); + + } + private void RefrescarTablaFacturas(ReadOnlyCollection list) + { + dgvDetalles.DataSource = null; + dgvFactura.DataSource = null; + dgvFactura.DataSource = list; + foreach (DataGridViewColumn column in dgvFactura.Columns) + { + column.Visible = column.Name == "Id" || column.Name == "Total" || column.Name == "Fecha" || column.Name == "NombreCliente"; + } + } + + private void dgvFactura_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (dgvFactura.SelectedRows.Count <= 0) + { + MessageBox.Show("Falta seleccionar una linea"); + return; + } + + Factura? fac = (Factura)dgvFactura.SelectedRows[0].DataBoundItem; + + fac = facturas.FirstOrDefault(x => x.Id == fac.Id); + if (fac == null) + { + MessageBox.Show("No se logro encontrar la factura"); + return; + } + + RefrescarTablaDetalles(fac.Detalles); + } + private void RefrescarTablaDetalles(List list) + { + dgvDetalles.DataSource = null; + dgvDetalles.DataSource = list; + foreach (DataGridViewColumn column in dgvDetalles.Columns) + { + column.Visible = column.Name == "Subtotal" || column.Name == "NombreProducto" || column.Name == "Cantidad"; + } + } } -} +} \ No newline at end of file diff --git a/Vista/Informes/FrmInformeFacturasPorCliente.Designer.cs b/Vista/Informes/FrmInformeFacturasPorCliente.Designer.cs index a5942b9..b9a4344 100644 --- a/Vista/Informes/FrmInformeFacturasPorCliente.Designer.cs +++ b/Vista/Informes/FrmInformeFacturasPorCliente.Designer.cs @@ -49,7 +49,7 @@ // btnEnviarEmail.Location = new Point(20, 470); btnEnviarEmail.Name = "btnEnviarEmail"; - btnEnviarEmail.Size = new Size(200, 26); + btnEnviarEmail.Size = new Size(239, 26); btnEnviarEmail.TabIndex = 19; btnEnviarEmail.Text = "Enviar Informe Por Email"; btnEnviarEmail.UseVisualStyleBackColor = true; @@ -108,6 +108,8 @@ // dgvFactura.AllowUserToAddRows = false; dgvFactura.AllowUserToDeleteRows = false; + dgvFactura.AllowUserToResizeColumns = false; + dgvFactura.AllowUserToResizeRows = false; dgvFactura.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvFactura.EditMode = DataGridViewEditMode.EditProgrammatically; dgvFactura.Location = new Point(265, 29); @@ -117,29 +119,31 @@ dgvFactura.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvFactura.Size = new Size(475, 469); dgvFactura.TabIndex = 13; + dgvFactura.CellClick += dgvFactura_CellClick; // // dateFin // dateFin.Location = new Point(20, 77); dateFin.Name = "dateFin"; - dateFin.Size = new Size(200, 23); + dateFin.Size = new Size(239, 23); dateFin.TabIndex = 12; // // dateInicio // dateInicio.Location = new Point(20, 29); dateInicio.Name = "dateInicio"; - dateInicio.Size = new Size(200, 23); + dateInicio.Size = new Size(239, 23); dateInicio.TabIndex = 11; // // btnBusqueda // btnBusqueda.Location = new Point(20, 438); btnBusqueda.Name = "btnBusqueda"; - btnBusqueda.Size = new Size(200, 26); + btnBusqueda.Size = new Size(239, 26); btnBusqueda.TabIndex = 10; btnBusqueda.Text = "Hacer Busqueda"; btnBusqueda.UseVisualStyleBackColor = true; + btnBusqueda.Click += btnBusqueda_Click; // // dgvCliente // @@ -152,7 +156,7 @@ dgvCliente.Name = "dgvCliente"; dgvCliente.RowHeadersVisible = false; dgvCliente.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dgvCliente.Size = new Size(200, 306); + dgvCliente.Size = new Size(239, 306); dgvCliente.TabIndex = 20; // // label5 diff --git a/Vista/Informes/FrmInformeFacturasPorCliente.cs b/Vista/Informes/FrmInformeFacturasPorCliente.cs index fa2bb93..cf136db 100644 --- a/Vista/Informes/FrmInformeFacturasPorCliente.cs +++ b/Vista/Informes/FrmInformeFacturasPorCliente.cs @@ -1,5 +1,9 @@ -using System; +using Controladora; +using Entidades; +using Modelo; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Drawing; @@ -12,9 +16,93 @@ namespace Vista.Informes { public partial class FrmInformeFacturasPorCliente : Form { + private ReadOnlyCollection facturas; public FrmInformeFacturasPorCliente() { InitializeComponent(); + IniciarTablaClientes(); + } + + private void IniciarTablaClientes() + { + dgvCliente.DataSource = ControladoraClientes.Instance.ListarTodos(); + foreach (DataGridViewColumn column in dgvCliente.Columns) + { + column.Visible = column.Name == "Cuit" || column.Name == "NombreCompleto"; + } + } + + private void btnBusqueda_Click(object sender, EventArgs e) + { + if (Check()) + { + Cliente cli = (Cliente)dgvCliente.SelectedRows[0].DataBoundItem; + var lista = ControladoraInformes.Instance.MostrarFacturasDeClienteEnRangoDeFechas(cli, dateInicio.Value, dateFin.Value); + + if (lista == null) + { + MessageBox.Show("Hubo un error obteniendo la lista de Facturas para el cliente"); + return; + } + + RefrescarTablaFacturas(lista); + facturas = lista; + } + } + + private bool Check() + { + bool ret = true; + string msg = ""; + if (dateInicio.Value >= dateFin.Value) msg += "La fecha final no puede ser igual o mayor que la de inicio\n"; + if (dgvCliente.SelectedRows.Count <= 0) msg += "Tenes que seleccionar un cliente primero\n"; + + if (msg != "") + { + MessageBox.Show(msg); + ret = false; + } + return ret; + } + + private void RefrescarTablaFacturas(ReadOnlyCollection list) + { + dgvDetalle.DataSource = null; + dgvFactura.DataSource = null; + dgvFactura.DataSource = list; + foreach (DataGridViewColumn column in dgvFactura.Columns) + { + column.Visible = column.Name == "Id" || column.Name == "Total" || column.Name == "Fecha" || column.Name == "NombreCliente"; + } + } + + private void dgvFactura_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (dgvFactura.SelectedRows.Count <= 0) + { + MessageBox.Show("Falta seleccionar una linea"); + return; + } + + Factura? fac = (Factura)dgvFactura.SelectedRows[0].DataBoundItem; + + fac = facturas.FirstOrDefault(x => x.Id == fac.Id); + if (fac == null) + { + MessageBox.Show("No se logro encontrar la factura"); + return; + } + + RefrescarTablaDetalles(fac.Detalles); + } + private void RefrescarTablaDetalles(List list) + { + dgvDetalle.DataSource = null; + dgvDetalle.DataSource = list; + foreach (DataGridViewColumn column in dgvDetalle.Columns) + { + column.Visible = column.Name == "Subtotal" || column.Name == "NombreProducto" || column.Name == "Cantidad"; + } } } } diff --git a/Vista/daslug.db b/Vista/daslug.db deleted file mode 100644 index 55eafed641222927222448c9550a818f8a2612ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167936 zcmeI*Pi)&*eg|;Tc0^mT;>m7iIGMy_hMBYx5>Mh}vd(l7Y&8<)Xd+9FED!7g1A&oV zGQ`NDLsG%a7F|I3GqZE(ZBKjbVGrH*)Ju1<*P`gHXb(Mf4?PuV(L;d+76bIsM~aW+ z;~!bs%`80f*TBXy-yiP=pudIC=d_QrnRg%l_X%1$v-Df1&c&twTl($d&vU<7`1Sn#Y<~XK+@~`? znYll6Kdl37|CR|9Pi3W@YeGivcgbhg;~vefwl=U0_wV+WX>-wx(rBvHjk=3)nbLX{-NJ(0R4Zyzt(Vkohu!alsw-ZNMqMteHI>dz zskmJ#meqW&@NDIzC>09Ai_hI@ZJ1rsFO!n7e_(1B|JNcvwS3{rO>VU9q0{RR==aB0 z)V^(!N8_>~GCzE@!L0m&X6Q!?qIB(=@Z}Znz#AQ`CCw&}3{%%AjeGR^8*=^v(+5|{j1>ZHQb|nghYC5`&|T|oB;Vl z#INM^%pD+piF0_krLlu!(ny$(lNW3lkvKvnd>E`CJqmh=7ITv<-u{S!#oOO>^4a{n zC@n7wFFI}xRkV&hpvO1+y})M-+Z-f{LwneQ9ke?1Xl@y{)>G(&6l<}?dfY-@?Us5v z>Dwe84a-)q!q{aZl3XnCw%68TA4Z)-Qfd@{x1xsET-Mr|ORqSVQ*<_;o)Jaq;zi*Z zHE_?P{z^@gfvx=W{Dg!`f;mYZV*E7fcgh`w%&TtfKQO6h;)%1V{m|%d8y(%5t;8B- z-6WlkZuC>i$DMlV$*5A?skP)a=R9;P>t^T|cNmL%EU^PbjDfhtfyN{m$~xm9k}oI5 zvd~KtI%GwD*fZ$m`O92w1Vd*2sB29G$l6pi1a&j=d@}#L|WBJXXS)DZ_g!n z-q=CFerNf4W1E9{n=FficA>R}jcn{(6%RRA zcM}{kW#Z)MLBe7{(`2|Sh|>DH@U-E^+it6sP5qIn*>vf!?&|a|!u&jO;|xEJ#5%#4 z{63w*aT6Y07gIV)NH1^I_=uQRe4V31tIlMlkJr=gtrGXsUQ60c?V1aO}J)0h770|5v? z00Izz00bZa0SG_<0uX?}6bs<~e~Kp;LxTVWAOHafKmY;|fB*y_009Vi0=WN2DnI}N z5P$##AOHafKmY;|fB*!hUjX<2(?7=;Ap{@*0SG_<0uX=z1Rwwb2tWY$|HuIdKmY;| zfB*y_009U<00Izz!1N2?{(t)C7$bxL1Rwwb2tWV=5P$##AOHaf;Qk*u009U<00Izz z00bZa0SG_<0uY#fft)i${Qv(=|3qVi5P$##AOHafKmY;|fB*y_aI6LJ{Qp=_KL!s0 z2tWV=5P$##AOHafKmY>AL;&~y$7G^0Ob9>#0uX=z1Rwwb2tWV=5IEKXxc@)a(~rSJ z00Izz00bZa0SG_<0uX?}F%iIj|NodwG=>QQ2tWV=5P$##AOHafKmY>AS|Gplb!Ktq zCz(_Kvh=s7l>9$0{yg`ag{xb6+tun#S($_N|?pzZxdcR9PvmWa9DS#0jf_tZW4GPmEWL4$2sT8pA|>5}lpr(PNmYj7|imTg#DX7D*5o&2CEnD?Zql*8oiB!*jt=dZZaYEPAI-h8Y+){UG_Czx1uJ%BunXh$?^eiiO$ies;zORdvny%HZUomxW;i0zM}SRlRO%i4Uzfbqy2-=(2o{I>+cnA{Vi!Wd1RQnMrqt-#@~?R=P6bm zOqJgx>40QM7HdDIPS`87{`%cV*I&PY_W4rluivnp@W}~~KScaWw1{8#{1Ru?b4y=x z4fZ?mPXPXhcpM=@J`7fn9tB-_i@B_H_&GcX$Ulesn@&EPpBJU&W#L7~&7q3cu?O_{ zX1^EsjA5IDL~(``JwHbm?4Z@5M{~=twVp!HiN#uMu^zXOSG%R2PWm>9N5it!t1xz% z2&XGuep%pcudT&CB(1vP{`t9Nt)02_mgHDY(b;@@Miixs7lmikV01afR%)6I?BhH? zA)%6BPLhWhofWQWXkwUG-PnI%QqRN_XH)y3(cd;Yx-(meHOjh4Ivw5Ur<9L7_0nse zN^z&wlGmKei(6SYL%+DgSlmU89Ux*1#4QdqCdp9N8NVDQUQUc^H;4cLc1efVve~wDeG3p)c5tiW*cS-bxS`m%0%ry(JX&HLzmH;#3I&R&9b$U z(YFTs^rD|Uq`T&iro;vxk$#8noK_8oNUJ*OtekM??YZR68#@Tt?<_xWY;!PglVx$x z?qyTBctCnR-MRAno$|M2m?lYUJlRZBq^-HEbmfY$=Ms5$VHSBjpspnH=LrrhQh2$q z?USptWns8FD@rRX!qdWtom~w0Oa2_!kK%6+{|Ld`<(a^fLVCQgnXBrFD0V7M!Y z()zmawBg3vZmX3|{gJ8Jbm_3}>hvzc{5)~v3_p&DIyKApjF6CPa`Q#uNbk{zMm zs__vqt@t`ehgO}*N*}MM-C`&1r@fZAd6wSL&pS8uc>jNbuQpHx0uX=z1Rwwb2tWV= z5P$##An+|0aPI%-=YE!%`>(m5o%*N6zgpB5{%+xu?ElWSXa8n)ex@V*qwpu0zs}r_ z4>SAs-(MDnue*=;tGltUww-U=*w@_`yl+;j^|HDvD=D=V=i#)%+R$%W6z{vZ(O2BV z{IV!jSB2pk+hv*1@AiAdf3^^MED|k}V-ZAagc^?miB@m|Vqfdh?|cfw+<8&jpz*Ax z##8Njqlxyla(Fm?+w^FHDuvT1??ep)R<%!gXR$ z%3GqeLu0Fsi_LkM?LV7N2yc0!@VH*aM#$GJ3@@A&rR{ZLs78W}Kaq7G2UNRWjC}d| zv?%#%X^ecW807UgMd$m!;okTdt6i?2#6ZtY7-*y~j+EPr5i24jb+WS z>8l58?yt9=pMOJ?BuV)3=<9uVqx;Xk)=_Bc(smZk5c)nv;?P1*D%@k-d69x2 zO3J%z3BA!o^H+JR&G!;{rGhVv=3datXyHkEmn``xNRDdsX3IBo95|0|zB}&GjTaKX zptjc%H^1@X%6HrcTwe{sDa^M`Z25X(8uJY&O=PZB`a2R{DyL*HKf`G$N}nixV~NfU zgPy{YQ=O}o_TpwDd7EqMBs{kv`W8{Nm`{4Hsdv78>9prN@$=pP;H+P->;ym){|BeD z()McF6@Z5pT*9-Q_qUvR{?2Qnw7M#M`RCzu_sgR_d^a)4{pyqEw|C*5p4s1EQig&} z&PNv9_+{7cCb%~X?ieC-92D>=7rq;FF92fi8I4_IgAmxM=o`zkr|&I^(z$cO^B=fr z(j@yjeP7u7b(&8KZ|nG6h(5;m8-?d2@%02c*3orn@*5|~VqW)-4|_E$_&n+;c36h? z!cSYM6X)zWx`B?r`%Mo|JpYe>vwMCV=Pv(>9|R z4+J0p0SG_<0uX=z1Rwwb2tXh%fam{l6KsJ11Rwwb2tWV=5P$##AOHafOq&3n|4-YD zVmuIl00bZa0SG_<0uX=z1Rwx`xB#C2$4#&W0uX=z1Rwwb2tWV=5P$##ATVtLc>X_a zGm7y*00Izz00bZa0SG_<0uX=z1mXg?|Bsts3j`nl0SG_<0uX=z1Rwwb2tZ)k1aSX9 zZ8M7TKmY;|fB*y_009U<00Izz00iO!xc`rvU<(8w009U<00Izz00bZa0SG`~+5~X_ zKW#IL@jw6q5P$##AOHafKmY;|fB*#I0=WN=n_vqBAOHafKmY;|fB*y_009UV-xhiZ3})}tmV{j*Au-u=ymgSSQL`^&=cb=G-B>(~PaveeT_ z-zLs6$F^OF?S++uYmfHDN}R!jx}xcwUlyh6sxVw*yDSr1>-C7mnuO9bS|rCJh}H-- z9t9Gu5Y-*#&ePPU@%X77ZPBiFz0jg1D~E^Uw@r^Gs8Sf7JtsZIga{VL*dTzo%BYhnbZM1fw zAZ4XHl8|u&wjTF%o3yooZMc88M{C)d`|GXe=id+|NfLf6+1i61aW}gEob^I&6+ft{ zvf^%|H2IuNf0Sxhp(pc}x}i4ZdZQ)RcWSk(e%WZLORrHOoli7HZmGMpWu*08?SW1M z*1AS|`;ykT^{zH126mnu6KAPW-)=RFbQH3(b#J7i$Xm_oX0f>^-&6PKQb?O$bq4DV zsNfAT+_d5~^^?p0;Ox87XsXqXy4PJOs)F29D{51%m(*>#fA6Bj$vxVv;9Lil)tX8# znM%d&Qn9R#+p~AUL>E2=&+pdX&hOM~mcGw?uAsi2mG*9?Wm3X|(Oyf~_$HqJAMJ~I zLz{}fB*y_009U<00Izz00drz0Pg=^g(CWZ00bZa0SG_<0uX=z1Rwwb2pnwz z-2Wf#`9X9LfB*y_009U<00Izz00bZafmb1b`~O#=h&~_y0SG_<0uX=z1Rwwb2tWV= IM_b_k0UL&A!2kdN