From bcb8583b2f81a6efebd6ddf7c2b07c1f58bf70a5 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Thu, 2 Apr 2026 21:27:27 +0530 Subject: [PATCH 1/6] Add L0 regularization paper draft (WIP) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Paper: "L0 regularization for subnational microsimulation calibration" targeting the International Journal of Microsimulation. Current state of the manuscript: - Full paper structure: abstract, introduction, background, data, methodology, results, discussion, conclusion, appendix - Formal survey calibration problem definition with GREG and IPF explained in depth, including benefits, drawbacks, and current practice in operational models (CBO, JCT, TPC, EUROMOD, TAXSIM) - Four-stage pipeline methodology (clone, matrix, L0 optimize, assemble) documented against the pipeline source code - Detailed appendix target tables populated from policy_data.db (37,758 targets: 33,572 district, 4,080 state, 106 national) - All writing in US English, citations linked via plainnat/natbib Still TODO: - [ ] Implement IPF and GREG baselines on the same calibration matrix to populate the comparison table (tables/comparison.tex) - [ ] Run calibration experiments and fill in all [TBC] placeholders in the results section (accuracy, sparsity, convergence, ESS) - [ ] Generate convergence curve figure from calibration_log.csv - [ ] Select and run a subnational policy application example (Section 5.5 — candidate: EITC expansion across CDs) - [ ] Review pipeline methodology section against latest code for accuracy (clone-and-assign, matrix builder, assembly steps) - [ ] Review and deepen background section: verify claims about GREG/IPF limitations, add any missing related work - [ ] Resolve pre-existing overfull hbox warnings (long URLs in conclusion, hyperparameters table width) Co-Authored-By: Claude Opus 4.6 (1M context) --- paper-l0/.gitignore | 35 ++++ paper-l0/bibliography/references.bib | 219 +++++++++++++++++++++++ paper-l0/ijm.sty | 69 +++++++ paper-l0/macros.tex | 30 ++++ paper-l0/main.pdf | Bin 0 -> 244100 bytes paper-l0/main.tex | 47 +++++ paper-l0/sections/abstract.tex | 9 + paper-l0/sections/appendix.tex | 199 ++++++++++++++++++++ paper-l0/sections/background.tex | 72 ++++++++ paper-l0/sections/conclusion.tex | 14 ++ paper-l0/sections/data.tex | 89 +++++++++ paper-l0/sections/discussion.tex | 40 +++++ paper-l0/sections/introduction.tex | 20 +++ paper-l0/sections/methodology.tex | 158 ++++++++++++++++ paper-l0/sections/results.tex | 61 +++++++ paper-l0/tables/calibration_accuracy.tex | 19 ++ paper-l0/tables/comparison.tex | 17 ++ paper-l0/tables/hyperparameters.tex | 21 +++ paper-l0/tables/presets.tex | 16 ++ paper-l0/tables/target_summary.tex | 32 ++++ 20 files changed, 1167 insertions(+) create mode 100644 paper-l0/.gitignore create mode 100644 paper-l0/bibliography/references.bib create mode 100644 paper-l0/ijm.sty create mode 100644 paper-l0/macros.tex create mode 100644 paper-l0/main.pdf create mode 100644 paper-l0/main.tex create mode 100644 paper-l0/sections/abstract.tex create mode 100644 paper-l0/sections/appendix.tex create mode 100644 paper-l0/sections/background.tex create mode 100644 paper-l0/sections/conclusion.tex create mode 100644 paper-l0/sections/data.tex create mode 100644 paper-l0/sections/discussion.tex create mode 100644 paper-l0/sections/introduction.tex create mode 100644 paper-l0/sections/methodology.tex create mode 100644 paper-l0/sections/results.tex create mode 100644 paper-l0/tables/calibration_accuracy.tex create mode 100644 paper-l0/tables/comparison.tex create mode 100644 paper-l0/tables/hyperparameters.tex create mode 100644 paper-l0/tables/presets.tex create mode 100644 paper-l0/tables/target_summary.tex diff --git a/paper-l0/.gitignore b/paper-l0/.gitignore new file mode 100644 index 000000000..02d9b69b6 --- /dev/null +++ b/paper-l0/.gitignore @@ -0,0 +1,35 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb +*.nav +*.snm +*.vrb + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync diff --git a/paper-l0/bibliography/references.bib b/paper-l0/bibliography/references.bib new file mode 100644 index 000000000..4985db24b --- /dev/null +++ b/paper-l0/bibliography/references.bib @@ -0,0 +1,219 @@ +% === Core method references === + +@inproceedings{louizos2018, + title = {Learning Sparse Neural Networks through $L_0$ Regularization}, + author = {Louizos, Christos and Welling, Max and Kingma, Diederik P.}, + booktitle = {International Conference on Learning Representations}, + year = {2018}, + url = {https://openreview.net/forum?id=H1Y8hhg0b} +} + +@article{deville1992, + title = {Calibration Estimators in Survey Sampling}, + author = {Deville, Jean-Claude and S{\"a}rndal, Carl-Erik}, + journal = {Journal of the American Statistical Association}, + volume = {87}, + number = {418}, + pages = {376--382}, + year = {1992} +} + +@article{sarndal2007, + title = {The Calibration Approach in Survey Theory and Practice}, + author = {S{\"a}rndal, Carl-Erik}, + journal = {Survey Methodology}, + volume = {33}, + number = {2}, + pages = {99--119}, + year = {2007} +} + +@article{deming1940, + title = {On a Least Squares Adjustment of a Sampled Frequency Table When the Expected Marginal Totals are Known}, + author = {Deming, W. Edwards and Stephan, Frederick F.}, + journal = {The Annals of Mathematical Statistics}, + volume = {11}, + number = {4}, + pages = {427--444}, + year = {1940} +} + +@article{ireland1968, + title = {Contingency Tables with Given Marginals}, + author = {Ireland, C. T. and Kullback, S.}, + journal = {Biometrika}, + volume = {55}, + number = {1}, + pages = {179--188}, + year = {1968} +} + +@inproceedings{kingma2015, + title = {Adam: A Method for Stochastic Optimization}, + author = {Kingma, Diederik P. and Ba, Jimmy}, + booktitle = {International Conference on Learning Representations}, + year = {2015}, + url = {https://arxiv.org/abs/1412.6980} +} + +% === Spatial microsimulation === + +@article{williamson1998, + title = {The Creation of Census-Based Small Area Microdata Using Statistical Matching Techniques}, + author = {Williamson, Paul and Birkin, Mark and Rees, Phil}, + journal = {Environment and Planning A}, + volume = {30}, + number = {5}, + pages = {785--816}, + year = {1998} +} + +@article{huang2001, + title = {A Spatial Microsimulation Model with Student Agents}, + author = {Huang, Zhixin and Williamson, Paul}, + journal = {Computers, Environment and Urban Systems}, + volume = {25}, + number = {6}, + pages = {473--489}, + year = {2001} +} + +@article{tanton2011, + title = {Small Area Estimation Using a Reweighting Algorithm}, + author = {Tanton, Robert and Vidyattama, Yogi and Nepal, Binod and McNamara, John}, + journal = {Journal of the Royal Statistical Society: Series A}, + volume = {174}, + number = {4}, + pages = {931--951}, + year = {2011} +} + +@book{lovelace2016, + title = {Spatial Microsimulation with {R}}, + author = {Lovelace, Robin and Dumont, Morgane}, + publisher = {Chapman and Hall/CRC}, + year = {2016} +} + +@article{harland2012, + title = {Creating Realistic Synthetic Populations at Varying Spatial Scales: A Comparative Critique of Population Synthesis Techniques}, + author = {Harland, Kirk and Heppenstall, Alison and Smith, Dianna and Birkin, Mark}, + journal = {Journal of Artificial Societies and Social Simulation}, + volume = {15}, + number = {1}, + pages = {1}, + year = {2012} +} + +@article{anderson2013, + title = {Microsimulation for Local Impact Analysis: The Role of Small Area Estimation}, + author = {Anderson, Brent}, + journal = {International Journal of Microsimulation}, + volume = {6}, + number = {2}, + pages = {30--55}, + year = {2013} +} + +% === PolicyEngine and predecessor === + +@techreport{woodruff2024, + title = {Enhancing Survey Microdata with Administrative Records: A Novel Approach to Microsimulation Dataset Construction}, + author = {Woodruff, Nikhil and Ghenis, Max}, + institution = {PolicyEngine}, + year = {2024}, + url = {https://github.com/PolicyEngine/policyengine-us-data} +} + +% === Data sources === + +@techreport{census2024, + title = {Current Population Survey, 2024 Annual Social and Economic ({ASEC}) Supplement}, + author = {{U.S. Census Bureau}}, + institution = {U.S. Census Bureau}, + year = {2024}, + url = {https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asec2024_ddl_pub_full.pdf} +} + +@techreport{bryant2023a, + title = {General Description Booklet for the 2015 Public Use Tax File}, + author = {Bryant, Victoria}, + institution = {Statistics of Income Division, Internal Revenue Service}, + year = {2023}, + month = {February}, + type = {Technical Documentation}, + url = {https://www.irs.gov/statistics/soi-tax-stats-individual-public-use-microdata-files} +} + +@techreport{cbo2018, + title = {An Overview of {CBO}'s Microsimulation Tax Model}, + author = {{Congressional Budget Office}}, + institution = {Congressional Budget Office}, + year = {2018}, + url = {https://www.cbo.gov/publication/54096} +} + +@techreport{jct2023, + title = {Overview of {JCT} Revenue Estimating Methods}, + author = {{Joint Committee on Taxation}}, + institution = {Joint Committee on Taxation}, + number = {JCX-48-23}, + year = {2023}, + url = {https://www.jct.gov/publications/2023/jcx-48-23/} +} + +@misc{tpc2024, + title = {Brief Description of the Tax Model}, + author = {{Tax Policy Center}}, + year = {2024}, + url = {https://www.taxpolicycenter.org/resources/brief-description-tax-model} +} + +% === Machine learning / imputation === + +@article{meinshausen2006quantile, + title = {Quantile Regression Forests}, + author = {Meinshausen, Nicolai}, + journal = {Journal of Machine Learning Research}, + volume = {7}, + pages = {983--999}, + year = {2006} +} + +@article{pytorch2019, + title = {{PyTorch}: An Imperative Style, High-Performance Deep Learning Library}, + author = {Paszke, Adam and Gross, Sam and Massa, Francisco and Lerer, Adam and Bradbury, James and Chanan, Gregory and Killeen, Trevor and Lin, Zeming and Gimelshein, Natalia and Antiga, Luca and others}, + journal = {Advances in Neural Information Processing Systems}, + volume = {32}, + year = {2019} +} + +% === Income measurement / data quality === + +@article{burkhauser2012, + title = {Recent Trends in Top Income Shares in the {United States}: Reconciling Estimates from {March CPS} and {IRS} Tax Return Data}, + author = {Burkhauser, Richard V. and Feng, Shuaizhang and Jenkins, Stephen P. and Larrimore, Jeff}, + journal = {Review of Economics and Statistics}, + volume = {94}, + number = {2}, + pages = {371--388}, + year = {2012} +} + +@article{rothbaum2021, + title = {Has Income Underreporting Changed Over Time? Evidence from Linked Survey and Administrative Data}, + author = {Rothbaum, Jonathan and Bee, Adam}, + journal = {Journal of Business and Economic Statistics}, + volume = {39}, + number = {2}, + pages = {456--475}, + year = {2021} +} + +@article{meyer2021, + title = {The Accuracy of Tax Imputations: Estimating Tax Liabilities and Credits Using Linked Survey and Administrative Data}, + author = {Meyer, Bruce D. and Wu, Derek and Finley, Grace and Langetieg, Patrick and Payne, Carla and Plumley, Alan and Yu, Alexa}, + journal = {NBER Working Paper}, + number = {28229}, + year = {2021} +} diff --git a/paper-l0/ijm.sty b/paper-l0/ijm.sty new file mode 100644 index 000000000..f52e8dd48 --- /dev/null +++ b/paper-l0/ijm.sty @@ -0,0 +1,69 @@ +% ijm.sty — Style shim for the International Journal of Microsimulation +% Enforces IJM editorial policy formatting requirements. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ijm}[2025/04/01 IJM formatting shim] + +% --- Font: Times New Roman equivalent --- +\RequirePackage{mathptmx} + +% --- Spacing: 1.5 throughout --- +\RequirePackage{setspace} +\onehalfspacing + +% --- Margins: 1.5 inches on all sides --- +\RequirePackage[margin=1.5in]{geometry} + +% --- Section numbering: max 3 levels --- +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{3} + +% --- Mathematics --- +\RequirePackage{amsmath} +\RequirePackage{amsfonts} + +% --- Tables: no borders, Arial 10pt interior --- +\RequirePackage{booktabs} +\RequirePackage{array} +\RequirePackage{helvet} % provides \sffamily for Arial-like interior text + +% Table interior font switch +\newcommand{\tablefont}{\fontsize{10}{12}\selectfont\sffamily} + +% --- Figures --- +\RequirePackage{graphicx} + +% --- Citations: APA style via natbib --- +\RequirePackage[round]{natbib} +\bibpunct{(}{)}{;}{a}{,}{,} +\setcitestyle{authoryear,round} + +% --- Hyperlinks --- +\RequirePackage{hyperref} +\RequirePackage{xcolor} +\hypersetup{ + colorlinks=true, + linkcolor=blue, + filecolor=magenta, + urlcolor=blue, + citecolor=blue, +} + +% --- Algorithms --- +\RequirePackage{algorithm} +\RequirePackage{algpseudocode} + +% --- Footnotes: same font, size 10 --- +\RequirePackage[hang,flushmargin]{footmisc} +\renewcommand{\footnotesize}{\fontsize{10}{12}\selectfont} + +% --- Float placement --- +\RequirePackage{float} + +% --- Source/note formatting below tables and figures --- +\newcommand{\tablenote}[1]{% + \par\vspace{2pt}% + {\fontsize{10}{12}\selectfont\rmfamily #1}% +} + +\endinput diff --git a/paper-l0/macros.tex b/paper-l0/macros.tex new file mode 100644 index 000000000..ebe0b5f71 --- /dev/null +++ b/paper-l0/macros.tex @@ -0,0 +1,30 @@ +% Custom commands and mathematics macros + +% --- Acronyms --- +\newcommand{\policyengine}{\textsc{PolicyEngine}} +\newcommand{\cps}{\textsc{CPS}} +\newcommand{\puf}{\textsc{PUF}} +\newcommand{\acs}{\textsc{ACS}} +\newcommand{\sipp}{\textsc{SIPP}} +\newcommand{\scf}{\textsc{SCF}} + +% --- L0 / Hard Concrete notation --- +\newcommand{\lzero}{$L_0$} +\newcommand{\ltwo}{$L_2$} +\newcommand{\hc}{Hard Concrete} + +% --- Placeholder for empirical results --- +\newcommand{\tbc}[1][]{% + \textbf{[TBC% + \def\temparg{#1}% + \ifx\temparg\empty\else: #1\fi + ]}% +} + +% --- Math shortcuts --- +\newcommand{\E}{\mathbb{E}} +\DeclareMathOperator{\clip}{clip} +\DeclareMathOperator*{\argmin}{arg\,min} +\newcommand{\bw}{\mathbf{w}} +\newcommand{\balpha}{\boldsymbol{\alpha}} +\newcommand{\R}{\mathbb{R}} diff --git a/paper-l0/main.pdf b/paper-l0/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a05de9b97cafe939dfacf4bb0fa6bd6274010c69 GIT binary patch literal 244100 zcmb5VW2`7Zv#z;p+uF;vZQHi?vTfV8ZQHhO+s5oOb8~Yi=gZ_wr;_fZ|91ELRP|dV z^1`At474mzBy&r{Yfy{?^aQqsmQdW>P;|=fb|wULa)y>lPS#L#vIGqD^iXu777mV1 z1nf+VP;}BJHfB!d1Pp8}tOWn}_^(|nCldz(I#DYFClg^4BU@t=C|+JDM<)jp18XR^ zjb=>=$4yq0o=dg8HJmL3uC#IE5{(RFQfo$y5_COdjd+&&l=>9a@8|D4Qa^maIFw@? z7(rqPuUk)OJiKX*Vdg|srYN$|*Ij z@ZQ2X_8s%@_a`EQ54lqmeyJ0;nUuvxR^HtjFa7Lza_D z*c$zsfx!(y;ru>CCB^kWi;@Anx&m&n_in}W_B}>v4ROh8ESzAt=0eN5@LNmZ>Kp@?Zf_F?&`^bTjDM$DW9(!f}u9!>Y0{yt5^#yEUU%RPbVI>C_n zMAu2T`X`z|7*F{E8(~6HqBts0qQTF&z!6lo6fB&&nR7|?b3v^@Mm+S_7NNB4NhX%p zTm(6u`UsHZePB-}!K^#%bN6Tv(Hay6X!7aFx;ST3mI%}J^k?_Db<9@ZAEq z2;dQo%@txe8IH-JfXnR@?=k+G`515u*>_UHEbJq@6D`%-*-bg-8n6j--E01fx5ItY4o+gW%zs^>PBJldY|!m+(0i(sQFSG4@pm&nPFSNhLOhMn zb`8Q0rFI$nT-5+QV+v+_+94Z%)7+5t@yT{V0Yg6vNdb4Q_3tRVm}e9`f1g=Q&MBpx zv@PZdrA1L|2PY@zIw$qN*k(ERNO z1ySGU{UQT{JDCH7mQjv*?xi53GI3apry}OZyncO1zZjhojW_}1jNZm z8syVT51Z)812mL7G`5_WA1oC(2;uv+Jv?^Hy{}D0xo%U@O^uSmX^UhaAA&<|1K`anc|>W}2OB+$6pin=KqkTJE9J~A113y|kWGDfP3c zLRd&;z4{6m))(DrdcdcyB;G+9RTMO>a zD&5V6yHqdBOPp?LyF_^+Gbp)iMYQTKV4tf3&z2sfaNVd2Pd zj7Z6@?K0W0!Yc$_s_RiP`V4SQHMnkr9Vsi0;ZuX@xabvFri7-(=`9s&Pml7x)(4LP zHgi8iw0-*A!nlzjVSZq6WYj9>TaB(A+r>esahrq3?5FAJovPZ6nftD&h(6P2FTlierfmFQaxPV439~yZHJB4(A4w1k9OpRiV0*gm{zM+Lg!^Nz2rv z4tZZKvkH&I74|RUU;m>DVhOEo8=2N^ciwA2;V#&zJ%J4rG%W8G0#H|*@p4-|z8l2Sx!2VXba20G4TCENBOUYtt{5qT~ z7@~wcK*h@CS~)hXBRkXf6vdffHx{gDAFpi!XgEMf^d#F+LzO~8q zFxBnM;G^^*#2s20{xjxi_hF0GSb~r|$DZ6gTe09y0U2s>pumoS8M)fpFay+8k$oFg z6b35CHq8vRp-b%EM3gUS065L^?3ol?+ojOLht;pu8pHe*PbQu#H#}aiVhj^pvvd5! z1Fm!HyO+G^ue)UMQ5@SzTM^Jb&>~@0i1nQc`sb-GH zRpoC$WnHv=1vynb=g!jnY#96gS>$ORNoV$$6fj3GiC%-HrHH})(I;B?>@{|-GlTY; zLNwD<<$Zw|)*TTGmEc=d`9&)z(+aN_1CP_vcM#hBH*j6?TnHq;AR&POlor? znTfi29tg8)HH?~D!l7tOQKE9eAly+!Hm2~jkwR8W<%MjUBilqES~Eot>ziTnDq+-O z6UYY+iAhSQ6+96-fpK$H?Pfcz&pmMPa(Gb~vE?~1q)VSs4fg355zaQij^c|`COklT z;%m&Ps1{|j;`g(utcDNcle6@N3p+Zod`)_B)npL<1T??qm58O}E zX1{$uQ$h%ns!)r8-K~a>OVbMc$@2uXs(*O9*1d8|515pnUL6o8E_PM!n17fJN* z%0&5S$}FAY_}@4`^ty!UcSR{$|O{Txf}rM$bo9JfJ8yLk>}gHx_&#A(TF+ z#7n-b&<61b-T17DBgr6+=8@p8X0jLs2T9TT>|qJz?T2%O-e2Dot~QOZo@SEJTR>vZO9sR&dBYY z#5Hilg0qaPzW6@NkyYp}W(dZ98F3$+y)E-*!8}Z0hqF-w#f;g_F69hR~uhg~l z6>w6uv*FEfQpu;n98R3>*rt2TUYS2Ru_vTeW{hXPy5QnFhcBMJQPZ44cyvbYJ@ECh zLH_Q4)NZ}*Y7qj@K1VD+u4G!DxHku#Vvk-le#B@c+D(z1$pN3jk~4i zrmDr6pQi)O&*7tx$mmTco0shLj>Z|XVik3jjsfLR7;nmlp+G>PJD28+7&z4C04Y+7 zK7-L7n`qzvf{O-{u47V8mm_)CNbg(E0fBV33b!mt9aF9pK7)qCAYmQRo_?m3>7=F1 ztezj30I7U{vi2<&hjn?MqF1c7kiFx-LpLNk5xsuQL#HQhE4h=<1J*O5s{=dD;o|Pj&GjD=Z(=4bewlZ~no|E(W#d`u$T! zc=F&2u*kpvh~l(23~YV=OE-se0&q%d$=ANimL&4nL8K<|al9P$^wKK8h} zKE1tcs}}B?KvD&jP!vGP2$^wnk*cRr7YZtkVW9&W8&egyP~l*N*3{ow={v)hwu+H* zM@-AKH^Sfb-h0iKDL5(-{5%(arP_*+sb0Co9yP+8z2}H(iNj@H2eP~}_1p8Fvcg4O z^~*?|3Atw^)APpl`+)=|uGyKDlw=1Az@|H@a{S9qn)>lUr^F~?{@*EyiGkxkP!cme z{r{Abn$@KoH`$STPSwuDRW!7F@VQEd#@({Ar-}^Kt_>Q%(}GAyiTg?V>v?*8dPM^Z zisoL<>cGSK3+K(5J9=&Uw5-*3E-s?YdT(uZzYfj###DPwPjqi;ZEokMR3)%Fbc1Z# zKL+1dIm2+@pXy$C#Ga4uW}kg+_!gSZ>@;x-&V?${7nMb7Ln<);=2I=}R9h9_gJfE3wJ(3?{beBGt0?WClStx<^Wu*zA2) z0=MjxH3VmPKd;tTxK^J>W}s4(Y=HPg+%&)3O=T)YJAEr z-^Xy9QJI|<{3whS)n%)S6`;#hGo za`M6h0IDkjo)b@4a-Ur4K2$V=$5o})UYHo|vVbfEWSfpx!0O|^Ye`lQ(D5XOa6W{= z*?UZyo*OS<#EfsR>D{8Aje>~}MsB>FYk#+n*4(=`Grbg!RVwfJUMb|b3ja)`t`t;` z1Ykb|{daz~q6q5N6pKvz;eY7WXF_#Uq)x6$R4}y>4Zvp5?8`W^=)dI8aa-YtFubT2 zSHLiWv3(MU8{p>#qEKGDiRvP~BgF}HdOp1=wWPR=6VS;?UGTWViKJt@k8>-={nN?9 zcc||VkFPnS$JEMRQ!11uql}u1zv98^&Za_`iYZiht1@#r#k)f4T#pI*-fv(W4B9g7 zBTb#p_^_;D_5BH@=@@Mj7(h7=(kVvQKwW60IpC;z{c7;>D4JlUvnL=33**bk+sQ{V zFjBUzk}hDQ<~SoPx{wP9YQ#ySFh27gtB>K`6NH~Cl)mxIzot+^O%EQ`rIsh3Pjh`e zdQKp|$K2_#JB#f)z=da`Q*iSicj@%ZJ95Q#&Xd$sdv8p-^_E!$wdv}g>uYX>@4u;W ziO%AvS9)CnkJy)RBF2@>s^mUqO;tbd|4zmAw+SHuvp@?OeFeB>Q5W|&I$nDSd%nJkX=x} zTE!UYKvc`q-Qq6Mt~~0zD;&xA^TOod4ig}=$jVrvqK_3)`Z!LFu>{1<5D}DA-9?4~ zpYWszr&E&1mQ;;v5y0ujyoE3XP^Hi8#I^}spauD3>`|E1+KdN7mi0&j1EyDK(a1Ew zKyQ~*;nh}L`%UiEp9iPzzmAW1R*_Y#<-?NxqC0Lz6O!5_d{E6kA3$;eq4jLI*&L8O zt;dGr9UFMdYMW9VFv8FDhfrrKPi}KV{?vAW=A`llV#*uIKjTI8Q@=I7YC4ALE8)hB z@?tPR!{PZa+kp?)n2L7560-JDf$xZ7bt>%rrlE^ytqp`E(&+_J>d3Sf1Zt@Z&nl6_ zJSjuor!sY>jg4|lF7bcv6(-QZ;W%*OWjazn4;fyqSjHWP*pQ%@j;I$-SNu!;;;^2G zjBGQ{nvEREKK;3r@fKboK*Q@oi5BCPk71GjE=F&JR7kuLs9rNUGqB15h!NtheGoxN zfJ3I$KQb^Hz61C8ueYs01^_>o{ESV_CfKDC5MBqo4_&L=sZUC%ESrZI6h%WG#&(spEDutFCH zPgAMlJK~)?O_iBottDm_qz=GkjyA;!mb44400-Rv@G}Ysy%tc|guOA=eP=!p>Q^I8 z(@)bkGtg*uo_4hbfu%Gs>4%qmF+%w)OXm(QA*0R${E6N1A^*uELf6sJh;bjcU9kq!Isgwz;wQaS( z^2PthLhzH}9FqS5*qGV>1F*5tv;9wjty@DXakCAv=Tq$rt=v-h@!L)XE@sk&wYiz= zzObd`0EYnS4}%mUjQ9rL?}t}3n6TpDJ$vX85v!jlu=&&B-?3dBwx5%0rd^-khyC?O zHUSJW43kY0JmhYj>*dwYl@7IykYsu z6t0Som^9vZA9cfo*3Z+>Uh9A*ssg9RQMMQ)wD*1G*G}&%@J(4KMPy7HE*j5uI2V4q zQw=yW75h~?B;ePG3Lr;1Pd2}FY1ZdkwW`h2>8DNZ=dz zf>c!3T?>2Gi0=mIuj&O~w>AAETi?y&AJqq}0;KG1aJY#fz2KUumG9#cz4DeN2ZEZW zKJTZ%8u-q+-I$k@1)SByH)eFzJ==h2QYC_e?M<_|yGE=_+X^#4hdqjd`zx3h?7MAl z%7H1EZ-U;OfZ#xEh$*71Cf=25^E1II+0&I`&O*E@&r;^tR)?j6{TWp_SuO6h^ZM;t z3*e7Y4}}C9@L=1d2B1Rn^_Rkv<+IbAPqY`Sv?F?cup45D#p}NcIc>j1Bf2@tO4qT9 z`=*_XHb@0C;8|8k1tt`i=T1DY5yL)8JGSMTRcwNsX#sbJ0SX9p;|isFa(rbE#2@*z z?pbKduiP#}E<*(4DG?wur0CmIdYdfzef0eT7ay5TR5&-+30qc0bJgs932Mq)Wkxch zNGK~5{4knJ)lJc}&H4jw08_bIcEt}1d7F?1MW-Dktx2kQzF5nz(%aG27Sm~@>E`?> zmD-xLG}z|8ifzY;(;eZ`fYdXsihqsl2}H`>4GJrh6&UE5zV;$0-6E)X4uFwfksP{~- zBe<$7>WkE4?JTP@cu5_kN~jnJh~c;B1-L^Wvn?N7FE}fA;CN5onOPsdc4&*Yfi#^_ zmQ-CrO{8PQwVlBIA#S+GnxYzXW|ohRAD=GYID@5|n7y7HV9t9}Bl|JsS1$4>kPpj- zH41Ia4J<2P?)~HrNsTB}&gb?0xTq3sLc?0g!lAn+AWV-w&&i(#-|D#!7D*^ldK378 zW`>^XA&qw756tBz`wV~Ge$*hWQ6RiCL&Es|L`88Y`_+|>{s^^@0Y=ukW!dH;p*GL3 z498);jTZwuX=+_o8&}Uzhv|Um)QVQi7#EFHU%dQHH$(~t?(Lm15wL9fxOm|yk4U%r z5x)}De?Q;$ylKaUhb@ga{;Y2;w2jhGL=W%yehU$H=LSnGXMyMR5`8iUz-0LHL>V)d z^-HPDe-%fFfkz}OGFr!O9_l*U-R-XL6blUpeOo!TVa9}ULR&!R(D6EsnKcFyTurL1 zBBJCa^BqJDA?pf`si6P3xWu2>`UE#BlQ&+ zGOje8r^rOK3WJV;W;V8Ox2D%61I$taTUYJgbh9o8uUm0mv`+hW1V?!2u)tUhKgooY z&x=Z>kT8`G0O(Tqr$Ah+ph`idw%QN_ZVfZ;rtw-hU+M5=6Ojlg3hM!%SWAt7v__TSgWQ3)4z=}Su$hxYs! zj*?<%w4Rc+HNr|=3XEHR$U~l0N{T5tydfI#oMsmw zHz>teuRW&+410kammNtKwd9Etm=?p3_%)ISU3$U@jA-#rFrGRQPz^LUSWn?CpqAwM z`Ms5%Aw`6jU&m(ZlX%>LYAjg^ZDvu(AXVMdnjUwSpKQXMy9|^2$`MPr+R-r3&TJNR zphgOkR#Y_T5E|+GK>MC>BoRPLw|^}fgX6dRGH77mWPLHwx5+~jkcm69xmDU%uhp#qnbd>rbp9MfR3**bh$`fahrPcMDrS1$w8 z!uIe~nZ1eW5~??py@+(~Wy$^}^eHR4DBvIb?{q1#DBa>U?>#bItkBhF``Qe950v9L zVS(m)0~EqdRl5pjg0*0E^rX{y7On6a#D$@tZpY6oB?Nw(IP(pG4*!(ivhWR_Q^1?H z?olhQweSac0urjh6sSHe@$LwOt?oop4>ke#si?NA0LzS#$?P53*A!2UG!d^x3xu}J zZ|7DyA&gUA*cLv_kL34n@8^+0Ai&!Pp9c>akCWiUC%veu)|1rYUqe-o@3bf4?zOGl zF-Pm`&-?Cb%vxy9#d1n0TDhbK_32o&9VF1UjY)@6gR>9x*<4pBzdPL)F#un=^TWq_ z-x;c@$i2{>)Kgsr?W|ZTV@Em#K=ANG5>-1}>>y>2Q0ObFkB!9vYSdYpkGzmYEZMfc zP*B!WHmC~bc4-sY`K{OI#FZQ*Ro=l;stVpR2{*qUZ6^d1DP*E{=sf>@6vD}s9$Uqy z7UUacqd_{8A7;qbTM|Bc-j4-=#eqvTn4N4178W%G7k}{BDGENuSv}mE7_M%Kdv#RZ{&dQL=Ag*TO1I=GyNAzDQ{#-(|EM$g%tnk+#N>YA^3l}C*=f^ zj4k@UH&|VSLZYTBw9=;^%82-iGa0tqIrJy9a58=@|MZRGnTqo}8|FxSIJ3oGrAaS0 z<$Tg|=pi+umRkj$l+V>Z#<8l2P z2KwhPZvfFfd19YRcVD)>#ceGg_b2?k!j|5DU|d$#|G>B`3{3x1#+}yuSCkY*`p3BR zY-KB1*<^S#9`NPP%HtN33d?v0Jp6m&L9j?r0HUfs-#$D{Zcs@mo8=pk>=?|QW*_g) zN?wkg`XZI%93>OjpYIgN{HNP*((!Jyq7y}5ByyGR@As*< zd21bK!(zXp2Z%X8S`Z1;O{M7uNT@u~ zUtkF0JRV*^BBg};A30HXt~~bAb#|ZX8a7T*^}aMY;Y# z1R>p;$0&*RU)QKYl2fh0o2QRYn+}@FbW)B{Q=eas-VNd1^6~kAi9VhNt`9C@nvpI! ziFx6&;I^H>VYMX7p^sR#i?}Dv{oRtO>uw9r*%1a~WJpY_7lvbX?*ppmBy&NcVvxWY$epfP#PjTN{=#mfu5l{> zrJL>N|C+}><|=lbIDwF=?&_SXWM%cxLy1!g%BopJhdm8?6qb&0f@_UlmoEc7R zio>N9es*Gtw^_diF^H6dNOFbe$Vq*b3pM~RnaNV4HIqlXP?=K>ZHXC9{E&aX{Nu88 zDvrn$4|_wf(hWrnX`&flmWoNQi(!XGl|V8Os{GXe5S{v(nJZJQWNNEsve3|bv|OPT z&Ta~oj~B*kHwgL@wkKL{xCh~CH~`Yyxw|=1BdK)9QJC^@5)LYb3xBZE2sIz&wNp#Q zBf}_3wf}J`0xf0IBt_NDxPL@>?|*={7$rSxMu{RHa|Q1tik4u@c$6oxgs|%6%5QJU zRnca&4}%nVG=R6Mtk{V;($G!3S6() zGLI*wf7G1Nqk{t%90OPJvr0mr;^8bse}$=?#{g0gVtlsDDPHopE5*zY7m0w2_++vf zM}mVWhqOgSH$#FXw|Z{eG9XtBi^Pp(dVDt*wM-9+Ew=(N7D_U=6@ST8g+dO7f({_dP`rx)4vIW6bz2asL&qHZF8;Vc?{k2h?IE; zqGBki(2))bHJm4_qNb~I z!Vr?IDTgvrHpHl`jjrBJrecBg0_(_%Pd{&4VtDybAnY#V1eqt@mH_C_Dk!d9Hu~zC zyo5#;gqrv>aot4#@rP5UqT#h{Lnf9poN?zsvw zK)`3)tC#j?jH_K1Yg|9eekzYzY6U+;K*PN!jZFC-d9WjpKw|1gO>MWIrRh%NdI{B_ z6{LE$iKRk@uLFeAlb@=*2OsApvTv(FXN?m%Bx2UB%hAwGo|~BaCrk7IDGb=%-1{k{ zpsw}bg|u{g2s>xmxn!IKKw_u8-H^mnneh zH&cUsYp%>&D!vI!fHb_kPnZp?P{t6!U&JI zRvTJ~U&mrwc!Lc_&Zer#AQuI@I5pXGj^YIbeWy8d+1%uR}G*Pk418G zTg#jl(w0fdZ|qxq+g<`oHeR{z#ZfP$+#zQ1WJI5}y%X=<-jMn@Pz(CK9pg?n5Di+O4d+S6tgiMp+PUtQ8P8lJn zg&pG@-8-kNLs{g2rhHU-#{F}?%p4Mk)`aw!a;hx4Pj50Ma&T^?0^T1h2b%sOH`H?x z*;ag$Ig8~BQ$eznIv`%lxyssoF3&)I!dbRQ9E6mA%ds|+yAE#9&$=~M#KN#+$p&4F zH%R-8S3MLjioBC6MB46)-od5Ifc{v2=d|U#DR!2|l0i@ns(X35drV8`qW-j#B6C1{ z=m?v(yq!Z$CxJj62=(+6MFvoU{=rE}6f^R=R-KPEB3?Y-fxm4d4A#J4w1H zwdZ~>8&WWlrYq?dR!%=54izlN9+rx}P+Zhwc0&`mNAd-bTJI-?HWd+*1m^r5 zn$$Nr>I(Ts4RVO8W*(yk5Ai1Tt8?y$CjD$Gdf>iOB99Sz~DgCW?djMgT|oVfb566Aq2Owq)ND@fC((}^2dQ7-!t6vN9Kiri-JsR3&Q&A zLxD6xu59A<+XRdT6m>)NGs2Jv9yJS#56yzW5Eu;PDsZ3`BF9e$=5>fu%cb!cX#dYfnMHl;FBmHCGk)o1Ie9=HF}xkww9+mW zYTE$NDy?RX+3JRUyxF+D*_tj5dlT!WVH%WKUfcE_otfI%`ssdP_xkeqH8#zGvy;D~ z$0UWFVY0bJ3NG3*7NwlNsDb7I>)-^3#YuE~y;0b*r3o<6G71w@{&Saqj;pI2%X{m- z!Xdq;B>lDX(!1<$P{o)dki%)4`KVfU8t4$3=QH(GNxkmAsmXV84AzNp`aUk=(xstA?+KZo8*Zy(!sTuc^w#)Ca6R$M+Ou3KE!B+U?)0VVzMi>_-9lz| zW~`%-i`vazH3O@q6?~F)qaRSNltb@I);rXi@HHv3*Y2>bJe_`;+8h4Yb?7mZE5YDB zo83A@U2lY&6PO5Bg2UHv@D5;zQ|M{b-jvPFC+wcH5Tn`ghjq0 zmmJ-BU1|5jlLO~9S4D3~E9bD?OZ>zep7_KKEjHx2>+-w_sJzvAe|XYiyZJ_E@v{V8 z2LJNMyB4&%WRc27wRQ62BlZ62RrkIs1AfvSR-l{Chth{Or+4`oG!Tz^SS!0gx{NM6 za-k4LNQDA90u(*qiBf;3c};Cy4!^=O{CHyInF}yLQpTaZ0Wg45#sj736p#TINJ5iR zSqoE~NIN$?uw&4mKCh(OR32T*dS*H58;?NpOvhiC?D7G*Td3QzI#C;5X+V}}C)|i0 zEJ&gm%eN9u^n48$<8Pw0cCk$#2n{mj9eBX{^Q-UAjA=f6MpF1*uK9#Im`b$hD&PEYiG??x@|lbpZaD zkl(1v+loHLJDm}uh#>i@xDSNxy?YTWaz3NkkuOEWmlyYijGRd@bf$>sip_*xb$MH) zE-pIkO>nTdEvYf2(OI2pGIuTS2M{&-GZ$?c#p7ZjTe`~82n^&^^2_kl&=28Uy9mbo zaPReB9pOSw>}#db^VPIB=F0{x?QOf(B?b84(D0rZw?z(93MRp@0|G4&Hd%?*h;USc zJIBA6?=;HKyX2ga#~me)%e)|g@C`bDeyyJ!g=Is(bFwAS81wy`ynlWH@>A!fbkY)v zUIz;{DrgtWw$Bbnl&BX1tuXt@(moIrHT{V4R+m2Ug6Rb@5XsIfRJCw$!;;l54#%?6 zojeO&nkmOswT_JeD%Lni^7_qP;8I%uwoBhLy_+%~XPOvqF5{RX7F_x~u`ydBZ7^8N zZ5|xpz(!>5$ z2Tm+GDUE5dVM_(Cijd|R=nBG}`fa-RxN9&yrCpTgnI>sX-TTq0y!tg}=d2sEQJHjN+j7 znjdahA)9jKtXc8$E{{X?Q+`xKS`HQM2epG)J6|fk`zD;+4lh3h`EH+cL57)yTARdZ ztJzs9@acAw_u3lEG@5Vhci`^IGzzbCj#@cGp_VTX|jMVB~*Jgn3WZ z*8`_8%Bo)##LeNq*8$q=t?VANnzPqZ#DvBMncl(@9>8vmTK>75Fj{1^2bKSFH?VSLxm2CnptS=bXqV|*9ij9Fm0RskP+S~n`h|8CyKd#vvn zkua9Ck=JbTzRF$(h!Y%AeqZotf#+3C?59)te$OaR+^=EHrBgE2Smw zA8&vF#a7eh#vJ8iMwxg5fP}u#SezEFo3)!m>=R$#F7L-xcm_FFhDb`);m%Di^OVjm zaiWv~v&K&~yUhxFd{PSds4pW$(T-Yn`9WTj{%_tHAd4!j7-Hg=-}Z0F=7;1J_V5Wx zz)IQEacGnEVtGUo36{vOOa>nj6_nIj)aq4v9r33DtY(h= z)ZZHu28+i*A|_utsfiWp?^&Y)wb&LxBBKs)*x3xwHH&G>OPjJnM#fA7=24kys{NyM zw|of*6bAy;pNq!9!77n8o&^H#t*7Z+J(}bFALD-_qE(k==c-vv5Y3i7>fswM#bMV{ zO`9~?WQ8!p^7G>p=ckpWZtE~|KN6Q4P0x(zU-O2@ySqRd5kNQIFx&K>02chN53>8U z`$ke@ZTkXUk+yr)bjT#u4PPrAx%|b)jn)>!`Xv;~92DE2HIf=}d{Y<_;L_mFUgA#0MFnRI5@Cfy<); zRil>b;6KwqGk9f1mt5ctz{DhZvM*4F(^J&~b59qbu@0Ruya+zvED)0lyw&OPyyOw2 z5X3FAa!wJLr=SLh_bJD_2RS&d1Y#O8g_x;cwZLwF)3WB#TOf*ZbF(u&;^KHPhR7MD zyO|w94#|V`)GzZD%5Z@(xeOXx?EKIv^eVp<_>kiDB!QKbiYrz`vXxgg#X*Vw{ zg2wP|xfzoslB(tIi2O{;=B@eRCdf{?U3kei7s3Mpz6r7xly#vGoZH$DC&GXOC~712;4W~PC-T&q=L;_geW;67 zf@$HKi|(mjBy8;Q`ILPfHsKQiK&TBv|NLPOQJ~h^X88lTg}J>rmVC#4p7=^$fZ2N^ zh4!X%Y>%YQ1p9o&=ohX9|AbGVi`4+#eJ~@*$8P`-%_Ypf4+Kl>Cn_M~@D6Vjh&N!X zR&|98iT{EVk@32xYjGzZqji(Wz<>PSH!gR@ZbnS_2zA=~+fd=hu}?`!w07!2Z@f zT!Y)3N=Jw!j0M5n9aD+a~@xj-<82Tm;*;w)jF8S2H_K0TNT z0d`V;53~&c@U9I9BZN8sF>f1ohUkM3SOXK{Y1iEq2C=uqh8;TF37uOh2E~1JkQVqpo!2=sqwfF(4$7c{ zD3byCy^V?qrq}?0B{E*Jh@ho=($!!Z1DaQZENH9&guBn7~E$RVpT}j{Kq;m0Y!(4CBF5 zo8pu-9ZC++Tio_RpQ8u9Y&_M)AI ztO)bpDUU}2+XmH9R7GE+a-(Q`Z|^J791|KyQE6UoQ{x7#3bjjSj{Y zYlr>7T&t6P0L&e@?4%3pe!Ce>}Hm@*iE z`=m@xvQX1|&5aIyr=ik3XsBu&bL3*iP?_X54NHa^s}Id$-7>O18~NW!+U0Esv!2{Z zD;SPpTt2e;X`7fsoXPyK3CjTadMD&&mQd0uUe_Z{`V%ej;zEHS>i=BC!2!G$b}}E{ z?T7oEqXEITfydpiL3Pcft}(*kf6)yeD9>uCw(Dob8bg!TcRU7hA=szhfF$@{ zRB-|VYO0Wyt+}J=lM|-{!)Lh!)VZtn@b`0oA$bX2Z<|<4d7V_}&C}qWp{+3+o`f--!dzK{!nkYqiy9eDMT%Sg5DAM%o+*79q_h3w< z_uxXJ>Ll>SM3ZOS8(Ll0?~}MfM|F0TS-V>%Eeq%dgiyFN0ZboKY|q+*Z$SL64r z5Hn4+tTm|*eDfZ;1^G%g4nP-g%~CcJgNGBTxv{aASFfJDd8sm8#810qoKU0cR81s$ zE&JbHIEc0H)7$R*Sb7^szXLizCyaP?gGWE*YJv7nIP%o=xxH9@-npn=@l62bP^{+qg2j1D@W9qOTU2RYh z|Bai}$Ov5P%)LvNWBp9#Y*^vMZ9i`CJNi8e=d<6LFN74N;TNd8TMlTS9=Ui>_JGCga zn|#6iGC|{7i18$GKcsBiw}VjrIyX7u&WI3qfY=lH*wWT%4;=JFUaCPc9wt8kWF zQL`QPWnLb?8r3|Xs+n3xv3>6kQ?Pf>d>`hDvhwuyUGyP2`j}L|H_||)Zt=GMku>H5g;)gCZEm_-Cgy26Qp=bp1n-5?y(e_h|~dfPkZjF|r;> zTTp0#(=b0Komt+=z1zt7=pSYd7!-Gb83{(PX=xJJ*fqSs%_H-}zw$2KcO9YOE49+H zP3uR@?sYXo{L`)WV78~^I?2#>*lU}8MCgV^l+|M`Dh)1`10G2(Ec}4xCD_f1(!A&3 zPh53h87b=@Q6rG^V&-HPPMuW9azB&7%VxreUD^T~%?nv9%#EUT=rw8sYYa zC|e=(GD~wStA(T}gljRFoR1!KZ1GlQWB6==+%!fegJ%)0x8Cs3*(#bsp+OQz^P zbU54lmT~T;gksQODs07&f0>CPW1Eprt(xdEzY)tx^q9F?&;a6>QXNLQX+tDx2L8~Fb-^NeHAfDBWe)os7}M(0(2BK7FpRGyLLq< zVq*O%uFg?EVkZ8mJ>y43?hU@~qzS?^b|fJ8g0+}i{Avg*&}4*>HBg4Qtu+el zn2eFu1Ii3QX>GLx%M4Il)6q^zVrn5MZ4W^@yVqn&F5VKMpXoX-XPH#RSDSdIA=KnC zP}C#laA{0$v*D1&ncQDXA=ti*8vf(blUM?N{zBHd&hQ(mfgeq@QY2ap6(u0Ya!NKxr3sZ$VpDIUvsV zFu>%b9uP0&ojU}^-4EF=U1_`fS61s@G>1l681;ET&nBIO<96xpJy@4SoKlNuLq;(p zE3&PXa%_FyO8Epi(Xsq|$SbHscL=C`9Yt5DNav<1q~7C6{kpO>4P z%S-IC!g>C!leJRs1w!FI->I`p(+&cnylu#HLb;=-1}B6{_Y1% z>e(v}cxyi!HuUBQ8@6Vt)i;kXo0lP6i{(m)9~cRUOi=yDp>*QGl#Ha_t=fU>RqEd@X zl}(W?+V-YZ!J8!}X5uKZS^&M|n*j)CLp)BNT%ptH6$$qhy7uNgVtj7{8%Q}Y6H)wp z5Dw0h-$1UOIn%l2KAMrb_-iH}1vOO5m&e!Z+U0&xZTDuXUjBF!jkYbc5?^n@HJzIH z%r~Ko(MH0Dh4kI=Y5QZ(S{K7(q;>0>Np9;!6!vxPZMJY*MXIzM2+Z6%`$DVEQRZ}!K4a(kJAvH4e9}KY`VB0_|R!1cEs+1RBO@Ad{Pty zH@c2yLozi*eGp4J=VA}cla;LARa@S?7c=AO2KH98*$9I*S{j0Pnk)}OMcSA}J4h1J zZayqK!_Ab!)uLo2r@4OCjsoZ*&A>Nni8TbD_dap~35#p;jK@D5H*tKWERG5XWjHr0 z7w+=kxv(P|dcNlp35bz|eS-c3uBmZNY4vpaKI$QTU%mYYL}Ot44~WM4-?vwmHUD>e zW%i$xMcHI%Pa+`Gy5b;w)k>{l{pw#;!Uzu^l87K*JRLsvU*Q-FJ_25#uzpoSg_a1x zniX?9`lc2uu)rp$KuvAzx2LW9W6(9N4x*4)j3dVO)_}Z#xe(Iut}Xn=P^YC?yVXIZ zY&gLlWml~k3#CCw1ZPQdgBdr zYgTlZ4kGqerFug3^LjwAnes?%{i4FjX}R0L`bl)egNWiR>ZmSlQ&MiIfO?$C*kS>s z7`r8_sLoL;1grtEmb#x1Q(@WC-@WUafB)kzvE=HR!)3^|EQacQ!VxopTgB?FiOq|o zxL0G}UzHjw`ozq&vy$p(O9A;UjFE9e3B(A!iRT%_sA@_3DlE3{+Xz)WD4S%6$4WU{ z-Hy?c>J_f_CXefqR%qNwRZtc&icp4ImREKJ*bE~`gCz^vM_Y^~Y&rU9QRPfc%w?V= z*{IKs4K5ai5#)sM@|>dAEwrb`o%QPeLhA24)l1c0k+3H_-Lj6Vj)J)xh9aq`gInA2YTEcg2}fTN3?I z-Dx{SSgu^0gPf~W#XamM&L<>4W(yd1T9igqc8IxKHZZ5p#|x* zwL;vjEC7;!0Y#SUaDiZoe=}@Q=+Bv=8|FY`-bp`}Mb1lAMw~oF+DTb~-RE@S*B5Pt&D!6+s=Gqc0bF1P4`YL%8S3=YQCMuX zOiG|dVzZ;iEYMtJifJLn_;zXImR2QS17u$fL&}5Q(CrX1jA^+ScDCaAv-nb&;d*Ao zfb5a_%G6f1+uAxg1JY#rw$f^XBR#b&OIn0NHIMV%A=7CEy`N#0KPn zfN~(nxt{i>Kyg7)U5{*8imBSN-i{R`;dZ=W-b(zEknbl+^G99QgFO-=K09o3UA9M= zn{_n~j@Bdli1(#aATibq!f-y~bVVj;l9P|$`b-S+-k(uZjjJZ~32A9VJ=6(VB{(h| z*Vqy-4@UC%@x}qauMhYflgCv|a)+2cggB;o(_RJBPU4};07)oH#`kr=Uf54Uc>_ta z$m`+3kX)K;1`_)U2;&E$cCX1hZR?*k+E^&g-lR4S!Z5bJtZNI9TfESikB~bzpoy|o zg5w=epny}d2=!sBs3_v7e*BU5Bb)bmH?Gh#Mze^NvB}!!hUd&t?oa~Os-Wj9`WBW{ zu%DfZF|FyGWlT`x{NGo9PE}7CSxk|ymDGOv{K%bt5n&zhJ^ z;{s>Rcmn`}rvxttR6BhXjG%NKZrSQbPx7-r^1qmnZ<)k7#PZ+Lc9E4$j;AgkKh8}6 zbVZl#v>Ue0no_ik|2gKBQ(%vkN|@ty=?N}i$`VOO0BbA_kULzu3LCr!^_Pww$kCt; zgFX(Z@dtocswC~G4ARbewy9m2-SGRCBh4$jN3%pxIr2zqxC~s>j5MM)3ZYkZ% za*(GB|KsmW;e(X9C|rb|#{pmq^fL`0EYBF2@{VFlhK)T*=;(!*5ooPcm@$yie>wJozN=?pwDXQDa-(L4$ERiw3Q_oSDLSdw?0+% z!b(pea6*~;q}c)?my2f!PM+pE_JJ0Er5qC)R$?Ro*`@!a?l|KXITH2wCu@9~frrb2 zrO}?Pk6fMPm@&C#fJ+Ylw|rju2+G&=JIUHF_S`Rblnia4&krBy_YpMz?-PIk!_;tM z-mb{kETuq?Y?^Py1(8I^dfNq7MSNpE+wm_Q>I;dFoU#rF{(k-p%LPK=To&eDUkUg! z5IaA7Pa^#7VWtt*F88$7Y|Mv&zs%uUymIr7WuGpXZbmAWiQy-BAcP8_bMUE^o$J)6 z&~|dm4Si$rg{4Ltda)(VVZ~1@eBvSh+2KRr!lsVZfO-tw)-p^hFTbUow*yMsb9n7+ zL!Dku=K~sx2Tow?Q!Q5iR(@ zQr`RHcw+;X>!E17bU=wlfqYBD_lVv4cC$XxZAFbjXT=(IYehhn(;5x7mRoDh3l)8C z@0WkLW_2>I^je$7xsTVmg#+BoC$YqbR)JC&jCyeCQKhzSamzS6Ar?aKc1U%KH=sy< z2op|8xQk2j`f}i`S=_%z{(XxgkX!`0|H6=MGP%D9A z$ExU`W`w=q<&qoh8%7Z=yKb1_S{EqA?{O3IIPDG?lB+2b^AN$meKi+5AB8<2L&mr6 z`_X{n$>`(RAZZ|-f*==twKkPNy5$aJlg_g>N&Sg?%oh`7-MXtPg|9jU1Rfq@q3(9o zBYHADFN;0X2hv(>Hoo@|4w$WE7GFJy09rbmV6UlV_7|B%RtS15tdbhMauoNslBv_O z1AsKSIBBMtBoM_0T=KF;-F!~0S%d6EH?5#g2H<#6(Z)6mZigjTIwgf0@3XqUPmNe# zYt>MJ5Yum|BfZ}<6$4RwFsimrkA>d@qKOqd%%ndi?UB*Xp?Tw9$&F#ZIu=;G8a@d= zRTBOn05$KsfGS!+8|()zYHHgqr{tK=J&nU6zalEOO$Pg&=xbP6&)zKhbL2wDy{<2C zW9ktoE_bQDq@B_=R{O85jMvQGoBhxVD(-11{9lwM z1Aj6z{0IJ|=V1SDnk$-j@%G?eI z6=)9`X$S-~IoLB$=E+4Z(r8mPP`#ZU%xRFf6f{mY4u#vND$gbvrHE{JnF2B2I!D*1 z)+mXvN}m8k4mxHES|`+91BV%7dq6;=u({^P-Vx4KVrtK=m+jAtz2cls@7t;hMoqG8 zRurhR>K5*gA|1qVA%B>&agC`%SkYE02K$uNYvQksiRHExg1(DlErSwMP8FF2cD_Gp z;A1=*7+)evQYmqrR|kMIsga`RR~Fb~Ck%&&MB%~LHV23c4x3dq%#;tQrxc4cl#8WX zV^s2Nau+CZIw{0Gy<^>7kYg|g+;0QKxF>TbtzTfOx2ay+v{mBy2xE`%U2v@3uYp`P zU4DG+{2@GOP|1`?MmVp@<~EhO|+Jk`)do{uCq)-ZW4#_xyT>^Y^g=`Zl; za$Vib1YjeczPJ~l@c^*OPM1HtO)1fx8_Jbt8zmP|gT)&tEls6z*Jg~X6RWDw%&dDM z78`V5JamIpvvGKbm90c8RgQ8nXDp zf(jLKj!VO_p_`^x7X~_|Sa=qCn%XY^RIGSfaKpuG32#>VBLRoT&tUstGXie#9=m@Z zhw<=&t@gKxuwb=@k_{j!T1&9JvR@0Exo<^^p|PFiC1!tES>}4J z^EfoP7w%mmzrDLBW#P5frkY@GGiveQxzkzkAG#!*0zp!&`S#1^fcLQxNv$%hJanbr zlxc0B2LeTCLnri?^243Fhr|z#3cq)~ErVXRc*j`UpJfM8-h8RxYd=8Tm7GqynZj0O5xSAG3@xXULrjwtTlG zD`?%m^n60?ZEEYnfj5MvM~q(mXU{VoA4ugkS|9|A-MyHl$NmQhH1a zh!AM5t4grHpdXqeC)FI7b`Ln{eGEx6ceybCR2kskb2fso>gxpGn{Dt+eQ6Vb8kLRF zk}Oy~*LBRP?L>l%O7>O~*<}ZWtz^Sq8CMIG2XzCK#dwN4lEZl?VL97nVq9X{=lI)n z6<<-e-pSou7!*gS2d2%uc)y+Rr@W^Z1NT|jw1yiB$uh+<^y65fETiV8f4PmbqSwnVsGd6!YQtfdN4`qR5V~tqRT+gNd zj-WZUYA=e^UhbQIB9kbz>#t3$wFAUaQ?cNWlLDfW6=s{JIx)J9nX`ehb>V$Go6 zXDEXHpi;!M<|Q>d?wi6;M>i`*oBGu&m-*YAqAR$eo|E{p=_=(U(t3M8Fjjz7@=Fjd z*KE+S{evkAFV!^Fdb^V#`g=$t*^PF}1tw-N_{s00vvpxwkonOERbw$EKQ-V3jU>OW=i|!B1gp$^{$_o{+?YY1f}EYj+qyXfXv9^+ z34#Ht>BgYpL#OYIsmZK87VQ(FLP_YEvL1%$dYN{%i#ryHAH2nizaMLP9LNEg<|8(KH|8vkOBV<2-Y&iZ|j3dKylB9_ZJVXHR5brrc*f83x3AX zEXVYnC99YZdP2sD4E$p70Us|Grd)J1w4!qTmQsNxzElGZDsW?}fGm+IG>sK=+QBRnJ2%+2&Lo+$pR5<44LR+?p51`9W zP73)1lg}xy^%6;kr@+4|#3HD&I(m0q?rzU?Xog1P{{cZ*82b)Kbq*D0R#ylUcv9%BM|xJ)#D2Rp^((d6rvTDo0Wc* z=Igo1XWN|WS}%3Y@!{j``dp31D`MJpWTJaCgSU!1r`8CmK{rsJ>EX=3?Ckg2_slun z^6AN?3s`f!8Bx(e74$uiMqpE^R&L&m72;L4Vfy{v-z_4_xVSTo#CJ;7AjQNzDL-v` z6iF+R)lJDh_r!qF5^5MEc4U2A8-M*q6-(GQ+a`mamh^~7} z5x$zLvzctMWt*k6{(e#LG0JT+VXKii(sVhNp%^Nywy5~Is^S)M@lavjrtfePN=-Xu z^~zfWpI`9b4kp(R?6UO0P?6D?-^Z10wJx7}qe!64r-w%|ZRnfhKXHfm5HzlfYkO1>H}XMyK7!#0*b9e&jvv*CI%-CXG? z$K!;+T3j346f8&J+Ith$0KZP4YzfF`bZi1Ke)moh)FxC+8 zOX=LKj(G4`Uw?HTzdEpRU`UOqssQjV1zrNaZ!%LuBO`Ob9d^QhU-CMT$L1Ra zu|`>Yd73L6Jsw#tE&ErV9kptMY8;}%FisajUpuf75~c^iqB;iKQ ziTW^H8fHd5?Ns7|QDM=KV3ZDK3!$X`QJ_7{FaP7j-G59n%SZc}-J@soQKkR$7n z3nB({gb!20t4sg9+;>)orOESe(dh^uL?o)rs#ltrU;k$7fZs!DVbwCQ0&@dFtbgg2 ziqt7Pn3l&USY=#n$PPT1jZ?hx52U%D@;NRRl(IH|R=` z9fJ9*&7n+&_{E9j9GJ7W_N_>v5k{xJ07`$dok0J5&KxalE2+V17ZdSPdXH_I&J|nj zi^O}4mM}GoGEX}SE)KcRgG6LA1cIRtNj61E{+R(wIH%ylR>}qrvQvI;ghTu-s`p_ zB;T$0DqHwer+I~}MV31?&SPjP(FFjZ2|HUWp5F%W(2G0pYNJq}c{tY2HoR6|C65J8 z`_3Q&#RXRhFiU#tp^@}Dkt7HID6tdlm(dSpsy?I^i@I*4Q%;Jih-oYD!OChUq~eJ& z1~ql*a#dy)Ly?U(x+3ZpA&<(4Ax$13nA=CKr(#`0?2@z|yInYfjZk*&(Yba7iw}SV z>Mnk<=IDixJ{c;7fv7z}`;lA8Q-cBqnVOC8tlq#W9wROsNOlwx51J)Ev}gsk)txVl zZ6{G_%yCo$7pF(Ke1Je-Q}Gb3QT4Esqi?l$=)(`A%YNBp8>D>m-gz`>*p~Ad)bk9* zgBS5POLjJQ12>7yHVQ!kUvEMp#Yq#v{DS&CI9zNUzTxmp1U0&qzhC|HX8|>5vwoc( zB>V6Snr8@wCo6h%Z;sOFx$UJqHHYU}aCf@kP>XS?^@yi^N=~6ow+o|rZ?1}l(+wS$ z3%Nq4DIFh*@8n-NBt1RiL9Z-ZSPLNsYVb`Y7RfTVIjUq@+B_1!%wQ8EdBo-^H}D+p zfm~zAuYevNu}Qnu2HYGb9*f;m7$Bw>T_jdfavOtKl%4VHxrKjz6YB2V_=qW z^)*!$i=|v6NdHh26RTM7l_G9ELVuqiVev4>e86Fb9cWPh0#({U5E7^&MaeNdjs7k> zbCb(&up5Tm=3EL-&NCo?+13;h-2ZVN<*65q5X5 z1xTmxJzhGGD#n#az*d*MXov zf_ET#;mJ%E4op}Jz*NAUn!pTkT+aE9>#To?ca zbK{_s81*g8lM8j-S}IG$iemjD;bJO(6T)-$H-d&8(tPS{7$36!sWzkzzC42+)fxD~ z`jYn7V4*eir_vYjM>7O2p3opzi20Zg0Z9U%!2gzIhViCN)X*uA7Z28!j_Bp>IhqqY zip`!bWWf01j@|*&Hl{wdvEVv{h68L{mDeG?PkNgXjf~(Rk964ulnVyht-K)TjGdw3 zhHR6yOa?&7Lz^FK#zv~udFW`D;!=Er&H3oF_m+$=e;}#7+*#3u@%M4Cvll?@9jNd> zunOych_y4YG5+@=j{jj5R)l{dj=Kd6OG*N_ggm<#B+smLV%sC#j3fT|rXe^IO5)|A z@8|8|fCTc%7vgDYPr^C?w9hw}dMR9LAYAS2zrWt@o-YTA;y4g9NI7A9FSLFXQpza8 z^@iHO6!5$utwbgRq%^C?9t;^};=wi@8_L0WslMnmu!|#$Ab5^5f2jvex@{s&bdH;v zs28^EdMmLowWFBfOB)%cTd+P{SiFy8(xH0Mjt$pQ-;JN%Uu5VJ;}g+(H8B!g7MC8K zbX84U`7*=@2TR5-z;1`aJCVT~FEcaa5eTstxphvN>A%o1mt1{LpB(za_P5PBups)8 zjEFU3z>!JPqfsUD)39Yg#&Bd8E3()u)K;tv7mKIG@9Y(vY-TO?fcJ<|BNK& zq^8R3-|C<|7f7&8GCGQ$3ONG96hZ!CLL#H7cp6VGw_HeuqKM6?`Q^6=8C}88YiikL zRsn3vqO6^`7#nEkgGjNv`Z{Z=`7aDCb#NDvdD>-;m;$N(7;npTql&t#ndqzsW_GNU6Y+l|rDpX{Tq;Q=1X2l|j> z+u|ZFL6A<>XNhK>9xas~DMK!faCvCfN<7p{pbPWc882@%w{pu9HK;y^1rXtN?MrWmurbn=Y!+kmUS8h*};j z9yO`AYT0KnusRLMnX!itVxVgy;Gk|s39B>HlmHW(JiBbq+w%hL-=4?S2}_|5Q{bE+ z7=>aENjq}Q0T}A=6$50m7X#RCQTQdMCzS!fDfq8H-YkYW(7b=cvZVxK7>xu9?+g z57}C#QdSWOQ2|`{LZYC`>3DYs%Oq9g%s>70Z)_cEyD}P8G~M$~M0+9m;73qX?QjstDrCB@6C4dTuz?AB z=kbP@G+@I+=~eb@+dy9}D+mr)31jyPp7p1SlYI!SBVVP}d)xG2qq6tA1;%Fg^7d-4 zrld5~;TLR|(j+Jjs3cFvtO`2wtpCgL@=wR{G+F4uY5WOx+&9W?SaZ&ZpT$jWIQ#A5 zlZK9RhL37rbW>F`arKjbX_7^sN$yu`n!ra6sBHLJV4boCHp>uy!Q!uW1P0z_;q`3wm$$1-_d{k+!QOLTFBcx6 zv_7C^e<$%58O8LXs7zXvYtDlljO#E?0k4onK@g{Fp5864t|D?y0k0gdG@2%Vt&!)> zsT1Y&?^eqX1t1x-^JQ%w+jckH$)5jhCNhSVr7Sk=BDl}$rpoW(z%HwK@o7!->BM+# z8%(b?0n_%jk`mmLwT7y@Qk70;pf3Px@nl8YitDdWHBCjQME!;`3+FyA74|_pGPbLL zqB+GSV5rZraH1S6Pggg~UPb=CtOd^XYX0$t>5m$?G}DxYU$e+|($dx=h_89mcY8@* zGzG6~(&WU%DI>A#6AAO+UhE|nXZmtG87#qf+1=Z(0pOa;L0+mMEAX zIq+QQI}G{Tye|3SRUz|8hvi&v}Fq!KgP5&oI--yoU=0PpFKPT09R z6RWu`ud@<(^y6$uxV3>u(|vPooBR6cla)>7nlvrTbM@G6E}9(Fe0dzrcGW)3=xn)h ztGH81Y!9kmMw3SiRhnMXvHBSGyc>8OaW{UicVQICkzz%VMpk*P&kwZ}SagiIc;Ty} zaY9yHLKon7AdOB)73iK5Ko%1D37Z_&ng&82eYorR^Pxi#UA5D6=Z|F>vVv zQOhN1ENF>n;fcm>UlD`IRnbAb`Z6o$_4)U81FrASgGNSbgP`|trk)?abZRp)A*%$AcBR+W}hO|tv2SnalHv&*5a28-x5ji-FPnv73q z^|aD_F3xoXZwgMK?wyP;B1gw?&^R=rV?#w*CgWsO9a>#krLjnX@wE4GI}>;hY~VI? zUb(c}dxelMYD#a`Kbdp|3(ZApp`Y<&CnkHN)KPS>*>DZwog&Apw9sA8ZKB;0D*}>B$8l4;;bVQ6@fOtH zMZyUzkw_JB3jS{;{5!?)3wNtl#sY3xgKBZt%{6p0hSzOf;~!Q4pEB#S{cONQ1gInc zi@%!an`*bIjpJtX+?g?i=oMO_s@L;|S{q&_)ELVOM$BNZ3FBS1-6*mTq4k>PO zR(N(TpC&>&XziEj#X=E~OJ|)c?;G#JixUq}j)D0mAH`&j@vcT@Fd?Q;k_|Q|U_d~_ z_lXfUt()AYxu1PKfn^}3y0MSWnP}4}D5MHPL23oblK39nc$(fGalzKN*W^twjps|* z{!(MHnk*r`o7;xa>UEi;eBqZDiNKC=%^1zm0Jv^2xqoZfAS`fl{KQr?istGgU$TlN z5iT>LKSW`WkPqd-r3WWUo~e+UyCX`jaIp77676<;tF@9ZIbW4-e`;Y{CmOs7YGD2i(<^xumbPU( z4*T*1T(OAg%sS+b3_R073us$yhf-Umt;Q=h^Lq906ygE~qdSwPd!Qdd2QH9isAX}p zoPqf|s0VCg4nzrRSDJX*eTES<@__cC`}6K(H>!{QQj{@M`kq>2Q4bWVmPf-bWofoS zVj5!gq2YicO0R2n1yzLP%agnl*g^XGhAlNvG>RmyM9m?olHsvf6>O;`xk+vS`RbuC zlo-nf0YU60kF=$4YUZGNrRCQUpiYLh)1KB?@J%Yr!X=e1B^|-6n3N){v~;K004MFz z?_y`_$x1;E(4wGB__mcd4MEYSwjv{?teZNQg?Rln6sn@&hZ3|pE~1j!@#DbBK_jp4 z^arook#z{|p^Pfn{RlWILLKVCCRxe1K&;tc{OlK<`2C7ut#H)ukB_B)&r)j5nG9Gt zG7McD`L5IV;SWo9KeQDehC5)4UEN7b=1i5l&>ln%>@H}cR*TpGhHAo&cjs-dVE z7{XE|QHuXeO~@bm@F;mcwo>L60#KocNMBo9bB1(Jg_R?4@&sKcEj%i$_=ck8fgzXB zEM5>x;G zFcsMTZxPM^>6|b#{@0z8VGSwA!~d=0PN1x?3?|VfW+=xdEzb^D$~1Pl)@I}a&nO@% zAy=FX<@ul52{69M#1oN;-7z6chJIn^{I@eOj9RBk+lL$C$1k6rp4YEGbn^iLQ~rMC zT#00oQjy2dA=-HJB2MPtg}IK=kfmYp$i zP?6+i6|E*6U6UN=OjDh07{gP}u^f+$k2 z;O#@EkyG=hU1!teY^pP|`T8wAJ!RW2`ufiOCG}prX9Lqri2V$r6MLVWE)4ZDT(tnu86cj9q%rg#jA z>F!Ak;Q7;lL|PD%Nq9H;#e@vU(RR?Kh zh?(h_+YJlq{jzZ}AB~yI6h4E&gd4hUu9t%*t*NAAnF(0+DVIk^8^N$X!He`|DUH`k zkFn|QF#IZdukM`Ienf2$!xThg#6TFyMpeV$@G0HCWn`#0B#3ZRN2?M%6-}BnMCZiv z@~|8(^f(JLnVZFi`H=F#yf|fdk>=C^dp^(7!tB= zbx9H=dUY%)jj~v=F>*F?Q$_NQ$7Y*M3O~d9t})k~BgAbOF#}-H0Cv<}pC~EPeaQ(- z<-wUi|MGF=0+39WRRVVCB^NS-|Hdc^GU>?F*jqA`pboD-)TyovE;l)~+e-e}1M%8% zw&(caF7T~=pFUFL?>Nt_XoQzUk+_lWB~cSP<~bRLx?0@ zVLfK@CM{(u{rD)9v!2su!NWclNz~&b?!mk!83K^PgHyRs75@4+ik5QX9=MuVGVi*f z7*irc3oTKP6%&8)=I_(lP>W9!3}e;@pG^)dHb6=Q&z``Y5<{Ty@_6RxR96=Xnm;kt zoJV_yzjTuOW|14wn^zoC8LrawyiA&g0fj0?Qji{y$x~yubA8$3)V5@H!~xj z+YnI)0UUpnll3Gof}OI|y=V^;CfKHVQ%IX7jE%I^P{*&8{V#mzc_kUN4AXq}Nx?xq zzj!G3YP~h}{MXO!&5F4UQSW44=Tz>jrc}fNP6m7g0N&D3HG{<@r0&I72up|Mal zM<{xMItZ)u#M>H5L8=GV<*P0uN+PNO4rih@CjNe`|mAHkLgG2kBvccz4RZv|v2CLLNP+3l?o~uEGPT zX(F*0cXem{{!+)dYbgIPa4R*Rh1tLuY!w~ld$PSvmQsmfLy_OoWz$nrTH%yA^@LRm z{xM3V>@?Qo1nb^B*-jAZ^j3Q1YN|)-{-AN$P_Un;wcD*`gTl~XT;2WN*HGPdi3lGmPYv_;vyP~h`iMD?YA2?47&ro; zg{NnZ!T8H<{M`mpfCx>*b7?#v_JI&wW5{T;xK_0LY_fsUtKp}>*ftxv-Q(!wE$o8Y zTU^*t|B93ozcaxFIB1Y~1%NvV&n8|kzGxvtM*1dy<>3m@YtKeAJ)_tD^>uIfj8R+e z_c?mwfbq=M!sf&TkDHm1)I-(MJ{#KP@Ec?2*wju%O}fJcTB3-q>FzH?h)vFXSYJz< z%a;wb9S#@BMYbZ=c0HhYaJ!ZLY>?Bz_Oo1I`3P43eY~%OjP4|;30Zhe^0uy$$UN@0 zOiX0qjCGT7!kE_;1}jzME(vBzq-c-Hfu4_a7wnZB)t_`Kl9k!;1_>ylDIBJJtObL| zEzXN=AQ@1(sC+}JE^Ll7S%Ain$z7Rga|uR! zcE2Xze~KiVbu&S-IKh?+f@_5nwO{*ep%O#7igtpf*hMGV3AWafvk>@_##)`r#Rdk? z)3g@Kw)+J=3`nuHUI=o(4cdN<%e}JBtIsdlyArUY^Wp56sK(*!)I!0)UUb!Ud2nVN z1X=WH<#7okzfGj)=2oQP#!1-=)sHliNa5%1Hi1N>c-D)si)i%czYO8D3;q({9 zK7Hq5vwc6z$Y5!U%iGBAR|mF)hqA*UltjOeD>SF#{QNR(&tg_qM_sDq=ZSTXW*)Bl z%8Um7U;Y={5&g^@M(MYo-xCGXZxtG?*bdG#E_LpFO#bv{qFa#~@nJUz^k?*+yz~ut5r)@oVD+_hS{m{R^CVpV zUp<>qGc5M0po3ij*H^C%1;ew%G)>8%+FyH+o=rEZIY^6m?qW4V?!YYc+mDnAEueCm z3b|wjP2qf)9j+ED6bo=|3K{FpbljNYNog(;J~+mf?r&+)KwCX^N*4l{ne^duZ8T!XN(*cgcPA7F)vb=K_1oQ$>DRNFmH`%rb<$Ud5{ zUmLv?*@^ES^6yV?6?rrB=282n!Kwkrz>Uhd4=6F$!(LQJhRmRZcRfz?WU2ob<(Sx* z|F4Jn|JEtU{BIx2|N5ZlL@lhHOdRm(M6C^+OoUC0?2JvIczL1z|Fy(!8^fBDHCXM4 z+m}>r(yS=7@M^aIqS!vG09T+on-?+F1Vp9|HO zg0L9~0D=ONjfMwij09ku%J=ZTw5vt2Nnewt^7&39v}q9?j;)NjYa{{wqI~*<%Rz}c zfRsY0OJ*@4HSP^yN$CCs0@+Sfnn{p>iuXlLBxkBJ zR0MM9uPpK5yp^HU9tKaW$ZL!h)iJ350Z@l^kj^v8=>+4e-bY>L@hQ zu;Q>%JfzuuCYFp@A>PvR!Gbug$#MYMNudnwaRnxbIXffY)Zd=!nTR4?6IC-1(qlCf za%!U!03zH4TYqSdrlw#Oab#bx+*Q3{lRSqAIf!_|H<>Y}3!vnu_bOpLiy8Vwl{a`ZTI(`?o%Jn7#f(R@%i~VbKZ5AXQy8E@;*bi z3$%{QTW`jU>hUTaqxUJ!&`;uJ&^~lrYGb?KseW?<2gL8XzB@2qgl3cL_{ZfMZX+DQ z;WLt!==KJQXTVfaALF+zP48!`ddiCF=YCj<$!FPHGaYA2Etk*b&FG;9E7}*}$hJju zK>x#8^f0&M*sHtkD&@Q62JgGFGeb6KmM?wvs&I|0J%ml&w4qPEBS@zA)~u1E#ADl& z&M+T|&Bpv1jL7w%WO?OeC1qtrMr(t+IhxLKkwsyY)Yzj+rZfF@r}C9u>@ar~ zz4GTLcX6Gr@c!}rphD}Z_G~BWm-lD%4SY+#pABV#qzF>Y;9Q-hBKS8T7Lt{mN3i~a z@xyz!^4E;%XY*@$tIzGnfkVgnrQ*}Z!+X2mWk9byPhhUEuiEiReg>_L7jJ&SXjtDH zPA-}>LPmZPE?QM<{}HZ0Ll&*Ea@^UT7CwwrOv-38zZ`@7XngMN$27F00+#+sHzxMOtQsker#^4!Z5d^_Qn9@&4g7S{Uc7Hq zb^p>uJP)05cai9xq|cThu;}je=)xR1-lD}MHvj9^0hM2W5HMUnSNdTa2(X`66jKfs z#0eJP0GybkKJPY=UlorIP&mZZJ}ku=&w9iVN2unAhWlHIFkb%|4MAm+{o>poQK*Eq{eK_t${a^R%)JkcJf$LAD!E=oM);sF)qg1YD#+{fIxbUK)M- z+1LdXo~Oul^6pXE3NzzKpN!H>5E;c12x_QMAFD#jM)d4YpJZ5L?jKk|p-B+CP_SyD z1!qdkk<;QGxTAOl&@qj{LH-}x(E;ui)3mF2g|D2pZ`B}QLjX9&9y~v$|BteF49+BM zqjlqCVtZm^qBpjaiJeUBWMbR4ZQHhOJ9%T<-g9=GG${4R} z)W*NW<5x&W@2&OERj1CCDIQ-z6W$!r6MjoPrzVmgAfP2LvlTx?QF|HwCj5h^Nh{23 zx^V(aiWq9an_mn|OykuM=(XIC{pHh*&t+PzSJWzu7R#cvWhz7}kr_mZ_MoWqCFVfz)jw$rxdSRBZEVOxNn}Po zP|0iGISvcx5-l18=G+q~>Q1U%Gf*1BjSKJ4IrH_0cdh?6YxSD z3qPl&ckwc2jvCPM|GZ_&_=0iujp?uRFLFw!K4-*3u$Qi8yB~j$a?UW zejeX@s3nP?)luSExan1v`;4pGNDAJ^akXxstoa=FO`!ZFhFy*1-$b#mt6r@6OutvI zJ9-hQT+2BF|AV2I+r_{-K&X09G<2H~?Zy`LNdcVyaLpdV*Vp&($GULPAJ74p!2w z{`K)xEP$*u&&0H%o^p525+tgo=PLN+sC75v*{1dT^XYbqogW6r2EvqcX6Wb^WXiHY zX~-3R>+ij$YdKs<@4P1|XTJVS6qZ93RZ<|`eb^Wfl=;Tw zDhtnsM{qt;+(4x$wFtixsd^IVailE0wm)6}Ud`Hgv$nc6l?NBw9HWa4^qk-ceIYhmL1`XF&?QzItqjgc0+TN(x8iR^tD<0 z`OsQNdR+U6&U(q(eCa+vHJZS&hm3w=75EOK@i{&mg-4qr{YzKQ!})%7iD-qWk$inXRIyB zVQ8-!1@=nNh`4`uuTT3JLbJU|W4^&($VwL1Z*n7mi`ck;y%4=E51@5lMX+qbshdq* z3Ir+BO?8D|iv^x1B42F;ZNLIXd$}B-EN{5p{Gc#XAmdkt5f|^aa;rf%|WZJXk5-AC4{I)C*a}Vh`ZJ8fP7lWk)QC9>~v4Fzrd{XpR)7*Q5wM zYof5=>Qss_Ss(>efPLGZb*@Y8Y0wjX3>96ORJM z2weU|Gx_XKJTlI!u(s*=Mwgzh%$#ndejM!Lq$Q%MgM|EGBoCv z9hj9B9{i`}B{o7LMtjiw7+dIQ8`Rm?ZG&Stft?TJlYe$DVj441WEYt^&dPeJMj-tr zxNsgl7Sm0~S9$7~vvjROh9`q^Q`l7v8h!u1z?`9hIdBwODH2ruNlAkLzs!?f7Ndr-k2F2#u1~en{ zAh<)fs|w1SB=f^_XSyrixukY5slPn;2VL=GN6@EAeayIX9LQt+#y!mo=i1N5iVV0i z=KCM-59p52pkGO#uU>XjkQQHVVxXn5?@DQc!5p9+AyOI#jJ#%mq3rZxO}YtLhhEM) zO3A*}FBpTBLxra8dK`?}wXF$7`Dva&CuZ%A=b+F7u*3?y`1K83DSF`Uq&5rSj{HOBUbRm+E8{GRZ1**YKTHdoLK)0{i6OyNxko5?#bBR(*%a! z6wIviFjhIO78L zFz;z>t4o_3A(sDeG*Ic;`TB!OWcO1zdH3A1<<0~0VHZx zP>*n@IgQu3)-wV&el>qO^eVIZ9_ilRU=r#;#osQsO3IQS#@4b_f{(N;2vB06rr(V} zozZxounj9$B+;k})rA7Nck&Sg4E4)iR{UC@C!ECB#aH~Mm6&~ zzD0V-6M2emZMYK=pTUXIOe3Tes!bcPPngi#I-KMPm0$%w%S_59IZFeV2{u&~JcB`vF7zf=M56RJM{n6g=UWeHvJ^>5C(@~O@$Cy!y9H=fTxc2@M5Z)C=bevIp z-Ug)~EtP0&)smi@%jL!(lv0~-#fZD!tcQ>jPEO@pnG?{%73~kHOY*S04(tkf9Pqng zzxIeSvNs!6B5-a`5Ikb(`E#wjka2J?&1-!BZq#wbzd89$XY9p9ODIZFZ*xFG~81Fy^wj@S8lmQO>3< zFYf}i+Cu-#rAH+mNd@U*@0e$=UzpTO;Trs>P+S3PIpc=_P?3uuXGX!tqxofdztl{1 zHpg$hzn-m)1DoE-jCa^n}C3u%|)r9-BW*k`%r^ZchKUYT`bcRN4}3;>|j|R zo>zqncnufyFb5UkYXUjuyUdb|y{gW#_q+*5-dP^|M&A50sfELG;M!|YPu5vOIlYtD zC!#CZ>4CA5rZj<1_%H78S+^^koi@w69r|gh66M!B%mfZc<>Z~{9^TI%D_mit2u7om z&--m^x?;xIzvI)u5NyKj^x>~A43v`FS6ZQF8qS#XU5~9txBT3Pdt~VR%_(t zM$Y`9pTZZ~1$BY_9-YoKHtqgIhWec0yr!0J`erY9?jM(nwu3dQVn6B}y;Zw@4Obo* zW<-GSbikKu8s5Nw|7>~Bst@2%yUc|}wFIkYU!o1p5#++X)BGB zWd!<&oflSF80*g6P$xSSNN^^9hv*O3M$KYb<3|j@zNpRIyO@_$OZSJ_cZqX4g6ruj zWm{T7=_DjufW*-J8mGLu9w2N6|tz zsiqFAodcZ|jK|u2^Ay$n9>!$o0+UQJ#c?~Z`*aCQ(;kf*gkfqg@9mmG^vJ__S zC`MV&J{hgILBhSPg}p|{^_BNYu;fS19C?nu zKx}!&^wdx3;qw!<#CV7~eaK3Bn+tR7-Xr!he>Lj%g%t2Dz6L&g`pl+QxtvG~e@1Fo z(h}`XzvH)Ux`3Guvm)BAArmkDBTu9QNL2P4hhBuvxXYajSoeK&!7bp2xQkJn@T- zxx~%YRyjW7Dv{PCho{R3iT-4e)gwX{(9j>#J$=&xM!ryYnAqNiTCCPJ0#eicaW!i3 zENFaP=Mo1^8k6;;gA`UG)z+m9ZTarwTkGVgVRq@oSkb14ziLL54!C`WYi#*aZ;_6k z3EvOF&*I1ldNu|KJGzmjszh470X>B92s&=hxKE7f!mE{L?W#|gj;c*08`zcKql=I8 zt`??A(;X&7aIQFkD!NVxO*ul!r#lrqcxC8$*@feO|CJA8TVKL8c02`T3&JkZ)YGnK z&*EipJXVd%EXCjd;yALZA7~O^m2cUE(q|8J76h**BbS|3Ja`C~j+~4FVM{^X^hygj z@pTj*7Gl}2Xqn zQ$J@Y*lOYv8h9q;^WIa~Mt6<^qxU*Z&hu?zCufki%)h=zF)uy!E}01=6vhADzWpGK z;_5xJ;sMEZjjq1>&t9e}>$$L5hC&Hg>EredVvxL=&UUr{O_ZjhDV7ePN?d9q(H@pi zG1ApNh3+d^2w);(>_woc>A9Kr;@H`j9URp#XGAen0KeJYS{O)yHrU_}6(-sZ^p5Nh zv6XTgtq9TezDI;)BSwa3JGikFpgkz>b!0o-T^QK8$mmNp@=e6*qy3=~nt|7kwbebZ z>$|6gYd<65Qou2-gI8<~>`8y5verl-2X!aL*f|lj#9auQs{kF>2cr-((6aq0{6oMP zqY6^s(bv3@y#J(( z{~4A(N_(~ELZ z_gTZQM?EdF#@&@x`N3PPh$k?-v^zutOYaJ12xu0oiOQpbWOj$T$^5bKet=gRZ|CEi zhf|8o!XMFGho)c=mErN7lJ>wvuFC`|>GB3iPsM!J03Cz~1UmYXHnJGba%*WL!J!N3 zvv0!j%(9UGDY97J8<|BFAH4VX{Hr}x+Og6B*g_9<P3HdEM#vbM!B@Z{f}9 zRG&QB|BmguVhG(;Pw%Rq?C0RCONSNpO#xNAG~{4>bR|TMH+Lm zLoEO9o!aO)v1#|F)%?>k*Ne_zsF4}!S|*G2XLMZWQ&X+((IvX%UktDQbDF}Shv2>K z5qY~S_~g)~R#RGRQXeuSp&{LPp$x{|=qe*Vt5dJmvUZe`M#&x3MKY$3L0f6-C!JtAyN<4f%0=N1&ELo6SK1!k;#%rnj-n55WN*1ve$N3;W3^xCH<=9H@* z)Snj=f~WUK3P7Z6u=QkJAQ(%yi}iF?j=l{LNglTtVNg6FU!tv)@GX7i`#<4^lMYM% zgSzAVPcGR1MLs!6UE}|8!Mt;H^HP*c$6-N{Zft4F)-QHBR5U0Fx-Q>9|3OlWbwDL! zMtb73$$QXPf0sAT_bt_%vP8FeT%=U!gK=a%og|9{=w_L<`!kBM} z21Nbwc=gyjC8Yd$9u6n%DkJXMN;N2G(VHN+uX{dJKfs^tzmHJt)BYCh2xsd{Nm<8& z8ZK2}+p&CvQCAkC`{uKkL4lI_%72xM=c)+Av{B9F%M~%A5LS0sHQSq&9E67Q0dT*{ zRm7sR*5FWbxfQPw)kW+8^WdLq<7R+;Q^!bM9=z3&XtD3ZdDX%~L0UZH0Sw5Wqc8yx z*2XfM4R~g6Tkq_EUKr~Wn=S}^f9Uoq^zyq2yz~m^)JP}v>EQ}|^G0}b=_0!wyrqol z^xrb>6hXpKXj`-|=2`F>>DIPjm9XG%aLBhhIdhv0%%kt|{mTI)C(|!Eu4-X=AS1J8 zhrwiK2Mq-iUV~W^VTx7GWNrjmp&}FeGR@NvJRr5MmE&=n;P?%&rXPyQI;d__OmtI{ zWB4U@b<5brUi4Cj!|g>rl0MJ4;HUZR5pkaweRvquP(w`od3;+3LtKxGD-g@t<|vQ@ zMeJ-~V4-U8Sd6rX6O|B=c7uDNFQ`!apTq~5(AUC4RS;D^B+DfU6#sZB<12A0k>$w?a$pu&IeM}qLOoEjGIuN`de{d(H z0_!b^f+8Is49g234Z#AFq$@Nl^VH`N6_bAnk#Len3*>Mr4PWm zTXwwG9pT}X;ykjKPTxYg9EY>6-PD-%E%-w*C*~b7o7?pJ@5pZHc8DglDtl#78mK0T z)NyDPL*8Pm+V}_|a`&KVsHQ!+)pv1^gsY?;5peDyludn+Zcs%r4(tmiZnxD7#-};5 z#h!lsh{~E#)^(7~9Ik{Z*x8NeHmu99l`aIL_K_UNnJtiBYj1-F+}j2>2y4NMdO-d; z&{&jC&0<;}6+hC13Q~y^FGw(-?L)A8ZHIBh11(&e`U=IE8Vih-UqUoY9$v#8tI+Ga zT}o+gBmaEj>vS<*2}V6T=oaNNXsJr-5{kT z)f`C*QjCS#K*JsKc#*u9Qh*>2ZDE;Fy%&UNYYhFFs^z^(k%dw1zO8m*OVzl@L}ZJ& zIxZI7`xar^EZf}mN%D62X!TRqZ_o%WjIfh|nyC*PSHiqODp7#koS3uE5x-kRVHs~D zSE(yBPz{Vf9~_LyGAp&D0?ZIzhAb>Y2{%>%pzbP!C0pQ*6U??dv>EQpU+QQJL2ML! zG&^@afRFet;b7U0(ZM(%ob7jeGqO zPq5j{N=|SC;T;ihM_pIF^|=R=Zd+SlC2p|(YNC&1!!-)ZTN@Gu-Ap6DOhoh_328V# zHs_{pIeP|Wa>iI?j2YAkfVm!3sO}}ji@QEq;xY{1n!ci`$Z|)GUUQUE!AwIu)%+K;(rqPMux9 z$G7&b*?z(z@QptzwF9RN(l2-p9&uKVc9so+kb;$mJ4`J=!TkTdUSBNp( zc*8`2CRu0W`56Q0#q%A>*b zXCK|VBbIdQlC)ABb1%2QdFhQ~M782;Bs;vFtdZOAgQhYQm(5HNs9ig;_WT6-5dMsPu zX7{Fh3&6V!haR{SY-zvRQqF0yh^O$l%xRJF3SrvH$z0qT%;$UrzkX*O8Y`o65$zIJ z#g8R7WKKMF&e}6FLds0V57dt*n`yV&)H?sCw>y-UwiL=~vQ~Px6&9mB*3PUJt~NK> zYCdzz`siefbuw)3Rk`12Z1}5w$TogcTyK7qZL8O@Gqv4c=G~++a>H$$Jvit3`fcP{ zxve8mc$;O6Z`=dRCW`NeJvf#$4W%ro14bN0Va5YY0;%3=00!J*#|XTTA3i>MOf@leCa)N%=aE1izoD#J$C|HJYb;dR)!`_O={ z&yXfM*73VyW3QBkn?hfO9Uquypm$2oEd?_d)>|$jq15com{O!Gr{4aP{Vgmlj5|BPD(A&%A>}^vMd)^Pct{R6H@$iU_6!a+glD@tzM>_@iy|E^z0*3yO32YR-?y~t- zJB`+DM}2VY&x}&0@+#SmSSjGnL3ftw1>te}X)F8!724cg?rVsd7GA?i8xl$Ll2bEnsQmsF ztRu(W#7g&9`l*`ei^Y-P_`*Lq%I`(np%}LHh3dhmP+MkDesZkak`#m{Fo{gUvnxo5 z)Z4L)ft=Dg>cp2}BuPjxTS67hX^&=RNF@3`%R77dkf2`07@KBKZ_nNw}5_;Cj{_{ z97kg0jA{8!nxYzq(Ht7BHGQpRhkdy7Yn$**TE&T=6K2YlN=>Ik+wH!B1#-Z_YYsNg6VczaPyBm}m&E4vNX^mL ztSvxl)7Xbf%xKU;;ku=biA#u*yuz)b48d~y3@GBM!7=jlVt0cDc{BYYnbDMn$rnwy zG%r{nBa{-7Amg`bVxYIqM2lUDCgtzX5bwOV-(8SoJe+OAiT!;UnemujZc+PJ)wj^A z<9(+jeyU<8?(cmQJf-9XriF!_IRQY0VFRW>S7L>_57s{1XPmvKdb)HM?msL()9J%M z1tcRGHPqpqy<;svEgWX|A{=pa34Es(=fyE0X;qjpX{Qwdyi#*&m9I{><{DV`!4S&L zedRzCOWOvAKv`>OQ6^&sn7$fCt#G0lu?2%*DuRH!_fj@nfg;jBwv7*nLhDFa(TEN6 z8G~El5ekV&3Ka75@|;6pzPJR4&5SS9>?;H&4=Kgl&F#%q;Yq3|+Z>C*&JS7b030Lk|R~p6dr!{~kNYf0MwZEe0DK)oXf`$C|Cj zO#a~10M%dyN;RRWG0|=qU2hq8ZIELpKv#dPoLzB;Z7Ql?*e?=8_#5Mfm>MWhNxB&8 zJa=0Vi8YMqzT89%tneq>IRq&T)Wi_eoA**oYS)i8%sgJ{&|`o>Y(wmji85B86pC7b z-80r^yiCa2%P%O|XMElwQgRJj5{faNX!>h!2&rR&-^{vz)IM9Qj;5f1G#sx5o&(^| zg{=IJMCSXe^kv0Kj$v9@iD-@pt>-B_{~}usg@|@f1y`6|gH}rJGcJbrk|y-Aic+Su zz;U9k<^$!Gq)dj56!=$UH#UsrIQMqnUi~Fo? zz!l%el4Bnp5;T0=Y5wB|jT{424NMlTk0l=I=dnRa$1YfT`Zc21wR>!_7&00{a9}Cr2w`)?#8jQYYTs6Pq?Wi1iti z+CL|T9jUU*?UKOq<-4q)P$+_C-AR8qY!yi$l?KQx;*E~r%gL1G&44!vI?;q61cw=N zpL;BIL91}mHJ9CaX+M-?=@7WI8&4RnD2pOw$}}8RLi*<)i>y2_qIg=u%I~1RoSv3y z8lo(4ROHT@cUZK8Rj(Pjvtq#^FQjQ=5;2a&*PmE=(A-0&q`|f0JuQLux5Zgeq!c~; zq<^-XYu~+y-$7m5u)hZbONA=1M3>5XP8+KZ3AgqLwK_|~z~n@v!N~rlcv!C(m$1^+ z?KoDA9#eQ|{F6~?BBkPx>Db$+?ubIE3BDs$C$dv{df~&Nb9^LTBsvgliS#=H2td~I z(?me{H_^TpDJwLO@X`+mN_#rwo}3wXN##F+x&YQtfcMSRO}0$O_yYKaX1|#MG@OZq z@xj2_XVhZWDMl$~G{4+oHZRKii(Gg#_{tpXJgY)u%hXll(mfk3 zy6n~5LqvxtWpml1jd-etFV0)JPf)F@Ksy|FN)LwSmz6=pR9%)u+Ugf`(b3Jm+u8() z>wZCgo*%Zm4U)Kki)FOZO_33bj6Rs+b)R!`=?~I2O75kgu#KXsiAf(gfe*qc6l7qUENcW}ibwHYZs*G3#Nkjrgg9kdWGtv49(s?dt$| z3rVr*fpG9Ix}IVeu-i2AO8-rIfLM* z+et$EkI?)2`)_dILB-bT(SD6P zl4Vz?UzLfz;N8k9nVt8bsjlxKe$<`R%hTtIcYCS~ zE|^ASuYK}$WPf|&POXr{1K6?5N%ES>PoUgs$TWOMLBeWHV3rBju|!1LJa&kN-s0<5 z_z0&R7-ho`{KNEN90o;A`9cu_)7V7R#N6B16{k9FrA!ry)w#;P>K?2P{d+frRwiwh zG!|*AslMv!RM8tYbf z%pdj5{s4qOOT{ zl`Uvmz%E)0kf8fbnS|Z3dGvC7V>OUg`#kW*8;JW;`4)qrSTg3Ihc?IXGnC>7luT4t ztBf^kAKHqpmYD#r1rs3&Q^aGM)P@hO!IUo;*d4Bk04EENPjB#RM-WCWiyP8V5tn;= z-Aw-k^N>5`;1HB+07*U)_?0^TG@N};xfs<|x&yEDGiwwFg+k?yJD7LLc38?GpU0lwT_regWo#9H9@$+xBV^)3&E?VMmfiLD>?hAFqqjPo59?Dw>2o)V z^}tTkIcI+-+{qedR!lIje^k)uRkXgHE!mf0I$Kv=+9KVE-u2uTAqDmfh1Fgqf*%nf z&{$OZQUb6?dcsfn93TM@O?@ve$32H2*hF}(I7Qrz=Id@=G8P_O~n7oo3VQ$4{ZLP24OXWJ#@eSPIE_i^R?&>?G2ZCjTiu@(%bhItn@NUaufT4@*o~ z!O>;~6xEgXqOxe#?J0TcpBywqc@49*iVnIvaLTn~tlJ+!=K|iTbhK^0_Fje95cO6e zy1P5F5K)`N$r>`<*3%z6cM{weFjT?m2=si$%#v36r{9miFV+6hIY7Ke?WYt>xb=*i zd&FVbGMdeaCw-I2EQEZNiKTaNY43@v-Kj$M8@IzR+_ewR=7dIpcs6oDhDai&HsKCC zDWaD>U)qSam8J|g8o^iPoR$OzWP#V+^v=WV`-)df$!J@Gx(h+ay$|C zX;#&?nV^)Qrb)L`i7}gS0X%MOmocZb6fhGXXW=RF4A!n`d-M+rj>&sWcOUzxp{R1C zf5~8D-9CiM>VJqz6HOlQcTA*4s`o5imN*)9egqvq&92GQpcJV2Ix2@tGC%iA?~PqQ zdcSmA$abr|{P0kEK7u~~wkIl!<^R;l1_@Qw;l>{*zMrmzEyRl?w72ekYWis#QR_4J z-bZcuOMkGDb<1C;A(+GqQ@nUA5nC8gLa_V5u&ylPFAPJ&>g6;g9xe&t z-%3uts4{PCWI$#1)mN>0nSW&MaCWh-Kg;6r83_kW3FaCq9N1@g;1rF<`J4 zR_^dbGdo`Y7$Zvm@+)AH0Ocs|1Lu+|iFZNN5U5T_PCL9}{??6m$&@a%(vO}_cwRyD z%u~PZg9n*BITgR!AO4yfX>2-Cf*dpx`-ilhfIZIlfAQp=$A_^OxZxHrjGz&~A|_4^0?VwXpyA`9^4rqczWA;ur)$`<>^pnMjt`N? z&Y}^{yRxm{icXFeMS>)9Zd<7Q{m{Jj*>hQ{^f$mlsTsh!5m{I@>JXUpLcziu8W8U> zkvU#&A6DFOdg-Pq&iLvdI#DF_5wI<#`xGObNy7ns^^l=Glv0FD1F+2$p%#gV?5agU zEkw{+eTHhWs=x^h`3vR9?u0>cA$6T7V|u2Ioi)1G81PNC0Etx2+A9C3l~a{{v-W_) zxAAY8?$wenNj5X`7vEbkZQ7?1?H8b-EskY8)##d`I+RmQ1r5tEI@j4}Co&ofM2^ib zuy!XBHEJQG&da|U+EfZ+pxIQY0%!vPAtM2SWGsJ2!{A#Rt1PtEyHQe}3F<=C#F=DJ7p{4`xZtlYz?14R+K&A`Col8kFrjX<8$tZcfmGE!nZ&BCb3 z$WjZP7v0ZtRo?#~0Ga>)0o4DOCBpPCmGD2W|8u~!NPQ<}zZJoIr-#JG$v3Q=Fxl8< zE@Y$cLR<6Vv6j0x@8n5vpChb2`f`1Gdh+v;Ty(7tZDuOhD|}D_UDTV5Kdt78w)^e& zCsGgL)z0T_LG0;o+vHp6$}1N}X|*tg$Pvb^>MxujX{N4im}$3%=VBM}=Zs5j?J9P~ z`_jsDlh2y>p8Rar@{k%fMWzJf!ox55UMS=IbY*mU89D8_xl%&akJ=`2{GvGeXQ%UJ zurIjy8Z8GN#Ohu(gQY!Q+nd)B7u(StttS3I^9B|42z;xxepm1l);fzoc8OmPhnO5{ zvF+k3gl5W^%~e2=^rmK{CkG0ErVYAWKB2pEU^nuQh$ISKbTW)NqOq305tD_Nt0b`ZuDT8YhTgC*jZoxYgkt zoMfDHc^b+sB#Fpu$s;~Dh3w3cL!Ft%WFvEpfl3!> zg<7)qo}AEC(I1G9Ag)rK5#0q$%@jjBvRuJb$W4TMgTMhb>X*GwwoIJMDZ-T}hD}tO zr-$Tk9s3@W-$e^jh%i!v82!ML#E`uQl_7V|v*8y**3v9)7iWY~gSaF+AP9io+t6C1IW_6N;e~X({!tD8F5H=1?`W zFMKKghILOk|BPbnxc+j;NBpqI3rG_B#ab7U@QT0hK39vx_PyNbWGKu|ELGaq4_vfV zXhrA9BildDZ}2E{>aA{BB!B#?%^Yz`7%}mnrUdvr9kR#K&A_-%nJCg`hWjJczA1Rz z-Og;$W2QPT!o~H_(SQzqAkF7&D-Wei%EAH$$^(&{HmcH*PhZ~I>gU#9;1Yd-?~}%Fnh@{N&hF#m%c+V0E?mIu?N%!|T^w`<8RxWT3Hx zL-F9rEyyx`u&#-8+C%x-JoYY0*}#phNB#iS>#!IjV zYa0AtW)zielNzwWLjP2@={WP169O$*tqxBLPTyv8Urw-c_)U12Ypx@|izbUWF%J=r zs-Y2Kap8?VrGoqCU=1Y~!TY@F01fP1$o6h0XWb=JOeux)Ro^i5HLc<%_!Iy16kJy2 zHx8bx?gwYWeuAD5@S$EwaGh*iO{e{azjW20n1ZlRgoM3FHr}>H_t03V;Q3yEt z&f?yH)EfzA0NCM!h0dA*9SE4OWYMM&wONCFp<-AT)xn$;O~zwolm%dMXJy50oV@}j z`GNoyMFa}v1TUD5&i>fa{Mh2(V#=1|bjK;Qy42FsIgmE>aHeEncq$L}C}$wOYcqeV z{E1OA^ABLE{p7R7e9r9&TGdM? zW@3<(buCa)R-i^7g(sQkA@HV#f>jTQ`heyP&p;AT6Kr>hf3IXu%-jU>df%p}T5fv$ zMQ|WG?g$GY#LZnKJ(97^m&?-=N~F1Qp9_*`Bu zcHnVcXK>|N)E3ORYhMTNZqI|xQ`BRm=h;nu>$OH;-AFE)xxwBLIBtfNDJ|OX4aQtt z_}6-*gi#6_I;)h89*bH@Efg(#zqk1~1AuLTHZw?K^>A6`PjlA?U{Z&C$@0@!$iptwuei==pX$e27daCzl}6*G@*k z?Cxlc<8HycIB5jbpPf0w2lZuk?GI_skO#y3ayP=|)cr%|B(ejb{TDGp+Bbud5?@gI+nYTcK2!3(cKjf{YJuuRloyEA zID8iJECSAlVVJ9Io&37APcC1YloY%4dq0%i8ac@*Uz(ua&Uj2ALD5612`GGJ*B|A3 zo1V!o0xG$AEoYs0bHO+;I^BuBv(2W;>_^4fX_)3xbou6ji9DIwKq+%!y)5QuuOkCX zTV@@k(p@oNloB9Paos3Pyq6zEg$wGddx-ZC@PCSY)|ws}`}{_8ulj+G1O26W>))jY z9DP}=Lk*>0%OM^rwFj}r&~aY#Wl{&v0?A!lTuP1({vQ1VAkxGNN0`|@v4r7Yj6nxs zu8F(c5_5x}VG3XWqe|Q=Idf?`x_n>tNM?+xTDU8QeexYZiKQ9P_RHQ8}aoAG(&pE5v$ISAmq{Xse5 ztpp+W2E)%V`AAB%Yj(9z+WU!nWFZ#v?s>ORDkCnhBOckN6}siI3$X#wPYkI;#{xOg z9$g!eOsI`~X8P9LSe}zga~3(9%RT@?>lR#khNZ4L7Q{)oH@MxITIP?mXw8q>!oU5F z`N^4bJm;QEEX!1^Yg)@QW@H*vGmu#{WEymbDOuWv8zb%7a0HfG4^|}P8nAsXsDaQ* z#>xL!?OM2j7G%9YLzzsNB9=2^9SAy`9;;cWx<^lh`1Hv#ni)6dQOR4Z{6zkoM!3Ja z>cOGZkv)2Jvbk2pEvLvs0bp%#)0^q>&xmSD*2?jC%r%$S2sxw!T55b;UBnkhn)zl+ zcRU2SZN_i~Lkl_Kc~;AzXQf5(c`hzd-9dABEm1H;$pWfd5TXt0J?A^|QeZL7BnuX>mA&P#@@5FNe8Yojkth@3(w>p6}t_@Pc)+TOWAS}_ z5PWGV;@G-^gZ}(@UmD_$*zpXte;_R6QMpjc=2^eWA8}Ul0rQ;D|t{e8>BDXs3^=zCcInt^7C$52x(oTteIc>P7FU z+wD$l4QW3P9|$=EmFPg0+iM_A-c2c3VHJ+(adC)U4|eoDZNb7>XGr5V-k*ra1z;z} z@m1pgpzIxgEPKPY&9d#O5moHaK#xv~?PU?h_7X`swygp>{P=ncO)nDs z{r+Nr5kSaPqu#(6LNj*#q4O4puBRy5#DaS*B=IEi7PE7Ar5A&9nZiHl= zFQ4(z#PYtSq!)>mD%VF-$`w!fPq|l95@fB{c-Vm^loyj$rc1GGr`(_LKDpnW*Z>sp z6<59L>V{cWQ;q(?-CUGjFC7h#NBTAckW*>R6QSdDSn_a>HX^fT$%2R99zcY)@OT%B zY!Q!MP57ZO2sVeZL^k#ESOnWvl95i8bq2A|2LO6Cq16J)avBUes9(TUqV0C=TSTJo z?UMB~RBZY%uJagj+Irs5i5q|o9ulGcu0aQs(R9yUyQ#8vO_ybo7`#x*LIrr!MmMn2 z+|UpV>gdvxnbPISBy=IJ%rK}Ijzzx`-}HukvFzfiMd>|uwX!VgVy`~=aF6y{klF=Z zOI>hs)RNL)fv#$HQIXlCp^4%>Gb0Ish&N1;^YOH<=zekG9}*ja4l)BbPMT3Mc%DNd zZYffsZ(X@M)&^$r#bUDAe}7RkRC@k!EBU~i{C{Q8bu;$^K z8@uvYeW69yn)XCR)JuA&OLRHkuso=@!PMo492e+}M*fi)JxHJ?_{g_xu=&2u`^}G-6x!c^34Wu*W~66u5~rB&D%zAu+E999zNjqaAy@8~ zVjJIYUW_%z%@}nwDu(?Q7h61;0jPDpSKfadRuHx*7DFaeN(`fae#bH~=ox^H!%IC# z0?7@xupBUwjavDskXQYq52>vj8x%gZ6U&Ju6GOgeJSzN z1E+qEQu9?2b@-<`$Ay$Nk|K`8Q+RHu9ADat=$BkQJI5dnON8$hdn!OQ@GyfLSs#@C zM(iQCxy(i^DLzbm2cO-=qnL}X*Vd3je-~VRmEY#(r%mg~E-|xGS2CnyR?6-?II zknJ~uV<`->q7>6h%eetM{lJ7(+b8>v$%6U6s_OJC|Kp2@KPs)*qA}#2=i1!{6fq%A zUH)S+-iMfx!sbhD&yK4}D}3^Z8o`o0xFwnAFONS)Bxv+WuG|{03g{&9@$t7WL?C!L zAb4JF2VdXsqn&&o;$o;!{ZWS@$>EI;x$t_!TYT z2I)8SbP|yFQ;5p-gYLqGJ zlD~OHA&jo|@aY2^xRC@x0mQergW5L~DWXB^y(OJ5!!_KkTXTQ@?I|5k|01D@d$;fy z%j`BC)2&!M5=MNjvAvj-6V;J}XNxXcP>OG!Uh4gkHR&lEu(H&D9 zZ={T3TcJp*GRVfAJoF1*-AwoKb#IP?3zrCqKIwg@>8wb78Y9H*+wJ+9Yp)u7+lX~K zKnZIE6&J0vQ&yIHZBSA!EL{pb7x#ifZlsQ+nSZr^aBIig4k!>Dn$fwQkhzf)S|Nu~ zU$J8pQV!mGV{f+1z(h`Dc${GONsS`e&lEh3`1I3k zfq}rzCx+seLn7#Oqcz4%y3Eu%HT34~uc-te%M=U7$yi$1JBHmxqk4e`w9C=($Hjx^ z>zo31WX?=8Sd;rEnI$n#_4~mCd9}-gHLfFlKdd)C{HudE?F~8ZByU*^yKO%#d;&)T zy-I_ZZkCNFn*=p7;XC+k>6WfarjlaF;rDf2D!QARv`>Ts`VQB&0H{30%um|qxd76E zuj}znVRhjr;ehyPodc_?V7SK(a+zd}0q&j~`dBuvVe~yc=$$Ej=-dk^0*4SO+f8uf z(09quw2;jE?a1sK4AtHt%|pU2+<8U+Yp>|O!w{+8KzSO6du#K*?BFh-MhAj|c-!pE zpNvm-aCsEBFlbHuxrN|TLFe7_5H+VyOp-MiDTc6G6@wE6Myy6~We2M2?S9Uq+&tfQ z3_-VaW7;KVCCG3q6#DV{S7K#WKI90fR)3=rk3V1bjTM{@3zAXmLOD9<#83S7$kVTw2jQR>>j(TpA zysxH4gi+^`XImUiJr*9SIUD!IJs69oC!bG;v%9cxkjjhDUbNDWTKz3_3Mds=1loBt zEmRKK@e>)AqKx@dl=zsxDU%s&q7swUL?DIoxtOi_ltgADzEWu{vFh4#n5T0?83G*N zsMZ(TX(1QzsH=b}iquSI+c{I6m))40Q$u)YJi_R_U}FNvXBq8qSy8t8W7C)@muuz) zC8iSqtG!YdT9496hR^DelkVEO*IcoNnT*L9$=~*)a|me_G1nsVa=tjpKU1 z)^?4i>w!sCK1*2Z_o10+T}-Dp%g|B_Y1%;PFzvQlbRfJeO6$I2^!vpI-+|d+2Z)mv zqN0O5D^zbP{9e4Mxn?h2!|Qkum&@PK4MA69p*ol#``CRQbzE6*+5iu-QQ zX==g=*cI~v8S_w}ZD`kRVw-^eFbk<()u9MtJ%j<5nWRYDK$cXLMmt9i@TSV3tIdW= zXG$V~&#gIw^@XI{qcDCh!c#B#b-UPHqS@@O7rE&xCU{nJ=@p>;5a;3J4?eq)?}XZM zDb-q*HO#9Aw^>YMx~dt_oP3rsrPBZat)vkq(dnt4bcGz)AkZKg#S>=N9{hVV4%GIj;rTJu)1Gejo`R1I z!u#&r!=hWUIpvzDG3ra*_k3;vBLQN$UXW3(DkRquvCV2JVxM18Yzp zd&@HF^tIbXIk2+|W)>mkilwzqHsu$@9}`_!KY$~Eb(_A8-l0-yVEdh1d`wK|P*zWVv$wCcn*Ti>=IbyepT=*~ULZF11totDDFU5tU< zWgnwA=VQ{FIfBmAV=>ttvd28XPMTqIk9C;Aw&Lq>*fxkJcOXS~FlDEKXs7B5ia`$w z3Y-~?cZ>C);iwJVGshC%b763s5706Ga%;shYIm;O19I-;F#=-cbv2s*==EFLqKoQVr43!5HI zGm2^M&GOo$AWt#xaQgMY%Z@-UQ&&3DrvRdl2(gTPN3j5rCO^#>#D{s+%$0~ht_IuRrB(E1{axm zO;EQ66x|%kQ>JKM7;|4$j{S^#2~63hyDnP3-4PS%)9r@iShEd>@^wykskdUS=dY*L3hRN)x5HWh}_D z?8JuU!g%$!CQ7}?lfVrE>Pgi2CL6cMlB>?Y38j;_?G`*+ zR%e}u^5!N=z)VI`R0nKpD&Fe3716GLG^;aR7GEU6;u~}@iDZm*+3E^=?@_ov<1e9COy%Vu_(i9S){^0f~*pH4(-q%@dXj;AF61YXP$xV9XzEsDtsq4SYnaC;1Xb z7R?rX$Y31#eXx>qPPJE-wd6MY{X#zvofKvw&JTiAJ_f*B&+G;W9kS8R=kEBW8A>AOS9YiH(gOpl(wt8Dun>w%@46m7+_o@~_s?!KCIQ z!5L;qdrMI=>Af!`$gsJ5GO^TlDOM0zTqikpy!BOE8f>)+i&=n`vQm&$P@=gwXsw{V zD*VR(D%j=d)(grCmlIqTIqKu(tNV|TDM>l}zOf03#9ztly3vCC(-glQH0nelM23Oi zNng+?lHgqjRl5Q&e~PCKGrz3{9&Q&|TtG9+o#5^933ewUH>j@;LEQgVnB*Gpz!=^cfQ_|hn zh|rL@*ce9`%R_sJ5l~oXz*?{lVwzPqkAmBdPGwB(F7=i?pmsEWFJ8eNJm|RMQ~Q!Rl0-a-W?qoA;p>ltVvTv zvB;hlt@k~5wWm1fa2(uwjBsALSAO%9C(i8BmQ_8*K14It4aWe zsR(w-AvUAD3?s50nId$Va8-$~BeaNY4Rmpkh8X!iG_(j@PqfRm#`hiIHYS;<=e}!$ ztl=^+k7{b+UEgfz7v=n$c3QcX0!7pduw>VqYot)IU})Zz@2e46uP0+6a6YqAg>BZ9 z8m-SsV!B&Jd-`$=yFVPkp}7MHWj|D>4VE@mcv0fFZe?UE_NQykL8%$S+6*;Q!p#OF zZOLfD(m~KBQsQP@A%?KY>IX+i6Z&cr+F6N4E4t{?%+5BRD_rout{qqJ6u$iqd#z&Z z6O*MMUW_rHgzI-$XwIJ_DRZ962(}R7{)Y=0TGc}|_l{zu7X4zJ);})+Xa$y4Z3MVk zb8-nA>`7($Y(V114r$_>85NiB6VcJ_Qn|elD3JczxU0#cRKq{nD0~l3wfO} z*{BjWR#`Nz`j9DMy~-H&M~e3Ly8Oc2j)x=dN6M&##<1jkPGD&^$bG%2oQQoJ0?hB< zs$2s~T$#$p)aA$2b$y9h%1Gm$z6@L&i+~Cuym*DBD%g0^`#XGD`WC+9;;2x%gA|l(IpjEALB{s z)9^nSk}T&3)xuGvKhO67;ff*+j(ju z2GX37dcJ_@%`vYG>c*3IPyqavHVA`hJl0r|3^$D9s6T3?Y^#^D=vc*rWB8VBcBuMT%%QBHt+b07hr_g zFx{*?mOwTB*UHCx$BtZcn;cpLty>L^1Aws8^_nMA2Q6&pP55zNx)FKplOh4BFceH~ zWak;Hk5{CQ0vo;Re8YMfT2qywk4);0qQb++6?taCq6BL^@C<7%I0<_lgv`1Z|R zV(#|%@sxm>68m9=&{=%twz++OUn`_eXQZ~pr!pNtn0B%tg2q zv9pS<8905^IJ|X5$F5DXsP;Q#R!+6k!mcA3d9SXSd#%-anz$h-r?SPrjb0R4Z;evkK8Lg`IsB0*K``v5Ve4wL=6oZhnOkWv<&QBB5QyJO z62Babpj^;)SvGFVRR{hvrz66Xf_N4>__cHASiY6ICQ68^2tisZO$uA6%EUf73O`qPJsEK_dR2h_2Va~_`Wi$_~TjNoq9qY}_ZqfDNYQll`V&pW;9V$u)X0*GQ1!mOb&36f_H8a$%y z7^uqXc$xcU<-DW;6nKC(U?lBRSv{sP@bpD6H&_hGM7rISArTu8@P`Isn*>9q@$t%_ z?#a5YsJ5J7q<=}GUzSklw3u=q#ElM=v z`rMoI(#4yxKo8Yu%(5NrM8{jhz0&0pF2m($qMp=nVZ*Oszoe(JNWTLa_j+4}yaw)v zXeGmz;S=nJVea4Z1JQc)Ir83coh#pYq5-Y@yeqv)nI-Jc1v=7mL{IiG zz|%sVs(b}NRyg$XH%;J~48Czhr6p*!=!N4ZkWm3sd=}5u+16P=U5kt>i=E`AvK4w<9&NxG+LQ>t6GYG z2DGG6i^DEVXm*V_S;9@`?CKjB)LJSSR~-sTWi(vTn9lpeHO%=L|ve=5a*2}_YPx@m;LFHM!h4!@htlVnM zx-O^o>c8jqjX={H-qNkS(8nDgNs7VL813fs^`3S42;LR*4XZeXQePygAKEo{yzvPw zZYA~DSHuS=qqj>RYt^JZ}qy=blo2*kbK|usX$DkPGg8C})mx;z~ zF!uhx+Voi!sCRu`*3D%khII4p(#xVW&T}CNA|89~i_)y;C~WZ^TTKa6M6E$1WvJ^K8ATB5iJpo zj+slG_wNu`_fK@)q^o(g}5O&KLd-8<`!!^M9P+ ztPKBAAz@_s9|tnkYX9fesCU&?Jg(-yQq@O;Dp{byf+&U&axXV- zPphT)K*jMK^@>N4P|Senf1-T6VpUI6^&P&Xo6jfHm3+P7#`O`2Vx;L>)-IK5XqD8e z@nZYSB|4u>V=Ma9K~OquLM-q?hMkYStiF!#`(;v!>%Udey;FA{bK!>=nJ|W9PcDK6S9>Z(Vimf;ELn$dBmMMcgewZ{tK6N)C}`qR9hy4J~>I zI3)iurVS&Eo+!`?wofXL`s>4y3mNI2L#T;DN-4^kjxj}su{=>II6{SuZaiS6m%y7b z|8OB!%*g)ef?L{uQo;(Vu+M)lXxv$UM#ja_@GMeR3FD=-SM%GX`q!4|1wH75EV1Lp z%uR+s51pZH%(2Nlp~P^!+-vMzxYiwXnC~$P;i6>fhx5E+KII)bxCWLf0lV?`S|^7z z9onHa6?(D^A5?MVJ3EtLSMtP026c`me^em4sk)uWqtfjoi5Cw{&57H>@>r8btOvb~ zfosgI)A_0$s%}Ohp7i_BlG0|L1@k{?1N?FJ z{HI0)fmMh8Qg-3LsPfj1w;+Ahjyh0|gZ`V2V0qc|h?58(COlLzx!3ObG+$lj<8NX> zBRS1dYay~k+8Ao>YHI;K&37z4wGKHB+B@ce2a`n`79D=`Kf8pSz&zjs$B{2Y9%=oB)7udTsf$BWw27tg(0TTJ5{Vzk-|Sd)=KLAD({E&>2WW8i)zb-x?4 zj89-~A=EYluILzNo3yc5nxfVV9aXV|P;k zqTb1J-pqz!i-yL2qjI9bG(vKP$oX4uH_e+3NB zDMy`w)5gFLjXrLZ)VDzuShQlDUrF=LOmCG-FOk*yx6!U&!NV&0LbTk&C{4pWxTT3X zc2wIZ9Avx@ap04IE;16$e+ilrA-q9fa4eJyfF519tk9ScWDFElG%HSPp_}iD2pER$ za-g_^@MLjEQ)LFZZu5EB?Q@Lj_2B|myvTzk2~U6nVM6A!>c)jM-T2OVnq9Gnx?bdq zK$?gx^K zvpK+RHZokqw?>_#nr~2j^7^*za?7sj&-y@X2yC>)1If=ew@Q!>9ox|5X&EF4R};A> zl+PSL@$K|c6tHu^`ndo*3)k0?`IM7l#pyeqtt5Q0MmU}^y5cLJ!A>QcG!mgo6Z@~@ z&Lf32B9~r5^y{gPx_cb8`uxuzx_!BY(D^hHy1+QB@oVC>{o>9(atrQQXbLj|z-1b@ zkb(ORbshW!e!P$YpbwaY5-4CH0%UFwsgUDmZP*PYX@T5*eOfT!PkxkH-Snq3q@sjI z^h-JR;L6f3!2XJk4a@p=Zv$DtkeA}})$GRS>NIIy-WrybsWA~hzm%vO9dO9sAN`-U z@}SVN>-zMg*6)YR!OO6-1DETK5#48|$1iMdT?` z1Unx5p6?kBD5B+d{HTGm#LF%Yg{!SGSF1a=?tQL)pkFVO5AviScQ9V9FI5>C82$&5 zKq>qiVVFfpOek>B`R6LRaTtzT^OTtG!@h*%|1f9*(I2bs$)xi}|xe*qe4g>?bj@va+!ti- zZ&$Fv7br5Wee`rNAM@;Km2XxI=H0r;aX&ec`=<@=iJkQy7YzN5V_Wc{)fR{x%N=~^ zU4PM46?W{MAQe>GV+)xODHz`ce$&5Wgd~ybiyeLYF#IEgqEuuYbY1cz zfN>j-vD$U6=gX9^CC+*SiC*l8_cW}ba=n{>Le_YYTO;GtwHmbGCuto7#EwYGb4Us z9%nxw-jqE0wwZj{ZJyD;^uZQ>4ZzC2xFW?D! z@|h#lz9JguZFjZxL#Lj5z_Q_sLD;t}zaDc2`+E4gMjG?my9Zu7RbZ>_2@7eSc0j|F z`~EvBfZHaNG0p<#w!(`UbHVAGG&twNYrKAg@IHz0a|P$Eg$-Z-EhY51spEsm*GNHY zoJ4j;DU~1wlggtSvSY3DiD}hI^Pd9Z|L3mi|I1p(#`J$9k{H+-{^#L`y14BxHng4# z)tfaP@}6i|J+QHWCU6Y`F$Xit!(Da@y`f|cI{tOto$KgJCF1dnaka62jB$6No+Hm+ zel zfm;~rYT#{+AyVO)ISvk02t_J<;2_pb*6pPF`6LN!Hu*u36B$%cjKE_RfSE0zZH)(j8XSRLA==yg8BR1&u$U73P$?m3!uUTS z5JV_{;CoBq{r+Y%Oocc@xxZ!-v_5Dq6%#l5Ht~=`_4}8yAR_c2enJ2^z$%o?Fc1KF z_{^QW3?uaTehP!8R1ktRFYj&Uh|=gNseaO9r~}o zH4?q*Dk0cZcF{DX4Q!i;I9RZdU&53s7APhp4w^}3cGlD}-9Y*N8k$b%Yi;l6HgG%r za0UmpEgjv?bPo4l$uSkf-=Yx^&2V!TRR~lw42wVv{&I>j=pMXcP+5P%CaXoqSh^^h z(O_+nd$ee52gb$IdV@?M**u>SOrp{^XZ@i4%U79BvHN;`lRo7;a{G}CK8#V@s0ICI z?Y2Lbm(M?@_sOzCUMn%_20yO$@115N@boMRNd^Wt;**{r5a%8;;LYPVXutAS6VXgyaR-9y0C(&Ctul5V?8=Q@vz5dsP z{#BCs?N$H5oXMxD?X9NetXb-MkAK29otvw`W^Xb>7_1gU)Belx!4Bd>)bU#-IwdQy zG}~e)=oPWDwGyb(%hmh+3qYq^l_Fp0b8YdLUcES8>=ISwxjs$u7nu?za*anEf4-3iV^j)HuX{Mz(NVigqmhDjV3T_kP?GfSqk3VHwK|) zjJR8ZDc@;b8ljg*N^honhgPL!1MqqcQ!Dc_kabmKleOvX98Um3vs9C}yjv)J>SxG0 zp;08~v6=rFl|-+AAR2xBDU@K6p1cBfWIP@M!eIcf&)fEgTb~-`hTkoxjlqNM#pyNr z5pttngRnsMZ)HQ!KKZ3#klJ_^1M8nh-Yf>%mI8`31PwMe!Wu9XxL=UqFrg~|ep0y5 zVYQjr)}?)u0^-yOjCH7@8Hk{)9h$OEo1+{~x(CuvG}AdEt!=ubXBY%mOpVmE68WJj zD9KI{LzNE<9zyvn#x`}Ytv_e>1m@?6GP@D{E|8|UBS$RE&N_{rW=6b^vAEK=40hvt zB$pKmtcSj}s&}`{gQka#vglZ@!3|S*;#z+lo+i?%v7!6Y)-DXLj=gQ=WujhM=6;?^ z6Jc)MiAwLeZzNbDfUOIlcrwB2&l~SZFnk4^l*SuN$I3+x?^^>l0lkpsoewG&O~9P9 zJ^vsC%PQ^%he>a0)1N&jRqPiXmwQqlwVjC_amnRNJ8&*yCK+U%IXYaMS!8_0EST9XMw#zr^z2&mpMdmY|qw|aucbpd=nImXSQ{OQH!ks6~(cteLkS`J}DClOgc z!QBXw(sR6g94174P87pu@eah#XIaSBS+CXU9U1ziF8q>4gA9$<5zj*4^-zl#3i8;2 z^S1~2e)80QO%Z^M$rdhG6(D}gWw9i~+C}WeX!3GIKv)Qx#7vX*P>KBwk>u=~goW!C z13MGL|NQc< zWbH*8{C2Kxd@(3<4K?4s6I=EZ0)1q`V$Rm4I(bV1R5OjPI`2u&*P9R8QP(-Jj68uK zX+i;c#D|!O)y%K@*E5l!>s(#kuNTt9VKUS+0i1^E3+O=)#jATIw6vB?T~sDF(~b7| zMVH?f)bbDU;j5o!+2?6%ndPcI?L`~fgcFC41?gXtd_8q-XQO|qY%lwwMi8p=&xSsN zx6ik8vH^4@`XK;~<23!&&#OmMte(k=rZGv@+IpTV()*v!|4Ctv!Wiv3<$_1$^GOZ>qdOa$57}&W_HjXoV_gsBTAsx`On~Z+``nrelP#kVYP*8bkt)UW;-*$w zc|k#Cz^XM3ib}$7z8T)TzoS?mRg0(Lsy31iDR$4_{RZE(N?!d_Rn2oIu4qvONqif-bf{X(GP-d8IJhn;ahoT&ckl@- z6GAx>CYrd&Am)&9fE$#0N*U58_+?VSg?l!{h)1002FLBRs;8f(oDFW`Hye_*hnRUZ zO_Nf(v3(hs;wQsNDK)l=A;O&L#cCrSwbsRNm^eGE>}fc*%K}WhTc8c*;=*4j-WnB^22p{!QsX8fzJ-sCk-Nyyxy&@rrOeBgAI{w7=h>2Zzic{WAKla z_`W`})tmPRnj#H99`lGjW#UXwMs-Z{>H37ry|)>w=nZ<{Cyfizy0K{bRu8dv~DJ;bl9pUg3SU z6IP02LK&-f-;rMGmx}VM0_rL!xltdKG)D#|wdG0$7rO^BF$c>{oCJ9!hcka^j?FkD z0tnoyhneNKjNF~zbtxp=3VlEVEkV&}gL#b?3L#tx>%!O0N2J|F#^YcDp1UC8p818G2+xt*!%wP1 zCFhzCkNg9AA|Eu}Zo|bM`kjzCak;1zFwN;(Pv*I)>!q#xYBo<84*E1F?kybI;?7Q9 zGth>4-AlVlR>+)SN&aJ_3c^+fpBjBf`fqbS0egGJacaC<)%s9g zMfdrfCIw=*oY(dZZ9a#GM8uI#d+F;3Xhl@|Q(}*&WFjvN1RVrrMWH8#~?=a2%f$7zrcce@SlnNk{T7#CAYvjXYFv+`Z&4e zBurqYm9*N9cbICyVdQrpe;v8_USwH?iw3cQuBfFYL;6!g5R$6FEG~fDyF$J&Q z>3JNV>iv^I-s5w$2Yr_q`lI)uX`~>5Sa*$NLB}e$Z+!D)Tw_ht6Ywx>M8(H}WBUS7 zTl>C1PB>us|8egAZ`Stz3!1^m{y&y>{%@;+38NPulG12PZkLA4wvRF;i|qfk7+^%p z2N8%h_4V!%4NPD!$>ury(G{o`zF*Y-ied|u?rQf%e*faOI$}5SyhztP zHsKd!IihG*tVJdmP2`gYfKxvi@2d;G@zBJfGISo0e=M{#ZS(#0qN+tCH9p(J_XY#ZSlh`=KFj1eZnpSY2LOt zdC}n$B?jN1-z}a{MiG%@1=ZZZTu~Xd91yZWAAZ2zmb&)m;k;Fyqt{~(xJst6%mSeE z86OqDxA5CMw&Q>mo2W8VZ!QJ=K)odb&AQ#T`8!wD7m$>UTl=OLOgb8;m3aihFt?o3 z=7=#;;c_0l7p&q1@7e~6%Z&fQtl=K9vU$5`TuFi`YF-UMSQ-x)Eo4qO$~_>$coBCK zu6rmemB(}5sdvhXdR}rKTx8b3+j_0mP;-HtmFS(&9>=fGj2-KZ1a3Wq0JQ`vM7@}} zT6@Et=aKGKKGAWw4zP0&(dH9^o0b34z0su#ks$>8K=5QACMNC{5zRP~-#(n1Fu%V? z=T%-(s?SsuwO1FsD4UYV!Kf{O<68cEY@%V7<&1b}{rF3$xMK~iAKQA6Qkn;k;o;17 zMp!=sQ!moWynMAOmAyO%q>eV=*T(c_FaL+D@OH`|Y&@rZPvicOEQ zKT_E8;gk)WBRnV5K(GqSI2lJ5#n=ep#0GJc#%$ADe401<-7`6EfQ4`2E;6xputwCI^n>VYH?MFX&BVIu{5iz7Y87L2*%`N!> z*WxR>*X64Wc3qRPBA<-1@sCX!wRjckb(ED_aY$T^tY350=g8-~*<-xPpJ=%2$;SGf zQX-^ssl)0mNC)@s^+n#+U5;WhYNdou8-GVU+R&fkUgN(`_ z>6H8ZiBi-COT=g2QS&4*$}*jq@S)<_D*x{p+HCp7vH5pe*TdcsE_P~(n&&UtYqZ`# z*9vkQjIPE!+)%9*D;d|N?atHS08GyPxIt8Q{+{C-nKRhY%o zJ}xvIUs9>6;1JWA+3NH+46=?@15FD^(re}SRYsD?;9scnP#r*E%J2ybz!dy>xOKIpP4{o5tILK05$64s&7kMCh)CTS#~F&&~WYQ_;9 zTi6P~|CQN+5XgoO3F~!)h1|N*pKVtc@PQ&xsh3q*SN)9FP|y3Lu(Jm<-cs2fdKp^; zLrid7rav2xJP~tN)Iu^y*!?nd_C!-+vCEBNkmVi@#WmMWb!7Y!RnK_{wf3JT?>s64 zfE$d!1vqkvKM1JXFbumcT1P7P!uGk?#`8Kl79ZH*_@^s)GqH8{>Q! zxz_-m+`Qnbiv}trXuHN>H7|)~3Lh{RKX&{@q9^3EDJ`GJCSm^B$N_C9d4;MwmV?&b?W^N$&-ZEI$N$5)~xWJNVQe-WE8F$@d(ldQ|le9K!e$ zS)7{)Sg?up>nSIH^(V+DV-c!;K~Z40P_erCu=Qv}c)g7>6-zZJ*SLy@;59=crNg#W zRoE(0o6y%P4wL9*xtL4?+ExFRe#vgskzb@gX6hBa%|z!etAnIF=*U3D9e7vsm zYDfx+e8MH@jQ9#J2P5AzGEkpyhwKjI{|(?md{75JHHhH84CVM+2^}b*+4y556~7pa{0o&1HSo?kPt5=l1~2Q4c>ikpQ5(fWGRp2yySS+7tuNV8_XF@ z++))dNKTnw+&e9OAm~DJg?s%)C`o}|OLi`q0HMr9z0@zSZ@ajFnM9HXdv6&%CQ2fV zKvS<>n-$?x&qkZ3ULJHsXTakM~ zhCx5HxMohgb}TqSOKr42GoW-zK=@CdAizBdDp$1JsHZxWu!4dzG3kU*X==31_HU7G^Zfdn$=ah@r8%9R|8MFWPj ze+QA@AXn_zpZ_sC{g?2Zft8i@f0|iTtNzp~SmAoEYj5Op!rMq5Wn|s06J!w6qZcI? z16B6dv&IrAe>#A=x_)_9lTRjD=CVWrVqiCWx8Zavusv>`gP-?D=f_VnV{U}(KU*t| z%29ADb>!km=18nq0VTRG7?oemaD`G}n#OF}(U#a|LX6#4znYb+m76h}iu8JEz!5o7 zT)HiU7NdoZ_?A zP*W_3KM&e8Pwjo>ujf4xMI{7?XweGBH?T{HO=i}^8RvlKx(~=>5)EM*FzBV(*?&JB zPt~b47IsP4?Jz7UgB4v zf5^j&4+YG2MUmU2!0eS--}K3a9E>}xjw6<}C+V5oZX%kr!C}@4Uq$z-+o&K#B7MAo zLNl{551MsT8KEV%k`SX+13sK)T@L{J4LyV0R8+p~{Z2Y1>NES?JxQpotG~r^0yAIj zrLe&XWY{J5mmmp>?>pyXPBo_TS+y#$d*)M4o0ubp!;=o$& zA-C4nwW0d`+PsD_m4$TckLu7kfQ;bFQx+R*SbWN?N2`6EQRvvEtP>Gk zK#l60B5$#vT6Ss19inZRvU?X?r_>6Ma3cSqjy+`&J7GZaCLczLw z(kb<0S`HY(V?F5ke=A#I#A0Hhc)Y)q5&l`X4hG~U`%e@|Cf_Cl#&H&le!U^gr)^Vc zdJKft$q*5O7nrSlGD-Za|hbW~3~w5jHScvQ?B1+BBWw@ktP^qt->&XjAeM z=UevK%s)@hgoeBy14o)eaq0h=ZLu7b#s6%t37I*)T6+QelmCBk_D<26MqRsRY}>YN zJE<5I+ZFqbZ9A#hHY>Jm+qTi^(f#kS$JpQK{qKHGpOba6=9;+Yb+2MqG>6C`9m4(? zPsx*ufN@AFdMI_|Am?z$Iv-YD5S*474)MMx*J0)zaXD*H%#*I|;9>Xf_0AOkR@>J? zS(TeUGgt3(QD61uR1ViS{rhx;$207s{zl6B6o+43vG-&sslX{(JMe**ZcrfE2X1B& z>>d&ch3Oe*U>}&{c$ZLb2+cinMo8}RK#S*n={cxWt*XlpzTN^Pk1xu(c2zA&D`*)L zWAmbP36R=rr#&QRL8PkYSMif@+?ZkQWx4UoX^IzZk@iO=Td?t2lVC}43>y``Ols$v z=ff3gmY$MLLMC_d}H>Vc_1Be+(_)eztSAjuAW zyD7A@uq!BRLMi61_#Ne;XtuOoi;6f?poX8KRy5(=+Oo23U;cfcs)>$*4$@1ZJy^&*B7X z!%@j~A08Z0_qj+|BBfs)&xp#UD_6`hKCbk+C}?h$sz%+%%^=R@-qNptzzGvanmAyQ zB@nKXgP??tI-spWf-W=s>yW8PU~fu87nn#>W;CkpTKj{ZXw_=(bq!C?Ggh`NOTbG( zkZG4LbA~l+q5s0s7kEl4eJW|I()J5HL~hRNKRjvN|H%=Enf<@b&}`CJwZ-K{@t#&c zvC$G*AX)YF>+SiS>A8PE;(sY?Hp(|cuVu6mDdOrmx~za6Nnd7jN&#%9N5?Qoq3LqA zkhf~WZkV{O$Mo&#@o4lF5(((j)Tj+msJ5lZJYLBz)I_Vt3Q0-yg)Bc^bWZsZ#+6NE zF)WUsMm12uY?WHg|GJk-3<#&noDxf-=q-tSp8wX#>esXGqlDlb7#g%|C69b+L8F6B zdHk|CYOTS#Z;2%dUDa5XEobh4<9r8< zEA4kq7kz40cKuMFivGy?=~DEI<-97tS1YwxcT9fnCAvE4ahWKU|2~x};m6Kk_hxs* z<0Wf?1mbwYmi+DKQ6Uvy2>GPb4$R zn;l&6-{yMpLb59+_%HDInpwXnJK3MkFX3F06^@Qqhx4)Ne!*NYDn>_VYaxU|AdZAf zr)6n0v0GmMON5dD(99hd{+?%EF(33*ogJfd$pMV!@w3$=;Mrn>$4 zlJ6k*=4A6PwO9J;Vr*E|f7$rpS_QxOY*C7ks^qMAT7AdrOO|_IcX?K}x?{BC3x*w6 zQX(&wOR0^AOUpWJ@!8!4?n0bDk|x59GI5WjCn6rE%L+&OsG@xa$TAO!2LO26)AJ&& zQL+0w*6xCbK!W?qXb^f8f0e0Y_^1qTqLqG`I=i2@&u79D+MAHzo`?&D6XM_`Kd4Y! z^8Q(~>r}AI)bqKtQ75%&jn+}VNYT`^qZxTJj_+bV)2{i8;{Oyz1St`}jIJzB65zSV zfv59Moa%>&tA-NVqe?%SblfY$E6cUtoS01R$wdvn#Zd+7;Ka2JzR<}x7D}a4^;w@- zyy_E)LU0Nh13JKl%Ovzm5|i`?SqM+&j)ggkim`*IN#sh06bYwE6tizwAGXSzR2WRl zTHxqZZNjRpTCd-il@H?YpWQmIb_l`8V{b+*$Ii?8meM9x#V41y0E`|&ciZv~a-2Kf zz+?*jWqn*|nS$cPFPRXR+{FP(+C#}-(lVs1ui(B@Vr>^@&xf^vwFjx_#bv>oO-B4{ zaOLqB(2l|76V@ZNKp;lPRmKc%a!)1{_!-`0Q+7HNDngN4+91Lgu9^KW?RLY-O=g3> zS&25riE~;6f}4Nr(rwKkp_t?aKOcm+57EDmr>s%jt_{0swG?7OUhQ>tSqsFdZZdFO z%gstq9t`MLuIt-$b|1uA5ieCxu#&x@BqkGh*4V$Gwx>F7p{4B0o(dDJ!QSFcz?U04 zZu6zZ9)dAQ!0fVXDGn}^6GEsaZ1pn>5sbVA+`@nai6h=`XiQsEOXrgA$A}3XYeVOj zhVKJoP{<7YIf&oyGMmE4e{NKsm^zea{*E>a5e6@YpElC+cx2oG5!y$16hp1?XXuvk zg)#fbNoC)O1YqqW7=BQS2@e1%YO+BrbuYaMBLbaC|1O?IASRq$t*S+EyGp#}_nYl61Ep~U2jy`Dm-Cbj;;+Gi?GfMh7Yflb?}VMg z;XBBJScD_~*N9#6X8vEq?)TVM%~gEH`$ z7LBQ4BOXITh2ZsGrG$>J2B(FOlj`$?KU7dtZl$@E|LqbX5N;V%?5~ec05{FPFiidVLWUp} zPs~1scx~pkIBl{JPA-Bs-vX!Zluf0q48Hk)t}&2lzVw7A!tl=yjFwpMPPgMK1QOC; zqK~jOxbbGjB%W1SDdKe?j9ZuYn7r3SJWYihWw>6bKTY4lBWk{PGwg-V#G*?5-F7kw z<$h`y$|gH4QTX+y8?%y#uuoS|teI^{som5q4#7!7J6xjLA$o#r)3{kqp+8VH#j0OL zhx$s_=oT~q89nBAAs2K~lm#2}ORLNH&f6fxzB zN^jKq#QFS8hIY^0Xd2=MA|^$zdQ3A2G`V#VYtd)$YHq-nQ=LOvPFAtsf~GcWK1~9$ zJ=_4JUuBC79hw>@QL-W!!j{K|IHo2;2>C>zrDTcxtovwBFfdK4!dwcg%uvTfZm0s8 zhtL4y6ai4i7-E1ipyB!>xPbTO3+kV=#>Lt6uh?20KlQyj%uiIofctNd%sjN-wi0_= zVL4oI@m+x+s43#l_cuF_*X8Y3!TU##!D`VL!mON3wCy)d66=*jWkL2D6f92(zEfRIY2E3~sv{l` zu%Ytf!0*Dvokt-1xW5JUi6Hc*iIhr`G>CYg5v7Erw_5oLv zWK#8M$bKZyCoU$NGH)W&Db57vOuoQb?fMIs5NSHVH98NdGl32#-6i))ap`Q+-2Omf z_?HV@Vjp&~{en2Kp^n)jX*AaP(#ar8&ki+gXJuI_lD1{)$K0@fW>kMCUd@lWk! zvP#YSx;m^e+W&GU#|`H=^XBtVAPCQkZ4Kiyq~0vBThpErR#oTJ^=(Fy+@@l^YP(7e z@tsKqblP<*mb$XR+sh|SC&dAUoRZ;Jjo&Tnv2^yaXUpvOQ8V>)^<^0Lpc8Tj=?iY) z{Y-0CfNbu~tEpJxPFDTdD&aRlpZQSu*VdTk2jvLT=8_(l>;T;xG_+%F8{jF5(6n7G z@QK)7mZUYlIpu5R{#uKDw7ZJg_hvljtd4swHanfs zf&`X;_HeYGO5&Wfmt->DrSlWIau?-kz=qape=}vkXhhatG z%-jm5LWcig%G$&FcIBN6czLPK8vz?$_4N7E!uwL;iFmTiIkJAX>IxDz#Xwm;^Qtl_ zumcGAACYC>FMM#oY-`&z6X`_k-#m6xn%%D|HpM-p9HaAEW~G{NyL!n0Z*_>$K zB+&u+eZoTqP^LHaIw_>=J=Kp;F{C6RW3DOCf#AccMJRkF3_dPxf98-YVQBQktQ_H% zZU}N{xf^p|2q2v?oOK~GugQX9k)^j$d3*%u`t!eWA290~Q-M^Zg#8E7RgEzhsrC1g3LRKB1#d6h2R3x<{d%Ijr*(Gv z;ppk*bAvOqrZ177Im_{Zs0=Fun3!uJhoGuBzG_vy4PB0DVWG`<>}?}}3qm#RjAerV z5w(hjtXLWM)||&CmO1xgU|bFizVRbW0da*Q4dm6&@k6Nf&pfJEERK)Ey3?1~K~UD_ z_VZrCxS<+dxPs3Ug0(1qoBr72uk{kT6t5#*wh96>3MQETFs>vpsLGr1 znMLt=O-?#olfz-v(#Eruq3jLegw9CgSne|c4@#>R4D zC4KtAl`yqV*$M9&PAg^YrzqI(O2fX5fpT2o8R*O4OW|4l?7OpO-SVL9Jc%9*u=>5_ zuMr|L_>ud2^CZ4+wSBrZU2N`W@P~6)g%+b6e5aON zAmvWgPaVIG|3e{!vNJ}v6*ubJWeD#JQN%=v2|f4NZxvk@2bRyZ5A=Eu~Y15_@PVjGlg#!Pxhp?wx3lUo285LdZzT&z%4Ji0!Pr+MC< z=x9w4EfFg7#eKsl)d%LU=ZGPVAuVEo&@TeR%Eq^e2Rj`DuqE970IjK*lKBrWJ@bE1 z3bHV9{zQ#o|=8T(1;&K@%o=0X_jKtktV&4*o0>!zQ>FL;=b*cJLIigqaBDM+32)@&Xvy?Q zxZ!7DAYX5pQ%xBM!u>x9Q`Ty8l1!9 zSjpzG{BWp`zr4j1lx)G+uNA}6!I>vZflgB&p_c$MRD%WVZ=gROoWOVkPM->P_#zJ8 zq4G$L>~B|k{lBzt7#SIACAmrr6)5oRplB!_Nsd4;Apou1iG%uPlr!a}$VXOd?i{a= z6)aFM1e|-?q(}xv9+nZ`5ba2M@JeSiAg)>E4*We~J_0r{z(`##j1^R|rZZ-=^yxwBC7G#3YV=Iv?OKB9YW2QLW1 z5YJU<(OEOfM<(>xga*nuCUlU=2vA!3$M@3*51~Im20z43sYAs_ku6M5ZzmTXG*NlJ z5b@L{L#*;X@K2`%Ey7gC_*93)?WQri(ohWXbk%9U$%kG#x)w_(*jssL$v6eFr)e0R z`oP0$>CODzr%l#Au67>68_L6M10-=8KCymv3FHkB^xt)0za`F32VdWbAN&MGkqIOj z5c$|I9>9EC)22%}-vfSpg<}cDnSx*ZZn}0jF!)~-^NX5pgyq!J4ryCx^2O(g?hET% zJo5d{JIgOyCp z0&3B7_wnSUq8MO6B54`C^OH(5=iX?ssO)8KQn^6m|VoEA;Fo{<)NsZ@x@@o(QqyE^C&9pJ?{g=iGL$T*V z^R~a&7dVp5U>yOu>8D?y{1hrGfrbW0o5!;44W|c3cYBVdRA5NRD`>A!=jRn9py@Hx zvmI+8UaaW~khm;p-oovCy>jAN1G7U%!K+#6;kB0IlW?l5meDyN?Wb;ugyy2&)0j*r%Avt=s}IRS2tw*BJuJwsm*yVcE>B;sBZeRl79F5wU>w9_ z2IC0EQQ)F;d8B0-@W?>pDGB=Vv2$LtaLMA-w3_`tvuspM>WSuI2NKMhYp7^c?rWI) z!(9evwDe}!N0aQyYKD>)eL{Y08xS{FZ!7-4n9>cBt*lp5zgEZnoB2w!u;2bXDzr<~ zY4>R4RtUmAX9OX(TiHH)P_daHHd6Jw|gtF>w4u=?IpD9>{9Lv#7wfkZGy2)-^5VTEXzt6#a@S*BjMH1RUs%KW77WuWo_)OQVc-6It}~X5(KVK4bX0KOA1COvp=E&26{HQtkS3ll zDr0Meg7@}&OI%X7Lydcc_BY#830itz6 z1%TxYcrR%1QYozGI5+tQTbWzFY%ysJ;)2WiEU#lmyPz`f#_9k{JofL`NA$vescj!? zITY!-tTzY+1>gdL$`|_B)@8HT=`<-=2yXZT8HR&JMXM9lz_S4HmXrxw}_v-uN`(hN6c%SDZBwCNdv-V1`W`pHUl@)&WCX-~1wv_Pn^!ORMs z(Zb%r&!zRSk$e@zv$XeOueevRPBk$Ju1%^XQT(3h@o%R2)h>FHmilR9MQoGkk)FDe zY`VDdOFzi+$8m`))B4#M;KM-8vxC3KT-#!AcJLdNt0bF4Z-g;E_4<{E21f=lk3Hsw z8V8p30IZc-Pz>;51mxPXAV&RUW;EDXp$gO<*2eA$Rm11Kc42E45YNHi;^Jj{MPJj3 z2)$D+;>MR*kBCGC!2YLbaRq1JbGw9spC3;4QV$&$Mk{iPW{}b-0$-o^h@#o;6aOL2 zVEGTs1m>Ub|6sW9^g})RzZd^zK)FbX0fLSvQTuJ!$1}xEw$cb}($bl8g`&zX_t)(J z#TvzCmRoT!SIi!tZ2_QoldQOd&!~ax_QQ+G>!kD`W$Pl7QO9IOBa|X;iU5jnlGmUu z!@mqv#9+EDlWo7sgiW{AZ4wtx1Ed2Y$_d+O2>Yx@dV+FYxF3XX(xv)db^bt*{`JxH zS;_Kk$n?%q!b%9DP}Puyl0)-~UXcD`dVdHe1E&%s1H+w6q_lgBvp1>@Qp(zx{EDCw zvZ+&(bw^S*sIbXz?Tac0GD%mKP+ao2+DYdqwIHl72e$W9mw0R$MgdE45^A@BxV~!4 zm@twXEXzn4v=pj(i0=h1M- zVx3NoT-~!6xLOp+T(Vp`GcJgE2A6Gqt5?{mH6Yx3sVs`Ca~K}whPR&JvHfCFIuf@) zQ=!@gwcfIk5V9R`aF*zq3it<-OvAnK4MISjhm>W7yc=rm2e2K8k%$^1tC;up>vzO8o+8UTdkP z&9(yYbP`cfrju-D>Ef`%IP^CXt?BzSzh00L5oS$hSNWp0QX?*HwlTe+oKSHkka$HUub9>X=oSG8o%6wb{n*m|%v^uH8JqSt^>jDwg{iN9d z4Rs|DHzYlrFDUes71Amk{d0GiY5?y>+vxPA@Cc=kGrLVT&&~AN<#Y{8@{Rt+&=jD5 zy}cygxaJ2AMXR~L#uKChF6o1(mZ=J~y#e6cPo|))oGe+hCLt8EY zGd|olmiOaUOi{vQjm|f9SACg9j%NLv_c#nn$t7WSoFHaSt0#k|=!D^9qhU;2u&-{$ z;JYe<#r7dh4IdA)Ic#%9^X<75b?C#s-ncMVyJ?ok8HKX^?_m73W99Px(e-!3%T_?_ zS9FyA3H3zDQUJ6Rua$9m-26AgH)!t!+4z5oQ~#kHVrF6b{}-pYo8kr&g?Q(&CEcS~ zQ8}v?R1!ex=TJ&mPUDj1Ki(M#lEgLZ4^{*;Xp#1O-Y@so!Nnq>@}Ehea%#*A)UT=L zk&6bTM)Ox)#Dpbj4#B{p&DrjeByze%lJ@%%k&&|QPTJQ!P#uuOl)|5A z{>FU47&rtHOE4eS%80`m$L~cjmGf_tcsIKK3y{^OSD@ z%0C4q@D^ecc7k#ptSXEoT1jM3@0MO~ z0-95F2hN@o-64F(HbUJ!zUCMsPydnp__F${UhUilS02eW7Ez^BR~`p9>%-yvN)LOw4mSG&y$|H@hA|a#-oQC;u#XFZ)uR_h_(X#O+@i`%EJ7dSFt`qC6lM&_riH%|ZKERqTq|!L7RI$F9gcyvvo}!YEa?o@?W}d3pnH&f$ zCGqq!M_1`#Ej!3}JWz#!p3bfBP3xiYti+Yp6itI7tOCa%tgkmYNQ5LS4mS>jz;K!v z^O(3O5Cv6vF-eAJ-hsD3@%M+Sg^=oms|8^my8~u}KKC5jLynfR-3y-IKm~P#(AQ%! z$4<^CAk8cv12&WJzKxPRsub?tk1^Q*(Q#}mi z8t1}*gH0P}=MI1f8iuBjojfVLBsgUVLP;juMi){5ckG0#q<(CyT2Ti$f5B2v#n-4~PJ3SZf@ zU8lJIewO;YSq5~M1p2dEpf>jaYES{nd1&MTHW%(&$k~b_mKpWS_H7tfl^lLlHSViV1ns_$v5rcUKGlNdTT}zY0~fi6%MB35y9UY%E%ac5su^F| z`BBT(_l6>^IzRR$kkGrdE?6QbvNN{=LpI`P*#z{)%jMm9JF z>k`O5P9&N6r&E7oq1pM@kcjbHK(K%r=+hJgmlb1K1Z5Bbpf`xil3ZcdzGFD2s+_ZY zZ*W$rTjCAj?wy$K2Xfb~rAd#3% z#sbWdX8%{#qq=kz#3d)6(uTZ!3kp{o%=>*KSk9hjwkk*Z42A^X2GCqf{U+__lTw!FjbkNLi$=_`U0eSmX)$j!;Ny_0K*e5>IR;Sn#s22yW+7 zXqs@3sCe+ly5)C~suN{1ACBM?$>eV|99(V3jY#^{*ckfrN(q{)M<;rivX*7P+!>4#UA8WwqWC@x*Rctfd8RDcoAVc$i~TM6wM9w~MR#mtpE0t{e-|M1 zVQp_)c-kTQv?uUuzE^}KHt2P@qaCq<{s55sV*KSWW*MoMBwTND z=M*$Cb$XyUMx=hw4)RMzC5BXIyz*5;_q>gp){N4|aFu7FZaE7`V?j$}_fUTkG2f=C`&Fd%@v8pr$s;Jp zO8Gn&j|Wjqx*n7PMZnbu4M*}wZ3SbAMGr`I20+nEGWQx{r4gO8!GRj;9n|()Fxy4A zBhf3%YmmSf40bTD2{&Q@xMP16H_w&CL#r^o`t*@W?(U;daBp6t5_x7&-4^?1P`%3K zWG7)U6KltL!k9=fY$vyp#c&omAYh*MwP~dX{;NOL6?dXd+AAy@n?KFBK9+MKZ+JKz zH0`8f%)UB+s$&@a;h&Fc*A4>a+=fF$nd0wLrq6`fZjE7BZ+6*kS}I(O+!hziCok%= znk$alJ{BE*kDos?+2_(1FV z{*49l+M{*b9Z4Bs5|2SpQ(sMKl8zn@H1I>TPQq&-Y{%gu{edcsT7r!Bc>adKMbKs7 zfCS&g?^`E=L*2s)nH9jRB_w0lqZAFa;4e=0Tqka%!??a@(wZ2z#e(STSVHUTK4hofeH7VU0EILk*&VoS5@Q=7V6DG-8z^0Dz=;@C^t+7)3~Wt=1te zkQ6;=tDpsg(9@@jO}+bScJ6OBwRcw-6P?_KXa2S!L2$&vL+S#h%jn{yp5JoG{SX|N zqMq+zee(=LlzKJ1{x+rfh8=C&%lTh(BM#R8RI_rhas9V@YZ|}Y=6R5|p49;km{WNU zkImkg&za3=RFE>3^`IEGl@xnCt~a13-R6byS%pE3ot(7ecT%kPlO^eOQcQ?aH*aAt z$Eyz~2k55KLY7G~qd#N-A!(G-G)b`;gTFtHa}8m!LrF*|dZtxnW0hFZ>12i(i=;Ar z|7>wHUu4Ph#Cii`x@5Nzv>1vdw_~W_q=i6fq?2HfsiX_U3VW^HA5LMR9baBJh?G$7 zcS2EhAu_|Hl%V%X((t?=mI8!uiXy1ZD^-=oG;#qb%nA9u^T?)T6Mt&q;35;5YEsgv zd!cWBy-h#U!lNqR+;p6cEn#=8E6Nw74IsiNiwKyNu9#ARi*m2MDl=C63!d3ctHLl_ z%Kf2+Iq7m_`3mAYpkyoD9D)m&;WJpdY>|E;;iE*Ag%MGeUVDHE&$*~1`#>JI;%>#z zk#S8Ottpt9b~T4moUaa9;?V*ZV!6iCfMGKk&x~gmxv~7a+iqApx6w`VfED}xw|HOP zJPRBB^fNh6`5ekr!HA&LzT>P!BJrwmVjYiKt{iWpfq}P^u3TA~a<(#mdzr%ORQa&y z=N}fXGB-1Iwp38SyMJ-RZ-1pCk2NxwGkl=}567Z&k=NM*M92x~c&uPYa!$_xekaRC z4zLzYc@7apKjMkZ^ZAD(#4o3w&$yCXXX45-Vkyy(9q;NF)R`O*p9o}Prt+s{@VzaW z2LEg4JlqI1GK}b0I@H1iZb9?)_t<08tymq!$x-mxgV42H>*Vt(_7SFD?bnILDrnsR zQvBteaNd!j+4#1D25w@^$Eucrj_W=^DF_F1@BoiM<{(y76s~d`n`)TBCvBs9LOxPG z6G0_s!MKZ90JH>JC<1Lt-|`g&ycJgXusXA)S*^Oooi&NUResgc4x2;l5j3L@Bt({E zXG+<8tO_ko%s393MMJztl>+?+@Od%}B-0g0DpJ$+USx<+;ATy%m_J9BlLEk1q(f0I zPP8gd0JvtGaaw~`w)&OCh)Z1(M-Q1JoQw3TBgO*UyB82pSHMOZar||hJ0f4CIAU4B zMkAO~0<36OlFk)kHv$<=krO|JUhde!_qd*VWWD}$E*5>sLY-H1HE*d!kJG#ZJ?U+n zEG?`VIbCov$+=oZ$VnMC*GYj!Y)?KTC-zL3fweyWdXP!wrf^{>T9Kz~&)a2=BNxD8 zlM$m+JDFR*KjrZN_|XCTXpzdTFA6lbSx(-Cmw7tA*_yCoSktMT+aqjX)21HRX9uPi zc;xveYOV#+<+^3IGxYngn^suW8ejr{%2@5sB_HqkV@6*&5P}J2>wa+@!wecOA01uHh@4Nne@>)q_V8wPvQA`z z$CQVT+8q(KeaJHAp66-;S)&IOk@Cn@WG*6^>U`oJ?!r5M<|1#B8DvOLbzN3F0Nx$CSviGuGNH zS$Jz0;Zji-CyjQFMO{G;g3$+s=ZndD{hAI$y@pI>N(=VQZP za5x{aff?W6Z2wmM93hNX;C-S{4uuO$6nIKzvW0uHeV>7Vi)({zj6da|gU5Q3&kTc} z=-QiHVvAU0FTeHwA}muFzW`-^+Lo2VCi!1j*q%?c+?DlcCl73vi}mnY6z2KzNf>HR z86&@Oo_NMMz%PIchK55z^j`vdxl)qT@@xX~q8qD8dif{wf*Vtzo4rG;+pAN!`XICm zcPHTV8@w!KKm`K~Ue?GzmVWl6oXW*=pbQ=6f4g+A=?z+6z#Y23AwbeL%z=NX2OQ(I zzSMtL`77YcU)17{Qx;OHh(M0uXYbQ}ud!P+bXJ#tIPHqJnswD|zD$@L=rhX;)9e=hF-i<-gpe^9(@OS|C?BX`}aPsDq{@N_aR zjQ9S=e>wdo41)T-h5408zZi))mG87s?IVo>UMj|d>+fslTdwp*HsoP|X%~|3^rMY>$ zQWThKX}Ij@czwJwZ-)<^CJBVETi-DfL048?%4kLGHv$MUNY%B7tb{%b>Y)>s%Sr!e zDm#v1+r8bXIEO_)xAsfwebQ`}+tu7J^b|gqQG1b20?%8%`@>7)lv=e&kW=#0kjOMi z$>jg^Aum_nq{uxT!Xqz74lg=)e`rnNIuutN4u3whZrI|0UbZwiezh_x6)hmTsdwwf zOYD!0z>#WBEU6Rv3=ZObeK`5Yvy=nMF{)tA$Ubz?yLCRt?~_UjHiP;oLWU$UpHs0Zh17k**K6^mki&<)#1g5F`=%MV}i(gG(P$uzIFxks=}ov`_L6u{EJ$ZPmKY9>LL2T-o^k z0ddnxcTyril(u35uRVX@qNoBMLAy(iLjFUHjLw!f=-9x=P*MRga_D$VT@V8zv^Vun zp^U2`p_FGz70bMC38JD;`w3*SspRztY^B!+bqIV;EFcIb9CK(;;d?XrebZS`S2XS# zu_f9I4-!~7&Hx`mof;pEC9d;hNwE-kF*-vf0D7R8 zyoLm`Gfjsuk(YWv<2d+(A!`wHR5wVU4PxYu9aU9^rR5j8XoX|jHXUc=8|O%-siPb8 zzj~E@6$ur8@kY;o>r(>w3Bhre18S+VJ|~gjaHr5P6G2R5t(F3f+~pb5uc)Sir&?%bI^tGGzr&BPyFwTOO!&b%~^Pxw33g zQkZV^X{>s4M^MVnG6QgV6A148C(E2Jx6jewzzT$CT;t7nP^5=}bLRTyIY2r07!zGV z($k;Pr}&RfgFy0GmR8v)as1(RM@%C?)mWta{PJ5(UGgnBJTm5xbC1sy3kc8>a*ed@ zJ?uO{lX9>@v?3Z)gf5#-WzV5g#v$!kRsGwXbGD1L9WzFgSD4A@l!q$SJ*kQ;dBrBc zA1Kqs%-SYyfp#@_?c21-v*h6W{(=*5p%S7+1Tz_C=V3;~QW-+tGRw{LSGo5nzU_%d zN5>vAAHrBzG1+IwM8jl)Bem1{MKM$R=N=l&6$}Hx*~ecYqC-SebxRf2BDceZquoVI z!i2)~Sz=LNh{xY;daXT7t#3N~3+cYzk6Bb&aTZ?0LEZv>CKfH`lZv53X456fKY@z} zrYGC=aYh&!`d5e?kt~N}Ei}i4Oe@FVo4aOOHtB_CqdLRPf_yW?mv7xIDi%nklwG4lQ98w59^(sVY5vm2x#Sp+Dk$~dWaPC;lCNAcpK>iYS1gOqX2iimSxku;b zxXv;J66S=%tTqa&$YP8F8y6DlH5jT z-5*MH17aex0n@BF+qX+1SKRm{DdGN;anxA%(|b51DDQGXp)?>%`7m1~mjLhw(mUC5 zQ-=WPoz^4O+7q;1su8uu9TXJe2ccPM5J-b&N@yHVOr%+1St2yk8+l;^)*TS~MgfYt zF>WL{Bk3e1gi3EEdU5gtuu@>oNxtDIndKUcYNfU#sXD`SvB!v%N-|{iGps_qxK~TQ zOt{5`oeo3p46%keE_2TUXtoJb2i>%q%mJu+Vfp_2xQC-NJDNB(E7Qz&dS z42SBuhZ8J{<~!oIN@bK8{EQ|t7Ik^6QwqaHhiZf(JtY!6Wgzn?(d{AqAju4mkH#d+ z_~BVM+_S06{jved57Esut^izH?0~#Wed5lw+v9QGIy3Nb^IO+ z4BHSRa0pPuzBf8XWHeb}^PD$*d+_uoWv@@|C)J*6G_zQKb0-dE3~vJpKCv1Y2TT+a zCH47P9wVw@4(fscLijr!i5}P8$<4_bPM)(4dlC@nu zv!VIro%J8TgWf3wU9>bpg7jJjH6>#^5%T0oKO+3!f#wXgoxdx2WOmx<s9uyjGj z#ffo|gFncXs2B)>XPHQ1`h@ZECu_M!`o!S#KU}v$ZH}RfnmQTe zNyLS5mGnvG=#0#jaHVovRWZ5OgYDkTWow*aSq#i7+aeC>aa*+czF`;`x=yF%YMk@# zNNAqWt)M4j&tWu_*#Z)}NK*}pZ$F)%ayEV1GdNPW5`h`~QQD1@ykAq+cm0~*Hr-cJxsy{)^_lUw@1PuPkJ$WHh%Q&YJxzXRn5 z(GNWFqJyb$S#v)AMkIQi9hR?l@CkTwK-++kh4l7I3z&dRcTYlp{6MSh=H14KP0uYr z2qRS7K&La;^{Tdx0312KXsGiq zw_zqYrU5uOQG`wSIhj>VMTI2c$^M-#PwT#Fbz7u?OrI64p-2#`3rzfl4R2#_!^aCmpPeGr)t^Z|Smq{S^T zL9Zc_0tknAYdayx*-21G=kawn5CRh=5EU`;(EU0-(KUpyP%jad5NwchKspNX8-J24pf@B1s6JdH#1}OdA>0Fq zR}~yWVBDS==(AT$10Xk{H$Nn#o~mASn2;VmJKYY0CnT_)Cs#lJHVUC(e319Z%2!N( z$eR*wAR@vW!QC&wHw;+trz?biuRW(5(gY%m6Bw6}E-?^3x|~2EV*(^l!0Ir~UgaRBxK7;_oLC}if zU*z`n%7XCW_x*tq0lLDEk;CZsE!@o@fb-3^J&pDI0HOl1IR*!T`1<%d&0Ve@xZ0;v z?fqTwjZOQFkFSXc;d#wX_ywjQ>+=RA)8W?#sLcy10{|eSB7{LeMg{@-;f$k!_#ln< zWvd*-*#ijgedxAc+GY3rMFbqph201F;!I)rQt3bd81+rIA;%{K==lcv;l2EBo&3$6 z@)dsXrTF$`RJeC={*HG15`O#L!)Gn4+{GKIcIu96waf$U)dpMpRglK_y{V`+3a?;26w?kD3?LJGbi>x7X|cOUQTci|_I)F!Y1p zJNi>=Ch!~hH7I_NJLh}wT`5tAevsn#RXwzc_T~Na-NJ|8gFx56#e_qJy8lI3@YtpE zlLLSIQT7C~*&)tCN^1c(fBYN>!W!5}!)gU-PmxQ%B+1cRF=bEq8h%e|QCbbj+QBXT zFZ{YUaZ>;D<^kS+h4I`Mx`6vW;sfU8p(EHH?U(xpa3r55&H8LRb`6TVYe?KFl6=N{ zr|g5}MfKm0!`xldDo zfU{+*WK1msD;Q6s(|$#`#39rHu=k1x-J=mq5FDiq+Q#<*aqnr!w&P!+WH#=a8<6cu zx*VbLg4OnvCJ#?F4I@vrvpi%Y=qH0?j9BlooL5Xpctb}J`O`2~Y5*zl?Y@)%-_;aZ zg|c#o$3F%kDO%f2>&ZUWJERxJEucs$KfgcfLVv0>^i=DQrio?>hDB(wGSeGvVxDn6ydesFeh?b=Vb-+=ngA+MJ$g#CA_rHMcPc_ zfvQ|*Xc{-D(4JSx3prMndc5Qyh$*+JYAM#Po%Xzg#l^}pl)`9N6J_gqaq~m~=A+aPTVWpjtwT#%k%A}vx*1M+@`V+t z&OiAd7j_UAy{ek;gnbXBHo4>2@imNf%iORk_3;%Xd+JC7!COk(RW0w2MWA=uyt+=v zkOJtxx9{wZ-*kn@p)Wx)yneE zPT7(Dgz9SP`OV@9^LysG*<(+%@rRXkJf9q-Q5X%Q`(1U_6})&4&$8ZRvSgV7F8qo4 z-!A#XoGQY_u&AU$q`&)*s@PLkp7x%rblV%r*0uSbQJS1y~^ zG-lH@Xrmc>oYqzxPQIZH2e;0U57~pU)JAyVx-h#SCZMum=DsIar@}dQDH^Kem5yq& zr55U2>Ofvs9_@x_a{BicrJp;TzroZ>`&7J$N8`kmUjF_iK z%d;4>ToitdU|zQ+k?o0`pgSXAyjtv(trqUL*}9z9A(lQZx+-i!Ns6Oxwpzk6x!FpD`=~N&003>ooOq#Y-evFN=@&%3akTmKQ)7tFyN;RabSrDUtcW zaB|fU%!OibO-yJC0#-7#)+ak<0cbFt$Mn~8p@$+MQGjYyq({jFziL zG=K&l$Zqw8Sjz^GlxpjYP~aj2-t}L4id>P}s=; zglX|44H#gixbP-H3=|{i@YGDJuQU}h@Kx*bkg6S7Be$6W5h!jBen2NGFd?boiV*=x z2;}DNkoCfAu^jRN0388|<)4pS6Gr*L)4T(1p`2?MF;-$IVWOMEY;2H)G(_IzOhUOu zy6#Ue=igj;cG_`8<-@)#Mwj)h=dZ9Dc1DGY4^Wa;kq?n6V2Z6`+@Yr|)q{ij#(-UL z%(=pkxR|3Q53EEMY{p9-d?MFwkR{IK_5$s)lCpmVd6an9PNYxdpwJP_xXak=?BtF5 zikl#)%ciqlizU_cQeUDk=pj`;f3gs;g!aT0{)oyvH*S!A5YpEd$(J@!4!L!*kRW9+ zzLQBfrn?+~Yg&NeT1?myU<-mq-$bY<=13|BVIq`q@= zqDOh@C6=$vX7py1+7vToa?2@?>tx~FyFG1|C;Z!kF@w#$5=(G%_DWGo*kLb>x8ucK z3qQcEr?PS3k~IOYK%+QFTL0EQ9BUz{YIHLF&@n)FlX2p(>VvUaQ_KF1@lNrg99sk| zolKstGW$g%E{_53?v8*&I>x#`eL~+B(7B)j`{g#BnZTav36p3(XwM9p*q@xF5;1M; z*c6>cOtoMBO2g>0CfPEpG3!}>q$pfk*d*T{Z@a$1ScPPsOryIdVLeuM>%?M{1XIP? zLU)Wtj>X4n`q{7#XBZg6WM9*ylVF!G&?^O27#Mtz4lF4L$l@G}@J=x!&hS+t<zA8$YWm+bC7x z(M5lhbwD|$d}Lh9u8t_8rDYB>tc%5bNk0B8lEfAv-Zej$3IOAAz|MqIui|MuRM)cu zp0;luo-c_BlQ2pjUDkw6b#WRA0$*C+!TZ6N6vvHy;!#?sdP&C>hH!w3qNf|#$vx3M z)E-{Cw?XK?BE5`%g!cJ^M*>)9VT#$wpNr}1X&-chjS?*IITG|+Gvs@g&%Oc46%KFC zTDCXm^U7Ci%ueRp*4mbHZP@H1R$w9{CMxbt=01{>iCTXL=^S> zXN;eh*!pfd7Cjf@z%JsUlNbObh$>2)b~6Uiu!iK{e(LON5+J8F-eQ3Z+DB~TWu#_v z4f)AHPwX_AS17Qh#uIg|eCb`5Z>&YLlRGtA1Qbd5%s3}@dpSiXIo{k*b7p6ND~V z&|=@uH=8X>j&T@eiN@u_T*T{LW$gLy*Es`uk`ps9zQ|@)>bH_9R3pTY+>r7NU$G6> zUMszTCiCOa>8oYfRd-7ROeCH{qS>>SznakE`HzR9n;EWRIqtjk?KuuX)F}k1CCQ00bDXEE_I|VlOex>Aiiia7 zu|Z~jLSwax0Z+HHXWnFS7sCaLq4KtHeBdTgK4nfM%!JIqU-GTfuYtg)Jh5?wbco$w zxMI1Td6n7hIBq6|L-orp%-(X15Q3_#yKDwo$y#{Cc;C||2FrMl;~F*{s<$lD6+IO} zglkP-d~A}QWh5NFGlO^Xe}+1SsJfvuzAMY1b5}73Rdn-tP!^qZhtB*vw0W`Bt{R)K zd6|1XsWqw5R1|6v;+&ha->n_Urb-oeCNHaDChBy@C91wnOwam!jM0-_+8q*05cfS+0Z5R$-@_qDseI zI)~K5tCS$ZiWZa&@A?})v2dAVzYiIXnYGjSCAWC=6w`GgC?7q%1S{VQt^|L5QvmX! zc6S2-YY~=W-^eaV-a#^8+OP%h%WemZ@9gPjQzfrun*P8G^X5rC{n5}xOCQNxphs&r%$Dq5&bFtOwDb8VTCr*0HLO-hVM-f zl@=D*rP*n~rnZBQ*Lmtzky!5rM|Q#ULE^Q)P~&DX4p&4lLV={`Qpm=@g-C6xkIbP{ z6o0(yUJ`+IU~CiUfLz$J*Bjd>vf7UP6k!sDZ%EHj&_X~RJE8o}c3sV$l<6L~pm2(ksF;B6*yo11gbaRiAN42rP5Z&LtOOxfE z%}eAomJ3Lla9=7DU(DewVV~}&?0(c<&%|f#E&vPt^v32%V8fd*#)hoVC5-Q~8R$+!K za=S%bc(n%B7uj$7EzqGX7x%q`_T_?ncY*J(k3OHfI@1`f#0^64{7UFV4+{9)*4AXy z!i**J8+TP)mXZIor8lje5?2iGgfFiY!yjtDM44xG(?2H-<#mAFoQVv5=~)*Nec{j? zeYA;c)a;Yc_fg_FAx_}1Tup2c5kF7vKPImY`YKjJ$V-+`sCwu_@xea8**T^!26B0W zCh^E-=6-qG2b-Q(Y_}>nZS;~7=`q|5yy1JwE{-k|olN3l!D7mxF6J3~O<3y~!nz;B zRQ4ci2QjOOB-Na6x;#L>;Oc^m0jSkBZ1jF;uE+>a9;m23cMlYI;#+Kn+prv8d5xsN z|FQZJcc7@BeYRhyRJ@#nUW?)-hg{_J8A_HPV2mm^{T#^pmf@%_*J#stu@w>9WKjsL zEe&_^8z7bbDoL%c&dKx806g)gdaua7IO#`*I2f0Ztgu8X33$nF6A~MO*|I`AxiUGfVs33D3Sp(Up>X!Q+P;x=Zod66{>@7V4&9YF>+}7 zl%|&_{q-{WHnssz6m0AYMj#_(I=#ZZ_Ps)RjrXyTG^k|mX0ai<%voa!eh)8LCx`p+ zFfbI`^vupVmJt6_va*!>Pk<9qrInjSr6lONJ{OG4>Rb?`TW^>8QEVK+5IcT$`IsQy z0F!Rf;GB7^h*}CmKD?p2e5XcrpryRJB2tNhZG)Z?GQ!rw2pSsA?Bpt*vd~WqR>(*t z|B1*9&YCS_wSz=@C1$Y&TKEZ-WGrp$@r?;T;9IuU_9~m=opXf98m_xLZo$4SZ~mF5 zfRK^>lA&6wv|i*WCH@}#+ZJZZ^Do&GgA}Kvi*G>*8N5bIZawt%8{xHo z_;j+3ZH^{gsk&+0v0HgnVTI0&pz7dk_wR0#iSTnn{(du zV!zmCP@UB4D6pl+X}8^!d|&~Ddy2R|OBFlEnn1eAtn-4Iq8M!G5-ex@6v_RD=dP_G z$Wy6_6qD2N5^ycAS%4}fpMa8Rgk*&q-`iVr zLyOcj?hxDcSauVa*(<;W@gT3X{qVJL_$vEu$G}NeRUOk8j73^n0Xgg8Bz-19A|o{^CuV->r~BoF+7voC|Te{>K=w+R6OJOUXp|nA1T?Pe1k66z<-$8 z&h?Na(96X8!)xtktcwJbtw|8`Z?lH%69T=ZUbOH7$R&IK7gN}13q2^&3#__Jl2G}v zjifE{u*l4|c+^0PoB8dY{Lbx_rUXS%jLSlelkGp973-aM$air9p2Zb6V>1Z`G~xRL z{<_q4fN$K759*@x*0W#gMCkU!vd&W>Cv5=rzse&!JLb;co&)L)K#yu^wZ29J6ZQ-hd`eXf8J|p+ZKG_r4aNox3aay&C&v# zTW$=t4K4sEpRBrF3JxPFo(}H_+3xkfXl4Ob8oe~KD2|*w+0b+f5t?2|A6JG5Ok<4~ zZoTZJDmX^X7T8M^=K~&b=-d0L3**sIEii>(=7D;NR&NUL5r9aF*cK@n5j(oetch9$ zFN5!1y4NH9)n@AAP5Ph_i#C8)8CSZ@?A!BXq$(l0p$m=y0|Z+ooZ(`JIR zjD%I6#7*nks1K*X^~3&PY5r`cq6=HLG#cUtevdSGfq8U>f>TG$qnM#$pFdOVmBQl| zw%|#7m(!OBXOYJGHaT#7HZ=rkJuIPe1a7AMb`fbbkR?UUbn2`Nd+m&o%`tQ0bd!;6 zmAh9zQ(LCPjS&x`RupYeAr**NeBAf@olcH6@z}P*%{E3Tcd zr=@myQE|Z5a8`e`->8Ez*AIq@q|I>0nEl}(a=SqI<;R@%k?9pKzT(q`utU|Ihs(=d zdz>l;mrXeya@CL`!Ljz09zMud!b6@6BX`{Y%z1?oWb!L_Ak729dYcmm)|(Hp;?ZFB z9C~5M<=^+sNi;0hE>1UbP!6Z|PXn?i3#SbBmS5Sg8h;3tvKRNHuAB^9I9Hh5Zvx}r z>ypQPZw6f~&X82jUJWH$_a9L^zFsggquF6Fyk}4zT%yxAw@C4WD$V6bkHj3D zd3Gp!wa2}xif=Kw5SDy!E561(S?A(J5ouIv73NEk2B2gepmnunA|*%JMN8V!8e{h~ zD$g%wpMP=+#&vc339Nhes10f1iIeXp6;f#stzMY*7}aU9yHv}Me~Ja;eH3wQC-ZNHfWLtg`58Mxq=`$oN^uIosY5YH?~WApqm8 z1ry0sPGi@!>w2skaoQ;OLzG!3HEI23z;+qtjjSZhZM-ZS&RBukI!!9{$!6Wsy05Rw zCgy6zf+Cx5D2!UT_F^4%Z|=Hv*0mM1$yD`FcR z=<6!!gH$q1jE+}c(gv%xpUoSaUZZ?uRxwWXe`>i~Oo zlTSawUo|&xXM}leMOB$TcOM2m$5s2j+HEfkWl<1j5xZR3dAT(LatrE!mJo@L}ZAXev zq6B1)OD^9`*h##y=axRiCbH;7+$Zv)l}B^;uKN-PwM46bJ=onQSYKpKAC4kv2n z9N;{)(IQ?YU79c&9oRfc2sxFt8|#+(oA36z61CWI|1}PQ(Q9JbV&06ftqSlVG_=z! z9ufDFowWMQvExU+F*DR={?_?d#Q{E8!wi(bwiEy)Em3iW%vF>4utbn%!s&a0(L{=U zytH(<9aLQ)PvzarQSU061-6{zuvlYtspL=x=uJJzZfr2Oz}2E-xYZb10toCfPz%7L zo|<6Pe=?)NwB~1{LZGO@3NKsdo6;QlYu*Xg8PK&#KCc|ar zzpz=&A=q@%=9Um)3Ds)m_%_&ath-XB9wxfxX~k{7?cPi;hQ_dB9y|OXpeOkLP+z5M z!7Djdn>tBkicYN?DkgPjRVJt894s+Qt)ek(YiJ_aBZ04c{RNjuq?G$_?EC-Elm27h zOsw?(LEQh?Hv>D%e@_1o`(|MOANMArUBQ(SHy2m}@RcLN@Ttk{&cx3aJZXXQ$?$^^ z@RR=jjfY#{6uXt~khsMMl0Zc$s&Fb2lb82Ed<*cn=|27W)!1!qP%M#?#=th2js5L4RDXs^)HA|J1~m&9tH?Z1jw0yJ)9l-R}5VlV;=;l zV4r=?FGN4lq2FMBu^*qSt1CenvDT*crd}p05Nl z;VBRw4#L_l7*P`L3~q!!@SPtc5SXaJJq>((iyaI=FK3^aB6wbG2$651vkx)|fG-?4 z02z^GLznj~px6 z0H#GC>6Zj9l$;_H0N*|8PdPmFApRU%6$0A6mpsuOAhEH{6Q`~~r3*u&SeoKBW z=;PtalWhQzfcx)s_kJ69eA~Z%jeHP~eU(3a zO^aUU*56aJPg(bW>jkwDW^#Nn+|GH1_DA{9gYm$Qd=;hldrei*Z6e*y9(GlvaZq^S zBE&qqia`4d1n}o~*?=lT?))})g!lB|dW|2kS$i>q8DhFLK?>2=&P}BhQi1kiq%rG0I5Ud*0uYG5WBh@Dw%M zMroaa{RG5N;BJBXRF6?^C{ceqZ+Z4RY_%J;WxGr8(6Z zO50uPClfYy?oGtO+^cNlr`PSt?E@=lwO*7h8wAL^tR%fKHpgn~HG{`odq~uTvOC_o zcBNXbUvde*g03>&-Ilkj%c)Mw5Er)oo=I*$}!JWE2dMC8f~9bh=<;A5WLSUTQyO$e`5yZ?xZ^aTSR=+) zq}oermRyH%^>-(jXzoq8&dA|ZS2*ECMw}%}B&L5=@;XXxu`r%> zSufR+TWz@T=AKHkSIuv_sO{`D9qox<#M#x!G(>{=-g6if3(w9`7VAGisSsJ0Iu5Lb zV|gAU!Pk*wpF>2iIv(e$Wj757G;x=XaEhY&@GQwJGvVDpo*>Ri$8l3?{v2q|J~NC= z(6#cIJKkkvY9e_s)s4SJZbLX9`sb)4HF^-b3?c)Ida}U=`8` zzE{@!KHZ@detqfg7Mgu<-PlNKE7hVbjH7p&*MV+kB7vI)-`q5 zJ69rBSTb7&T`AtSU9~cDZ8i9{seYb}9KdsCG5Td}4?`qBB~0^pQBr%~)5oxFD9bTZR>q5y0c~AD$nK|&)NW5=u;rZkrB*6v5_Ubk7CmqCvh34B?b~f^1qbJC8bz zopp@<+%p=}Kj<`{`@NY7oTP9h&dcUNw8!a;v40-6a~vGtY`h57owc#CEOq>225Z62 zG(UTp0<1<(eNy!7I1wq=Dgwcxi*XElGc%_g#R7#h78TRyYmHoXkH1M;V8pf7-$a3I zm@lj>8EJfBgxR1YJuxTW@DA;F4CQ)__=2|NnR(#bOetkTeB}|MfCawYr}Gu7dGzEe z1!4JHH3l=pJKl%y2RY){I0TkY1Z%pg@u(qnT?(kfgq4+1GjQ-okEE}~zp!6-Lxrgq zKtbqRUP?mmd@cHiMe37&cdCe~clGX>(qul_Nk>V>4?7sl@bPBbL2mUA_C2ay)QSCL z91E;#7}wYK5Pz4|TZpz};FPQAb#A?3*1uror=yliCrwrg)46L3NN2!?!D?S*~LEx z!H0pi&yNldfU6}bm-y~@A9A}e+l(V<#bbkO4ExiXM}5`}VJXZiDXLL0Ii$LoH6LK7 z!TTzuQxAa}HsWu#od*HvS25n4XDXrzZj}PWwAh$2>BOEpd5Pl#E0CNdm%L`$Fc$gy z7kOS*S=&erd(^CdfTt)cy(+E(GIRl9?UUbm_+@wNzOSzP@F~#6(cO>zJ0b)=fP!^9NGsK%DG#oldn}BA=;AzJoJQor(v6dsMMD z@G8BjTzI!4?Rr&w6NxsRL|7svk$P9+gpe7tDT!v_g_~Sy$-{Ma-lvg z!2NsF)0OC9y2E-HxFM(zZ||_f0IWI5iGyCV*nJZnWz!fpCr8DEVi#ObElp=|QQsM= zuSEx8a+Fu&?ooVG{y>y5vAh-VF3|BT@IZ3GF;++GiHYoR}=jdP7#Zh2P%Gc)-$dufd>vW&}w zC-dGadlqo*Fte$6Nj{U6(R-we811XiMs^YGCKxuLl`Z!Txd;u+?u=f6z>YJT-eq7m zNmjm;N_yLtj9F1T!r0Q3HH-~!$Mi8C){#h$5=eT3CT zg%SAO=Ai;y{~aKTAcBpno3|C0hP;hF0;~@F>h;YC309xG-WunT>Jtx12jl^k1p zd)=E~s#R}M)XD3=mXVi{AlW0a$>@d9BhdaJ7lHBhozf z{?k8J(wKRv$PvDv5<6xMtI)*6j;*1964P|B?2_`us8a^UxdP$7;(7$m@~uWFUgUb5o%BSuom7Db$Hg} ztxj~Q=W$a&H!*651fJjf&-=9@rDjxNOUstb@J^A@Az_HyJ>iC0!9U;-J(yM+)1fH8=gMC`tE~_ zVHq%e>A_N)xz@arHxr?r$9a-dkcggtB&ma>WR~GIm`AshG)z-cR8XkEh7y5=7Z^;+#W_7&{Fwsi=aXZhLCV?_sXs^ z1k|t#w8Hb}IeGWZnl!ZayR#}W+Dl&r)aK0~dE1%o9PJ@TWK z+mSg_O2wn0rPN%hA;A=mIV$32OvSq*e?i0I2(72;YJdcAmrh9)*N75=qAgXF0~$GZ z;T*xgXKe2j3k8EUV5ynz(-&3K8BAOtUKDV3gKFS0WS2y51`Q=1MwK<+8Wci_e%(YC~M7BA~1gJBCzyRL6pcv>1%0 z-M-g|TSSz+9@&9UFJvr&=lZ!yE^)I3*AWYshz zGQ*QkwpClvCql^VDW9%SRh_N}0&j@Lj$si3)uxB+(Y&L8w9%0r;5~+`H_b+zA#W#% znq4F2WVTxC7rX|N;0cvfH2^wKiS9&u+LB4z2`8~kb6J;z|{FQhf3Zlc_oO40)3pmhBb0QZ7{61Z2@CW zCm{CjZ1!0crIPQv>c3XZf8PdH$7M~0_8(UpR+WG+{#~*hPOr5+=ZYySkvQ>U#iJmpEp9<77zRZ^Z|$ z0-;DSDTGJHZOrv6n?sDHWh*EA&dQe{`lA%x)Fs_`=g z!K^B6NGlIh&uy+eL?yTF1N@+Y4V4x5P|4Kd0-6KxXmriO3hi7~SPsT_&E=hejm`hs z+u(Q}yS$Ju&h*n7=wI@+on>rC!ObHZZzIP-zFgNsEaY>V#0HxFLFMd{7W>!zOCOLG zwYjAnzL6P@b#kpO?M?8;iBwZ&M@Q+KH=cS_4%G|Hg*INcmgb`AZ!3?EtuJLI+@p*d z0T}O1TZid@!YlP7%JlgPRZ5x0w2e(6cEV$mSnj7U9atFL+Ygxi+XaEzaBSxNPa*hl zIG=!S$ZOcPM93LgY>pRBKw9@Xr0RI$0>*I1+R#2W4o9Wr!3Z%)V7m(hp#c8ICM*%IQ&LecMRvv{*^z4CEEhUEk58ErufTE!vqWg z1MHx84ubMg-~|*5N9mNtUwVqik3|j{;!mcZ0^O1~IVq2cXzGk=`l_k6rVs1_co9w5 zF|WnluP^x11^!I=xb3xgsb|Nw(Th}ZP3+b*PU|#oT?v3fo~EP32a zYo*IqH*PuOlQucdwe9h+=(eq?_1PY5JzM>Fm~>b`$xj#knUE+d3v8wL?EO<$u<|N3 z2?<~Z%?pLqP9zh9>$S|Rw20&vrw>X&2D@v@j`vepd7(-r%r=mY$fb}4MC47aUloK_ zDK5fnMtBuB7*(Xj2@h5kV`8fuD$dWWe`bA`wAhhG78*}jr*g?w)t)tUW*uCpPZ3+PtYudN8BHx~iTy3q zd&g3v3i`>xdCC3^6!3+wJ-$o^FX?&yAPw{0Hpri7&o@YhJCPv=tk5G;~Cv0Y|R8j+lR*8k)DGTvzlW0WG6S9aUc(> zuuyF3n(8uX`Cm_uZ2qG8=Z9oGYIV-gl1869rff1$%1X#=BL9iSJTd}oQRGHc4v(N} z=T@09PzCW=!E8~5FFxtgI3$M$T=sgsgOS-h-Sf2lR>0@O`NN9WHj5Oyw7Ufw&|pJ0 za-FgjrPGQKCMA2aEvwswA5)I^>QpGXbHbxw0}Zxuv+|*$)fa$8#gW!>X8( zRZK#oLnduJ?J+~hW25+_g0YTDuFun$WP->5MBoWr^?sDyhNe$tosfoZ78>aCGrVuM zL*S2#FYMOoU+dM92V_kSP+}QUDTgAgqz$|qMy{6mlGzc?+Yg&y5o%1)l!9DIHT+9? z#ia#l9A@F?{56Ya%@?ltlO*0|2c_Q`iL!!Q{6l2u2;o`qC7^~sD)Y5D*vP$ZTlBv| zTDeS9^5z!e3OqtQZ;ugB_mTgma8* z*#dn@!?lY!K9f|$tB~baTetwNifoq*1j%OR!9S&DLn`3w9O(tbDq7sIqQ)NUXxwB* zuAq%u1GK+NcqOmZ9jjl{&?!7Un(S0#k@#Qx1`O=8iY1Bh4MrAt&rb`OCSqu6(%Unz zDuHhm8b4;J?hLvHL&F2rn@5<6cCzhs;ZrAO<>hQ4xl;4r9WH?H{gMEZ?p|o>{uOTw zm5t;iQXxW5S8}bp7bV1hxwda>nOY@Qkllf09Y%xWT-k#o#bb5ki{2qr`kl;Zz;9Rh zX%9v?0Xi;1T=Ojp=@Fe&JDlxk*tdkyhb$vZrF8oUKt!job>=>Q1twH9vW)wZsi z=7V!wPLEa-u2!+vEIV{r*v+z;(0V5f$4~8}*jv^24db5sg&CpyM3DKNw((C#sw+BL z)i4v$Tmu?(?#veYkzIIRMlGcHH_HQxvlp91n_|1<4EVi;8D}l6C&SE?@Q8Ds99h1chVws2E04C$7P28<^o-Z8KEL-P{xl7K=4f%4N7N76P-Q4b zkr5)H>cKo07v~|@dz<`u@VMtHum8fieQ3*vT^$=oq3D?BwU(w)$g(J}T#aRomg4pQ zdSBFGbgggg(*%y>kvT8svLlhfKg?QrWO0rt2^MPE=~iW@!r$gzvIc*GFv_m9^gK?; z)Bh8zg}6KSuOV@s%A;Rz7rN41jfN*pP#;=b1$%>rBL()L@#~ghp*Oc#H}m*7;cr%e zVd!ujn2^`L$LF#AE}_ImS)Rs`+x(>|$h@sk5iIlD7|#D$yawwOy1m3jkZ=~2CtU?D zWv!{QhV!f3X_+{q6}r_po?InUUg+PbxKCSh=X382w>S;@kl$vwd;Tp}Tm7UgNlP6Z!X8E}nuo ztbiC||A4ql0Nz+@V(D3o>-w_WxH!>+YW86xCFWL*!V0O0*ou6=|FKvYMOxlowIMlH z_^crl!xGM=PsD__Wkq2WAEjy7buI6k`JLOhFaSqO%ns_=>gs+Yok0;4`T01Bl>2Aq zn@N+K2+c<-bmhZV!*};7S;NNgEZYO?25l3SN_KFe9dk9Z$143 zR%If;_^>oax6lXZE??W{7V1JaTX;u}7qUjq_&1vTuTK-n)OAEo>nq7>Ql9&hLW~}k zuMJ~1f`q@ZjaFN~pqJIx-~%l1*;3O&Vlv#s>5nU9jSqf;i-As483UYE<7${N@HVT; za5=fotN9ocIx!>h5%2hGnffX!K}#}Ed!%}_25F}#@s(PRt-WB|#Qk{Y`)f*vX#MTL z*Ge)0q0R(&O{xsiq*;yN6}!zS5#D)9xwL}T37G4w@%OPyTCzIfot=!4Vl%_4KH;WV zD_LQ3OSpfrEvkj<-@14M8bsj&IcF5G~>1Sx6E(czUPP-LCEmr($!)J7LwNL zTKxTkg=GXz@A9$p>%Y0gF$g$?;H-m08|AEtJ0AJ=JxUefNbgv>tHI)JlH!|2?H{8M zeM?`gmA!qX25K5|$(hH)nkHT`>xrbV`?e{Pmb#a$7&lWR?I z&GsbihfGXm{4X^7&lpKe5oSomXhL0WoXMn@{$!f@kszG_3g-!`qcpNK?8=mAvux} zZGFedp{t^tr1ho(*ogiC5K~adx>aT4n}-bu;t1FW(59O}JqTf+M}z^!Ai~KnK`DGLk07MbIh31qJAzj2gpxgxw_$Z)!rGq(6R@jjm2W4V|#60}{QO|`!fwUje z>df7{o#6>0^4bIRWtov{OMH|?lF_*dD6uOGMHf;$j)evz{9!!-;s+G+=gVs=q60Vp z^n2szfclZLJvfDXHwO6*qK63p+CsbmFol5>Ls-HLcqf9p1Mw6DAS*)uOSZ=g`@4l0 z$Ok}LMg+A7VDCQ={+o>pESTkcOFu0t;0>t47xlsius6HgtHOfe&Q7pL*X!H)dr_NL z-%}qRPjG8H^4ma8PT&Oy_(jME&>KgF0PsQ1U_V88mTL~vH^*!IC0a$Yg$WqX3 z@l&(*84J+%3j+?nm)rh?fUzt9u=R`9&Mb#=7WVGHg$W|u27RTw z3h}HI_#u!5lSd}Hx@++so%xf+fPn%>&*vuK%R>p^BW3wB8G=bY8k$x*h)guDO9Ely z@Z(-Yv4yz*Rn@?+g?$3sLMK z7dIIM5Ck_)Z!{EP>hd(|!~826`WO0lyT2FKAPpca6um^=mk7fcvcvEX;u|kgnBPy{ zFARGBk#nfK`w!4h|Ij>i_`S&Y0#?Y$?x!v-ILHCC{ofocQ8tNC-ZB_lF84~e(NJG! zK9?ZFsFIg<#t~(sYWd@s}*HLp=DBRmMn0c zHDWB-Y8C`pxCJL~nl&Y_)p4PrG24PVG`Dj^GqewcQn=4RG|`yQ)FJ6Wt_kE^IOkp0 z?6dTqv3upgW(Ruf1n4I^-!Ahk=d(-s7_HDLdJYyZ6kg$1nJz4u6~*nBxQmx zgn_2{t16~dH=~t{uRYMirlY$~%RaL7;!6`TYs)_OEo>gDEx zit}EAE6LSrKR?kIbAO8K!r;bVyqq^@e+}x|O$M$bp!V_34HKl>t+rzKc9egJ%q49W{N}#}1_mgZ&UsTh}`p7fI zlLuTrS_z<-e80;e5i6_~c=tyLr`wocgNO{R!A@(m6>X!}e^3J#a19d^yE=a&)vl2T zzbC75LsHg(^@>+&g*hw$7Ygjl+3JL3R>F_tng&7DZ`#r*Pt!Ks74e2E%ts=g=4r+T zRAljL7PJFM^zoCo`clC1^3o^`bxPw>FFd%|FZ&aGO9n6{1*)ymOP!Comf_RGkkl{H zB&}XRQQyrLZG{3Y(G6xBL%o+BVfVL*T^9__RP&B;4rl-Qz(c~EgX+vEs~Q$;e06DH zPV}Q4W9rz@7r*J)6Wh*YV%xTD+qNgRZQD*Jwr$&XzMI;ut^Hs8 zF1D+>s{5k5&h0s$_kA8jD-F}A$cj=%B9oo4d46@4RF*8gihb6VtD#DPp-j!gBM^5b zyyS6BP<74U%;;ub{_NjM^)UOL`KCcXW#UYu18gI=1Oy}SNWN|5O#3?nB@~~O-9|gy zDSUNbya@UvEOi2R0YOG%z-hNMITMsRu6UX!&BE=HO>4!mGow+@ii;gDg?Ij=6_kO? z(?;vrefQ(@eds=A=8tE_hr?ZUCKG|o`FH=}jK}ABJPA|iQ{aegn2XO>Mp#c6Tct|JR=ugu_Qsam z5yqm9RZKnHKk$+SP@QU}Eo-UW%pR~CpnC8Qvx8-dD}S6(>)35(Rs+v9qb##@@`03f zkj8cA9ZwIr`evcoemq`E z6S>lz=1YRD9581$(L86SgheaYnY*a__8!Ob*90zAOJcd>Cn4@dAEISJ(|+4jlq?jM z%9pyD1Kn!I**3;xLMsUb5E1ByT=&hnbL{uCKS}V(2}waHq4g6^8- zma{VbW2hAU`}lnI2O~5K4?yHB4F&d`cx`2O0SIOcfaB4PdukUzBJr4=a|4gI1l6Wb zYIFuhji;H)0Wj4&s(&V(06XV)jFIi4`|P8i%Z(PUF~x6#g_fIF1QsWv9rYG?-4QG zv>n|xLuqT`2d%lSHgs6ZvGO__PKd$=bttq)fz0;6bal%Q>X~iWp8>p#jw|WPQZ}aY zO_v{sS;)cjamO~mDNB={7YQ8BN3(yqgiH;hFPm9Ol3vXaPLu7xBZA9nlL@r=WMb=A zwqLiEuz-@3(&}O!`c8C^E#oNa>d(Oe9?Tt2pO1){8H>IFx=&`y$8D#9EJu2H-xI=3 zU6zvJs8|o_OQpqMdgD5)dkvcgjH&O1TXrv9bs*3^hQV9+&+_a*rs_2Mpy5E^Rj<+9 z?WWxIYa3TSm6b1K#0Q>7NjGj0k3d?x)*vtOBIkd&9kIWg7Uk1S2PUOG8C&c5JP*mS zMACcweV2)oY83ZKRzg@Q)Ep8V>VE(-`d1lL%ar zk-r6Gdf)j)GtFHV@_P9J;RVE7VmG6QyKe^S_$QuE;Ya7fXe*0ADQ}OvmY8Nz`1Hy+ z_9AlGt#T-0^_R_5<;Fpg^;!3MKW9a3v_T{!l#>CL>$uI=Eec5a@ZrOpv)4Zg40p zHGHo{8(YE*TX(K?pgx@+(0SaS?uKK+^>X(QRiRQMNP+ah&n==mWMZ zh~N!{h28{X=wuOYi%$+V4tO3>j|o|JX1EG*=+J>^)ojD>mU>Km`6^275KJ1@HlO^2 zU-p|jUj(Q$$d!x@&*zNI;(-(;?&(}D-K&co%Nb9rKto&=+q|?%16W?==`5L5KWJR1 z!<>C5TIY<_%hs{jc*l&hwhbn!tj~t%LS)tK)~8$R6D93*s5h;m;?F#jKfK!$8MBb1 z57zD_6-zXE0;DyTc>6D{axM&&>>weV4etFliTd-(jVw-G)#g*5d0}g`^ zm%rTQ#(rDVejF*9Hqab4y_F|zH}+TK&%_gK%~-0V-ewPoGg+rko)EK#2z&pIF!(05 zx-1kt?o3MNbwbk7dQX5~d8@R3uWg{@d(Ld#Q7WuUNAWhf35{W@B8<59F|~Q^x{6un zd8A$pHs$jjP(`pmG)}FxB2Y!Nm^8STt<}}y&d-Wl`R(F80i%)TJ7@G(nCQ4M4~o2~ z&M+pfiRr~{fn{R>CQvk4(VC4+4`Mh1^lRE)|#oZD22dXuQZ)9$MteA-CP*#Dk zMtkOsIZaesvw8$IuUfU6zR~Q1e#@Ze*Y_3DR7B~ z@Qc+Xth1mWU5mO-T<}kyU#RZkjou8^$`AFP8UAqHcgA(Sn3E8FN85!)^N|;<)7167 zRUtnbf!hvJGATII@+wt<4F*%}S6T|E!1xZc#y*oY*cGMZ^dm|h=Hukp@VW9b+@e9xg^lLJe~Rk+DvI~J+u#1oZlkrtKIUk#PnadYKB zNl8~sF6gM8aKKo0H7#>Bg8H4yoRpxp15L|`;Vq9?zsiw3fz50Our^Z)S;%52g6w9r zHCGsksja{D%xEgHdj?g;0)$TBAAy8e*s1Lw3`z+#YaFPz-rq zZU)C=%T0Oh`#c+5X-jvJ;+!(66w7rxhE^+&DlLYUWIYFrcxC1;a2d}&x5uE3`KK3| z>l8te_1MN>k`1Vt&+zZ#Ha+?|1rqI?h zZ}1@4ebbEebdV9Vq9n%6N_0}B`%or?&*`PQ9Y8l&&IAV2@GHsi&HDmpneyUy3;ABz zk>#8?Yd7o2U!#0Wk1O;CkB+K&<=m2~Y(yjPS%%%~J@GG_l}sPizww+k=2G8FBe7BO zYQFjk{xt!`o_DKx%#EbB+=ahv?+~lW&}FQH1I@+fH~SIUK<^|(3veY&z0_rDBZh;@ zy0j*87RAp;dKxJQtw3xX7lICsj@okxdVXjAbrE+eN!m%)$d&c-0`eF?;BG27&b8HB z&>_iftvU-U*01VICw7WnNoxv%z58n z0axR}=jB!rpUZo>8yj#DndcODD=7JXT&lJ;VSPSC*($Ztp5?+53MHyRJt;#ML>p6K zWl8fR1GkY76s2Ite{^fKWWE_bx6(#=e&#c%=kg(->PAxGut&^lD^j`0_G)BYG<~LJ z_&^2D@ct{croyYttU|t-cAZde@UgJ5>=SaR*dblOe4AN;=v$#Yq(722T1y|y;hIeQ zA^^gRTzUMoh4m3G&}Q;42+M1afAyDL3FC(+t&IA#$*m#yh2@gSbu3a)ORN^~%>Av( zgx>Wyd|MEkwS*vr4%-vK{;JvXWf5IxZdQDXr2E@c0||oSF?_BU5*H+gXVXJO%R7%@ zcUB|T1b3&?e1pqEQY~sHR`Nh2MDjfQsKs*ZY1$rbW6)`+uZbd)RnI-Sfn!Px{oGx9## zR#{Vmg87rAe{V#3_6Yh{$XaRsbnXBx!7?_qbqS#D@fhaJ6(w)?oK4qO$>KCK@J**~ zHk@MNFkbT;Q_WXx{p`7U{n@9zBeg8sle16a3H5Y|gF}+uHtEokp~uc5)?MMS7Dk?u zd;MBlgmx4!*KG>xiui1N+F5lm+@`Ru(#w+1f=j!!#)p(fGf;1Lp?l50vmpF&RfQVa zRn@yo-vj6TiM+_hw)iX0!raX&tsmLrf+}%5mZUuR)q=tlq);%6gTI0Job`;H@12qW zZAOs?Q)gD|rsGj#-tw_|g(d%vGrPzY+2{2N9_7lg4*Vk`R?6<)>x;g!7^kP+jk{yu z{>z@FU8x3#U=w-CBYN4|p$ZoFVphmjG2dZbI&^&rW%~9jdn4$@ky7_5Zb&^D zVQ{m7!1h{cYTWL@zPasM|I~lLf-(@_+q-kS(mscv5qlBqQmUuL>Ki|n z&;z!15PLLDWjkM8&w>x@Z^l#tuW=e%Zz-;~m zTdMEvcw(upiY13oIpb9lx|y$2^C?>p+w?Wd_NfC$2YP%fVuOX(AH|~h<=j+Whd9#> z&eMEQ0cF!J<}F@tVNdO}BJ!Q%YSyxv6l11@Rd5GtVt&JZa z`zSj+J7&8yL$eeXcEDnoPs{Y+5BW z=@ZacY`3lilW`0V@N$&4=JEF_RU&?6R)j@qC2?Qz1*x6mw8uIYllq1pAGMuK&L*66 zH6jqYH&qj*Mn1=!>zuZHzf=od7?oDAP7ZWR?}~g2eN}$;FI2Mb%*zH_#<_StpN>{Iwp4of% zt3LyT&~V^TVb0_-vfE4~{-KTohV;KHWvk5wCr7(dHPS+R_>dMmoy~IU!3Y{rA4RhW zxVCmP_KO8g$k1R%yvOHyH^%ftQ^!IZr#?2@%X@6&chpy=t*RTr{}|;QgpsCNtCpQ0 zmx}D}&K%Gk6a*uUs;GYITPz67q945o4Naq&;x<&$6<6~$7dnZEm|9KKz*NTDx6Ey{ z8LiZQ+c2?e)F&3)&)TtthE^f+g9U$#zuQUuY z$W|$fw@+&%?Xcy#Oq~xn-Ht}Jq&F5ILFS?r)oUQ+<+GNoUg&tBcCi;P(g? zoFSx!Hn=W#!6q&9`~!VuI98{PD*wJf{bv4!jR?HqaT=)%CozO55>1~nv<|P>MD%w; zA9xLu3gR_9h99WjWLc6Y(ls$wneEKcr!wNtvfIimglK0aK<@hqvhV@@aw(>&A*nSi zo6!6_UUT}<)V1;2qybVN4qrjc%g2`K_s$&jdL+_e;GVp6*%f6`8G=f3eQ<{5A+}8t zGXzs$)BRV2%t&EuG_h{kZT0Syy5;#UCd!Q#hg=WmMAaHEVu}m;&a92`jRq?EzSZagj3)TdNgu^19t_UrgIr(N4Rx}g>>46VOKk`k>FAy*8MQ7O9 zJd%F%0%7U6G&hZjj#-x_?21lFxY8-aW!8BzXRZea_gZNSEdzIv9?`Ct#%#Mqo8jiD zR{4Ue*(OZU67@mD`C^ibd`9KSqJ%?dM-Agw?an_6Dx8>1H^W^nk~6O!Zg2m3<^dx3PW~&S~Z*`MVzG2sG=Jib6}L ztMGZ0HBeo!r#ABYdQ5G;CznvZh*r@;>Vyr&1>3n~`8g;l$tSo(6!F2*t%sP;Q{K{n z_(`$iCd;q>_f`K=6#TiF!nZ*mJ-I)kK}6I2GcVpeIXVz@4ThnMcPYytZ^?KsoX#Az zsR%M}0S_F>=Gd~VKMqKW7R-r|Q48H%2Pv?@b1@@HTXW^9!xxw#Y^|@)2ejQp1vH!| zmc(1Ia|{I262VsP+g7|mL!DX(i{$K_Scyd$CIOB>RGrI!`hh@#>rNIUjDlP*$VF99wDBa2owYf%0ax^ihXe@*fHnCEp&C6bb>Z;6I`CCj;Ea*C7oa(x4D`m&ekhc%x zjw5A3i|I2V-{QC(S!zjWJnqhmw}xe!dy4b%B!t9zX@`dyRj9i(&&AYtO0y>R9eU;8 zwJ?Gbi);f;YQ#bab!ll)?V_U_1QIJ6(W7(8C@3;Kpa_902urKWa&Y#qqLWOA-cuAA35XWid{GY8^L7M$sEy&hKKGc z2A+tHu_I(|Gu`3{6bK)hmcHFO#vv=d9DKY7w4XmEeHaj@qK9~t8A1_uv{5tnq4p~!Y z?E-5juO7+1eGwYdR1rNdF~K?ImZlr+Dcq}n zbN%19|Jf&HXJ=>m|MhT1w?Q&*_~5YFE>&nWtCe*NU3I@~FG2+(LL+5X@L1lcNLnc= zmv@UruY0K~NZN=rKgxK$_+Fp*egmAgUk2^2%(?;ZcEpK+Jd0P*D4g4cG#4^0zzeyp_g(fKcOsA|#=pfWW}P1_7$UB&0x+gmz(|{Fw-Oz@Y&=cN%DW*S=6;iA>07 zCpTh1p*%kQOM8OPQK+{Tmk*w zXo2VF|HD!SaROl%%+vR;i9jcq#~1?z>cjP=49v^1PvRNH0SgGcl!xh6f&^ARd;%s^ z4)HsGXcFV!jL-4TK|HO+e)DS=&}n3x6hOK@hWJawbLV$d3MSxxrSNh+0w`^-p>IQ= z-n~gA0XyD(t%QT5bMrOA92|hHs(BRqQQ855I0E8<41gVwkPHZcE`fnQ*0~-4F#3ll z@ZU6_zX~m(VC+LXL2(sK{DTN%^cNw0{V7Iq;P{EV{s{mBXkK5S37~#J(3kN*Ty-d5 ze*v*>sBo^I7g6VYAp5X&sQhyXP>8Qj?=y*L5eD$~n2R?APdhZnY>Z0s@{C8{O80)j zFfjId{67?Bc7HW(VIUwd5D}n)f`0!zzmGXkf$zgRy_R!&F?RmXT4#lqN4N29KlXoj zX8i2HfahXRF$N5{-Ph35Sg>I5O9i`s0J9DN>l?u6jgAhWRsgUQ{i7>?YR5662LmAB z82ttE^iddKSc8Gg0={m)Nd50yZ3*>r<0YL=-z3mlxMsq@gg7}w}I|F@ulQa3}B0z{0NCTB&2LZ*{gMHTy z!@z*P3S3`9wb88(z%GF$-Llb=hV>&swIQHhhJ7Nypdtd_ZUi6#z{9>Fa4+)!A^Fx< zh=g9ZfK`~U0D$4}4toWoZ_;sX{5JwQ6xc1-mu8v%VDAF5K>OdoxL)}K?n_)A_QT8D%Q9$?Pv7%vq?5hZn0@NXo{d`beG_lj#!dYS8>eBy z0yobL0zey9029;;GkR;_l?omc4c3`N5%4@)KuRCO!dS=zsi zF_yu3;N9w|a6p&uF-N)U3%BzPQcg5c#l!4bBL;%Yx#VRv)(1`r0fDM#^YZn52z02z zk9ly{BrzpYd`0uX#>`d5p66+t(zH0bBna-WJw2zP${7qL{nKul+s(gTgz*M6;LpZN z1rsLMot{6Q6Lu?tFE^qnVr*{oUNZ{Z7l5a4g>p4E623FwaduqZ!nWx>G^ z(V_=YO)hf{&L1i?(!E@XMA*;i(!`k_jY@bFZz{Y^f-Hs?@vXbZKBkTYK#Evm>saS2 z$Ih)P@e*<5Gq7zr0~`;1x}})&5_>dMB5wGrh@cbZSczz)z{v_6rggZF)z~DK0F8av zPwutDY1>{|pInc?1~^*cA`51_$%8?1$Ce?EKXr-auDCUu$7e*XdhZ?NB5l%EUBxht zqYG1WE$#PaK^rGOzL7Nt(7Yv=UBAd<6enwr9|@4At|ad!j6>_T%`Ar_KzA=c53EgW zvImifwn?MQP7dHxFYONm05B5)GyRbr&-PnB-WlGbx z=F-<|L8@(XRdGy=p3&^iH*zDpvdCp;YtHOAq%V_ByqoX+?R3Y$$Oo5d34W7g{`%DF z+%dw6)C_T^c;qCCnONlHV^VChEf|{(Smuo?Tk62l{119RsYhw?CG>ffYon_SRBJC- z4P&K*GwKn7W89*Y403HMd;#-hXKkLfF)!*5A0(H%0g}Ljl2&FVRy5DY^J2CTTG7eFV8Ut?lOMI=#&JR9Twjl48*p# zr%GQ$adWL=xQO&^2lC@c6_LmXN0{^i(?5F4N?!^MITmBaHv1{^^(L>rY0zD~PHUZH z0I3LTIUnpoV@=)c$I%Elxz~TD7A7Mk$K!UD%`U4`}-1gf{3?5#<|B}E_x|id0s+e z(}|`8btjs6K&WribK#^~PUNiIOxPB6I8B8_dZJ7zNzz>a^8~S~gex8Co)74&Dga187qszQg!`ehiBMf`(RBXjr2HrxdSUS3Y#Iq@$Bvy>-1 zjJGeUD)75Li-kPKcem$V)C3H9%L$0N4l(sM$2PMD)t2auX{<4Y6)*Rh3-hf05JK~< zL;>!n6;v`F_F9x|W^m$^S^@V}=Y7e!H446tLuq5j#K=QW|C+Q7`@bDMzFe&h+}@G8 zSQb5Vj%c(tpV!LK$}yRF94@NOn6%v8+5F~5VwbZxq(wJ;HVo zPKG3ecb@TeRn5T}-5!O=HHx4XNu)-08BDB+X0|P@g}WTsOd=(w9vQ2CuHJYA1%VV$ zK>j_1DPd~Moj>9ao3$Ii5-_^1%Ric8TOcq6{R8DPE;JXDrNPsy;>|k^na46?ciL41 zwY6TusIiWX19t(Ie4?IxGd_KfsE?bqP6V4@t}#tYJjUlz*zIL4S^tYSb~%y)3#5wS z2|n#{i|(!?(VQ+5i8$3}D`Dsf9jh}NRBIa+ZodZ1w+I^bmnEg|bpo@b&_kxbGR8Tm z{&w(Sy+E7Fl4VVHZ$$w$la)E4d-H0jMJw$=xA>=ceZV&DL}}|3GT(+7d+0h!5&`uk zI#-?AldaqQJu4e>7mDyf=@n#M4k?%jjqCg{O_e-yTeR?^`e)u5)jTmW&JCwtR4W08 z6=vv;-e6h8)RH1qj>Vid2cOmC$>e*)LHrC)ueIHE>NcRKxs4D5FLzSZi}`vuMXd&3 zY&Qq``4`QH$F}>{pa{o&o%JbMebA+4HWmjumROpHy6{eMWsF6T$4bC>;9`xSyw9-N z%KMRSmP-(5O!1n7RUf!2GBDg50h``tzt-ITa2THu=vM#k!c9*SU(xc8Em18z-J_Q% zdRj)?;gtJL*oVXX1jyeW<|BxY;PjQqG|F|*kB84Cj7QXu(GaLf0?Xa3Q4yXYw%l$P zc(*hakw7TP9z^_o)I%*6AlM_y#E$*>Hc&T9j+P7=Q@Ld$m5GYHg8Yn_rjnPh6-01W z$oUe5#HL! z+WDyNWht|AE(n#lZGjkgE5Dl%uN95F^E?EOFBDh%Lq~$Xz9Tl^)wy2YgY(pQFe-{% zitGX?Q61OHMqq<-TeDjlrDW1tYmI_DdV$_*!}ei>h4$N$LI{jGg|oYYDU89?DOE@7 zHVrFw-?$iLgq^zmTk~Xg9Ky5rmfr9kZ+l*SSU#1h>-84Ib}U%7d17JBWkgZO*)VXv ztgFm=WB4aXkMG_(bNOmEp>Bi(jDl6GUV3jCQdh~FQ#QKh{b2K9OV%83I!@*EF^Bu^ zr27z`513%328%L10TB;}C_3>9d%&7wA)xY&d85q@j?Bv@ENu-?sp#apavJ&X5xzll zB*!-Uyk(op0H#X6SLWp5i(~M{RAvz#L2(zpfSwo(Z}kNP!*?1bg03P2CC@x=l#Kmr z-NJqqjpt@tnu!mne6A~c2$Ya59|_Kov)}l`DncJa()(5;F_ZdQF<>hnEHs{CQ7?Cg z-TRc*d8il?w(mgqssX>br^CtKP)oNpWoo(+nWpfgOcF(10V0u&3LfudvfQhCL$6!! z8ig&)^V^q2Ce`&W#L-`c3p2}-aSb>V2}aOzf!)XurRhXd$1xO2pLJ<;%>kS2O~X3ZpXqPJ(kL==aQg{xNB45}G0b5y27<>WWTLhvPNnB%lvq z`sG3qznyrpTg}1tvLF=w`xU2sy(1Qjh|ebG<*+m`M3V13(eGMWpPs{S(viAGdr>g{ zkT@E!D2XoL{z3ikL^k?Yech}{{doR@v)R{x8O&OzR=eKe#Gf0RCa*4hK71lm?HkQZ z?^S=43B)Hxi+#jb$(eXdh}!cgv+25C{zLD^EBGy^!3o8Q!zEk04FoWoUoJZblrvmG zK6EM?zUZ@mF>azCz|mM^xA0`Vv_#t(xAX6Lxu$wrXel_9Gb%bZ;=_@%Pglrw|EMoZbeUv)2YvD6Hv`oLxVX>G>+-%Qw6AjuKeuKxK$sJRoh%|3i zni(?HBsGq?6@Av+J9j||Sg?BynOuE&lYxq1if6M8`OL}pt&qyp+@Gr|WF@Vu4faL< z75UM0no;*-n+qP)*Egb=t&O);p`1b{uKBG_14QEqh5l4MD zyy(!X+Fkce2TvL^!+iZWg^$a`!9iiUu?QfUz5=AcJtQC1vAClv6 zO*4;n!TPD8tEr(^hJLUds*gO!$b_u0kXA>imtZ-Tl9=s;fV_9vLBosxj#H`8IHtxiApKLg>&LL9!sS~dn!7W&c}G|zOC&P*K=2YI(`E@ zVj4|zp~w$TBSEQ@$t#543zT`%VfWB}5F<$DwnV*u7JvU9Pv+=2CZU!{s|x_1V41Kw z`(P#zJb5sF!95JVoO-OT4gKc8YJ6mhhUQMeL zyf>dWYu4yrW_7*ktD=LCmN;a!!bE@L_K5fl6=8aRW3@@wvm_mWlI^DP{9f>&G~MNo zUUcnanik6lF-besM#&`CzXIb1kYwC5j5b6_&2`*rwglN4_Wi9F_Q@rW#QnUM+8%t# z_34Bg?}XfcDv9n7=Wl=8vAgl;oA-<=*Y)`m)eB^8|syD6C>cVuVy=z(vl^5mY+Q=)DGc(k7ToG( zIu361C1y;EM}8m$+I}EDRae1fE$G{IuBn^U|6=?%Kn_2o0pqLu9Q;@qlUHekbP9J} zO!ViGI?ecIs{CbG_r#;_xWR%y=lL-s?$X=PyZyO*i49uGa_pmMJ4ynHRKsnOS8^L# zO<%e%l9Gi)>TqF0J~fF(pV1TR*KX&>a^gPhaY+5ra%COrnMC92MkgC(zg>r6E@6&2 ziOFY?6>&SO&?PDZ7rqus3(1GY5t2)Y{PS?-cfuoq*=g)F9R|$b({tatpup~oMP+hAhb5Tys`&EkTtMd+TjVgvFHM`aSt`4 zHJ&bvqB0akPH9OOggcS$hPuVec!!zlF7vWR124qexnG05Ch$8JRv@a#wFu7>;0#H5 zW891IJ|}%+gbabR)G54>klH0oZQLzr+a-i6rI$7?P%;XU$AFF)90^L+6)r)iHL2FJq@Nk)1#13ga>TsmfXii)b zTH!?@mcmBwsvjUWBbZ};*szg(&auoai$j2g0^lCFs_dXMqoq1bLjCcBB}{KSx8lYS z6lGEUwx)D052HT&WlZbyaP~=W0pF`{KbqjJNwwS#MAG+(@4<5dqOHD|?ES_11Z+hg zqd88(obzX={-4tfw%ksTVY4?Sn#}xEby*144MLXG4Xaj|w7f`O`(2d`C(eC_=B5;B zKkh=Fp`Vr)2enR1^L}CDR~0^3bzGQ1`#hTN$_C8KS#x@r0(zLqyf#WiI;KI(cFyPV zp#v4I{7D)2Kccf~Y9FpkbH16>i;8m(`bzc&f(ER}(vK_So#$YWRtNeyqdo4`kemGkCnI3oai19eNE%= zmf}!3_A%BkETTbo;0t(hTc#Q=#wM8n{rCxv7Ru9$Qa4(bFhomzdXl-e>0L6+Z@8)U zPYCd(_fPcC9DiGpKprnfV7P8_ZFR(}!p>svAY2mjmSz&0)}l#pCNpC>JCt=6;yQ6; z9eP*cN=Y|}c~ZXw65NactMvGo){&=R+}HHue3oTi@Tdr_{0_U8@xSr=G2k`1@(|ax zdG1{IiO_bK)b#GSk5j{6@l>%H9FikPF24sgZC}>cy@Hn? z@DEU&RBy>TSN7})IT9xuX59kV?vlD~=&H>0iWMBDO&=h-mSn7Jma;q1Nf~}$cnDp7 z*t!vURe07}8R;m!VT<6|vEv93we&xTwXus0|Nh~sdvu`h&lUm8~@|qrzEIj%Z zIrY-BdY_COlZD*l!_Sbf3fo60Yi1(L4twOX2@m+r9u7!_Q(_;8^o^0H6X`#Gb}F0h z%la&&oEUVl=}{ySIG(-x+3hvjaXQt@RWh4>)b}*h(aWa1n#g(TJ?ds~s61yzR=SON zao_jX89ccpuR4EouMrg1ui*r%63X?kaelT&G*)8@i;pMcG()Kv0PhgecW1NPmJqRQ zw08a3oFM|)2#Y~T#x91lluNh?&N4bx<~vVn_8s+2Yqe72UHox{4AJIum|Ps#^4SWf z#E&*LSU)803erTjJpXCo@MU3Te7j8HB`nM}q&!uvUYG)bmivfnYN6oNUaQa1&dcR{ zZ84gICvHqI%l~Ld+VgO?t`Le08n-U(=HZ2PGFjgGXT)d*@yo|f8{9QRY=-_~XU7Z= z?QG4Hrb(-?FPwznT=*?xqwIvaq~N0N5vH2PksTjci(-56J)t6Vt2!}>d?oL)xA3n% zrQ0r)b^E35ZvS(vu7IF2Cq1;iX`z$W>Yo!^ssoUc5G2u*=B&qv)ZqD1@p58ys8h39vdXi`yV^@$>SGAHT?J~u~8YQ(z6%jO7@-1=r*9qo!`Gs_ri78i;c z>{hq0f0__RxV2X*XX}nH@2)(nru=rc-ujpbyj_h_jd-`GfSRODrSNn22a+KLlnKx5 zv`lo=g-(o5u|lc3+gWBc3&Pz#3Jjy9PrY0eUv^KTw_pV}+qpi2cG)bz_GwpM9{<&9 zHjK90eS*gH=P^)>w^TuTy8G^a=JSRLdr5hx3KtIw7aFK8yl;9)KxEH>A1=WR`*N(} zbn{(&4mtD^K!@ft-$V&-S#{+Fjnwc|Nl?r$-ba8^SZ{1;)zT$0b9okim<99t+irz9 zu-{@rdx_UIZ9fIh)c$Gio4eVTNsv_R*@XhdHk+gb2>1F}C~J7*DXtV?%s>w|6JFc; ztZL;LoATf?$R2Nk+2x(F{Rqg!GaD?j)mfOPkAb?-*~+n)cO+@;{5NCBM@F9ij-$NX z8di^`a{IC&I;m^db+7}hdyQoNY0IKp19xslaiUoi=S8-Zd)*Lm-FwFq3>+IZU>%vt z2ir5ZNZu`++gXa8!dOo}aJEJ%;8b7^q!u&+?=Cd9(|vP$?WL>j?~Cu;DJ+G^4-M7E zM>-9}wHxk7Myz}vHRH>ik0`_0Kv;K>Ny&-U5+lDVTeRjB4CRK#mSmDv8saf|QQd%r zi@q8_SKj|VCs)kcO%`X@p+oe}%{IdGAYJu`U6jr~NH4XEq$VyteI(qZB^I9aHZ|8F z^`m6<_c3a3*nXm3{XWWJID`G9&{p0%Y8p~+={zn z{eq!G_sVdOK@c{66UPnZ5Xx1LZ8XDZj-Hb=hO}^nQ_u_B!npl+;-gHkmPviKUo{i^ zhqB=-zqgsH=0q);v;F5HiAtdM{?vwA_^rU>vcUxtB$lG^^QC>qVVp=0%%ypuOa36L z&>b@P^)FKkL+_l?3dX&iNZ2r|g1+;12Q=;VBEksUAlqeQwb)WsQTkFj^Ny6%*6uKU%1|{qH4s1xf zie?-4muW>uxW0wkp*2~A&FdVJuAqr!q82C=OSdW%&~ou^?CB+Rjy>kijoV|c5?I2Slz&+M!BlFtdFVOV zl7dBQC_%(lUK@b)^UuDa83VWvK8zZMNSt6FgnO74aFDBPubXNAN^QyIofy)k>DIkq z#c1$^3TY@YVC|vm_YPdMU7p4{+kSPL%Q#a{qW+n8fPA7ey1^-J}@WC6(2P;Ppra)oPl@-~4 zLXLQ1UK1Usn4!cGGiBbHV$b;7pe~&o9XV0a}ep!z3u>jN=| zcy7j|lF_!!c-2EeDy(MHrX2G$NCKURt2aM`uD#AL^#}^1d*H1HEm-U9YW-GLai>7B zxRV%PaD5H0!|?Z5$8(=B_LyWHOxQ<*?a&QUrmA8|i6s}^u3kXh&T>KJ-L1)`h0No5Ho=%qQ(dP{(R}to#1O7uQOIWGP0g(K~Y4r~3YL z(z{GIw1{(wJ?M$96%T}@J1nyvXANFWJmJe~_()TeUw&ALRAKbtQ6-F=67fosyV8iUrIBr0pvur!2sCb(;!h`J@-KY+mr4(8<4+b0k6L}N zRB9Uuw=IVDLP{eWu8M6doUEW`01VHrkdhW{ZRXJBJw_)i7_13N1t!~c%Uz|e_WSUa0I64HrU z8#tQ?n;6*{o51k$!Z~ zN)!&uVqY9*Ves6%0E{-do-x-x(!Gzhoodh=4arnI4VWNN@`8i9sd$(`Q4si*b!DQ{ zq5lmIj{n>sVzM=+N0zXkvA8kXpr@CHNBT1l2(SufdG!~e(vz!C1M=H__=E?hu==Lp z^iH?*PWSW-!0KsfZ2+Uw-APbHCf8O*&`~BJW8BLCTKmHS_!!-3RrHh^0*~(p6n+!Q zU;4+#$3-7MwsC7n=N3km7RXVYPEC+2Ud9aU4G?8K>1zKPT>wg8#LWECQhaFq+`vFk z-|BQoU*DRbe+K-n!I34jJa7k4_EvzYf3GCOZ_Eu~fDSe&E(ibA{P>X`j0&Wa8iJ7- z;jWOrl?hCf+nc>ZBO53uC~pI(a`6#RL=69jAJ)Xzgg^Z4%`s3KRvG~3dS}}YyrBWG zv9`Ln*f%}5x;-(z4We&r0t@zAa+IOXvtu4O>T2qnk-5di;q{iym93?Lh4qd8HM4_( zUr-%O|5IVF_ri(6rNz+c`sau6<~QdcFBp6bRAzZ+VmsZK z0G~G2XL$T)UVy-{>a*#wU$VjR@o1T?-O(XL68cB$R4CMS>?Fu3jJ}zn;l7~>Fi!{;CHy zG6_fD$mjx|21HYJx%Vv$Km?rvgz!!8tc|1OO*}IAP6Czm@&dk!0SpGF@Xsx}ev<%R zLs1D278h{5b-&b4z2dO2Ac}vXIluU4`p18ka|C8@?*#Pu%@&bRztpSoIiR$@y$Ss9 zi>`q{=N-Y|#ZL}ssdps^`?j|p6_@uI9V+jg>DW{HQo4k|FAczl@UcS+0GNK({sz<< zefwcaw5_dwSC_u0_5otISEt99FLuxgoGy;v>p}0~2{QEoeljcp08MR=y!7PEEx?jw zC$`^ZU|n~}l^>495wXD$G_z8JBTMtA7wb2fD!^*Sy81Fe5}sDoZ;Kkp)0DgfQ23!v ztCShLF>qu=3Qz^+b3O56irC2HO#5m!roO}lGBPtWqGKlFqF;sS}r^M#@O`~42-0E{{GO=t^L`09s5 zf#R>Qk6`$nHpCYO{_pn_WIYIGF@TU2sBn_tu}|a~;eD6*1=7bp9uUOa_WM(SKpPbh z+4l4JB|xyI@|_oZS>ZP;=Gx46O49jG@E9-mfbc$=_oX-Z6)$jt@LtFK9mJcK{_|Zn zy#p(2Gq7(L-EocIVHF@5U?uQf`6_Pwt~dCNG`ZOKY{dFa@@6HBIrR<9hYSQ*^=pEA z<-245p66=!xm+Shjg3hIIK1f_+8%w!V)~WiZDs-XZVe3Y5MJk4CIEshu{9c=9GW12 zu{$BtCxq9&@pppTLOoW1KLN{k;+7cb<@di>uc$jY<7Wi5kJ#qd(C0QzAolYkgr{YUyipNQ&7gX*;4z)6*M$watAGi z`@)+nyGs*+iH};=xvKfqLgkEv7mBmHScBt9<4vSN!T6;v#pXEN@~rb+xcvbk5jAjk z#%#|`Wn!&p+%I=7^H?~KfJ7XOgn5id$XH;Bnc=>10u%!&ukjBT+=g4aWT(gaa|TZV z6WGHL^7cq}Qu&(4V0vcr)SOY+R<{T9w}qQrV`PiHPgx@kDR1W%^?iJdZnlagb!|_F zF?$z#s6M+na#KogVfY2(x>TQWDI?am)Q7Y(EPhrB2)?(N7sTAV({YJH1Ew|3T1P3_ zxHlJ8MhFWZG5@JGB^Jjb3wv$>&Eb5Om)p3w&w^D|PW?JQWOy%vJ!vcQ8+?T7-J{0d zZWxD3A4e)L$7TBJ3!W0I9#GiUp!V%Q4Mfk_*N34*2qL#$xs@xetDK#Imz6Va7iUT% z9y302OV{~-?wr_2*-!TurHxS^_p8ul@8s&Uo$qDN`eHJ?k+pLh!`7pC; zo_AKKVJMs#+l+I&dAOl6x~-K;q>9&MW;OXVGRbq!^i_k1Oho6%oQ^T*qE*Lzk30y` z65b3{shBq?9bh;q34HB$%+xhrt^Z0|3T)gu_wRWAwnql9&r8Iy#hqQwsF6S{wvR+2 z8>*RVYndorpjY-**T&>cgNq2EODx`h9>az}T9;Cu3_ zem$vw#)Qs%pU#TcnCD1cOhfqB;UG;4G2O)ZBamzgwC25zMP3qag3eGSzem4siJLv& zXN_-{tQibnr(z4%#-%IPalX zCpen>Fp2g0atKu&K`-KeY5nPo?&<>QxS&vIa)8f0B)CKduOmtp}8K29lbH^ zL)7}^^3_ga0B_@>iZHh+y$647F>{nPK|uVmbUqjME9>%`)ptjbn__ABor>-LQ;ZDaN2_n*6rQ3y3ssOB)iULkYK>=hmEkgzKSM_=y~+L=>a z#ixVkS~tE3A>CGKC7!wibPbDJ{9qc4dX~2Rd1^Ms=#bYF0uEk@mc(xMwaQR-hDr!dx@Grk;QU{ z`Ph!cGjs!p&wc6VI;Htg@F%P9l&J|dVMw5gKC==Tk>8ECvo%M8o*$-p**9{EmF$EU zMraE(mdCs|#)^`%O|d?O;~23Ts3F1SE4jl_;MLdf_8nIz>ffuVWLJuoh(Z|DvA=SY z{uVylrWG6(IUze(AErJQN^0OKqtc|@rvncMc@r6wtVF=2cTSp6D-26r#L~73gg_1v zp|i;aFF&9_37D!9C&_lZ>Ri>{da5wG5I~(ZFd_nJqDrlqr-ZW0d?JLGr9_t9nMb4) z$Vbf)-%?Vbn~iBe^iWKls9;?T?A5~ROeG{Dk|r40OWcpD&r#o%O_@g4GB8$bX0 z**4g?vfN{0RiRehak9*)rsnrfmOS@Ys9%N{G8S_t9>hE82oqf{13_bIb15J-V!hxd z!J|ByPQ>~FRzrmzoykV;hs6~T&@q&I{YG1s22lM7YHIP)RrXSmK-*s}Ur@Uzldj|L zzZV#xZQL#G24w`^EpGrQ%ZVH#Hj$|KA*!^Q+xPFPA`8@eW~<8?PZgga)!@jDC{77{ zLa1Ivule%L7C??k*at&_7Dk#|B>kLRbO%k;Ze_fJK0sHp5&*J%L!Hf|ci~-u= z%%5hUI}L5S;~Vl=4-mugVZ0fR`Mkl;0Xa|>@Ft=7l^}NR1}R_KAJp0&0wDYA4MO)Zr5#ps5*Lr3oyZ5|`g1h-jF=3!KgaJH7_i2^@qd zU=FLp4zdn?8j0WHL>>s_R&;IAW%Z4{WOrr)ziD?IT6ue3;ey^w)yyDp5|bP3?uzqS zKQn5;NFFisNWu4A4ndTZdG}^)%{i2!{H8+|61fVJxgtMR%oSU_6&F9GgEA2j2U-ln z$GPcKC+GMR_4~aBH90!k_My$#I_u|<(@Zso;uleSKQ@6@op^^m!cW&{@ z{G|oS+HJQ)HtscnEh7h9r*D&t!NuGDM@XJKY4NI|zB%UHpO&iyd$q0@+(tw^%_U95 zUl=?zd7ncw9q4*tu}ehcY;0tkeW1C`VJs|O=s<0ce5)wB@B`;?kmN^kCcn2pSAkHrf?1WF3@h{v4`$gDziv*H}lW$WU;D zqUC;HLuTVdjrNj6rkd@4+uTGf4?^tkjUuV>9@{~3Q0zBM@vS!1c_Z)^Dc=7q)T$FG z{AuIcX9+vQt~xxnMF z0T2!dgeyTyYA%WiOhyr76!Xt_Y01Rc9ZV6;m#!$S@_d8Q;95+e-rdZbWE^Cet$xoz zntYqg)_YbvoE!(QWZ&4n0zvDW8UY6ta(i^{Q-x}7%7+f^JR8^iSAK-e;!We_RJ*EU zp~u@Hg#c$iv<+p-60uq5`AKUE3ZsCTSdeE6 za~riiZ4U*@m6YiF7M37+`|N$HMM#ut4^Y=TD<3!s66yyS+q9%ke-b-I0Jo-p3WW(7 zI8_YcaKH6-D^3tH`3xI92y5lpWID8Af6eXe0M0TGWE9qUPb#WD{DTUb{)~ilt(uMJWwy12NuE@) z84Lpz4_x2QMO6*~L(B|VI(f09Q%~h@0jz*(0fQrNPr5Z9gQQ7Qedp{Q4u{&-u;%vL z!jYfVu2RWr>!PpI%Yalx-WjKzAbqY!G7PV_R*?t?IcLN`AAa-RmTEFefW*U~AICs#9Lt z?Td(i3FYk9TXeP$4pWf%)O`FFJ$;?|S|CwlQ{4dH2zmWY(YhzS8?SbAZJ)LYS`&!3 zIO9?wzo?NOO+RPAH-{&=8t^QOad2 z`1y7nbLg1ydZ#0L!bXE&!)@Q>darlz z{qzb_-xr+`3QN~63d7GA)9)DHv~$Z1o8ox(Q#`^IXHYX~)E#WR24J(sYhn z0M&%grgB6QPl#3AFw=Z|xs8N`Sm6*RlOCtpN6~}X?yIRo^%!zIBP9nrDzqOy#c8Ja zy=Z?d#7Q$c%sBBHw{E=#JCDZ&n;hDmh=xR-Zvu)a!|P~y$C_I~S`RW~h&|SFaRZrN zFFES*mmHDF0%jjworR)3B^T!C%SdHSEipEp_(B*ZFX3A#GZr9xH!No?fD-q{SZ4@e zdq7Y=Uwy~Whb#W8$ z)WU7OwZ23dWG4up?P%{!D|cAa}4F6DhyIbI6rM^Xj$Fh$H54?Z}a!U85b%_6Q7`! zY^?b1HPt}(l8X}%w@!>AT&ENxl9YzBY$xLH)O=|4nAG4WiO5Gp*7gb%3J@9uA(>Lr z9dX~!-sCQuQnZ@BBCh>>6iYEyfZ7u<4nlM8Vp~pL6vBNp`&OCWmvZ1<$BxkmcHEJ} z4#XS~GgqN)HRV^b0(*C<`k|G`MfjGrFk@#I9hmilSG=Z9?sz~yN6NQGHMzh3Yj`Vw z^me2Nx~J^&VVtn3Z114Hw{r-&()Ix9wgLY!a~CjjUw$2;%7KLS7`1;1EI#k+A!Y>) zgb~qJvp~s!fLeq4>W8IPsAilo6%ibfUo{P8j+wn+kzd-m@OG(HYDnvv!d%EgExd%} zvswOdv1|HyxxOH=s@z+NMtQsD&<HD42xdH7)@{yb;{94BOt%dI=Rh5OLLH|Hg zqko;J(h-zFpzO}i1zhaDE$t`mP_gl3l83ewG7LfUR!*YywX97))b=E;@m~&y5eKX< zIg~rJYN0@1&RhR{&j)UaZ%Io~W66M23^%xmi;NVjT^LIcIBo@3R9wQOQ10MPH!IV9 zm&so;fgW(CI=(G^7?5P5Bf7IhR#D5q%g^w0B=;cC4O`!ac=1?$g%iCcwzb*rG@(~i z38cm{WVXxlj;Q_LG01buOmurt6$QUv4f0~x zJ7Rh6<-|1+_6rTl&%`T{(^^pEICy46p#(GH`82(7)eY9v)09|F)B%cl#bpsA4N7(^ zNtgOQA#dd6CwW|&gFPllZJM+W`ST_%>z#937M_?(WUM>R7Ic(h9RbYYmS`HQdC@Jx z9Zt42L{)H-Nr$hJu zn7)*mte#yi<)=IAo|A69J`BJw}>H{ZFFE=qR~+xAc|Obk;Kbn9 zG#j2;hY{2ky```h*OgN$aCsohN039)iu1U~z(tLbgn+lrS6);EY$qF+dSdZTYa_%N zHQFKEf1Mfv#$I1sRFIgsY*{%8&<)_}*pCr@FVAM(?~eh_Oi-14wHR7)crL~40`QZa zsyw#7=QqEtS3g14nK2H=#i{m9qQo!Fvf_+l7pa$HX4dRLXee9X|| zH@Y-D-)B1eQs?ulijObb{q%mlZ4+z4d+B#L-xK^K$W_|NOwk4i_k=UlPn_l;k{pv@ z*Ott&3^K2ynaZU?jZ=WWW*Sca(%gbT(Z((lcpmC)z$c|*k)&2l8bTe>(V^@p#k^zH zpg`CYrpBYdMdNtvj^L@K-VUfe)sV03Q>pj#ew>lPFbhLitMq-@G}vv@qP6ip%p>h# z!ciHUI)jbBplflR6%(l>Vc_xXGtfA8KVfvmf8n;;W#2SG6?;{z+=^@vThzPnz zht^E7riKV@R>p50#jNI*fi7$yZ>8}=Dxwxvr_H`qM%YyguYxk9Pev#p6j z8Vx5a^Zlea-in_Jc|5(~(3>Y%*AI|IcKjr;1Tm}MRCpk5>t5@n^n3NiEM{Jp2t3#o zwZnVX;}`F&C5UMWcUs+%7J@3*DVk4iBGO{6cC`$f4W>)`B_)|NZMJLHYxq7VbqMvQ z9YwU9=7jPB;;tNLGIdR(#a&=)P}uTK;$&hA2}4A0*Sk3&0!2Lgm1YMHxgJ}7>@Jvx zlc4U_8qY2}1011}xS6sPq6dSu-4kN~pHJ5raQ>?b;ykhd_ryM7!ywb8W0WV~AYI<) zJGXf9U@OKf0oVlB?1sp$E8m(X=}Due%MV!AB)@)?pnZS+X$9feSx@3pgfsJ$OY*n5 z%z@#DdXN590>r@6h?DQ*jdUwL%1gU3O`6}UqbortI!mg)vNrALv@$i#TM|V8aol=i|EA z-LMs*y%0eTm2 zP|<&*kW1zJDi0|8OLCSKjQmteyPO`;_iqc2A(9s*%}ZUAzp#_AK)6sSuQkxqjhaw8 zDR-v3)_xiM`bCQR1hT)X?kUaU>2w@;Nsb+%Un6+@V-Jx|)VaD^(QJ*gt~$f2GVb@Q zs*6Kl%KV(k#uSOn+V7|ayI3gle9QK5U%KclHoVW}8KR%fAqWS04`=~~acnR?O?J1$ zfsG8nt~D^%ea5r6&AHSV3ZfQfm<8l%CprX#u5pD(X__^scB~ldieKb%&T@A~l#p#~ zNA=u!Ev5D%f*|Ad_rd}lx>1o>r?>&X`llgT0)ruTMq~1g!o#aP$@o+jwitrRl79DE znmP!pqr9P~Oq!z?IXsEz2CjFL1*mAus=m(IetuCh{xRKTRi<}6i5#0P7*{|iWQp@j zb6xH}aVKs%{uMPz8W{6}{UbCs zsaEoA!{B7^e3T6c|%&3Y6NN>s9};z@zGfD*yoDl+V2QGiyO|xH$?;xqFa+tvr1b8g{|dVG2ec6wEqny zcV193Ws%6VH!Ag1KQcQ+oB1xra4(+Qhhgrd?ozCCJu4hAbYxR-4lsLE!OKG92Dv(( z2GQ7O@9y?b`>F85lW2qi5UkRi%-82P?ZbXaPawi?#K8EnsRyXY51l4bcq?cV+s-d| z#xBln=h0w>ngLhKKZU1(%uAE?D8F^j+;iEnk)E5^Q0MD+ih-1T&Bi^L%u$|#Cmqmt zL=Pc%uItF!be!9NapqU(U20e^-BcNyCKM)PSqyuh<^DPI`Vq!EmVFB z)1F4mSOj!cX8s>-i#IqX)DGCIC&XN_UG0}f?N$q-Q5ou}?Pv!tWf$tfOdHY)rEtj} zRSsO3O1np~>IoaE`{##{Wb{41yP_=&zGHnc_02R*%iTz6isO82u)M{tJgPLn-)qYX zPX&GGVnT!Dd9;yk)FY=bHGbLhjvGd)uc@ooKio6Bl!Nu`{@rIuk7S+#(qo4>L$OWF1eH&8QMYrIjBb zX0-S7;*Pg$bPPL29nO@Cg#%y9USXRvw2k~-BRss$=0Zbpsv`{+l5D{gsAqz#$>xrk2m2Mn z1qeJ&lP$c#i&oAe<*Ey3G7c?nPEo>EZ7Xzm2=nSQ{V_8XMHaZ3rg*(N8@Q03)3}pWs>KYIz?{!5;se0Og)uttJLGf;hYc-2Rbf=9{KA2S5Dn z=8ETgwY%&3;|)aJ09d0HXWJX-Pp%o<_J;u2@v(3qdCAW7B zN>B3&+R8Sz2l+3(r=en~4LXK19bRm(OW0J_ZRvTglh|8n2$l;FRfsIy`>|DTs#LD> zp4Ns)lMG7vEDraQ%PiAN#F2*v0(Bh($NROJFt*Cu@LbAS-Ia#CYlqe4#yjutw?*R2 zU#g=b%KIfC`oKRE$Zc<>v1g|6yVC=z24XA_zuVN#kCGU2zS!X)ETo%`es%z-T%)U^ zGe~7z+pS8jKP;v0W@kkG@XhjfwkF}?6s#d zGq_x?5`2~YR4gWq>3DKgr>MGP*Rr|QhW$Ht!uLSEeM2Fy)5~(7QY8uWstk#WU>bga zYubnLvF6JnUdF01TKl-IxL+uQs+_4FdJ?AC=S>wnJO-R9d~3SAIBdw|jTptTa*Ae1 zDF~GQf&_d1nZsB+boOA}JHvg7HU_fS z)%BhP?R--N^0&%YU8^TLOJp-^>qKirw~hJyO?t+MML5_b;%0}0&`i_9bR~$bBF07%VU8Ne zH^f{vlVVuD)_OG>6-a!~gYm0_1hi>a)2o)XuaWpTf_0D4JvxYlt!3_S)1C1zVZT5q zR8sg`DJ+|}qGoE0A&H0&hsv+d?Fme$ZBz4@8;}~HQQxB{TZcn z+Czg>cAwCy=FpqGC(8Qq;uX*jEhu`Z@Ku<8ZMu!atb@=X}G<${khHOc*vxowv% zOsg;jiLfOCKizi}nLN3z%$}r6vyNutP+#uiXKc<#$+a5yWrdiHP_jemit>JF=5^{c%@ZJ zzE*1W6l3t1lnf8RjJdwnh>Q9rCV^@{#YRwRi2kz01`a&CPbqQ9wZqu%z1__3u0=Hz zT33tHkkNrL#ah17F8&;!y1otm$Ibv|W#nd1#~SYo&=m4P5BfKbK1Zgy-<&NvP;N^L5LN{Z>o_ z8unRHx^F&<#%6+93Q9vZrR(y@%E+Q^mRz|-**)Hr;+M`82Sm#u;Pk*mqaofrXE!4D zGF>kdLE`~kVz6WBm@!mcZLa zEyukwyS(ay!pk$byAvUIAR%Ai?R`O9Gi&an|1FH633~A@70KyFmwXOHJPx$VT_i4< zLg|tJz`stDUb`s$9sTJQw6MS2ErQ{za}?8nyMXA~dJ0sWke0$3jmHYNa~`;)jNjV& znmY5Tl#F1JlhT-cmyOQbE>4N#09V$c+74{M^1-*_xDrfwI{6w_XeJpa%5kmhgfHS3 zJDv6idEU@6iDUOutn^{>mkb8?diWJMb=AY-Ve=b@!>y-t_a>>u$RPI|Xo}>^xhmIP z(fmZ_m1uEt%(N%sF=_SVSf@7qknVe7pl$pV%3e1(Jv;(1EZb|dhUxTFyin+0IQJcx zg&x`b*64=iF%+Hsg>Q4|tkYnam83v4Fj|l#3qea0pCIDeG0Xx;B$37&m@y!^8Ugz_fWm$i=iw6jD2T(*XUx zRq>_G=AB@9AlQ7R%(4SQF17e(T5Bz{-j8E0p#6(;_bp8?iny_~?oj0cS2_c0#Y4b7f&zh9L(sM0>1Wj!S&*sKT9jUuMSHKM$cMquHiCZ;7N~&b<@}`AApnfPf$q}D!}#i zeOJbwQ)|iWo`1974MRjztMnA5k{yIbgm`MH$0vq!=V(m>uwwb}r}LJ9_gC>v`&2u! zFb%J#(s;{^XNbrQqI0_5V>9sJ)HtOZuL-2iOJq|FkX6!^+l;hFs4_oZhw5Dj3@VKU ze;J3au4%pps6!6NU+0Dk(A&a7GLB>BS5{z2^z`rjK59O=5rg|FLx;>OtsE#uWW)g4 z?9|DS3nMclPzo44|EU4$a=&bJqoE@QV&zhd$Kx~Thm-VK$_#5rhSY}`y*Y^1OR<*{ zN2)tyNsezvLy(6hl1TMSoYlb-<5eHCP`kw#HuZDLES9Isz}n|rx(t(C`pEF9N;?Q5 zXcp|Cm+-7u0+LYF6_CwJY+Kp;W9J@={_-_67 zvGmiZMBejkLj^gRg3h0AKlZ{REBBM0LM|m`^}w4>i=raLO)8^CNqX(S3RuPqqVErt zj!4$5q*Y-r25s%j!$^z)$9#GF;uRZVBY416A)GTUEN{r)lFC++Zoi0|p3(ehKs-_$ z!ZdmO`FyGyAm@MAGHKX?C#|$5lNLeCLT(x20BHgKHB1YRcmRHq#P^OXS7>q|^8_oS?xw zNTp3cga_86xT$;K2BZI!LRfc|KiHu+G!fa>YzqtoHT!(%< zL9H)3RNWO;*zM$W@2Uzetcr>@MakSoR#3AeHhG!IeFpT-U`KA|M}xO_taG4g6n#4t zqUFg;1k29Sr`@S^MLemK$u=ty;Z*y^0SI#6dK8DaS@n2HDC({0;7JgF^tuQpIL4Qz zdXZa^EGQfMwdjU?5vg2^-#C1gqJ4;wGmeWTL9^FxyF=g(W{22q*P))9Mk6;=CMC|$ z?HxmlHQnX=Tm0 z(xihg_V}evL$QSR#}qTIF$sKWy&X2EB<$GvJ5;&`o8^gOoM9Swnf=d6lJ)2ykUHOV zNcAfT9;B03I$i@OET*Rg#3nh6rNqsc4E&v-jLPIWq07HY*j@p2Fu;Stbj$$X1T^}D@ZjO|`tWYSeHa6d zjm=}k?4ND%_3*8bp#J$shUG00NXwb1N|{oU{9kO(@-k?`;Y`f1p1l2Kd}1sQnTNk9 z7eLR;yf*plHadp(g!P7qk)@F;29vb~5>!BR>Ni0qaXWB6+Mn;Q)CZ0gId2HG+0(P8 z*p*;Y2T22B;Y;95w$%i8iX)}Tmv_c{9wKVuG;`eqf)6pW?CWD zWEd{h)~i&I5Z9KK6oL(-@$bY{B7%A(LoW=3yXozHX|M8&LvD7uH0diGl26PYRC!_$ z0^Lk=0+wt@R6+_dnl{Ig422>(ca)&I!YpT#@9qf`ZTHUCCQu~=!IDAMCG`hX8kCdY zWER-vhB-D4ZtuDbu@x!^%5ziLqQdSi%zQLE={Iw0BU6|{DRu%Njvko)G0i8+-}c?a zcX_|jO6s>1umXNJ6{6dVR{IcXqLla5B#6coAXODMW7QEibb7bGrhq~hz$orvEVklA zC_SIobUvSBdc^S4`Q08cqFzHTjBDGgJTi%GfRq;d|F)=s@(H839w@pVb*OK{k`$p0q(BOT$EcuQ&u zCI^+Cy*C&iU)TB91UchSZQ3mzs1K-IePf_lxH*~@G)X!Iibu?fWH4Uvyzf`*w?NAq z&hX+hTQL4cp@U=RiXx{OT+QE0Cf`B5ut=-EjOE9$ycinnpcoAed5b=Bzz9XSRG+j^nmx zsu17dJT4;i``6HFKeM6RNf%j>yt>Oxs|=!)q@UJJomHmsmJo;9VUJBP7JQ?v^a&Vh zSvC*Q&=mH_4@YZ;F~1q53FdD`hp78MCk;%r^B+3AC)zbA@dt&P4}o-1em5*3X#w_v;3mq~f}3 zHaTG3deXP@{M54GVz&t&5sm+@37x-|+skY_Shb`xc`l9eINaW}^bUgHI#j6NC(gu% zN1)y>&{&b;s3vhc{wUbv<|1Rs`h7_XfS*d&Z-Zt3nSq|wy3=9`$5I6IYBW;br*R^(~FNtzzkc~5R&CvFLs}{h75mMUP2{$^UVas8Oh3&9NDlQ zqnX)X@}U-4r7+{7aZ0MAVo)Dn%)4p1)I4ZyWqf5MjG&=gnO4QQTz>KafWJkc0@S?p zyQq}04!we$i&qSVmFttdeR@cbEF~l(bq{GzPMaSeC#O} ztXOQA{%j04LW|hx<`>BKD;<9>0h>-!mRbxLI9%RWeqRXRJj@sY6RR50BX=+NpvYeR zeo&r8jZLDk^dTvA1a^|3_}Y1gE8E^J_$7I%l!Vk62r_r_^bQfCq(eO5fL;b7Kpz(Q z5VhPNWP;;R!e%iZF#f2xu-{t6 zd5;##-5wG6OdKK>S*``%s)D~SW(=WOkMW^mqPZry&(X-wM&(@KqB^#j&T=ioZs^){ z%YF6#Rh_fW=!op|_NB0ar8K70KaL;>$}9FXZ`#I)_jo8$d&O0CaB>crLMl0fbn0s$ z`MbCpLE3MIYTxqBKrl3`o=ws8rjwXOr|STTp5QKjK?9?%`O)kVF{BMcwco4}zNh!= zn#>hfu8xm=!=zu}cF{HTZVTFG!(9@ITlC;ys{@2vbG&!^uzCmh5{6N}wU>CzE!2re zI6fpsLbeU#_pO4CLV~#!?C4OIWb@{D7B8SF{~*|o3k62uw-(=zx2;h3nKCO5QGMc` z=Q7L&ECtn%A!kh0l6njBbUB1b=CuwKHy&AtY7~Agbcgu@@)=rE{JY=pUgoA~@O20^ z({|U_7(?znyI<~1&FcfPU2;PfU7U-0ugUdhob9eX#LP6TTs&`f6o_q_gO*0QS+nNm zg#C?KVqo;naB+~0xNpZ0;bc;uqzkpf#QX{+7WS1k92tKRy$O*(o^~+?*w^F3ZJWag zlM{~af%wzT4p!*m)Ga8L9jzRHCm~{_#Oy%4_*F388iN)|n)6x{9I21irJsFjWziAIveDHTsuTxZkdr-t9#%mf~}y+C)iD7xBOZ0dN_54D1X%Xrh3& zYN}Qay&hu7<2oZbgu8yrbWO-t*=OmJh|la_&>)~uaO4CgK;F>D*Wjz! zlpE!n9wVMFT5{nJGb-&Yrm?v_ocRR_ToXX9HXiUW*e`^!*gB<|XoV4@hnY_73=xN; zt=2cBsiUMJFfX3Kha7iAFY8Yh;fd^W6N?EKj?DAhcOuizia?iDh}#f{Ko@mRqbE@-kuaUF;27qD#pKwmVzDuJ!C>MS zNJlN^Fg+vJ!jRI6e)XK3SMFK<*;oPaIO#=56J-)AFTx4m=irq?_1_#$C2Dn~SzhhQP5&c70aBOb9U&(@q z*vxJtF9X+Qt|p=hc%X_2WMw0ti!UoEcw1~F7Ovap6uTGmt;>|Qpet^5z>!-N0(w2 z=#107<%$?V5(DU#<(gYJm7*)6G+=A1=fr}HhPn2Nc$-( z*qw)nU25&~1U|!&K3tO7pVuo~FctS3Us<6jT#yjb9hB-MIJU={^}ddLQ;Jq_LFPHZ zb8G@p)bmTUWhntl)C};&^64?q zOXBhfMs(dA-JCWaerXwK*9X3C6jKK+10{I_*00d`)*}Z2t|-^a=4|{#LB_RN-Ug4Y zT!ZgFdpChCwpTBJk< zj-f-9GqiTrM%7-Q=a9_7=Br~WrkrZH?;pYe?A5>2clNSyaent6d~;ZeL&@Blti1wn zWI&e@?flt1+PEZ#{x-Uqnd7xp**${bV?PG|nT@HVkAlA8;FHmGCc+%n z=dW&C3Na^^Pvk9l%|~);zN--r4!XMGOKH8b_@Wh1VL&8HKbX?+A~+*f%2DU$1htaY z2FJkq%_H?Vf};^vThUd%>0aU=s)F&Dr>mjD3{7lIW>*8jL-9T5%xbDLmtY7XN!FsA z8;puNRx!CY8Yh^b9tz8O;`UAjFj(bv{l5Pp|+&Vqsq3QA+ZL7P>l$>&?%465=G@Kk? zQ0#`>qMG>~`f}SOP-EaR$t27yx_Oe@v!KFntZxCd))Y*l!B|{l(MmQ;Q@R4P!+52I zF@eTtx*9Zmt$16*vH4F+w$<^kj$B6`J^i%&JkYfJDwnHms>nv)dKvJ}FvPLckTzB- zKuO@zRiB3nq;YO~4E(3-=Ggc}zRt7iwCRsUGB}(#ca4I_&0;kKhd~XhK8EjpHCel| zGVc>N6Q-|EbDjQ{7X(_6+3aIW2#=9J&? zzSoZfE1#?8`v!WahYt+_5thYai? znPk|+t$ZoYlqnMbhAtnMlk6@P`I|~Y^I1^rEE}nV#F7#zemXS6OwOh(p$N)TxARaV zW?UN$6_HVeL6~Z@e?Y20n~nuk5N~{i3yH@eF33;+%Ypg4@1V=EcYSPBBe!1e62-I# zg4sgoi%jvkV{!?r@1*cyNe>U{Afp`<50wFh+gQNhXDO6^*m}P~!7*PjNwI zP`JXcA~izFlbf)_NxSn{NLjOqlVaDA|4#rB2k!XUH#I-&xvTAEhBL+-|!EYh-!07c7EZKPCx*>F*^;X}&c9n!VaEic~uBv;bYzgv0OJcw?wi47!YkyL2 z*)m=)1`+1Kvq?p3Lqq>q6X=c|m_}fz5xpn&04GJ4y?nxUu?L-sQ&2t)Ny)ni_phcBSEYYUo9!f98#nK$LR&H_! zY&buVTLLbNE{6_~u>oVKqdbMDxW68g7pjSEh#a@fnLz3RqwZAj3ZbVd`P8QPeGmFW zP6GH?afjhFr9VwiX3P6V>4JvnWa_Z({?bLlA;C>P`)X0Ksvsc6jZ1@si7##--VJbZ z>mTEaywNDWF&rZk)9xJ6xT{EQ)(s4Q0;O9)zz`+6;Xx&B!To^>ncfD?f|X>t=KRn~ z@5nnYcmB|PxMzl@)p+UOn{0>%+$1WuT;L=hDm4Uy{>+M&Vi!G;79~kb1BPDepH7%D z68lQ3z}j?!55eOA6j?xSUOOm6#(O*!wV~%W;tgr890~(aD-@rfTq~O7soNGsA6Z{R zhmG}zzc!I9tGTEAP#JAAG@Q??VYy$#oC&-~A*k}-ZHdVO>MkofJ2hrIP({~21j;AY zFogfuW|mQ0qgQ25bgv>|P?&|Gom==snMMvtAZK$+D0lW^<@XtF&P;9f zDEy!bOyy&xL1#xs-T(d2VcX}4m`wx9lUz>zp3k!|)HCN*VnZn@Y=6+Wv{m>v1yi^h zH7qmtTzBr&K9O#Zdf_yCFmO7L@;xt!7RL|yrJWE{>Ck4}2FU6{#TU&-2FWTT8* zM?Ga43!Cu9F`L|QSk1~D>;S(^O}7mtJt+-xv!Y2MQg~S7uUw^T(C0y)&@Lok6*y|h ziSfA^ewLMo(9xeE^fIWn01sdF3%^fd5mT);%lOk&pj&V6QA2%4>_zOTjyd|GmBdb| z%|Ws*>6rl9t7wo{!8{BFTf=8Q2`ocMlFwKOe3fn1ubtrW7M@W&!c1_P(W5{!P7dIM zh(D|`a0ImUBUaWph5`_5l)N_qo+2Qp(FrUR-t8Z81hR>;LboQFJFBG%aQ<3$qgA;% z2?=#?3D#HXC;KUy4Ndz|Auq|hjc0ZIkqeX9MZzs&PR6_-f!lNW4cWh#Rwz#}L^hE0R%dQq>O4D9TVbI=9q&P?~l(6Q9^)Co&@7 z^gQ>bQP9t)vPm8Vq>0)!%I^ob*5Ci>(0+L~eHa3~%vtu8Dher({YvQ44$>6(wvQaE z=R-}tH?_9OZQwutRhv)ir~5^KSctvOL))I)z`9blLfEioR*Q%4sS~ns03&${6jF{G zn2Tadpa5(5PBSLN9Eo`g9;z*-W1?S_%zJkr?69iM=s*_ra8H;fo&~+@>`6Rm|3!je zfbDs^7yf3+SrcHeD;X8fNX_L<|1dA8jod~LU=zl-^r?+Al4e3X$2NVf|8z4-@hJ3Y zre-0wavGGT)1Ex*+Q2Q!0&0*_NOAx-!TVDL_RbJ5U*o}!2!|gnjw&^PYzR2dl+wq@ zHyCvF@;l?1hrK$es|z?l`_ZHCl>xQ~ZCALmVN~{En3#7d=1JLWUFovcoYPDZ@u=Dh z4_;%mLHSFr!!7CpencO5#a&<%e`(IRjGaSxXwkN2W81cq6Wg|J+qP}nwr$(ViEZ0X zooc+Q+qjL_-2J`R{=YTH{D*SiE1vGiUOx>lAx963y(`4k`z8qACRacCm;28;jtuwIv!)Yk!4X1E@pkDOiLAn2K zCA!RA_#x3P`_!WB+@6(V{DgrG2g)QbC-ky*z{NUzw{;W~zL5xl(Is~n;P@81J) zD4{P*5S0}-D%U`A-}p@>f#3hqn#9KNUs{tGm>B8*M=Hih!0;c!vHw(zF|sgl{I3;b zO3>`e9@uoPYXU8a!fAd)X(qLy(FQtV!6{nej?>xu^h{>cph*x5ro&V=B9@=lY9xh3 zBI}8U$15VF6Qsp;!bpF-z?NHgU%7W*rysN5`))tIZu`{STDr;_V4-0{F)8GXr3aBM z`j`K%qzHou6M@Q+Bsz3<>V}5{`z;ywdB!s&Y&VZmv^hOoT!=pmFw*V1TRz|@)fVwXy_*d=(Axu~( zzXu3yAV4w=)R-E8Jse`DHFW44phiKI&EQ^Wt$;$}4_LZKAf5gXIvnOkqXAHN-8(-5 z@;w^r#;l)$>Hjwz2amrip4&I=F$qA}X=WNWF4X27P9o?==oe+De@oa8L>GyQ1{nUg zNQ593Zulcl5^SHZ4@0lR34+0j4H)dgzL^(K$^S+~s2gr?%!6cXP|v`1r|wFT2K^{3 zm|e~5B@DpS&>;oUGzI(b^zTlWL&Dx~SZiceH{>123KI@DApg{WDIN4#2EmlNfH5lQfir>r_7n-(o7*~T z3%5Jh`n7Iu6(t&kVMK+BkrmI7t0+y;kK;A$i#vuZXnOgURfilG1Jsn^*uddK#o?F= z{Lut%2+$jQ9BMcn67Yjw2#!!8O!h+fz3ZIk`fm46Kl+|0{A(rx!w|+~vziC^6^462 zgfjs%C@>uW`U_$mXa=`}YD#E$!&f6q1knYEtqXDb_=Z3T91*H<6CRGqDU@Wv6W#D@ zr3a3OY%(z$EX@KM&krDBFB}bRY;C|ma+RxY|HKRn2skGsk`BEWCDPy@17+WslAZ}1 z7$nW|$Do?jU0O zgyf9YdH6x8ZJ0>{9V^+!0w0W$uau9uQ%wuo^AOW=+RQ3!4(P zlZK$K=vKB$&DcJa&hUvI?8?foAPR2P@Q+KzxQ%keOSGU8QA8o0SH}p zO}?80LLJR&d}?KWgDtLz2JLyJ%ii8@8w;ST)?UN|vQ9geAzI&h2G5EM&}&2x7HFq^F>e=iJoT-&l%@i_abz zZ@X?%!b0ly>$hUjg9ta@St_$_)lQ8{Ed?UY!DneaD(;tU#MF$}e2tpkX2O2q_i5y@ zeBcE5MK_vOp`^Qg_$%?Wz$Q3!95|kywqOR9zHRe^lh;U%H|5GgFNRzJxAN6u_O=iS zE^NEF2DPi-k*^tDQN2%O!Y(650i_+3_139lmgoEPnwW?7i@Rr=`;x@ui~TAyPP$#o zE(b0rlLow^-W&JCaeckpxPSTACE6A$5xrolHU>1CchX`zP!-&Zygf56o8AUvI;Na- zG(%9S`XWR}yAo4YN)e>*2lU+E6;*3tI+duA6@7Y#uuIsw2`(|xqwHe>9DRIMP zf;E(l9#3RQ?oAWt;m%6FlNWKid$HOH6uEivlDCb{M>e>enN5WVkylSx$k>CRI zQdI#sSzB`+pQk{!IX|ZMUM{g6gYHeQ_~yCsNKAb`7KeqBSG?qv7QB$?q-dE8wn+12E24we$Acid%ERnqNzR+65IE9!eWw?q;-P8z3WaZeH73$}Xs;H3KR zl>PqW&T$$w4}iv4mHe$43lp?=srRB(oEG^fCv>}T$Jgu!#YE3(Oo-&_ig8(W9@mn! zh--S;_l{A+;@_>wg5!3rtFGNnvkxXW6LUsbDb-?a%*afu3$^y;ZT6di7d0f}&CBck zjBS&wV{TcR9Xq5S`e5<8@6z8&nLyzN6`~$}q^Vm4h=4k5*9JAPw?ACTa_ffM>T`dj zu&-L#>7pYpWwvxwSeIYOycm29>s()C>OSlRt$mxm-A|EDC*of5Jyzq{jyV)(&9rIc zH}}39uW*~Y)+ME@YuCJG8%ee;XFNnQz zJ${eQ2fFnTcQJQ0@3gGE53^M)*MWZ{F{B&1;q$RMLyec@Nv${M7g%~W-qGS*Ft=)s zV`d`xBv4gWQOa%=xqH?}Q3d#(va7OiTu>;!&@zZ$P3=M(BaoKLTrQ8sT59ihHiEOi zt-6wa+;4jig%4RS)45e=Q;Cbn{gz)F7CYlv_cXRvkucrgzq)nJK9e!dFZRcWnV45T z-lwg967dF-?_>1Bs7|o!zT;DDZ+~atUP!Y%uAC+SrK)iJ*sWh3+BB|ZJ>IG_drf4e zJ1QsX<~A5{Z4<;kIzl|bS?)1;oC2v_(!;&kH#CP$aQb>6baj8WeM8!P`Of9cxUXO; zr#M0tr))f{myGVA$IyJbXX!5zIA?Swu`feuz(h*g-rO{z+#2B=52Jvh<~}~mxjy-j ztLMwsEi}=nR_3d@B+)d(dLz|*wN$eem|B13_aPMdDDKGUff z-dJ#Rd%0c^!zE3CeZqWGlwx&^&q|rUR>r+_!U}z8OnA3LOVM!J;%|@@JcWm9Md6-l zm;c=XBM8JU>9q(O%#8=`1Rz-&Tpj)lt@m4V|DNZ`y@t5tgg2=;N%pxGH!fDb8d_Ir z*#UlgSSXbgU!b}z)e**5C&iaBgu&gyOxW(cl`d?XKU-D|HXL_wqLP=~i`}9xNn6)Y zCs;*dn1IOYoEvWZ>-FjlP2)JG?#JsiFurG$5aLX0ZLZCH2H6F@?StCursuT;^zLJ0Lkz#K+?1S&l4j78x#Hi z^Vj}ooMdNUWdGmB$r@!7_2lc;R8cI8ih?d|;m$54eSI(tLom}&SqaK>wD`o-c(8L@ zKuAD=egMkzll#)Q1A?E%LBQHSi~z3m z6c7(xEFiZ$sW?CYAOu_euJNBn`gUCPo3{vT{je}@Ap{7ozW@+GdjQ~q39n52g8&HS zIZ@zeYyn<a9&CL2{4vMzyW|Z5AQ67;$KMtuYTE5 zJbs;se!)q8;vl~86JCGGZ+2Ne@YCLYz4CtHYOeMV3Spgl^!)qqF#5ltg8du33NsrT1CUmC z_5Si{biV%EcJbM|iTHNI*QB54i`m6^c%ZlQ$B*+*NAMR5*Sq>@yoUxP2_^;lk?G;% z2l{Pn@fT+w#@2V(W$x?GTlxL`OnbhvqnDKD!Z>@)#UKcfpZ~V}{(H}5eF_-1OZ{=$ zy4&^z|2dZ!G_a%3l|90do}-+uB7uGqhv&Q+i-|L+jP#R|&beOu@#!y>N=&f4vj>#`` z_~UxcvbHcQ>H*vDo3XUa?)d~O$+b`hBDTkG6mj}U13`My`$81KJWUr}Zber4cTYiP z|3z-)2;Z#C+Gi*T_&cYMzLTw@!|@QmQ5=vGNU04|F`k$8?$FJZO_$q_)G2Xj4D-q} zl-`4`GQ*)OeW7nsVQP`{hG!}sO*5v|>I;Rv>hAkKwQ~=|=9(!^IB~T8b!h8($RBn} zln&UVGBSc_ze-W7_XU9=w7Ll;!xKE;N|*<_1)@}PH>sWJog)74sRT3l?>syE>~=G~ zl&xgGQl5S(!rwS6ZLGO4IMGr&75j=>t#6vg*Et=#7Dsqt{WR44yEG}~KR zlub^*Rm3DFBcOhbRQmj1 zg;v+&0>ziBM|Zh6i_CL6$+|M!I}qXBry*AnIspv-+QmKSA&D59VmG*R`@aygXgx0= zRJJqIBqoF9bA^p!aV5Xl;FZJ5NH%RgU#ZD792jt&gLG7ip+W)z$|6>eMk=p89m;AF z=g(t<*yT-2k6vLS<%utd-k%D@u81XBz9Xvj<)lpAgoT@&d}5{M{=H*v$dF>=Nm?J~ zS)rC026v32S|uZ1YCB9axQfoD-5X_jgVK?g)+%B&QKqwhEhmc!OwQ2Qr)ZuR&EQ+@ zg&@}7zrkg1-y(InM7n;WZI-Lw2|ggFq)Q9E%2U*B5=3+5-W$Acg0273bA}K^4jJy4 zNDhjK&>`|9X^frs6KeETm=w=Ln68({G1Ci=49(og*8YA-4Gh^hC5qR{K~pM1NS@yC zH&aim-bq0dM#q5MCe2}DwZW6_&VT{ zwfCBrE?oY*hTm$gaZl*TO%B5sY*YMXBz9!JD>>2}Bj0bJd^f-6eMgCmc&You;+vCg zaT6mVR66?$#oZO%C=*y2rz4eYSXMywq=wO&{Gl5O5<~*BIwCToI7hE^oZ(NejeFyoID4Y1bz*}ragq^;Y zDK5lEVU?b!dZV!ov#fE>St!TY6npN;rv#Zyl;#%Vbl4PPPa#?|xI0%SQ?;VnqUjSMd>1s zn~c^5!u^!Ak8c$vo7Dxj18X-GVtfpu8<+e+-=4|MbGi2HU3)3m?o`cL7<6 zq?+JV_=$mGx4CT0e+_$~$xs3UYvz@zpdbf@-AhWhwDi6- zTu%y-;TYD%osSzX<)M>6> z$)Pnb`Y2}DY}I8Jj8T%x<1P*=e+lvp87DW~2U6CVS*SFiNYN-(kjvtYDOxjh9kxey z7mA%jSsPRG!6k)Jp;eW@fmVE3&P3gpQ`*`eVnPSHOL}q{^hWyLs-*pDT%3OgU7yvj z3-c-o%jFAfkC-OEe}TETqZ^H~SzRBisI%t)xr}(Z|%bzV$jbw55U2@~< z)u+bP1*-Hy{yW6ZZ7tm+cWx_E$J+v4L6;!e{`t&$m+Ow;1NtXryL;Du8?;PC`CM)-IJ0QL_iwtRT8gGrp?nUK7)IH{c zv>Y9FV_ zKrIJO{^`)$GMvL$w~oVR^$C*whw?+odb9u$(ET~GK7*<`C5IVG=d*S>iAAhG?+nU` zSsn?N_C8rgsAeCYp6_L}b09^Q&*bH{Skn>f?=Ls8tmtE{6lZLq;}og6ap`@G2W}fK z*8?qbOI547=R0N1uFvOM#U?(WDyL20xUq|;yyhvII76*ttd{#?be~%iX2G!Uk(XoF} z56I3St$u>If#GEIp&yA80Y~+~^SDDX&yABed=87^gwI*E3QeId7ofd{)9TDB7x_g^ zQ${fA^E;L>!|%5{I5(OD%Q2up}?N(vfN`*Y~0>`-e!yV0+kJ;c!t)G zff#Mv8l)D_xCLM1maryK^VtRpb}EOs95C5J(<(j-pGR5J_Gu2H?(^hP12dG5f+`&Y zj?fS$Vc?*!_f^{E-ooI)lgwL{Xa>!0Q!4G)ph4JB2Kf!pDkvINqHdxjZ-xsMw(*us zrJOsbznS0JP~8IHKSFrS)7{JuE=?}86hir$_Y7RRv_MFvzvPk^ zu~fTLAP{XAgO(&6e%?>>-fdGn0SVydA=Ze71qOB zekO8A>Sr=(uJb$E`f$d~4O8~B1FMEH$6C_H`OyjD8SnCeie|x}xswX7VuVNN@Md0F zi+&h|&)?EZpit6uH!c>;x8o?ai`%}3@Nl}Hi$@|cC zH7G>g#nk=aa~F0GD~CF*U)U#iJ%Nv_^e3?%gH*~Y_(W8V75>gSyD8St0QuP^;x zpK@mF9C3TXxK%B*U5>9F5_0${_C9KO>)3Fq#GciCFY?RC3P|jGwV_9~JufVIyLom0S^?{ryCK^d3ji zGw4;aF&+Cnua-R17sWTE8kxz$flJ^UZ=_iqKyNMWVUpN3fvf(HVZdt1$Rxq4*XEq)YwR-FtwxD&;Tb%4QN%H}PEeal~f7nDy>c-bMm4F+Ob_x*FtU5DR zY!ySD-H4fP602<79!p%W^!y8g!temIv?}SBuo10Rvw=UE7cI{G_zCi&?g`WVbs^vK ztxu!@8Wj9-4BeJsr^zG0<}e>3TE#=tY%BZ9x23s$H&G^e-0}hs&yV7T>ddN3dzyJ5 zZ)b-M%tJ;i32Mg6Pbh$vyqp-f#BcWNOc22L$g-U8hF+e}ON9iaWV@#XtEtc8T;F#au4)t!Y34GC6R# zH^EN(_poH`-DcbMElB(}M~u$=_9VYKFrkOR`!F--X^P(;00*WMa4ucdZ=4e?6lP`X zE|D5bdsQs-Of43fbX3yPa2pvwl{X|z{7!PoJ?p~m#ve4cb#azIzqC#u8g9?7mAnZe zmrI_baTwqR3VR7|IG7t6NC$i-R5@ww{!6)eigHGy0g5=7k&=}7bG@$99I&(Mv|>`+ zr#{TK+DDUEwOlu{Y7>KIj|LLv1m46smQot*l#-D=UA%!#fRS3vC+!Qz=~u^NbreA`n7qYm zwLD#)cbRs_g@J2mD2~-r3)I3$u)O_Qi9j`cYcHuM=mSw$??yf>!J9# z>Qq|RLqb#?!|r$Ec_Nq>x1>}e|J{${5K|c7td}dQP-;KLb9<4V_kdqrrVQD5P>eQy z0Ggdzx_2Q~k#=Gm9HG^(86;Ltg$%qsu2rwuvN{Gz^L;q^%B>+hs+50P!K$8+OvT>r z0LBvASPetK>cE<*l3dU0Ohc>{$xGH~28XXNk+DaU>z}ArDSU|3;AV-(;w^eQS||x4 zmf$FEQOVKGo;l37ojlmQiM#8G`ij=`JE>-F{Tvrz%DSC`aNs_QiVR7 zkV#8qUm=Te)ze4N+OD`Z-+xsRfP63Y7b}2+UC4w_`2G}@Ga|Cs>({12gK=?Ke;H!| z-|a1q^}X-|Wi|S{bxZ^jnqS#7#c0@8;z|9!O@Ip9Bh1cmQ*PguXUpII72{#e)?X%u zoP2;wMr)ieph`uvL7R>8d3loRRbKC7=)u;jO=Y6m?~ef;Lh7ON?^U&*k?Phb9V9QZlDWAZ|AgxFUWpt9w&sqZr~ z*+hf2CEpJVYgscwX(_HqPwvS3w9MS-Sqf>+_#bnbzusz~YJ8Eb~n;!z-sH_T0w;F|N zRu^0}$e9UTZB`k##vhLLK|FtlmzGtiAIC~Sj_Up}{UwEufQQ!A%JNzx$gF8o!)^)= zUY^!u6O-xP-dBm|qz&6fl9b}Z0$GaIe%dPmMfxhfKUGs6QYG(2tX{(XLPQ<<6MavaeK$20O=#+?oUk1Q!v zt5RrQlnnMG^xKz6X=G&(@H{atB_*a12#U>ISS1<=_%myFTs z692ZPquoySXp0ZG6i;=-hIzn919Rf3ok!Esp5KR^83fvr500e$`OcMeF z)ct3J7v!gN>U+A@n|a_4jo0*b+Rz<)J7*8}F9G8)~^;&=hu)VM^aO|oq0B8)$F#{5fi)Evw*;>`}J3>tGJZUAtE1o=G4E*d5Sxe zhhy}O8N=xlED9vLTJfr|BhEEYXss`Hdh22TtsJ7<-}()LtlW4!G#2^@2A{VW)S^Sw zmp|xEo2ZeapXN9!xYMRbBv0F*PI0l$)(rlWYnkD#1<@R5_V7kT#b%*4NeTH`IpuD` zoHxV=JgTv@K!|@_TOf*+E?1c=+wOmhQ~a_A1wv{$<|Gb|-wp>wj`ZiF8N5;*%g^$= z9_h1SG~%OV4Gxz@YhpyoPe~*rGS6S9!IS6_Ula#}BQ*<@q(WQy3}snCj|LA(`<|1@ z5?9xcu|d+YwJ%Bgpir&MH@u2qMih(=tZdo!=0C zx~Bk{j);3qhQ^iVHnvYd^!T~ht)IfUYf7!BYfT7WMrrYL+C-ESr4BT)Bj-|Fb69LV zHJ#up-8rR+ZYaH23c<^D>$r4@{x zQi-tmRBx?tSv;<3L0#*JSK;M)IYePp>HD zd6bppCltco3IVZ1S#7r_A64`5{iRAT6lKobjZp_A#8;+fq#TV^2;OqSq~?xF%{9>C#nnp_aVzCPX`5=ZH zkNr!RJR1X|$6cshVX~v26yk1Cx8>szfw+2iapy^}la|B6^Iap^4zD7gebYpO>$Woj zZYAogF*ro!yX|+xA_Oaw4<=4fc{6Sh;sSR}%*9#9>@!SzqspwCpqf_`tbOMuJqq`h zkpgWKO%CSAtW(GsbL^k(QagGRMB8jdW z-qPAguHv*O7x-;2kMU=)--|8~@mEE_DgxWf@BxPuu;t%RuFU5{5;%q!F&L^TQ1DN@ zmG6>>@1+bDJm+4T;MK9MSR~A#4E!Mnhn)f{4HQ3#?#=3IG^d5C)@#4FC#7m(E?dD3 zBSze$=f7~?dKo4MQPq|h@{+GNQgw969IbD-dN82oAz_q`ckg5q{jDsc)1X)5C9nXG z@7iRP!DMDsxgzDkxAFp2L^CQ=g9=LQn?%|DM5QJ{+s9Ycd@Uaohb0@&sfSlCFQq{} z5{=XjGTu{N0^l~iq<&)lXvBV9gPHhZ$bSR5N-&HNS1>6s-R_4o5*dP#`pU{ItDlEH z0NTR)1ZDdX-JXaa7-c$21*jFEj4HTFWOM8y!x0hJ4?JbOnX)x;qPVt+F=OY!LaOZD3tQGMCsHkb4MBt^f!k(~VD zUX4<`nyrc)b=2n^>ZwhAz+nI#YSAOv#A2>mSXSi(+ULwJ&D@TLHjanPFZ-a z-;{gn7hW6ornh%M6rg=m+81Op%c&}A0BuQsXFSaGOUNM|ps1~gcFC z0Xlm?x|RyzK4xg9NC)OVL9}&g;J)J_SisS^T%Si7h$GJ zFG5KZnyaO3hKZw2_Q9+=is5(%g@!Qzajvc1j~ogj*6(k@TFFy2IUL(uE2$?0>Of%B zIVOM$Yuzwf_}IwLl_NTRhSVog5L-wTrJB*aPHdY#dHNjUASN6!eVs?)Zny>4?Dz6> z5vJ^sICYocTOW?w8vwoYDw0tssd^AY&wWGq{b%n@jamd}9I2VgNy^V=a_MeFv>t$Z z41+|`yGu+|uKPq1c}>HRB7Cu_YbA-Xpe89Nt^KMYFP4I|0M)Do2Vi}EdFduC3Mj2TmZcOT`}Y=H{k$0GguMe-Jki^mPwyD`)QpfuLRJ zU+S{=%Klr|wR_!ryUF*WX*A7JTHVkm^DUqfBr!cW07G#N;A&uKWO@uv5p*@9ox>tM z5Gj4ZPp#IEJ#G>yEmH&O*Z};4{w*rb?_Www0A62QF@;@caSbKU7y_`S0cc(QRo(ri zZEa_z8tVtf$^Qmei4fltgwBt81{Ay&&~KMq9Mn<8gK$;2e{p6G4y0KQoP(=Pc*1Yy z>wm0e@|%N7u)lW(38iL&5EP7~1L&CK*X|BG z_{(k@>I`Vl(8TQ6$OQcViZkJztWx_FEj>Abe#zE<0%Zo!dUs;sVgaO-xXkkD#*yA$ z1YcZPU4VhK32OQEZhzC>^0Kf6dVZ-TwYT5ko$*cr=Cxe z*+h70V}F&ESwO#cBh`O>)Zwhp0roz{_U({A&F*da!ymJt0iFG@Q}OQjQj&4C`A_%( zw)<3<7Pa=3s|0R5hA&7j`v?Ek@c zIj6sldwjqy{=awczhYvuBTI0`v|z1`pR4Kovx@}q`5{!}BU>N%qi^7~psjD8QNWd) z>_I;trhwAc+Sb1V7MelRHUs=-r);m^GJpeUzX^&^);IcqKw5yz+B;unPz`VBcjz`Z zPyyXBr?=3aT%U72q-Qn!1oOb=vE9tK`m_kvO6Xg@YQ&;fv&~!s3u84dj~9}&5jZyB zJu@(WtEBa{B&RdnX0ozLD>zO6Xqy03fk5M8iP50W9NJEi?+iqThy42zQ5Cf%sO zAD_J4;q&H{jjz9!-Vja2I7u~Zc*9Ea$K6=IyUS8m#Vj~GMryD688fnO(ZvoQ@?cX0 zTq{0pM61;%hj!nKqP_<@g#?`CEBn<}_b@ zzE?Kwm5RD4A12qXTplEZ&Mk^5fm$TdqjfDK#;mLH+G;D$?QRilWjpwZD98>*yj=TJ z(tK7Hme3>+jQI6}bbuKx8pVlEd?jHxWL$SsLuhH?@AbI33(a5=w7#07i3!|kE72|9 z5X(v*^M@7MT#W`GkYiDAf1z)YN+?yiEXm%MUj@?5^Jy#fszhPz_hK9p3O|kWBmy1> ziDFi4mHl<7%8&uk?^x9^jf%L3Hl}J;E9<^T(chMz6sn zgr&~tP1)d+P=1H$c0eC21DgjcaV%MH=w1o`l=;u_5Tj~?)XLXeBLtr37$Anqq2X|A z$02OV(p;ZTEBS<|{MV7v_`$Zpkl(AOUj(OXwADlOwu6dXwXvTyNeAx;zPO}Xj%x$FY!KEvqS;ls!o%Gz-0>HmgtfDr8D4HrX;sWV#6h4g-A!F=H5NS=c&I@;<2Nb)Dlp-|`b46y zHzY<9+Sw>peTpk(pK6!6gM?cGbWx!&gX|r}JtKGcv(}NqH~F|7rivtk9mJuwqmYGX zSo90LWs1iOauV@GHWeo*qjrS?PfkjxIm)CA~05O;IlN>iIX(I#C zdZdq!<3VFp7EXbxfLK+ip;`nZ<#aBwb8&yriYG~`-h7UmP2?t3D^@xK94*%xOi;q+ z9-Nf{sn^H;U2OU|WN|X^j)~p9*%!rFTpc(o#4TJA5p_rK=lTwL(Q~n3AQK7@ANiG= z%`7DN-Z}@8>w@IYh%8Rmmd>=p0rc~I z{VkD-qYkV&DzyRXYTZjzqLIi(1sNarIE8X{*xV5**3lX1a4xEPSY!N=$^NI9TGOsg zl4NlTn@bb@iE5&w>vSH5$6Q^oH^=!L>^SM~zp-j9&JPjC1z;h6|@QVy4IVX|}_=)|j#Z^LfhO-hoF#X=*qK2YYNrC^0 zojDn4E2^@=)nlCVI*Vr=uD|h2Vcphpy!fvZU-%aj^oNvcxbJDoOwW!fP1N@fug;UqWIPwd6U%>-$ zF*NTkhda}?m-PQu2T$xNAtPQ1SdS=U7a4L7Mc+)NxjBvl>adl(syf};2G%Sx6r0>v zDsGpg%+tE-uchjWgyfkNW`{*$4=KZh8d}aKsdm-jtF!WDKFjexz~1xE_zHYmw8#)sn98}uS!8{1JT~kl@S|1kNBZ?Y3;cGUON_4cQD;l zT296jds@6sHyQK#0`|eGIhyMlyn)9@eBCQh;`4^?Zdp7K3nn_#qSG%y zME|ZEq)cj4qP&}%n{9%25&s+<2Q>}rpkVl783L!tsEY9ABoHb7E|muJ!M9vcJoKM* z5nQs$e9&1L(G$&fbO4u1ClgUsl0K}h?grZg}S(WG_&1*txZJdu32yM{r+9zW? zeU4uL^a}P=m=k?6%t`EJT%ga=5!@=!gqoiQ@-AuXbX=y2o$I8lt=Zffgq&!nuI=h7 zuE3YGaNK{-uz2#Kg9Ms8de()Fky5GnWJ1VBTS6w9eRv5MtE5L_87O1N26tM|=3_V5 zZ!9x=*yr@ItNOF)jHq{JIQ0)REw?|qjZ*L4VLMbP?`={>i?s0FEwW~GWtUgUgAtom z8INeZZ7*_E2sSg0gcnGOBl$)tP%vyc8U#v`!ZzoFrcaM>Eq!F+F}}rX_H4G~}J6^HMYc7fp}UALg}M%*zl}oLOv( zC3z-}pasov?8a{;+rZ`R(die>`?W)dEamJxZjp{)XR!vQRfp=jvLxMMbfKfcGVaN_ ze^uu?9nso#8-!<|%OEWQ5fqFf=a4g4Amlg*A;g`v&$qWr-($`2g+?XomC2sHATdGd zRc5Cu_l)A|lVY~xS}8X&5mA*Az{Js+1{niE_LH9I9gQ@MW_SSr&$xnJQAw+lSY15Y zPT4%J>`-{r;G83O8s;L)o^+{@q7Q8`u)@w2mxJih3&NPuFWDl%qsO?W0W<-L+e>}h3AGd+R62kRNW?w8g;)!ICSF_Mw_grIeFCs5dN% z^VOB*`AjTHCHxR*R^^bq}_Mk7E)8nunUHuaqVU==$T{GiGZF zp{FsxkC*AFCt^EE{;Ob`BsLt-#u|%)1F!zZX?{mLFHE_9%CYhsD!^gAXEk49 zy}Q|R>)$ILS9N-1zRATCM=r$o4R@Ul?w8;!{6ks-{M@3>%N=h^0QBVhL89J-InbSt zgvAi1=-2a_2K>Br#f4ucv+cMrjKTJ>UKlyTl&#-BF|*)HhGIac=Zh9KG_B6mD9P)7 z&Xv66SXBUdX`y4&g@b6Mffv-n(V{kp+qVj>2wuvFQ192_F0`={9x&P0_Pn3m)S}8f zn4Pgpp*YPG4!71T{fc6pBu@W1d!$Oe`kuVtniQ5exypH{rYuwXLmZgO{+TiLtRH~m zGN$V(SlZ8l{P0OFa@ss^cwcfXHc;a|3awRgixj7$`4z%Y1v>L} zK!q6bF!|%Dfq;i5^z8&!ho^)GqjYq7ebC6?wOuq1-?#j4-$?lzd!cuSuLX3pOr&#_adSteUV#{l^;S* z=ZqTUvwNo_k^aVKa@P8w;8HQh{hmA<3{@}6-l~D`( zrszPee>N=EunCe>$J>wVPY;nCZm0B-tjvW2gdN4x0#l8mSK(T{Zy;KVrU4K$Hauj09wjCV;<4k(lqH9#J=zP4DJ;oea(yB-6V02#acIle1Mgo2V z=O9fg1^*<1NF?kEob?dP)X1W7d*AEC&H+DRCP9oWOg4qK@up*;7GN)_^RycQ^5nxq z_;D-EjjOciv5~tL2U3)ett0Y5*kl-jYw!7kSwfa#84TO2 zcH5J_GmfaS13ZJ!3XzzKvmoNsMbzFOT1$U|qOgwtSm%X+dzbEA!cFn1sl1=boyw=L ziOG8swveXsCvhz{8S9SvyjPN|c3+uui&qzN5#Wb-m=5Is{iHRMmrgv*#$))(if{Mx zMZ&4Nw29zQHB%_%7EAN0)Zu4BVOFP6fcAPX_kjEz<|rH%y7~RtV~FbPLgKa^rS3Q@7Nj| zzQXAOs%8tP1pR2o{Gnnq|IOE}WX_F%^?roIY)KObnjC)-hS{}I263%voKoDGjVQj! zXm606kEv_yL#2*v$J|#z)6_ib6kFZ5p4Uh#0>03&^EFW+agex zpIhtyFm?`Mf`nVPP1~rnZQHhOyVAC8+qP}nwrxA})#P>G!5#E4#_>hOj{mH)7hyXX zcsx8_1FAHJwwEg) z4@nA)VGFto?orR5bkt3lgQ^^vnA_%-ZsVtd$C0P7Qy6g~$1Z2g4ZnU%0TL(%AY_*P zb>eu(UmZc-#=(jqmGD?}Yu0c9SBHRMH+eweP*}zwqH1HF+7jGYm$2+rjF3*wdgA$f zJbpDVkZiI#EQk<1c!vs5)Ko7mi4RzF9?~jPZpPG9cj7XWNNrL> zyJFBvxmY|QoEz7R7MWf!4k&jB!Z>vm2K*M*-c!j|W7(yn)!;=h#ozgKi=~*_44YV- zi@O?GHYxd4k1G^Vt-NQ!qsr)gv$+<@98a~UvmnH%*OPKhCBnd9A^|cz-5{H-hudr0 zrP)S`jVFtwF4y&XXLa5#d%^j|I;M`O{*x?9Uu73Ci1v|v6;x2&%WTD^T2iBiZ%NKe z2ouw}poK-0ShDw=5N`y!}NsrIjNN6ZKAfJ1avGyb2DxdyHIe(6oMBjMQ+COk z`tn~z5%rN*CiC-l@q>h$B+k|PgExQ?pDLAIkCwBXGcDlGNJH;DWXY*zpmbNwu03Os z&*!hVWc;tu$kblLN+)0%#xfcWQ@xW^f80|;4zoQUr4@x7QsP|1c+8DJR;v?6LRqqI z(w#wZ7F$)f=#)(niMnUd7{|aBX+X}*B?FX|`Uua*O}|(u*mmL7B0ZR&M2aFDa1<@{ z>ds%0Cv{%LSE_!M8Pv=e9kxVcK7BI~O1)wif%x_BFd2?Q?_vN`>$SD-XjZaoHml+V;K`wtcp=$mY3YU@*bTQ zIee}AYIp3Y9IhRq3fp~BbhUr2OSn6^7ZLFgY1ThYrdRcVzDq(>T`)yK3Q#NPt7-<3 z+#|O%odWd5qu(6Vt6{WM?%_=BrMH^U+i+hfmbS&MotE*dt9 z%+*=4COBYeX12^5g%F~AA3cm_p9A&e z_J6ChVPUky(90dqi%4w&&{Y9RE{^sUY^nh>c*t(+$N9s=^10d4wwu+ z0;!hIQ-YG#-^-gZ{uPkJ@1a1;%EeyP6$KmSr)jnWQRPG@?wL2t``YW&Yh6^rzUCnD zrXY{I&Gs)^?+R1oiK!`CDQ>H)BKu+)Op8*r0?trCBv@ICzsc|OR`)s;Fscnz==}hV zA?PkdrVYyz(iSphsWpvY*n0ee$GyK0)gf+B>Q&&vb$w3Z{>i60qxV)XGvCC-8?Qx| zc6a*3qWg-JK%uu7d>A;BI!U+n*aK9e!npPWRrGf-TzlC=K2t*FG}FBPWLkG>;l~OKWatHyAHc9pf;-xoQ_ZB%l(7=+RG=3z>x{xp@A~tfZx^22T4g3MwYsAj* z9tXKieDSkv#(S~r3;nM<_S&1wsz}PpKH}yEhc-(;yyC$@yrL#-_VK@xPPh+E$xY-& zc)T7zC*iydy1l7(67MJEXm1WA84zGd6<~Ty4KKkE>n%H`YnG^tq{TM!>k^Sxpp7vp z*xa2Qba9-*>CIwfQP`%^-e*#k7|W<#bWy0UzlW~Dn_8RpeXtiQ$)LOLCN;xjL?tgc=H8 zph7Jsl5f^7s?(`!!F8E&%HG3z=f{J^AmpJoO=x=7fjY95?p@38XJwOyIPT9(xY|Lq$`4D_TLbG^{sBi zVQ?rMfDz#i?mP{EBOGIjg|$eX&-yl@v`l;=#X^}tzRxADjeh-_e!9LU;bhrOKAz#> zP|SV5AQqhuNmnBq*b(9L(ohG^2m=_Ut?*{{r9$u_CLN9~s~B7Ca_Xh}%(>j*)cak? z%KmJSA2|~n7p>Fv6rOrow^tcH0D7~f&cmWMs*jm>i_pDa^}0Z_m5Ua++cLW=nl=PX zaqRQw+pP}0248u8!fdvtcgIW0CW7ly>6NUYy-%Dt%7D+z&b4BA@(maVt!W>o3TzvO)Tg5eyiVO>o75Drf5J9rTU zVdL!yhVFFM#GkHR?K?k1I?e~hG4xz{XU0n%p!Tm5(p!-#CV!;gGq;jkf7E{{k~(9It zXS%}14EI#o9vjvNy^`U^RwRgQX+3$jl-zCqN#2`VghxDv$-h-T*$A3Jra1=_FzoKG zl<~COvhb1*y+`3gKZ?s2FvBBl0%KMt@(g@FiWmXeIHqL>S$fQ zK~5qFsbnBti0ki%ahw}1A)8y*Ke4jQsyCP=d2O9f#|Q6vFA|O?99_C(T`ay)E2{+J zQ08WKz&>YMt;oO`u5?Z;CzzT6A|5xtX)78{;iL59%2iH@Ga3-xjhy)-lXb0vb2 z!Z%79F&|c?h1ulPrlt#u1kKHqm4UvujrYX$T~1(vBI?lW3J$)>45b<;b+=W-{@7B>$^nyi`m_#iF*1E?K za$9>3z?5TMP7FMYtq1Zm1z4?WZA4}hdt?IxvPz^jPg864zRnapp|yr|v2E95UOjz- zdcqk!DoZkC46S^{)R$qQ!SIK&z-IsU*ktId!95l~BI;2V^pht37U55KLomxAe z04^i0)f?6t!XRb8(F;i_I;%bwh{gN`LDTd*g# zU&_HL7lrXul@F0SjK|4qq}1iiG>NT$lrm+Ft$$08h{Be%K7-HF25G=YL!Ug6F+MT^w9#%Y?gVl52Kp~6D zI`3wIFFJ51muq5iHg1z$Oz0Zk>$k`;38$6BclwCG8t0o1an{X4uS^TWxHw~~%2YVE z^xG7dTY0$OU`1C<`_Nrd4M*le6m)<3HC#F%43GNjf~ArlVz02Ad=*7-f~MqtR%<|a z5g`B|sGKu?BnSvSbq4;E6`?^^v(gDzBu6Sjvo)*j>1`LzCDo;n1A`y_f>- z&^zXdP~JwFi`4~((`M0o7q&7 zfXsVmGtLRSlDKNKi1q#CU4^^|hy2^&Hjc|n-h4OrL~`{o<^8M0_DE$1*X z$2q}XC8S+9HJ9kME?pN7D%lcEQ#RB@3lZm+C`s{8j$||89S}(Jy%2a}ka;%OGp={4 zAw6?`)ds^gPP-;SoZMmvg`8&E?}u z8WaBIxo{A}P+;e|hz#YQ#LXP5mLk$(JXzNL!elh)fzQhuFQB$V{4$y+mk>+2YX)i; zx$(HKmTHfhNG5ME710c2Fg!A0|1k^u2Fv;Q6d{DwBPka~QVG*2UIylSZH4nEK zpzR+R=w$q<1BZO7K-4x~thvh$c75j6K={T$DKLOp=*(mFsK>>f;_ZT4t)Fsb`c^|3 zX~%y}z|n9=0S2BpuMa6yyYFLJxT$)H=IJg?hOS(pX2dF6^+Vt0ebX3farYU@clI{W zs3~dR_*M=ox%HQ{`=}p09|$-7-T0<@`}94D<--D~Y!iK&?|u&BY?k8a=zL;EE1I;? z)04EoE|Hg_V}i?jPQDJc6(Ee?0il+RC#lex=5G>vG1%r$-N;15(v8KwSs$jVb6cCk zMRnw~+MUt4+4k>_zxD>~B?#j#l#7YalMu(iq{y^~^zU7eVJPH#yj~(1fID)LSXrru zMJv8+?!j9=qZ>iqA-ym-y$FUsG~&YJ@w<0f^%u^VJ1Mqc+gD(JRPH&O*jGziBZ&W! z*+wHc>)O#0>X|1;o!dxgFt7*hr~I+T=)KsE=3}-B`77~4p(55;H7_RTMZ%XvU^r`X z_-P)o|At%6Bv8Q@s*+k*wqBtTZ8vU#yc-9?4hGNFH1N5dOd#L>@TNN-@0;|*8FNN| zdM1LK)f_!mGX$qcJGO*Uw3-)cm5_X(YO1%!{p@yb$+rKHwD7FZF3Y7@xkrTN+Zt(7 zt5wWR$;}3ZF%%}Bq~K{GS1bD))K)^YP*sdLF&i`eDSLsR^AYtszb!N-ECJ_ZIBL?3^$Y1sW2e6ffgl{s|ct?H+1~v|Hbz_sdF`@Td_@*PtI^w zz@z^#*rjNTp>4@XmG-tyCjCa_YtsEQ{8*_t2>rSdb%0;dC{3|!du>zDk;)6M_=9fc zF>4|beK;tUC9r<$!{e>}#rwDcuzhST&y|6OBT_}9HvRq=C+toEwc@3#>b^)Y0iWed zw@K|RuCz`TT~jJgp5y8pI>PDc%U|tcy(~g?%N`}-_KcB$xihBTVo&8H)Lb`U)+$5h53K3{u4K3XJTahzt$94yEtnrZ~n9}FBJPN&A|$}vMmtcbHD(@ zFbKhH7dyGS5)qUKEJQm+1O+(}5!@YSIo|TzcHh2V{X-6CAFrRQzSpCgG&`~wRqdq0 z2(d%9xRHSHsYOM3$Oix)Vo76*vYiUagKoYK!M!+3iu5aeD)48$6jrP+9JvMCqXYDUct--5D?J7$*08*10AXwyRkWIorcgQg{8Z{5cN)TsMT$>ClA0rIh)41dcpHHG%`==1)HYX}*r z`nH%IpA1#Q2Xb}_C?EYE-$59BN3ZiE0083C$%Bx?_^|`y=jdzQ@F`xpa|rwpyZ`tJ z&{Of@k+mWBVIJ*4-3Mw4;p(aL*5JEB0PG)t-9NtjhX3vu+}{CI<>`a;AsIfp5&Mey z1`(|IUM~wkpp}vJp^t%rJOKFla{p?i^WxT^VxR0ix3+_gAp-5G&Mo@V6b}8!egBRs zs{Z*wPe~LLNADY_nu6ckcfV2+_Pg~hwDiyWt$=!KZG@V_ghP0*{P&0b-3jO#7I|4n z2}tc5k%oG=8_&E4L5>cj|E@(($`80#sEVt{{Yzf-d+@6u`ik) z0C=!Ej~>g9_CO&DAFc8iz;{lc4J~z)`zw@)lXK5oTC#bWE!nD$KZetbUtZe{1OES(^v&eiYIM27x%X3^k@qwb3Tdg`sJqqt2S)ViBE53&S0SR&2dec3{qNw z=+`}^e{?1yO!n=|3H1zJisWNDA9AJ8)nBG*0M{Jcer)-~)_*cvNR)$d^OqMyr#25| zy1LP_XQo{8E5Re?d6jox>{glrXA^(grmJ%y? z9|5_KhGgf4obM<^aX}Vvjf4R7VOwG%PBB8=gwd$h`q!ESO}$rw5E2NU&xxJb5M2Xe z{|+#52;I=}(vfP4-PQIJpxb&uRG{L2NX+Bk*MWsDy71KoyEM%}^|l?EVQ!+hxgwty z842axkd3!$`6CPNrveO{rGfaiXt}xbKu+0yGB+ZjNWY|baCf|dTC9e6u}7Pvtyf}i|WYAY05c^D$UVim2zA@u^U0`)?-8? z(ReJ(a;|dX2%QW@VpMeQgu<+rX!hSeD_vZLGtt)|8o=JD_S08EPWU(WeYGN>;Q82u z9h;Pn&cf6dqn!);5zPqDh2{>4bPvE9q{F6v@?l~-y7iHLFE6KeCd|njf9dBf&{4a$ zaq#dE(;_2jZ0lEfQTHP0a;b`Uyv0wz%9PZ<%;OuT&VRX~5RiB4*`*6z6uj-(V2b;H zZtyAoAD8D?Xn0w!D#$1AFUEcSX&! z>9~agLZYIKnF2T`ff&CcHNPt6UKF!Ns)+n%JZp;s2#6F3_P1>`3z%c7IAoI=sTPBE zJ4D`89N}y0R6^WvV6~7P8(0;!m-y^W51@1fXFS*#pQ8~+w9Ej>&c9U7$T07k=ouxq zm36&eOs6~x_sBx;-6G#5x0aMTpSo!HqxyWC%C;Tqkew zRPT{%zD7Rxf^@RQ3_lBK;t2?Oi?lRBO(u|2F~(S@A%9Z-GdhIA$Nl9dgc2~lnfa>DXnMMAIQAO zTiJg)zLsti$*H1XdDjLEky{+ie%7MzE5rREy14TB-($hFLZk+62BVY9RXEwyb$~JR zBw;OXcH6~^xyY->&mqcI69t+I{U*B)y!FH46-S7vz06Nu?(Hwz#ms-7Em zMrB-d_am`Kl2@^$uC}qHbTzh^;4f`Ed+vg}f~y%Me3H(rZ$h3t-=x;$jCt6=z3JTD`W>>j_o?ox$K z`Vv;8xT)qvED3hmtJ48>lADKSx9{~l$Ch>R3@A|rN?;U^@hazpz^!^lHCqoeBZgaE zk&*us5m{Zz@<|nuENlmA2l5@ngAg|R)9vQK0zu;-Q#Cg!;i_wIW>CtF=)uz?7#*dM zLU*21H9lL@EJq~?(rZX+&~t3Qv;Lb68xkWJYs)@SD7WKqt@(hwU{f~OI`r7SuA??$ zldj<%bKzn?Tx{}4WK3L`e+37aoQXIhjFRtrQP&RK52n=f_%DRXGM<^oI(g~@zr$kH zKML%%b-*UZ%(eDZG~Uu?HP98}EL41ip6jr?90Jn8dI$@5V}E@g;QE@KC1XlK`t%^c zCpbEy&^Xb=O}7`IfuR9+=wPMI>e5$CH+$|}ZX_w$%QsEw`64k^ou$=5x)=cN6dpVE z)(cc}VNKsH8jUcs=pYaqBQix&jf5+bUsp$Z?xChRwe{C0<|aU_ z#Z$-_`URhQ0qD6wZxd%?(KK9!W9&LdBS+^sA~QRJH$>synZ>2N`*dJK$0Ofo#OQab zZ3Ye-gYzJFb%EZ9sj5#n@V?Tq&pT)!NBl^NC5zm=OD^&(4;EUd5Ziwx!PqoYS2)7L zAS-o+Aki?aPlOdI*@nltl3S5Yo8Q?HI5x(frNF_vpcMO_wZbC{O~2%0pVe+V)|?8$ zKY7RoRp;LMi+$Me5Eu{$4Te^7+RJAeZsKs_DS~ug<3D>^@0C*4v>?5!aPqNgF&3eA z>6quYcywdm{-pB(Ny$YFcK}rlCR?sS503V=F>c77Gpxzz4&AW1MiHJSJ|s2W_r@o& z%0z841V?L`8j{<1+j5qC-Aj{`+U&ecbJLeCSD7gJ3=N#K4n2V-CdqSLF6foXn@>z` z9uBNOf7|&`#Y|_Z0CocLJ>s58qkfpU;_6b@z>iKY4mxjTLV8=B7FP6@eBYZ)_AkNa z!-J;KKvR{GU|XCHRFth-xkLJr+81adlyAnmdL2Gy`UQlgw4AB1YQ1EE{hMGWXjXMJ zTQT&&tv2jvCOhc~zvdH6CN{^@!j#$7~+p2^ed^?CFZA(;HW}DI1ri_*$aP2iE~$_x)LgV`6i{Q+0Q2u=kCsZfWDlV{ zo#vT6H!W>tOBuC1Sf=z({ix7nO2k-zoMvJIHOkLX^?}7OK#OR+WZagvnevD6f(##i zk(&sqQ3cxw1|2Ja*uKdrxBsA9+=%dw<6G!vaglKC8#IYv5_VGELfhe~6*ZwVm6{7^ zMP`f^)9i%gf}S5bviDKG|JS|7Lg_XcC_*2CCUNyaA;a&V1hG>5Z3$&v&cW1Hdo$G| z%MjhejBl~;5)zA_-(-P&*smyp*rnX&CRLNj^ zyH)_6c5uUcrz&}=G38C-+ub&6sDGNYP?DC%)%DW9JXuKhk5ngp<}Ry=OZ~!$E=?(g zO+#s9cRUbY?l#39OHtRu8cMUjBFKdLI(>KllK^S!V_?emi19qq7> zY&Q)ZvKk=goUfj^IdN)tIGe$FSLQk|Vy6*VrjKvt^`@KK`!p%dKCA4i`A7)XJditb zE;;XvsQb302t5IGO2{KAjv0I4T@o@67U2w!;ob}sqN+}t zR2pTA+P-sji;L>ZoiA`iLiw?{&}I`~X^z(2k{-c^dK0i~F0ihZT=$~E>#A6aClVlz zYk3L7isL1=&AsW{u}6r6$^595K}BFED?Kn2w@!Amp#_2LQ8u%-in*x~6=jpL1Qrl% z?2u=cbVme5oau!wkYdtHuB1^(MvsXDk;LAba07HOqyxHZ6>7Qex7SLBUZbu>m~m4W zzs|>S(pWj?qMdP_DFz}4WF)wRZEPA&tANqgt!Gv)>W{6+8;9Ddia)e-xq`s8Qb^29 z49nY3qj)3KY1ExQG?X5V%)T@9Q=jJt0n*Pe0y;(^^an%7J5O&?n~SC6U0V6u4==pp z)ALhXM8R7)>P?RcN9gZgr_%ynb*O)f+wi`nb9L(#S>(J=u6wN#08gIid|AS9k~xS- zM{Qk`_mWH>I$SzG+JR;BiQ7JYxTp(UQw`GnlRzdlk1u~>Y9A^eK4l^h@QZh(8Ft$~ z&o;GMC`ovJ(P$6gZr7>c&vT&Q&`46&_ZN_pY29*`yz=kA6PgJUt&F1W>g2V&W|5W; zchzJ)vJ2w+C>QPpbpAknc)6K&*^2Y%1~(5h@l;annC@Z%zISg9u4*S*{wbHRZ6@6) zB1q+=?KvXqz|I_#^N;bLQ(#1V&!iDuO3Tud_DeGP6il!iu*=1|j8e}MF)Ckp3 z9rppCNqcf`=zGaLa3fRNLr8D*&<^BG7ZhvQ_KH%vz2gk{=s7Y7UeM?lc9d(|_M~9{ zp`5z3!jIKfde{n>pX4glA7zFqFc6skOicQqYxHxo)P4rf-7g4nCG z8Q1#BXAvY#{5Tc#GdmX3;ZB0f*P)OF9Mho`t>EG43IL&vo+xL6pHpp3;BMO80n8m? zpCC>rbz~&Y#-D_zzfei{8(5nEJg|0*rn;uK?1TeL2>m`*N(dGL{HMBfCO<4Y`D?PK zQOSqvJXzZ+s$1JLBo*fZVc4_@_)gLIoOa@v3+}cnGKmZ*h`X~EBW`wK)Au-&>&UTkw%Pniw1be__@%5E>WX| zv6RriXAgD;oeS6YoDw$t)sO40k&yOcnwj5_wBQ8@Fs<>m9#*D$J{wFfh&rA7< z)}P%g4jWI?S-pYc$bYv5VIvvZ`?`J$_zSC`Ta6<3>OHk%eh9=?s2wgN1&Tspp|aO{ zX?wp4F%r`bmAJs+-~RA?HbX_F34|yN7$H0D70`D(s7_>#yLY7V6uPajnKAa77u%9O6|x$l=2BBZvYJGaP(t#~FGr9! zA?y8vyy!GBgk(-*pP{yfY%G0|Ca`?nIsk$H$gE?`$lmxEwPUff z6`g0_QZ-klU_BEp7 zSHw!ao;^k8bcin@e#0bTXPtKU+L%t*-E&Y#@8jn%e>o^>B^FS7FiV1gUrfFoiMbw^ z=a%XhMpA&m-fJOa)$a-i``fHHF%a4iADV619Ht@*d`c^)eR*^~PAA!}kv4|Nj6Z80 zC|QaL=>gXI!Y&N!Ychy>|0S16`WasuT5wA3C6z&8oUFt z?I5usjY|0FN{AVnk1A=q>wrvEBw}T0J$rfD1Ifp}zAI3vIKOdd>1e#YlH3s2sme0F ztLL6PM0`}y_f8_q;CzXg+Y^Wk9N5iw?y~Fy&>uZ@bCkc-gyjBFH>!kEbum-Wj$fO0 z6PhL4Y2Fie0+o+T4c{nN8Sc2NKoeSIPcjHfDzls3xIHgX$PMFKfWIrHqP^o4NW zgIT9lVf<%w4xiv)^KNEP+UwK*0wSfDNe-(y3$waylx??o-HZtucyTShLMk;?8UD+J zOQ6c~I}N?}NKc%Fu4S-gO%%KR33ix}4{DKz<-oujEjhyJ$lf3?!}X73lX7!{=ko&` zMfadmEOc+cDJx$SHNKz~g1Z<~9l3F)qV45-XV^Lsx99p>6`j8p;ERyRXne1YswAkX zB_;MvrQk`b`3fm34315aJFN`77Bej8-QL?R1ou%wwG|NE#YA5j?-IO-AfcgJj`RU; z#(1ZRqgzzFTv)W~*f$B%_AXrOQhk%M9SZ@n`0nF|Z`RoMJ4RWxjZ;JDkoQ6k)%&{P z7MMoEHGZ;E<9X`VQD&l+`vMAd&2l2g^80vkF|QLF_^V`ug(D;^^&lwq{$tE+!)c`G z*UhNcj9uhqHQC{M_xk}J*r^b=LiHm$$Z{T0OYU0y9m~RVu>C0IWB0Q*W>=;#OAVhg z{QF;gb#3pzJF0P6ezD5TpH2hUb8$hzU^cVNV#KvdDgW>i;mQ?nvn1<82gZ+P&Djed zN)h}dCY%TBwUte?yOsTL_0uU&DUZ(llA1iPM@GCH@` zG>Kj{#7>#>$UBA-=9)>m@)Hjdwh=;&zfNbnIdtkgxo^%S`5Oy+ppNrZNq_dwq1`5- z207yGiF_SsAKI(l&*080=lz@*lXqN$s%1JWRB#-K5Oz$SoAr|Y(iT5K@dtDTCgSgz zErau$Y<(qXceeslT&diRsY_Sb7hnrTuI%`-m$fKwmmerXq-5JGC*K{?tAeLatOJ=I zAY9fV!tJ*+31VVBw#i3Ev%S;wmP}d}>StImrjK=BHxJ_oCz?dCeJQ41QHfp;Nh12{ zB>vbPtc9l9=Ypw5{(5E8OCiJV3D%#Hk@M_K5wzcvGnwOz)pt90#6b$XIO3c&Pok?u ztC_2jOem#(&YR|edlUE`g|7ifuRfz}ha2wv>FSrK5{O5f5Qd~WfX)j$zFRdi;KZEO zijUrvx_NqI{zTvi8m2{K!X$6Ym%vu6&72L}!R3<*N8*`^seE^KW*yGDOKK9-ASoh@ z>|=QteW=I(d80EAE#gp_t3i|8DMC=1rK_ zX;7B_9pm7Mp3YL21Y1nqdR6H;<{OJTxbM_WqyY5m+RaVQIlU@}ZddVw0ruu=wC+72 zK4VE^aGKLQl@&m~--o|b<0{1ODl!IBukxK#yb4@kjwB!D-(J{zCj%n*!N6e39lDf{ zN0TvSdvGoNdNWZn?NlaDEeLMy(%Nyrl)|9}qu#bqDT<<$P4a1O|9SU0$!>hww)0en zV3+s&EWV1=m&4lmt`B9b6^>y?6lFpZ0-IA&4AYd%R;2d|$-u06HYL|WJ?^g_d}-;e z9#6%7BQ%DffLI%lj16gnQglvP&t z-Pg1sP8WS9pouw6Xv)uX&1UTZs$GOPw*E4(z=4OB4?g2Eu{|&g@ z=bNnOpbh2J37h+pE~~-qW_R{?bL+0-IEoLiJuKck5aH=KkwwwjNY2L9f? zQD$q_%f;1VMu1({JH9(D?WU45FtPo?=Jkyh8X<6!5D0Urx}pM6%n7~K$0mOS@Y!y`O&<90^^g1NXzSi=clWW86)0#&-j-t4v?;PF*3=szP1-xTD#s$Itjj(}#GS z5u@3+u-qdGS;)?9wnY{cU$`gJOC;SeGSl-fcx^mg<$og|IQ|>?z{>I;MN15f46Og3 zgZNMKfsvk>`Tt5jRI6C1Bd=nD2}}~M7}_>zJ_8u?kB5YT5Kkx~2)hUbTZX1fFfyj6 z%aSJ45oy+|-`7(YC{Q|69Rw&=Q|0-!@mEu~G)Mfaf^XKY^`r8TD_BYK^mWUH{xCz5~cO071%MLl(A&2qvKZQ>+vWP>=pGv{;Re^R14(50UX8 z#=eCtOvQo^bL>|MB3`6eo=kLCh=C(To`ju-hXGw+&XF2a*EXs5MQ;ZtK8In4{%fkB zzz)Yw0(S%w4%}OJ7c7wP-$z03#0xP*ktHIIP$Pj4i4ufBE?aJIhF_||-$M@|sf2Do zu1OQ5&1>lgz!F#p!X09zkj21H>({S=ny)&z>n9Hk8Yzz*0~iAa5}bfJB@gg4x$lP$ zIk-SC2+AP-N4AoKWdaEXTz|#x*ALCvK{ANxNEI0YtO;Axkhwx(AH{44A6A$nC~wJc zusMrB4G4~2a5^pw?j*z*Mhbm$t_)K0z5@uY?*NJ%F1&I%4$J|o&y-Dxd)gqlO=Wq|{&dYarGlO>K=aiv@1%{5aSy#2Fu5 zCZ5x8-+@Yje7e7??;KVcwTDMxH=xK?WUiI)^q1^JUqCl@=iGN=s-GJWGXX|KS$;$9 z7RV1?2uP+vV9a-jkTPJY+ro+Zr=Uw*JD&j2g&uo|pw1Of67ZDnPlO&jq%%PNaJ^lC zP%?i^oE^RBuNTyyMnaw)d7ixs|K0^9PLK!{By&8Y^v3iy#6AjZ8*o{8y^liCZ9rQ4 zW694o19M1_P38a1QPOcM zPuzj}pg%+XDZ@xchje_k)v@67Uc&jzrfrxti`#$$4Pi4-CxI(YafJS_n1jtB+wws1 zaRnT1AoQ5D({)O!A+WBfQvMJ%0HWwM$U#xM;h`X5dp7jUR%v9~wQ6Aob%f2L#f(2V z=-a-P;LCN?#*97qb_2D44+;0%{)kokSQaYOqDry-r963wr7iE>!*i|BG*sE`>Jf_3hQVFjn4cl`PziO<*W#0QvZt-|v9mlr zYASuLO{>|pSklJjA|oj$CEoc?=xQ&08V!vYAL+`C!`gGc#=KH+>hD-G*sw75O7_e| zv@l-)?EcHn+psX?^1JHVLFT*uoR_QT`6BJDv)rA}!Zs?ionUr;791r@*JhMDd(La% zDF^qs>orHRecXMpM*xj`tf@}%3J3pl2F6!jeXzsg(&>XwWM!Os%l5Md`n*u1qodNl zA!kK|DeaT8T|1d$k)Tl@lh!7P_AIoSJT^KgB)Sc^n6B{R(&%$rR)aAy1@So3JU3e1 zo5XH0Wu^dBGRrZ&Y+6~}+;>2FkutyL_361uf>rKX`$c|zO{u=i*EGoEed(nl=KqNL@uzxypW2j>1@m>78;bRkiTRkg&1 z)$sz8>qcYRX13^QK;hDe+p%TamFgvR9o%Tfx=}4&9Uj-ZQ5aE2K)aYaBFp2HrVUoH z)WDh*ymONbJj?fh19kiTY$|2ad)J4v^t`|J6PQ}`tG=n`@q9{lxnX7Ga-Gx$2NxXJ zMH*ou)@o$Z3obit%qo)Sbs228m?waJ@eLx!J(91mC-Ysu>3 zB#z+D`%8!BS9vk60Iyb#SJa{8r36;it&RO7G&GqbAdk%h34tE~bX_u8O%tET=JqvpbLBx0QjVyOWBu zi}a^*&%G_;HM**9pjJBBGNnj=a#y2=_mZt7oE*C8Ea$WF=z`$1u_GgrYbqoKHz8dE zibpej7^u-c0wQtadk4NWO7n+bt%2g`;Y|Co2q|};cV&8gdE5#OxpKDnR6X`kj8}W; z_CZQR(Mz4WsmoLAnY(^|M^#j=10Sb*)QR>Wb#kf(K5J!N@fDDdthVnk^1{O8o=Z8t z0v;C!PAFadTebAaJ2_uW8hRRSV`#R%N~g(XfN*?dH#4^yTa?`0T!r3!)MkhLI_n|f z$!nxBtm5^KhtbLj42RHD&(><*nCDmVzUG*NVw3vkon%1n!K3Zt2~$E;Nb9ZrE$&~n zt0K1%u#NX-d|`Pt7Td3;5OAlnL2ouYP0x<;Rh8h5|6Gi$z>RLC%vT;2=;h{R;iO|? zOAP!!GJ5|p*uC=LS#!U?e&?J3PwQnE#*5_v%!7S@ZJ?QCHPf+X^@`&89HE+W^>PGT zW~Ea~V)A-MgeIr7^JeO=Of)BzZT4Ij&zaME1kL+*>&&xkS$FZ89(!^BwZ?6C*qoiN zGsx{WS;I>n+-w<7G#o4Aih7yJ?Sk?22*Zn0Z9nYphF|6WrU1^I)fz5ENC^ z1g#_OuY*7bG{D(20TP!AOl#s6=I0Of3yPm(r$!MK{C9vvj@O4R3uJ5pfMH@{5(bbL zI0%j~hf9v6Z)F0nez+y!Ll30*g@)~<46+3Tca`_+dukFb3`C5AWG7}6=NHo+T$rEE zi(h4H3VlXYFAf9)tp3(!FlW~X0xM=1E{@oTBL+av2M2&1Dv}4EKq?uattkuuhHx*= zj@cFR6iRdtPHGPjOYD{(E_}!5M+$@sf}Rp23_y(SH!{G$8x{z{zlHM`K|FwLj~||H z4lF@qFN~Nl%WotRfW87$`Bp547$wRHAu|kY8ej(JNqBFMS67_+d=6~EPZbF!ngocr zi0>Rf1q+EkFWe1=8XyWbVIT5rkl8EDylQk7W(W{y0T=~5kQhk-Gww5wi|-P|ryMtA z)CdU9_7JZ7X9iG)kdWaf0RcmUo|L=*YXLYqSR5zHk6;A{d`$ee50Uq+_ivB*fI(o; zFAoBtJ}x~7TqGm_g1Bo~5=IP&C}_|xv_tHUpUd`Juu3wpfc#XScKsX#u)1%h9xEg{nMTr(x~aK9JutfKzxL_iJr zo(1s!Uoe2vU2~^;JM05}dE;YL0Cax;WVqjSgpmX0k3UYo)q(~xvHGnR7 ziX;6&eDF^=xBwKGK(T(fJ-jd^{NoVfZ;-wtKnmiVun|9=AIJ&+JzuwMup(}KUEN+m zd{nTL<%GcF*JBfI4Ut(;=xzNB$ z-JUoHvSj4}m)m8mG9{yKnBz)uFWvO%@2fgO?d{>DGlpZa)7J5zK~IACxLpl*|s|;{>tX4t-x5^W*Mu@?{NBi_Y?UwiH!b z_!sjwu1Yy%bF~(cfj95Q!8AGReGI|@v*^xie^Xj_C>h3{QoN8`L4K8phf#a4FmOU{NVIJY$GAG$#4>$LR7IM}5VrL{p9fFL9H}mfm2bVu3o;wyn zjx|ChEHshRZ3KVG)7KDCdfa>oPB!HeR5_Bat$%ER>Ndl>(9MXT(YlQ;R&Lex33Ku= z|Bdana|62+s;qW_XqzPE+KjaF;JcK0nh2B1%Xr~f=e_bvWdgi1NLZnag z3I?%)w4rzPuqj1<#L^}UZ^kVRa_jRj64(e#my>7kHwW)aLH!ro(-^}je?Dr)*7P;)rrsEqF znYJZHRI$}z^t-lB8F3p+hS|;!3JLK3kN(wix&t=brcYC#qJ{;S^Z@H5Qsc{voE))0 zVZqM)eCs8{W=nm`N-*6*q@#$lGiVamKQi-s<(t4=O7EfpF1e4Eq# zGf`S?29b+qk-|@1@nlC8x4D#fOa(ui)33hQrut-M%*I*UF1i{0M%7Y(mt}l*k01fl zkAH+}zAMmv23xI0Hqv9y z&9X3TXH{YQK1Khoa2mO5r0&+GiM;HrN^Kr4U&151yU-IeG-(;3+{A=|YMv8KADZ&U zt87`9m1rc)^3FDT^onC9d-9{@I`e6dB;@o)cPT}lBlp?xWzgxw#8YtwlmpcnlpHO* z+e__(>jhsRUoU+{YDla+P&ix765pQE+BUukxgP!*n#r6}kyc1Emf>8fpzlXmTIHj- zeo2#yo4gZO-qHFz$$WFCH$)`^LSLAF-ylHWp3nYK26>hg`_2D?Z z>E>8MK2b;b96HmD><_0cP<-&Nk`bXwa#-f1B82(|CM z$UJ7FR;mkl&;3g88~Kyj@$nwRutcs>V^21+BH6N5x~XGE`^X*qr>~DRsA#%hPi;t- zKRL2dJXKS06Xt%t`^AMgzlN}Cd&~Ye^Wk@3ks{k2ahawjYlHrpltW~GV*3{2@{J8V zQBX&S0D5iNMyG+%lR_{FDrqfjkG-bKBYnL@QPc*Vud3UG>kDbiH;zw0h}E)bAN3ux zrwYyN7D(%)r;QRwWJX0((OaafEY^igf#P9QQ^bxu3Mikegac z9w)AKeb1n=HiybyT|F5hKD|#3^Xa0AzP6SlID)t`FvbH~<)jc_Ey z;`EIxVe$C_8;<9bIyPfoa$9wk%2j96%DtFS-x~3Mr3>4tc?RJ|$qMe&^LFnBMM_q( z309H8gOIZYE8a*4RSy16fgSi>)fW%P&t;$19Xu4z-^RP1yXb}f-d^^ZTWc>#r^Q(O zj)(w{bk1VAB`Ze^WB)TrpSlA3jOlIK)NPs?-crHHu#6KuF-=VQ8u+QgbFaS(M%?_+ zWM(UPf5JmAz=qd(=^jek^Uer6HYit3ZDsfm*_G)daN@JqvXO0sCi}bx1@obR-rxPgN)A?}{c^wS}EJ?S`Up$7$ zyP?`9Bp$lw$JM3XG0ZGg#K)Wep{qr8iT-nNEEYHM{OR)1_Vd(VNi+h`OBNmUr6;D` z5Mz2;!_5tE%>CV%g}M+9R_cid+6HyfZkR-;y>cH#%DEqWWN+I3n;M%PO3& ztt8zPH;u-ZwHQQdtBq1Aja5=gjWt#}zgoWhpf9M5@|bO0OJU(oH|gf%^iGbwnsO6r z_?6H!gZTydv}JCg-PJ0sUc1|+@9!rMor&Rnp1nPsRX$$6jdM7Lid+rB?% zo>t5k7L)pt$Bt9eqHH=wH-`&8#vq=S`F3kPJ7wyu&wWGJ4)|*IxwX*tQVr$Nnbls7 z7mnc_sOoDz$0*A0yKBpDkHqH*ED(dY&Z`^xcO_t8`&D-|*V${xD8atG1H+YZq zp@k&m&k&u&di#&wV6kNdRV|@`wZV_^=XW2csh`yg{ibqf1cy3{;x)BZz?b_pxG2V* z;(hBxW>27#*S?TY^@6OhVW1=e*rJ4nWNLG2$DG+cBR;5JqRA{e-oBYD4MR+3#P(hV zM5-^FYzK$2-A_3iAeYx|!X^Zf4+V&rFY!cG=m7tERar^uc zR}GMRH9F?k3Nad2qAy(Ef|{3eW=E+pKTdvRLK#;i-M19h-+eO&P><>(3UwF+B{TZ# ztzPDJo1AZMpnyKt2&k1UFiaCF6Fo9|=B{#F@e|I}-m@4c@nq6lohI_~S!XWB4pbOj zXxO*Fh@lJCXT9{iy{r(dcV@Js_>Ogtt?wUK4r89I?}_ADyTyE0pKj{3k%HU_QVe@p z&(nVa2wwew3T19&b98cLVQmU!Ze(v_Y6>4?5 zav(28Y+-a|L}g=dWMv9IJ_>Vma%Ev{3V7PBw_|i9Y_}$yjyg6ws@S$|+h)a`RP1!z zvDLAij%~YR+qRSG=Y40+nRUMT{>+>owN~95*S_|?_I=kXa$+S_dSNpM6LSd%dk{S{ z0}~HG0cdC9;;iCer{KUXM=x(~1_b=Iv%`^-i#nMbgMbe9V#XkI9)PB~89>b36u`m) zVCLrLh9d`vIyibb0WGaS04jAAO=?t_+OsCna)5v9l{vryXlo7-RaDZJR*(cxNh+uVB+c#3os4Y(N-ie0KvRGm(A3=C z*_;|+;otR@jM{HHZ%hQCOVLDLC)s377TFAEPrd7g8tUF1lq$f{0bk) z`e$dT|B^5^bFjDd0GOFuz%eQ~fc};QQ2pPj%<$hQ@_&QG|1ARlx5)edChmXL=zqJ! z|F8G?zd}p6*xD)>+x=aDf4?z+zmJTuJ>c&<1CRs!^U%21{eM!7?SQr(|9?sUHCogB z-)u!3Y|Z|wPa0(WcO=60mVaeoVqp5W5$G%dbT>Cs0)kAf02ao!f9LftySlxZxsxr> z-u$nw{~9TPo|%d1zxdRwfTlL~{|LbTZ8SE^M9V@ zjX_R8cYyBSzL}W+)&2kc{O3vkzrcvwn>v{Nvo@+AV|%l|oAw`uf83@nPELOX{@3OI z+x7oC|7+*X&E3sS;g%O1OnHN>Q!~;)HQ3pM<6^qK-OLb!!H&gsY6W@zRSsQ#sbO2( z+CM}`Imx~`#m_V8%4VqnR6jj?@`PKXmh9!5@gb*3LsFRq-9VCo|-jyf{S zq6~3n4Xx?&7M1HXei@8?w3S*6+w;{`54U#mNg9Frks@{vMPkY>)klA7CBH*9_4m&c zfYrsO6PH50sK<6cMm2ySLq`rC;HEj5*coe}WLPU|nyJDqyV1js!RUz~OJv>IVn;mr zS=f`N3Ib|PeAyM=1WeNRf0}pP^&EfU5eeZwhty8@T)GMvMmB+7Dby>FtDDSs=jn+INi$EYH~= zy>32$>3`@%-^Dd}XU0}#AEzW!-N6Kwcl(KXEIm{KunmtJ&N zcdy)Vy?(($ulntAw3Wi)mCdx$8*es;rx$w~v(+6rE^DbT*f^Hj zh#>jAgw-wH8joL)rpD=UYM9ClFBe)nc8p`wZDFJ z=(Dn#nnS+(y!nj~d5xNQth3})OE?rZ!u5}=)#hVH8P$1WMDEXbY%h+_lsb1&`yC8c z;^+!vx_L}hLaD|*n@6T((1zDkGG-1~t3|TMHuO5a$@?ncy2M;5n-YY5+A)P_F3|Vg z)4c3j7dFIIWvoK!f85)a(l3MyGKkq|v*=#}S;>&7#hT_k?8S|KPcUH}f75K#6aXro#dvHh2Jq4w{N*8b=+gezNkJjDQ)eNuW0u{;VG&TA(Z2k1)DAd}OP#UoGG zU@Rk~*|*PN^T9&1i;^072{K#b!Tlr&pXk}hL1_rGrtz?{nhA7RVhtFQrKew`x;WrX zR595OZMAyXArisglO%9v&nw-Yb<6op3cC0Z3Ib3Fk>wBEP(c$IAs#1;>^HP*4V;=aC4;wj;#;}kTBF=`D-T(92?-5E>s%{`>2%J(8og#RY%o< z+KxlHtq(i_oV)@)*Z$brMKax3BHSXKfj@Ey5~O!KlRq0fK!TMRTD$awUpunGJkm6p zO!{aUHQSK7$JJS8vNJqLxWER+tR6BXa^m0lN2hVfn11K4fLimi&K&c+KtS1=l?afM z_$`XPBsk|92Mpe@oo_kULl~B-rPF5%c|5bjZ%*+G`>h~c+tsQVtVG*Q3(EfdLG)i* z#|yvCon|TNAl7Y|(z;H4lY+W_gZlrF@WiVJY1nh9>6hcx^o~QykaO2h5!t6|9STX% zP)AOMEcYr2(3Q|sbe{C-AZK4jVFJ2F1##9FX24Jkx58OV>j%b&HXM-RiW^?`jtDUs zv#`-fmdV%@EcHQ~>Biq9gk@Zt+l~)%F2;J8I>xFvow%P#T6O{&uOiDEEs~QXmoT_T z?6BF+87A?$BR9R#+CsD3ojr_>@yj@*5}Vu5m4tSSh?^{wm<@UiOQVz-44&;+P z^=Rt9%$@`-E@Eu8E|YVe{&p$2*a$+;q_YbeVESX&lqn>umHeeDM9hTf=v&|Dv}Lr+ z?~5wK_{n>~n`tq28uWlCUD&Wb+G!-RZNS2U^dAcadA|;p{NS8{SN98~H*VB~*5Hc- z`I~S8ge2Lk+?x}J85-Fe2-LoXjyZyL!r|{PN-1obFto7@1%J*$$+!FT#Uv|_OX-D# zsLhQv^sCog= zNT6P-IrNQ}i3VwShYmw*bSYZ3kTaYWj&jPH4Km0+Hd*;$1Qzrkupf(twOWO4|%VlJ5_eizwM3S3Q?Pz9*kInjvZ#bQS)^xrgUIZ zvOZwDh$L_S6<@rWfWC&dl_N;v<6%FMz9G?na7~5gPl1x1yQY?e58bAKe%YJu7c~G< z!B-X$3mV@>E#45Br~QFJhMwqny_ieFhAP2p?ZPp_i8IqG&x4WaI$DLgMR^&VB7lJQ8#;+NqA_PhJ?*GILiONKR$tRzm9%V+*ae(gk9OQS1(z*}C`kxC?I3K7_>Y)s~t%gJu7wA!h^f0rYnD5~739nQWBIRDog$f5o-nkkV!<2Om4q)WyNspFZ zp-}pUfoygR)^e)w7kAzo67?#E+R-?2JM43fbr`+8Y@slyB;c+@UD3<1KUJ5}yHqWJ zQs;K2mt0NB*@1bBCCVSR*5Y-6R&4b2)Gi5mBl2(Q`)Ik*UORB#gs(hXw}MB1GIWg6 z<2`2DtPC6wak6ya!kWH+xoD9=pL;LJsRk?`Gh^^}4-@D(Z;_Dq(E3%kEOnEHi1(@< zqHmXV%#4T!5TUw0C-(6h(aXqMWq|L@fd_v9FRFs;@f$}0s`!O~<(I~q_d9YR+u(t< z&Kp>C^plOvT1VB-%vIlwK=x#SG)kn)%88gnkZJyKS8Uhlrm~*F%yj9qV;k3-nBOF?YMt2T@u6c5x?o#q(rM*d~r*jU}O) zQMob}!m(){+FU5dAp7Fxg0_ox>a0Y&T)852OKPqL7&sg^CyftoXR+g}4(akhaSRE= zUmjuABF8({tmSH2-b(9?Hz)qkyNaSgh_6&Gm)HYmG|CsodgM>=}QlP41N@T(~VNXNlPlpEiIW6>lpuO6hLWOIa=b!KZxzq|frb z1|K9SV{4@)`&`ZmUsBfLl1i`ya3|(U##1tQKe~vZK*qKn)1#S+g9MykGlT zBIuGrs?2t0N)?RL4Wa3PVs$!`n5f2!ZIQyFzE<;G)4K(4tU2jT@$b)Woi67PmoUx3@`;2c|Zy}vqLDXQYknj+GPdG50%3Xg7*2zm;W2 z+TVZHGQCR0RaM2YWtw^3*kdg@shLa8ql3{i{4;bH%4rS-haW=f-DQ#A#mN@diZo9CncoO@F3(oDmv=Wn#U_{K zv~f9e6)$?NSxCnf64SX-kFf!#FT?BZLfBE`u0$;&KDawpUl2P2Kw<6CLk0{wuC+Kt zGq-%leTcN*7Sq%dw*N*4RT8AeAoMeuC}df5BY?cgVQW6O<1^>yz3_PCDw=8%q|aM_ z9_@7^2VDpqO5cK_RqX(~!Pgs8fbVWoVJNMp4KNJA`LuaSjx@w6_E{BGM@TNPuJz~}&Pwfy6&YbX zJvUQ;HmIO>AQ{LaLKOmJ`Q7iV@2Hf@8RTA0Q%6tTx)tea}Vkh|hCZ~AW zfe+aE;{_{^3#2EFD-Wd|xoDP&4JW4_9}MmTxEMM5lTKO#tMsmR?OW>&rLg+w@4i&U zxUnP4%P2Rnz?uSJh=pYs8X;t(LqlEE1H`JB!wvq&lkt+N>jyVA*o%YsHM-8sS-|=& z82JWLL#HlwF=W3*j6*<4aR;x=7`AF=wOtFIcV4UrSMa27EjpA-q546A^(pMHuFj7} zyZeYq9N*X&PBFM-Jkx5a#Ox@qLG@|9I6G zOtGJ!C}>zr1xq`xS3M(TFka?kHac76r0ul#LueZ7t~XgG)BCr1%zN zqI=J60IYbUGMVE5S(L3ly3jq9-tbga$g4LlKExAu34K|OeB)PMc$*Qro+C`xD2qD; zUt8<_8>QJj{h-IA1KXeFsgWC0;cyq&jCXU_ikpdB=!@e+Q>5~d>1A4M>VOuVH|sex z5Vg^D(+Tn_8r47{0apioV^S|?&D13m=^5JSX7@RK;;MhUP#F{Nft^RB7!%A+HQvcd zZXQnu0u}eS=+K+NeZ;HHFrX(|5`ytVKo{Lw-VV%0xc2GA_0#b>mpasSVR#NWu9iyl zYcGWw{RxOb$D{?8b8^sBlI@h3vgNi!yYdJ5Y;fCr7E4k1t`WKXI&b95U z)b6&l7-SNyDk%)1kd~-dk0r9H@e_#|m;Ef0H&8sP-1|0+Cd|`}vE)*BFj;ucZJ)JN)h+)LMXMOc*sv#OjL(J%iPS>bHR1;;MJd&K*y z^RU8ZQ;;^2Mk_W+Z5zLMIRm(~O;LEmOIb!F#CgX1BP}U5icRwTdi*wxQP_*7@pe8P z19q}@naupkvXs)sIqf4Ds4BnZ>0+jruO&Wmm;TgrMoya!i71ndHPh81-=ICO1aT@1 z5yenxQY$XoLQ9_+LI0ABV-;9h>Q#~x94|??Zbi)Vi@K{0EtG6sgw_2pChu+MKbjWf zzHFD_=toSii_XCis+)9T%aAkqNOWS#wl&S6@R_<|^D3ZZQj=0^w4xI_5|3O|7)3nT zby&A(=4JN9)yfN!QXf&+JR-U=jh%a*El;BVUa&e{5_hr5csh5XoE=A}Xo4<`_s1~5 z!h?JgT$xucsL|}P3IBaU8C{YH`b^x*TZ^_dFmj2diwX*gg>8aF=7diDO zN)A_|0wLxKD!Ks488*8ypyA#Oe*;gOmk1{eKhK7nCsiX$o72trcxwoMQk?DSXcI%K zOW8_k7BOYKfNhWo&GRkaB*B@9XYy!r&;KcmcPCHmTKt%~nTD#X9Dhv&z>F*_(ycvP z-pHWC02NyuI$NaY)#BO)m039k72jtM(YMk{tWSh4J;=x+pn(w}qeJ?uF+6FV%6zbT^6*(%_W#)sn zZ-eK7+`?&pMr=G5#m{duW>`3qI)54&CDKeGu?qg_D-)F1g=07{?HxDUS>a$V_fJ36 z6YIn@f8C%}FR6hbFspz;mt|jPXRjHt&6OTl)}#Ua<|+(p4sUCZ;=Ej3AN%CG7_xv; znamAD^X8Ol;W#r$&lFM1<}~q=HKEL_)6Y5YVXCP1(%~X{+U_y>>{&0SUyIqO#{6m0 z77M;U5aa{dk}S(h4-I}{>BGvr;$~c%Gw)q2I%Y>W#r)r7$es!#ycq$v6{4&jzg}rjP zP^gI?73cf`&{mDKyvti`rAP zF&YfcL`vH#9&_k2N0CiHcc8wEXBO2b%#{zgi!TH!J0sM&37RusDw0aXXaYFu$J4m< z$;y6+a(U)3zqA-elAg)B1g!b*TY=GsoB1nQJ_sB=6 zVw|lc-lRs#d|=W_rHAylvBRZhdz9-RU9C~$fXR_lG$9tcCVl&oTgGsmP)Qhrp%5Tp zs$Qf9ndNl`zHdXK*e*7Qw@4I9b8UBJUGl~}5*T??;V&ChMPO2VKU#?g-)v<^>_x2; zu(kpGl7Z^Y#wwSdoX^xbrN=9t4BH1AY(WY*N=%(6*ZYxg>?aRyNHH+i+-wdoP&p`Q z%KVXJZi=?#4K-kaq5gV5t~`VC82_6JhTzvzWv&Vr8teU;b$o{8#~^*Vj@N0v#FD3} zG}fM6C8r_i$vO}oy&o0RwEVYc=I@p?%l67Ih!Qyb;K2-R_HNJQr{is3iQWEC{^ zlOr~0&96vdwM9+nPlkvZyR}ChVgWih3KfgLQk-I8V4wV2Dt7V8&(#=D4b_g<v(`iMRooRGjR;D~htlc%7HnyTtB04WXZ#A>StbJs?3^KNfw$CP zmFFQXoO2idx=FZJ?BU2!!FEU5Cb-ly)I+zlhxPq}(BU~~S);R9T-?dNCh?*n zc0G#DYcsstz)JEpYHx}#o|mRP`iyr0U6j9rfD1#3HamFl8@ED zA2@lINH3Q7m8Dt;1Tve{Imbz}Y3f_ZQ+(Dmz=Tb?O&gjeOp2GCrr!+WUCa>%N%oIe47tpMjC81F3RXEm`l)DKjOxbHYwcbDM?Q}vp z6n1L_xqcPQSxe$1ca^aiTBtfop=1p%w#;qmY3?XYcS)@K<2I6aE{zj_D%=~$bD8_7 z5RXy&aAmKX3g@|-jmmYX>D(B7)2#FP@SBB8dcVXK7qZ4&eR~K=U2uD1gB)_)Lk|z( z_ohWV!d>-#M`?nwh0#pAb+lWLf19Rivo&!~N3A!i1P`~sjR!ZbozElc;&%-Of4j%Z zMsuIZSJHENesS-&(wq6N>92eiSRVAnD0aS#H@BHb7y|W$@!*^6Xfv#06kiT*_Y4lU zxU$s5zf8HTS#!i_Zdmu;kf_BimPqMy(%w4N3Su+>+|AKqQ&61Qbr zpE+=%VDzaYW7nVUG8mNkGTdaI!N#B&YKE$LYZ@UT{&)p`He#}w!M!WdKdLoiX$k8+ zg0q=IANd1w1b<_kGx?l=15{$!%5X@$6eHxq%rlFyM^PGO6&vXZrcerlP{qRLdb2(W zSgVn^O)uBaJNy}aD8X0R>0v-(v;a_WR(%3`JMrccSs-!4yf-S7;XRL-Kq;$)_A8!$ zlixFl*%FLq6kp^$DFk3xiSPG&X&8fDV_>QX{go@l&IimWTSs`nqM1<&3yIw8!f265 z3-fsd=aFSn_}MD}?FkZcz4ipee^URFWZ{5>^<^=dSpW1R7q`gJcuQXHh0bmtA>fOM z_jg;O9f1dg=zzOnEwaGxxkW>Xf4U4=&IfbzVQ_ScPRx$>HU}_%*qRbU-3S8ssrPB*Vp=n%lvB<;((;tLdBV%C7;QBFW?ooIn;}n4fz`+ zN^*`fi8Qj+Tc3)eL-=JU=cLxv(uZ*3N8>R3RTo4CMsDo@{jzS8sCQ7=hQxWdpHDAD zq9y;YQZmsUg=U^gf2C|h$ZbSJT=|F54C1Ph0I)QX2n+W7C=qIQ@mrQ{sCycwHQOd( z#Qfe1Y$vohboHz_-(5H&#@_S=Xm6vLanEMKGu(mlCEjx^hR_DjgY?1^3~NK7jXaQ^ z-C=AHBsq)eEpeK20}?o$y~-lCj{olmxGg^FcQHh1YPxKdht$E%0k`5#SAWY4700># zF6%mok2X3$`F9u1*5984s%I~49;GB`(~!}mwd+vB;nT$PZ#+&O1sptUhdhbHG|4LP zU@ZKEm-55L&qvccFo>cJ(XP2g=|A*a>Ef|yR=2^&n;?2&jroN984y`65uZLB=oP5^ zPh~I|iokX(O4e!@#RiSKzhaekf+QrgsX<$_nsAhL%#vH{{ZV06P^$KTj?aT>T1HkM+Z4?>~5jxu9~W0$&4xRn)liAERHn zWP~tf>KuoH-sA0cCPFol9x@eF8vE@N?n!IiHw7FEboEJ1a+v)f=kwb%v zEJXUPc-Awj8a<1hbU; z-I?o-%l&cDUiWLg#x8M9XwL>Oaa^0oAE%i2`w+1EGA$S7fHL~`F;=5UpRjOmu@{mdXd!KI#>ns5t{PZeknW8-!MImQu z?h6$G*K+)|Tjsv&YCnHY-8{YPGWdMH1;=HdA&FjpY~Yl1n3^w-c)<$N74bXkkuhWH z@`c+aLGb%ebtv*Cy_WGSE9Cd%7(zpKp05q*Um>fl(UetnZQi~Wj1i3{ngOiJ%)~9t zTgA1V&6WUSFFVOXdZjeAN2#fP;jx3kF+^6_bavfnc#fB(k>EixLu`qZ5DG$X?EH}; zeB@8FyNemtL*Ka3Q}D@ob)a;U;dD~;c-kv#L0m+aoxoq8>+FiuotQsg*-2U7DjQzr_-dpw8i^w6WGiDY-oETAri_w z+}R}9+=rTJUiF3(@F~#G(-3+?bec5v%-CecIYTBz@U%Y)gJcz44Ry8<@Qp0?-W3@9 zfd*3p7JS5Xff{K$_1t|9)T7a8-RzUjZkXXQNW<}!L#o8(QJ-FshUU4TJIN|6F}@}5 z4>IG~UKYWlcB__yS;~wZMKTnZ;mKL774U$Aw|(H%4`odWs!{&-q-j^jh2zo5K}Yr{ z%|p^nk)9^O(ow5@Kmdu526CXsVsqYfw)a%I1j-#NiQIx=oz$OWq-a?lH-_>q$aEZi z<@h2{f^C;UoO(Y0O*qdok(s>seGp6z;WkF#Q%5pe_x;kW^!D)h?q7yU2CI;!z zhVf{3zv|^ZTaQ1>Gerbl<#7DUbdM94+>BdEjnnQ$9L;OCp$rd+yb_br*$n@yduX)+ zTV7v=WAwgF;11&*7l-y zkk_GSd1dtqL2tCtK;`>h-muh63l~cuHJ?+Vzi9Cs{D*~IZ{JjaQm2vbkdf&25E(?^ zvt)$P7Y*Q`#9BYAwBK;@Y+=D%>Y_L{bbx!jD!8gSr3~e7e33)B14QH*2Qt*Zw?MbP za@nSIPZMj?1D|kE_jCOnJScAoxgUoscTdDo9?&xTNRxr|m4y?UOJ`laiT#kEPevDu?b-kc+i51`FI)e;; zKibRR)VN->8Fa`U<8|stLSR>mh0bAXxg|bY#LI)Q3teQQb*3 zU;0(KKD^iNu0@ym(jamT^qXQhq%<;A3l)-ywCzevvB?w9-Y)cyX}rxZnz(<19*}sw z>gHu{$DWjAzG`kNZ6nC@wQlg0^(CN@lF@ow&&90tCKo!fIQ3Y)G?UQcc)H&gQ!@mp z=~c`WP&|f})Ki|aIO^!p1DcM5JkDsX+D*4?o!(%pVggWi!uofWpW_W%Or>q@Ie(=t zz*FT+uDo-nNPKrVP)ouN-*5V-2ho19b-L@y_)c*JB8zpeD&E^ReAnMj&xD z``{7^({e@FUthy=QG|!Z-gj`=xDOUszpLx86Y0j0!@h`@Td3jVmK=De9C}iz2?<^I zrbARt+6Z2R2Kh9Poh}}fnRZWpvXgq5ty=0^(^4!LuS65y>vGp=NlxXaSQd8|U(Dct zKC+ldG~+MciMqQyNt;dypMTE-0k?c?E!9U1WRQ_qF~+AK46Xo;xA;~rh30{!^ZxbEFN&^LeJLL9j1Wt=`=t~~8*J3gToHYRh$Oxklfm;ehKa1$ zG8(?h-_lcj57Jtvc-iX~RWQpsu~A^8Xh`2N|U z7sSlZ{T*}K+F3J4dBoJ@&NuPejv@?{o|a8M)a8%W1#-O7`|VXJVUA-~)QbjE6_|Ie z{%XTYdBdk!ABAQ6AekNJYX{-(@3ZuJA^~kEjl*uMBv!3VAJ()lev)9v97*wc@71C%<-x*gFcy!J2dYE07N~M%-olkt-&=Rm_B1fYD zqYK$naEU;Q8h{Oc74X(`Pg_Md9C8le_~qu|^20}BZXa1z|Ihl2AoH1m%raO9aKg)l zztscSpYT8zous!KF-$!$zzHF!e|xt33xRecoh5IsYBNFZW?SoQX6>Yan2|sGxoCZT zpkGWT+WF`Y0c>W84em*&0{>SA+7&4_kM(Db-w|p3_jcp72Uy@PQHDcLH}9+oucbuk zX7O@{(eV-<3osClCB7}=NhF7qq$||+X&THCe5JCZH$;h8-;fd9RgQ!09tE_DRl_Oe za8om4SW)8?49!IQOHZm&zFWi}K8v&tVW?$WRN6H5d>_BqLHLIIEY9Jei> z2!jIq;eD|`pnF@rk+I~3d`rz&HSscyB9u%>ZM25=F8ej%n3Y#t*=UpHTPU5Y)*n3D zwgpJ5tL}Vj#?W5e1q}ff6j3ebO79s#MHYydVa&*lY3STi|I_9@)j3^~bj8+loOs^W zhR>lrHcBJzG!TOlOO5zYk(=+-m?u$Lo$}jgu%7l*mOI^RQOe}$4MLPk9__F2fVuXQ zRp2-H5zYVjO@8Zl8~4gHNi~UfrNOSCv@^5h!1=fqN*^w+CZ>uwhcy>CC)Tmv1I%v<9a#>0%e)=%@bf4_X_6hbRpJYV=A2Sd9dltbFLkv9PFB40ei+a-d=t|BnPGY4XB0b z58bjO;HccyuuXO|#UjfCg0nWOoPfc&;EInRZa9<=R{+VN4Ozm`W*OeqA2qXMt_vO= zxuvqJKX%G_cSe0NTg(`?r&D5=Mbr{?|fx$Q=l7~UWngEOyX(<;%)-{0o%tE5i9lnI6-%0R!f47@(> z6);<%ZzFw0V_gu3842asHZL}yWc#&pa&0>=as2sK zHP9?y`mr@yCkEU-x`_i-5K{ER;NoO&Ff z&Va^Mzy!y7ehlSK5gpo*Db6G=*+toC@T>H_R(iHh$jJE!gY9(9l84{g4Z8q0{Z(#+ zd^L!RlKA4?p9~{IN6PLkz4B*))~18;Z7$qPl=-Sf`Z22yACDPCOR?p!Nx@^?2Qq$5 zcvg>pz5Vyhcno02H(>Zh)xL&zZ@VJSV)nB{zv{>$fj8+J&?t~mp)SegF20ALMe*xX z`7889wf65rFYQX6P-58CpkpL=Cx zQ@`}^>@gwG~B#ol~l8<>F+LUjPo0FOmbw;RkzcQi8pa9#OoyEz($hH(QxHOi{Zg(zaM)2&dJJhSn zMY2`j>H$WCwm7%Z_&S!<%?>j3nIEY0hsSH-8xdzut6MCv;wbwllw762g0gu|YIaM7 zNhg#k=Cc!hj!~gF1NP>s@e|PwA#M*0B zeuq+Jvs1v@?}XeC(2H{-H~kuXeXg~c2tqQVtzZ+!XgotR{Zx1)a=3=CX;p_F!!>I* zgd8M01isx{pgWQJuA{yH;B4){oXAZ+E5JK6;*B>~AZYoZRf=v6Nb@sj-;efk@U&Z! zb&?OeXr06Ql|I`iRpd~tSf)fv6o;dp04yYrt$^e7Hk?qP*EACgeO1U~VBL-P^J*RR zsA^}%1y7xI=7tuCXQt@&BZ*!9Gr(1uJx>l?>dZdUeBMp6Lf(ttibhI)_!1}OVSO%J zSMfPThLxn5l2eE-*WnO&!Z^c{5G|sLE6G{a#2AC`e3Iu#?=8>;O>vh1>pn$0sz&*^ zI^!S&f#KE7{D6A%doWmt@bQrmntGsOK+SL51exHYOXa@GPlRX4cgUQbiz*!rJB26n z8Pp?3KI&a1y?Mf@juu@&2yf^>A(40omvTI`NYm~{@GVI9m?G1K%e}5ps+a>bCPOOq zwzWJ?3RZlKR<2kGV4m-<%szU1Mz~tkd|L8CT7CPcZ0hR4oI{Nxc2BjSw8KxrEz-S7 zV3>hGkS@=9FDKQ}@kx*NLy$u}xhEE{V9a_9il8-`Nde8_d1f3DVHAR_)f~nipJsf$ z2FCnIRqgrGn2({dbp+nYzs!I;iD{7qag1VFdN9yuapt0xE~NnJ@a1E)YIL!esNtFq zb6uF}OB^Aqj6Y_Zc=Amr!7Jv+Go^t4!J%y@1S0nALS79kn~QsxhQ$H$08=jOM}*#7 zv9dh_KUr59Y3mz?l$;wBw8W4Kj|YDD&eQVS!j!$6<->-8 zjY$NQNoK#fw6QgA;Uok6)|>S^!O(Uda@*2It799&uH8c_EiUGrSI1^;;NRi-VwT27^znm-LMq3nCDNgUZe zocC-DuiBK}g!B0ZysPM$>8TFh=3df*%i893QV$D?9+|;D%RT?H(hatm$rffM#I-h< zB5#ld_RQoI-)UGB11@CFST1Jia_NGr^Iof1@_B46zgKl{To`Mz@HqOXv-wQ^j77;1 z+GdVRm}thXN3`4^p=Ms2)I|smTt3#NM}n~KX~7<_inX$ zGSi2x1UY9+Y5-hyd9?Qa_z!#cAKtO=*ZMAhl z^@l68W{DKN(@Zo%D=^gU5QvqOnN^hxIh4~o{$URJ)hDQmLX=*6n5P9ku;3t8luKw> z|M{dLIduaHv>JSdEL;{m%{fNeDPaOy?*Yvk#$`?H^gK)pp zvDv>Uyq1d*w8P}iJb~=m0fxS?p!+Kn698!VFcq~6{eZlCF*%3g-B%0JXGN0qIN^H6 z?+j;6%CyO~Uh(I#|4LARTRphhUaP^{V}Iqqv(N_*))sgsmed>(!5?ZcR(OBUUhM1Ac}OZdWh*M}1D$vr94G zXTC3d@E)FPJ)Z22#h3yOXMR=$wn|*mENYsvtcyI0hKE}wJ>>>nzfsIMk4pWsYj29S zThcAlEA{trm4VMszjX_OdzR;_+@Yv4r1x)5Y4n^CFOA#bk26EncHGpi%7&(iXC{Gf z+6mT%Lkf(>-MNCz7ew1m<(#IO&I?prEeMx3E=lTtyRg-$NIyEuSH;JYCE4*5=E%|{R%h-W!g$zB;@myPCQERz9CX4t9J6M`G&JwKdwhKW7129~ zuZ_!hAW|(Q08UNlO>qnQ0sROh5XC2PF+I3zCd|FONT_U_KbzpewUOry-@jTju}f;W zat;GC5y7-W*=?qTA7z;BIs(M$kbZ~pZ&z+ovC@#su&H0w5}ovPY3ILJ^8JE-j(475 zQml^f4o-|pRDZe3tHT(xMIg>%kA?#FF5p=PqdDwKFhO9~-K-?*>XBY!-jI6$``9MU zuK%@Z=-8u$*sZnh#6#Cr_jl)*O3e6P-N7A!vj)kN5&I2l9OLde{*6dtzJs2&ZCqOQYd+!F+Va~DG>#ze$^b!iMZiw6Pc&_sx#8#zGrg5 zLt_1cAEoq%J)cyOS4q>I(I>QEJKO9@r}}*LXG6O+_{vv}2zW|u_rpQoDdm6y68ssI zED56CwyY+pqqwlkI=ZhcMrOvz0fHZ*{ zk5|;vO%$0|W_k9EipD8z>*v7UN2z|Au&XZad%Fu(aE`bE44JtH|KdM49A9k;zr2!; zV1j&<$^^9c`|Y7)#%-4B%A}h^j#q~dvQrd;3sQjrPLzEKvz0$NHRLmbTKGO(Ye&-z znSTQ`CZ;Qcwz)URMgUY`f**#4Sv0QizGHgsKQ2G&XNn<2v2zC-sfZYX`!11BC7DEP zI7ZLd66nZ@48|{0A#k&UOBB!z`xs0YXEaz??z}b#6s(V16QTsFgFsR=t{ zvLZe`b^(8G7d#b{T!oVsZ4oEY8cJBEo{4?YF~qs|axslcW=vgTf{y@~PxW~at?n7@ zne~P$2(w2?Pk^xBkAMz3Cn{pQ7)Soy51x(jbYa?2m;N5Gk!3%_Fira&C#Yk0UNlS{ z`Tl_2*6#1D(EJXmenGFeG;wWVT)HKN!;chLcp2+>h@x?)r_YfaP0@@K8#VquyX>O* zEQRIM7==#A?V^^H&tjs7-;j?8@ex2_3yZ>8l}X+aJ-{E_V2w3Okm*4uW{mpB=WOi| zL~Bk0mFqq4bIftQd$!{9kcosF+MHJ_6~TOdKN5Nus*>Dx+kaC@b`w|ER=vhVg8>Ge z-Nj7Kw`ZK*^(mSGrg&dtei-zQft}~o2Xollx1FtZ>ex}iQU5GSDSiJcuB{Vc2x`5k zz~wlgiG=15i`LFi98moMkK6>7{=Z-aEdNhf0TccIrV}s{FmSN{pX2`xD`2E&W&2-- z?*Bimpt{A#x#Xsm3}>s=M#WkSb!*~(5(`>$B5#Tfw^(~U-)@)6#y&d#ob&LlqRlQd z+fRAWIT{Y-JPDDth?N|)u*p45!N_chJp5Y{nu;20TDob|XnGneI+zype&8`29TCBm zgvkACV#*7WDA^J^Dg%m9Db>IT}%?P)e`titE$K?E3 zTx3lD}BoILHeQF!QR}^==h`FeAUzaYXb96Dym4q1cqUn+RGl5^>fMs zw${h^+d!qnX3`@1k5zCblYR3$bZU5cUk9l0)5Nsw7e&w9(9+;Y&d9(LWRTqE@|l$w ze)$(`68guR_=ipLYe)Fr7qa`u=J-b~_BTcR>*q7~hpM@~F)6t_|9J=W{WXg4!^0TL zD(rU$lR&e;7dARMfAEKHWDZ;J_{S&mqh{x_e;mm*38e%?ux1Hh)SFaU1I!0|#^yf1Ch*UBB=jdR}&xm!_65O`X$S}aCFT8fqpfRfwANu&i~B{a=>-;*M$GceL+!z}lPH>gJAk zLehE1Oot@oZopw-qDOT1Z0K-fl_k}xFIdOIDr)fCZzg7fjbrJ!%BRm#sz6V6g!?{Z z113f4m}^z@2`DSQZO$ zHFU--R00zNBhoeT?#L1>WU|H1q%tkyy_j&Vo;ZMx48FnQ1Dt&gk;OU#hvq%9MI&bV>R7r*#OKPvzv}Y$uMb7y&%GIPu9dWH1Mj z6?!U9Lsk3nKo&C$JL4_2jA~!U)pqLzO$* zFs89zS;msC1>4wRETmrl0w#^~Ka7r_yw?+3X891&Vl2ZlGtZle<(yrq9GWxJO`5T%eWlz zK*T`v;^2L3JYPNlfJC|bNs+=&Q4q6Lz+df7^JXt!5mh$um|j}@*`kwtV)JEG$=Hx7 zl9CaWQ?_qfbfk1o`#Pg?$lZkL2bGT1HkW{!Gx;N9mW{;w;~;Sy zw<=`U)RhhvDaIujylhkG5~>p%dk&g)$~}w^HeC^WU&^`e7=9?s7FO$D4lg>7h#Csv zFH=aHG@UkzqAKE?-tZy$@F6XA`CW!N8Mm$y>6|mWI^km#g7Z9nir|QLNeaw|SpeIf zcJ2h~I}}E1j*fZqsy&xIu$$u~qV=uLt`=4n2YOEyi1lSe zpCd`_^HH(OF>WQRlLM4k#|K>-5i_jLft@V2VK0`1l1@KkZ2>O&UqqX>6OQc%mXQNW zi)nBejWQNGfhKFopeBGZ6&_gjy~EmC{7-di36H7c6SjZ2+SozccDeWa{3^=}nujsE z4PhCU&R?i`Tji`03ETpQH0s`OMPP0A@46#zvN(gu{KU`HG*+a!cGPL$Fzi-m@EdpJ zCf1L(A*jxvS{%s3Y8LA12>22K(YD9+B%L>5@moNxb7_}ODw_EC#ZWGJA*3?;=}Z#h z=WK$=Aw#PUtZp+f_+96exq`M*p2))(|0o@o{_Cab%4#VlzM5cwCyF z|4fI{-`ob?+qt5JkP4@ieUJ;ya;DVlt%&W z87gD4Q}gC|guvYd*kQ7#RN4>lUvu4D?Do;~`1w7yTn~XFI^GQTeGzp2X?gV*-8?Rd zq|@Mu%4}sd`^|^s)6sN5Tzie!krg!&Grrw|st|B5h z)^EAVL8ge$XA0dPQ_>ds2%ocUh4PIk+92TDGH ztGHblWBsBFAKp3#{aExexIDVTK2y@IW{d zxDeBtX=oS0#d<9yKTD2!n6?;p+rwtICpwib+V;YR)#-~spxnJylyi9_$OcBE^XF0NCSR$eh$~`^jjYzaQ39)Fex#BSg&T%Y9j9(Sk5reYrNv3w%$)tBDh)?UD zev7vd`W4*H-Tk%_L&gr8*>2I}F@tLAm`2C_9vE!QHw2U}gS1(6zGP-J7)~wk7Sn8B z0bgW-KChPaYPg}SHSq0)l?Uq0@29sbGHiHx7@qZsdgI8l&%?eyZg&vxJnp$H5Z7dRA%ZRz&{;CbNH+Pa25%&GCZOB?J- zL#O?03Be@KjcZ;M>*>juR+c>MURrRvZKN)Q2EtH`cZmzCtXNf>5WYTad+Zw`fyp31 zyNuLBM7NAL2q4Z<1Q=aP%N%l_n;MzH3hG`-@ibE3Hgn}>zm@AU7%tY}7(7879d$WU}W2_%70AvKl=O+jWBl+(0Ie&)^E;XrZ z5fP)gDhH(;j*p9or9LEEv-C=Do^YIbmS^25%N;NqXuD;Wk z5P^y7ScJ1|*^f+hn`p1&Q=qy+{iH68wx&!XFH`h@NsUj3Mt{Jd>j?DBX13zJ_A8(x z%{s5b2bsX^@en@vWrqtzBA+CRT{Tk%YG^TLkmR`!@MsJk%7vMG(j_;7Nq>W1pLLrY z;Sl9fX5rvM#ue5be&E%NxHkyz+qwMX5K(6V;oD)as)edjqcG2|%vdDiihl@VMJDtr zQ~~+4^!4RD-ai9xQ-9-&K1h#IL@TX+=G_WkaJK%Z-OM)juS}W~Oi>`u~W(%@!n^nJkS{2h>cpXEd!f%j!2RWRbmP6ZB;-hPnRH|92zJ? zZ_e_-u5~qOTDKSA%!VQG(opuX|GUG0v>j;}m1pHZCo3d6zDBU^1e`lRSL)twR2v8B zx~QMxFWWdR$jT5pe!y{=mH+~*>*k!_jIaqvjY2i=pq1OSo+$DgQ2DC~eSE=WmIGVq z*(zLEY5Vs^q3e6mXMnUGZ@5Xf@w9dx$BfUrn!W`O>5(xsvwbnx&BMLPf!!j>5W=II zW;8ed)Z~RCQ*6tM6{Er(2ZI%QS#IaChy*;VyQUDFsNAYD?WAd28F7;CtA5+aU!B;{ zBh@;5vI0VRbZ+3RyIGqs9<&C}S+A)zq0>x;*ww=f0io-6JFK5Bbh9LC^bGm6a zt(q_5o2}CZ_|_(X=YmE-?#p%oA1ZPt>_(*QHNF@*4;!G?MpHBXaO9J z*4jp8)av^q`tjNlgU{36j26)oP#jJBFcV6}asLQD2~BSacedQ@56XbmNBkOO`of0+ z`)hhbB)V({$`s0Wl5_bnE5zlB@WSXyK4?bt-^bcI)Z53)9dkL`k+-U8@oW4yXiNzg zSZ)gv^TQ6Z&nvhBNl{&8zQ!4OCE|5`3yUeO$8;1yDcqqa#&szevZZt!f^}eI|9))Y z;^axOJ`U$i`m&mB%|(aIsJcJvNioK)qQ?`t@KsA!a1IE{+0#N+hm#<{el+xd@8*Z5 z$vIOgK1J>^kCx+-2#(zhGIO0dWxR~@U;`j%$5I`882P2(0z$SVLQ6t`9X1r+X%+J( zvo69C+;(;uOUa8U43RyJ9nurMeG2(->;Hre5Dra*b&!G^N)^!Lw=Y#N$8& zr)GF4d4+HV=3XBm<>U)3#zrEmUK}{5WDJz;)~ncXq;QM!m+=aiFwh%yPP(Nw57(qg z_7jixhh=Ws{KQKSEU$jS9JBEi(LB>0d9(XKg0)LO_o3)5T0gJ%&DqkY);d|q8(d5E zbR9*;KK2Wsh?PW(DG=Iqd}UU|xutgNnoH5MR8;<*0(djrzGn|WVKb+A(>~8DwBPZt zK_zGwY)nMNF}4H>bTB6dcN5|AI|8ge>>3z6e*)eWx`-4t2&=bK?_)_}X;q@7$OcwnC^>#ax-0SK^+zQCl7$ zeg~?zG#E>TDn3S2{DL==b2i@V7faoFQ+h|#nK>CN^=*Wt>!}C$Hifqr$}(29zjz8x zz^ZkUkq*dmKsehi=i^i*{*bU-8k`75@f65F**uJjIWE&F(PFjgyx*D%jsy2ar7n<= zw1d8txXyx%mB4Af;ScY~FDY;F1QP5IJOu87StD%s()aNsyuOc!LR>B;^ZlB`Ffo;3TS?GUS7S|CE2c?DeF@G2 zF3Cc)Tl8Et)A>1c#rEi^JIHK#DfF*aAdRZElQbMP=P3B=F-%gY5o? ze}Ss`KFwNX@S@!l4rxyR7<5{@VXz;vR0K$OYh$^#m14lsUnem?pPg^cLKYj}Qd5o2 z&|*J=Ej#PyLC2-7_s~XlG|cit-S*^*o1W5zgDBA|2U}0~-+ukTFSrqcJH)#FNrs67 zS#>Ed+F4CE)q%2HZ>}l%13=7lmWh3Zrrc zjTp_MKb+Fp@GiMGtaqo3!><_%_8>AAarLZGwvA_>&y>Lz;$~xW8Zh`u9Q4JrZ0%xZ zgn&1KakWf~hjOGs^==rgY9~#;lGBP&GQBa~^^a?zFI*E>#ph($lc!jK^{kefVdaAe zsfI>)T~M^Hz+e;CYr2gMXq%g|>X5z2z-!(Ux@CbXar6}l4B@d2jw0#eo>FLZC>pz^ z{a1U$TSBx)!}(=jIa7W({JA1|1^xi4v*{?iD{6TzUUP37Q(!%zx;#_<<+SV#%mUY* z1}FBlWiZwHZ4Lxzo8;kQ3~^MsU2&t2!-d3am%%z}@mR0)ClGBxSdOtndKQU(3%?1M z|28BX^6m+hpQu8BVg_Be=J1!8s1R=PIJfF;H3MXP1v$xhc@_jR5%ER8(*xIMUnNl~Pv^*-h|GuI@w zsaUtqYp0`d##Pvam&dgeN6{JlW~v!_cs$#D3Hpy`-Z$pEYx1We7qYwM0H4WARU={d z6rAcE!#$lwg%gX1vv_sYEfBxZ&VEgz)1-bxs>%iM<%6CfoBt|_RL>{h2vZXOr5{8Q zE+NQMdRi=P3kvo`Z;|HdP6)r@-V(+-cZ)SfN&?N$b?uKJU zcPF(mXASF#D9)X)93!C8QZQ?|_0>&@I;_0V-C+T9o;zjg;!B%=`xxTUwCHC<&P%11f*f6VxC*86rX21GA$ zrLW~OivxTjkkTe7h1hP$JKYk1&FnBGA`?CtPwAN1HZZ=a7#rbIoe)4A@qA6+%ywIB z?$4Eca!Ib!?CKf;Y*V{zm0HkCq4NlS1-z5iqz?qSc`@et*lQElE)<=(MQij>{;0|y z6fIf{ebYBXauW`89_F1phqY&MthG{?aN(qMhs=&oz(77l(dL%C`CkaoT0pT=H*r%b zkN3}8-l&I^5-gW&@>Ys;Kc|Adi47{Y_M!&D7XOtK!wE$P0Q+<~o-06PyR4v`_VY=T z;2xbTV`4nOrp|v(>f}PA|4v`Y?aQwk*&+a2S=)pt2_(1tJi~Y)OuvvA6}F~DFhp5u zI#X4Rk&$3T+&|Ej)SYs-pt8fFaJ-mtw3;~JSiG#}&A;qul#4Z+XZ`%C9#LcuK{B0v z)LsoJuK<>?ZU?x28|3gwX7_2>0~Cq60xq*6y?2N#q9m6k_g$WdaPFQvnG&;C*8q{}VV|CbN`8T`jV6K*W0oJp7~M zG|pL;IUSzR06h8)UjPNuvb{=B#9Z=P}Kd17(Z6H=R!(}CHI(20MIKB?DX+5mp-=cCE({zk2` zrR;vtxELc5hbD5R^S}lOHtg5avHl1^T`|n8I~!4h-R=cKwwy4Re1ncdJW&j;KC`5;6mt9ezUk_!M)95Hu~0?mOm@-bF8I3(OHUo8==GvZt`zdUZ*Si0!qdTH55@rk(o=#!ERe#{>31`DA(E= zXt5$!2Qm(6qC$$%lB1d6zkyhYS|(@LG^w>v{yg|q$0%N+b^dBDr(N0Ms{HHy`q!@8 zx3Nb8sHT^&&&})H(i04GDZ`|B0%7DE`++oRT)o&Np4>dy z(HWgj=B!HM9dWcc=a{SxJe53Ml+mi2NwN4O8Ex(CCjn1E57b#jM!d6w*ZnCUorwYV zQ0^Q_!|c;!W*0BC=g%}BChp(|*_uA5NI19U&EesZTQ2g?S{_jwI+GqK#ykL-M*cwo zEO>$kdxv%F1#csTc~0Bt+ZakvW@678^Sge_WrjQv@=2mSkPw51x4I<+w8p`u}*YkIBDumi( zQKW9e@Re8$FL`ORKj;56;p@pTc@Kj#X<4w1IMCPMsv@YG$q5J*)?$BxgCcUUHc11D zVIpR}pu3E4yP^)aSnlLIpn2MS)hamuq=)xHEg9&cZkZgh@j} zh1#D%d8M3H##nNLgBCwx0G*}Q|AyM?9haT%$ALN47ei!9wEmK*MOf&vj52q@m(n$v zT$C1_>Nj$xJSDw!)gmI{bKrZqesp!jb9#j{S?x?LnnXu_pVA0RU*17AM+>UR*G=yZ z+>VVth6PiDv_U29sW_-mH03D%9DB^%dp$wsyq1aNO>Fg}tAG?KIx)t@Lw!!% zC~Ii3$-ljUeS=%qlcPmxtxC8F!&>Xl@YYzZ=gnYa*y3yg(MW6JP{8D$bv|#eQVmc{ z$qp7lBikY`xFL@Hk!@*KQry0Bpnq|Upr^6Ihu6DoVDQZ9E?5bD8^m4H@N1k~@#h}n zcy*H8^St`Ln$!}#2a&Mmm(%wb0rkIzv z#y@H`%Mkx2@DtI$B7FvlK}d7Ll_I(uHY}fT%^3nrcmtyJEkk0pCF2EQM1QY<~&O>DFJ`Zjv5X(btBX-k!?vW7qA^76Xh(>AK&i2SNQSCyP}JLzgNhT)8ZD<01+U z9-7Yg#*|8xA|4V_EP~oz8`n73G5PDCD6Ham?Yg$SotQFBI2q8?|LE;Y>iQ!;tOhg= zm^LY7I#e!7(EZHuPljpX1gcBU-6T)Fcs6%a7tQ#aN60BrJM+Zlq$B{|6*6gm$Sp?Z zAUa_ifI)U*Y2++~)%@eU9)^;BL&euiOx6BOG3988{2#>_MlT`==m`&B_EXbm^p(gX zz&QaQbi*Ne)jvnnbv#PHYSBtrheOTHUHFUq&vd2ONCqpb&?8c2H!itgEjLl*2MHZC zSE8t0g|!R{l7J$#A0oz-o!p!>I&5^VuX!4oE03L5NI9k-1Q-OmX+IW@ckIO5T20Wp zy@u@fYe)%O)%||U5Du@w@kKXOQSZxkXk@gnq>jHyg_C~i%$h>31xu{hiJS*HrA&S zy;2H^j@`{quOat%9jf>b_)CB~8b4#o1&2XwJ%6^SR`AORj_7)3LB)xPO|pSKqB%I~ zY{FrNV#~x~pnm^T5z-B!NqnHs>^h}lqtkXODXmQdn~YW@lz*69b)fA(Z3t?m$5ees zT)zL;y>Q2WztgQY8AgK+qWI0Dn;-rzQul;}b6cp{v5xkp1XENLL1+l3VqTDi>zE@4 zSQLuWZsl9>m7HvhbZx~C9lq@N6Dts2v3w2!BcVuD7r&~05?_K4L>jyGtHrl$Mg3`> zZ8mNi{%YHEHCM)< zzCTRTrHSRwopU*)2p^&H-z`@}IK$%^M6}|UqJj)r3vhrv;m}J# zBOH3asG3IEY6Zdo+ky|fkG0v81SC+)(0&q@Uha{rw}!g2cnGXqGnvaH2tkN^~QD z8{C)G)?Jgqst@zuI1LEQO#{660pZ}&1UA63XxGE#CMcjPa=})0#?TB}Q@OPs)bem6 zQsUhG@_J{%q}`uP4*i+R4nzgBIiHcut-brTP1A}yz&-?|?UH0sIsx3O3qg&T;)}4^ z<-Xxha^LIQzJM@A%FP(50IqMvy&X;o{7<(`a8JxZa*Rc0`Qg&n$mrXJ%3zi)<#a4ZpMmdV2`=$EaU#enPEQmOzX0=7Vw{ z9eWvFpWwcK*Iw%{2vezEV8eIAw$E0+jkDhI1mXhopdT1XUxFPEbzj)eP)$+)Kt|p~ zl^kTtUN?0hc1A)B8f7O45};G}uo{=F7oWKeE{hhg7PqA5Ox5vWA^4%dY@)h9?XcmK zM~(Lf(1gO8niM((-GVzNmW*+?baw@9Nn}c|l$gWxS4%duk<@x_;u|ks1?0nJ#g2S5 zq7D9ug^)&i=L|QwKFbqjf(6wI1CeqZ;coKLIkA=4?osrt7$^UL+=)~?iB^isEL5!{rL?{OP_^T7*6z>l~SEQJ#jrQ zeTiISI^QQmS*m?n4uVPR_;6@#UJrPHfHh?&m+`G*5|0qj>4PmfAE&6-BWShVJhs*= ztBrme&ppiak0^_NCv^$f3}5DNHPZ6es1rFA6_i{?NF2q0(R}-U+(F{T4P%HZ7oIajSV+E)bI95L@MN!V zmYxBdPxC%X#M7nFy|e7f8G#Wg`GY3zq|^wHB*^YwVq>C2k7ks{S}RN-VLHDzjCg{RB zW2l!7v}+qj=A0WZIR(`&(c!;2=N;9ZMdck@d$u~?5YYOloOb#htT1cm5BwV?Qs< zt%PU@`Do^^8|rytR1if+YLQltfqb;Q_rIfb$udM?@zUZCHk;0YBVb=n0-(AYCsyFiCwvg7CLS6IUK6}2HsnO*I8 zrbiqLDY!~8WXf%_1C@pHjN=Xi17-5rJfk>{kzTSTZImNMCn-g|rD*K}Yv_%2B!C$% zPF%JN2k#ZeZV9{;Sydm^;yKxkGA~jQ-cKeI4>ASo-z9TyVvgfl{Wb_|WQ=1m!^c%; z*8INe?-VJe={_S`n=|?G_z_B2^S(;@Q>r@*aYLg}uZhKIC)Vp>n~`Y}`*FZ}&#K&ssjg;0)T1_Mf%K zfK2?O;6kjwZe}0J)+1+EDc#Y#0TBGS$_pITzEY;!5V*>VwcWPch)lA9$m^x0i+PiN zGbjC)|0){#`}%(x#IMP2k59l$*BuDfZCOxhUp6B8Fb&T}(=fZDsJaP1b~%7e#j#nS zpo@&Vhpazm-|GPA#qUZeSNRNt;^6K-bN%0v9+ZnJs9955H_kBYOG77}qxd|L^7mU{ z;j-0s%4w(9Frc6MPR-WJG6T1zwkBLy6u*cGOby5B)J`9l)jn%eXt7#BcBsibQGaN~ zP%#mf#Rt*q1d{Ij(P%!*B`_%fh#=tJOc+ow6`i?7m1~`D3Bm)y@qRT>*qak6uR#7i>q zuPX_gi&dWY@h#X3^yI~lrQug-Io7NU-dhoNCap{NJeq4S9CWhJy2f+nrYsOVm9v_s za@et}jA94OG{a5h6=VvoKqqia4XQ{&@032{EGEyU9gvu_e0s?K;VGVO_dr6gbw#4J zq}BO0zE{va18znYQGM1=P|yeYZ#y*QtlQBAyK zj#XQ|R|f9GvFYkC*43l))h+8hg<+!lx^T?~K>~Y4ADV2u^GA93(IPakt`X7VwQ?Fu=(v z^jDTQ3l=Z-b@jKwo&#A)UMh5$cKRp(I)bjLCv^4fqj2g;2>E@DP)WUDkbb!Q{q&qF zH4gH~MAfCLp-PoG+k2{d95X=W7ryB$v;N|yW>}6h@i6eY+KS2dFZ3{HK~B!QaW9>9 zB2X(aMfP7N{^xt2sf(JsG3~Be;g7_R6LrpZR6A}&Qa3Mq);!&lX+Yp`7$dg2j!quY z{$$pgxwJa(T>Ns2vP@xqHJvBc@p2Q)eQbxbC-nU)odow*lGAElcGcAO<&Obh8``+L{d{u2f zJtQL1E+d8x??ptZ*CCvw#~Uu}5PhHI`0jk_ck{i%NjZJ_;#soQO(b}4t4ULuWfJ!7 zE&gWIl=YX7|NJm%zM+75-+g~HoVfAzAB_C1fK-59Q7ieG0^UR1^sI(6bIYjn#SC3( z1HTlf_HtR?>%iccG<#5GtDc+YZ_xWktVU4!AUmnn-HoTk+&lBW#K0Q#MYx8F1T_yH zeY9Asb%6b?ZKznnnyap3XRUvg{cJ$4nw0?ZGVd`%udfW=^cr^)UZm=oOuVzyFuTt^ zw4zjQwS-=G%lcURC#ci(A+J*|Qs__#vRlApu}P^8v=wprBfIy;>rf}-^nI8{H0ZvR zVHz?xRV2`V5@e?Lip)KT*yRqTKmPUT6%e-+TK}0VFNho*IB*f8-#a%suh=r*lA#R z2;tS<{sv}Lbh?{WX%j~9X$vv|(_x04|039fk|<>+X4YBZxTARf97%VS@j1B@M$zO1LS2T;_gW(*#9+}}4l>zVV{LzmE1un~(k0@9$5U;drMTcRA z@@^_y<1=VX>oHreArwfRZthRs3g%h%iwLKN9Uo>cOw=kLE$l{f6z{keu#l_Y+F-8GK~fq-$*B=WMSJ zhijYD1cr}h@^807f}Bs~xV;Ts$u_g=-&7n==P&mamHJmtrW0{s$yJpbF0dhoAa}-c zGIatNlb%-1h|L};lulJcfh+oLq;bgQ0ToJ3)bVe#EiRwrjdsyopVlvy`&MtsLM;C6 zoEKQYb6$3DdjzCltGXK6I9L^}Av z$+K!`bi^85xAnr=c0hkMrj3i&cLI$6LD)IO3Zq18_Sm*<+qQlFW81cE+qP}nwr$&e zd(g=nyrgSZHQh-iReP`X8J80VLm8%z9vS{*!oLp87010P9yQYahA!*mAAZBaj(0EP z0~-!tZpRMWSuI0y*Yiq1{xiw)KnXJT1Uu|IU+4@==m9Px7}6iE9au*J{10o}2rgN~ zLtfxqmXZeebs`KyI? z-+4mQ+xZP{FOUPE|L1`PMe1IYwBAa)bI z0yYD7%%W;qfa&wXMjB1Q*=JJ+$qUK$gj#TWk4q-1-`n@HI~jJfc5-Dnr2c+m8`T!n zNgcM1F$zOvPj0SU8`{|i>%46(Y9wDJR>JOytrNGKko~O{$X(`aE*Cp7k5dlPxW*RM z31B70?X9Uuy~rj#PbzL-a~*I~`X83qvuEEt)FrI#!zsQ>#dFziGyw(5 z&CnaHL>*iQS$t8k7o-^{Dsy1y-uBcosx$?iamiUxJufP^I(_7FK{cQeY#3-mbhVV0 zVv;v5K6Z@tqlaMNAvHFr*(uG6_XEm$zp-y5KV;vV6wvzNTtxvk%A3w9U^`6(a?r_- zVt%h3xN+`_<+(~uS*)=+ov1pEV=OTYqb0$PT(M&4Uc7z)oN8|m=9UX&eH6a%@>x_M z-_aib?ThZBG`)I= zsQLgBxe1)9(&U5*M7eu5(I64#?2ubm%J$AukD@1vZ`1g~F#Xz>-k(#d=T)%d5UG_a z@J&US*FX5Vk;F{S$-VVkr4rdA$p>$0Wvb(BIOwP8i~67iRy9JE?k(DAk#OIg8k%2G z(7^)wPq&DBFs-pn?17XNJFceN4h@sDj3AKvmCrxUr=GfGE>YS6r&G+pI-A*2y zGQ5P?CsL;5FnYOlYrF)>eDUl`A1668$yN91=XEA9r@Wo|&a^ms0*4rC+_d3my~xqd z>}8Oc5DaBNDtyAlp?j+{5h7jh$3sg7DdC$02(6-O%|33plTn2xVYHVQvt{l{K@+;X>=mcwoef*K}i0oUq=3~cbjG-D!HHVwElDK zPR~7F3fyG8tGvFa# zzp~| zGe>LJ&8?r+zpLPzs);4;#Dsu6C|{ne$i!20{G%nzhgV-o2^^fY=>5`FRQHr8r zRHe9P2)Tq)9v~28H;Uhe25v55zld%~(}4{I4^xt%8MH>&ho<->kpk%h z{FcIB`r-d;HDFbLLG3v`&}_^bY$JQLB9nV}b(m#BcjiMw`-y}!s$Osawev*|O{RNxC%Y8rtLp(bxW#r^g!MyjO| zNP9Azj*4DO2l|2cwH$9`Lt|CFnu?f=;cN@T~35pa{z`- z2U_qXt=9QPP2~%s+wx<95dZi8*}4TTnF-CMAj92$v8~|2WwWpz=a~e3sNa14^G|Ie z16-Xt3DhBwYSG9?AosXJ8~A~0k6yYD2>pWGw?&JmLAeo=i+*}PCtJ>!A|?(nooj#? zZ^;yI4&9`aGi`1iUn{VQE~*#wnfo(p^_Rec{6?nLe&fNuHn5}Kf3F3J^C-Ms#Rj)0 zX6yjr;Xkd-@E$P`sDZ zf=Qy13*$HkN;L^O`8M6;3M^EG#*LpN`x?Uz(18Q+;!CjmedyTdru|)6((KALH zK~9c-52n(;Zu&$n055)fXX0tBXc;WN9gav&{(z>8T`8!!(}OSA76{WF$EcV&f@ZIH zHZPllnmOR3bBbFEAx@SQGsdlJiitCmI;R!5mtrDtNzwk9dRCQEaNGMvUe!Fp>)yV- zO>nGMwHJ)oGGlS_LYK7A>)Fc`9#BBQ=RY2TC&7Y}VdoGEMsFQk_MeGQu;}_X#|s|(TdFhl)7>M43nCzu80D*%*pE~Kl4KCfC2zaEb$@7dBZBL`PX z1?>?0?IR0xFqM2n;Ji=lz4-DF*oMIgaKs5REcB@jZXX1(J&KDv5#LO9FO-RFBI+3s z-sN4*z5e8Se3rB81`P17(jU+!+yU}WX z{Gf3hC&2ot4ldkBmMBxET=QNgMIj^-6yKKYccr%$MM8Qi`XCq{Aka2GL$?|+)jN^v zl^VpXV^(T4K+n)6Iqk0BlUyW_-V2yg>_=^HklajH2E+K^Q60B_(yUs+NpS`SC=Pwg z4-aAChY94Dl7RJL7w55KL5Go;sBYXLbb8;F-PJlG`qCMB`r zm?TG{bN!uKt+sL#P5z0q(GCK!7Tp+Uj3KdfnEqBs<9Zz`CqSd%kCo=E{ul7CQUEYn z{HeTznP(Vf`5Y|TkFIi}_hlBD8FgKgyl6%hg^j>LvWuRWW0_%*?!HNieq0GDL6iY% z1rOUaamX3jH}A)xa>oQ<`j_o=dRihl3~B;~8+|(Naz&TYX<~t{e~&_VZ1L>khT&R~ zi%8LaG+O)L8GX&ICs++G*yo()!r$!V**v~Z(*{Ovd~74%20PToTZfi;3Adg(3mGRn z6C=f)T&sw4XGRN0P7mIHSg@t4or-UAt4$H`e1$G3?7qvN_NhSd(huEfpnkRw+SRLn z=w0w4_b|_JTnsGXRSkR_R<&jL8aMMB0&G9!uqEVL6TZA zPcVi0DdXGNWb3Jcv5J~sn7x9iIy*4ydizTSd-|Ml`Zo`WiYvoiGxRMZ`v-8Y=cXx= zTHs&ah7d{cLPGA2;wNLCJj*$#dZ)4`@I&NWa4yCCXWd`byJ`-;)vNpZ?gFC%gMd&~ zs(n9BbOEI}L+XAxLM-3`j<27|Xty7E>@bOp2$R0$@1YaEOVwf`|Wy2+~ zqk*vr>7=!X;&I@@l6yhIrWJ!qn>cnjs*-mhRk#Wap8+doaWWZx><}OUT`1&6dkKNq zzkH($u$2Ep$g~{x3e}_1?gSQy!$M3(6RRc9OA8~`1thb%>R6T)a&-_DL>t7@BHhIR zZDeEa3=WJ5G?WjC2CDql;ZalzbQy6l_B70K5`3KBQ7PweitszyaitEYn!Ij zf={hpxx8qLy;M5M1}~R+UT8^mfzkK0Nsh*;gVlg*ct1W<#a z2|RRTewwOf&06j{hJCzeV!9nwG=kZG+w`J_JpmOMpM3LEy|?-8@zXNuwccA0gt-f8 zPwOp7xDGpvz3)+`0xD3=X#>p3As`RKulV?w;nJe$p=R3&aQ>4Q)Pi5^ApxEc?^-1O zn$|`;b7P)djV5u4(Jf9Cc|>w;7M_L$C=8l<7P3&D2diB7mj_M1u_)e%H4bPa#Qf%V zIWMZNRAIGkv_W!P+eJWCUaKyD{2V#w2<};Br~y$>xqh$@Su>=BlV-c{xO+!uo8L85 zg=zddHGZM>d3_mh3h_{r#Q>Ys4b-ncc8e_U=ubvAf5{YJ5hag(*GfY`+AQnWGO+Ub zOEppv26N6vrKAzb4u?m1@9K9!X40@;$_Q5|N4PfXi=$_E&sCb1jo=yoZU!47^l0?z>J;JdOZUWmFGomS-Xihe8p=uePOAabSkV^KzP82 zmWLvO-HgW-_~X%E-@O~Cw~#bQCW+S==qzBfwK<9TEY_DwDrYNV>GX3hl{DR37w;)7Ip@qK_ z*GCO_|8#Av0)8B3GS)XZn0f>rXU2k4y8P^RdFva7ECOHwzJJH9=Ob9kk4FUD>QZ?w zpz1{RF@`lX&P%@{*l&b;P0)4`v!59t zo$Q;uZyMNThGpi#m7@?Nr%y5j9RD+Wnm(odFXBP*McZf9L8h{Xmz@mDnK%(L#%=Jj0T_-A6eJjP|E@u{k1;ae z!T^_rmv$HERvhE-QH&Eub-h;{Nju^-wv zfkgCP+*^)Js>*`9e3o@W&gGCGS`y4v>{$$X4qCKRc3ppGwNWw44@wi>!Yd!W<9P*d z4t^>o?h^*PHVLe%S`1a>K@im0CoMK*=sjgYnwi4h;FK=>Nu$C{e!)_uY47UV<7Wb@Oj;B-}?&YwysmDV|l}&3^`DvEObk*S*jIS26TC;3hUYc=-7T z|4pUbe+(C=nD%th0*hHkJXrukOKhJb6RoAS`Wv`iDN+&ho+!|XC(IEb8`HSaoxB3g zcfi`e`ewn_iBB#P3_`wa{wEvs-KJM6*7JmTpN;CGY>MBprxkXh(eU=>s_B<6ZerOb z*$EX@&o}7;M+W8|bPM%B+no48i>=ki@z-Kw2rS ztXt5kU$1e?tv_vvcFrgZTW=DC*|kb-<}?$9cKw{HQHlT0xik7o z^?ig06>qu9*9-4G5??|(AotvcOiE-$PC$kE5!M*|IXf2`XMt`FIWG6aul+B^+I@-oJ z_*{tCIluD(JZO*uTaR5i4VJX4&H+n<7)M#_M^HWKBMZ=6`a~qX_O%QV2Kd!dql;>N zARbROpiD2!!~U)uz*P_L)t~S0v^IA@%4MC)~aaUaQLzfrdTEpO*P)Yk`Q+MKcWP zWDNO`Xn}n$%pPM>{$7gZML@>SBTpJ`>viz&)(FbHt@ZXkdiNjMP`&mh9hs6|E)}_Y z9V!qr9WZM3EM+*0)};Hp2e^dnL$SGx_C_{)_?;cFz!!xh#7Cs5y)3=%c8+qwFoe2g zs+dL(9M|LokNlUFSzR$HjxXo_Tvs&WD-bu}$@O8~pfPNqT+NtJdwVjAY?6v4C8wsA z=|FdmR1@90xegEj0aRN=#6YH!_lfxkAQyE<)2Q?FjYX(K;EbwOLW&+VeR6YoF|IZcupZI~i!WbSZ)lMN^7FeOftbk9Xu z0U!ml?scW)H!`6tVWpkts)8c{d0})o;5A*ZK!-<=?#OXu3cSksGsA7Z0~9D4$W$$K z0_m(j#t#MEe_rUb+=J<*#|9*`Yv998KJ8O@$V3~5IO96*#~KD#}3=T;%|W^IrO(%%>ZI$ON2k}Igx}tENLrKtW7VQOsnqorqBDo5jdH}@y(mi zg{j8qm6jyCk*@~|447002XYc1#tC}T4Eg4eegn@)8siQjF(NH#Y1=R}=g{Zfx44Y4 zAff-dvTtXU|9C}#CzFXY&*Fk2Ezh4cy(hI}=PCO#U&3uB6%5Zb#9PT!o%*BWtn81G zd%cvSyzCr* z?^~tFTh*1wo<4&cpe@2Jl`<_FXD?2yCslsJKt&5E54N8LkmRkWdm;krQ+>6BSPH&9 zAh=QV9a=6W$tC@#ojt=@fQrIPp`O8fmI7+-qG9NF3E(!O8Ez#;251vK0Oy z!zfSNw-jqTo=TMEx#^a%b!cV@L;f9z&YOD=9Rm-{TJ8@Jz=V+we>A`^fo1mJZw>s& zqTjV1X-5gn&T{d8*UrLWcKcJHt-wrJh~5%+*~7XhD|C>5`zKY{R_(RJE!#dh8wVOy zk8YWj3~=*L5Pvv$wu*ewzdAgt+dco?&cD2tS>|pT;q_UYix!1_7$7zcEojtJ2)=YdEm@WI@nbLyYk7quXS&+%iY^pq;-zHS&`8FLwByue z;&H4B5dw)#W7X9|he_I^>z~8xZn>Ai3v9H1247~0`AZeXroCL(0cr7R=yo2#vi{-3 z4lr*xx2G6rexUX&AlzZeJ(g+Fr@BEgBL-=lWgnr6d9)yIG~259{G!{-kPsAK#@Q8_ zM+ZWvquEkC9!3dDpMZ4Nk_X1JB{2>xBe?~~GZVaGOoa;du>**RFfRO~; z%4+DU;M}6%d>&+~`6X2_>%(aGu?~caiV@tvvi$_$UXaKP@%Z_mEZ`CVGXU4u0Bn4G zd?Zx-Q|lvm>vQo!aVsH^~s0$%w~UWk*mrL6?a{ygI_=668F!0H?v zz}9~b0O_3TSwX*4Ga(;2(#xRwK=uwGnE|^y{&=PWV|@f-{>1YeaL0#_zt{kdfa+XX z>p^>a0M`Hj8(ABjnSUw$T|0vZcfmM0xVv`iJw|uNlW=tU=*(vE#2EK@sv1I<_#S~Z zGW~udu7Ev50N_z?S*LKOwSFnj?5}c9v4OGzuXF$m^T6L~G|B}1ILC+PR)-&WUpdnY zn9pulwR8ktQ+_7>5cXi2nH*VLKswsH7P}pPo;iLikni*>SsYxOp1(IY_ir_S(|{nZ zfSZ~O#0?F7V=TaZW33Wr zBX+!izm4VqcF|)Zc=vtQ0FD9uXtA}B&HDAA!Hr-2Ix^P-ta<;q&;0soK)=OT{{}wp z?)innH??}HhlfW;reENh$3>xz0a?_*0%ocK(8yZv;@;YHhIVnzt)Uyid!xSJzIwSE z8h^1%Z9$ou8vdkVYyAWSyq^5(4s_c3sPz?7|DmeBPv7rZZ}rhr_qldAvtS$xIIb@6Qa6&VcJ1o*DSykG?q^8=XD>_yzxDh2Q9zfg;y4j|1nAO-@fv zg1P_wo}KBD2l*8xG_yM~{8hy*_mjPz-qpP2h4$$)tC^j-jr{F`-KG3JeZL_91mFoU z7oUKFGY24CHBUR+v+B@W$lWT~7b@^L0G56Ll4N8kO{QDuHY!m2rlzxzF%4 zg3q_6XoJh2N0oFg(`v0WdFH@xt4Ba90t`k7=`p!`1C>-#_GX6Y=;&WRLv0r}A(7TG zk6Ri$w_AX3uhN#}e@ZmWI~r$?yK840TV|L$X|h5}{1mF{5YCGH>q2%?wcxoYAC?=R z(gcZvJ(hJDiT}4U`Lc|j=VLCwMtSk*^IwA8i;~sI(}tZ8Y8Ns!yw&Jhz1}H!@!US?ln=6&kx6gx zh09v+yC?YX+qK@dasleLf?32y;4{(O1QmN%7=xys5gk=j8v^4g;OE0`;)*i+qshhK z2>rCX_~Fc8>4}TGyGv5k0Q02*#G{GG=`&OXh{Hcbs&d~^;hOP0t<(H*vl>E3=&<^t z$Zv<2%zFn8_IT&+u?T!4bQ0Z=55y<_e@AW^9~p%c6nJ3}mKQZ#f|-VPCIwJ}#NwuE zslJ5#(mIwtSNe)3hj%@x1(JjVb0Pz%$86TfA@7dmRqVhGV+?!t1S<|p!oZjnx=5@B z>=X-o${R8JUPtZYG@>Z`9v%w87Zv-llj0Dp;$KWkrOW(;-h2@o`K`}|MYt&fpfq!L z57jf7=@f-Z>fgiID@0dn?iNw0(#TH9;*<4OYKnTayC;I1{=($~n0qPwV`2R`K6zDp zc!OhqIUyJgks!{HKmhEP$l&N(EEIw{sE+HosQ5Z=s#V7h8SeSsekB>0iMq>gExuZa zyw|cE!T?3Vn%fyD3Vsv@a>%W|g^h7hv>KSFsl!7wZQW&UwQ6(Z-mgW4xGC{T>&RpxP zi%%>q(H0_ovy4Y3!6!n-QS~?QYid>QRBfR3Mt{WnAh%CLmM#RI*-jKEAOWodv*&sY z*S6?YBCIJ7tGl~{WA^7j?BD#^dYx0s`VXxOgj}+iLeWcJ#{Z(u z73d;+yVIInL23dk_7`tMW&K8g(QGcffm9Zwvo4u$&~1*QP`qVFQwWx%LQv3=-dWT- zVWG6X=J^d2$U?}dx$V|76qK|nahLIg%9f(E`$FAlrUOpQ&VEDAj6f;0-R|3Xqfe+H zHkyNrUW_L}K27}a&d#>2J^As-(_-z$V>&-``gl87BfI-&yANw9Ad3}K!V}ZQi+fbA zhmHpba2GkXb`2hUdrYM;Zg;$(wrO!a05$E6<#HL6HW*unu3B|2ujWPbvr@MHdgI!o z-Pv6B!SNdw-dIY;%ii!05ee#jzscfDRkSAOOJ>={b_A+*Lwa^v)Q`AltvzE|7C6m( zlRuR6Hkf5cKAO(4>H-pvmY^>la+xuwkM>NqrhNmROPg!FAW~X!0m~>P0HBYKo7pjWFdsP^%deD_ZxTK zH}FZyUKH_yQxhosmq%2 z)5d008?P3}Ddj>G!mZo?o2MXBAkxbkO(a^L=}rgu{zkpRwzx@0~F=R*qjpucaiw@anf)Ew|8}|!D30wm7_Ku8|2P9E;6y6 z@cZmQf3>{Wy4Y;O%8)80G>1 zdDP3qZ?`%r80|Qd6osT%C&^v9qIoc+Bi(v+Zy#CmC+G%y7;U7T6&Gzb;wr6wa=|E@ z_oR9cySojqc8Sc)dcRFx@dwJllK5b=thbvkaf=(ax8iT47Xk8o(Ht-N5}3EPk`2+) zRpYVd+qJ=<;i{$6kr1->ehBFdigh%-kuni=t5G@-DYouF`!#k*XU?Lw78%3*Lk%|y z6XYzr;{#5_l5cgGEV8o`^2(S?qer1Mh+_)mZS!mK0Ct-$loWlR#!uRv4qsCg%W&i( z$EGkTPwaOS*qiMC6K{Q-2dpEdX9mp^pMzHezIaot0w!@D%!EW$H#hz&{AIV(LtC2F z+`^>}qRId$D_Vp zhLV9iNd2|08bL%%UPOoWU-2@t zGxiJBBH@NUd|9C)dVyR2LeQ4xIkkIEgNcrKY1%AgUWCr)L)HC{-9f+%hkgu4zRu`} zghKK})W~1b_(G3dD;8i-EmI|m)Nk1aPHo-;NsX1KRQ8@oYWIf349rwuXJGpoKIh6` zTJtI7o_wR`>HR~Azq@!6X5NgH82-4NjvRhJ0{_zAC0x*aNUgGfnT~R(@HKR*B+N+d z$;oD8j9i8w++PORwn|g9PT7zgi^)3hXaX;?3ph`no!q7?(-JTv;hVK60ynX)U(S$u zh>|>0eUx{yN$Oi&l|cGAP7Gu(@5+L=maIn*MP~Z(>=h&brp)UsQ9;diY&Nh|WvlcC*}+ z4ZHvOrxS&WK+yQO0IOloX;kDAHO!EExX{zMh|;tGZ(avuh&d&dL~>PT8Mm=9CXbc$ z5PxBc&NBJ)FR*p=NjWsM{Kl}#m-1$n6ryvWW!BBJ!;{Vq>C>=Vc-L-8!m>!CR@A4z z+hVF7ZUI53n5}G#8odP&`#7bUoV0ghM9U~J97Enw_TAch?%C^ZCNl)G_gG;&G1q+8 zLXV~j#sLUjr}NpQa%+Z~N(U9>fjs*4}Db zY%wBm7IW)I*Z$v5p(mzt-xYh zeFN3N!^Ucq^})iEbqiD0((a3N)H4g;#t{O8IqzDkO2l+|Eq%ZrMUVXF$Y%`I@vRz{ zC@05H_k}hgXm54uRIA2WIMbI_z&Ls0Q_y2)#;f==<%RpZJ0CfObwD_ zBk9bMHRQ~_fD6|-N$amKsYl?ZY$k%ORjtqz-Y-UW9^z;oe!L&1%Bsv>O0*#|g~-t4 zppHk0a78LDZa9BVoHk}Luy}(k=HS<=i~H%ai#r9DVM@W`a;ay31Yot?zc#mE5lJ(g zt1aCySr^Eq)R>~e#_k~09zkhsBi)aeMSp6|n=pxQK}HF*9-^;;hVC5;jI|E4{cT-tT>G(`6EEte)aM zAA|*Qj`2&+?`dQY)+V`uMlD|A@hHc|_n)YCk}FUH9liJ=dSdT0&@1(5<$!5a^y>m8< zT9;!2M#?4uf-8-%{14Jdsk(lt)0(Tl9_`qco)-v(Mv~So&faq@2az$+DOW$KP+_?| zalY+^$r}xUk1RYy(Cye?qrYqFjY2~Zi*s`DXR=4tMd8l$pY=nhHSW4cr4#wWc)C*x zE7arAFGGii&K}s*XPsg|5Ec}m4etT$rN*9!uaxoWC_k1 zO`8lww430s+Kszs?l7X;@mB3F)Z9~<8HNi~JM)$IB7+k9itrr<@vN1-Bo!??C{06_ zbkQal!2Pge()eJ;e@t!m-dhYx`@P+b^PekwxE6(lF$%&+!%F9fMb$HeOj;?q*^o-a z`Dw&4S0McstmP^q?Mui~zr;uTJ0E-!mucYw$d~-%InDOs=on{bCP|R-?xTq5Jrv4> z&m0Sv-Nd}LcelT$iwKFXTYPIby4iM*C7@OJfmza`5#rA66a;_HMGRYdeu2>ZjN@lK zR^}nw6TzZ3sjvs{{uQR_7>KQwKy5Ta074>fIj}8dJJF*xyGP zlj-5IZ1hW##>8ltVLxw#ayXVsqXz!c40g)-i=!*RBN;{Xk|G_QDnC9Taq8q6g4#%z zVqfw3R{u@DzD4$XL3n0XE$t<4F!jvF4cm{bX>WpTQY82UWaQrEfa>niFWB5`)CZ=x*A=-9b#sjM zswz{qGj(pZ#{8Cb2QTwEE!ztHFq+=BiXRf^$OpQxbrhyYF`QgS{kee7KNmj0 zs7`62d;FlaW&Ds_+Erh)*fgf@!$4zJy*m=Oz8t0RIzrz9Q87jhf;AG5BiB_@404J_ zVhm9^J=P=|Zj0LtxgzvRIs+P?@&Vb><#}dD?u5J7idU-U^Nws+dGlJrv{!HtfxuyP zYoX{%;S-^;*?(U=Ph)c!?o68hCa^>FHEtF$Fe|_3i4o_gyO#e>0s^h`#da7%sE2*+ zPcVDu?ChFnK@at@y|9#<_BM+))~XU&o>b{e9lgPIxh06T{6Pxy+0}B*0l7r zFX}KDMuuuUil~T~RIyU8%hIvU{@Nv%{i~M5%8$!z8%e|-Gim-{m1%~TD)fQ4px%A- z<+ajNFgZ=6bXL;_{iK!T@iP4YCy!{m0fXe6Fpbf+l39M`LAwVK_LZ3&XGqS++08hJ zj$AoulvJo{{hL$AKVnZFX}7!xcR)OHWm&Zj|c!)Ej&$B-V@|D*zl{o`0&m*_>x(Uu) zomQz4ui-eKjBu%KzWPyAHSXywUSa!AUS#dUBUYdoqk?~guh7wn#*kL+5r+7;8|qG7 za8lu3y;BC-dMc<|?Y?}#(;kbg_E?K7!K{>GEjEfAdRp#1c3U&^-U8A!c?!a^uNTm^ z%k%M&I!F@ot{%&JkfB$rcX?)#5Z(iDFkq1z?yv7+RTI?>@AZDgoxedYXuO)mb+Zex{=6tiE;7qF#i>RuyDx5W z-!gWb`23&QbP$@@^Im=2mZ$Q>FIsK1&Q8#6e!Y%etRABk=}j~mCa;!H&C)`WMuha0 zd{a+8H`u(tu>SnT`sC)x^z11gE)}{zb|p5`Hx|BXtclvU(u;0aD||SS|37T?vL~9k zF+v6tmoDBYl)U+%Cb-;1J=bDjaD}-kGdAgd{v*+%pr`-*O$cIsec42`Zv4QipiF|_ zEPx;-bj<{@u{@3vh4A}GT)M>b5tnU|=|T<9q1NadWi2oUB|8)pKr=={kzOnte?uJ* zNiMiz+u{hWfHRQHjgK~J&MByhv-ypM_X_)>u;8S$yeFwGhSN&0e~k;3ZeTS#8Q)v} z#r$50NOOS7*x2Lw-(HX?f7iw~US+L8V+}h8myMG*Uz)hv_I3(jvrpl{<4(R_e9S-c zH^=>Hv1LUnKFw%U*sd!@3130th7zdbRa>Dx1Fk+1%*bx#m=Gxhy>{qoGtD2ydIFxtoty=pExV^#X_3&-^q4zjiUP56SQ9(Kb)qJ ze{!(pf*U^;bm0T0mp=*)^lVXHVuhN>PSZjQJ@RP8K91{Z;76i2>2?|38my|0085ul zC}2p*8kBEdsW0bee7B;N`IKKLuM9hRdK^lwqieFm!%!B;@bVWR$P>%xX9XBXiwuyw z#C{Y_cncs){aO~P8DA3~XCh8k zI*|k7An*u$r%3K@{l&@iw3;-7q)Yve-D`m(SbFn%fWQtbr*o}#7K}{bOeV+tIC3YB zE{cLIvck`Yyez}xIKen53M_5iZ6JmElH?yFNynXKH6^R-BvK6Mp7N0d1Yk5Oec~vD zS3{Lj3HPmnO4@p6O_#_c7%WdIXzDNRhqHeSoNkF@!o@jXJiVDn+ue*lV!~AK3s`py zW~ZwrvJ6GG-h5M~SjU!#dYkMg;^{!t%7<$c)rLi-x^4S5VC(LasPD;1?m7KPH!aQyam=SM)-@TF#R7TKI<673zpc*E~EiuiEK&r|Q}KVajE zf>ZJ;*vd!OwARQjkgb*PKc>mF8lo7ERS4!K+(WD9brqKm*A$9@zG^76^nb8aQSA3R ztN4=}zcO2<))4f3phAO~T$D^pIX;hVcxm1meiOFtq#MB6<@-5R&IqTa=CT?OEl|^} zQvqDHogi&^jq!CJmZff)TYUwRb>2cW7}fViohT@9_1&npDijfW|IUkLk)-73b4XJg z6SqqAA(_!l$T6nj5YzzS?esj14O2=*Ra z7`}%BJ1uqY)f$o{1M7{-3eRJgNbP<4zd8A<@WGZrRZLF+4}%P7?Eb4fiKnKj_)nkk6l z47mVPq=O6wb03BV8@Dyxh!WWU_8tyhbGbE=m%1=u)op4H4xB9q~bp}Vs# zMhYsSO*oKtW!U*OpQwf2M=jat_I-ltT-t*J#%B0=YFyP-AV5;&^={$;mQIf?W9a+? zvZd^mlySD_gF$bSPn~D!&t`Gp3@KSACHe%P0mfSTc?R1O+q!*4=R?#)$JADB<0>QC z$VfsCe%Z37IvlT3t3nG=1Quxn>uJ0< zyoQl627J)_kUp@BQ0ajrJfQ_$rrcjcdkN459|{oiNB1mBKUSXEQmKpXGgv1ZIlh2@7r*?yO~cl3r1M^l*KXW$oF5w zN2I`!cx(Dv(U(Z1B)uo%E?qOdm34&EP&*H8#EOeQ}V!r_*m7ZO36yp*0PQtZ|1pZMYxhS#^l=OqV=@2oDBJey-5#a~hqu85%EvSyrs}ki1kIAb^=%LU+)>>Z*woy z_H(dah-)23opGiciD`i-yAoJ5+#1aBRg}@5w~U`e8CEtu#@M9rBWXc4r{@}Qc-=8< ziZ_Z7s>Z}V+bBUPWT0xZRNqsrjfGM(Gw{aD^@l^MJvK04=10g%O za$WmG3}>tSjftp1)Dz0N?l9zUK*y?4b#%jl`*-gD%<}~?)0Q-gw5jtTcg*Qa2SrON zYVK&U^-gv|fF#Z2zxOYUMICWhXnQ+010Q>P-fHw!eRSCuXOm$@V|sKyaiYLWynIp?U+~7aw|1q z_*_uMw0yvD2cq!%O>%7_(|P8a_wQW=B|7Crw8+B!E1mOo^|0=W(t=;T?g8>%;*0j> z9NqaWM3y^Lc3RKt3RhS;1&IGZvQs>?MIIZeHClWvryP#D8uNs%!1iQeuN?m2N*cQ1 zkzJa)EVcZih+#aLDFQswL0Po7FK^yMsNJ{Y99a&yq0414xee2Rl-TgOow@t=^`RW= zh6bnU$GYU1T%n46=}H`fT=pY3dzY!g386`KTW zSX2OXx=0VZN69Zn#62iqnGJK(bsS&B#*2XFX~|?7$*{PRpt0^PP$C+r6$K?TtzlW$ z4jhgnp{?%7c;X4fE9*Y!FUqWmvG0uI2SXi~cylt@wS`vK+@*A7;KzNnmI9p_^){_l zI;Iulqy8WA-YGouuFdw1Z5tI-Y#SBZc2ZHrw#|x-ify}MJ5Oxe#!kIocdzdL-o5tM zd#|&7UH_cqIi0^T?t9ER?^)PPB0~ants>iTQ~KOSET~jvFBuVj153BEpzLQ#qc4TK*JtPPqh3YCL)FUK9;uVg;i?}^ zHi0Dg8SvC$~9$pk}-Ybi*k>d({}^PGyAe7xE(NIqcBjpJR7 zZba7%+6^40;K<}Q2H^b&&+Z1%4P`2XaRn(S~>fyCt@UvW2!loUrjvrMuNyS zc|aQ}wl0MEj*@5!aoR;!C*_4Bba+sMw(#TAH_4ybUXL**!{AF$1q)Ppl=g6&^0YmJ z&)QX0m?a2KK)uN&NA{vSClc_a2F<+DnRi7{xJw3%hZL%E0^fcEy~vnKF~swD6P`gJ z35&2gGN~{&8pc6o<5>Xso>Bb9NTzHkSlXTn{BmM_*UPl@J~tSmc$b;o->2iB7wa9Y z{g8H9`3uoOM0A9{G%z3xzn*>!7r<6Kx=YfCHNeX^I>EOh{-0QJAfZjV;B~1=Q%@0}RKSUmSDm!X%Lt zMkxq=c-pND2eda@Pvn1y_eNoQO#uh{#@0R_o*bb^Cj+4M!5OCMgs+Mj@N$mQ$mt6Us z92;-MQeG3d!*h_R0Hi*7?>AP%@9g_k{vX^-!a?udopkC<&Zvb)K1AO!U#Cn!8=*x{ zc3D>6qzgD^-r||WG=53t1ZZhU2Xj=eofi7V$q48K>s+r&Kh-T-K?k?q(eG%-tNKlV z0XsZUhlX@xs_1G>_{ETuraxDKLNP!*%QCPIZgcWX+-nUd7yOnJ$byN!)o~pNnk*Fg zf~2bR{p+mVc%kJsB%QYAVZmIy_g!)s)UI6D09$A)&)`?PRKV(Moc`JNIULw*L{F=CK5f;@U3&2&ByBKC5{AtOZy^Y7oo@~W6yYR z-%gK(-3TrY`!(l6_ijeYhwAt}@_c*qFD>og%6Fph<3i&lG_$XaOcYX7IS}AMnt3&F zuD9Zq@&{&<2GywZ%-!O6-{BGIpir6Ak-au)>vdlRYI}D4*FTQ?Fw!{(*6AKuY~jeX zz(qVAzkbUxQvDpJ!P_@ls0E=y?No^|6ro1>)WLRd;b-L?7t%m+B&GxUd!A!uox0^Q z%L}K(s9^4L9iQJs_}$g(%Y-BfnpmAx#MI|CIGR!aV}pFzz5BK~vJ=VqYVBiA=0rtD zA2Jc!?Sh^I90CaVZee@HJX6rxkQpYCMtH#^t-C6=7is1D)cvI2jhoX?L6|GJ_}S}Fr_(w;bV8I;$k|4UMuuA=T}?X#@$HvC?6=Mu z-`R)?Od;86-Vgw$7*QqfPGaArHdXP~GivI$$$>b{j3Vp`z36sUJ~vczZI@7f z8YyV7O6rGD=FWdv*@N)oU_{9PxZ#tngCo=4cem#H`6M}! z9*5zR>et6kk7TPsO$WSDrPEeDUcYk12m#ehrzCKx{_9T)9t}_fK0c{@?v)e^gKVKo z%D1Jgrlux_KfdG}Rh0vCEMvv#ty5N?l0S7&B6wti0W;WAtmTu{yGeuu5Z5LGAwH|5 zfG~>MS)Sx;abo%&8WxR2sVsyEu}PN8>wZNYg|Z$Mz_CJ^;LQ(j{&df z^u>C1vx|UBb*A*9t&nHX1z2NrkOsw)rBdo0V`Y`|Yi!3Ot>iG?iePfd2f!?dwVC2* zOvJ}Fk8~ClT-=0I&~Nc*h&D5`QP1il>1$|~DWFpqd(FRuu1m{)&69k!&6r8tA>Tc& z(7l?L^NONeYv@V4p#84&f{V&pNGuWjT8`d=EDEa%X`I?(X9V6UPnt}=Bs{JOg}?Fz z177hX&fT&(bo6aPqKvinp>Wpk@> zj*-veNA-cfX7pMiyl*>8owI?EJu4@9qe(*XQC;R@CY9qPHgsmCIo}SD8aC?dSAz`4;o6W;cCSXX z==XPaBL7JvcO6}f)U&5N+de+-g>6j>a3&WJmXl4YjqZ^Pg)hyFKf_~EZi5-2-T19> z%tFGNC!N7g?21M4#nYF(-1?e$pZM|S=j-2NLr@2sIN2?YHe!-!v_&6!P1VoiH@R+v z5nI}_Br;VsY%;22EPd&1IIF%3Tt^|X{J_b2KwwvfPL`ZRLMx}i#jsck>}qCX*+Z5a z5Y*TWc5pl##H;3`@YW6+R~FC1O(D8i!vlZ(ePf$8d{x;t-o`R7rdh-Gd z;g~$y8>&(e*$W*uaL`XZFGp5QvaUf9Px$6yvK7y8Bcwrj%sYDl&mNpr47<0jG_5x{ zkPEnEM;ur^cpu+jp};$aFo+NXx3wRWDxGe}(=t*yksveIZE%{HQ^v*l^|C%o+zRCs z=bc3s`d92!Fvj>3 zG=~$1@BYn>zRZt6wMWaZxvOYFdVb2n^cuj+-X+u5j!;G}dR#yB!vgJ80Fz|*R6k`l zN;quyDd4hBfm8xpjdk3s-Xtg?%>}G-_BpHRA%)8`obIb)M^aw<1b(Tpl+J61wYmKz{7&B zNnB-TsEOMa1|I8+VQ4|0TI^mgpRG6cZPdp@M(|hXMKaGM?4h_Lp@Lp$dheL6Wb#ab zVyvij6!E(|%uA{V3;X*1-QjERK8|!G+Kx+b*btH%K8%y4-nfo(+bSFs5M#Qw)$Aw}P*HFy$qejhNI?7n0Zn3$ z1|X7LE40F4f?cRjl3NcAkr)F4214 zwy-&}EKVIB`mFW)90c%0 zK@FSOocPzXcevD~)08QuRg?ouL})EKX76XK=krzw;@mC?2W3ZE{lLKWw?K|r0j?`m zGk(CPbQmd2K;;6+tD3*8lX$B2tqbEPQ$!=R7n1-(vmVcOFy&=;$|&1hDx2%M3708r zfkl|t^62uTZ&E0Fs5YAtDv=0GLMC1LN9A2t(?yYE`6y_{{_wgwR_ zb3M|{l51n9&**;vJ@X?}>r@MeKwn)YeaCUnnVvBz=!3?;4c@lx63MV0n*pDUGK;{V z>h3zOW%+7R(f1HyS_pOLIK)!*_%6D)eWnmODG6UI#TbqO4bXVTQJPjN9-L&3d#MhxC7Aw_Xvm%5(DlXwhhRT%nc&MY7 z5q*x@NL{U4pNs`gv?9*7PV;mg9A0N`j}>tkZlXD-yo3y3Q=UVWpK4Zc;xpo{-JvKh z+??IsMd@$M{8;G|EJr227~al0^)ShwIA65^QFV5z&uw_qh5^}_x{AE4=ry&d3jBX}28SjHGIf=$zkcB@r9Hcv;udX^a=>SIvObF5&^W|%vnG(;U+ zsSU_7JgTW{4>LlF7WS`u<9u0MYRLyTvOa!S>g**L%AM(YZ|*7HLUndver4VW`kb#% z(j!+tXU;?Hb~yYwHNpV0I-AnjV=onE{bDa6bo=uz^BHYO%BpbWD;$bJ)4S&rTC z8&k`4>23gqqSdjwBRlB*?RxKYiT#2~J_ld_+}G*_)xLsVYnSk73*d;TFC#*`)+^{H z%}$k=r!`OI-1u=%ArsYH`!&CyCqbTXL?zk0A&I;XCDI!c6?J6=% zd~;+du~adjl^7$SCHHnUe=uFluo@j=y3?gi zV22;fBMU!=AE$ojk|ePwW)&}ElgEG*eDMl%L9FPWlM>^p0u|OL zIAX9;8m8Joeora_1A!gO_TkM-AU>~xAQ)r1j@<+>0$AftL+26clT zvvX|=6A1p(!1Hzn!_tH`TYEW;r3b(M7p)b+hS`H3emlNt~Vo{XzX&Q%=!pWGq4QVTH4`xHHRci`;_H<1M* zKizWXeOhw29SQOc4GIj+33(<=D-Fl`T`FF=aOk6S0DI1v8VLB94!fb-TDvLR)VqNx zB$J^!XBoHP*Z$j_*Kr)*bdhah9k#LDWKPeQk;I1l)roAvP$g|de?30a3XeZqJi z2ixL$K7L=rSmsfDv*BE@C)lF-ZPzZu|HTm}`c34U-6^G^VTKxM-=W6Xp-dZ}gCW3F ztvkI%Z)@ARd zA!oUCC~+!IoZ1_Q8f@o$vF&d>h>c72A#|E_OSj|rSt0N7EPUT)lRIm@*1W4)$Hhs;A>_(6uo7 zscNn6&ZOVx)M40erwf6vS0!dPYwnu&7D&9>uCXD5O$Z=d4&6ISZ(C^Qvw7Z8mq*VRNu^T zI)Wi%KwC6$D-whOu@^fZ7d6=77%w(t3(mrr2QFCx=$I{|?e5Cm^yaE{)TizJ7)}i~ z-)<;2E{{5yAe-bq5d-3CY|yfA9RwbpF3hmhAv4DQ2qP#z4SWlHAEWOe*zm$CTK%~* zP-=sHut9u-T@3%|1tajK)7lWTh>sk>Vq`J4Vb>|cuc{pz zFig&gbUxe8N9_<-iJpwnL;DfSRS1vRw`fj^!c4p*S$QgHKP#Y3vIJq$Z?ei61h9J2 z!)uBB`BKPZfy$-Sq`w{)g7*>WW5MiZ@E;w}+D}64#}BARPXfY}3=8)i+liIpsC0 zaZ=CS)A5W}2ffe3=nf8W=jYdzT!hlxJh)2f?iswipCFVieE$T2O0Qx3Qh&ItaXH(P zxwiAG`OS2FmcQ5HTiX+F2|~wa{8`Hqq73)eW+!{^x_xK*_r?Khi!s_KlV_#b203XS z`w6RDvy*b}?q13iUB~L9;vax|Cm-bA##juf;p0LaI+6z+{8Iz{tLGb*l-|-cC&9GZ zqx4K3__rdZMvuO6 z>DC$|6&1DgSv#dv?^*8@qCL;ynObd#!itY{DYJfOc12XFJqOPqDouzIINBsem{miq zZsXz-hNhtEdX8WI{en2K5vY4G7?9@v!=%C_bW_5)A)4AQHLarH!=B2@Z%enBXFS^a z*kVSMZg4au2;e-V<$k7tu$!UIo862CfP>mPE!a#&aX`FuA0r=@sdsxf$HNZX&Nkuu z5T%XfCiH<|AO|ck;yo#I5i&S^q%rd-M*^5S}KuPQY*Ch`?hQS6NH^LARZj zohf{@%P$%1$UR*|dIdZ2MPqg_+v57yTlb0n*0|3F`IcjTsJ}1q73IKX#d(Eog}6xI zd8f%hIO0P&kU10ty>p4FhB4g-G9IU5caP-sGF| z$#Gq~&D2cB%X((rt{zCxduG*t{$u$-;?GYHZZkoX@pN8UOy@TV(Ah=O&pak|Cz&mJ zoi7DDR=>I3z3xgKHdY{~c^l7jdr<-P`_BY~Z6vBKF&;yMUGR~*Bb)SBH^uUQ#|+ay zGsDTi@IPW^g$t?uM6Egm=%|O4pHz_!4m95wl=Bu;=JK*Kx^EXc)I_)u@#!I^&NAKV zr*P!FZ3{OyUa(8HH{XP3mrpeFjYzoORWrYwP6q2nW61V-<(kWZ4xZeG(W#M-4zD*l zf05S%mfUuyn;GH2)-5L)f8^RqOAMeqCSJ%Be;~u3Z~L9{o%_Uj(1px&@?h(XC6YO8 zw`l7&DUMGY6B^CO-=FObwP>fBunXo+L^9R)Zjt>3e}Dty1{R&ME6xLZz`OMlc~W1E zg7!I=Tc`7|X@!ip`swP;HM}k4%0!PQ+3=m3mOyTn+wN6+%tzWQBlt>X^+SS|mNyGA zqzMW~2%{|Va7U^%W&fjdO@#5oc0g-l_JtTmW+U9q>4lE~afMEH<%$(Uic-z6WvM)z zByBvIyh+FhX{ykLe>HQ09^cIr`KP7C=+IbU@9lK#;N%H3Em*)rV86QnaX>z^>V3w<)X4h-qXw zg4G(czV5jbX%KTze3m%!B;|F5z;`&QtX2$ac{XW#*3QQon3j;-WPhX$`lvD;Nt`t0i}#_vOEcUHw#_ zQz-X0N22F|Y_%NL_5H1B7s;jR5ZRH&nP8lgRw48R8%??4ApJyp0nXmB@9LK_De0G< z+c~3OWso)8LHWI4m^8Q{4wx~u8OC@z+^AGo6I=L+Cl8FhmsxVe^u~S6`te;HYpD7R zeQQj^&u2IdYgaj=${;BGqH2H!U9Sx%gEl)ERPKZWf_>Br|9C|Tf3AKtS^7tdjnq}z zHT8&Th2+>aT_*^nn5G-(O>2beWsFe;3rBO@1z7v;qMGBA&N!F6w|>l4B;Hj`lD%fM z9i8DAFqgzs8`?&aL{m1&=vP0S0fxG6GHWM#&f!=}UN)pVto>kxb z?yGYvX0vs7)ene~x#F)>KPLD)s6WR~5ZM@7!0_<=`#=gJHg=|e9ctws>(7Rw;|6_Q zxZpl^fDJf~D%==1)_$?k;?oFGZCk~|1O*V@UhX1=zqcI&-(q#8y6t@3KOa1?E1 zH@zY;wQ)A1_cAfvKj@73G{VN#j0)WBiV7>{H2bieJwyFVphA;{E^~H z*d4FLO3VN<_;dA(%ZrC<=Agpm($-AIz`!_1>_+<4uEa(bGoi6w09?HHlDC=WLth`s z!73z-TKYYl5#01ERnYiXyTO6^Hx)!~-&S#PRrYz;x8E*K_Yc6sZIcG|2Nm3n)9&N@ zHt)7rFLHB_NaLSAcpvqm|Dad!l($xJB8%}^5L&U7H;U;^PkyxXYq5Pe58xiW)zwLF zH$kXyknbDoLY2E)^3>i<5vS3!6+KYsu7`Y zZ$6w~0b+jl5DZ*?w|uvJnHKzpQ)%{9iQb**hF;>8EBXsdbS9}B@F-HqGY^6~s4kc` zkgO0S0tY{17y=g^!J;AD0N69WYl*q#wO8 z7A{LD$0eq(LJ`Z5U?vkJ?-%X--)S15)ZL@85qNWx4!ab6;D?wvtfV;_Sdqy?h|lo$ z;oU!d1H4bE1-rDxhZ3jM>^BBH2064k^bw7=@_ZDHW58CTib&U0BUh8eg z26c12txoqZvy6_jhRQP{SVHa4S%~1OWTt1>Dw)8+zgzGu|GeNin3@0e1^-v&_a7}# z#91JRGSu)y$Xu_tnO4O;OxQ}4G78$}luws8b6|HVWb7Ny&FlBq(^aphC!RW)uDiO& zGPJJOTz>e5?7a=Pm&5bQ!;{$wm%)p5_D*ay#F*`aDZu1A#raLqc8O&SBJpEM*@j#c zVICi%{d>h(A<`+yx!!B`(s}h7CFe@k@`KUJIH|wh@{R}8v!f1}{HniyocGJt)csnX zyk0>9Fhv{rg$uF48O)RX{26_t}AmvJA8em#blsTKp4J82q2O` z=)NZ42=I#I`KjPQ1!)P(tH47P&r~4!%ZxzLSX_pc1>e3!CZs6Np$PcHV+_SJMdqo5 zZ!1#CVp0M@NlBzka*41bbxhNvGrMG5N_ zSC0v7OsK%i4`eh~I%TyFoEegVcdPctR%81s{c2M`hmUkM z-GlPU^Dvt_YxgRuGFtBvXPY|h_ZQUY+U^p|$o2N@uT==-+^=_k#ajb$5>!#HzmE#* zWCs(sZ{7Ok6k*5MuRM*i8*g0v6ybkE^H!ebx5Ayq_&Xw5|Cvbk|4Ci>X+eL5 z64dP>l4pK~Ur9O8g<$?uD1lo-s^FXW{J?E9Fh!>c{p;#xteu@c+QyrwN=#$TYK@{5 zaNLjIIxF9z@a`}R$<8jKmU&;v%g3eG_T28_DnBW#RC1tKzb6|ra0q3lXyywd!n2UcEd2wJ-MxRC1^oxhA1+jsl!VC(R{%ozY)mx|LhwZFyT zSzFtt|H?9FZMMwrR(LCEe=Gyo9RY1HHQC=$}eRZwzj z;J!^Cflt352WPH0uux69>2A22&k8FrZsR^6Pbe#LO$kdyt^TIX#6SzhkYpG?Ljo5M z4NSZoqFqEu4uow-=}Sh$h$h$aQ+8_Z%Zfi)LLAF4j!Xu9d!Qk4vfgiC#)m)mR!M|o z;NHSZfTTcRrs&A>fX-^WSHJv#J|e3f1qVe#^*vP#RDcVZknMXumA>o59)i3)sTSXo zpvWV=J#e~h2zI3nklu`rE$=jAyy82Q`uLD?%2epFvfO6YvZesqs0OLVtFF zeE%jD`BdJA&7$7REBt66JnTo9WXeRzqV7YHGd^H%$WVk%?-2dOatwv@W1yjYkPa*a zVidBsZx!`<*sxM(Byvp4p2u%u&ViW!?jj2DJ5@uZ2i;@5JKe1WFXn`mW~j}kWGeLp z=b(?`<_OGH)MT;iA-|f>^X1mIeTz2aygAlk;U;dV4Y22j%n4nx^2S~9Hvfk8!3%0x z5z`~=8oRyv-@(B4{~d<^T#p3{NTYuq!pg^MtVpwH0H9@HlmLH=`v(m9YZe7yQQ4;Z z9d1~9Z?3DdwXGg@@rSBqUtLZog!jmwCUpq4bFSO5&?H*i<2tq2CTjN_N z*!v5uWZ4ti&C4Df&IUeVs93d}^)B=k)8TL1h<`tu)DMAvW4X>spXEOD+4x^Du<3Xd zja7WY;PeRtaBED@oI}}B@%PWbZxg&2^WR{2`h)@W6Nae_VuXNEs8s5yCk!f?O(aPbF*Bq^0P-cJ}VTp)`IH$qx}@cZ1#2DP*ODm=DuIdw_I zbv`SD#n7am|3#DRXL(}dL7o(s{Fag~UzxRI@cp|)H;&zKcRNwHdbo^a41@G{us}0H z`^>@=AmhFQpd{Zud7cANEt(0x77O} z<5!I~u$wPE%aPrbXwNl8UjBq%ap?8PUca6CJ4ThFKFpT{N3_^dw zAn|_#!`3GZUK;-e2D*QT0s8+C43+;ChS9%Z2>5>wgWKQ3u=5r+FO2;Pu4iIj{C6K~8T5L)I^OrUJMT6TX4KM$RhMCbFb5~O< z_MThs;5u0Z%7aMq_6!8EWrPCy%?)2?0jbI) z7JGHNX3kGfD@-j^DU7*~I*eHJ;Itgtpy4}Dh;r{M`R~Kvr{2&jxmD)CvJ{WwjPqo!x?=}p|03ajeg4#Ry%w^cnwR!y3q(@HmeTy z2)^tMjsxYVnKV{3tA3XkNRQg<)0d^z-N(BzpF?I@jI`8<(Sb&QPeKe1Yx#N`->==4 zgq_;7>k5%savVwH8 zq>-BA?BCJA@z2)4$;tY!)1W$Py(0dZzfm_sf=&od+dd+If!+`S6S6@Y8r7(!;&Frh zkj%*s_~290Nl;UN)NfHat*rF66=nB%^Hfha_&{4&QcHY=8GLg)?_GZD;4Zhee(mJ% z3Oc&w4J3w3E*i8Mo^;#b4^*;0Ie&X&$?E)e@KWN#i@3FY*Afp;zjK=ndrjIDv$b)z z^~hJ1J+X6Qp0NN^8MAZ5+Uj}D5+-jCPlj?SmlCt%{hXAqm#BzrR@8I0A>VD+pz)0~ zJ)-=;4rgCP;u=h+O!;f?Vs?_v^-@>AEYaiEn=6dX!|aWB!y0+I-qqF>OIJiEec5=7 z8`KR)2Wb=F_jW+Y&DJFj(HDiXwl-s^$)EHKZ(a`=apPa-yw2y%ZO^OB* zmx@&-Z6K-;&}8iMs}~aA6EO!rg4imICt#u2__A6{s0yS^aFiE92QJVoLaVcuglwx) zpXn$u$R`4Xm>Fvk6zyi~YJUg=G~-@)M`Sg9*+@be=mf+?Ef7M3FT_Riv#3TcI(Er#;R{J!(aV%y;kzzKhaUj;1-7%VWh&dX9@98(F24~w!sGJ00 z5B2s?BA}kEF*k~DPxMF35eB7Qec9$*)aI_^lv3!vazK|lM~yW&XH;KY9Wo(x17>lJ z?Jv&WZ8UA)NBZT8O^9dMN?X5qN_11;cH=XI=TQ;FN2vuf6P=R5aKtU zX&VFgI!RK$bmVc^nY_|XpjM;f(RSKF z;!j?$M}arI9n1K&g;BTvPBZ@IyZ|RB`~O%oZvIU(E@dG6{oG=G5!1nH zY8K0+qdUN86#r<3cTp=vRo!Keec7Up&f8|B_50&f^>pv+F8h)i`p0$AQ|+y{(Z?!b zUOF!OLvld}0k?Qf$|&J6Q4e?5i7j=|~V3H#G2VlFn6w<~w%+m^R`R^A%j`a2Aw+`*m< zns-h++*L+gAuE6Fdh@OacKknh8<>F&-4i z+#K4s9?V=s5p)J7A6=M6oH|fhHbFJE61kH5NHE|U{x|%K0hqv^AD?S}0T2{>aY5M% z6Hp^eV$WM9_P%bW^ffc{U^;J`8Umg|I`fpPt6Ef{;1RY&7)YD zWcM8pwp7kx+fc3E#9KK@K;zh~2rKSXG|dS1Ix^2suJc+zb>f_DTWLn@GMvMHkJT#7 z$}CT=1!KjaRYVByjEcjFmV=Y_7VQ_OM2}v1hI*5KhNj{0QfSQ2W!O1&_2~=)I~Y2F zN6b@ITlhC{wdU^Qgz!2b-CAeZx4lxxS29bM+R8bjz7Tgf3mO1UP>5U9q9-;Si*osz zfKUH2?H`>WR_oWs$e2%qZBQFCAxmnBe5|V+GaNRFmW&wJMtGa6{Yr((y%U_rueo1l zUjus%YHvOr&$3NlMV7a^~Z1ouJH(Tz8Y`M^W$=-51m>cqaJmNhi z?j^Wg^tx2}AEIIVDH=vcpuE9n-y&uy$Y!#is$6S zDMxd71hYNt?mlcD#0~Rs^l}E!OCr;b{5*~v6jElL@%qx?nGq8j$KNtl#ZP#7CWiS2 zyV!;S|Ie!NCw%$mO##mT!S48f+Z6b3O(<9fog!#xtni2T!8nI`lP0C$&cSEhO)$XD zpVbs!etvI_vSxX=ExYDcyh{4fauSf9{;O<43=kbNF<;qvnnf^oGo_-%Ub^z9?Ec=K zw=1L7k!|TR{8!n{dS(jaI(Js~!h1Bhv;L>*{tRSx{;dZE{3DQI{r5oTPY;URD)(0p zDl(q?S0Ll@j~*1~Ej)YvC!E05{SHg(P9d*jk6~^heZ3n_2%@SprgV1jGQ7-7p>R1FcR%hn<26h9y-aafBQ^9O;X6CR{oDnWRKEqjjUi zVuc^9ihnh;_-WOHA}N8RkTHS9zzJlWA7}6dgz0w3{`_aISg?1$wl6C%xEUZ$!Pi+w z-x|3w_!ebpFB~`=TELm|H$|`@=2t^6yTa$X|9|zMx{&k#r3bD2k3c5*-vSx3TYJ;L zW8rU3im?43V!`ZBAoIUxL3fSxPdb^|dL!Q=@$Rtkk90Do5}z=$Ovh`9m$&#Jx2(}x zx#_8Jv3}fD>`x2I4>*sz`^Zo9uw0%*yDVPG{ELNu}CmC z^=ss3F_(FwdLgOXU<>7h&w>lRl$z930<9;#KF)Ilj`UlU8@T0})9&ni94(%`icjv( z^IWKQ8<1I5)Y_D~s#dFQHngj!+)FS_THv&`d{&ri650vqTA=riISIahPXa4PPKFzU z1&J(J%)f=|H5L^Jy(b2ke=cHCZ5VxMakzd5>wHv}hM`7%=mOFx3RzRQ6g(g%#bE|y zU~G3|&WE8X65%dGy6!Yzkb2AE&rF7np$SS$*gfpjz8|O`jHnIG0IfGC0=1@-L+Nb^ zaToN_Nj?9PG(iF7`G)IRTev+*@Vl+ppdzHV6`3xvEZGE76=|?pW?db5;C$K@o+A8B zI#eF+J|f9Lm+e>e$IHB z*7@UM{I<`e{*wg&q?+1iQjbuHfANO}Z;y7R7-2Q5wc^SfnHux-tKc|xt2^h?HO`X{ z3F?RC`s7a*PD~#>W@18eYkC8{al$6YA4Q=z)+s^ez~wVuN8twxEiV#U<~32Ptxwvy z1)dpG+}&AuVVBvhcwOO-!NWmNOIu4syS7c8h!Ex5z4)WgtIZ#Ds@02+P&;^{d$}#! zpbHWIf8qB={E$D@yEX58f`e7SC3dF%Od$9ZJMiQHLe1%lI!kd%-#{ z$NoVJQVkTNCY#I8*)D&Dlbr0i+Ps6kV`Fi?tlM#ZZi2owXz2+A1}S4uP}6+7Tr!Nn zL!nZ@G{9lGt`kv?{)HGz7&N&F`N;i8k-+hw0-{vd(eYjbS<8s=CS>q5!k6v4~{3pXf_wy(Tf8L8R$1H-x>|1^pbAGI9>{DSQy zlJ}y#{btBssx%Dz0wIi9T}=kon0fzbh7n&Bmp??h9qmaCbx&^3bq@pML!ftUiY0)F zAjxhL+(&UTh_B?}cZ&?{6}&d3LqF%iqa2L3265*VHag8(1y=!YmDVTV7O?yAq)R2ocw$X~Ey_}(ilA{$2y(|&q=hLY4qUQDvjzpX+jQ?@6f`x^d;~%}(|MUAEXIfe|D+4Ir zfU3R+N!QVtJ?Wd<> z594DKGrurObAm7mZD9}^^@VyBFvfnH48sa;Y0n7RLx^cmn7~$AWif)D zs~cQ(<^{3-+FU?i_|5qv8pahN*Z?D%0pWndmpY|pN^9C5c1nm^)i&%JEhN|gv_c@3 z4X<*@9~ZorQUxkkkRSsJtuT=?(C-CDG!;fk@*<$Uv>42j=UlfMsky z-0e(pyZ{LW4v10Dca9)k+ZAz`MjV}P{6p&>2C2aiM8@cl*hv8`6l0S0@d)+vLGcuD z$_5D_S(+ARpXv|96sg&*hy_6lNde7}&ImCHU7gNojl_D`LyD^yu$QgeAR+;lU9OfMbw_7Y{y>X82)%*b{|I zae)X@Nm)%$ACR;!kSagL)J@?E8);1;jv@NXbW;bm+b&9xCc^=~5gPK+J||2f+{I7X z%$$Am5G2me8m}FC47`)$a`H2880 z2>#x;8H-_896J;v7>}~g*Zg!#o;{%iZ#(+c!Z^YJ&8!>c%pb$l475M#YDj4GCA^zJ zvA743A8u&A>7|yaN~~$mmq+6>H}Pz^6%>z%0B)g3j&O2PqVs}#kviCOW#ZECq~(*3 zbOajZc(()kLUnlZ)OX>(tQP zLZj9X3ABG(PNcR6P*I3kk4Ztp4V7?4GTe3L)AKDx`;rG$Q4{&YiTAh2|PU?5QuY9Lp35nIK!^&b++56ph9t*P!gbTiX-Qvt zvV@NB461y=0Jx$IF(x(sY{n1(wn=HQ%U36TG~EXnzPQ$WFl)s&oFPpGFfOHL>pX-< zyonFn`k#T7md`IGg!M9~@od1%a1#rzaE@DgGu=u;%;?9kTqqZEtu)Uv)1l-AA6#Qy z2z6DxIaM6YV0PX%fdsY9YO8Qo%UX5LP0UG5TMiykax{~=7{X=S<4i5CrO_HG6;JF?rr}x z$1=!+Z8rnO*ainwRz687RZg)42pm-}7#0Y1e(nQ47!xxF28J*oMLY078z|fXj9+`w zW7`SLl-p6mGTZAisrhWf3NhCk;L|W6THkQOhe3n*vMy#omfpT%bo#KcgL8kl2}31_ z|F9K?r6#=oyCtZxPB=))=;9J*d4OS)jHAl{qkto92S_jW{#6%}Q@&65x(*@BkBqE8 zghK=wAy1rJ84RPVxRhlv${kz~jAAHJ&A*pGdlWI)4!q1Vl8(-jx#^sFD&M7W+$&R> zN8DgC{>Inib5RF3x@h@5&&geM>`iBJSF(r;E{c6&SU0N%=*|BIl|&{C8p4X;*mMxe z%Y->O_(oK2nkfbtg$8(TQ1I?DT_7lUXO_A0wo9%9uttmwXR4v(!iK(509&bNNtQ1X zq3UCF8)a7O=SDo7+$`Q}2nW9KbqEZ^(&3Yl8#3%|oDnV|jdPF{q6{T}tw9@>B-zhS9Ye!?ANm+phaNv1NW33$Xs0R2s^hZ{WD!%K5y zqDF{R=E#y)OCLZf3`YW2)3YIExT?Y*nLx@!XJWf-t~odBv9zp^ekN8mCM-x<7C;SH zl)Wu@H{VM=pHCR{=8W%5i;{MS0A0STY2*a(Hp;}TNetq}Bg6-NYp=1Y88X5~J^H+_ zG(}}|1$H*UdCR1rme^0kcSuvQ29www(#yzR#zv1jxw)d4XW2T-%3-agX2tP~tu$0p z44*)ns@#rd_$VMcl;m|S!=Gtp-vOp*yexDK*&#%7B96Z7+SKwODu1s^GfwHNw(FPz z6PLt<^m%BD)tw@Z?gd@4P~whebjoc-W`AqU60Vr%g|jA|P3iEPg+kDSZIvi<^UX~< zz?7b@)5re(Hcg?K5r2&i7CVdM>Vhk#nI^iqS8YL2;#Ci_(@cAPlUfd1CoA&Yhw5vS zOBsl)EmFH(K4k{4UQ}Ux`p(l?eP4QVnf*P+$S>fQXx@B%qD^b%t(B&aSP##iT(taE zvgAz_@u#OsUaGmF&%=&M+1qs+;93*pIROhaK1FXxY!@3Dc>MejKPIwmdPQx!$;+X= z66Xc-GRJDBRgDiB+Eeo!`iy@MURFG=(tNK&ZmAfVE-fFb*QOix(vZP0s?CT_aHewVM1&`JoT=__8_M%K<{RO7V|I7xpqk=u zj6+lAa%x4NOosOM9!Ex1NyXsp8GT0D=YknK;opZ;fkaJFpMDsmEZ9kvFCsIQvia`m>0j&1jCLSs zP|{Z=h^1x_zlGg+lf+joi0x=FCSdU}N}N1)sxSMUy85?aVY!sC6cEQ{yNU7U$L05J zZoj>^vb6^O4jkEO*xTuBr}(PV*kNB^KWY!I9O9_QitponzH1Jxeaj#EwuYs5@NMN` zc|CiD9Ic)9?5T&TfE$gWdS{Z{pz*Kx8$+Ww2<(vjTQx{G=$bswNaIg0VMZU5qYtiZhK z2ZjE=3m}@@73a^KRK)5PP}RqvkbuA6u035*TVaY^4|BUSm1 z5ZmH(nilP~e{uX~od4o%cjS8GmF0KxO_ycUP10a#9KN2e?iGsf3Hu8j^ACx>WCc*Y z3Kc*)&XP~(aU|7ek+GwCa^(}4h`#MvFGMTvz%XS=nI(0W~P;__kjXZPA@0iuK&>$^8JxcfH3{!Q+n#A9z3bD?o^Yels2?enMGhVV9f#N}?R z!DlZk$C0$ea(5w_L&H@&kNGlBo9668t#q<24eM*fZ%pW(&IWB(e@=L-jz4$_K#$p<*%=v#bthL>}UJ4s4ZtoEx$86C$dZ} zYq>TF*}rA|uigxoJa=aHpqjMocXM}4zKnlUCAN+ZDBt~!y%4|)(?!XxltyG04TnO% zi;qDjEI=kn35F4LA+EN|qKUFOtNiGcO97Lomp4yt+!MMgu2CHg+7I(m3{+q7L<}t) zomVXW?NGy~%AdWIrZ~d;E;k_^mh01Xp>r5G;BP=ka5OqNnBUgDD9YZc7>9Oa*=3^o z{Dd}=NOFkdw0sMbOU;o`3Xi#sm$Rndo=eJH+j}0O85r0y1`0-9{ z^=_h~FH15>NcHoge)Yb7>GfT8MbbWRp>uK4c7~#}5{nv{ap~#Ds*1$J-EeqdRpJn~ ze%4iO&pD>^Y?s%r4X|}3D9@z?dCk1%2X!z`l1>2}d{BW`Ax_f-$tX&Zb#UTeVXE(*-k!Gj|24@tZyWi0XR!>M^)w zomIJ)*Y(eGvN^Av#g>Yil`6OG=*h!^n)|}WI}Qgmy*3Kr;d(8@QOoVT00UwFFE(UV z)NQ=35lNy|$WhzU2d({D#L`9{mIs?U#pd4*x*PKn(;;sJtXg*uN!bfTyjEm)Wo?Xn zOI;7koqwyEOa;C;%={gO_ z^9Vy77o_|8``@u-kczCAu!scZ0}WFd?|Q=InEY=ZL%ucY8I_U%RC?y$M((|hQ%lVI z`bznPmel8+NDtV!6h$3m`umUY`U862#R5e$5SZk~fyQSdTNWI(3?aB{933L(XWD29 zAP;7F-LEdM1{DdK4_h6)EQoy@4T_Lb3^uJPu01qClXKgkyUCANM=l$L*i(UJdw4Vy z_`1{+!a;y1nN2x*qkH8y>s=K?1*~T})La)dRo^j}^KGZWr}J5J9R`A!qa2Mo<3FY( zM>p1x0gVR#{ULo_r;ZT}C_MsVQ?XIEIvDc(X$#moYz2q1Lj)H;!PULOmQLE)8oE z!py{p|M9H5CoF}X$Oia^gW$LIHb=7JuShzz4(v*{&M>&WKTFj|ew0#lZkCoy+bIET z+oB2u^!--C#R{KKf%xt*)=&tzSF&|=#MCTZZNqTrPoce#EDKe9+6s#)U2>lWgv6AL zGHRdyaey05h3BgI;ckvbI?}zQH?CfpEv^}6x^&v^b$(h_yd(k{LF>Fxt~Id;e^9&I zKuEJkT9(P;tJWu*;*49pKvX@t2CecN3s%i3OCN16b)Zw#N~6dkbM#64TD*oDzx%GB zGPOg}3RQN4veP{?C&;|7>?@)t*<4YeBR#8rtZtLv-=tUw;f#2O=oh#Q#YCyhK=mdW z^k*Ktbt2UBeC75@sqp$nUF?jzRr90s`A9&T9jFMjO?{?cpI|K@08{+AAS2*d=2a3-(Z^Hf5kMP zd%D?q*}^=5-0pVvFJLAD!h&ESK@kWK0HolBaB%bF<^jEML^#9l-v(YbPB2@2cW|}9^~l>v*!V6!hF5mJni7z_y71mijHos%1{Ih$gM0TA|wJ4 z0t<L?r$v z`QSeTVDVP`7;z3Dp}V)j1klk8j4^os;HcVdY-Ha@bfaba*IZhv zUA*1UcPzm@M%sR~ksc!^Fs6HqKZj-j zSBokN$L|sQO@A46QV!pf$IiF;>exfxar~3^ClXkkcEt6#lR~&3X{Z+D zw^97t5!Oj^@z@G}_5uP%1C{;6@_IM~1#EgqqNjQHjqK#}K((dDF_Z6Ku~P^937gq4 zu|{4IDaK?=I);-~@*3ecqCm6Eop)Eq+dELHi-Ed+nyb0B5%U|Tjk(}AJ9pqn)wf+^ zwO8 z>W>-P&`DvgL5o9a=rlGtwY}CBvmpRFo713%9pc%)H&y?;hJLTo_ z^oG?T-rBl@&D~vNXV;7umXXkEC!1X3{Su2;7w4=NoU3!oV-z-DRFefokMji zf)tG4-E-Z~e311Jx~G^vISKI_u|KR@uH%0QrH`y_AxDd?C=U@}rAR{jq#Z4BuuMgq zHKVASc&k#jjGv5rSd_+TX9G#cKXkmb~M4s@~09>Kh#*TzbDwWX*b0 z=YI&=m$MF#mJPU^n$9Vau2hQY?)n^!RHYdvq~5H|4w{QXMN2m4u?kiPN#2N<(_0 zeD&xllRPlr-y;!6>Pduq3A!7;>9Pczl{%=lw6wc3iJQ9_^G(gR$YVyp26jVOboY=K zUxevzroj2lKTy=S@0y;b#piX>%xzP)c-5)=hI5B! z?2@#F;u8x$DF})lQx>!4RNW&jHsnuyYl6b;qb@nB!qUF$$bt3+YiO%GcVaU5{*ZooYu4H3B~L@#bVD|AhNJ!J|hV8#?Usvi;F7 zFDrP-Qe;KYLVn*T#pt}WHZ|_E-c-T|O(5c#Mjg2srJx5EQJS+frC{u_a`S?67&+CbRD=(S~jq7<-+S8QAYPJ!klk#T1Y zqVw7hE*5u(&E@fNkn+0cQiZtG<>bn`D&_2c0qW_>ewC$@C+wk|LT@vTn?ff-t&6IY zn54afQpayTa=eK=GcjZ}e9JyVr)^*@?y)7co)6)dn&WLv64)9lE++Xlq&T(xh{L#1 z*eiq3<(rR5H90Jw?y2R~gT<2Iyg;Z$xe1Mai9{Q@euIPwVHy55V{+s){wYj^sOPdn z*))us#x<0~#OvlchVCg#SR~;IVTIEZeSwy0nEaf0M`&_BE#Dll=C>~g2fIF$Px6Yq zn5F;eHdR6L6uyPnX8Oc(`-kj9nu_aT%7sZg5H&U6b5!wq-b#`!Z>^4H3iC0E zMc(}tfPJZI`T*5^+*L$u3*{ONX>ptzZnRRSDvmYncg|VVXXXFw80*^Mz^Byw-HoSg z)mLoJcbzoh2;()h&U+}sQYH1qM}y2kuuRDr_&J!3Q_*Pbzz@fz0i zViI6>qGE-BKv6MNQ?u+zT~X2Wu)T#M?B;dsgEQ?tV@mP5_xRwojQK$vEpvJ8RO=PC1SjY4KejVF}WBFW7b<0&xc}U<7-l)ntKN<*L{dykE%zQ2WxAW}O2JDZ~byG?>>q;74 zyCZ9XGtvIL$n;-Jv;RB1GSP?G13>Dob}%2Hxe!ns47LP-3>^Jn|A+vPG0Gh^T~uB3Mj9Tv%0AOk7n+QXC>KEFvbP z01*>WRTY&5{%4i@b+llvukPbrVR7;Q?~6^wG;@bE7(;*V>UHjD3kKrl3eSSWxpLs6 zYB^Jq-p92mqo>eM;(5vPEPl8OOe~75Y>&OD^vJm<3>6R)hHm0?W3X{ckOHCQlSfA4 z(4(EbzW$xxfnUw&%U(>Dzt?*Q#9ax8>bmJ6G{u+ z>f_Uoo_%LZYJ{9A5Q7?pd~nEdpcmp(pf;m5W83DfrE>w9;o6IpDo95dC7M2*MKY?I zC$`X3DoKYKMe|guNyj#m8h{++r6Y^`&o=1C1(8+V)6wDuBLx_)CQQ78@r09**UPN& z>O2g5NnU!4t;-jr!?ZbQG!`I&7G7bU`K5|d+{3jp-#2bA0D?tp{Gi%+*5-3eSs z4_LQN-ANDd7V(Eqf8Z=if-_ounGT*VN^0GX!@xEoKMk)2Dja(4B*M!`tkl@7Aq` zxoXKW)oN^YJrr8WG7w~r0-F`FaW5qJIVPP2jvD6tpXYl13H?08teB*2a$oH{tUlRVbK)jSv&%wwtEs;Lk z|ALz|>cIt!-4K-DMazUl#QTSS;s9+30qHjgfe#8G1(r_NQnZZeI{Iq-%;y;uEj0oI z)SE%N#B~kql4mbsC{gbR5+VZF6Imsx z22&+$U3)_AZ#DXRvy_FwYX#>gyCZ0v<_gP_?cl-LTLj@*de*Jd z7%3K=>Mphm>k5ejX_<{Tb9CTixE%6V$pfr&SsB98Uzo?p<`RRD^6XJ8Cl9|z`=Z`= z%|YH_X`><7@`e}F*JqEB`X%rm;B>I}fv${d)A{0&>CS$ircvtJ8Ks2n;f$_VZn*%I zo^TdvX@w__g26v`O$QpISkGTz*S|a*IciCINI?1A{_rv#ybkPl^KEJIX4YWi_bd|S zO5HeZUtFFPZ`Cl_lmOR={vJ#Qx93t(__6``r+ zcdE9T;(r=OsC*{^yPdVI=YB$6w_M4Rj)+k^i~Tk%Vww`_ZrP;6b+l2CH$0hhZe?&riZFdH9{0Lc**SCwkCs>GY-m!w1q3kEL*tk($c4%*!ilGn%iJv2nRD(Mt=0z-LHuHFTGDrgBXkPGB z@dbi`1`R6s+@kb>nwj3Yvxo8AkLYOf#=%oG#9ijI#L4Iw}maIJ5zABDiwVOHS zW?p8$f~pPEIC2G?W?Tkq#LUi39A9cw2pIWo)iq4M9s{)BwWD$_aNKSTfVUl}l{WlC z8E*H#JveT`RzJGO@R^LL{~+^F`q5TJzTVRs*4${(bzZh=5k=l9yJ|g)U^fieeFs{) zw%De3QzPznsz8{sr79Q}VWnCLOI?1qo36(w>Sv`2A948cL`7~Y*KwHl$(9_OO#@V3 z%RWK{oo0WpkFbxhf 0$ ($\times$ 436 CDs) & \$ & 9{,}156 \\ +Tax unit count for each of the 21 domains ($\times$ 436 CDs) & count & 9{,}156 \\ +\midrule +\multicolumn{3}{l}{\textit{Census ACS S2201}} \\ +SNAP household count ($\times$ 436 CDs) & count & 436 \\ +\midrule +& & \textbf{33{,}572} \\ +\bottomrule +\end{tabular} +} +\caption{Congressional district calibration targets (436 CDs). Each row is replicated across all 436 districts. IRS SOI provides paired dollar and count targets for each income/deduction domain.} +\label{tab:cd_targets} +\end{table} + +\subsection{State targets (4,080)} + +\begin{table}[H] +\centering +{\tablefont +\begin{tabular}{p{0.55\textwidth}lr} +\toprule +Target domain & Type & Count \\ +\midrule +\multicolumn{3}{l}{\textit{Census ACS S0101}} \\ +Person count by age band (18 bands $\times$ 51 states) & count & 918 \\ +\midrule +\multicolumn{3}{l}{\textit{IRS SOI}} \\ +Person count by AGI bracket (9 bins $\times$ 51 states) & count & 459 \\ +EITC dollars by qualifying children (4 bins $\times$ 51) & \$ & 204 \\ +Tax unit count by qualifying children (4 bins $\times$ 51) & count & 204 \\ +Aggregate AGI (unconditional, $\times$ 51 states) & \$ & 51 \\ +20 income/deduction dollar totals (domain $> 0$, $\times$ 51) & \$ & 1{,}020 \\ +Tax unit count for each of the 21 domains ($\times$ 51) & count & 1{,}071 \\ +\midrule +\multicolumn{3}{l}{\textit{USDA FNS SNAP}} \\ +SNAP spending ($\times$ 51 states) & \$ & 51 \\ +SNAP household count ($\times$ 51 states) & count & 51 \\ +\midrule +\multicolumn{3}{l}{\textit{CMS Medicaid}} \\ +Medicaid enrollment ($\times$ 51 states) & count & 51 \\ +\midrule +\multicolumn{3}{l}{\textit{Census STC}} \\ +State income tax collections ($\times$ 51 states) & \$ & 51 \\ +\midrule +& & \textbf{4{,}080} \\ +\bottomrule +\end{tabular} +} +\caption{State-level calibration targets (50 states + DC). IRS SOI variables mirror the district structure. USDA provides both SNAP spending and household counts; CMS provides Medicaid enrollment.} +\label{tab:state_targets} +\end{table} + +\subsection{National targets (106)} + +\begin{table}[H] +\centering +{\tablefont +\begin{tabular}{p{0.55\textwidth}lr} +\toprule +Target domain & Type & Count \\ +\midrule +\multicolumn{3}{l}{\textit{Demographics (Census ACS + curated)}} \\ +Person count by age band (18 bands) & count & 18 \\ +Person count by SSN card type (4 categories) & count & 4 \\ +Person count: Medicaid enrolled & count & 1 \\ +Person count: ACA PTC recipients & count & 1 \\ +\midrule +\multicolumn{3}{l}{\textit{IRS SOI --- domain-constrained aggregates}} \\ +AGI (unconditional) & \$ & 1 \\ +EITC by qualifying children (0--3+) & \$ & 4 \\ +Tax unit count by qualifying children (0--3+) & count & 4 \\ +21 income/deduction dollar totals (domain $> 0$) & \$ & 21 \\ +Tax unit count for each of the 21 domains & count & 21 \\ +\midrule +\multicolumn{3}{l}{\textit{CBO budget projections}} \\ +SNAP, Social Security, SSI, unemployment comp., income tax & \$ & 5 \\ +\midrule +\multicolumn{3}{l}{\textit{SSA benefit decomposition}} \\ +Retirement, disability, survivors, dependents & \$ & 4 \\ +\midrule +\multicolumn{3}{l}{\textit{JCT tax expenditure estimates}} \\ +SALT ded., charitable ded., mortgage interest ded., medical expense ded., QBI ded., EITC & \$ & 6 \\ +\midrule +\multicolumn{3}{l}{\textit{Healthcare spending (MEPS/NHEA/CMS)}} \\ +Medicaid, health insurance premiums, Medicare Part B, other medical expenses, OTC health & \$ & 5 \\ +\midrule +\multicolumn{3}{l}{\textit{Housing, transfers, and other}} \\ +Rent, real estate taxes, housing subsidy, work/childcare expenses, TANF, alimony (paid + received), child support (paid + received), tip income, net worth & \$ & 10 \\ +\midrule +\multicolumn{3}{l}{\textit{Retirement contributions (IRS SOI)}} \\ +Traditional IRA, Roth IRA contributions & \$ & 2 \\ +\midrule +& & \textbf{106} \\ +\bottomrule +\end{tabular} +} +\caption{National-level calibration targets. CBO, JCT, SSA, CMS, and Census values are curated from the cited administrative sources and stored in the ETL pipeline. Dollar values are inflation-adjusted to the calibration year.} +\label{tab:national_targets} +\end{table} + +\section{Algorithm pseudocode} +\label{app:algorithm} + +Algorithm~\ref{alg:l0} presents the complete $L_0$-regularized calibration procedure. + +\begin{algorithm}[ht] +\caption{$L_0$-regularized calibration with Hard Concrete gates} +\label{alg:l0} +\begin{algorithmic}[1] +\Require Calibration matrix $\mathbf{M} \in \R^{m \times n}$, targets $\mathbf{t} \in \R^m$, initial weights $\mathbf{w}_0 \in \R^n$ +\Require Hyperparameters: $\lambda_{L_0}$, $\lambda_{L_2}$, $\beta$, $\gamma$, $\zeta$, learning rate $\eta$, epochs $E$ +\Ensure Calibrated sparse weight vector $\hat{\mathbf{w}} \in \R^n$ + +\State Initialize $\log w_i \gets \log w_{0,i} + \mathcal{N}(0, 0.05^2)$ for all $i$ +\State Initialize $\log \alpha_i \gets \text{logit}(0.999) + \mathcal{N}(0, 0.01^2)$ for all $i$ +\State Initialize Adam optimizer with parameters $\{\log w_i, \log \alpha_i\}$ and learning rate $\eta$ + +\For{epoch $= 1$ to $E$} + \State \textbf{Sample Hard Concrete gates (training):} + \For{$i = 1$ to $n$} + \State $u_i \sim \text{Uniform}(\epsilon, 1-\epsilon)$ + \State $\bar{s}_i \gets \sigma\!\left(\frac{\log u_i - \log(1-u_i) + \log \alpha_i}{\beta}\right)$ + \State $s_i \gets \bar{s}_i(\zeta - \gamma) + \gamma$ + \State $z_i \gets \min(1, \max(0, s_i))$ + \EndFor + \State $w_i^{\text{eff}} \gets \exp(\log w_i) \cdot z_i$ for all $i$ + \State $\hat{t}_j \gets \sum_i M_{ji} \cdot w_i^{\text{eff}}$ for all $j$ + \State $\mathcal{L}_{\text{cal}} \gets \frac{1}{m}\sum_{j=1}^{m}\left(\frac{\hat{t}_j - t_j}{|t_j|}\right)^2$ + \State $\mathcal{L}_{L_0} \gets \sum_{i=1}^{n} \sigma\!\left(\log \alpha_i - \beta \log \frac{-\gamma}{\zeta}\right)$ + \State $\mathcal{L}_{L_2} \gets \sum_{i=1}^{n} w_i^2$ + \State $\mathcal{L} \gets \mathcal{L}_{\text{cal}} + \lambda_{L_0} \mathcal{L}_{L_0} + \lambda_{L_2} \mathcal{L}_{L_2}$ + \State Backpropagate $\nabla_{\log w, \log \alpha} \mathcal{L}$ + \State Adam step +\EndFor + +\State \textbf{Deterministic inference:} +\For{$i = 1$ to $n$} + \State $z_i^{\text{det}} \gets \min\!\left(1, \max\!\left(0,\; \sigma(\log \alpha_i)(\zeta - \gamma) + \gamma\right)\right)$ + \State $\hat{w}_i \gets \exp(\log w_i) \cdot z_i^{\text{det}}$ +\EndFor +\State \Return $\hat{\mathbf{w}}$ +\end{algorithmic} +\end{algorithm} diff --git a/paper-l0/sections/background.tex b/paper-l0/sections/background.tex new file mode 100644 index 000000000..8d436b009 --- /dev/null +++ b/paper-l0/sections/background.tex @@ -0,0 +1,72 @@ +\section{Background and related work} +\label{sec:background} + +\subsection{The survey calibration problem} + +Given a probability sample of $n$ units with initial design weights $d_i$ and a vector of auxiliary variables $\mathbf{x}_i \in \R^p$ for each unit $i$, survey calibration seeks adjusted weights $w_i$ such that the weighted sample totals reproduce known population totals: +\begin{equation} + \sum_{i=1}^{n} w_i \mathbf{x}_i = \mathbf{T} + \label{eq:calibration_constraint} +\end{equation} +where $\mathbf{T} \in \R^m$ is the vector of $m$ known administrative or census totals. When $m < n$, the system is underdetermined and a distance criterion selects among feasible solutions. \citet{deville1992} formalized this as a constrained optimization problem: minimize a distance function $\sum_i G(w_i, d_i)$ subject to Equation~\ref{eq:calibration_constraint}, where $G$ is convex and satisfies $G(d_i, d_i) = 0$. The choice of $G$ determines the calibration method: a chi-squared distance yields the generalized regression (GREG) estimator, an exponential distance yields raking (multiplicative calibration), and a truncated distance yields bounded weight adjustments. \citet{sarndal2007} provides a comprehensive review of these methods and their statistical properties. + +In the subnational setting addressed here, the constraint vector $\mathbf{T}$ contains targets at multiple geographic levels---congressional districts, states, and the nation---requiring that district totals sum to state totals, which sum to national totals. This hierarchical structure produces $m \approx 37{,}800$ simultaneous constraints with near-collinearity across levels, placing the problem beyond the regime where classical closed-form calibration methods operate reliably. + +\subsection{Generalized regression (GREG) estimation} + +The GREG estimator minimizes the chi-squared distance $\sum_i (w_i - d_i)^2 / d_i$ subject to Equation~\ref{eq:calibration_constraint}, yielding the closed-form solution: +\begin{equation} + w_i = d_i + d_i \, \mathbf{x}_i^\top \left(\sum_{j=1}^{n} d_j \, \mathbf{x}_j \mathbf{x}_j^\top\right)^{-1} \left(\mathbf{T} - \sum_{j=1}^{n} d_j \, \mathbf{x}_j\right) + \label{eq:greg} +\end{equation} +This requires inverting a $p \times p$ matrix, where $p$ is the dimension of the auxiliary vector. When $p$ is moderate (tens to hundreds), GREG is computationally efficient, statistically well understood, and produces asymptotically unbiased estimators \citep{deville1992, sarndal2007}. + +GREG has two practical limitations in the subnational setting. First, the matrix inversion in Equation~\ref{eq:greg} becomes numerically ill-conditioned as $p$ grows into the thousands, particularly when constraints at different geographic levels are nearly collinear (e.g., the sum of district age counts within a state nearly equals the state age total). Second, GREG does not constrain weight signs: calibrated weights can become negative, which is undesirable for microsimulation since negative weights imply subtracting households from the population. Weight truncation or bounding after the fact restores non-negativity but violates the calibration constraints. + +The Congressional Budget Office \citep{cbo2018}, Joint Committee on Taxation \citep{jct2023}, and Tax Policy Center \citep{tpc2024} use variants of GREG calibration for their national microsimulation models, where the number of calibration constraints is typically in the hundreds---well within GREG's reliable operating range. + +\subsection{Iterative proportional fitting} + +Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts cell counts in a contingency table to match given marginal totals. The algorithm cycles through dimensions, scaling each dimension's cells so that their marginal matches the target, then repeating until convergence. IPF converges to the maximum entropy solution subject to the marginal constraints \citep{ireland1968}. + +In the microsimulation context, IPF adjusts household weights to match cross-classified population counts---for example, persons by age group within each congressional district. IPF has several practical advantages: it preserves non-negativity by construction (weights are scaled multiplicatively, so positive weights remain positive), it requires no matrix inversion, and it scales well to high-dimensional contingency tables. EUROMOD, the EU-wide tax-benefit microsimulation model, uses IPF-based calibration to reweight national surveys to demographic benchmarks across member states. + +However, IPF has three limitations relevant to subnational calibration. First, IPF does not naturally enforce hierarchical consistency: district-level targets produced by IPF do not automatically sum to the correct state totals, requiring post-hoc reconciliation that may introduce new inconsistencies. Second, IPF handles only count targets organized as contingency table margins; incorporating continuous-valued targets (e.g., aggregate income or benefit spending) requires auxiliary procedures outside the IPF framework. Third, IPF scales cell counts multiplicatively, which can produce extreme weights when initial cells are small or zero, and convergence slows or fails when marginal constraints are mutually inconsistent. + +\subsection{Spatial microsimulation} + +Spatial microsimulation constructs small-area populations by selecting or reweighting survey records to match local-area census constraints. \citet{williamson1998} introduced a combinatorial optimization approach that selects a subset of survey records for each small area using simulated annealing to minimize the difference between weighted survey totals and census benchmarks. \citet{huang2001} extended this with a deterministic algorithm based on systematic record selection. \citet{tanton2011} applied generalized regression reweighting to create small-area estimates of poverty and housing stress in Australia. + +\citet{harland2012} developed methods for creating realistic synthetic populations at fine geographic scales using iterative proportional fitting combined with Monte Carlo sampling. \citet{lovelace2016} provided an accessible implementation in R with the \texttt{spatial-microsim-book} framework. + +These methods typically operate at a single geographic level---producing estimates for each small area independently. Joint calibration across multiple geographic levels (district, state, national) with a single set of weights is uncommon in the spatial microsimulation literature, as it requires simultaneously satisfying tens of thousands of constraints that span different administrative geographies. Other operational models avoid the problem entirely: TAXSIM (NBER) operates at the national level without geographic calibration, while state-level models maintained by individual state revenue departments calibrate only within their own jurisdiction. + +\subsection{$L_0$ regularization and the Hard Concrete distribution} + +$L_0$ regularization penalizes the count of nonzero parameters in a model, encouraging sparsity. Unlike $L_1$ regularization, which penalizes the sum of absolute values and produces approximate sparsity through shrinkage, $L_0$ regularization produces exact zeros. The $L_0$ norm $\|\mathbf{w}\|_0 = \sum_i \mathbf{1}[w_i \neq 0]$ is discontinuous and combinatorial, making direct optimization intractable for large parameter spaces. + +\citet{louizos2018} proposed a differentiable relaxation of $L_0$ regularization using the Hard Concrete distribution. Each parameter is multiplied by a stochastic gate $z_i$ drawn from a stretched and rectified Bernoulli distribution. During training, the gate is sampled as: +\begin{align} + u &\sim \text{Uniform}(0, 1) \\ + \bar{s} &= \sigma\!\left(\frac{\log u - \log(1-u) + \log \alpha_i}{\beta}\right) \\ + s &= \bar{s}(\zeta - \gamma) + \gamma \\ + z_i &= \min(1, \max(0, s)) +\end{align} +where $\sigma$ is the sigmoid function, $\alpha_i$ is a learnable parameter controlling the gate's probability of being open, $\beta$ is a temperature parameter, and $\gamma < 0$ and $\zeta > 1$ are stretch parameters that place probability mass at exactly zero and exactly one after clipping. The expected $L_0$ penalty is: +\begin{equation} + \E[L_0] = \sum_i \sigma\!\left(\log \alpha_i - \beta \log \frac{-\gamma}{\zeta}\right) +\end{equation} +which is differentiable with respect to $\alpha_i$ and can be optimized with standard gradient methods. + +At inference time, the stochastic sample is replaced by the deterministic mean: +\begin{equation} + z_i^{\text{det}} = \min\!\left(1, \max\!\left(0,\; \sigma(\log \alpha_i)(\zeta - \gamma) + \gamma\right)\right) +\end{equation} + +The Hard Concrete distribution was originally developed for pruning neural network weights \citep{louizos2018}. In the present work, we repurpose it for survey weight selection: each household-geography combination receives a gate, and the $L_0$ penalty controls how many combinations are retained in the final dataset. + +\subsection{National-level predecessor} + +\citet{woodruff2024} developed a two-stage method for constructing enhanced national microsimulation datasets. In the first stage, quantile regression forests \citep{meinshausen2006quantile} impute 72 tax variables from the IRS Public Use File onto CPS records, preserving joint distributional characteristics through sequential conditioning. In the second stage, dropout-regularized gradient descent optimizes household weights to match approximately 7,000 national-level administrative targets from the IRS, CBO, JCT, Census Bureau, and program-specific sources. + +The present paper extends this framework in four directions. First, we replace the single-geography dataset with a clone-and-assign procedure that replicates each CPS household across 436 congressional districts, 50 states (plus DC), and New York City, enabling subnational coverage. Second, we replace dropout regularization with $L_0$ Hard Concrete gates, providing a principled mechanism for exact sparsity with a configurable sparsity-accuracy trade-off. Third, we introduce hierarchical uprating to reconcile targets from different administrative sources---where, for example, district-level IRS totals may not sum exactly to state-level USDA program totals due to different data collection methodologies and reference periods. Fourth, we add take-up re-randomization so that program participation varies across geographic clones of the same household, reflecting local-area take-up rates. diff --git a/paper-l0/sections/conclusion.tex b/paper-l0/sections/conclusion.tex new file mode 100644 index 000000000..81ef17637 --- /dev/null +++ b/paper-l0/sections/conclusion.tex @@ -0,0 +1,14 @@ +\section{Conclusion} +\label{sec:conclusion} + +This paper presents an $L_0$ regularization method for calibrating microsimulation datasets to subnational administrative targets. The method jointly optimizes household weight magnitudes and sparsity using Hard Concrete gates, producing calibrated datasets that simultaneously match approximately 37,800 targets across congressional districts, states, and the nation. + +The key technical contribution is the adaptation of $L_0$ regularization---originally developed for neural network pruning---to the survey calibration setting. Each household-geography combination receives a continuous weight and a stochastic binary gate. The gate's learnable logit and the weight magnitude are jointly optimized via gradient descent, with the $L_0$ penalty controlling sparsity. At inference, gates collapse to deterministic zeros and ones, producing a sparse dataset in which the number of retained records is a smooth function of the penalty parameter $\lambda_{L_0}$. + +The configurable sparsity is practically useful: the same pipeline produces compact 50,000-record datasets for web-based interactive tools and detailed 3--4 million-record datasets for subnational policy analysis, without separate calibration procedures. + +The pipeline builds on the CPS-PUF imputation methodology of \citet{woodruff2024}, extending it from national to subnational coverage through clone-and-assign geography, hierarchical target reconciliation, and take-up re-randomization. The full pipeline---from raw CPS to calibrated H5 datasets---runs in approximately 8--12 hours on cloud infrastructure and is fully open source. + +The method is implemented in two open-source packages: the \texttt{l0-python} PyTorch package (\url{https://github.com/PolicyEngine/l0-python}), which provides the Hard Concrete optimizer, and the \texttt{policyengine-us-data} pipeline (\url{https://github.com/PolicyEngine/policyengine-us-data}), which implements the full four-stage calibration. Calibrated datasets are publicly available on HuggingFace (\texttt{policyengine/policyengine-us-data}). + +Future work includes extending calibration to county-level targets as additional administrative data becomes available, implementing adaptive $\lambda_{L_0}$ scheduling during training (analogous to learning rate schedules), incorporating an early stopping criterion based on held-out target validation, and applying the method to non-US microsimulation systems. diff --git a/paper-l0/sections/data.tex b/paper-l0/sections/data.tex new file mode 100644 index 000000000..b1b741518 --- /dev/null +++ b/paper-l0/sections/data.tex @@ -0,0 +1,89 @@ +\section{Data} +\label{sec:data} + +The calibration pipeline consumes two categories of input: base microdata from household surveys, and administrative targets from government agencies. This section describes both. + +\subsection{Base microdata} + +\subsubsection{Current Population Survey} + +The primary microdata source is the Current Population Survey Annual Social and Economic Supplement \citep[CPS ASEC;][]{census2024}, a nationally representative household survey of approximately 200,000 persons conducted jointly by the US Census Bureau and the Bureau of Labor Statistics. The CPS ASEC contains detailed demographic variables (age, sex, race, household composition, state of residence), income variables (earnings, Social Security, pension, unemployment compensation), and program participation indicators (SNAP, Medicaid, SSI, TANF). + +The CPS has well-documented limitations for tax microsimulation. Top incomes are truncated for privacy protection, causing underestimation of capital gains, partnership income, and other high-income components \citep{burkhauser2012}. Benefit receipt is underreported relative to administrative totals \citep{rothbaum2021, meyer2021}. Tax-specific variables---itemized deductions, tax credits, and filing-status-dependent calculations---are either absent or imprecisely measured. + +\subsubsection{IRS Public Use File imputation} + +To address these gaps, we impute 72 tax variables from the IRS Public Use File \citep[PUF;][]{bryant2023a} onto CPS records following the methodology of \citet{woodruff2024}. The PUF contains individual tax return data with detailed income components, deductions, and credits, but lacks household structure and demographic detail. + +The imputation uses quantile regression forests \citep[QRF;][]{meinshausen2006quantile} trained on the PUF and applied to CPS records. To preserve the joint distribution across the 72 variables, QRF models are applied sequentially: each variable is imputed conditional on all previously imputed variables in the sequence. A stratified subsample of PUF training records preserves the top 0.5\% of the AGI distribution (retaining all records above the 99.5th percentile) alongside a random sample of 20,000 records from the remainder. + +The imputation overwrites a subset of 44 unreliable CPS variables with PUF predictions, while retaining original CPS values for all other variables. Each CPS record receives QRF-imputed values for the 72 tax variables, producing an enhanced dataset that combines the demographic detail of the CPS with the tax fidelity of the PUF. + +Social Security income, which appears as a single total in the PUF, is decomposed into four sub-components (retirement, disability, survivors, dependents) using a QRF model trained on CPS records where all four components are observed. An age-based heuristic serves as a fallback: records with age 62 or above receive 100\% retirement allocation; younger records receive 100\% disability allocation. + +\subsubsection{Source imputation from additional surveys} + +Nine additional variables are imputed from three external surveys to fill gaps in CPS measurement: + +\begin{itemize} + \item \textbf{American Community Survey (ACS) 2022}: rent and real estate taxes, imputed with state FIPS as a predictor. Because geography is assigned before source imputation (Section~\ref{sec:stage1}), the ACS QRF conditions on the clone's assigned state, producing state-aware housing cost predictions. + \item \textbf{Survey of Income and Program Participation (SIPP) 2023}: tip income, bank account assets, stock assets, and bond assets. SIPP public-use files lack state identifiers, so these imputations are state-blind. + \item \textbf{Survey of Consumer Finances (SCF) 2022}: net worth, auto loan balance, and auto loan interest. SCF also lacks state identifiers; imputations are state-blind. +\end{itemize} + +Training sample sizes are 10,000 household heads for ACS, up to 20,000 weighted-probability records for SIPP, and 50\% of SCF records. + +\subsection{Calibration targets} + +The optimizer calibrates against approximately 37,800 targets spanning three geographic levels and multiple administrative sources. Table~\ref{tab:target_summary} summarizes the target structure. + +\input{tables/target_summary} + +\subsubsection{Congressional district targets} + +At the district level (436 congressional districts), targets come from two sources: + +\begin{itemize} + \item \textbf{IRS Statistics of Income (SOI)}: adjusted gross income, income tax, EITC by number of qualifying children, capital gains, self-employment income, pension income, and other income and deduction categories. These are available at the ZIP code level and aggregated to congressional districts. + \item \textbf{Census ACS}: age distributions in 18 bands (0--4, 5--9, \ldots, 80--84, 85+), providing demographic structure within each district. + \item \textbf{SNAP household counts}: district-level counts of SNAP-receiving households from USDA administrative data. +\end{itemize} + +\subsubsection{State targets} + +At the state level (50 states plus DC), additional targets include: + +\begin{itemize} + \item \textbf{USDA}: administrative SNAP spending by state. + \item \textbf{CMS}: Medicaid enrollment by state. + \item \textbf{Census Bureau}: state income tax collections. +\end{itemize} + +\subsubsection{National targets} + +National targets provide top-level fiscal and demographic constraints: + +\begin{itemize} + \item \textbf{CBO}: federal budget projections for program spending and revenue. + \item \textbf{JCT}: tax expenditure estimates for major deductions and credits. + \item \textbf{SSA}: benefit totals by program (retirement, disability, survivors, SSI). + \item Additional administrative totals for healthcare spending and demographic benchmarks. +\end{itemize} + +\subsection{Hierarchical uprating} +\label{sec:uprating} + +Calibration targets originate from different sources with different reference periods. IRS SOI district data may reference tax year 2022, while USDA SNAP data references fiscal year 2024 and CBO projections reference the current budget year. Two adjustments reconcile these differences. + +The \textit{uprating factor} (UF) bridges the time gap between the source data period and the calibration year. For most domains, dollar-denominated targets use the Consumer Price Index and count targets use Census population growth projections. For ACA premium tax credits, state-specific uprating factors derived from CMS/KFF enrollment data capture state-level variation in marketplace enrollment growth. + +The \textit{hierarchy inconsistency factor} (HIF) corrects for district-level totals that do not sum exactly to state-level totals, which occurs when district and state data come from different administrative sources or use different collection methodologies. For each state $s$ and variable $v$, the HIF is: +\begin{equation} + \text{HIF}_{s,v} = \frac{T_{s,v}^{\text{state}}}{\sum_{d \in s} T_{d,v}^{\text{district}}} +\end{equation} +where $T_{s,v}^{\text{state}}$ is the state-level target and $T_{d,v}^{\text{district}}$ is the district-level target for district $d$ within state $s$. Each district target is then adjusted as $T_{d,v}^{\text{adj}} = T_{d,v}^{\text{district}} \times \text{HIF}_{s,v} \times \text{UF}_{s,v}$, ensuring that adjusted district targets sum exactly to the uprated state total: +\begin{equation} + \sum_{d \in s} T_{d,v}^{\text{adj}} = \text{UF}_{s,v} \times T_{s,v}^{\text{state}} +\end{equation} + +For IRS SOI data, where district totals are constructed from ZIP-code-level data that sums exactly to state totals, the HIF equals 1.0. For SNAP household counts, where district estimates from one source substantially undercount state administrative totals from another, HIFs range from 1.2 to 1.7 across states. diff --git a/paper-l0/sections/discussion.tex b/paper-l0/sections/discussion.tex new file mode 100644 index 000000000..54eb6ddff --- /dev/null +++ b/paper-l0/sections/discussion.tex @@ -0,0 +1,40 @@ +\section{Discussion} +\label{sec:discussion} + +\subsection{Configurable sparsity trade-off} + +The $\lambda_{L_0}$ parameter provides a continuous sparsity-accuracy dial. At one extreme, $\lambda_{L_0} = 10^{-4}$ produces a compact dataset of approximately 50,000 records that loads in seconds for web-based simulation tools, where users expect near-instant feedback. At the other extreme, $\lambda_{L_0} = 10^{-8}$ retains 3--4 million records with fine geographic resolution across all 436 congressional districts. Intermediate values produce datasets of intermediate size. + +This trade-off does not exist in classical calibration methods. IPF and GREG produce a single set of weights without sparsity control. To reduce dataset size, researchers must discard records post hoc or apply ad hoc thresholding---neither of which jointly optimizes accuracy and sparsity. The Hard Concrete gate provides a principled mechanism for this joint optimization, with $\lambda_{L_0}$ serving as the researcher's preference parameter over the Pareto frontier. + +\subsection{Computational cost} + +The pipeline runs on Modal, a cloud compute platform, using T4 GPUs for the optimization step. Stage 1 (clone creation and imputation) requires approximately 2--3 hours of CPU time. Stage 2 (matrix construction) requires approximately 2--3 hours across parallel workers, dominated by running \policyengine{} simulations for each of the 51 state-level configurations. Stage 3 (optimization) requires approximately 30--60 minutes of GPU time for the national preset (4,000 epochs) and 5--15 minutes for the local preset (1,000 epochs). Stage 4 (H5 assembly) requires approximately 4--5 hours across parallel workers for all 488 (436 CDs, 50 states plus DC, NYC and a national) H5 builds. + +Total wall-clock time for a complete pipeline run is approximately 8--12 hours. This exceeds the cost of a single IPF or GREG calibration, which takes minutes. However, the pipeline amortizes the expensive matrix construction step: once built, the calibration package can be reused with different $\lambda_{L_0}$ presets or target configurations without rebuilding. + +\subsection{Limitations} + +\subsubsection{Temporal gap between PUF and CPS} + +The most recent publicly available PUF references tax year 2015 \citep{bryant2023a}. The CPS ASEC is updated annually. Imputing 2015 tax return variables onto 2024 CPS records introduces a temporal mismatch. The QRF imputation conditions on demographic and income variables that are available in both datasets, partially mitigating the gap, but structural changes in the tax code since 2015---such as the Tax Cuts and Jobs Act of 2017---may not be fully captured. + +\subsubsection{No early stopping} + +The current implementation runs for a fixed number of epochs without an automatic convergence criterion. Convergence is assessed post hoc from diagnostic outputs. An adaptive stopping rule based on validation loss on held-out targets (excluded from training via \texttt{target\_config.yaml}) could reduce computation time and prevent overfitting to the training target set. + +\subsubsection{Target selection sensitivity} + +The choice of which targets to include in the optimization affects calibration accuracy on excluded targets. The \texttt{target\_config.yaml} mechanism provides flexibility but also introduces a modeling decision: including too many targets may overfit the weights to specific administrative totals, while excluding targets leaves them uncalibrated. The current configuration was developed iteratively through validation against held-out targets, but a more systematic approach to target selection---analogous to feature selection in supervised learning---could improve robustness. + +\subsubsection{Take-up uncertainty} + +Programme take-up draws are stochastic, introducing noise into the calibration matrix entries for take-up-dependent targets. Different random seeds produce different take-up assignments, which produce different calibrated weights. The pipeline uses deterministic seeds for reproducibility but does not currently quantify the sensitivity of calibration accuracy to the take-up random seed. + +\subsubsection{Geographic resolution} + +The current pipeline calibrates at three levels: congressional district, state, and national. Finer geographic levels---counties, metropolitan areas, school districts---are feasible in principle but would require additional target data and a larger calibration matrix. The census block assignment already provides the geographic foundation; the constraint is the availability of administrative targets at finer levels. + +\subsection{Generalizability} + +The method is not specific to the United States or to any particular tax-benefit system. Any setting where (a) a household survey must be calibrated to (b) administrative targets at (c) multiple geographic levels is a candidate for $L_0$-regularized calibration. The UK Family Resources Survey calibrated to HMRC tax data across local authorities, or the EU Statistics on Income and Living Conditions calibrated to Eurostat regional benchmarks, are plausible applications. The \texttt{l0-python} package implements the Hard Concrete optimizer independently of the \policyengine{} framework. diff --git a/paper-l0/sections/introduction.tex b/paper-l0/sections/introduction.tex new file mode 100644 index 000000000..b67b421c6 --- /dev/null +++ b/paper-l0/sections/introduction.tex @@ -0,0 +1,20 @@ +\section{Introduction} +\label{sec:introduction} + +Microsimulation models estimate the effects of tax and benefit policies on households by applying program rules to individual-level microdata. Most operational models---including those maintained by the Congressional Budget Office \citep{cbo2018}, the Joint Committee on Taxation \citep{jct2023}, and the Tax Policy Center \citep{tpc2024}---operate at the national level. They calibrate household survey weights to aggregate administrative totals such as total income tax revenue, program enrollment counts, and demographic benchmarks, then use the reweighted dataset to simulate policy reforms. + +Subnational policy analysis introduces a fundamentally different calibration challenge. Rather than matching a single set of national aggregates, the microdata must simultaneously reproduce distributional statistics at multiple geographic levels: congressional districts, states, and the nation as a whole. A dataset calibrated for the state of California must match California-specific IRS income totals, SNAP participation counts, Medicaid enrollment, and age distributions, while remaining consistent with national budget projections from the CBO and tax expenditure estimates from the JCT. Across 436 congressional districts and 50 states, this produces approximately 37,800 simultaneous calibration targets. + +Existing calibration methods scale poorly to this setting. Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts weights along one dimension at a time, cycling through marginal constraints until convergence. IPF handles cross-classified tables but does not naturally accommodate hierarchical geographic constraints---district targets must sum to state targets, which must sum to national targets---without ad hoc post-processing. Generalized regression (GREG) estimators \citep{deville1992, sarndal2007} solve a constrained optimization problem that minimizes distance from initial weights subject to exact calibration constraints. GREG produces a closed-form solution for moderate numbers of constraints but becomes computationally intractable and numerically unstable as the constraint count approaches the tens of thousands. + +Spatial microsimulation methods take a different approach, constructing synthetic populations for small areas by combinatorial optimization \citep{williamson1998, huang2001}, simulated annealing \citep{harland2012}, or deterministic reweighting \citep{tanton2011, lovelace2016}. These methods typically operate at a single geographic level and require separate calibration runs for each area, making joint multi-level calibration difficult. + +This paper presents a method that addresses these limitations by jointly optimizing weight magnitudes and sparsity in a single gradient-based framework. We adapt the Hard Concrete distribution \citep{louizos2018}, originally developed for neural network pruning, to the survey calibration setting. Each household-geography combination receives a continuous weight and a stochastic binary gate. The gate is parameterized by a learnable logit and trained via gradient descent to minimize a loss function that combines relative calibration error across all 37,800 targets with an $L_0$ penalty on the expected number of active records. At inference time, the stochastic gates collapse to deterministic zeros and ones, producing a sparse dataset in which most household-geography combinations are dropped while the retained records carry calibrated positive weights. + +The approach builds on \citet{woodruff2024}, who developed a two-stage methodology for constructing enhanced national microsimulation datasets from the Current Population Survey (CPS) and the IRS Public Use File (PUF). Their method uses quantile regression forests (QRF) to impute 72 tax variables from the PUF onto CPS records, then applies dropout-regularized gradient descent to reweight the combined dataset against approximately 7,000 national targets. The present paper extends this framework from a single national dataset to subnational coverage by introducing three new components: (a) a clone-and-assign procedure that replicates each CPS household across multiple geographic locations, (b) $L_0$ Hard Concrete gates that replace dropout regularization and enable exact sparsity, and (c) a hierarchical uprating scheme that reconciles targets from different administrative sources at district, state, and national levels. + +The configurable sparsity penalty produces datasets of different sizes for different use cases. A high penalty ($\lambda_{L_0} = 10^{-4}$) retains approximately 50,000 records, suitable for national-level web-based simulation where download size and computation time matter. A low penalty ($\lambda_{L_0} = 10^{-8}$) retains approximately 3--4 million records, preserving geographic resolution for all 436 congressional districts. + +The method is implemented in open-source Python packages and deployed as part of \policyengine{}'s US microsimulation model (\url{https://policyengine.org/us/model}), which uses these calibrated datasets for both national and subnational policy analysis. + +The remainder of this paper is organized as follows. Section~\ref{sec:background} reviews survey calibration methods, spatial microsimulation, and the Hard Concrete distribution. Section~\ref{sec:data} describes the input microdata and calibration target sources. Section~\ref{sec:methodology} details the four-stage pipeline: clone creation, calibration matrix construction, $L_0$ optimization, and dataset assembly. Section~\ref{sec:results} presents calibration accuracy, sparsity analysis, and comparisons with IPF and GREG. Section~\ref{sec:discussion} discusses trade-offs, limitations, and generalizability. Section~\ref{sec:conclusion} concludes. diff --git a/paper-l0/sections/methodology.tex b/paper-l0/sections/methodology.tex new file mode 100644 index 000000000..82d9920f3 --- /dev/null +++ b/paper-l0/sections/methodology.tex @@ -0,0 +1,158 @@ +\section{Methodology} +\label{sec:methodology} + +The calibration pipeline transforms raw CPS microdata into a calibrated subnational dataset through four stages: (1) clone creation and geographic assignment, (2) calibration matrix construction, (3) $L_0$-regularized weight optimization, and (4) dataset assembly. Figure~\ref{fig:pipeline} provides an overview. + +\begin{figure}[ht] + \centering + \fbox{\parbox{0.9\textwidth}{\centering\textit{[Pipeline overview diagram to be inserted]}}} + \caption{Four-stage calibration pipeline. Stage 1 clones CPS records and assigns geography. Stage 2 builds the sparse calibration matrix by simulating each clone through the tax-benefit engine. Stage 3 runs the $L_0$ optimizer to find calibrated weights with configurable sparsity. Stage 4 expands the flat weight vector into per-area H5 dataset files.} + \label{fig:pipeline} +\end{figure} + +\subsection{Stage 1: clone creation and geographic assignment} +\label{sec:stage1} + +The base CPS contains approximately 100,000 household records, each with a single state of residence. A stratified subsampling step reduces this to approximately 12,000 households, preserving the top 0.5\% of the AGI distribution in full while uniformly sampling from the remainder. This reduction makes downstream microsimulation computationally feasible while retaining distributional diversity. + +To cover 436 congressional districts and 50 states, we replicate each of the approximately 12,000 households $N$ times ($N = 430$ in the default configuration) and assign each clone a random census block from a population-weighted distribution. Although the clone count is slightly below the number of congressional districts, every record is replicated 430 times across different geographic areas, providing the optimizer with sufficient degrees of freedom to place each household type wherever targets require it. + +\subsubsection{Block sampling} + +Census blocks are the finest geographic unit in the decennial census. Each block maps deterministically to a congressional district, county, tract, and state. The sampling distribution $P_{\text{pop}}(\text{block})$ is proportional to the block's share of the national population. Drawing blocks rather than congressional districts ensures fine-grained geographic variation within districts and enables derivation of county-level variables (Section~\ref{sec:stage4}). + +\subsubsection{AGI-conditional routing} + +High-income households are routed toward high-AGI congressional districts using a modified sampling distribution. Let $A_d$ denote the aggregate adjusted gross income target for district $d$ from IRS SOI data, and let $P_{\text{pop}}(b)$ denote the population-weighted block probability for block $b$ in district $d$. For households with AGI above the 90th percentile, the sampling distribution is: +\begin{equation} + P_{\text{AGI}}(b) \propto P_{\text{pop}}(b) \cdot A_{d(b)} +\end{equation} +where $d(b)$ is the congressional district containing block $b$. This makes blocks in high-AGI districts more likely targets for high-income households, improving the initial geographic allocation before optimization. Without AGI-conditional routing, the optimizer would need to zero out high-income records that landed in low-AGI districts by chance, wasting capacity for population and demographic targets in those districts. + +\subsubsection{No-collision constraint} + +The same CPS household must not appear in the same congressional district in two different clones. If household $h$ in clone $c_1$ lands in district $d$, then household $h$ in clone $c_2$ must land in a different district. This prevents a high-weight household from dominating a small district's targets. The constraint is enforced by resampling: clone 0 draws blocks freely; each subsequent clone checks for collisions against all previous clones and resamples colliding records for up to 50 retries. Residual collisions after 50 retries are accepted; these are rare with 430 clones and the large block distribution. + +After cloning, the total number of household-geography combinations is $N_{\text{clones}} \times n_{\text{records}}$. With 430 clones and approximately 12,000 base households (after stratified subsampling), this produces approximately 5.2 million column positions in the calibration matrix. + +\subsection{Stage 2: calibration matrix construction} +\label{sec:stage2} + +The calibration matrix $\mathbf{M} \in \R^{m \times n}$ maps $n$ household-geography combinations (columns) to $m$ calibration targets (rows). Entry $M_{ji}$ is the contribution of record $i$ to target $j$---for dollar targets, this is the household's simulated value of the target variable; for count targets, it is 1 if the household satisfies the target's domain constraint and 0 otherwise. + +\subsubsection{Per-state parallel simulation} + +The matrix is populated by running each household through \policyengine{}'s tax-benefit microsimulation engine. Because many target variables depend on state-specific tax and benefit rules, a separate simulation is required for each state. A parallel dispatcher sends one job per unique state FIPS code to a pool of worker processes. Each worker creates a fresh \texttt{Microsimulation} instance, overwrites every household's \texttt{state\_fips} with the target state, invalidates cached downstream variables, and calculates all target variables at the household and person levels, accounting for differences in state legislation. + +For county-dependent variables---currently limited to ACA premium tax credits, where eligibility depends on county-level benchmark plan premiums---an additional simulation loop iterates over counties within each state, setting the county FIPS for each iteration. + +\subsubsection{Take-up re-randomization} +\label{sec:takeup} + +Several benefit programs require a stochastic take-up decision: whether an eligible household actually participates. To construct the matrix correctly under take-up uncertainty, the pipeline runs three simulations per state: (a) a baseline simulation with original take-up values; (b) an all-take-up-true simulation that computes each entity's benefit value assuming full participation; and (c) a would-file-false simulation for tax unit variables. + +The take-up rate for each program is resolved at the state level from the clone's assigned census block. Programs with take-up re-randomization include SNAP, ACA premium tax credits, Medicaid, SSI, TANF, Head Start, and Early Head Start. The pipeline draws take-up booleans per (variable, household, clone) triple using a deterministic seeded random number generator. The seed is derived from the variable name, original household ID, and clone index, ensuring that draws are reproducible and independent across clones. Different clones of the same household may have different take-up draws, reflecting the fact that the same household placed in a different geographic area would face a different local take-up rate. + +\subsubsection{Clone loop and COO assembly} + +After all per-state simulations and take-up preparation complete, a clone loop iterates over each of the $N$ clones. For each clone $c$: + +\begin{enumerate} + \item Read the geographic slice: which state and district each record maps to in clone $c$. + \item Draw per-clone take-up booleans for each benefit program using the clone's geographic assignment and the deterministic seed. + \item Assemble per-record values by looking up the appropriate state simulation results for each record's assigned state. For take-up-dependent variables, entity-level values from the all-take-up-true simulation are multiplied by the per-clone take-up draw to produce the matrix entry for that clone. + \item Evaluate domain constraints---predicates that determine whether a record contributes to a particular target (e.g., ``SNAP $> 0$'' for SNAP dollar targets, ``age $\geq 18$'' for adult population counts). + \item Emit nonzero entries as coordinate (COO) triples $(\text{row}, \text{col}, \text{value})$, where $\text{col} = c \times n_{\text{records}} + i$ for record $i$ in clone $c$. +\end{enumerate} + +The COO entries from all clones are concatenated and converted to a compressed sparse row (CSR) matrix. Typical density is below 1\%, as most records contribute to targets only in their assigned geographic area. This ordering ensures that the matrix accurately represents what the calibrated weights will reproduce when applied to the final dataset. + +\subsubsection{Target configuration} + +After the full unfiltered matrix is built, a configuration file (\texttt{target\_config.yaml}) selects the subset of targets used for optimization. Each rule specifies a variable name, geographic level, and optionally a domain variable. This separation allows the same expensive matrix to be reused with different target configurations without rebuilding. + +Targets with zero row sums---meaning no record can contribute---are marked as unachievable and excluded from the loss function. + +\subsection{Stage 3: $L_0$-regularized weight optimization} +\label{sec:stage3} + +\subsubsection{Loss function} + +Given the sparse calibration matrix $\mathbf{M}$, a vector of target values $\mathbf{t} \in \R^m$, and a weight vector $\bw \in \R^n$, the optimizer minimizes: +\begin{equation} + \mathcal{L}(\bw, \balpha) = \frac{1}{m}\sum_{j=1}^{m}\left(\frac{\hat{t}_j - t_j}{|t_j|}\right)^2 + \lambda_{L_0}\sum_{i=1}^{n}\bar{z}_i + \lambda_{L_2}\|\bw\|_2^2 + \label{eq:loss} +\end{equation} +where the weighted estimate for target $j$ is: +\begin{equation} + \hat{t}_j = \sum_{i=1}^{n} M_{ji} \cdot w_i \cdot z_i + \label{eq:estimate} +\end{equation} +$z_i \in [0, 1]$ is the Hard Concrete gate for record $i$ (Equations~1--4 in Section~\ref{sec:background}), $\bar{z}_i = \sigma(\log \alpha_i - \beta \log(-\gamma/\zeta))$ is the expected gate activation used as the $L_0$ penalty, $\lambda_{L_0}$ controls the sparsity-accuracy trade-off, and $\lambda_{L_2}$ provides mild weight regularization. + +The calibration loss uses \textit{relative} errors: a 1\% miss on a \$1 billion SNAP target receives the same gradient signal as a 1\% miss on a \$9 trillion employment income target. This scale-invariant formulation prevents large-magnitude targets from dominating the loss. + +\subsubsection{Hyperparameters} + +Table~\ref{tab:hyperparameters} lists the optimization hyperparameters with their values and roles. The stretch parameters $\gamma = -0.1$ and $\zeta = 1.1$ follow the original Hard Concrete paper, placing approximately 9\% of the sigmoid's mass below 0 and above 1, which is what allows clipping to produce exact zeros and ones. + +\input{tables/hyperparameters} + +\subsubsection{Initialization} + +Weights are initialized from age-bin population targets rather than uniformly. For each congressional district, the sum of age-bin target values gives the district's total population. The initial weight for each record assigned to that district is set to the district population divided by the number of active records in the district. This gives the optimizer a demographically grounded starting point: records in high-population districts begin with higher weights. Small Gaussian jitter in log-weight space ($\sigma = 0.05$) and log-alpha space ($\sigma = 0.01$) breaks symmetry between duplicate CPS records. + +Gate logits are initialized so that $P(z_i > 0) \approx 0.999$---nearly every record starts active. The optimizer begins from a dense, approximately calibrated state and prunes as the $L_0$ penalty accumulates over training epochs. + +\subsubsection{Presets} + +Two presets control the sparsity-accuracy trade-off via $\lambda_{L_0}$: + +\input{tables/presets} + +The only difference between presets is $\lambda_{L_0}$. All other hyperparameters are shared. A higher $\lambda_{L_0}$ increases the gradient signal pushing gate logits below zero, pruning more records. + +\subsubsection{Optimization loop} + +The optimizer uses the Adam algorithm \citep{kingma2015} with learning rate 0.15. At each epoch: + +\begin{enumerate} + \item Sample Hard Concrete gates $z_i$ (stochastic during training). + \item Compute effective weights: $w_i^{\text{eff}} = \exp(\log w_i) \cdot z_i$. + \item Compute predictions: $\hat{t}_j = \sum_i M_{ji} \cdot w_i^{\text{eff}}$. + \item Evaluate the loss (Equation~\ref{eq:loss}). + \item Backpropagate and update $\{\log w_i, \log \alpha_i\}$ via Adam. +\end{enumerate} + +At inference, stochastic gates are replaced by their deterministic counterparts. Records where $z_i^{\text{det}} = 0$ are excluded from the output dataset. + +The current implementation runs for a fixed number of epochs (100 for regional fits, 4,000 for national fits) without early stopping. Convergence is assessed post hoc from diagnostic outputs. + +\subsection{Stage 4: weight expansion and dataset assembly} +\label{sec:stage4} + +The optimizer returns a flat weight vector of length $N_{\text{clones}} \times n_{\text{records}}$. Stage 4 expands this into complete H5 dataset files suitable for microsimulation. + +\subsubsection{Weight reshaping and geographic filtering} + +The flat vector is reshaped to a matrix $\mathbf{W} \in \R^{N_{\text{clones}} \times n_{\text{records}}}$. Most entries are zero. For per-area datasets (e.g., a state dataset for California), clones whose congressional district falls outside the target area are zeroed out. For city datasets (e.g., New York City), clones whose county FIPS is not in the city's set of counties are zeroed out. The nonzero entries---typically 3--4 million for the local preset or approximately 50,000 for the national preset---identify the active (clone, household) pairs. + +\subsubsection{Entity membership preservation} + +Each CPS household contains persons who belong to sub-entities: tax units, SPM units, families, and marital units. The assembly step looks up the membership mapping for each active household and concatenates the corresponding person and sub-entity indices across all active clones. Entity IDs are reassigned to globally unique values using a compound key $(\text{clone\_id} \times \text{offset} + \text{old\_id})$ with binary search remapping, achieving $O(n \log n)$ performance. + +\subsubsection{Geographic variable derivation} + +Each active clone carries a census block GEOID from the geography assignment. The assembly step derives state FIPS, county, tract, CBSA, SLDU, SLDL, place, VTD, PUMA, and ZCTA from the block GEOID. Because many clones share the same block (especially in dense urban areas), block GEOIDs are deduplicated before derivation and results are broadcast back via an inverse index. + +\subsubsection{SPM threshold recalculation} + +The Supplemental Poverty Measure threshold depends on local housing costs via a geographic adjustment factor. Because each clone's geography differs from the base dataset, SPM thresholds are recomputed using: +\begin{equation} + \text{threshold}_k = \text{base\_threshold}(\text{tenure}_k) \times \text{equiv}(n_{\text{adults}}, n_{\text{children}}) \times \text{geoadj}(\text{CD}_k) +\end{equation} +where the geographic adjustment factor for each congressional district is derived from median two-bedroom rent ratios from the Census Bureau. + +\subsubsection{Take-up consistency} + +The H5 assembly must produce identical take-up draws as the matrix builder for every (variable, household, clone) triple. Both stages call the same function (\texttt{compute\_block\_takeup\_for\_entities}) with the same seed derived from (variable name, original household ID, clone index). Any divergence would mean the matrix targeted a different subpopulation than what appears in the final dataset. diff --git a/paper-l0/sections/results.tex b/paper-l0/sections/results.tex new file mode 100644 index 000000000..c56f7606b --- /dev/null +++ b/paper-l0/sections/results.tex @@ -0,0 +1,61 @@ +\section{Results} +\label{sec:results} + +This section presents calibration accuracy, sparsity analysis, convergence behavior, and comparisons with alternative methods. All empirical values are marked as placeholders pending completed pipeline runs. + +\subsection{Calibration accuracy by geographic level} + +Table~\ref{tab:calibration_accuracy} reports mean, median, and maximum absolute relative error across achievable targets, disaggregated by geographic level. + +\input{tables/calibration_accuracy} + +The mean absolute relative error across all \tbc[total count] achievable targets is \tbc[mean error]\%. At the national level, where the optimizer has the most flexibility (every record contributes), error is lowest at \tbc[national mean]\%. State-level error averages \tbc[state mean]\%, and congressional district error averages \tbc[district mean]\%. + +\subsubsection{Error by target source} + +Error varies systematically across target sources. IRS SOI income targets, which have large magnitudes and strong signal in the calibration matrix, achieve mean error of \tbc[IRS mean]\%. ACS age-band targets, which are count-based and distributed across 18 narrow bins per district, achieve mean error of \tbc[ACS mean]\%. SNAP household count targets, which depend on the take-up re-randomization mechanism, achieve mean error of \tbc[SNAP mean]\%. + +\subsubsection{Unachievable targets} + +Of the approximately 37,800 targets, \tbc[count] are marked unachievable (row sum zero in the calibration matrix). These correspond to congressional districts where no clones carry nonzero values for the target variable. Increasing the clone count from 430 reduces the number of unachievable targets, at the cost of a larger calibration matrix. + +\subsection{Sparsity analysis} + +The $L_0$ penalty produces exact zeros in the weight vector. Table~\ref{tab:presets} reports the number of retained records under each preset. + +Under the national preset ($\lambda_{L_0} = 10^{-4}$), the optimizer retains approximately \tbc[national count] records from the initial \tbc[total] million, a reduction of \tbc[national pct]\%. Under the local preset ($\lambda_{L_0} = 10^{-8}$), approximately \tbc[local count] million records are retained (\tbc[local pct]\% reduction). The national preset provides a compact dataset suitable for in-browser simulation; the local preset preserves geographic resolution across all 436 congressional districts. + +\subsubsection{Weight distribution} + +Under the national preset, the weight distribution spans from \tbc[min weight] to \tbc[max weight], with a median of \tbc[median weight]. The effective sample size (ESS), computed as $(\sum w_i)^2 / \sum w_i^2$, is \tbc[ESS] under the national preset, representing \tbc[ESS pct]\% of the nominal sample size. + +\subsection{Convergence behavior} + +Figure~\ref{fig:convergence} plots the mean absolute relative error across all achievable targets as a function of training epoch for both presets. + +\begin{figure}[ht] + \centering + \fbox{\parbox{0.9\textwidth}{\centering\textit{[Convergence curves to be generated from calibration\_log.csv]}}} + \caption{Mean absolute relative error over training epochs for the national preset (4,000 epochs, $\lambda_{L_0} = 10^{-4}$) and the local preset (100 epochs, $\lambda_{L_0} = 10^{-8}$).} + \label{fig:convergence} +\end{figure} + +Under the national preset, the mean error decreases from \tbc[initial]\% at epoch 0 to \tbc[final]\% at epoch 4,000. The error curve flattens by approximately epoch \tbc[plateau epoch], suggesting that the remaining error reflects structural limitations of the calibration matrix rather than insufficient training. Under the local preset, the mean error decreases from \tbc[local initial]\% to \tbc[local final]\% over 100 epochs. + +\subsubsection{Residual error analysis} + +Targets with persistent high error after convergence fall into two categories. First, targets in sparsely populated congressional districts where few clones have nonzero matrix entries---the optimizer has insufficient degrees of freedom. Second, targets where the domain constraint is restrictive (e.g., EITC by number of qualifying children in a specific district), limiting the pool of contributing records. + +\subsection{Comparison with alternative methods} + +Table~\ref{tab:comparison} compares the $L_0$ method with iterative proportional fitting (IPF) and generalized regression (GREG) estimators applied to the same calibration matrix and targets. + +\input{tables/comparison} + +\tbc[Comparison results to be populated after running IPF and GREG baselines on the same target set. Expected advantages of L0: joint multi-level calibration in a single pass, configurable sparsity, scalability to 37,800 targets. Expected disadvantages: longer computation time (GPU-based gradient descent vs closed-form or iterative solutions), sensitivity to hyperparameter selection.] + +\subsection{Application: subnational policy impact} + +To demonstrate the practical utility of the calibrated subnational datasets, we analyze the distributional impact of a policy reform at the state and congressional district level using \policyengine{}'s microsimulation engine. + +\tbc[Policy application to be selected and simulated. Candidate: analysing EITC expansion impacts across congressional districts, showing how district-level datasets enable geographic disaggregation of winners and losers that national datasets cannot provide.] diff --git a/paper-l0/tables/calibration_accuracy.tex b/paper-l0/tables/calibration_accuracy.tex new file mode 100644 index 000000000..14f7d16cc --- /dev/null +++ b/paper-l0/tables/calibration_accuracy.tex @@ -0,0 +1,19 @@ +\begin{table}[ht] +\centering +{\tablefont +\begin{tabular}{lrrrr} +\toprule +Geographic level & Targets & Mean ARE (\%) & Median ARE (\%) & Max ARE (\%) \\ +\midrule +National & \tbc & \tbc & \tbc & \tbc \\ +State & \tbc & \tbc & \tbc & \tbc \\ +Congressional district & \tbc & \tbc & \tbc & \tbc \\ +\midrule +\textbf{All achievable} & \tbc & \tbc & \tbc & \tbc \\ +\bottomrule +\end{tabular} +} +\caption{Calibration accuracy by geographic level, measured as absolute relative error (ARE) across achievable targets under the local preset ($\lambda_{L_0} = 10^{-8}$).} +\label{tab:calibration_accuracy} +\tablenote{Note: \tbc[Values to be populated from \texttt{unified\_diagnostics.csv} after a completed pipeline run.]} +\end{table} diff --git a/paper-l0/tables/comparison.tex b/paper-l0/tables/comparison.tex new file mode 100644 index 000000000..d2dc5efa3 --- /dev/null +++ b/paper-l0/tables/comparison.tex @@ -0,0 +1,17 @@ +\begin{table}[ht] +\centering +{\tablefont +\begin{tabular}{lrrrr} +\toprule +Method & Mean ARE (\%) & Median ARE (\%) & Runtime & Sparsity control \\ +\midrule +$L_0$ (this paper) & \tbc & \tbc & \tbc & Yes (configurable $\lambda_{L_0}$) \\ +IPF & \tbc & \tbc & \tbc & No \\ +GREG & \tbc & \tbc & \tbc & No \\ +\bottomrule +\end{tabular} +} +\caption{Comparison of $L_0$ regularization with iterative proportional fitting (IPF) and generalized regression (GREG) estimators on the same calibration matrix and target set.} +\label{tab:comparison} +\tablenote{Note: \tbc[Results to be populated after running IPF and GREG baselines. ARE = absolute relative error across all achievable targets.]} +\end{table} diff --git a/paper-l0/tables/hyperparameters.tex b/paper-l0/tables/hyperparameters.tex new file mode 100644 index 000000000..468299b25 --- /dev/null +++ b/paper-l0/tables/hyperparameters.tex @@ -0,0 +1,21 @@ +\begin{table}[ht] +\centering +{\tablefont +\begin{tabular}{lll} +\toprule +Parameter & Value & Role \\ +\midrule +$\beta$ (gate temperature) & 0.35 & Sharpness of 0/1 gate transition \\ +$\gamma$ (left stretch) & $-0.1$ & Enables exact-zero gates after clipping \\ +$\zeta$ (right stretch) & 1.1 & Enables exact-one gates after clipping \\ +Initial keep probability & 0.999 & All records start nearly fully active \\ +$\lambda_{L_2}$ & $10^{-12}$ & Mild weight regularization \\ +Learning rate & 0.15 & Adam optimizer step size \\ +Clone count $N$ & 430 & Geographic replicas per CPS household \\ +\bottomrule +\end{tabular} +} +\caption{Hard Concrete gate and optimization hyperparameters. The stretch parameters $\gamma$ and $\zeta$ follow \citet{louizos2018}; other values are tuned for the calibration setting.} +\label{tab:hyperparameters} +\tablenote{Source: \texttt{unified\_calibration.py} in the \texttt{policyengine-us-data} repository.} +\end{table} diff --git a/paper-l0/tables/presets.tex b/paper-l0/tables/presets.tex new file mode 100644 index 000000000..a574a1b4f --- /dev/null +++ b/paper-l0/tables/presets.tex @@ -0,0 +1,16 @@ +\begin{table}[ht] +\centering +{\tablefont +\begin{tabular}{llrrl} +\toprule +Preset & $\lambda_{L_0}$ & Epochs & Retained records & Use case \\ +\midrule +National & $10^{-4}$ & 4,000 & $\sim$50,000 & Web-based interactive simulation \\ +Local & $10^{-8}$ & 100 & $\sim$3--4 million & Subnational policy analysis \\ +\bottomrule +\end{tabular} +} +\caption{Sparsity presets. The only difference between presets is $\lambda_{L_0}$ and epoch count; all other hyperparameters (Table~\ref{tab:hyperparameters}) are shared.} +\label{tab:presets} +\tablenote{Note: Retained record counts are approximate and vary with the base CPS size and clone count.} +\end{table} diff --git a/paper-l0/tables/target_summary.tex b/paper-l0/tables/target_summary.tex new file mode 100644 index 000000000..100e952c6 --- /dev/null +++ b/paper-l0/tables/target_summary.tex @@ -0,0 +1,32 @@ +\begin{table}[ht] +\centering +{\tablefont +\begin{tabular}{p{0.55\textwidth}rr} +\toprule +Source & Targets & Geographies \\ +\midrule +\multicolumn{3}{l}{\textit{Congressional district level}} \\ +IRS SOI (AGI, income tax, EITC, 21 income/ded.\ domains) & 25{,}288 & 436 CDs \\ +Census ACS S0101 (person count by 18 age bands) & 7{,}848 & 436 CDs \\ +Census ACS S2201 (SNAP household count) & 436 & 436 CDs \\ +\midrule +\multicolumn{3}{l}{\textit{State level}} \\ +IRS SOI (same domains as district) & 2{,}958 & 51 states \\ +Census ACS S0101 (person count by 18 age bands) & 918 & 51 states \\ +USDA FNS SNAP (spending + household count) & 102 & 51 states \\ +CMS Medicaid (enrollment) & 51 & 51 states \\ +Census STC (state income tax collections) & 51 & 51 states \\ +\midrule +\multicolumn{3}{l}{\textit{National level}} \\ +IRS SOI (domain-constrained aggregates, EITC) & 51 & 1 \\ +Curated totals (CBO, JCT, SSA, CMS, Census) & 37 & 1 \\ +Census ACS S0101 (person count by 18 age bands) & 18 & 1 \\ +\midrule +\textbf{Total} & \textbf{37{,}758} & \\ +\bottomrule +\end{tabular} +} +\caption{Calibration targets by geographic level and source. District targets dominate by count. Full variable listing in Appendix~\ref{app:targets}.} +\label{tab:target_summary} +\tablenote{Source: \texttt{policy\_data.db} active target count.} +\end{table} From 7b00a81e3152d8e1d98f179772f99c3da6260c86 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Thu, 9 Apr 2026 17:21:38 +0530 Subject: [PATCH 2/6] update background section --- paper-l0/bibliography/references.bib | 22 ++++++++++++++++++++++ paper-l0/ijm.sty | 7 +++++-- paper-l0/main.pdf | Bin 244100 -> 367043 bytes paper-l0/sections/background.tex | 10 +++++++--- paper-l0/sections/discussion.tex | 2 ++ paper-l0/sections/introduction.tex | 4 ++-- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/paper-l0/bibliography/references.bib b/paper-l0/bibliography/references.bib index 4985db24b..3c3e862b5 100644 --- a/paper-l0/bibliography/references.bib +++ b/paper-l0/bibliography/references.bib @@ -115,6 +115,28 @@ @article{anderson2013 year = {2013} } +@article{tanton2014review, + title = {A Review of Spatial Microsimulation Methods}, + author = {Tanton, Robert}, + journal = {International Journal of Microsimulation}, + volume = {7}, + number = {1}, + pages = {4--25}, + year = {2014}, + doi = {10.34196/ijm.00092} +} + +@article{odonoghue2014review, + title = {Spatial Microsimulation Modelling: A Review of Applications and Methodological Choices}, + author = {O'Donoghue, Cathal and Morrissey, Karyn and Lennon, John}, + journal = {International Journal of Microsimulation}, + volume = {7}, + number = {1}, + pages = {26--75}, + year = {2014}, + doi = {10.34196/ijm.00093} +} + % === PolicyEngine and predecessor === @techreport{woodruff2024, diff --git a/paper-l0/ijm.sty b/paper-l0/ijm.sty index f52e8dd48..b5f44a4f9 100644 --- a/paper-l0/ijm.sty +++ b/paper-l0/ijm.sty @@ -4,8 +4,11 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ijm}[2025/04/01 IJM formatting shim] -% --- Font: Times New Roman equivalent --- -\RequirePackage{mathptmx} +% --- Font: Times New Roman equivalent for text --- +% `mathptmx` in this local TinyTeX install requests a missing rsfs font. +% Use the standard Times text package instead so the paper remains buildable. +\RequirePackage{times} +\renewcommand{\ttdefault}{cmtt} % --- Spacing: 1.5 throughout --- \RequirePackage{setspace} diff --git a/paper-l0/main.pdf b/paper-l0/main.pdf index a05de9b97cafe939dfacf4bb0fa6bd6274010c69..51448ecff335f38b501bb831230edc85b0cfdf3f 100644 GIT binary patch delta 285691 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

$I-{Gl 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 z z#C@RgNNfLy`=%Mmb&Vl4kRdmT@8`NZP*d49sC^&{SlS04L8~%U`%`T>R&?qoqS}+HBkkZ(BA~u>b;o z4~c)&eYdN8$6xBc;LU@P&?=kYqgxXU0R@U1cb1x|cqIV^v*TNnA3p^Y#9#Ta zcW+IUvnk`B`BK*oN6-Wms2|;>gQiqyyt8Ho?kBI3qr05k(zpJ>{y!eIXQ%?bfYVj~ zd}K%Gpzdl9&D$2Mz`JqxQ4913Xn|<4&ws%_=U4Um|JOI!XA@7`2hmx1u99C9)lCV% z%u>H{2BydlFy1)cOOIFnBVtvo|7s{;u!SbeNV4RV&|tOF+C^okeFPh5;;e#@9Q#^{ z_&`?e_HK_eZa9C@N+h>@H!q(R{Ly#p30*YhZSzv(ZT^@Yv>bN-?6!vc56&4hZCo0& z@87K)nXF&_#rdv9ij%Q$T3ICruz0tK<-N$8Q+V__uF$jvURL|_9}(-h?f($5!YgBI z(HWyP4>bCYD5@CR!WmlHe~0)Tz=nZAIf_n)I0GIp6)dik6C#4t(0pO!90?ouTvGDV zcFefq-rUU+HK=@prJ;=fg>wzS6f|Zx@_DzPac||6sd*Cy4_aYNn8axS@;lD|gdKu%8qq+i8`8B%)!2*phaw|{FTQ=R~*_50ae_#y94Y9)-y zqu}L3oy(U@eKjfiZlTYK%VSIrvq2GVkPRZ1f05RYZ^XLR8N&P~qA!P3*7zeBUyWMO zZuKp%-O@I~whxUyj8AsiBC2*ikjyOiuf4e1#j3y6YE*nD)K~6d1HL|6TFQ>z$cx!1BC4;l(nxZk5RG@7Ds?1F5jUiGGopt+z|H9vRs{GGxPW$7 zfO6S6L_vsPhKPkUYW++FLF#^`%N^Rwa-XIHMev_UgPenNUSP`+ztWub#WBoeM<`hw zF1HM5!SSAD!+*F}wQ}a)zvw!5Vh&t@buJ+30dtd*vzK8e1h(WglX;0UXL|vXW^VL` zi8N7y@?)LmYHg5F4}V57?+2@qC@_VfaEC|t=S3Nz%Lcgha8K*XJbf6aaXBm(Fa%XHlW*>s<_xb_527jLj>4|VFdm+b6D@Vaxo(La0(yvDJ z`v;y1{>&)WDDV)Qycs)7Nm(F$(b%Q$QKDBU*rp2Fd=mCeW}%;`_^Ux1t*RH0-K_L! zWq!;0xgF0k#2+544Ip=CS31%zojVa+7j?3NAYX zR@HrWjC?$rK6F*pes)ZJJTkm)E-rrxn|(qhz7sk<0GXCQbH_iBh+hTSmOmp$>e%*e z#9Q~B{#;MtBmF&JKAN0O&_na6I4bPMWsbOh$iaVrI?EIEfT_A<==8A;{{&U^K9>ED zbs##J8ru9b{70nB`PHvO9W|NL4$uO8^myV?bMI+=xr2BN7}54z|%K z2NHz;49r&>V7Il02N%eI_#4rtVU7iq!1qy8BzlDZHb)Z-2R!}D5HL^5ErlYt>WVl4AZ4S8-`ONk%{c2Qho8r(h$2 zXGprj{f-#nS~6G((&G}-RT7HHc^u{X8~{4`Kz^&!2PeR z>$sCE1hwT)J@Ze``1i}PGoZfdr)T>6rS6xB)O`kg*#gb0;L+KqLG7n#>N}yx1JI)O z6F1)6a&$GqY3%sNZZVbT4YjGv7w`lI_GMxJqz=$W10|X(<)^Q<~h;IFW4v<0LiMON3-B^Tc_dsESZz_?F7hgp$A>XjiiWCWuO|gPX5% zbZ#Lg%>#IA8bCmDgnCA7AHp9l?kL={=4qeW%H}w%M(AIXYQ340$8!y}rWtvoEg(ys zQY9hK+)6Bq!?U(OZb9~?VbbK{LQA20r)`cI?b=BxhXJN=Q&?rA8rH_9h^APxJAkPk zgZq;Zgo1z?h$1_XaH;KK-_Q9XPMgt^3*owpk)@&7evqJ*`|Bs|fTobG;gf z$=*nCY3UABmM2 z4z_ozzw#sNfI!)@$n|Gy?iDWYm(Fs+ccMs+#=&UR&!QEswbwhJ!>99y?d?wN`MOO7 zf-1~e!m(#Cc&hSQ)CdL4=&|!Q=HNSvU4slh9r<5LuF;85Itu*h*;7S}x9Kn&tsX~@ zn?QZP!?EYXiRch^0_|?&R<}?TzVEgW!%Xu4lcRfI1_g$ws!1y$Z4GU2$qULDlyEmf zWFUXuIwKS%rn-=maxZDg?~q$GBy$+CJS55T+~tdh#f}b~Z;T))x9A zGd#G0AQ;z}@G`q=ytxkU?IvA0Tp51Wz@F+pglpDX+bj7?JYFw-Expmkvwkz+^-@^h zZc>%zD8vG)N|nv-(!cwsq5}zvJ;&cb8DU#0e7ThXXG|~p;OK1ZW0H_PEl$rY28f@O zqyVf~Wp6y}=&QTUuj+Pm`H}EPeX7^A%}`6IDB2?O9DD!v+T!qh`*^_+CiWz;ULIL9 z>r4=0WML_5^HTpT>!O`MO~4E2!G}MExM4GK`3rXV1-D`R=PJc?T8D)>q|WRzz4%K< ze`SrUzK+j_lUss6f9je5diTSL0PxgdnWIwQ-#IeU`|#}T^gs{u^uxhRzuPMKx@ZXe z9;Myt>`kAu3bFHy!%g7;Ny5?f>cY-}mA>0Kz>ZrXjl&aWjh(0OZ%^@U#UI2q2X+gb zz(2FBkR9L`IFZIy=8q?*N}#qaMDYhYBE}9l%Go_LQy3 zdZ=`T+4P|k1p>s}CjsQ`GLz=uy5vtXgvG0mRUYQICinCFYx+K=9^h||#jEn(Qtt{Z z8dVYjBi&|)WgVO5;El-3g-_C8Td&}FOaUj{?8Y$cFD;A1^9r+5AE!V}Un0~+y~Utt z@<4I*hbH{JHT?S1oFA@D8c-vWVdX>BD)$Ejn%82Nq(8_+12x?zkPMs_^y96*J$tf! z(}P-7&iq;?_rpqAFev7zxZ>E!U9hy-GH#`R+$^^I#%AI9+UUmh-JDz(zenrTf}Z8n z#mBg!)MP?^;oMfU(YEO$e?)NXPaw`uuR>3+z~ygM z$~&83w!@O`cx0XY*}*Yl*d__W;l%oMx8%Ab>S$t4-z_Tw7+D~!kWIhgV-FWBYb1|mkaQJ5&X0r(yuwB> ziRLyEPRr$%*$z{|{sk&ZCWR@}A%*8Lsr)n5#6T(dVYOJ}pujY#eKhWuVep=|S=yc{ zCs_mW$THm?jU@E36CqQ>5aKWTkn;3dWk549{-2c145#eh6LCv6 z1PGdQA9jC6wD{RglsF5*iQS=$sL63h*aP-X60*=W5x%E40^8ck@)fhF zT`(q!rYtHvt}vktg_;I7Z!d>kfqJIULs^MnAlPd}ww#0kdmzqZTAd=3CNVN1O;Yax zz1-B2cxAe;h`alto98boeGXb`Z;X4%|LX4Z&x?L?J(B063W}O z9n=1LnD;QClLg&P3W7k5Nc-!Cjrp^S`A7*=<&N=X^bNC{>^xIqhVy|JV|I02*?3`)ok-j)j??p%U`2_y1Tw zp5s{Ome%FvIG3NAq*vL{^?O(f<@M&0sev{StEIkVCpH_DTkz$T2%J<`uw;suKq_NH|F9_UIYB=w&3M1Cq{W-bK34Vh z1MG_bm<<%yN>6!|;gsJkDGewV79;%Kt5HTDw<}MC&3s7DvXIfG=UA1mnt)e9koM+i zT$WFsXfN^$NeTcw=%e|M0r?@p->+;?|=B`XO#V?xZ7qrcNc-Jv-dc8nQh} zO0*E3PoVp#I!P1~B7C}So-tA)Z4|vmDbj=LV@xHfzDm4VC{!uvSx#NOPT#GKvNod`sX z#LpM>ku~F-1^TRm>(97AHZhgBArtr)-+Dl+Up8*%i@Ea$v20>~Mw!b@He-GI^D7lq zWnloSAnHtrI4YWhT4w!&`br4RXAARxj%fh6SecSvi@sVQa5HnTaWk{f zGO<&#GEq{)GRplj`EKZBN<{UYhlPoSgNcplf1Q$CR1Am$0?R0F>EP%@ z#KOh&Kio@ZHr9XLOKPBoO!OKDeCJfvbd5@mW|)VP(6<~LTkpJRmDs+sN>^h8m-b8v z|GUNH1k)-LnL2LE15#=qLh{jC?<)~lLVu85aB1p@LnRnrGM2nN}{ zS9%~6Gs(f`TZ|9*4!p32qT%hs`N6^Bx{52xr?|ApZ;RKPW@b$5lH{;d2i9D{=?sW!V*q;P&5WMZf1s_ew z$k)Q{lKpbQ+ET(dV9y0?U)RklvNKo>nV6V*R{>VuR)PC0wR<-G@Ls`3dTirYdeqj7 zr2AhAxz1=d94$@>ZB*3$+p4x2X+o(zV((E(+FBt-YPO=KiPd_DmDDbZ8o}R4s#dkC zYKu@+sadPFM;oK)^TxOL;eEUJckVdne!2JD^SgH=mvB+iT<-JLfUMm5a&5w7(U$B> z5A}(imf5Y}(_?-Z^~y`>wK}gsT_-!c+vyTLtF?}NQ3^2%&qQi_Tf{&?E&yp><>IN) z4iyVRl;S%sfC0{}B+m|BBH4LVPe{kh6?`SjRb_a9wU-vNuIhKqWhNqm1vb$UN*411 zj#eM*6{Eh!XRO@%tQ4F()`a;krreWi;r>ifTq)S}1*Hws^PQWpH^hEY$T!Sp0+|uMt}Ng}bLfh=u{;m8(+A&@JCO7BEGqZ<#w&Fo4YyZjvn{ zwJEqOJ}0sPHfbJ3uC*W2yQ_!Uz7ZEkV+OcG?@TpV=Lt8Y@IWiIta%;fT9_Q9KK?t1 zeA*Zc1C&pL9MZTPPE*lX*a06vao}Pablp?!H?M8_XeMk)ah^yrAgour#50bhw4`pBXT3axU(Th~< z*&VuVvcKla;)_JL0M=aPblG685`#EZ(yfPexhoIsFSKSRNasyJdk)`|e5x0?;(@~z z3AJ-&@9PScEPMvi1MDw4YzF|J$T7Qhwxkn%iU)}jA3wf4BjC)va@C#5Ue5wgEMmTx zas>3{+<~Rz+`u)FZ3j~Y!>RA}+C3iD^Rf)FM8IqpU#GN4_jcE+O$$M~I5K9!={zju zEB>686vU9@x=|tJdsc?B?P-$A^`LeH-0AiY9%bOK!3HV{DR6jcT+u5k_EU#HB9K3>2%{RJ-Y+3Bx;KzKh(1Cx<6TdIluJoGZBg^ zpcRJgiwnB7a5ySSxm|;r7EI$rgb(!Bq+qPj-gj}2oet3cuHzE#Mg#F$7S*q@BG(&t zi3prYO|4tcQ`yyt`27B)G-}=X*M1J;5v@YC42_7TxQmtp{S^Z41A;{(n32ZaFxR%V z_uRkzf0`deMzo2|ek`96&Nyfi3XSK`tO$*tO&VD`|CSdp$k{<}8%I1GzVS#kaYr+j zbQmACu@7MHpnF|OnC(Ch$vs}(>g%eAuo4Rwv=T%K-WGHgp+9c^y-C^IM0cE4A^IU% z8M+;~Qu8Zib`{j9?(1pen6I>)c-=2Jd^7Y2>M6*5LF%hAyf)w4JOkuzdHuX)(9ay5 zV)s_~{CG06W8v#$2ef%MPi2{&6rgJ3(x(ZLDBM!d&ji-7hSVw#@Ee;e%>e@)dB36~ zBxHoen79unvRAC9j+-^N=v@oT%MtRw{-NgRSl@EE5jwN~G_jIX;QDpl)QYa}e+GhQ zr;nporG0^qHbJu{xN{$^=feLmodj%s`rn?Q4gqIBYhV(`s6(#Z1}Z!FJw%9~i9ls% zaW}9yL>znu+6M)Ni>qJz7YEWFsBCu6C+N&X<-eMdxSN)ShB4&2p)t$|W~2f&Fo0-i zK%p?0F<3(ba$N-ih3Sa@UlR_Uvqb-WdvHw!4EfK(LMq!LP}G^XXDfH>x2I-`c9lFm&B>Vu>g5fBk@a$1C1VxZ0YH( zKT!Nv^-5sRT61pttA*RWdUk34^mOOj%A?aT-ww_Ff-s7}$~wLxBP;{5LhRCA@s)5+ zq>o%Q!pz(IBlp2<#ff|`HaxT5T_$rQHFFTf!W$AaH6MU_iW;^lA(Gj#L<*Uo<1{Br zlc%xxs8(KZ-5mK0PK$Ac)&{YYK%YweqN{V*=hR&pQ2-KWfu3ecQ_3WB9@T#&OT|r3 z!Bvr_J%|@K)=X_moMfR<1*v>0ntC#MbOc6}#8zMsV3^;f#okK2G2#QJU`fbnBqT?B zPM9V@_8YttELzKo0+Kl3dTWOHAJ$pwJ}T^T`7NhnSYso2liBH*JGTL||?4Rq%yX5}0gKhQ^rEPm45_3Kri-LNljLkYK@(C9?;2jU4I=yCf%1E|bTQ zAIfAVqc!qke_fUC+vF&fbNPp_P2+EK@>!X3B-?b8${D2jwfZ&#MtEu}RL*>p%iX2Y z&VV&)cyG98=DN-zg5Xq=5m)HFFEc`(+&FUzG9Hu8e0v7eVvw{Cf8o9N!LABGv9!xw(h3S6Z(I{yue~ZK)>(db}q#38I{NwX*aB0@V6m9vhTt}3cYu|b7fAn3qvNoH27qFrV{OKwq4t?POs1zuS}7<8@`UqKqZn z2%`ic8~eX;7JF9q$;XUi-)D<55!%Qg+eLe#t9hik&AB9d8jCE8oD ze&LgRqY4KZpLgFV^Bp>Iu*>8&)rcW*n?_=I6?+|w(Yi7cyK{~FMaXL&Sqmraqf`6F zFRN~zCthmB+4hB??gVX`kn(z-EGgBhX9+PaG`pD`F>4oR<05C?^-f>wd|s9xGH|4=O!M&KBP zP|r%&^6B=v;l{7*`zE9HsS!rbEYdud_0OKg?UzI;LPHsMI3v-PYji95X`aE3 zxh%-+X>PRK1`pc=YNb>BFNQZhyt7n-POt!+apE1j3dp!qibN9&*uB&Ye9~zZ%m!z@ zG6!mAlkQ}3Ve;~^!hCWl@4VQ|&ZWZWDE&!*3PjNA?~{hPTditG_`WpQQ!s2dye5ZJ z=vS&)q)46n_ha5r`Wb}stD-*V;8MO5bFX-hLD_p9{ebajTrxIGsS7eGg)O~SkU39C5ut2b ze$?@8mg(XZxYN6B@Pz-GFeZJzG4SGCXNux*uz6Mv3InTd4WREP8FTxjML_eQzkBus zt#YGjL@F6(GN78*P`OekIOIy6sh}3XX3;g&c34n*2{jgmNrt+TzsJQI?_WLIeJiMV z>&4C_pR$_=Qm>R(VO?wjISy1-aA;IjIQ}Mu`&_#{pD&1VneW5=fzrsHOHR0^8ua0P zTvKf`JplKh=73gU+;;Q$U=qLOR&{9T`?48a9Iaivrmwf}%w&8jx_vT^-N67P2lJ05 z-PJ%YE+7}rnbid>yYv>}9DRmO9Sxal5o3wk=*HG%1KMrHwue%&LHn%jP~q)qGZFov zVn8L+NOmF(qxB0D6}*kFJI?O|N1F{k4Ya(=H74@0;A}oIxAgjJ&x~`-{XDb<}oph{@ZQHhO+s1jnbE8)b5*_T?T@cM9{t##RzqL3PzoE%?p_#dg5Aw zO9ZmSJW!R2r5Z&pyh8``wiK1=5DyN#7(bsa5_lv~czuI9rpBEuy{|WW*b@LLUeGqk&G|#y^H_u)&q(elWUJ5Lzy?==d(k{!MP9d~k3@f-_`CO?s{J0oEP(X`xp8|J&XB!MB!W6CqK!6*sSJqC093PY=X+5xwQu@t_og1o@$Yv z5e|g{8lMvO?)9RJFvfCN9zfooAr99vM%#)QbwN&r9vEZ0e2Z42evI-$oLVNMGGB z*~Ig(qV@%h@!iiY^O@F_nz(wS#L>Ro! zcLu6_Um#k1FiH4l4(REG8z;zBhONd_u}2(Zr(pw6W>iKa&h`Q30K^=opxGcc0p z5k_w-B1(uRWx6^0t3b>?rI`<8mk92*b<~I3@=lYLsv3 zXuFa?Fa*G%eCnkM$al^AniT#f#?fo1Q0}qd@dkoc%q@GV+c&|WsaBXw@CTu`xgmuB0@}Uvz3ETr#vS-M(J6quOsb3_fA!xVVhKSVgOfH9 z|AemY`5)yhetN$rf1^wQ;1+_qT8y0+r<8^N&XF(z{>)bL`x(~E*>=eGMlQDzR9jg? zasW}<=3UA)r~tV|ckI>4{mt&t6AtDT@6cAJJCi463S@XIYiOU`0yZ5bsDwmt%HXC} z$4^0B3lxU8r4m96rB+X*Xjcx8zat4xqwAd`>{$J%(n4Za%@8`lkIT`YXnYn_U+t`L zeAe4%gZ{Mm{{XJGY8?VWQl7D_r(*l-bb%qBj;O~JQQY7 z_14AoLsC~Z|BW~Gg5c}-Hcax@T*(hKn>~uooI9=5uX;#O5Mata3Q7ZQCx>R9s~ET+ z5_3f;&wC^WI>O>*0cVO-@NX7P|NQ7eXsT5?(4a?(6D`DW*Ai9nlZ$GbP+)GuIeVDQ z`v4OJ}+Gx7tu5?ol+{o!T8CxeY)4orRAdwcVb#a##rWy8zHf4#KP$- zJ;Mo%S4Y(Dy-+U~?9bkN&F0IF4k`G|Q{>Xaa;ELEXH)PA{>XXL2igPIbzUZR+R9VE z&-7wvuy?M|m`8eUsz$u!8897eZk8B>Lf&BNuVwLe&q%y6CthJ^$tYM3jp>F`I0g(H zwrfewu#r=Es9!4qTz z0vg^S?!P(ZZ20L2@4V%ozg4iN|;w;Sn7`#(^8wl5Um}oVWV}+99hQ7Zshtx77T&9Tbr2=0{afHmVB#rsmzgM8-SG6Q1;scXNU@=;x6714X%uJhLMkBXi>bT z`pa4E7G@0bc@o4u`mnM#wY6lg5dlo3sDw)_45Vd+&A2{KHPEUJgOtOu(u0hPtqhtk zcQV0h?CYoi0;h%2R&Y{o$r;&phlM-edak%KMMtDVo@OI10WBz*niZSe(ZlT7yUv)_ z1bmjY5KGIGKizLB%Y5{eKdkhbu)8Mm-LHH2yGM?c(@sqgPh zs;uIcaAtO<&Mr=7Mz;Uc*&AEKv9a)wFq8aGmozGd0LIRoG}lf8Y|@l<-rz>-KG8Up zQrFV$Cgv*{9P`M^o-8!hxH77TP79`>B=4i>s}tz)>yZe`FPwcot%Z&dE|{}qZ|||| z)v?vsK0lAK=((}m`8==?8U=Kp9P3}#*xk%c0;KWU^@Hu&-Ur@Rc*6c1KfQM(!tJrzq_ncxMOMYh;_u;S!UY{z2w z*2Zgcur06M%Bv$~6c)5|npF=-+{+mmzOEx0scgRnWBSvYF!eNq)UU9L;Y>;{mYT5< z-QVjd(-#+kk=+rhO=jZS-&%hQO1YZY2@h~Mobg_0La-REQ2BBf^E|~|>vLy9G-Kqu z_d&{=OGgqLHD{G>7D3P<{jS;btvUSa3;iT?SY1qhTkDp)ZA=)Y0YJ~TH0_GazjtCH z#+*X3ZSOQKgN>uZrfOR&Y^PFSZ zad00e$3@l|GJmWjPiKS3o$Xd|KM&`;h+;ZB2Uf_BN6=3 zs)w>?4wn$P!Z_=c-Dq?eywQ@o>W8!}y~r2knvADcHLRa88Lpyq)4O!*UH-jI;15oM z8-l$7seP#R?^oNlu1K*y(Fe6XKjQW86IH{Jl2$$Am)tCF$@fT#YgX+TJgVndxWyLh z%hs)DF$x;A7vvbM>CAAVva?wTqE*UxG_7m#sr3)=80$k#YJhkhgG?A>HzU zM_7q~I<~ezuRtMi7!E>DgdLI!)VV@NpA)?dT&h?}XbkfJ`GCgWWPTfWg2zUf%PMg? zY&|Gt5h$3LGd@ntc4Z{*-hUMxuDd)3m9W+jh(qzAQ2`&K52*mH4~3<>SbhsSi8+D4ja~rWwo@FN!7at-Ju-ZcK zS*gTD&xysZ0~HHoLIAz){P;+x6>I@0*HnTsUN8S`^Iy$CJ#TUt*8>EC-G}6<*|B_9 z+=RC3o=xVNXoQ3i^oE<+wl~`t?cFO2^9!*!)w1@ls-t3Q@Hv5bgsY~x-vH%f{`ulvK7R!5f4G!dJc(v65Of=n*1>nOK;EFhgKVw?W%;OL4s zW>ll}C8b<-BHE;>=raMD>2wkp%2q_9E?AkF%PZ9xTI+s9())Ie;AGUA=@@11dMbox zi)a`?D#yfXpU48qv!6~gvI^v0U|w$ntX%Bg}mNK~r{V;^_pK3-szfhWQ%x zWWw(#a%hJZn~q5#{P(cKWMJ8zE4h7^tO4k`HtRB2;uO_os(Y%dz7f0oq9-Ifji+Dk zaSJ-)+MVp3nBqW)S&Xbg`6v8$A_oov=e6-6I6>gVCIs0y1TLOh%rw(SXVC_LxAA1X zdEL68saWw!Eka5z>>3O-9BiAVxZQBhO@p5lX`k3_Ph zQz^+*ivZIa6lkVV-`_YQm~y8Ml3OHh@S?)8ju>njt)>H^O9qrdfm6$jSX5e2kT*-I z$QsM;eP(x>PXm*8pGSuRE9mOBO5w?Wu$?zzNGa_S-|1$a_F?(Ju)5bh?Di=h*Wx0G zj*NU2bj@k@S&@O$eWCQ3Y7<-hu-`T9kU6P>LAXjLN>4@N6N|zhy9J3%NCZy2M48U?PlLvn%hvHnp>{wD4D(^lf~oTVM!k5vM=}%p z%+n?lXR40?J~g8G7Z}Kh+Ay+(1hpeX^gjzR>!Ib+uOxsgHdhu-MG#3+!qs;&7-?wO zw7LftR^vDD?trz{W!OOQr{eF?srU+H<;!R<5#|{YM~k5}`3%xzlG(i?I)cBYPyzX` zk5kFvbGkqalrXHFGgN?+;_b;}bEtGuB1G6+vh(TH++sl*8-J6MZsr7Id-gded{M|0 z9e~)G=*(rZ)C_MmDKkH{A1QOBFXs(SJv9E%zIM9Dzqu) zDdr{?2JMcM&emY4lzKM9h~iIHIKL&i+<`@O%o!lauefc0{-5-gDin&_M`5LVok~j` z8k?fMu4l@Zs8icI@wlON8SV-5%74V2dH>pw0;`fs&EC#Nbe%+aeK5450nfvSH(i}g zUS3)3Cvi9FC-(YizCT$HBV;|a{c7H-*vDO5>5Pn)oy7Pdd3=&F(Th?ka_9F)PgtwQ zE9t->V#2S*D^mKgthWee7R6xMntK-p#20(IMM0kknEO#4U+Gaf#19>um5VtQ6%3RH*rg?#w9$&%{h@J+Rc0;r@a3S6 z6g%O@+0?{$SJ2$NPe6k9i$xX{L28}o=iMg;N=#+ojyvp-jMHBN-170@&*%;T*Z1)i z+m7GQ{odLGmk5qM*bdz%*{V+~c)I;O{rxA-l=Va0m8VUp*UqS3nvKv+pebGEmZ03H zEltKdFmFhyB89K~JvL47%}>)fvE}0=tj9KRkuKk*VT3Cd4eM=B?WM!_5_&_yMFkz# zj*r264arT|;Y16GO5JhA0S){mvK-8r$(zeRU5@jqjc78(%Uoddp|?kE3u#Kgz1$9D zr=?vWgW-DR`Bi**1brDE9_WoV(o8fQiB;GPw5%&)W@`4Oaxp-D+0<)sOA`_}{B0X5 zXsx`|VHgE|jhvr~>Aqv-$Qk)n5C2&;5A;|yJhTUH9DM`s@$%8Kx1f>62Mt21CzrpD ziVez|7oA9|8+&~pgQ}4`W_MzrQ|1X)l3v-d0lW5rF_fw#`&%0p@wW|l7xv{Apia9$ zn*6&bmNrW$wo}9ptAbglfvaCkIvrXC|voO>(x%9%-ALX3Z zpTc4N95vOeIF&u~js-ik{AuVc8?=0&8O_C+i@;0dke}+deVKM8mnd&q;H`0>GD_{3 za>=fuQ0YDS`#(m{EUcv$ez!rlL6WhQNQh}l?5#Dy4Ykcu6L|?VjAa^O1ntGD#+aEV!+sBt$y^2c|M)(`HveN@3$r0L}byj z;ew2Y01s5w1x30gM*r4zVTvtHTLcPS%!l~&Rdpq2dz$G?l?q49sTY^QT?^R-`9fN; zZ<6*J&m}eq2K}!2RU}_kd0nAqoP%{`h9ISrY%v`R2|4m6vj~6KL$)>W-u;}nVjD^D z_>GzrR31lhTtY3^olMe5`{t*+Jg7RGjEF{_*(MfU(7Z@y!ek7xtHsAe`vaR6YFl zyO|0!s>UPBJ{JwMX_{jw9`ALm2;4sW_vp`v7y3M!LrKsWC*_QWp8zC}cNrLG|T}y#|w3Z4GJEHyTHB`)#A1bMg z1DV%H;?WWWm*vwNW7Jf^Kc(W|ixf&MGAdP}$r^ssVCUh^PFG!rWLN~`>+*>mJ1&9? z);ufOU1D-Uc^8Q5h~=@o>`; z_hr-EH!8LXo0TTe^dU>KGBqoVH0fcs4EI~F*Zf>q|M*_p%)%fLBQzK`%XMReCx1f- z?Y(>1A{Zv9p*MBwl@cg2Xj)-DN0W(a6Am8>&u;42X3MNk1)8M_wFcx58P7IL?gD_fY{wbo3haKSYwPR+$@K{nZG(b2nzogECM9RTX4*QqY#k zSz8y#^t0^wtso+D4+b~3MjgU2M%^Lm;C5gZMC1LsuHV}nM~OJ%f(V0JFa~9*eF!Ea ztEn;u8^1muY>*!h#F- zxj>lWgGdQD)9O_lw^LR-15fe=;VUTCpw>Gmp#*Kn+15erLV zcz?}*cEw>aAAZSmb0v@N+$e#nN?446s;w=`a%~C_O>789Ix37LPosdbCj&XyAzZjl4i8Wk=F}>JKuxPfg+1u=GX;Fhh?N9OG8&c?u)Cep{heIxZzDt;djM^((2Sr|G%SNphXz@O!> zkT?tUlxOo?KIDkdI2;1op2>m_(n>+oiH?CB#G-ubZ`&1%A_Gb33aG(iasKjLf(+`N zIEdncwtJCg-N0$EC#$Lbco&N>Ub+b)bE@B8daC{4U%x!5A2pKljJEN%!|CNYqB@uH zQBbPOol0~hQ0>!4wh`u|fBv>M+zF@PToYDvP0C}X*i&)fX zk`UGEng1G&$B}IC^0m#fynF)fr)sZU7w0T}f6$G_jLU<~VdBs!`_$gS(tR zvQ$xo?cy!hMcM;WdP*bK1x`S(Tf0VV_*NtCkx3}%22$X9b)>o?Q8v4hD80BukSC*C zF9WSJh9|PO6<$)jwbI0W8mv%SGrxeYEsDQ!P6QE~g>c{hzJ2*V4G(~U-rW1$d&zqp zha^23L|3*PrxyJf1H8V{9?82_H*-gwZLdD=x~gz%;CUCyXyF(Ylj}97;;^>SAY0cb zoJx#N-?3+M-QoOi^_wL@fQn}a4|Tw4y2+^Bu1=A;c{BJ}U8(Rr&fq`T z#r_h<2~SUfkB$@*RH;f(nVoBzOPx@Bqo zK<>fW`N2-3wl~mui>K4ggbicJLYSg5 z_`g8*e>j$tGpSDu9h`%O?LU{58aSo>pR_1}_8-SGbCoV>+9S}1T89tp9{xNo^Z+|o$JNB%98a)QZ+7%pweL@{bzIDRft{~6OEbIU zT*eD1f3!P$e45^t=0^6Ku<ioJj_=JZWR5NNGpoYW0mD0OrE%h}>uV{fxM$Q`FjL8~ z6lXAtv}Wn^IokR*kSF}_KvE{bElzB*nDZpQlD)lN%~oHXqijU{7wkYu*9R*yk=n^L z{Xn^N1j=|h2viO4i=M3$#}UETF0l7jyR7cd;cTHvS2N_U~FP2ma zD`I+i(}N<_e+3w_7( zLl09&*NMJy!z5h~VpMXARwk?v!(`!7@o%FQ{P;+TLntx7aSKsC`E zb3)ow@MNZoTC9fV+)~U=sNklb-#bFg(G+-HNHN>AT=8-2GoKZ|{Wt-qHB}CCIWvS?@}nG*=FGv&$4Y0dy$%=C{2GM2JSZ5<4GU<*{=gpF;ect(xITHTy4dK8^N4) zl+3$@?!U$KOF`n-D;OAd-(Wke{OQ_-0#9CN&)jyJS~ntaK>ck0fR{Y(QFqC!q;Zr~ zO?TH+4ck#cEYeOs%)O-&6Zu&8os)?7Yc=`%(4XVXrpyR(a{@k{h|^$+Y_s0>CvV_R{%MEaI(LUQXbOQ3MGIV?I7vk`;W{t9R zU95YDw08mfSPRi|GZwTMO0k#7E)rOY_N<3_(u*i7Kp%HuM{B@cFsbi#meiWbIy8iu=L&PI>P~b4JynFyYvP@+aN|>20Ay5~_(jiuXwU zPkpJca0>q{?~~UEQE#lRTXO>Xt2H7$xuUwUwVFi*h|6}c7?@!ZLqvnR7n6`zIv^+`Z2V{fdzy9N)9KVn-~Ax zi5H*XAxAvW(aCcSB8H`zvZ~^r9g>+a%G&k{ILx2RhM>3;=3YLNPekWynm5u>O!$yA zRJm`;GwR26C%nBQCbh2sS@3__27w-7CA--KzE2Fo>~p8nK^qiV=Ly92jaZU;wet`{ z;}EKRR7xAt+@GcxF0-`>7{Q9djLnp~B*+|frdaqBqLJ{CA5Sz9Nb`{8P&TXUXGl}z zR?UuC2j)uRQFw4njqT)OmKwlu<(7lS!O7&d5D(cQoMt_eZ7e)Vip6v3X?)DM_hjD# zEqFD;4mWuvdXJFE5?mssTy;Dv{4G7 zCZ(-RbsqBN^OWa!hc-fnd0Wy$O9vw1w;9Li0_pZ7V82!%2_3SrS5}pzwX$F|q@K`2 z)P&TfKz(v(3KJhpyW(X?OJ5U){g~YCiXrUUeyGm}^h^R;*3*Ti}ZQn?!LTqF7AIWHYj_58>u0{>PyS! z@-GrIFfHFz-Vp!rtS*`WQUh;lF|4|;AY=@C)t=jRa{ZXED>Y92)L61Cm%U>FU~a|x za>nx2*{ppiBAP%^fvPa>OY7YCq&wyEk@+Qt3t2+$1c{XaSpbJrcnB4_@>JQWLbn1_ z90Bk56K^>M`oZCqLv*!mn)y#B&>Cxv+~>j^VMq||1nd~~aCFY%)J%d2G(E;t6L>@|C+DjdRUbM<0G>#|Dtl0 z{3k{S%TeNldZp;D;PA0D4f}y)-4?kYTK1*L*+A_+u+BW=(NG?Tz>TL6d_Gn$=Qmb) zU$h|pMy(uWzbA2vlr9hXZTpqen)9mCQ4&W5LpPx5fJ1CKOra7;}`A2Brt~;ed5JNde={N1TlDT-?K+bzO1t^GodR3SS-`4ATCtg6AX0d?XwS~2}zYIaS)8ZpKO{;+5oCX#f(+q8&K z!Z*s_@77_C=#4n}j#0ineZ|r*qzF8FP@TW_kyEIK?X*28v5vz~MBfLt!joAUHKMJ1 zJmQpuZ^My^-UJu<3&Pnso=b{VR>!Xv%o!Og(u$DC?Hmf?a&fyRcO zyS0hnH1TtkcO(t`b|XNs$8K%I#aZ5V zA{Q!kUU?A9Sh9$EhO&B?KAbcP>qmgt@^w>jBxD| zP+Cu;t_Fc5Fw>d9Kw}%@A__|pPhlk)?gEdzf7lb?)WZ_X46rBvkihJ)L89}BQ$Y|2 zU~00?QQ0A5F|Q%^B0Nw+S~yarJyM`V76gUkA<*ww?u4WA!l5M~rgTLSfdPha5Dl=) z8$^9}fg^#1T`+yD2o$1+O=41mGY|+QM*X?UJXi(j2~$CN?NaoLX~HfDV9jV| zEUW{7h_p017$&PBmuRU_O?Yy&rQ{?jg(a`P-g^BkDWY}qRaxT#qx2#OSxU}dMSZY+ zw8AJ1pqSCv_f$9ufLLJ+;QGpVLpTXW6&Vis%nv1w>(=iQFWcv|L-e@73q8GveF+R9 zfIY2pCyFB0ks(iY@w^bG(C4i8eQe+eQ>Us-*RJ{GRA443SA|d8=nr61E|(}#f6M$_ zg?Jv=?VFZ~oW4t4!+ugcGsVD#ZYN{6O;f=dsg=WF|4YZ|!PWg6STFCI2K&tsROaZ@ z8b;_GnXQPsNL#ZuQ{b3+E|;pO?^b99P_VEf;)0h=s- zhS|m@CA38IXtY{7a6t>p3(?6136GcT=4!p5c~cu?ym4=j3fn+|OtJ`TOCZ zP$0x+J*98C%ldt1z0Ya$`=!(&qiCQD)N9uK@*83{cWV3$=n<{LJ)d zdjTK4ha(^Zuek+!f^)qORI!A|;8MXi%$D>eIkU&%ptUTWd5Yc_`Nw_mA(JoB=q;Pu zHdNDKn4cFMNJc2l12i7E1sUZ1{W#)i&gJ13e#cvY)8zckx#}}%*P`XSJk3^NBcblS z)3BXF2;wzS6pvOTe&^KbGZSB3?KPBH)1ZP;^IlM|!CzB6;nc31x2nwFpwY>Qy<{y& zjqSRoy7TVML-3NTZZN2mbI|4^b?l2we(Zr27y8r*yf|wFD{FDx8=7$1YP!~2_$Wq} zC%*Xht%0m6UZArBv`oCer`|oj=-*XlAWwKAigYpg(fTpw^ejC=1`*K@>15~2l`>^V z%@-j2R;NLagv1Vfq&3`bTGd!nBrdm(I2s>*;sXtok#}mV2My$v_rfSV0c9Zslh&qH z)4`PjlIi9~1ho$s)#VjenJZz-+D=gB!7PLM)#?$CeRrJZjDxliwcVY}>-cLB~ zti9}`oHY`My^ih$I8t-`ziX(t2D@g)V!6xCYvJ*amk(z{ceDIW#x|F)<@@R*qTa&n z9HQ^m>|Ex@{~Sw*dRIM63fDXVO)6H;f)q^!>(^kK4yex-1CGD}{7nF%w{R^hUXOSn z%=I2@T-+eH7&ZN+6qMjml!J&V)yZDQIsx>3Zr?ohZ$gPu2<6rI1WkD<>pd{3Mh@27 zaSZa@5WEJ7LzHH<+mQr%3viM%W@~)(LU|n$1=)5G1bGPwi@jlTfm|?fz%IDD(|peC zWbG$=POM9P`EOtX3K(C%*6_aW)c|(izEQoPDLn*zvmmr!j2S-@)z_KQFH-kYAx6^R zSu8nntGB^dG(&p&zXnJotzxFqCG=>5$wvV!g{s=`{5f(m*@bXJ@~lE0Tly%0=qT?=?oa~Vy}LMcFTpdjHh6*Ze^*mR-5C6^g9 zU};OdHa;f&Rdk@JHMt?Q!BvxPB6l_K8x%9{?TtQj(mC5RY7m-(PZ*$JVBMP2 zA)dgx!jn1+TaGQq9Z<`~0vBf*EOYhhDRLoacmwP-^iH{*MF+!2R)DDl?!tlsJC!t6 z7uBx+pK2~!wNG_-FpU1~+ zuyJOA&IUQwif+f0Ym%kz|EcqPb(|Xmv`Ft6Dnwm#d{G!|L2E%^I!_s3r>n+R$;Ri3 z0O#Mwc)0ImT^)D|tAgfbe*7%)TP>)g!Sc=#rzLj{O>9_Pu=x!l=|1A-i1n|F83EsLI3sf22en=Kn1vvT<;xvXK4fiT`JbA2uWYx3O`mv#9SLVuNPFeF z&_~M2P&Nz8R@z2&k^kElBv7Tre5oNv?TA%AfdnM6H!O~zneTe_`T+kJ2<-HISV3k{ zbZ3d81q^j;@L8sGbV`w>^jkE1XgF+?I}%gUAV+_is7SQea4QW6n)Q7NPJ>xh0`X$W z$)A7PzF?c~|1NV!jMIWvD4dMJo2?Zop;Ab5M15wm_=&4yq|RVgttjb9J@(^0d4NwJ zS>4Xc{Nidl_DoLxoTP|wkSKyaUvXc&8Zj~`mRzDS$|=o#u4-PtY@iRH z-DW&=L>?2A-=ESQFbs7FA+DyHH)?Y!{KgIc_b(x7Zc0t|rWPmnJ!z@I{M3Z`1(-KT-PH-v zfC9PxirZ@V2r}<~wV&Om+dG^ZXWtv-j<(gKp+_aXX8cm&%oiXvX0o~v-Y2bG>ZH;N zua(?D08C*q3YBo#CNLv>+}3R%&iBF^xzLNKh!oPeYpIZh>C0YQW8b%W0^a{ca2$?2 zQDwIDks4ry15~CSfR{xF0RhpAwa6c7kQsss5{qugMo^M60@>%7L+Pm+LAfXM@OTF< zI6frrNLHxH`M#RWL_SI=vM5qkSve;t?2~W&aHw+iS7AW|4JuUDc+HTJYAHb4;SfaleF_b(t+ZH&f$SZ zN}i*nh~XX0?jad^)UvxIzgrHLsdGfQB>USD5#XKih7hs`TQL-v1Uo3B zFc)0dTs?6=wf0Yf0@=Sg{bg#OQo0A{Y=x1=sZRLa1gSUXBZ5G_NV24@rx}g#;R;Vb z>3dSK>)$GgpqelVi(m&$v3&k|tnc#HsEo%U?%-buGlkmDrr=FTESvMEKa5-NS*S{R!J{GXwuWKqxC)|dZbDp?0?T#K)b!!^U0d4@#>2q_ zX=);Ok!Omh?iMkK1!Ci}k8^J>K~zl{76iqk5>=hwLdK*By0o{ z!zaeQ2Zl)Q50nrQcX~rM2_ovZ*QmTihb4X{h|GA|)wjA;iq*MJVi7)i>m5_PsOc6D8FQ!C;fhkn5a5;{tfV( zx2|3Esqii(W%BR*%lJ6atIYk{HB^8d=Z9W*a-{BM0+iPEG-3Ml`2asumUVYHE}BIC zKz?KsxcMsX?q80guE_q1C5(M=|M90yNmajmEu5$35p!b9SXZIFiGUfV4^Fzn-S`Cu zr=MCR1j37;1`2hCG|vL_e07f*%8Ud*`Cm7@9SHc2KXN1p-S!|8wJ293vWqtiI;S&? zrSOqpE0DoVO{LcU3e~N0oK%W;R*XZjB&4OkB*+m*;{G>OJsavt=j|m9xv%uP12)$& zlSc^-&0S2e4)h+A&lx%^u%CtiV?bGg&4~KWPTdSwvLD16o#?N)sI_PEmQTF` zWd54K_g#jfd0c|u{4k@{w5|#tQM0s6FO*__KCparxbh9{>YoSbPS0XSF}8L#Na%fu zfneugxX5|-WhySCp3;H_onn=TJnQ~rtIXP;S8lmCh?Cta{j?uwM(6YPpi&^P3Hgok z-gYS1(l1j2+Z%S45-z_`lN;&zzdad)y^u%$54tc&LE&u`g1y!b%6=v#OG$`4&ra^v z03hXKKje_I@^PDIuXi3;h*pA9o1;WW0Vm4bSIWbo$d*x6G+p7RgyIO6(CgcB49~b0 zT6CI^$0Rka_?NDo0wTe1Hjb6gVuO=u`RYL*IN!=duSm;f!|zPB{&%f;uh&|!IMR|B ze(BthSJ;xgc1RjVeRWGg2Qt$LaXjJp1zi#U&rtd9oaH;OhTJJPI2Ps(zZBLuhitUks@_E1+Ue|*wXP@$f2Md0)z zMmo*QT9jE|k~L9$7#K|5uk&~$ke7lE_JiBK2){EdFvM191uAPscLKG8`B0n6h|CG{ zb|!J1J<&`Rb(gx4VGqYlw!(sZc)_jfJ5_eI6KMFHHad84ZF>tX9+}^8oztnStO&%P zOhfx>Gdh4a!>l+{c*?r=hhRPwM_}qTL?ZCKk{1+ITb;6W)f3B*nmipGIm<1u))UYz z+{Xij<|BHwWo9eub6k}-$3S$PW1#EUzkBrv=9HDgcIius+CAd$f<~r*kW$3!?TqXHOfP8HfqCCjc6^{qq3N`}}q?b7S{e3!JDU2-PlL(~NTAH{DOq1D_ujfe_7Bo5?`~vzA?hcG^@7y!oJd5s1itsz6^#(w7$ z`_1+t@&8L%?93ehhqAai|1)gqfN_Wadnxv`051(t+LGK0y>W-$jDD#Q528=JYON53 zE5M7^)X>l)Xi!Jpv{;cY?yp-sMy6GHq9Go$n*HAgH-NwA*V6`kD7gt@-iGXF5<|Vb zCT5;=x59cO8-8s3*jlJM>sZh%|00ERs!{)7zRR&pG^)B>7eSV2Dgpq5dW6VD4!czI za;|GBBD-?GzXgaZO})#PdZ9a-{mh-#VycYt6TXO&8(6_>T={pXa%`TcT#d_J_#MWK zen!4#l#Wme{Rk-NYv-4EMWy0-87e~omxw?br*n; zzkA1i7w(ScrTCYTZd-3WMN9XXdteanuHa1l07g+Jx8f|cM5gU``;x@OJMDBWMZ=}- zYv}f@6dg78G;fTgF^;{HU44ELx``tGR z3~8r3_80&TeUGEP5zI9xw4@fqjIae0!(RvIO)G(|g)WZ0fj{MhAz=wmc0TfWc@_GU z($nvZ(XMAJ-h0HNMR}?G@UwtME7{LGR_Wr^(-G&xm%0-;wP*p9PiHcA5O&J7ks;4H zOIwvPF+nbD|IN$?YgMLp#oT@cPo?z-oO6hA^(i=;-Q!~*bL%FIJE{|?QhAEEwu)d1 zzh8*pobcq5#)2(rnQnL>UaYT#@is+c9~gKTIZD+nV+RQjauV*(rZ*!vv3nCW7xT@| zgMi^FGA#{cg_@G1K#W@@4%#@hJaANU>$+_Zi&(CaQ)pZ}WcRGC9u%Hxae%Trq1O8g zZ%?qg(fbSAxRADLv{}90t)ky6*^NUO)UueMNkvZZ3>q#Eddc~IeqTAAN<3W}9f`r5 z$fr7{t8WyWq^N16pT|5L(y+5K{wA&_6v5~9fLaR};b4rh89FDwIJ>-3K#4)N8jHt! z0fOmjHov0gwcA8xOG_2qki}X~Re>atnz_DWA(m2xH+)b)V8d=~i4M{;z~*264-UnH zB8i)QleNTWrQ5iaoTl@m%e5nYb-lCy2B0r)(5!SD7(zb*Z@pXyb*ujb!(q+G`RFcA zbmRuywTX;EYz3POrS_8*<7xtD*WV*Mh698am6pygnq&Jh5pL~S$9tNSNy0;^a}~il zvXjHcHKCvUX=KX$LM@{(VCQSb0!dg(AT~2_wiRPD5s0_QByvEUt000gxCNQcSP$-QgJ?Co@L3<8ug!{}V5A0fQ)3d;AqbthKM^Zu0G1hu(b8fKl^FV=IIoYk0)*92iTC8hO zC()i>6Sq-inH5PF`qNBkk1kwku#maX$Mn zYE5dMFaX!Nqcb1-OC}Z0as;EYRxH)ZZKeil-o;>FVy0nO?Uyxh@qIy9sth2CzG|DT z8|QvG62d)V3mK*4c?f&hViWGCy(P0i%S@~p#?KBk$ije+hlkr+{G!}u0=J}^!%yfn zhQ?Kf?Ec)e@1w8--O47s<1)T71o(=)`l}_i*|E&$Mm+BJ8$$ZYI~H_vFAF~8`Vbes zda(tN%b&%^7^cm7DJ%erf(+`5Sv{dm{E@qI_n01YnN>3+Me0>$@S zaY%;mv|B=SbVG-_QWcm~LmuO%%)j+Meo_T9?uPQcxBIoA-0WIuTWE)|wPBtAYK4uR zFhZjKmqF^)5R9un?su+yf%C~FDbFRQ&c+;aTu(haSQ#iYaok+s@85t&zy2J33+6Mc zJq%+FiI)s~N*b8vPtVVn)r-Btny!r${k*Y8S{*xBW&WQ0D|&T_=`SK#8;e0@tUlOvV(0Jio6;lOM;+wnjHO7WcP1`bA1aEJntpa3rz1*)> zc`KH~5UtB5UFjUoO-{)q_+Li|RwMHFF;NrTzTdl?3sGG>%t(gF1oiH|_)c<*R}YSz*RGzrJ4B0_M<2?aOiZg=vG;Du8EuV*>M4?aV!}R{MYu(N-3*cGCFN>vyY;FmvTF z^+-9XDemvp!@msB=8zjTB$`4`yYD%`L`BuPCS&hT8@~b4mWKrcvRoS#^S60#+_>TO z-Cwf_gd`{;zJb32R@J#DwYxh25Bexym#_aNfHAWFUnG}@2ZlbymKYool!@*CVjxRe z|BHdl{Iis(m=5kr{>`u{-w#`{RX{0AHu;}bv=6Xr>zA;$b;b8!&E5d{nCRwPyF zh>>jAu(zVFYj6VcZ3FYw)klB2Tf5!|+)`_y3P{8`qwQ`CDe_qgpp9-@!>)~Vo11i6 z992t);vLX-)SGb7>h%ne?Y{t@g3FFIT1Pu`Wi!bh@z+Ox+9?bjh>Us<|i78Jb4{HIb8&dLv`7~q9 zCYJMHMYzqGg|$x7!4UPxH8g!h*osS5{vMrI0(Q zOl_Z~B)l7X|EN}5GbCiJo)%X9vm(S1og|HF^TBid$guCe*-L#VJD=Z&+VAkl@pep$!);=^pH`7IEbnqQq1( zw6K?W6Xha5+Sj>R6^Bvd!^*M?Up6rw8@AV~`U+^ia@8)>dPGAX?e$9AE8FvDuNe!a zBlmk;o0w5!dllzNd2~NUviP~Xd@lo*>f(g25r-7Rk27+g8KwaVETqG?k`UkK?DHN< z($uIluR_FH@8TJa)LHX3tmcH2WL;e#{*^bG%*aE zrb#;)fyY(PpaNMSF+Y6B1kXXGoDyb=Ym+f)Zczppq5?FHsP=b4wt~sArsSVF*o)>) z<4WL$>R6EfW)0U>q_n8t)YQrwk|i;`Mw)|7rixvBEo}j~(QJ2*GN1%or3xUW+d~%Q zQ8RIR=<{=GzR#H7RcK%cqyOsQc5+YnNNIxqhNt+2iA*>)I%lClTFWFY3zXGLDsJQb zS_~OnNMcA404xuNn&ahQ1`-<>+4;bpsg$B4=i^j99A?i4;iD`d1^srMICt1-Gtez5 z>buP@-)RRp%-E={c672C-b21CnFNcrVH82|m7p&)#gLkK_%dK-RPgzToNQPzWr$Br z9qguw&n*7!%6Ww=`FwAzKoDp0_vhuFfOF!gl3D%$+n4CKS?-i~{*<#shzd|5nzG4V zEvPr{qi}A2;tc9qSP(R~)~cc8o+8rNzL@<>(snCg?W0-;2hGKY%(h+x&JMt~IuE_c z2aEjxy?qUyAXh0g*8T_%JSm4%7rKIuCV}oJ5OFuWahH4T20Lv$gG?2Zq;qC;#uDiP zBWR-rezt62X+;hH(V-OGlEzia3^OM1b@}T=?SzTd4E0J`{kvDb;u%tPqPZd|<5%;T zg3T>}YKj&OK`S6!B-REmu=qNQw2Wi@TmIye7-ygF9wb{cQ9x^A-a{n2I*r_dLkZwJ zoW5GKX5F^}!kon7QzeQbcedz#C6_+VdUTiP2eXRUwUuSNfc95%p;eu?sp^hTs7Tk_ z5jCc~nkTGEV7I~_LaymVCCL}wh6kEC?E?f1nH;qAx61iFe;BRvVAIYZYC?eHLEzbxV$(F%F-G8q zu9LiUVk~9p=wWsos57c`yUnO&#*DIg?AH;Wydp=8bo?xzYj;pSbEaq-5=2AEU-<*T z;$`T-9k{?qts{i{0)cRtbLME#oF`GOAif87c*FI0sDa41$0_4 z2+6Y6#(arYB$eip-AqRX`mkUAE|k6~84DtXn7N!lb|BwVKq3lE0m*M@cI3FY6GTql z$msz#$_43@+2BkawRBg^9nF6bhyrB+@V7WNVTKs|r_0LA<&1NKyp5`>f0XRl-&~Yf z_t#dPbSwggR_dJtk{o-M@|L`y65bU(;sq~@gKl(`Cs~%Q+U9D7U%-HUS4vLc`eCzK z7s{iotsuBl0hT@n)K&A#-36fWr5+RJ^F-XPUd6w2wbpR=wFN5VnK5t@B7n#N7yc7^ zV@#VAC^TaqY;mcEp04v&#=CaD^0iW-x9aSeIwM?duF&!oQcD!QBm zdwJ8W=ST&!nb^C%#gI!N90G`d?gYe}gA8Mw9iA!endo;zf7yf8IF+Vtt6n__z4R0u zQ=<>a04P;pm!K1Cd$-9C;jN_RYleoRb1ThO%pxn=gYxef#DoKZ(}Vkf`3+s`evN4Q z%_X=NJ^?FxA4jy-r?8rt`da<$j(cFZNs1`_6gyx{9>XBeLpsby!{!~pY*X8}pZHNR z;kRp38P^OC5II{ zdPU7+97H%sJzK$5$v(gU(Y#>h-^F3Bu1RZ40W;>Y{~GgqmW5zBgt~cV%BIvVYb8>; z(@I5c&6H7)8=aKeYo%;wN0<93F-)ilXLtS^uUOyf>G zs~HMSz!@y??&7P;^3LGaf<;c1QQu8SyFp9E*SObAqT2Rda6>f!R~V(QF;j|Iopw0V z%SlsInSCN~~?QNR*Om}6OBsbC#KVCTIxwiO_HWsc+%E;H4MeF?iP z=i{YadMm00FS>+;o}S_%9`;qk`m){63*A%uGTQ96fIBEh>=ts%&+Y^uZQTusmy}Y6 z^9*8ZBz;ykDNR0rJmuYuRLYcGKQL|1?^Lr4Qm7(BZUs5xE`DdW%mEJK>lW}wLrDC{ zC=**o_k-d~-Qt4vw;8>k#|E6w)hd_(sHxYK;hwMQ^8UzOI5j)xhk~zuv4rw%7P4>C zwuq>wkleA)q=wKRT}vE3P2YImN=bh(pz60BU{&qFb&h?2tGfD@>j?$+Q+LCV=#QwX zU8CV%2j(hH=93Sr!7PRFQIFd*!e|>~%BOBercO5X&l=P{&Yfz*Gh+V|yuew}l`&K6 z;qVk(*%Xv&+gO*gE>UWHh_J5DB0~Ye3IxeSHN1nSlGMH4``nV0>&i5a_k^v3 zN@fOjbo%%o0n)WVi1I^y;5vGpo&SegwQJ_eIUK72{kj8ETwV9EZr+O$QCUBJb0OQ6uP(= zXZt7Wmap5qo$q_L$te*uvTSE$+B}zxI`nETafPJCSNk;1cBlVwS0NDVpd$E{+zo zsGEwK$Lj|oZIczJ6HL;?wtUP1*smQUYm=)~#5g67K%)EY)A=pq8g2nYOflVH;E}l8 zbE9uaXR6UPXEsX?rzYO9&L?-RmH8v4nYPP{)S0#OcZYxoM{zvpZ?edr9w@WBAJ$G)m+=0d8*$XloDP(F&?g{(OCT+H-E)> zCUPchp5XvhThuSDI;wH}L@|d1uD@+Ou0UMZ;rqeA!i~U_D3QL4@ht}h`xBPRqnlCO zEF}$8z0@&8pAMzgSFw4|$LwUVKY8Y1@qutkPnO<&%&0J3 z>dTa88l>jYgCy#ytjwfyR;Nv>5-KY(%x!w07U}_dFP;{W&V;AoMAG$Czf6WYAp@~I z{#LhBQrL9zsz^gbMyN^}isj6e<|!JJOR_|6(Kkr2i8E4cFq_uEH#pjb4c{$B_iH%D z<^1_X0U*H%E1ThyfwqiI(5eS0{JUXrxWJg44zrl^lj^pWLofIG^6C76#$!Pr(tk^M zTR8y4T9i?X#lcfDjzgVuEvgwHHZUq_+5d=M*rt)i?rEg|InC`vYxYy!zc zS>ExOM4u~&+ISpSBIX{O5#ku^r@0AP@74gT9Pc$=$9j)~-3!#$H;=?j{Fa&&Q|v7! zZGl@4dTW6L*Z30UV6RNE3*HCnD;Ee4QgOv0a*Fzvg&OSd~N;*@BhB zG3#CM?@qb%PQHo_4^8n|@vBLj6h{DhlvSd@lLwZl+xgcPqmxcqTAWpexbg2uC=X-7x?Rw~ zw^0XOMM7*s>c`mYR3(35m;UkXY$yz8h$pt~oJ5~J z;6uU7n~~=diXr{%ALDx2)Hgk%N7|U1+1)V8%foK$k!^2nmF(lA2im+NDz*|&{uaqC zV*H@v5bd)G_wIF)Y0ZFN6WK@5b4ocejbvg5hw82Kk^lq=kMwPVzo`I31>3l@PNCmx ziyT;o-|7XKZi2gXmuBR~w|^#J`?OB1f~Uz>5#m}AG$YjLb5GuFSaTsQdLn+S8WP!# z!D0Aaqt;V^I2aCbC$)~1$^6}yEA3Yc>W zz%(zynEcT%ll{|_tS7Xtk)80o;U?`Y+H!N(KbntI{6iQf-((1A-}=TDLzHfuY`NKv z7yCJ&mFmJc;f4@59QY7$)!jTd%g=c4g{V{Ra@3pZbvggad>seXud6%bMYYMSSW{e(zKgp>cVxVd9|K zx^N6TEzYMSegQ)?PYT%iA`?>H@#Fu&$7l&Z-IDDPN%2OUHZspPdt=Qk;)flVbtZ>A zAGjyLkAW)_8wn||SUaMH#a$leu9$?mJkNf@G)?|UPFDlyp9@+`f6>qe`3D!LMA^J1lYE}S!LWG)Y%g21v=V8=fG4s!9qMX3;P`Z4LfRxIWC z81P4xL=;_4SO2!t!~KaK!^n8-za$J+rvJ1QK^U1+1p7h$xlI0}m-`ALzR;uoByl)y9ESO}Opm�^oLKMKNyTsN;^ZCPDFl2=0%3T`#O((W3qFt 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%0AeeeC~sYM`|+)! zE$@)5TUTM_+QXy9-ETw1brV#wpu7MM@jVhrkca2(>|)(5&)bu;{C%~OceHNytqv)} zJZb6IB)XNjxcLAEuxR{hE7r=5qU3W+oERTJVIpyRBxM=cjk&<#N?U3phbR0hy?y;L z1YULB&#fA*2wiyhxNIQa6oc@i0G$nagQIx8(+>my(Vwo+|F4Xdpq<=d1SEwdI;5&xHV-D_)geo4ZtIT*_gIHTq9vu*}G(e7BQ*SRrl8Tvpqn1@! zjz0VKd84B`fY-@_A(QRo9rC53w@pHz0V~HDn%f8`}7oOp*R69&A2AfT+=Ntx*ck=2}aa z`eIy%f_nYgNDF_S%0BdI4PF=1IqL68FO)a+pr{eXq-*DFmd~VK<$N15Ip3eLnhf3@%R1xDH9lKH|uaO?O9V zA_vHq`kt?t-f#VYjjaZ><0fd5+REmomP8f9%fHZNeK0(IhWOyw@1oSR5b7m5M2}YJ zU^|~$#kwSy1*H~`VkdXPMtia2ENOfSMdDc_P|9N!{a=d(wu=zwZ&$2M1l=kMnC0q8*qR6!h!6nA zK86x&)=NLiBc&?1=khr7@@qpT$7FYTYkd3W4^v@XjJAukBH?i8#nX=ExAixXh4FhB zr+_@u_abtqI5%T+xL`9Fse0RE2oR8=yM%DtmJJ@WoR8k_06;02nO@9;O9sXi8XB3R zaG-jAk`#d_55AUT*KL7mcR69j23Hf&&HM!tVV6d2!Ghcc><_YY!g;f z6cC;}T+W{wb|}l=*?!{7nuW7<5zm=LQb-r+QSV}KC@2Z%!Vs_2+}!PX8G>e;Qxhsa zSp=~o@eGF#WPslTD+UTN0sv_WiYQ#H&ZQJJH^B@Gwht^g+XW%K#9<;JS^iWaWF{+8 z`TBW@bK!;ggs|<=BjhhvG$}VQ6IPcJCPT14y~Jrj2~wx3WELLCQp=niebB@^?O*CG z6pJpGC0ifbxHbufuR@yGe?s+(Uqoc=*pEU#y?~c3!vP(c2Rso0r!nXi+Y1zW#sI--d&=$T)_6ruollePoe$zEP@ zrTYs7EOfK~~yQ8x)4nFP@5n2{G(YP$cdOD4Pam=8kHY+J5zaHOO(c z+fp0yzsN*bxuw&jWx`pM5|c%g7jL!d5oBEZT{6peS3_mu00@ z^ipOsk*_`nLsS+0&;nP+L{(GTza6P~qrfDR!K{4!&8t`e3d3u{?mI?Q4&l zGrlV+Ox5Ymq;*-3eNYFNV^bMtfGMU))QrT;A&?d;h?D)NtAl?rgheXwvzM?m6M_rh zN5}!}>?|15ycCxYAt~bZoVD?(apLL=m-+`?Lo!t)59rh7K7a*$L`6ltDCcEp5UCysV;L@4Syq^GhKcKy4ih(IdOm3}h0;U_?|(oIPy*5MM`Ba^BO=yxgMyB^ zFBeca^$yk6cX#CXAAWs(?;n5IrhP)@yuFHx4fNp2Q492;_#l|dt8*uZu9+46>L0O$ zA?JD^N>-CK%?~1bz_JdcWkd3xSmd^!=Iv1laM7eCRqaMyJ=1KL3^Uy=IHMD;(Lhm2 zmeDWL#XWs`{@s`k^@euK`%3FB0*ShRpC*Iog3YuWgR7Mo{C=MI;{4y54A?Ect52M! zkDBvnG)-G~T*fM6BxL2<$?BcwkS8$`Br%j8p_}^*W9Oz1fPF{f#7v3{s>Rw30|Qm- z4(8hS-384>#`4_DM<)>#5$G~cEgOfJmMu9fhhv6oSwa2#u1AaPmFgx&3y!rEN6Q|Y z{e5^L407Ryuwq=zd^Lxq%#6wGvQNTMRfa?~soBnPH1OGDzhr74ifLFE#re1_=iyfO z_OfXg^?h<5po%H7#)?YrZn`kDkIq|0XjbD}4U$3sEmzMMA-xF=aX%JLdJ*a5w9=rurz_!;A!5exU0 zER-9vc((a;-Q!QA$KsX6QxRzAzF&*Ch10jqnl z2ITvjcheifvQcJ#EOfTQG{JV)CHz05bFMAfMp0kQjeT!|#T*5H`=cGNC3+KXm!|AS zd73iAH_n+s+b&|Qr>2BBeJ<~P62Q(W%VMOP<#9|14e0yD!FW{ZuWIDId~|I9%4gHX ze3JNFQg|{OQ;_qy7zvPo_)11l%M*!OKi|fY)qgsj!Lr)oo=?Smh|gP%u@@{l4S}){ zluwrntluY(DHt~;vq}N_zUwAW&wWjOwb?0L`!KtMqap05fmrvSRzmL;&>roau?rJW zY3@+KD_J_EKvyf<*a9-sLK|j))3LSRmlc4@yN~Y#oU4oOsTY?vmx0Rb3Ol5mEs;;l zBitI&&Yg#5Y6OMZW*4*85g=9dHsZ~oz>*J~RAm=YEiLB0^9tMT)ub;pd%98a8qQmr z)ylVgOVt6|DXk!&w;*Y>)^TCy1T}8Nrf(O8%rH(FCk$?)sq}VRa*8cLJ)tKm7qkRA zboh2G!oOWJ`s+)c0|N|j-+bF;-r8`Uoxu;DH2Dj*zc0i7($GfWFzx6~`~9Jb_Rv)M zX5>+BIt{gjGu$jZ%=2P@ohYFe$AzJ|q0eHVp|bv6>f9Y#CG^WUfvUqqiwmM_<9I7x zxWh;Jg}bp1rR$y6bzRW`Fh^&hEV0UL*Y;eHPh9LgUzf2tS13U@1&a_Ns8{=?2u}z)m|gt>5>vQ^~B!H?#zsc zmyw>>P2Jo!6VmAT6K(I**hWo5w#^M*tc0oM;V(>tOTltbS3{S>p9QiNh7iC_zAWB) z)vvUFvzhf|nBC3}_+HAldVr|=I@;4k#dH?Zf-blseO*&cU>S2?A|bYP!MRR9X3Fgh zg_kb$kb*EHR&v1R#LPpv4f0Nk>`Ocm&CIBOg$5SY5(!l~(uTw5k>Ephkh&OsZT}mI zX;@naEe}r5Ga=T=V1NOhFZH)#LFJlEL&W0uL_P*%22Vu>!1e-y?(}X|(EkKQF7tYv zbYYx52Mo{pcjR8plcj1j*$T!nj#4MRR0qUrbM}0|b1GX^4mUdlB5&hr2>Z?_><}>J z=2`*R-4=M;6&}y>8lQoHRL}C?ZQXYlrv!CQ7w2Y5MvlVE&Wrt1lR)Ug4{Og0IE5`@ zeRualO?NITKo3kG%5VaupNIQ6PL0sjx1>*t;aFwsEOUsRo_V|TA2f%w?fZ?ky-;Jr z#Z7J>WBVUn_+nnFcEb=-gI?~C?DDg-i_l%m897}I>EiE4wq4pegsw|-TEu^ow75=~ zrxtL^KYapTXxM%$uoy-52xhST2g^EKMr8s8}8Jz(3WvLMe0U80hyRL@5$xbAZ4`W@=1zXB6)Dz z+|AZ#082<6N?DtZG`#4d2^nruegvlGt}hv}06TpRDpx|d>9nlD{r)t`Mpmag=HF{_ z&*OmwD#x@-G#%~Bc!r^+G0{+I-=K=)YiwB$+3Bk>DR#SD4j~$N5xumZKeqbGa^qj! z6ki`cstV>7O(PDE1C{+w0qYg9?=a$S2R-Oc_>38W@o)NE7D>|o@4q-RJ4+lAIpY6c zh{wXh@h`Sf0Vb+(+K{&{s9R;&(C~+dpnrizjyRwY07EeU3vivYT`jiMPP876{}#DC zImt!L`)JLNUR4D3USr^wRD`>fhhHW9Av-o0%qTUIVyaU?RqCx`9usZcF5PW|NRSr8 zk%dPuh`*yV)=@hMm?%hXxQo+uV$_2fKDO$Fpi#`c18^ET!w;uWx$nz5AYUXJ{8g6; z1t#=##Xu#wBLbFsD$rOA#APG|3jCX7Jk&pJEC}aZwu}F%QzeE=_L3x>$A1#8Lx=2m zWNpGzEd}%k?ZY=r9!AU&tOQC!Dw7$dVYeSgQtuBir{z9MD`hL}sTx=<^Ll@^yFx%D z*j9q_G$39UCJum}K*3yTqy*yFS5fTCbt6lqGX$AXp4$*3rfZ1Lhz%y;%@~f^H;H~8 znhI&8Iwk@OPAUWqjF}#`Q);9J{VQ4=DRgeLCf0$_9dWX(2|rQRHIoA^!K*M<g^7TL`C@8X7FoIzP~WrFtJEA=wYv51*VMMKR9G>fVwhwb7~{)mgC=<6#*tkR>ZU z&&=O}`iYn_O$%Ks0NQgU1A2130|+Y271v;JmbN;71$lT+sLV~HeuE;L7&VY&9FW8m z4d?_a{_eSqAIoHcJyFtA3|iI2YacYh%IICnFEF1GJHR}4QL*dEnS9;(d87X@z&C*f zWo>wRddiq{+u_}=Q@glJ*XsnY<@V8^Hm82LOvCDVj5YF;d>(KJ8IxY$>T|B!SpN;? zcU9LFkS9vJ!F}}YdWEnahUEAWK}URZ4M5@TH_%Ubx-uPVF>~;Tk!*oYsz6XRE)Ve&>@DBiAx)A zG zNH43_m#oG48Op-5f%bZSZY|jeZMP zAJX!CDHFvRJYgWIPH>!``GcK<-5JOT{8gZlYKl}6Y{bZ0=F9mpFyR zluO%+o&M^T3T?>w1urB#0cIZpQ6)U@LWMniQnZb57^et6syQ$q@NGBJ&$DcndKstq znce!O76>o`LSX8~_hZiEWdy3BWvKrD&TcjBZZ*yr1K?`AvAfA|6o`w-K@26ebCs{o zoO*ID@3Va*?mODgh3l<0a|Wpip-q|hlUy1^TL6W2(VLA&MiAD?(bNP2Hh?r_{1E*w z_0xpkb`5!hTd3BTA2+&?15KGtou758ekNo@uS22>R7EA8e~c!dKXV+37nD1b_LO<( zuaLpN6o764Jb2gyAq@QKze6Dwn)=2>eNs|_frszu7^n6*;bgE}%6?c(;FWX9I<6KL zlUmckWPhZYaRqCK)6Iz5yLrM*D!s9$o<7+brc5C@xJ(WqtjG2s5MJVa*gB zaqqS+G-QOl6C?1hM^(_@)+kNs#N$_pM<47AF92#&7b;{=Z@>xf&S(iz5-+KVq=)dR z$;)iTk5QC9#!~oNINH?0Oy(P>FvJL<*1Y+}FoaY-4S_z(4cXs-Zd@+&YJ;LyVboY= zGSN{$NCJ~l?g*#c`z5TwjfgTRb4(r3_MT?@b$l-3%&y^Bx7pKLr!2pI#9{$*f|cv(j{6nxSR8Ur=&lrenU@ofvAv*UvCx1 zW?~-53avf5OOS05|Wu3vbM$%9TY>Jzc%&Khm;-6sW2O#VnHTQS9 z*?^1{Fb(r#?ORu;SXz>G$i`FOarCJh)bRZzc=qSt9v+AMy4#9g)pLk~7a@vTum%Y!$5&|D0k|{S~(~osTdn_G5>OK z9rUE^iGf@7%ihT|`r}K017MPdi7EN_4v62ew)B|b^W7VIUMJ>!GpHblHmdjhj5ayp9~l+QXo-95Ak7FDdvC$JM%l zyaqVxn?U|e2(uc=zlrQvSG`#CmHwbocl;_)xt4Pds)cTl+eObhz=E%KSTuM4uyHja z@R)E58)Mhevfy?xR5kSjdA#}O{r}B!EFAwCWJCjIOJN`aruvV6?%;pqD6_OGOEAL$ zU}GvrwXT;_g*wp_+^T%;PPq~iLNakMk{AP+0b0=A1J_$9F(eHU-KXH58BSB>kqCaiJ`#>eGoBRPINZP zX?7VT$Q##ycoDG}@{I%y^Kxs>)n>vyr@Ife+tJsx@~v?aPpkJl<{)+NX494DXYZ+yEO<*(I$f}mR?D-?I7s|{*%ee%fJ9&f;+al2G!vdP|}07JWj_ySZS)ZCjp z$NJe={M2PLzAY8_@%JrQBKc_#FUQ(Neuw}dA5dz(htUqlM3U$F2&C@H8_Ug2^Xr%$ zwJrRq-KrWsi~k6@jppl#t!iHoxU;i#lqj7` zWcrTQsmQ85d?DI1g-BPCkimX%mQn_IA(p--b3YGK`$(UA9|3Y+VxFLV&!LVy3@sA? zEJvMTY0u~=;bTcl5@N+m9omGcG4!>Jk1>>eVV9={a2_Wz{w+_}bp?4LdRyv8?YaU)ux!9;m``2`2C2|Zc7|Vz2c9P&U9AVL!?2F@ za63X+-EhD8L0}|<$1M*bEI9D<0@D2(d*gA=cOY~eXdl4o^RGt(_um$HF_V2hoSMU_ z=QD}LA3%4iU37t#oG`(TOC||)AyeRbn>n7QYm{V2PqK3&W1ho<#4o`86~nrSa*+mV@4E-IAKYV z9eE0QD+6ays>=z5F}fp)W5_~rc}BWxHV9K+G;zovj5|x8sHXT|>0hE)0bIi}xpvAE zZF9al$jraR0GBWig_PMOG9v(I)@&*YVs82uRFc6__pHFo%<$kp%`Y(#lF>Q?7ROk^ zM_a%yzV7RsL-8E^K%W9Lvk_Am38K45%(2!si`9Z@H^BvSXfYV>y1put$6O_=<+8l# zlp7*$>X2yr_xTnK^~`}Ikjha|K~{0L14aD_D7f7nfcn=-=pni%kOY8@hiFGyVu4wq ztK051p^N_6Snz1NQ8$Lyp)>0v2b2rXx}e&runCSSf0ew3zc}P?>bD{&VN6se?~{)e zXtvIE;RcUyU(z>hI6+k{kMsy{C6VIq1b3_2M%Ry1()2sK6FMxccZ?+)8NXyTehp6EX6Y1%&Qlk# z7QBna45WpzdSjE}_;UDxWzx&$5h88v7m2|1qEnj;q=pgLwX8r6l1#q;<&JRR_i5UlHEtV>R-!yVK9rfd`r_(dsD70G1aKMGIY?q@OBS-U5%Y%fl#|nV!>>w1 zxSxSM-)z!>`|+$G>nRstO&{I|1cA6Gc_rBf`r{C$^#%j%#E6F&h-f91lcY9SvF0Tl zXhN1`h#Vni{~C{&3b) z>D&AI14{z3`n2KAO!LHS(75Z4OXFNuk;`~qoqLP}XwmFhC99WFj&P>9OxC#9(gW6i zHGMkvsId7S>D}I75b8q2-7d9A$&nw%)UZ^54mZyWQlg`z-Hkn+(fFLO52=(V(x?g7 zhVJle=fMja8I-=p78Yw#sdQ+=kHU7=Lbb``Hc%AGM|2MFT-bY|8Cuikz|xKcuPXJoxjElZN$9SS$sHb-I0RuHxy6FM~Iu# z)8!s#zcAdy(Z+k*Z4dSzCBG$KV@+0vB_A>%ZCV6lNkZgJ0nRvk!;X({o?3mrZ~D@+ z0+*zmbfIU|tH&=)`lVnM?o&86pRJ7XLvTlln;?5y5#ZVMvb0}ft~QhHw^odQk;H&Z zl1vvyTpCLJz4Mj*D;Gm}TcGQeuyzt1^FO5^&i?_F#7p?VgE6zRvi*J>W zr|F6o=BO%iO(4&Fmrdri?FQa$%{zPyC zIXy5@){-Frg#Y3RpK-s!-fp$J+oqqAE>?NH!-(f}Qc2p5>gM}|Ugi!Pfj1tRc;0VS z*Aq9v`W=@F0&g2`Zvc07VW^zcw%h_SU4PExWS6~_H9ZywXGSMxp|NfACo(eN3g>>btA3dSgJK0z$FWEooGrwSbE&J@Grlpx^G_45kfUL_f@n`t-dkz@oTHrZ3E)Q-aG0R9{ay z%gP!;H$KS*XN=7v=}W4J=^*RRt3=21vk_1!)?h!B=B<4V6+uLW8%~4uve&#SdygZw z+>0&m^!}yeP!R=Y<^$YgIi^QFxO9l&M2-~Em?4Egb1hiS-ei_L0*5s{vNoC#|N0@m zx(19+He_Nj0GF+i?WhQkmd7StSF1j!wCY-hXZpAIRpgIxUlK1La{tR`;6IcLLT@V$IXs%bu4ac%Y=)6z`m1v4qg_9O8C&-#iv z$PShQfH5uQQ)cM=L_Hx6Y}Nq0g5LJR0;}hUqtsuWx@|rgbd$fHACEqxu|+;R($b%i z+KseWr^D~~ZHq2oy4}2xwsX+bTj0nG@cjVQQBcU$Y%_e6br=jjRB@zN|KOQV^83uT*${cW(>dQCGRCCwiP zpjm@!N#pA_n=oM7kfbjYq_`ZZz9wyC$A2H!QY%jlwM#F~hB`_7RXwbHzylbnw&PE^ zMLc>Yd_M#|izO%MUhgMt??RHU6m9Wg?IwhS*L8o!d16cxS*b8@Q+v8}Qfnkx$Ex@q zS$LdtvouSbYBw!}b;Ax+)pLe#%obJwoNkx%;+CT2W)+P6{ZZ3m*<8Xlv_A!93BfGV z)X}bG&ETeUK30y&F2>#e;ykjh>u;1;QE1+PFyIJu5dy6uBbS>|I(P_|iJbTc#GZ_@ z;hh?A;_DR$ef-` zg{Qg)&NGOK) zyKU=11li4Jc-a%2`x;GS<>#)LrnLLQb_oJGV7ZsaH;6&%YAVac5;#GIil#^=fGT0J zl|*MqQq@>b?-a7Pcs_uMjIjqEKvCU&Gw02@y)QQ~qG`d1Y@`T!v%5LppA2cZ&J!v^ zv>WIX*)D1)?LJZ-qUUpu0M1T~1lD?RVpfZ0n6tr?n* z+lRT?HK*shr;Xz#Y9QqrNs-!|rm6!oV$N#1jZ^>K%fil}|Y{7$l4Jc*RkE5{F~$MBZq4 zAFFpNU&rH{r*pFG{2#F#$Hrh$)uFNN;ozQ2#LGN)SE^b0fL<|g z8c9*UW?57pnLFKz%20fyz~{_Ca|NN()V)E!0f|0Jt2<0S0yn})9z^^oTvVFDO4RR& zRn8L&`O+oJQ)B)}KqxfXji^!=7-$YpCvn5UllhL)v{rz74vQWfQ2$%X%VnR{TJ#j$x#2zy=H~yZ`l=x5}p$jrR-v z$poEUN7Hs4ZzW?Ek@X-?dfiCAv{}q%4=U^Sjv|SoC$5kG>5NNFFyCp^&}6U!ts) z@vM9m`aWTY5)X_2LyF`2e@nTE8k+xoo8^9HfYe=UClN3j<(p=dw8ZJp(c+ z0peSsE^lyHF>ThHWIa4dKvG#?zU^2hEdCPFzBgcB6}fh~v&^|Xw3XR`Fnq@%XHfC0 z0nt4N;hix08>}9|U@T4}=1v(gZ;qGKS*OyNXQo0O0#fWI2=?oqAH|RLPuAZ@2#zU# zOAh$6wZ+8DVHzbZwul?38CC>9E3O6dRKSGL)- z+M1Ldg$MIkVSkmWibrLx!XoGJC|x6Hh}yHxfqtrwnX~SjIYsL6;;sxwiGLr?sTC9m z(c+r)ql4p*Km|nDn8styS zIhlINc2f`22O6F+KMW=_Kd8?i_a4X`4^ygiA#*3l3>6*Umu;E?;{~d5s~C&j0L80^ zG5b(T(nWEfWTFF1N{!+b+t)5(6?xN39}cw@0;B-XIH0F_Z4t4b=)Jh;)DVMA0=fK~ z2ZP*?3(H_jIu^*_{e>LtARwXYaF~p=hvOAsk@f?7p)V*9`=7)I8IadDCFSi^t|>R> z?$4jkQOs~OH zbsZ+5iU3_OKA=B19aLTcsS&OG{q1;YGnb+>>%m$VMp%~+HP8dzC27PyA zw{+V?NseR9=Si=1 zwtxff?Skt?wBf`&!T%g+F36;0GA)fr9BDxWsm1~%^5ZRLdg1L~+n}6qfeThAze3R` zM+0LN77>h+hE{P#%k_J27n7S>$v>a?J6uhcgHg^7I{QE5U;%^aUmnuXBAeV056RJ- zOP(}Ej|JN5_8vt5&NhKbSwCCB5opF3zL(Mv6keJ=JKuWmz6?d}>YU(Gf)Gp{r=ojG zQ%L{}q}26+q~KR@o=vBjG!W87uv@s$=ODGN$#H+#NYRv9jA&;7y)H>W8~@quE0Atl zdUTpGeMWt3p|)k*yJ2#1iUp!HxHt>7p{57;@d9}dr655r>iiO;Mh_6t<|x`TRr7nL z5(}gHeQVA5rkY8ispuwgRcs8J&n^6vc^1IJ?Mdo(>1gFs&u_pOHH@%>ftslo3rEtT zUOGXL+=7^^*9osnRB;J+Jx94SG*BHxAP*FT$tp9YxE#a?PL?bzT^T1vkX6G?7*j6a z13Q>~cW@)zSD?hn4vg41_-JPKx*reWUDDC24ZWRlKp_Jx$NA&Mf-qv|vRelvupBU4 zXGaDe;dh|4v#nd9BDU+!2_MMm3G?M$IQkLWuR)^vGn%1POD@e0b|indN4HLMi`aXTtk+e?g-aC@@CsgJ5^ z4irgoWNN>uUguLC5x!0TGWfTg5JuI0I+8Cd<<@T;3w2#pz~Py5IL1jmgaU{KB9y*g z5u2j;XH5p=`sV^;0mlI&`~tdw_8V3*zitF+-QI5CIOkY* z9ampt=UkFUa9ptB#mjFXzU&8gDWH#Y6eKIwvgOn-DNSIJ)KMir;JdWDMp8U4yu38s zP_SN^1V)p~?$n*s>_Xkyj#%9E8MDGC6z|ya_uEVV26||F2OVS8fEn;*Z{Y3R9MI}6 z7-qt?i(c)52>bGu3*p;udi}uKjP6JYvb9LLPXu&NS;(+Ft0R%s06w#)I_M2fJwi<2 zp|mVUU&T=GG=cp<5oq0ncbGG@yfugFDlKqTTZd)US%O&eSRpo>JgO7t6Q+Y*BajS07N@1Z48We6y+m{O=~u@|^(M@#p+q)5uFK{&4$c$g5l2;veKS z1?$Vpid=pjvfmFNtoeJZ(<1E#Hi{ExlpxqB=VEey^D5C*u8(Xuu}8Aar@3T`xxN&C zeYW}Y^akyv$8;bpMfdkx1KmFetkcMAfXoyNC8*GQx6yeSXgCOl{6+|W2mb#5M-etg4x(fuQgCE2 zW_C{2|8+b4U(W4}fpRVlhCj#1<{hz=d#9AO(x^w7!_7-iEF+3Fe*@X!?L@WwelH}I zxrAIsykO1hiH+AM&>y!(z1_ui+zY_Bm*@R3A@m`wzhW>;U7NSBL0eon@x-ouvqyG< zhpgD0yR2y5xcWJ~tb5!t4^|1QMU?mK0>E99Kh-Sp;L2=S#a)pnZu;oHgZ}PaDgQCp zgte6qEtB-(fyvgfzaJU2cxXo8?fFy4v#(<=N)%VB3(t8IJzhVmWbD1^rS8k_okPJ^ zgltcSll%>W3QX>*@!k5dbe@O9hwd!^_c9!^|4yj6?P^mcyV)|1!t*k_S=Kv*39y-+ zv9LLi$Mpz${mwQxT1w?A)+wQe7ej8uoN(%rxo2#Qn2~}PXb?v>-DbU^eg2b@+m#nL z70YNcmwUDp7yfy!o>|XdZEUbtf990-(#aL+rrX}D@x0O43RFVNHGETCZ+w()Y1DEs zwccOm-lQ<{z^;?11J>Xve9Y6w*6(*p$BXWVJUJJ&jHE581BRW%pvD4o zAfjtxBlA?4nmHw`I*GCN4|KAx`52x)Z>Tc?Wl(z=ppfr})1dHrg;eozxF}&{>Ny0z zl}|_PRA8d&et2@mxb3zc02<)6Y0?CzS^+mKtmTq$Gsvs3;{%Iyv<{hBz+y0SL7mkC zB69Wav>8R3O3Lj|T5o1)X4D-l;ovrsg4|lN;Aov3-}8CkbJIMujDtgPqM%2{lk)X# zKHARD>xnTv6*Te(k7uXo@sP{2-fpmIJ?e$!cxIF~Q&7!v!b}Er3A(e=$bS|Uo(Ka2 zG9}B+3Iy|FCWFG4{OK11@)e3|3Kf!|K`S`(Xv*qDRTz6tB-zcaJAofYGuud6g_TA9 zdTRt>B4#cL^3(caItxlBx_(b{j&bgtre-;YJh?4bdRBz5@w;qsq{37TDUK0WF-9dg zd|cJ^C_37KvE#C0RRFD8h#RUXfQ}-9LhCwU8wnA_OA#kVC4pD~df=(aN6$IuSQxyUq&2mi3)Yi|AJ|R2SdZkAcY8o9L&829|{Q?zR zJzVdriJ9hK!%6ECNOO}?GHj{*e#F{Hu{SX?eHDIcrUv4%B-p-iPfiMZQTE72t-Yc8 zP^#2c>6D+GYjz}n{LpwN(Fr&XMM=>*dzMk4Q#vQzxKi{)Nl9iah{9Q&k&JZ71pkJp z1QcFr2$teLNo)ynsC~Lfe7_=JRA0gvDGE?A%qYk&L7|HTp(&EJWWRAW#8t-+Bx6PW-F5!tnDq#i>% zkYrySAhK~Hu;3_qg(U3TlE(DHcM(=`UwQc*I-@j@a#mQ@%tZ7XC2ZwCc8rEU*Yubs zgBe=EEw{=mz{o!i40-Ih6rIar6mdrZ`aGZCVILj>I;Q*+*0G{!gcuO*G`@nOKo);e^8d8N!{< z*1IdBtfz}zII+JkBQq}3%PmUZipC~dRh;jnB)%E|D`9`{o8T!qH!w9U?97=JSOg|u z5_maAxa(l`!(-aTXR^CfZ~p$n@-vM-{8LaWl2KCw&c!Fj64=slW-r1CTaUnZa$!ya z1DsZs8H098iIq=!R=wiY`PM=c(;*m4rKz`U$JENM-Z4K-4G}X6p?)rXU^6^IF#%DLLSasUYY@a2hXA38@r9aW znZWcRxoE4Y?fL$lErUD+5;I+Yr&=n{UP|z$IG=8iTr(vj6YVBlPk!GS>4wskh}PA} z6CR@b`oYb=+aCO9W|z3hU~8*(O^^Ioz4-{p5C~2QPzz?DR2QBc73+f1^O5z?0XlYO z?d*$@w=Zh9OF{7q`$b{|cVki?T@3*&MHg+8>tP2Zxr!duo0EW!8UAE93onh1k`Q8c z^In2M?e@`%k;^9&ddzAVQy(*Es)89PjjWz;|BSg2CmXW*@(V)l8IP}!lw8w}gkluH z8%2NZ115b;@S9nWHKo_iy1g+dAQjttp7&q}e?Bv>J%RcDDs4$=f^&!#Mly;sLi>5r z-oMa}Q!%2=OVJH#*RX|>=Zu@-y|@u=w7i5VHE@imv*|!(IWdD_B-Bq|&0)=Rt4JGX zYwH#LGroJ)1j{b-?lAG{Y2iq#UQ8a)i`LKu@^K1 zI!K^gV^a?Maw5F3u}`;?p(0VY`h`mrkjJKR)C{l~rb+2$HAJX$^r)5j5jL z3hlUAD2Z4SAiID&GK?oLTbc`)25l5_rU`)$4m098_gw6RROO;;D!ud8c__}*C2(ys z88=#15rfZ=tv{*&_s=^PU4CFh_OgOe*hYIfJuT5PLZ0U=&zZ4kw`>EcS~d1y!-Pee zPu0R8VjPXDJF)Vlxd%^9g>A!qS_JNEjkTsoE_}eJf3}}(+r5a}Mp*@{JKTeSq(J0b zp-E>xr;b*Igxh$ATA!t&V{jqRplAJ3I;>NQjbHBUavH5di!L}c!Do~nPcA=XI`#q7 z9#JSa!nLR9Ms}!7&3`y{j19+$Mg?Lnl72_*up(*uX~Dz)OrWntOA9O_ybS_^QlAca zCZ@++Qv{A6E_SLZKzjkxwG+)#(Y~w#!ZY8@tTbE+gmJ+;HP0wTY?F-A%&2}jL+sv^ z_ZK;Es7Q@vMJt~^^rCaEuBtZqXdNBP`5#B%F7*giHyPXQ4g2Xcreh1|a0G;igHJm} zFw+;eG0$J^n%V2Tw$iAJQ4-6uY;$ai4b78R4U6~ev}kfyvk!oXb}`DP(nni~6ir|3 zw=zIbjhbK^EKhPby4IJqVZ>x@re*5N7jxm!&A$8UIEmYSeqOF0mWM5(grKWcl=4lX zF|w=yh|+bhOHv6mX)7hqVo=z6VdeM)09NpW@SiGcZe%?_PWX{)YEMnBtx8Xi^)nf4z>hnoAsb((BEPYrr>*g-zby{I z)*?Msvk4ZJd|Yh*yfF=5<(FyJwe;l67w0^t8F z7TtuaVQvHL0ab>m0}KL{)Ek0hO;`s7p*2Ki=zfC0LNbb`$4~>6m&nuo70syHJDs%X zKtcB#vhlm4b7*A_Ch9;f4!NKWH(>Xt3eARtF=Wg^53Nq&XUIhl$QdYZ*6FJ@0NV1- z=IH?Mc~fCYGlXNBl==_tf#feJm~HOy0B1|jPagp2wG$Adw&e|JsHp3`gIHa zT^4|KW#6V!XwKTiI_^BOt7cl*6hO`G+3B9u`S%Q;_m$B{0~Wyclwb1Pg>2Km-FVK` z*8zL7ijf%|%;*0vXyhu&z}}AR%P5V#vo>{sZdm_%c9W0-YnsA(uL9nWh;YY5Oy*LO zb&vE!fbuy&l2t6_y{HW59E@NC{yopVe>9xkx}I z*rH@DgCuqUs)Tt!$fA1BkTjynCW*ag*h!=rP2N*nQn%4?|26*K_wZvQFwwuxR}1f45rhw{;u#p-({LjAwDaBhizwppGIGYt7*}=7y4>Cd&H3Qg&J8mb7 zU3P!zAlOxyG2CbdUzKrL5g3vMUU$*E3~}sh$#as}tyx8~_kJ@qK8XH_>^(x1G6R>* z74@%~Is$@6=Izxuj>0hDj{8H$J6?b1sZQubSN3FHomO&O8p<|zXMsM*qLQ$!DaKsd zaw&7GbzKUB%AP<+ysjsQlm}>wct+M@;l)D58~VEFdq>hPM?9Z_I(gjj?{uI@_Uyt| zCatmL5;cU|Is1WrhB0*13O2vRK)?+fit8S^?4cO&|Jn5(+dz?O&3PToB=R(Vh#;~^ zwXU+u0Hy>sOT3*-h~9t=;B{xej6S8MfExce3r~(?uyIS>qkoupN&@UL-F@t%grdlk z{w0HnasLo5t%DYmA(}W4Xdh3B)aYKkEOs*P_y{_Fnpst#LC#nAby5kJVt($E*&Drn z^m*yBlK7u^|b|5N^5%|>20t!{r<-zMOx}U0nDZq^+bg=1pYQ(pTr~%Br z_flK^G8kxJ+cVE?z6X$zfj|?{9)d`|FvUs45V42tND6fw7}b_W{DoquU%8y3#Kj>Y z{9D1r|F6^^{zgYJ*sFi8p=lNWJ@)zJ)g1{L3!DZel;1E^Ebw71Wm!J_@vasE9P&#IM)oB0&9b)srct* z1g~6;+g>=Ji4(x7#MS=L*X(dZ>VpE zL;)+4MkM#ju5L3bDM}0xoXDkhzT)>o)9PpUWr_0N084;!6D!+#WI^SKV_@P71q*X% zK%D1z##os{SW*4yrMs2{58t6hdDwP-|S zXALq+0leId)*kUkE1-XLO1S>FWepvojs6%#po@fN!dKaKtjU7KKOc?8>a0 z)dy_;pVD*b#H$s5qFhGgFaEb8+SE^D+Ar4n)>z7M4H7?*%^*lyrgC{NP1rxtkI|z? zdi3QpD&z-cYqNy8t@23>zV4_PW0=HL9hMMA3@LOSS0k%N8W7Iarg3*17}g82%`1}gbV`$0?AnZj)cLrG*nt@uXQ0OKN$@a ze!77ri;4uMe+k`WwgmcwOOJ5<+C8+Bm=Mwnz` zI~%gzd!eIs@mRytlY8;u3v+4_bP=={<3u?;!;kn3F;yL|NN2iiQ z>As`_aBlip{ob9IdfXon6%C+^~_=aH%TLds;ya`rmRmk~jl`EHKJzwJi1J-k;^9kR>#o!}5 zK-jU!9fBXIQ9Dk!^(1ipZ6zak9izQ*VYX_-GbG^JGB^Kb*=YAEq|3AW0xGeFl_h|b zV48!Mr;pJhF40i4MUT^R)C|d{pL5#uOUcwFPk*g~alEfgfWZSjBtR8>>!?(7p(vGL z8J^mq5Kg%Cpr)+idAw@Ick5*g^==Fm02`BnOP-2+3r-?BQ~Zd>Lm@YPMNSJt4C=_w4yl7OLbf+v^+Jr&JFpu z>-H>)R@Q|t<=?QbaTol5jP2K7j(G?l4!8k{!oS#RBjR82_C0265ZS+%8k~(pIEbZ7 zdi!=3tQ1?&ICIJNkMrt1OPzbF0L=^JkAHQTBTfk;#vjy`SwBw)9kBJ%(eIPT3w4-b z|46rO2pxB|FZtiDKyq7@X4>du>3T#=z2+DG zVw0I%Y>hl;yu36V(NHDN#~R)9&&swv4^arrl)?zLBVLB8K}jkh`wx_%JZcEp4b;5g znBr1aS(JEt+aR!L;*kR9At1h3>_=!{ye~34*RnNRZC1EhBjlL##bRye+r34A&~T_} zzrERkxBe3B$(9QDml;`g%d{F~puj(ceJa*s`Gi0lM!VgMg3Gtb!j}uA3~mDs>YDq= z@1oH%R@_sRvvP1)L_%b}S2_RwIapKKRp>rh=iGh@*|#UCr6&kY*Z@5%Qi^A>PFrh7ER?== z$VLM7F7#9yo_;wK4+yr8X=gIqPWXgIsX)1YJ!t@e^>$nFU^&TUUjzi}N1Kd%j#+5z zFN7Qv%x#gKLU#6z>G1(lw$(r-Il*cJWZop+hrpX^3O4;6lm}E7I0lk{>R|gzynAH_ zV&+Dm*ZWp|H9(o!@fX2?*q9RxD}+MQ z!v!Tl4@+st_%Tf@G9O1?w>1Vg-US_@^t-k-(5|*zNIGO74Dd<8hi5rWwvmE`uc3=u>+q zVmJ2defW>BxAXhIqUIcu7NF#;UUpqtY{_KTP?b1NT!ISGhg*hjFXGa3Nu@<^Bo#6! zy^8{lX8@vQWqwT@4d%x#?obX^-ua19Hr$kN?+M(B_>=-KK^Mkv&iX#|2LRBPI`yQI z*W2;XArhgye7t0D8yN+&hm#4mhb8mEgz=8S%=8%^urIS)Ur1ZJ0&5H;$IY9&Fbyzx zG0`W*Tn5%;-55(Fm!A!#;(zX$dnDBz!*Vg3e z_?evhwe1J)U9+P>M0tTwh0SlNz#`~!7>2RJ-XWkz`{eqiMM<$szXz@C-oQmh`O*mS zcE)Q44vZF3ML^*zxAv&e)A&qw5m3RyXEo!@mjl9y-r+&?on<~*>M$a~LBlkgtj9ka z3?TAiY6Yguf$_GSo4Jk*ENPx`lumO)hftLi4+gU7=c{j4!N zG6DQX^{9kK!-o9Qy7li=-x+yXs6`2-U(F^SEO7v`LDzLz^<~lk%>>F>U06(t3jQAX zWJREf5s5IjdtwR0yBLKG!dR7Xy(Q)Wr8&b8x&Fa2+$y_pYdN`oUv*1mFtGfGX(V4v*)M?x1al*+gVOkOg$e$}fB$;b!sy7*({{t*2-n5-Xe6i4Xw4Zp0*jP zuVx&1%Wmsv+8Q8!Z!4e^LVgcZZcHWwJmv*gmAL4ZZFljrJ}MlZZxeihV^|9h?n%aN z0V+fg{`yyC+rO@JC^{Gxn}Yb*SA6frp-!(F49JMijvQKvHKi{jauC`I=iIBdz?e+L zDF7-HRAd}m#}GKWzlPMg==|mAem|a#))J^8qe6$%sy}lG{L1c<(I``fZCs_XF#V$X?@fb{OxnfOUjVvJ@;Bw2G67+)1*60&eSnl zA8yluC9u+duqGkbgz0rf34~NON%}#5YvTl3lJ($+GMO?(ETzXd5_B{^RBAz|l0ABMu)9^pE+s2Ku)^5lq&3mwoe@!4}vdkC2Tu4P+T*mX~+VSI)y?%*YyIzDbAw1}3hE1y1qped4i@ zd=!n~Uq?`*Fb2fSCHFWRAKQ;|(KF(HyB$+a+K0^#M9x4Z)}QJA8VI1ty(s}HsKgdK zE()>l#)`V9&7VK(2x-{D{S)yxzte$!e3j7USSLEtr_rBSNC!-44-#F>Z-Pywh9Wl_ zF5(j<2%3ZkTN5OcpAwj7GV~ZNW^3PXH^DZwGcFuJDI+)*J(oa@{hb{I5n1R^$B6z5 z+v{&A$4dmw$d(%D;3MGm7Mf8k===S}5W}CCrAo7ozY>95dha0Zj4^Xe|K0uus!;_` zoKAIARV+e->Q7XWQYCN_4gTvuEYAk1t~t+}F>lSdJn zT5iVmdopBY_eBoz1+X~Avn=-Vvil<0<>F?X#B13#O*G21+X6r{R1)LVu1X6ldLo7s zrQ~n!g@9jVaVL3=lvi2OXrQ~wW+|%R;3Ia!PjCNDHcGdb?jMjx#uh`66Irce zk)u>tsxXfh67xpsya!4TAYxm1f^%h#@JFu(!Vnk)n*(_gn_5LIqAe@w2&eKI!|3OI z97YY1Dnn;4g(n1Sqy-Jj=nc^{5sA$ADKvRN52Eg zaH{8y-9$;Nmdhep6hR10z7o7yy&Kp`c1SP=-M`|bsp7@)1auLe^iZf5u6f@gKx*Bd zWM*N-yzDNgMo9);p;wP$m`7_hNcEhar5-pHYEdz6fUAaGWJD%;NW4_n)KFXi;tfm0 zZ0s*rbYDPB*vId6VF$Us8z-&EC<4y`F}Ea{khhL(U28-0*g{G9%+()M9Un*tK|3~{ zrf{Vg)jaCS58es;-56hm2ntjLIJ9xF>c*}#+CXI9wW>8<8TEqE=>lB=5Sjz^)}Ori zkmUlMRxdadr4I>o=uyW=goeLi!^o!*Qau`qE(yS?1qmDamJhPn(|y1BQC33x`7OY& z7ugJT^^fBf3S9m(W05tIU7sx|NqWduz*TM$pybC`aomW~M5ATeYjUwAkn4k56L{sn z;@$Ak5fAgxOf@6!QI25o82T{vM_is32+cOLmS4E~zI+9Ezp(Tvt1~ zuop8Zx_owyLLB@Zwo~Y-1X0Jw3T|w@UrdSEMP+l5iC9#45dRK7y+c4f^RHItj{^F; z@batT7O&v1l(x(wb1O|1BL-HL%=W`mdpx?o^1a4zZ25s!G?Mx$SvNo@ADFNjdldg6 zHLx=OcWMCs-?HA1fhoFR1i9L&BI0jWNNM_s^>mI$3ON?ClE)2mu}lfmh4^*Z2EyyTFH(Bq~&|RouwVEf>-T zm_-rRGKt#;WOiR*7!^jw{f&;UdiyWJvZgS@)Eh>IaA`m?X7xkE{dY(mpVRBB2Ks|` za;#*Z9!YP1T~rpqccj^0&QMJo@T}1Q4VolPX-a-^2;*ygLdJkPUL>Iq9Map{ew`cY zB=Nwt?xOaW!7AS7%^8WSU6rFrTr&EY_rD$^>78aHdS&y6qKL0mw&&vt;<^g(9RCXD zd7(f5t~vv(k5?nAF5hGM)yQxAqLnu*5#2GR2!=|ix0DKG$^&iOsY1TsHO=)NUw3D? zc<@P(7!%&N8%_%}CozKEzTKX$d3Gzow~W~*{Z+7rQ1Q`<+vVkXSNf$DLQ`eHv+>WV z6^3fa8U>eo`!~0}?SKNnp_!d)iCOEpp_Q_j4U_?G!;lK_-s`*5C5EO7VuSz1);l%_ z61H30$;8RT&cvByVw)4&wrx8d8xz~MZQGpK&cxP}d++^Ly&vwX{sH}=tFLvfbDhT; zCER{cqe%2Mg-9W}y!wZvgyMf%y-l)e_j%2O%y%0IK=BzE@Nd0iD1JD^gH6_3V@##W zOsrDFtY80_hy$@qvS1vKp_RR1*seFK<*!3K9}c^p-+R2w%40|7OgDowxowbH5c5>O z?cbAEJC9odxDNDvv0nHHF7{ru*W|bpyk#-$Hhr-O2ptLa$_<`6S=JtG;?&55Zs0ei zn>xywiVC3yUsrXh=&q_#-Vyfb+gw}xp>q_|-)SFb{7L&hE=Svi)P){|{9~hZ_N*#` zzTdBr%Oq;_ad%zO$FO+~qVMRzY)$CHWS>D3Is{7rw(AhcA+M4lDZ%Ntn-Q5;7^>X^ zn)^f@c(aOrmtIjl`@vGbKyozpcUES9*nK~P9_|YaE`|DD5Er!>6tQr6^D{ znQrAwc3yO2a!wBBq45Z%^MZ@^C!c1t!(&C+?2SobqFk(+6_A*W!&&Z@ve3GhPA~)> z)g#8;wRJDKVhqz66Vnnu?T2R&Qp(6n%;+Ys8nBa97_I9^^?s~u8%@@NlB&EHvDWUw zFwwf0POg`rCFj$$fYD*vZ8YgXdRY|Ld_?Q_iuJ#OvcdI{B+Nxd1$vgLUX}Sic~Nss zpSyGI9O`SeC}ucics1p8?@i`>gCEc)duz2Opfum#**LKJ^|3cBBafduU6cdb zD`2M)k}g=9Yh;stK#H2^%KG9s;;?Sgx6nJ3EA?%@l8cXs>Fi4{h}SvU?0k=Wy)pz> z9DCm~d#vreJE*OEyaSFaj%+jaZS#_sb)G?P+#}t_`@P+1DJ52N`V3KK2J~18K7Rl63o%w(5wtDlVWI^q`?3n8A5BSoi7< zS|B{LEa5%p`ZxJ-+D4zQtyqTbPL;d9o%(nTeY5hq7|y--`Uk8g!^U+AdG+sB)UiQw z0=wy+R!kE;(;6qvDaME0jr!)0=x#Vf3BFLp_9WYM$wJk8D8rY z}m5-(JMWX#^sfATKdq#zLIPA}qhs80s{tVlmY+jM5z6YSX{h+Dk~d|*Y1nYCU9%<`MkRt&JLtTAxdEpA(LGb zx*{HR7;M29ohN(#gF~hoi3IQ0wvIVY$q@Fa2e|ng`8gKvMbg!S9mETcz@~NEccE723)O1>w#o_nIP?9fB2Jac4&Ji49g*gFr zfJ~aetgN7Fv0!rUYZ^@nGC=64Yod&8xKPV%ASPnxWwvu-p&<*S7}%3j;Jsn5nh zDX(UvRO4pu4t9beGweB@&eaGIX5KPCEAEn;1We|G-zuk5f)+UxgS6DVq3vyH%~Qrq z4mqoBvBc1%_WP4QK*UD=G!Vrm%o3IIpBCs^nNz5E15{AbtG0A7sRGX8 zoM8vFHxwlkUVDNA4I4|xL%LP~kBpM3?SMpjb z!mj)-f?N)+y`Zh|I3Z+_Bj27rIz@z%UQoD3h_I8|-;uG|>-Ddur^ke8BTSW74|VL6DjAQ5`U89K=+l$7ee zLX3vQ#l|?qSQ^qrf`Gz01>S_U7u~43F7F?V@Exchul#DN zT(ak)_1YFeXty+zcK5LGRX`pM2_(jWVS&6m!+pd0iCTdP(gkux>HC5RB0EVT&tTAa z*Iq7jMtI-4noJvIiPp)M^D2A)Z*CKtkaQJ|gMhG5{^WV)t}67TMHT+HgI!?rL4CRJ zj=QFOP-YHXmWuTmEK@BasXQN+`(sZsc}9=vvcPu2rzjf-@v+8#j(*IIC8-6xX| z2Qzi9u) zyKXzy$m-4ma;PTeUiHleeo)T7Xs48FDNsZ{fl7AFxJC#T3WVfb0MABb-JXp3pt;OS zWwsd;YP3E_@u_ZQt*MLA?0(+~_st!?QT9T&+hA#9g%!kq>H_5v&Dig*S$oB12rE<6 zOmSChjI>3=aSMBa>qznIfATSeOqSm`f*a766VOhIG@8*x7N)i~@m;?M{p;9r^-kj3 zZL`-Z#6B`v_(G=`^GUdVhK6K`9!Qzyu`J?4o zRHds;_GQ;=dWW?QLR$h-H@a4sHwBW5v)z2gx81em){#I z$Hv1qJxbZU^yG;q&Gr?S3O0*P80Sm>IR>m{|Cb=j?&6#!Cr-!C0O0ZmKKd}dx`Dvwt~vKsd(RQ` zZL(iJuQMhaRovP#i^fF{G9{c>3B&GC!Ol*HZ>ZbhV1)fp36#` z0@V4N-@a71`WLw}m5!*(kErVcBrGMQe;z&zTZcv5@cZ}^dZM>2se zZn)3b0k{RhdpWvgRhwFQI$vRs+1j0VX`rkX$QrV4iMzHE47<~6L|SNv&SiV`Xnsu4 zoTm$GcUV*P(?S%CT5CW(=Q18yQ;0t~`X&q{wA!RjrRf|C@1-t{$iH|jH#jdM=h#IR zm0i4zCZtZnf6+KHobOcghmiuX>pAAHb8LHni?ewSPoB)%X1bA#v3O0k&W=Dj#K}@v zZsxq}S!yE&(yZg^-vFv&tl7$+rd##_|Y2il??RN~u`lE^g6%7` z3e4thfARf|5bGuzl}F;JM*mv*cyHN}Yi^RmXrOhfp>g0KY;`>62-m;}*?AMa-4?G! zT>2zQKq(9aksH~0#^~c0sH4C|EjwSao`+Obr0FA*x}&J@@Nq?)SgC|teXSV7_mv_Zuf5wahORlZ&nEHg%@t?o42>sg6eceY8!kilflI*Yh^mFP1kEL zrlT=FwyKLci`ceK_$h4m#>llHTb1FQ^cKeEKVVx@^aDdU11sus-KRS%a%`6vRpuuUC2RrW znn6Yp5vIO&t9JNR)v_0G^AQOjMfqEicL%-bQM=u?J=fxg+~DM&PpAjvZk+44#c83h zh}Dm|O5v7Tc%`L9(RP>h&;qGlr4q+*rzDp(kk~F99+5AVR8^%;G3ooTScSV<^_aDO zc?Ro|s(OLybAK=uqp|{sAK?JXg5s*)R}yLR{4gr}^lo}pc-}6~p4ZDkchSOuLwRz3 z;iFjz!S3iH%$ zMz7nBcD`}aZsE`TdhWOD!*D3@3AV^^rJNVI_Np#QCr2}otZ~$!@47&Mw>JxST}1>J zI0>G|M~%qP95+w->>-sYM5gIf8d@!@N$`Sr5lS4hoOA|jUxwq$_jWXKUvlq+JQ74r zi8!Yc@7Cr_upYp&s0ljIe{^`p!}E3iV1t+u!tHWc0_I?t$#Yz47uT-Qhxv%{(r2D_vv+!2)={>_%v ziws-{xtR0$==#IlZ@D#kUbY;%B|hlTQ^?F>Y8;b22!%tHr~vp)AvOUh5Z7Ue$rO0W z@GjKs?WJ(*=T#TbTNG*h>2Yt&NfmFz0^3)kG0Swc6B%s|^GcPAI}ekiiF{DQgA2Qa z`;eZ*BK-_t-05x>^y<4Ept0~Lk1dVW40!)o=#%2WqB1W+gM>(!>i@AuaGHCBsk(8c z6<3La)$GY`Vh5<{wRIF{4Z*hy&ePAi<*pd}4N11i87Lduo|V;>xX2U3>T=dx1$-L) zZNAsH6Q>$MPNZ#>THmp&xtGE;=4xJY!EZf5zL8`m^X#|Mt`BO`K8kxHZB@N)#$>dze zMN(HH*O5fU>LJO=zU&MohHEkWxHe)n*#4U`4g={EzuUwlCp>NxP#RqGWyJ+tsljcx%MaYu#nGeEX3G zjPB#M^g2M9A>_veHq>=MPj=VG(?p%De1U_kurrlaq(H_RHXZ@N8jP^fv zs;V_3#r&fnXxfOzLWSfGlWKEwd%* ze`7@jS+Co4nB4vlxKwlQ?C}$bLqwu#AoYUIM%K;r3h;!ZX`doY96mg07ET~G+*S>q z-gugO?@GNd%PT*rwa}h4pO#yWUe)E)UIzX>wyp)3R`C{ZRB`AAaqCr4{Hp00MS z%7^nVnXg&>Q78tGq`rX6+_A<-w0PyzBOl>!oQ&#XU5ZsA2Yn$p7+MGDhH99vm<YoT7uUN$cRc#wUy8d`HSy73yO~sfX!&n^47Z{?#MmO%W(u?Cwo4q@e0}2`0?_KbU zdyk4(!4!6X-wGJF*Pf7ZanwBumz2YLDeYAKGO7HrA#z3!HYQ8rxHff_#@|I}Xd8WK zGD{>e7%TT2a}%a@0}~1yq7cnXCcin)I_6T|kV9x-nG&)aZ?3d+NYkP1TT`JY%J4xK zM!d2!33Mcmt))?CY5tB30MJdz(G-$+l(AyZeMqfLfF598% zrsd;HzYZ)Yt>;)U|C2U;T^+?k^e~#OT+CW=dc*Ur2O~a))6WtScQ{DO9CRCt*q*iO zry*C|Yxo{~$lmxhA}BbRU3F~2;fp$>aj z!&yK}Jq;f_dGXT509$M;t|%EHt`yhx4AKIoCnp~DmH z8mIHD9nItfPc8|d)Q=?Bpw#pXu08QZ{P|WXX)|Yj#%eh$u zR#8c0gdZFIKMv=$C(jnWzIO!y64Ai9_i(CvJSJ7Fmw31*qY64jPOPg`-BM9V${@hM??>OLB zKRf^J$7w>)Fl#SnXza;wrk&=ro3P(7CfkJJ<)|yA0TW<*1_x33GXa)ya>*2f$*|_s zAeE*2qKR{Er3pHV71RpE-4%s1D!l!qbvGW{bSyBq86@YjXUyk=1%P(Jr4MLd$xBwcJA~O+!7nrAaupR9nX! zWV{e@0r*6av$S~g9|ESt2rn>a9CM}oUcOTm2*RH*!i`LxvuwL^A!Db0N=eJMeghZ!8Uo9~h@og^80gFGdJLPpO5$wsdi4Y+ z2Aqlp&=f1_=od(Qbxe`sDO%+GUqq)SmQ!RT0`~iwBUOtZx({?K`%h%hNJQ5G}`Zk13xx z0`CNN`X~z6S>U}~I9qdf)LX^gKpGTdC z@~ec;y#(o3lO1(;II8u3KYr8g$B|6xIv1C(WH&xlr%Cbh*03y3jt>8Nk|M8kAfSG|^}gH6 zgTctI>eCNfzwR>!Ey7Lrov+rDL(tf*dHWC*Pt##dKMU8FM;h!R5a@NTt#VEQ1>{Lm zgj*iJJzvutP((`Yexn9VlPtP8aS z07?427K&Mrz=ZN0Cihe&`wxbr)+{Ba`yfC>{ttsD0R6t=mi&}kO2k*nvkI1;8XZkI z?w1n`bYzaL4Yz`NV9obDDmS7$;J7acr{l0y6D2H%T8>%Pv<1%4f4W6vY2rBbA={6w zOaFQa8)A+k?b1h22lGD1o>uv4$zay4gBjsYmsoxxO_+1suBQY+E&+txgeZ{8VuFui9a%=CBRFTc;%x2wi%`WbAic z@Fj$G8;!QwcCO`1m#`(txHFMq4{b6&#vF3T9}H^~@f{=T(ajN${1JPcIj6c)j{)Cn}Pv-yW&1Li3X{KK{~#^9|PN z;Xg1BGw%?uitd3HlMlP~6Z)qfxcrYkIN2vxq}YNS$auyw0eD@Q848{Ir)mZSpLPJk z<9(ga9HIId(Ku(bqoo%n`P2iBjX(_2zG?CKkTVGI09+%Cf7`3O2V6RpVXN&332Gj< z!N8UR{|@rLZxYEEXFzaU;YW|S;P#9goO0pUU%o(kA4U7RLhx3@g{}UQ5`16R@xkP) zr=T@XAUmOyiW7rP=1~pavetRWv}&jMPeUzX>BSgz z7wkIl{2>|Jsmm)bXU*g^<0?%_W)P?cx}&m9mXf0SYV&P@O~K^g+c zLuJ7V>`$=hQm8IfPc*rH3YKsQfCT(XXsCu+ilU5K!tV^TA{N7(6&TGwMjdNcV)aiE ze$*5yXkhoCO$;?v@V3T~$?(h^d;2Ox!eu_+Ay-XS?WB77BnfTSe}f^%GpL{#LBs@O zs$m8G$spZRrXNkq7=ohAysALws{hSI%(Uwd%4`8+YupD?=LqTw+1ldA032zeU@^t{ zqEbTAg#LbqL=dL@0>UkX_4=7jG3Db9WdE3o(|V&hSBzilS;t2T(eGWzfDG4z{JNTd z$61D!83e&W9z1cYP&k{=@)_iFjJNa~@ki&2AS}RH5OCv%KV=K%srya))?36biHlt2 zOw#;Eb7)eoroIKA2v^-v8|b%dolooj2NtBEWmVPnZ4&leuSz{T_G|>!gucdD0uPHO zeG(eFF;Y;P$mQBmt6=G3T|nlX3Zsr>42|ks3{e+eCz zixiU_&7wQZUq5Rkdevnj@QKWVNhlk*7GZJlAVJ@_2~{jGOekD56Cgb^W8#pmuXJ|> zO(*2Jy8C?-w3U7^jf2{jj&5r*i~FzSh>GDak#NYy?=uz^2vk!H^B@dMwo{tD7k*Vv`zA%2J%S^}EJ>5XUyL?-A zFOtEVF=`97fbX>3Ch)enc=|TEOO_G*T#iZC|8}u^EB(|rwg!A?Z1?^h9<=(vwW3L4 zTSlr|vtk80TXZ&bGU=+?dlqTl>z?fFAFS>kr2} zJIFT?$4`~0q>T9DOpC3+XT8-wON+ns>V>gl=cp==wJDN6 z$do9Nt33W7_%XHd!I}T0=ucO$mY*mhERQLK@4yvUGNNA8raq|dn=3*YQ`1bO(FA1; zRALY-Ny482J~4p)kln3|avL98q48>~&QXL$S( z8l@V%<=sN)li!0^iHssR56%2es3f}i1<>egkD&z;^yC$=BVzFp5cd6feO@--+xB3-e<>S+^~f&_eyffJR1B=YUV6O{WK#+x#t}Uc*S`<#Gau8?xw870-W8CWCBp1R_$yDE;)WbCKQrSv zYLXd1yp6WF(6d|%HgoqK*TTnkErjTQoESV`Pc!ALM;|#Dm^r+m zY-goX%2#?(nKWr3q{-d9V%|MK8X4dHruT>O@Ur$yRe$sLTsrVxwdYETwORfpG*t<3 z`iEkx%Ll{23r8d(4{Puj{7p`9h2BtmweZIi5To|AQE-7SBt?q;qcL+<7qt?L6m7xv zXYWQ)jhWr+aANhq};H z3Jo$0T3aj&q1RnCV#v4qHr&5m$hYIi_A81w$e3(lauxpK*IX70GOQgWUW_JB2ZTiV zU2%j)iDvr0}6axh{P%%!OMWa!Nd4$hu=j zsr`zOxVtqZhxzNFT0q|M@Av=#CV_4B1KKWU6Vfsxty}%Rb~@y| zxkQ10bd&}DAcAb$S6T*&R~cuRHJaV1FAno;ZGSaTYKh&b_0Ps1I#XE&9exp1w8k2G zbtP}1=}h`Dz$L}z{UUxhOLK}n^Bo+S#k${lj`XX_niCy8)kS`mEZ^XQ)#M&-n>z;9;j#ukDxS5forIX%mg@-{+-% zjPrHXw44n8rLsNmi5xcrSJ~704H?Wjyn74je{zHZ~u!>B`K*ykN(gF3Oc0i&SJkGt1Pe_>v+L0*U#6<=%i;M%ppx9H&kUq{go#K0#XI->- z_>peVpRH!~)Z?U+{&j*zL$cOjGmnNzQc5?r4+B$z#P3o{_03|4uqS#k+K30uHL+_Z z&JIgE8jh{9IDlz~OAUIfGKTsMNd@h|C3JdNw?!JW56!d)SFCWI1Z|W4-00sd(MtIv z&~Ic8dOQlw;qCAALP3={s!(d=`vHn3EvvUCO5gEg`5>nIYZLkr zem>tUFDKj5VS^8ltrZyqj_M6QvMC?Rw|fJw;j^dfHm^^N)!6%O*k5zCGi+ z@n4Z`lL7J^ z?Wgw)hg)>4NfsOSt)9GzM9cQWJ1CP<{+GimOcEff4X?0s{ErkzFWKT4gEucpp9Y4Y zpRZWLsXm?&TRBvw1>?!iLLPCeY5x=QGhZ%foO)#N2o3U21__UZz%^rD2vn!CgS6~=x>I%k6Yca{ zWA(F{$5B`1j(l0%_5oAW!U}FjlS6{~@*xkfSUvI#41r?51Mwnfj@k}yi^p-M9 zZ$EjQ2_}-nW|#jU313!k$|YN&ukJV(u2E48L5;d9Mm(MGVjB#E zUxg>O@QEtNv8r3ZN54vr!ye|n!T3bMW+x!JE)M^drV6@>% zus7SIBv-Aq435|hhOd6=JZ#etmzXb}j%GleCQvNE9jlEIPI;~QXS_E+yi%BOO_S*C zkiT+Al*(F6h+*NF-lAm);jr8!+rzfjnc!rrs9^_iDJ)CFf^)IM^9{hX!Z%GZHOuFbAROh7id!;^ZcIi(haMN;HZO0o-wV+V)n{R&| zx%i%BS%nJvz0Z(#?%0AMaUwBx1ZCM2K=JF+{lh^?3!EF;)--}3ep$29LQ|so)E9`(d-hJv;doc?9S89i9i5@w>p92J zAHEGqA^jGBbyH6kc&Kvy!Z%CCHPS#m1`o?dTzD8Tvda&>u?v7W;ezM>ms6GPfA9~C z>`Y&0Dh2TWcjL#5o_u~5M_F>a)TOt)l_*(c{>O`FM9clgA7cu5cZmeVu@`0X?0@m^ zRr6oZs((bXg-Ca_0?4nQ-CkbT!^`4nwsGthyJUa8*7MbE$0#FqaW`ykEoa8`Glr~F zSnX@hoL_sS8KO_=GxqhoyV(?+0NHhpADzGlhl~TA*z}8D!d~tI5{@#2ZvCBZ2x6F^9wfRJf!Pn_`0^)Hc6yXV0 z(2aG>W#y5J{=sYXVSDT?$t$9Fr_Jgd-5xuj6*BcD7C1WZv5~PmbHB`E+V)tniObXV zW|AQG)SJT5tXpjxKeJTKDBr(&0Z^=?C8!W)`zr95IHgZVU0cBL zm2n2bgy)&f@O%n-w-_62T4deg+{VT(Rq~@0HxY=MG<>-fwPhc zi7brjyzg9#e-BMG%rcx2_pR@L2o|=jp!H%~_ftyq;4|Ev*iH%Qr(x%X!^N6`c1t;Y}0#m;cH3RoZtzx=Y2TN7)-8WO;YY2Eh@Qm2MzV zfn}VCtBYc6gm7eo2n^Ght$S^PlhOq<#tI> z*(1kljU!q+#S~9~0c6*T|IQpIQJFKKG^YO+HIlU=uW*C`Xih!K5`HB__z-jcc0+*} zx&8=Q6~NZ#MD4GwK~kxkGp&;8OW%JbUPd_5Xoj{u_Y?%pKL+*>?BccI?xUVEEQe;<(3d=8RFW3Zqf#WK=|@lWup%ic#wGv((;W?yMt_q&I<*r_F|9zSR=(Yga%%gAjoI_h)qLbR5w zWLy_E+mD0%F*$et^ivCi=k)ZjNrvHz$m|^xonn~*;uwX-^^w{3tME33a2JQCTTtV9I=u&KA=9)YVK^nwK)7VekG;f*}7lP4RMzzyaMMu$&@ z^@^5jSrm`nvgV8I1(^%XM;^G$j_h>}UpA?!gc|bKPV|#t#woth*3vze)1;gAyDFgQ4&Kj$Gn* z{OUH01Ezms_XU0;aS{_vUByQkJtrm;X1b5s-U-7b^_ykxs%8ofgg$0_w-(*y*Ifx| zs5s_$gPHGF5Yv6gnv-Z2!7D-KxlVHdfl0)#<*`r?o~JsZeHIj z3;N0=XgfyWG|!2r^6xO`-?sdOqsHNs8e`MN!%;+TnTV+8$fL6pd$K}Gf{kp#%Qcsz ze}u54Z8s#YKMaiTS?KMM;G>G#yfoV*f1fu$s$TA0oL1F;#UHY3HRNYN>V3Li!OK)s_M-Z?R0kay=s$a2=P-i}_c&EQ^ND@J zBNd;X%Gp2evt-ZDKHlc^;o_Ry#vGYoge^xSK;((K_1f zK`ev8oWZUO42O`aTJ#Lo_rd<2bxWO?=6PxJk1dvOeS~itAoIA<)e;d0YU=Q9BOA|;!J*!F&Ow=G?3;nhn!e8~0H}I0T^AKT^HNF#9>xEJ_AT0aM zA$eSPfL^eU;Z8XU=kik5%Ex){bA1V#a3j@R)@S9G(gZTY14tO4=zsv?HA6tX?VkRL z^WzjhJD@fb6V31P?A8Hisu4#CN1{3XH=mowsLeJR%0pRCS)R28bPoUev-;zA*!1`l zlV<04j*IUIJCIzzKmQ<-q#&p!JC%%sROX^y=#|&Eou9)@_?ZHCYZ)~n@>2+brdGQ; zBiyH!jW$KW4ir=7$X(cszD%|YJa51^eAgdM$i92vJ337{_{jv2L<-;VOObm{hCx51 zuxduUdL$@LOKrF}-M@H(Ur01Z0LMK6I$NaFsH-xWsEmR#KH-Q+X=21db+TaUTydC~ zCGbomUxY!?@)yYw)_F_r+b>zh-nUK2$yYNcU7I}8zBn@HQJx8T%B3uec>{)%e|r(1 z-!9m(-~U$`CA(09B7idfug}2B%KAT=NcAhB!1}%GvieFsE3D<`y^O58b({=hYSg^s ze1OXCYQ{($>g50ju((@q4}$xTZ0ic9bQynIL25#g9hiO65k(h625AfCd7Q z6UC*|LU2Ax@PKbIc`@0ca^luF<)^&fPI$L!cK{DJXOrk5#W*AVGWOh6&6Xcb<#Og) z)=z4RIq}DSo5qQqkKEOq2ja*$e_<_Jf!I2B39<3?+V93$5ZUg1@|eT}m<9}bDR%as z4~G*qYIR0!7KYZgSzDV`jT@1OK*ecOGeMh(YCGG7M)N7ggif$M4zAUfq1|C%Bnn2D z+Y58b&n!P@VH~eDGrK|TRm2U2pS`NuRDvjx*_s_xA!%=k>O&4sa}!&t+M4iV#Lx=g zC{=9l5m~4W@q1X1xyLZ<6J!O6jmEyJvK zH-r5H&_lS|$A3rIsP4?J0Oa_D0~AsU;`GlHFE<>rSj-CYDZTIr9w~bta(F>ea1>nb zXlcPbQSz|DeSWiT5#$yraC>Fe7kzR;2je!Y!|+Azae5}VtMCSG2-ubUXOW%C7Ah#= z2p=zykn~Kd- z-TBr-FHUiwmk5ps8@IB^5;`r{M=e<=Xu*-4VWRy|KdlgI$lFg5rG|15QJiY`Cn6FZ zyO?z>yaS|Oom2QF229H?#kiD8@Jb>FCq>ZWjks*3J3h$B9XU3wl(h^$y>sWD{fR}$ zot#LZ=9Y9q{g9RefF(NAgPHxev=K@oCKiIv`$HMwpLKJ;e@>#`Se|6!bt29v?tH@2yqAz|`@@$`iO~?qBTkreJBL z1Guk>A{kNva8^+{5BZL4^{@%CZU847}l{>g9{} zL712Yxd%r;1DKwF^y~t%9d6?4^kFz=P6!@hJL=IIPbw^)g=hW;ezPHjDeA{#>y3SruVSatIye zzes3jpXdG|&?G)3m4I4U*qLNN2qzPN4imj|^7Hss0GKkJ!@hr|!xe;uIWw#4LwsFS zl)?^e??|E$rAB`yEs_$_Cmw8>J^ZG7MIwXYKWNWu>kdV0@7+T(H6Y8eq3DGZe~C$P zUmaT{Z7LVEF1>@eXN21-P8i|X71%eY6A0@TJrehsNbRQxgCzN)7?8fT1r!WIiN2V< zk8Ya}00CSZzqc25`1p-}3AxLCMtaDZEUnd`BF^M1<0UBi;Bdjkx)^MD)meFuNMi&ojG>+NR^p=vm++to<+lHF;`*?{{>#`yK zek-FGUM<%v24+_$XYSi>@CXtJ+Wn@yJ%?hj0kH2iR^{fGob1Oo<1Wm<={zK%?&Wxi z89h-Al;Ce1D%g zm!G2ElT0~qVqc8*bi+1!-XE(AN0{4djmoOr!6*QP!3;za(7i~-*(Sn-RgDg4{YMW{2vJ`U&$d3UGOv_T2gB}OCLE;Zk12>)8{KCj~H zc*aPTX7YN;^3m^5XUs5#F7%%}0H9N1gsD>rn-w-65W&)OmjC4f&ylQ80)Yz7$iTw* zpVk;k;IGXOE)?%+)njXo-wVWlJ$-w7R5CpG_KE#2q)bM+XJ|AG)*}R5JV%#h(IaR| ztxw26O?0Sf2g%f(PZx6k8nNidZ|Tr~dV1U&d;~|h^{K1X_{&z=kYyaLWEH5R)nNrE z#RE`fCyP!=U*WORiA>tX@sr4Ua@frh%X!ILKrG%rj67pXD1ofEIO1{sQ!BGy$Exoa zB-_Byplu6j#6vS0HC#Mf~G46M+c1Ap&GAD>3k0uP+-B5<4{#*yqF3(Z-8oJ}Zd5;Mr2QF}2OkQa8 z)lM**fVyd-ZNECx-9I*3sTkdfuu!ojLM3OeRwxVZ5fpz#vlTEh$`4i8mexjxE?uf@ zioVf`bw18vX*Y}X=CL3322m={bI8sE%ELbYA}x|Iz-W5DR^$SzHok)yYf|Af*zvG1 zqVYFB#AoAdl#;^h2xKI9vq12*Zmbn8B)VWiNJ7L`&-zB%N`1Mo1ak?NI9gsEPDjRj z`E&n|t#j;Xp zW7*UNNNH?v)Pgd>K_Y8cs!CoUA;Rlpqfv+uk0fm8=aejNV0{@J($%*O;apZmVMfd$ z0sm6QTFtxAn7C}H+n+502Y}og6OBLBUKlD1ao|*2G6^8G@_zE!q81=m$XW3;14nC% zmU>=xc$PQ2qP64lh8&lZBhHtKX^e-8OWJJ-es~DnhB&_`j)xhg;~h$mhu=??rk*u*YmxwQ75x$j?z&+PuA45qaA)Uj_YJO)vo%7 z>i_tM7)l~;2}4<&G{9?@17GKjB*hO2PYpG+Ta{rV@u)|JSC(t9F(HYjzYQxc2p8#%B{4skjxEp8snUc^TeVidHzOC+-#@c?PVE4akH_AOMD7PK+iP;G zSOuS4&O8W42>ngd8|YE?SRJz|%%}BHzGX716Tf79Y*Hr&7#Xmeiod97P+4EWW4p-O z?vFhm_B!@1l%hA61zRRL$kkOfKI)-9qz(V)R@kED$DlrQSm>kN%bbkRHL6Yd8nYO+Hvb}haNBLPmO ze-+Lkk`T?T)K(Qg;UrNj1}FdMp3Et*X9=KaBM#VM1KEbGxlFj>_nYY}0i$(<0ON6l zkn@ra;;#Z?!*z>q`3r?;nRmcV;_~fhKrXn6_<0T;FZBQ*+3!$v%smKxFftwITdKn-4t05`?=kzg>ds?k_7FxTCL3>G*(>`44Diw{zTt53B zP$5-{`@>LBKkW@*HD0cDRs(Vp8n3-Nn{%148;;ubX3CiiqerWeGBulio^|mRYtL2> zIZp)x6B>%+u+JZn+l@c}`u)8%h~zd~+?X z(NL*C2BKqOgeM0kOYAqNn=uta3F%MK2e>M{I5T5XuZoOh@fuL3&5JuM-Ya6BhJ20^ zJa4q`rfvQq4d0s?&U{BgLAm};8@YsX9}O&!s=-c66k)C5+N>!2&xb1*_VgB%)K1DK zhv0;v9UgJ@AOm5hY3vNA&~NCfLelgezraIM_AZ~6=5!g6&C0tVmCCPK>7iUyK%Ar7*jNfyRm!S)q8Lr@AW5ii?qi1 z>D14dY8^lI-5RV9G{JzoFVOTH^q$rtds|^SJP7d}fgtEfl8?7nJI|M;trx+&2hV{@ z;I%>zHKJ1{;ULp42Z9F(l6W)zn9mF9%JAv==>QN!1U6FXf8-@8K4uV5U>wZc|5-(I zv;XJLTat#h(^?~{@3&J38MlfsKe$1?r;DUvu$iZuTwXbu@SD-{VPQ8xx?4H?ltVjy@z_lauPEJPs1#NJPJC>P@C}+ zt9&BCw$C(CtVa@!6~%i%urxXNR&^!0dAlbASVJ-vU_JLG(iefK$*k&Im-#@bPf|!eY2HAtQK z1A!oXZ}wHpkC0lkz%EUDDmYc06W7;iNeY{?wTi6@HKaFY8L%nW%@~^UIv;P}RGnl8 zR0=A_pH+T0Y)8_WM_x@cUx$q}Q`t11L6J2EL0*)kaD;RRBem2LXJp@`e)LGH zPsCfhu4y?=#7e@~GJBjOY5O&#RuI_1$3G2=x6(_vjLQnA=2oy}GW_?G)}Gck%Wvc$ zON*^Oh&TwUCr=+1J{Jm)Boigh5w$ZFmr!uY2Fmj3m*t6p?EsJ#V$0qm^tP@}U9Y&U zzI3QTfvcz&bhGO?M8_SS(g0jfU}}l{J{v}&dHPYc!CU$Mx$-ZG#5mRdp@sLJddFgX z`)cfN`{K;~<>!nis=(u9M^arn2w{v^biuJrqSHp^sM{f9ZCWce^K*2jYz&M-!xK&@ zXe)k*fHGh3q(pz-nVPYPmBOD3JgSg4Q9q*e2|`dXGDA>23e)~X81~nV0S)(2$k=zy zm0&1zG5fB5m|+QR#J!2xYo{)RnKiUnu_B}_gpZGV=KOJNv{gp4fVrY=Yd7`bb6AS6I%6n9OC z+T{U2}aWmiRHtr>L#SK0Ff#?x!XmFnWGau^=C7egV z7L_@Yn%9qdEKo8O`ochK9s(ycTL!Fd;q$$TIY$wdmm9t|4sEIdXp6uDdzk38FtQq# zFybZjZcw@yv4!zOY*uh4u5>-!t-9@zuQq#E4C6`SobuaoPz8}hgh<8u#b7vMcI~%2 ze_7MuY0huPZ4+?XsU<9#wo0T@s1#KpjkFE##wvVCKp~Wh#gFsKYd!n&@-rm&+edF% z95NJz@7cs}Ol+Jb^JOhJ#c5s^3)CI~D zXDI=I+ORx;nWY+P5W0fnvs%^1(B+5@4#tef-ZmU0FI3acSSGlIxLGu0*~+-5>MSOq z#JL9(^P+#?l^<~uz!i$zpHn-_52@BS{h(g9Fg6C~!BAuegrus@?&H0Hbwe{ccZHZE z0&i0MIE7)V6GQtjwXb$~x?x9tgfst)Q|J&Hwlt@aSP6s{p%Gz)?-3C5d#Q;zTDqFYT2oFqp6@cX^fHk zFTKS>`pY%fKFRj~d=-+@WwoI+d!=_e#TyULV0pS1M+={J#GguZk!JKUbh~;5*2{AA za}emdi*vOy@DBV+gp!#|HGwCCMNDZmmD1|ApTI(3H5V!UThn)|A|&o?|74HqaHeC& zJ|wV4cZoTKqXX=OIuI(Ze(D){6eQfCJ#Bc74E3;GX6e(rLNz9a6Fc$4559=GdD2dJ z$8bt1V=r03en%Sabrg)_65l{yhCmA6>RaEEDf{K*Ox#o9cv$xO%9AQxM@6!?IsVosGt`mc&zdIDn1d4f>_iUWE>ys6p!h z8Iy!rxY4W2>L2##Tq^7z=(qhSzGt;{vN;7TH1{+3%{in(hgk}-T}>g7e5>lGPEf=D zt`I`i5v|*d7y0Efi2sQsVxq*1k$vR1f+33w$LHF#KSQXWd^G9^Nnp|GH7(8RFui8G zR^eLp?P1OVCYMgR1;##YCOxRoHiMbYEr8-4TfTl&s8CTjvNndVdDfQTXiXR;5h}y` z$$iZv)eG*g=ZGndDJ^1w*e3$Z#?H5a4>uL56-@~7jCK0P;4=^eq472fpPYr^8EePY%v)Mc_YgM z&^a?|N>pk4SH<$T*5{~1QH#dsF@&(1(JZ(?3?&>J6Na(h?;fARHKyHTa7uqLwD+5X zywbr#PQ2--sat;*kV5*z24*PJ6xiBMDx@nglDMNUFG=XOrBbTt`a^X%6uu63s5Rozv~6L!7^e$Zlc19Tv+2 zHrW65%WfW&h~ZYFRfe(|jfF`FeIABS z!iNkRA6DO6$v>_nOc@e!CacdUap16UTt(A^|4ROd3Yckt2O0$`B!0{rF)>m!H5_L6 z5g5qVQ{q%r!hv|#B1yeoIC(LGgem_`EW7U&631;1r*TJeClOMWii}?}hAg$1Pc?|z z05}Qofb9wKGuBTUr;rI^f3P1)wE+yIy35nn1I!fk1@{RbR*Zvvpijpz9)qtSI6RM( zY#vGv27CESn@qvT=Z*cEF)baOc`_8}HT4mD2%$nXSi%1V`s2e3jMd@xs^EkH7jW?p zl!vQif4MT~|D$`wOiNQM%2r}5Lq+%jhK}l)=m>xfao5To->+>%Jyl+ecwn>U&hma= z#s>37#J!_Sj9_HqVI2mBXh$$WlslsXxMq~w33i3~2-(5ihikH7t)L4vojF6=LCf*9 z53u=O)a#2kx?I8&J&uHaqB8sd5-(hk%7v4T{923>-bTTH+;C4QUu1gRW18v%e^hm+ zp;TCjGrxtPypJ`Q@reWZl{-KEmD4Y!nOc-PewEusE_WJgp6cS@!Ll_a+e>`M?cfbb z6ymiaEjnXH^}vh~6JJLa%Zvd!5e`Pj@bGqW?fVDQb0lsZs+5ZS~6diglH@Suyz z^M#0~EE-~$_CkC(#cL6zIL4(oBy2T|+7*XlivLxe@|(Etp{H-Mbb`B)cb1G*Ab*^K z#jOoIxRTz;-Fe(#>*Z?WA-bkI$TUC}r{xptQ}25OjpW`>P!xqw zk`amT$N4=tusL&~Pm*r=EI1*F>8uK1Y0) zU)$uF>vz^s`p$DLhf@tLMck8h3jRX-;#MtUpoe--twGXB6(rX&a{l_UAC@Q>vP^m4 zc0d>cYk+=}2VDs5?g#V=KoWwG!08M`f49ze-V-S`0sinRfSxXdZ8eK z*Pziqm?o_kCx@pMN&Vs*RG=g_BIjSklvHA26E3F{>(BV)S0MvN{BfWf>7v{EE{x*` zW6p%;Y=5oIb0nDo;T+ww|DJq;@l&d(1R5F~ZXC(B)t&4g-tIaUQ-dR;ETg|bpPiMF zg8hxAnQ31Q@n-w00ENej?jzjB*CQvM(LXbI7`&44H>}!nYyw_&1xrD7+O66q@1jvI z%3QotLw)LcsqMrqfyi9cX9|n?SUEH}cI7@v2vJCVxtkRQ=z3x9>ErVF={jr(3Te>} zW(LkdGHNh}XdDS4I-5gQl7@f+7)y@VkBgc0o`Fvir=ipA`yLvjVbP2?4mprwRb4?x zp>bcq-W}{PI-~z>gnKZ_oTy|hYSJg-$FTu*bM>*}|A!@AC)vz)Ir(#C%)gPZI0NVP z_k%*4M2&VgP$Roc5bh~02&v7=_Q{i)-2^#zGx=I6VH<#QT-|ALS_q*IR^0ImWDe6( zd*ET>-j%28<9^NVHP5c|g-^AI$gZPPxi=6i(f+0Z*7olPrjlk!M)C;G8tepNcTnlc zia`io5-aPJgQ{e#-h%!7D(;uyAFaZfhuiKSTOUs~Kx4^hU1Mn`M+N7-F~SZTI!1(S zLAp>(X_C2oZje81u%-OxtSHkcUU~38w5PF>uR9w*Xgh)LgVfEFM@#}t=R_I5<*(_P zJ-n6ALA8#l-QhR`-ty|aRq|^&&P=|*muHtQnoR10xZpEBN^4lq&#BG3u-gF%NB({K zNZvTl!0NWqrUQ}Ai&}$FFn2unpwjtX_BGkeHF`}-R>EukK*ph9QPIkT+mYx#i|Q>0 z&s8)blDToIgdIh@__o<&eLi?C27~HT`O8b34SWBg^S=TBblMQ6MMnCgmbEjj(2TPEsEs#!iak{&8>9NleE+a zrj8b{PhdoN=}NNe;>9g~^ROSrBr;5EXQDw40yR(f{~d8{iM`q(tW&L!ZVbK>Mf=w3 zmme4$8bm*In;UBETh_W`FIR(MLKGsRRF?!X=_j$E!^H@dp>?y>ca5tWKJB&%TeE_C z4g3-pFWD{loKi&WnQRg_zQ}k$BF+Qh@;^b3%{%>?-60bEcz3dwx^F)>T9#8ZgOWxS z`24s-63uKI|6ei)*8eN{2WR;{|1nTcp%Ddv2Xc{-xC=TSNA9)a98DKC*h(X^OG~HE z=8G!3++DS~D^@8svfhY;yJB_wZV3S5Ofq8kKO+0D+78Yqt`h$SDO(qqj5sDK8le_& zQwC6uk-h|N8vbLXCIQ!NnrQu5B5b;)Zj-QZ5+EHAUP{zTOVn#U+#Qtd!hJ7%{a32@ z1*r2IlI)+artfkFurA#vLkT-Rh*DKU7FrJ7J8E9~llkpFm>hyykQ^LuB7w^8HP+s! zI!GyFed05mTF9nGP1XZh*`UlOx4Ad66kzgKSweBq-)j3WN3jJ_Z7GPopSr|D(-10n zvXfAo4dm5jecHH@+(1d1^6=3Hx{9r`Juo3{`_N_OeoesLJ;^cqgHiSpnj*7HrJh_< z(VxQ5FffLuTF=#It=R?jfDjrUqg8>RpLlZ76x~b?MT}8({=C44Pi|DSD5+nzFXyv* zDyW(!i@K+Gct*w^L%#X5;z_d_P&smpv!G1E&)J(^q^-r3)P=Y)t5{Cb*KXAW1jgKd zdc5I(J8tUKQ7z%e;(CZ1cG8R*rSX0Ru#>xDBVEKU_{dQF>zf?UWgX)beo#e7bLis`8`nFUMZK1o4)3~`FgVZU?A;(zC+Z8AYr7be)5hA`FgK^60$iGpY2Yv-uAWpT z7I_3gi(;Q6p?MrP8la;s2jYeN4dV+6Jz;~g3d8u=8KUmTzt%Q70Y2v+qV{rTw#w$X znLfFktYS;PGF%&)y6azUEy_0lwc&ac5tqh&Qi2H&=Ra#~c8%9GpW6oGF6!f~(-|XK zjtAA#6WnY@$vt7|N(ErYhFV8+z71(9i~6PBbs00)mU^SI~smD6A?1RyK4mD9zuBp|zK zCMf>F5?^`^W+E0&_lIP+xOI6n+}ppfzPAC2%>@0CPz7ZX5tG5rHN~Be{TKZSYv2$_BEfP{Eh7$Z9Jd?JT*|kpDT33l8MutBRl3*S zIWh`s++A(r{=SC^mZN;_uKZoYfovir;>0W0z^TG|z!xt=C6X#u@=r@EHJmLP^ClDGxX-24)tI7d+lTyC3~?g;H6*qgJPvm6cV2%K)=PuOZmvDx?pQi4JZUeh2!V zvP!&B4!1oP@Cp9Q;|9CS8L8{JOaKVZ&iVe>;srz@Y<7y9xVQsebalcq98jLqlz|1Q z^!jHBHRpqM-eiDvLL`872D3kkW9!O<6?$t(*fE(UeCC(`(wq~3zggqaPFfNi{f&~U zkzCeJQ~EaDA2(f3{#rlWC<3>G&3wZ&qT%PCnnOhtt`w9ffxwD6`3WQ(Zw1n}NwPh? zSHqKm&ZDs{X2BXlYOV$i`k@3matzPD7#Y%)(O~KYxxr24>Z;$hj*eB9msz_sVlfZ# zF@Ma9@s+dKvO7sDi45r7FzAiLaEflj+jC+#gl*e~t9!&%9bx9^KTsT9R9@Dqo!Q{Y zBiqIxsdVVdS++sb%W=zA7Scf@4aV}WD05Up*P3e9pKQuDy~pm2cw{gAWhrPJoxnE*PPSE}J{BZ6C2)dWB*uv^uw9bc zr2i$Nv9S^}6aNQBiI4BUsRA6_#3?tz5Huh ze+kIH|NqN=aInQ8Qz3G({`XC+tSl+Qy`VI}1ubnmycP`KrK;_{%RnyjshtY@reWKE zm!J&D^qjpkNXk$>Yd-rs!9$%o=iB@-O9xcq`i%n?Vfble&9J7PwuuM%pl zlaSu6w(kotPe<~T{Yq-5y@ksV^zRU>+Z@SfNQJ^GiGglcLGep zVG!ptx_JIy409;g>qWd5#LW(h%-BA3OujfUN+{fb$c{izXpu+olX&O=z8y4h8Scl{ zdwSSph4nf(qbn1J>>xr)kk$}Fh*D@!T%<t zBdCi67$Y_`Sv{{|GGxSwJG)q{1{V)9DhjS5wD96|*x3YKcqg&aGO8Jde6AEfb`2v+ zB1DY>Vk(OhAh2gwrMDb0JPhU#89))fpW$Xv9SK?u?*pk}SF1r~(6KLdPWmTfluEfe zj~PZ$7Ih8@klY?8AqH0J3epDzGgPX%L>A{LN5xhF*_9&}0lPCXaAlrLB-sPF*7`3H z5XgnQWmU?kwQDe**($f|W;pwNT`k-SChQ)yY9>y21=?6fN9advh3ik(9Lt7t9<-}m z(LiMYw&It9N>(Tka5SS=3*l?APLHK9?9^_WUUe(NQ%*xY7Ls1`U)X`#u9IB8J*n0LqMQn6|{j z_DT-l`yw7IkA!W&hZskt3ExV=(oO1qlK%7TgQYr1;~fKKg(e1YLDjU+%-qN&>pMe{ zW}R=^CndRFAcu&a~$ztv(Kq4WDoE3y4 z)&8HXXJzpUs7qEZl?_GPCN!QlxX;^qu$(>5OhuOTDJ&_0jeBD?&F|3o5i&B+<>BS{ z*dNZ@@gG~4!Z+0;h|Vi*LCPXEg>RkDBqEO}w?slxE5G-kka=Rt!Go8CMesTvLsNyj zMa6^P*DQfw1*%R|jeNL*kE9d7&~fp!9oHimR$`(V&dMcdFCUy3U`v{oe40+|j1&sx zwrpPC^HT#`)$(c)NY02M-YUo>4J0k!A0B<3obt*F7t9}AW?btkf4BYK#I(_sYg-vA zY5!fc;Hadl9HaM~(5@*^}1pzVS;C(AF_~aEhr6|kgFF4p7epn3f2;v!94}&><-N!$i!uyM914n~Ff#kZGSa%T^fl6&I{jo2%V`lb+=M*Sj} zm6?dmLZTh(1#2R~xRumQ9?e+g&H=j7K z&1ft;Y<-`{yen&r9j{<$6QFi<;I=wEg3uc;cr&bNe)b!F*+EZ}(PxnF0&!BJ_2vVs zE=g2Y4A zW#oW@*dgd$BZf!Y#SWPfz^^7E|Di`E8fd{^nB=uaQcsV0b;qnVK4yyz+1tK|)F+gh za?Z@n1^z3{G|+;D%2q4vOQA7>S>7&QCYHqOblbx*ZKxjf>5Ok19XdDSDqHHi8e|;>3Fo!UJK+vl_zGo!JF?>bmwN!>2x8(( zr4Cu1r09NY867yJo<4m{%I&8@qjO)QslA87sOZEN0?U^TDWW4bK5{1*eOf0c&D^F- z_PgMi6wO>W+pAX)lGKag)t4#d7u-neZr1;w=5Vn6XB7y_!Jc41LHn(6b(`Zs-h5Jb zcfgv=ad>F-!Foz>M5l(5v8)Bdv@NIH<#D|RJMJ>ikITpps_)>W8@rWayPGKbTO-Ac zBz67z=lN*m{&*k5R9eU~QD)>@SuP}vTAV5=Hf`|l+wH6FPt0HT z!?Xo5ncfy#y!2;T@*JR8PhfPX>=vRHW1-|$G&Q`m5E!j=A}k8Ebe>p#kG04B2^@^$ z^D_sr66)P{D4H&0`X4DJm_5=|e4qQp03qCha2oS+Ri#mlY>T37@->GI{pNoOnb z*XK#>4wZL%e*Pih3Uf14XG;YI{JUp2g0>fGiWnn)h%jt=7kQmc_i#A@9nWQ) z2+pZ#_g_hJ5&dihlU{?wQ4jbcbA0|`h;d6PXVb0}*6BbzSte{HTJobE{k$5JeUf8= zbgUHq)HJ@=MbqGxHqL|fP$R?e_QeA&Jdh@IpuguXyKdRa2yT{w?=GaS+8U~(6Kb0Un?EXChBDsTDK|z?xO-zbm z8lSX{?lF*JxNArt7o77_Pw0mQXf# zh9W2B4qx^cnrdOZS$W)@Yo-ymIcRyaPf3iV*aes{a=;SqT%cDOJ{sWBHIIn43_e_s z>#yV79`P*25yJ*P63(0)U`4x}c%~4u9>`>hlJG9{e9IoT%k|hT>;1c9q2N;%`mC(8 zaZ@d7jP?!isJDK+IKOJ-bk4~v=V}!$CuP`JBLx<|HSvU!&^>Mj-u(3QUM7W`(uJ{L zSsqB=mb1eWOCf;GE+a;-c09Xwcf#Z8?ne*et3@Wawjj{hYB_NmR^sLOYHPxVX-%(k zW{hO2zJ2uT+K_Q-_I_#4H2D`mP{VvHxQUtm#Zr@w#RR&WBs~ni1z#zaW*otkQOnQ zaQBoz)#&NN=473~jDRH%6S*@iYI~ny%st1|0J@rHyMne-*^SU$oS~aoeenYl^@6YN z=FvbsHva5Gc#V&h=-k$a;3?!YMyzj_T}H|?Tal%Jbh6`-Q*BAeqX<?b!~9pr*##jm1xmy zi}%ZGmj^9B6ZNJNFu=i4DUqeu5x|XQLI=k%iCRl5wXp_cayr^L#rqHI*%&2$C0gBh zwqGCfXM?IC(1e0(xl2n8tmgcmp*Ha85p>|QTFL5{SLrejkEy;N6nlB6%_0mU-mt$* zWkQY#(gpPUq{xvo_Ua6ISo0sE#ez;wTJ0>0n!IjAqhYKx-FLJ(h!AX;4Y!@RBtumRb7g9TaXB-HxU*~Np111tlHw*Eu9&m);{9OB0;je%ve_l;6MwL&cA_6r`khw?ywfe)NuA{Q_-DyX> zDJL|{3t^O;y-&MI{evx=#%Ug3#lU8FjPnSos?`^SU9JcDKfflV{|Q6pU}sC{5kmvz z`hRt|wzM1G5K8Br`goi-EKdj1{8-N~d|uxX5>_WvA3r}5aELUJY1R8P6@G1|Se)fw!a`?dUh9)l>RA_gyMWKYNF20y&QWe|0W)ZTiSNjokqM_*J5PZ4E z7i|z?RxBV0HVkWUK;dg6>21SVP**he3aKf|8y^ZpIM#pwQk{kXoHe%NeSN=x`MF5B z_Pa&oii2^g0}Ezsp`@4(vJeGKQwf0S@1dw7#p+1aAxhw->DM?4erL>Bz#7pF(r1Sp zzWsrwD#P0J6GODjv2}}{GvbwVINj9I4W^}5Wlu#y#b3PMt7UCcfFM3N*0NtMMb`H? z0s{U726jA%nY`Ijpq`r#F#;l-`iDc51>8Q!?yll1O@Z&{2Iicj>-r_|;!bgc_UiWJ&mp|v9vB%hAnC`^R+&$RZsRXYRPGO03L5V;hq0PiPOc_ z89F?8p76A5oEZ`43NmKyz6aSJKV^DT% zs{XCcSz86#j%g!F%Pi#d%7f+VUepDaykg@J_f&ty%v#5906UsH_N`hJ8FC1{{~!pt z(1_5(gP9F8bFji=s12cRSmfsTD?GXtUw1{LqGAqM4qz>;nC&xx(NVDJ5Xf!xevvFR z{@Dixvw1@Rc>B0ZBn-$X>Mp7LYLqtkF!b9fN!U=>UQ2A6bMd&_4e!#6goNn zp6pfAk_m5g8`Wtb3oFX?AYZO^m#A1EwGuFBE0ZdOB%9E-xViFVmFAu}@R$*k*6823 zH!jV>!dX{-Q^1fbgk|fQ4X!vO3tIeo|2Y`_`UU4!CTIMN6da*M#xVoH1yH zxH#9eFkGfjvieti+A8!Qjkp-=n~qodzeL29@mC4&2bPVDoti_ z2O$(GG+n%3Yuett4OX$tcuA@6mAJ_c!)-RQ+D}5@NG{(~MZ#*9&4-ytqUu z;lATBv>1<*J9uPhpHe}gRDh-YA6sOX0Em0CTiH^esY3wFcJrZX^)Y%6^{`s~HYzH~ zz0iy_D3n1X6$~yI7V?a+EHS$2wY;za+cqdey#Qs+C^s^^k#wRGV!4kJgE+-Lcrgg) z1m94k%u*F*rBdsmRE^)Q|x^F*cVH_bohn&?RG=%G_kr_E_1IuQgEdqrvpYd`4ViAYX%(6`HUNuAA8@k-j>tOtlUCd(& zAk~EqC_6OA9$Y)!o@dQ76KYv2&Pi>IA~^`Rzd}~V?y$je3^4---3xx~j*Jo;O_bR@ z(ls2wWSzMFO**2ibER%5p2L9##aJkL5M>lr9M7NqeV5$!CVkQ>3+*| zp@fmh6*7=XOW5%`8-`V(oO(Z%DLxdoov&wVVhGeOEgYE0nN=|w7vrU|bE%$JN`u$qV z=p|~Do$-C80`g)$>og(YK`TL|E3Fxi1<~X{nKYuukTT0h`*|r z6rN+l`_972Bp|I8(C0P(*3XsRqx%a`Dej%oa3~5>$iEdz-;T4>Fe@Ku0xwMEh`Q*h zM1+5<8P$}G?L;V&Cj5vAeg&E{R(Jd==aJcNWr)4qRl?Q<9TO+PLkWJTP@-le44z>o zjqVjDAegA;9_|%G$bEO+47E9eDQM_ml#`F)%T)}#p6-9(w__n2Sq--XDF#4mm86SEjAL8mNP$A$r^xh=4Y7CY!*`-I%vto@+ zBAiPrK2LH=F8)MY3u*ud2B)$NI&*R%4monVV=w5|_xcQdJf^A%*gY?JFJ}2Fv7Y(> z8?Y1>$0ly=btYHej*(1#tULcEHT6Lpvlr%(AM<0Sq;O$<1mI!>FJXeFae$Fnt*x#h9TL_xs8&To>_nbiNaOfz^2mI^eQ2+ zS(_+c`k11c(YFS7)W3X1Cx1{kh;dCiw^zjiKproJ_e0v|+orf}-@o7L!Fw$f!uKkR zg<=Oy3P0UJW=W=^T_TAK(u|PId)Bc?s3G@h@PrS~8v#b#OCw<-Q^5;dr^@VzrK!WglA`1VhK~G$<;VXU zU$GK%aIvQ3q=I39b8@k;ra16`(E#fqRMAf{Ib=DdLIdC_2t-4jf4U7Z!!!58!;2zr zAk5075Jx2@LPJBt2Gqx+&IZ&IdmrDddrf|PHFVldXtCX09<97>+?=OGNiX@SZxY%< zDf#!swhIY>Nc-g`*U~5gh>3~&sfdZCx(Cgm#al%_8_}w9M3FNUxnysN;DO@c;6d#T zH2$$oVhmjH*TZ8N0CZ4*IEBAaJSZqY7z8A&E6hHKTnJ_#p#jR`286K35Lp3~L%g|- z2=w$gsJ-LpstbU~Oa-7OAsM_|BOtzl6c*|s#ukDLat>(T*o1~`0fpZ-pawsAszSy` z%7~S6llJu`A|euqO`{^h2kub!jeuSIlV$*3krkkO@r;n3)mVk__90(XaEUlqHDpO zPxmia@Zb+uNdF#tPB-LnBv>bKE+JhK00D-aKt5AE6d+*bi!?w7$iLI{Noo)bqaV)p>^w*HYI0yFH6V*Fk~>A`IepunNuU*C_i7AktrcbL_?zGi_j zsb6t%mEj=*Pg(I_V6@cTJ|NV3!iIpV?4V)*fSR5Z9vKaY1`hto8_Nj&N)-p>D(l1F z284CpcG%2saeIBCfDC0J?0~=XCUd<1YDESN0h4TLh)DsRAE2LtXCF;tUs>Zo@s}>z z4pXK~pU(O`vhM{JW-Hbj>$?U&jY7no$jm+K?D+H;JMW~qckOzgnMhZ! z#rNQAtahx;MJ*@TK@fE|2cHzl5P$Of0L*l;MUgo#^&H?S)eF%Gb zL+jxFZDAs&)OV&m`4Kcn-@TpY$S3^YE=p1ZBGvnE`qnJM_|Hk95 z+o_r|$RmixG3vFPlg{&qwF0)EP~bYXf=PlSbs?ICUZHQijJY=bOI0mK+_C~Pyr>q! zwH|Ss?^BhK=qKQn=rk+sba6o?J(c@J2TkOR8`VV%w-RZ+j zk^muU_#&=kOxGK$oP4yT!WV@&N!izEob{yY3gLc zuDW7dXevL1*tU1!BMol4X57y{aC3fh^&;G@pIj>Xv!##mzt|zmwUD0xC>ekf?QpdcsE4SIDwaS7S^GyCYqo5D(a<-VHQhPDk zXdJ1P>TD-oHlh?F?7$1H@ zk4enA7r-6G891do@GhEC@WJy2`}>(5Zs4mWmQ{5Urxz`oed{Wx5cNym7=uPEhWt6A z2u9f2*Y^RaGB9I|gP(Vzut4o)fA5Z!w@$R|;X=GQ`G?qHZ5H+YT6T0xiFu!)%f3k6 zT1@xkqigJT+wCrB%`O(ln&3NaY&vv*hqB`DbqVsF!;dXw9|vCy-vnj_Pl#!M=IrN1 zo^Y00S1GG=SkI?wS=?CyeC&F;W9U#}@oK00-aG$=EmYw=A%awKTCld;f9weSMX|qh z5WB3u`hE?@g~R$!nhWoDuo}aCM?(e2IctaZ2p!5&lWM|9(pN$n3yxnKpZn)xGjWJ6ppyi z=rg+UJcNU!#0ndg03w)?CbAd?XB`h_gfc3|7Y{8o*Y_@}P7kcvQ3+SNoW}2)f{GM) za)1KnRt$!hiBpP#ln^Otxe2jF*pE6W*wk6o^OL z#W*+#qb?(TsWe2Nf23b|^!DlfJfLu0kff=_e>P<6u{Y`W4O(zyqf_zY35NJK9IB;-LWWc4g2ra11ocE(e-Ii(;7L**M^5##+9&!V zF|njkr?e}?c)KpuNvG}>gk7`3#WaiECy23E-n&xuX zei+-XuQ~k~`6~8RkE8=ll_{B4&-^Y)Q5Xk#c@PpO$T#85<}tW}yV6z-{CLfqk~x=q z43lZYaWx5(!IhL&ip^znw2hc0Ea9p5E;D}EOSaEif6sfdqzGauxnUj!WNYh9_xSG-mDLJr?0!VLaOeU!{SAH|TIl zyh&dejXnt0kCRk8M{HB8Gn0mgzg&@ ze}zK(#)SW_#DD0aIob(4i4SQvsNm3k_du^@IVgX)x453|W3_%vfF+RvRD(;K?I37} zfuss$^YMY*T)qS1A^jQxBaHPP$U#3PZSc*H7oP~?aEkJ~B>)73ER0Dn+l~=qt|mJn z)Sc}n0(96vr9$d2^BZN=618bsQOkpSe;b%i_X-Bov*uY`p-ta5{TkC~=I~f=5EM%f zn~-!laZpoqP+#HR2TB~lf`>mFGgBdhpPz<>jKn6ZuSJd%KVP1qN=R6@!eRJCTi?Tj zsd98CS+7y`kMy!&lW)Qqj1*L!c_-@>5I>`)GO0(7DpAqffRU6U$_t0WdezcfV|4g0yMnht2HO4cB>VVi^)Xqa)Agwj^5%Nul%O zN86e|+BWu>hMV}CgTDlc1Tt+tF{Ey9Yt(MW$5T$NOqwDzc7KwxGwOD9%)5ra@~$u= zI`Q5bjdFC;WI~NZ$`o~jp1^9-e|_>m9{ytH^ahjpF;}}zqS69#2Yov6ykT)V;{;hM zLoG`wBb%Oe&8*=5T|#Fo_*|qTL-88~&i;pwT%`f$-JQ<(PaV^VLZu3z+#G%m%M|-g z=1OQpXb1M8ZJF%?2h4jL9YkIwdGRy$hQCtEdZ~ z*BQfBU!gt}({x|N=z+RjKO0!=v$gF%HNSf;TP+q=Qm+t@b+w)OZE`5gr&Hd`>#YpR zuwThato>$Z=)itu7nOEVe}ngtZq)=y^*vn6og%6b`YDuyqUem343>KrGm{eyJ-sdD+ci(6t<1#8xpI@H5#f5*045W?`H2Wb z|4HSkBl@zvmc;$n6R^8n9l9?7O|R&aFmjjU?3RQgsO7KxVP^m-q`7%wLTyGirGJaO2|vRq122fuee1n)82z2i zwP#d()h@w<>S?vhU}49H(_0-hYo8Ui+b_&_EW0rjsP0!qia3SkAzGsD&?%P`Mo`&X zQ}p{(_Qqk%L7Q9Me*nc&xF>={w9K;o+XPm&HVxFz%>lHy;=1?IEw@IGeX?^oL+QgM z*dz+cXpVC1BMd}?C+SQRWdoxUxL5Nvhs-J-eX#bE16~Yok}v{xIGj*MFYaEAL0-_g zRqgSp@Y}CtGsI0YFsq5(mF;yV$~6uQJIxd%*l;D#X>zsWe^4itluJR>@vK@9PbgG>Va^{HmbK#^z`|H9Yq^uB%y9kp7B z{7Pvw*5L6d3#p{@{yIUE7-89K(dIk!W^1pu_f3rN8#P@m`^>=pp!dge^7#y%6ZhNNzZ%yz!ZKP;vC-PF{J`_fA|X~dYv^r_W0oj&Cyf2Y@+A0d`w2Z zW8Z`BK=hrZjig7*lsq;XG@dP`KFIfy*t*0T@yHofdMLRBXs(MVThX-Z;uGpTya|o~ zuU%uaee$)cnu(Rds;%jHgGqEi)3pxTYsuF4iz*=gZ2n1dDzVS?anh?(>(C3>j6W#} zf73gD#FbIPGmNQc`@)?4PCBirTDV&FZ$?PlHd2GHr-^oe!Y57qrkAm;o}hYK0p@)y z`Kq1j=D`yP;>k)&s%sLag7%%bLPUXh-uObj+1DV1pG3Sz>#&h53o1*(nbCdSYWp+k2g!+_OHvJ9DOvUQu~Qx&HSDaG1Xf7S3< zEaF^M*Vaa>6dP_AmWIYSzB2`fjWu+4NtV*VB?hB2EK&OrH3v7HPHf&1C+tXS+y$fi z3Y29{WqSP?55j+_+_?8omVKV&5jTln-^pq@-BD@#pi&T;o%WhnuT#I!L?Omk{+C&bBZ0ZSZie0ooi{OT;c7B8_*}K z=>mUInxs=(I(ZEpR7s4D^UWCH5Rdf-u3S*rhxh#u_rb;I%e#AE7s8xd&!&NA4Hb#( zljuD(XJ_gFDK`)zc3X#5Dlo0_|ms*I4$*mZtpf53gLP?qnM z_)Bt3ASx}!D7){<4FZQXJvkU3agAi_ECDNaW~CEdJJDzA;iYcFStoqtgSNhO-??Wg z!qNmi%q6j$R~w#fAx*SsyXrM6r3S?72A;|15_#@E@VK&sdsMV189QU^0ob6mLN1}H zXsoc4qZ3+o%0B4?WfrbJe*zO@W1_A?^<`Z>@g3TbHPJ!F+af96c_3^K<_n&t6JCNm%sm2#=tFrQ+9#Wiqu<0gZAW_|j6*zU-@ zCK))iLm4EsT2J&4F>7FrMe+peIl=rih{v`u1taziS$32}spW1&fQ6j!nSy6 z@8D71@9bMjDx{8f(ynxGFLmfQ@O_5;rIH_N>^(EJCKwAMfBEtt*-Y(%e~|uu71MRx z^?;YkhuzB6Ui70oFM=%?NBTJl)e}D`B=cg(Kd?(eDR{o-+rpk-G>Pu(MXBX2`UwV+ zc24b=*L>)i=bOH8PkGgHgMRvfKkZF#wjcx4h8L)KsMxdHr=lG1Js3FJJOB!QoUq?2 zI%G^fx_ydIf4$ix7HER3TE8w&6mvU1oeMBhid%dV`s`y6G|02+c)vL(RvcutY8%ul z>B4%D7v15P(#egCwhW^NX@g*sZ1__7iUAT+8)}xCir!zHMr!);!GPz>$Fx3gxem{>ic)*utx4V6Ui0LrNo3Jgn0p0qg6kmJ;vOY; z^x^l>dX1xcX%uf@|-!f#{G zVaLH_x-*}E3@j$NW8P&s^5To#qDA)pX)p6M_YRS&`*tF_S9v}>e0g2TERG#GRgnqT ze`6|=bFcR?4}^b8dQm7CpUHvfb=ETk%lx0hn0g3p-8&o&eLxYa^J3TO3(~}PTmIXg zlVhb_rI}`ORf#Qum;!Mqi7SPDQP$zC$?}IxaY=hEtILDZ=~Bz#v<5-oyipzbwFT3q znoCuk*M}q7fyP+n?b2juF5WU@@iJAzf7CExX=;{$3a6hz7mFFf-}P~9r0YJezsIK^ zq+uaEyqdT;T#hEJP~T1NMtkcHZ2IVhE=L*jW&(9_x=RYR499D?36ZH5Yzdm${%nd@ zTZq}=)Z44qy7eI8LMjWa!eN%%=yrftXyn_EbWCtTGgVq#mi}%tpy9LOj`eb=fA?`6 z?5vTtX6i*t@_41~9p>3QI}}EZ!{+<6yFw<++4^xdt|Ahr8&{` zbcG#vc>aU1^?I*{wmy(iy(dIgvPZ4b&w9sRws7lMoF5D2{W1?k>xN*VfD%bN1i*K< zTX6H@JJi3Yio|xTo5ygq#fq3_f1LBIYP_`)E69?X{@EPp-QGmDbh)M>20yO`Mw?Zb zIa_eN^RUKr+M*sKo3KpFZTMn1>xg|5R7E{y)lZ2tsuj1*Cq(-=ZML`JVOKavcWgEk zPoZN)6{FbpZH)10ciiZ_+=SaStn#Dnet++Wi_SoiJrpPcG&j=9ySbFdf9lV}cK02f zB%3I^H8LtgwP>_@(}8e{vNDW@)u>EdfHdEX1tG{Gi5y05z$ zRN^2~bcIvC=i82mN@-%ztj8Kplu7S4ULG}8^}&8Tn6WCQbzYu-`dOHu@=;Jk=t@l; zo;%lvzWsf|eEB{p?<%XJe>4kcnc>2Ai4uKx1xq(eaX%ECk^@eRAeA2DQ#~_8M1$lX(=#WK*yvtm$tDyyy6?z+dyH8 zfmffP-o`c9)>l~Qdoy3e*)C16)-(LWA)?p z(*4zzIavk#W~q@ZCQex%MqLgqt0u-vJP0NWEC(e05I{qQ ze~EuHb1iAgjKL{)AbkHW8riJ2L#{Zhek&K7#2vj;+ypM1)wfC$K|W#WeYoUP^hY5m zbJTYIG#ivZPw8uZeB`R+lp_jf_@@na9gFu zNqkSsZ2O*YK@;w1V_h}CJw8cvAJ9A?KMLYbCgXFzuNx=F`q% zl~3wnYHn|x?ux?~F@$9ni?mXXy@E*%Cz3=@wf14UmRVI#LR0TjaUGMrn2_!DC>=LJ z>TcJbA=`9aJxWG4hg`Kf{bJs8uw>Y6Ueg1v~@W6Nh;5&CD1b(>#6kXsL1PqD<=t6N0 za2NcJFsL)Y2n9pHai0GO!6V~Iwv5{D(f$WH}$27tQ);2tms;Kc?IPk%K0ml1pc<7@EsMx)RGJA4^%UxXbT|3mJL zg}T83ILt%1ulIi%{<$Itg8{Y(7!F_qw?`n!{~a9v67;uBLAO~|7BECLU{nZ1x17bg2G}T02m}H36Q`)_<#O0 z&Rro4-v^EPmv0zZ!Y5hU16opLwVvVJO>+=@S+c2S70x zs3$qT`S_I>z#EJoQ(L&lFLeWeLP!)2?*hQr>paBl_Imd;L4B;@mAWQnXuqc;R8}!x9X_XVuDe2)|B=$ zwU1q3wFi#vdP=T`IdkuKynmN#+3P$-_XXM2*6i7B;wI1cFO4U9AF$k-q;4X3Vw$4F zCRKvzCb-KQMbkkhZ)@Le#6|7%S54=KM0albQZ)&!kXF66j;hiu9R`*=CSN`o;+k#x zAS+_KjDO{Ra(NuI6m1cas+Vy~Tc+)ZJi)z^W}&ygZ-%yu^;J}WmVaB|%6HCC9IdK! zAB&3Ul}eMD{Hs56OWZay=)7&zuPJQWc0ZrzO*yR5+jdyq-n8W4N$QYruuigz27mE7 zVx>jT&?}{3@(NZXZKrd>*ohi@GRDm=l(6NmsubE~Repvn-VI;7p!^QL+LXAbTq~oHF?7*h3$-&o z8HG=dx4^(Rb+Gj6Xk{;Vm&JXbN{>ZLon9AIk#D(ItBcszg@5<7vC$|g0DI2UjrPdk z7)GI%h+E~;OI_i6Y-NOTwgjbmdC!k`0~p@+pjrt;$lXc|mMW0mpf6}W;c;}U;=*ooZWQlWHS_pa%GOfZ08*hlPd{gE z?uytm-`vTPy~=LhX2pJPbB?mQ{#}X1q;USYCvf0O!?x)y_ODEY%MIC?uNR=(>!|x` zSp9h3;G{yXEnDI3X7^~l7v*Cba(gPid*4Z?v*Ww(C4XOS{aRNIcD!E^WM6ufq#bP2 z)|{pF4C-Uu<`7e2^N9DA`@Ntom^nAdG3k4a8G(f7p*{JvGzTW5#*ln&;zz!8=rh65 z4ZFz)0O-l26?r$av#6KJ`pz2CaA%>N)hY(AP+7}I=;f0VpKOW{YP>VZ8{3cisfa74M0X3&8)NJvX|LR z0=i~5H#1v>& zUQ|wi8-)gA^X}bpP}d$C@fC24=5h0oHVt=(JpA3nLA-4EhFx=m%y&oapRr?{PEF4H zb6i%tE}WJ$>35a{yMppoZa6`81|HpmYd_`cU5t-804(rO3nB zGU3fzpy5+3~Hg_>VKeoY@FQ^vfwQ@9s|rPt9+{Lf|_3e4RMwE zK0#04u>I`qz#u9YNf&wLfxAlacLlh?uI<$>q75j*_TI>Y1%>u{c~UebLPVOSCP1mX zS&CZTyGKbha;sb$w!UgbPQEMm^UY5PYDBh>kL6m^n}K7`LjRAq(bq^g(|?VJ zSfIuJHU8OR2EzA6q!_asnfqk!sgHPr56@vHnoLzh;yhLu-CKtdxDZ=^|Df4tdYhrb zmM{c#abI-jTy~4~Ehhbio9A?;!vnro8rmPLeJplA+>3C(R)14>vp__Euf8kNP0Uy5 zS<#*18&$ct#G$Qqv{&Kx)-!zLh=0VN3j1mYfxcOpR51*_h`usC2rLor@EeE#Z96F? zg!h~|f0J`hm^0gu`J{0#rmE+%ha26?Yrg)=YJ!}Zw=!+$Ie6;5oKy@9ZE(`Hy;s*A z3!A#KohX*|nD#}>$4Eqv(s$=;XU-iJ`7*8TN5c%BRo9U56n~Z;2&gikGJj?dRz};b zy;YDt>{KSW17GJ>Gv|pS&;J>66n9iCKg1Y=A&C5%*4kpVTM=@FcGOOv)O7A0;ZkXC z>BA$?>_L2t6ELBIyHaeA^37=JQT@aRvVdyAd7XPE_n+B(5jD#(9|S!dbYzfI9e1kn zui-H3?$C*AYdCz;8*iLiwSS+v1keq0K89$p^dU#jJTtrC#yvgfKd~W-muIpfQ6VDi zLq3-5fJ)2sbWC>E02|OB=&#UP+wAZT`j|fZBva z&hPESJzN*^SjjxeYutUS12r^&wR~L1(>BRYiIqR^RePd5-ZeN@e1A*zD5x=dnMP#c zSWc?vKFY-z{GY$!q48v>;w(TGiUIc8MI5Q_NPmIZ>PyOYi`FROQ=i7ATq|w z)%xRU1x=#svx)|N9^!Tj!TTK1Ol&!uTAkz?yet@l{kVEo1F`*rM-WCE9bcf_keCzQ z7sdlw1NVIWGYJNaO;Ab~ULv%+V<+*t6ryEw_<9~uNKX(Adi_NDjMgqk0 z;K%Yoq!c@oisRk$p3XdhOFEaDhjB0R*on4`5R41G0 zoQ{flnri!a`G1e@ETw+;nQFjYDRfk_T@Nvlt?>FNGSvZ@)beXxHLq!_KbsJ-K6T4G zLnARk#+14yrq43>g+5=qCx}~1Pg}1luMzgjp7;?TTtpB?E@LE)1J^ru&04>($ykjf z$Za9e++-MGwc^dbpT0A01*cKHYJ{UIGKPtLd8@pr5Pubj>K3Ev_0Umy+pd@v+3@JJ zTd$b)ogpbeC+cgKU604AunJE~;2<)uW@<8P8Zi^|YxN&gn^UDq7qpZdGj8ypJ?M`^q*Y2_DIf*m4TAf%kNwZjjElMWj>VZRKI}9otu7``#mn?>tlW*}L=!od`*-xL zyLaM3_z|UZh>Ak3XX81IKgR(tjf=VmzGK(!wPZVn_~w&ayvAuLZ(P~xKVnM2MD$xmlQ;q%wB*Hi=QvRx0JJABySb$_bNY(|ht+Kj~?DqtVnIP_3I7m5!hrQT%J zKM2jZAN9?#a!HLIGSm8wN`Mo(6?D^Zy6PBfmsD3!_`$-(ALax`Rr9YtA`Kf{oxkk= zN_8X5W-CfSxx#g)lRNa(?AoSgL1xc*+GWg3i|K~ffp5+~ofyJV)@})lEg0JyXn*-H z!{Zf|S#}f3L)S^FpH4QL67Qo!$9J4a@`Hx@6!X|=cs^R{E;GHSr6!}H-=B$l5Kulc zp`TpsJUjf(Qu3$<5!ulPt_=Bvd!QG;RT@E;D!Sse84jlUdcoWzgZzB_$ zoH%ppbOK!Qo+nu!NkU}~2H;52>-_W8~>;PMDGZ zCbJmFvxJ-$P;%s_DTNS@lm@?L6|%A0lG2oqo^02h?_e*p=04b{l7F>V{+=IS7ceV- zw6^))>xy)Ym1SZp#t;9;Q6sT30*L!b(YdoGuKZL&-9ENC?dT1&6!npk>>bX%D?fTS z896ig8pY%Hj{6)i)O#F3WbE)V>9v8Y{-dVdLZ!BT2kK`a)wIPSGJ?W61@Ll1QH%$o zD$?YcD`os(Q|0rda(|jh^k@4*y-V(%mh+PqSucFA*u~=kip9V&B+RbMefapodhZHEs!W6Q>EHBPq1E{Hh{smUcxrWFM;T z7_29ylJab-$bU%JI#zY{Hy+P_)Lc0d#?rIqH_V?X*4c-uC%)A)>Wzf;2#^14d5@tJ z3Y}e&m{5*=psbX)7`0YKFFT8g8?jE=rq6PAE$0!ooNZ6ngEMDquO)$MS-;4ajH1CQ z2R|qt#H4LsrN2&Veb>+EoLyFX_FP`|XjPjzGn2cPe}5;U0As-^OvY*cJ{ssTi56)i z*!*-5OF;pp>-Yx@bo~DqCC-9vZuEj6~~9hQnDOTsTS=!JC)cdAPx9;2Bi(- zqmelY5yGCsp_L559~*qxUaV=af6z981l@ivd2=y3CmF3O)#l!xoioCq3ZtV)%b3s^7(^f!{l>wvP(SSFM3uYBdZOAE4S%!StMaP1e;6W150Ygj(W2lz-_@|V%uGV>E08qmW-PBF!|OkgvSnGAd0O}_`Nj8yvQKmC>hF4KUnLR~ zG-g0J*EDta7d@j0G9(#9fx4_dRgLYpb7if?Z}t!q6364Ht_?{#^|K-J*GOb+j*_!- zn}08nFXb|Z^Rr3IQe|FNpMLbnOOi&y2!rMht>KJt+FO3ButZv4oE8Pu^$&lYa)bVM ze+}H{ByHEG@)KJ+1tm@=Omd_el-eKeGd#A@rq9MZ@A__qMlBgfmZG0aSRm_BQ`FK; z95qGtq1bA*TlPGW=9E9Ra#a7$N~ogmAb;Z%3yMY02h;+x9#+w>o*NUtc-%4nL|mUV z%u#7-Nm4#UKKS#B3h|2=f_N75*j-PRq>t@aTuh6tZYS78LC;fs+<9p=trw`vI}uQ* z53~pSQcy@M8-l(i(x<4vz3Qp(@+-rqu|OaRNeE#_3JSRY7&mg0!h<4tXODl7fqze; zVM}A!>d-)Dml5oS)%R}>f?TSdcA5}NwKc;Yr)b1h2iZEAq9s;bJq<@?df65|C}ej9 zv)sZj|5P8Q_pQ3u{LKrNKE7KyEXa!>{NZ9UInPt3laaDyY9ICV(ivt*7FbQ)&J9+B z_^Mj|Xcc)fUt+|?!mZon8B=gixqmQ;%;spRsW^t8Ows+ib^-apO8`rGd=^=Os`xUi zvneJ_hD7x2P`BUerX?gi-S4k7w@TI%c>_;!$Ayr0IfaW!k6uxv`3P3QbZ9OI@76&s z)8>Bj^6R6eCCoZ!);YczDluMEuFikIV<1;4x_UmceM7d1l#hEb03z{R(tqz!SlsQj z(S@FN=j7Lt?AIIEYr0=HIcS|U7Qf14$>(v5Ik#EiW03X1MKcS)MiW7F-5}@2t*W}W zSQ(QRcY?BB@MzM(6LvoK$7)PL+o^)3ozt~Pw2!<{VnKaHGtX;n%ZO-HA0?jjb9d4Q zejw>7DLj0n(<~$ps+$#@Sbv%_vR0-f2$XPzLox~(N@Q$`D9~tJP2=2X6%JymZym}q z`dw5=--FX5!Q(USkJv-ACZ@cy0eeYpb$Y9BpjwWANz|@av1!ov!2yI+FNtX@|Muln z?b_D%pOcWw?w_AxUBe({Z4QCrn5m6zokVUa(|eI!t?BWACHrTE^?y3Ha?ufCgxXg! zsT58`CM>=g=}AdGDPZ`^{_=Y9JgKq#9PjeDp$*r_$rLKO(LZfXE>fIosjJtIH;qg` zf&BT?UNd*Gx4>Hii#|^2r95yZP9Wo)*7G)Xil&7`w%)y0IV>REJ=ARn^ax~~t807Z zlAvK8k6aPo&@tI)>3^3#VX<(B*0rq`A59^#hp(&+?iL(O2J%|}c$#Wp(A%)i^YhAq zXrdTna_xhXpt;~cdfoX-R5&ZCm^z=e{98jc-BPNBPXDusLHniH4RnXy)I1@Q=!~FE ztOrbOTUOW{|5dwdlg?a++_TA*tWK$;fwNQLFQ)K*@pTT<&3^^*p}1q!>kU1c&0FG! z0w|j6;b_%tnIV!io$Mm4SyAF_Btn-c!=ylvY%1zbLrT4 z-6XLw@*1m?K}p3;7`;UL1>Zop``i`Moj8fQu6z?(p2__dQU89lCd}=Mp11cV*OZ`n z^iqys8h>sxoe)ZaWo}%!!9#p({KN7M1L)MW(vy`A%IE%f39f!1l6GQVw5T!;Y_r#h zMFZV8R)58*DPH$!$TSxvGbQ9d$@i#P*A*eQl|H$PS&dpJyGJGLSe|cjL%7QE$(#B2 zmbyo=@521nl_4Tt$_K8OP7=##u0!lOZpR}Z>6WQYQe5T+ch6=0<#w2rSt9UoPGnQH zGS^`u+eo)4qm{Oafu(O1YIh{Ckz#IUt)Om@Z+{BA@^&JaW!RDUoBbWY^@@%|35k`b z*QE$HCbzAxAmQTD)et*^sW+3}dZBT?RH}&*`5Ir>g-N(e zN!w((`o{>s)ciNAzrd$rSXxk(^~#lBWv{j^r)v4Ol*jQ}4%@)LhGu6srtD3ha8xuT zEPqy9+0o(E^~&gP>1^-NzuHwZIVGMd`j+qO+`&mc#F6OjazInfDL~S7Ni!J%>ssM6 z1iE3}jBdNtnqdRUzc&wYJcjCaG#Oqekg!jTH%831z2m!-#U0DzTY~a1VbPzSkXR`3?6xT>Qcs4Qo9)>`&P%7fKm)0<&<#`yK3W#D}s;RjLMex z48NYH@`Y)wow45L30d9folqW5?QY~^qda>1#BQLT;2l#SH5gD)#jx>CQrodyXiZXr zjg3xW;Qe}U(#Wy+^=lCt&iTcff5A&rwm~lio%pV{nW+zU{!k(E%+GCZup(W1{y&U6 zD1QoNZe(+Ga%Ev{3T19&Z(?c+Ha0bvQF{Xw4>vdpFHB`_XLM*XAT~5Gm!X&g6$3Xj zIg`=4DSwT01yt1C);>s=C=C(=l2S8tcXx;600WE;GcXJd0+KHw0*cbDFbD{OG}57f zbeFW!pmcm=y!YPs{{L%z- z5C8-U3jl#a#2g$ZP!tUE2PWn)gCISj2)NXLIDaT3Az%~+Qvstee!2)aK+6jT00{#? zVp1S+DIgFa1O!U{?TA210aU==P$z({06+@?hjeZxS~+*Qi6g$K0X3qH%|cs z(tkychY#QbMY#fuAf6DUH^d3>lQ2LJ><0PGOn{gJVB!k({EZtUoKZetBm{r~U{FU0 z+!GVw1$TlV0hq%9#+o_+eRl}_x3kV~2R^``y8(a%K>tejC;De1DEwD2*wGQ;<_?DY zLE$a{XDAE;&{xwDK>4Eh0ARS&Pe(A!6Mun;2YZ8|Ft7v0;aBBgfSRHq0E{8{hn}Y+ z66%if6!3(?eo_?tnFe#qs&FS|gqs@#j`Ae_S)U3N330?+yPx3i&OU@AeBc3pHqKDE zlk-m!PG0VUrf{f-7erI#j|&DO{x{|VK>NK#cZ40N~Hxzg9LFc{w5AFu#Ah|LU)xvA(g1ksPl*!zzFxc>|X58$7< z^bi=;LIB+V7P&Q06zGWgfd0=?{}uB8Q~1v;|C`AFyC5|$80?ps`ER>zg^8CzlT;A;so__`){iz3XB;9MYs#>U)KorRD=3LoPP|UC`Z@d zYWa;!ctU?ZD*%2>YyQiI87;?$n5V-NBgtPT2xfBrd88`b5#jW6#Dqk} z0AM5%>_?1gGG-?V2moPb(Fx-FOT+*{0XPDM2?1c}1p%B9NaCLzl>`9<9gtwhhY-x` z=ZyMk{EZ9$3;*50zYSuT0Dp*w7p75vBN$}~x?>&@_&*Yefc~KW3>U%Vb%%L*{sR8N z#L)|h@kag98iwZI`(G~y1mX*EB%T^aI7){HGhktcIc7$Wq{3Q>6z!b8{ z>+B}MbDr{y#|y|K#pk_kw`P}Bxqm23vs?yj)>RQi)h8P^oCjXmC4U+Xtu_!(4$^de zF4$Cj*U3c0$Zw*s7I^6qXcqbqrw;pr7DtYUm&8qjJjxTF4t3vmo#>gq$njOfwQ@0S zk_+@Of4pg&b?EC+j$DV#F*-JU6h9N;J&HYF^3fkhBNW-6uUWJbd5MFz;)M$X?k@^G zIUVz#dt)Nx*+S1we}A8j3Fikz-wipmZ%wNlQ$}_t7fbOZf zTE)!HNToBqz(b?@Z?u?0G^uX!O?y9=xWEHP$OJszS2|+=EfoNP_a*S!vHKWzL~{c7 zp9Gaw@98x!j^3Vt`B2z|U5AP3T|0buvA0)1?<%ZnpApHOo37gWSMGcQm!WheqN+Y0B?0?6ile8o{x!=uRD59y}zB*CX8)N<0@4=~LzQB%IscFMg(R@SJm91F* z{*CI;9;L8|4#^{@jisZK5+z&euL!f#y;7fOrQRoBOvJ-;|7tc0$!_t~PgPfpz47XJ zd90nt;qJDHk~gbcO#->OiR{^Of6J>2A3n6E3I|u=lz(og_E(vxz$u$amBM!Vw;>8N zfBmQl5vpv`KjFqA&A2u9gd<~Z2IsC_Q*Vvg{uP7L9b=P|yu1F3SnU(T{mZPMhL+g_ zV5QctMLKE$(xP#xIIu)c)`{hiw8I5i?zosM=a|}gQy;~uX~v55(JsisR!<+U(p`ck zVIY;vIqSiaf2P72OG2$|nWuH-Jk<}Gh!R=r7E5gQ1r_;d z({DtBYZqeAvxj}va}D9$C3n(d=vScS9OKWjSSN;vb%d~JE3C58Zhv1c4CY~tbB?fh zOz60AJC+b@S!Rrjs;4p`W#5R>Kv*@GHJo3n;(s>R?ZvA>#hY5>8CmLAOX9QehxLNTZisb#{hElrh&QWMy4|s6ecs#McjXtQ{8M!;G4b#?*Op{x@Y6oCx7jL8^~;r-ZVC0df8)~XPG9$mf8Zd+H~J~ zd0P2s)jw(nfTNY~E2(ES5i>LS&2Zn0(dLS57t#lgn7t?y(==dbhn;^tdsEAwOuJ~+ zLbo{z>F1H6L*Y2C(6yk7s=1}e*b*$A#pUUTjc%=JAsDsXb-YY3JCu&seUVmD{ zy;o$NZDb`w*ODIwiWcNM^0lAQIP%ba`h5Jwde0>rRmv$}y!_;I$M z$rLBT;vPS-}rc+l!sEu1}Ux?A7eIuvTm$0AGV3QFB(9e+50Q!nxE zo!O^t5_IGyFC+^(|7g#IHE|fI3gt>Mn?p@aUYOrr zxMECfBJ*3(-MAJDDaom@ZGSojqq0~C74$)yxq_KkYWpnD-V6IN-%VY1B-hoQ7*y}P ze>rD`R|DUjAb#Fe7Zrlz?sNJ6&Ib8tNeA<*}L87Ff#TIW(+ ztp8e#GO>givhG-IM}0ioXYkY)X-z|uGGt2>;URq2gl6y)Vc5z#q-t&u;X38(Hu&Bu zCxSN;6?qkoW{^X;DLUR?-{*TkJtAb=p5`gQVL%50(5u^q-7a>U`3RJk*ddtKuWmd7 zM4$JXI-Z4SG|81sjLv3F%;SKRr0y78EZwS#9LtzbDnWx>lv+J?Nd4Ge6c{X7)!yk` zrb7SvjJM31Xq2vDaqy3tWNsNw&{&@iG6cz~+pSHt)FnvU>C$dkMaG?aB)xmJB`{|q zNA0fy?xdB9wfOvgYcBHlU07wG8!6jCLN*!R`DzjM<(3&+oVaK(^1NA~tjE^c@7MVq z1RgAXy2+1HTGPKDDw);O9W=g{C2lqJRpC#^5o}IdYM|a^^-Ho?r%fCaa|VfeQHC3S zky>382p@GMCh1w~l!!N&9SijZOQwcl)GFrBk3u@C)yiBh{qFE{l!>_!}Y+gDq zqu2NzXcq#_1bq6{5bO_3QfjOS)DSHu4DaM>^t5^NGGmu1oxR3kG*f+Mjb95A9M|VS zkryTAsHaX?IC_}z|FC&Sx?V3s+DIIU)p6sAOE>=(mo``l zk==H6;X+AHQ%cHjuNim1SaLBdbuosb%wbK8SKo%F=f?0-K&)HgO8VLNvD$rGn=1#+ zXEGH+b}`%jQ5=r0sk`yW>O?5gR9KTl-C!YSG#zcNVT3NB7b@PUfA0p*`DH^wYPHm( zAx?F+dwU++t8An{vcEbxzp^Ga(W*eEDlnFRDjgf$V(!D!s#{ov%GN^xaq70sJ+73k zAw&CY4f@nO!^ae#N6O#^2rMDH^FFe0-t{x+Wc6d>!zi=aL?}Z;tyUWZ4YE_|CcExa zY4bZHD1tmIGl%1|<)ymvd725Vuw^(;{+m3Z9K&-nidLh5`db1k(Rvmb@zUH)=pv4D zc9%&9le!0)=LA8C{m8~}f&-{Yz$o}(ixK^d0*QWBdN%6|^9y$f&?TTWDL0~naLT5G z_Sb0{Wf6Uty(e%0?5=V8_f&u}tCBRv^>S2Vgxg>Sg!jpXhTXSbpu8yzrqO4j(W}=v z&Jxu*Wi$D1>7nJUBzqV8aIkTnrTZoNy?cA*oJvmdWEP^a*9_Cn)vn~H&2omfT5ue9 z^&gq9#o?I9ICUQbfTC};Uy;Y{N-k>ysV#58FWXzhDl&9g>p=fMl5-nR@AHUUr`Q`|>9?a2_04hXvq7pBndP=jXTA_9 zaZTC@S%v`m=yEGdx*v_Tjg+uB1t4$9M$fMFevHvvr-k}8)yVrFZh z>UoxD1M`9z;EA5;9Thm;D_CY#m0yKbm3$-hD!$C{eSUq(JLo{E{dYd=O-4DQPr1sV z!EowG4PzjeOA`IF5C}hV#nIy?)_a&xtLeW0EYDrRm0xzn%OhkEs%i zRrej{KuMhEepB5_Zw)=#r)f{W04)u%?tV9$g#T&tvk5FZ%WCd-J>BLWMUk68G$LO@ z(b{t#p#HBZdPc-ul&y-E6b0)CN#E}9@0mmBUqP!Sc~d$4^aM-T(ALG@tq(^qr!FYD zJ7*kvw#pVK8UC-jwKHK9^9ONSUzqAX>T9P@O>0lyZS5(gSsvWIQje%7i(FjNjJAmf zmQ3At7BOy$2Q@GXRJ?0fI%4!AcsZ_+w8$=MUY!Q+IA@RKg*LWDpSc!)T&+_3kloK|62@Xk$^u_3D9k_# zgfqDW>xs|UPss(|s0h%emH04qXSA=|A2jDIADWig@@~1a3SE%BUoPQME{$rz-@{{M z0CsntpNthnINf!wyzTvWpZ08R%GEdo8_0|9QA^eimGCfsO>GV3AJjGTSwA1n~%}c;8|F?2#|}lJ5-Y6S+>@mH7G$iaDJ_J%^Ib{<^>$(bM4k8gI5<& zX0N}p)&rg$sq`LW2Q`uq1~%#mY_F6j0b_RehJOavL0GnlCLi?!@K1dEEvWqQy}UZM zD(tff8n73zE@Zl!t-kPM2%XXJ4_^<+5Ph!A{!Kcjeta5z_pcliP#GOsE|WEDZoE1N zb9&xQJGeAm9s)h7is9NkQMvOt5qR*;-aT&RV7FUWF?_YBi1PVZyxhvfWd}Hc0j_@= z-+Q^C`$tjwoHbD?7JSd-jdP^<+>9lZ=&4$AiIg#4CZe1BI5nMc1aM4Uv2C3=aJ8ey zwIJ48cv34B#x3Qf@H@nst#hB`feNXZb+T^qdx?7Jq$aXb(zguGtJ$<;rol6xh&u6l({k1WRu ziJf(frQ}|hW=}1ap*;@mV!E_(Xe^E!7lMgcCI@(VD%(GCcgdAvfKn^M!qno}&$#@Q zjxqWpU5g0=Blq{34wk>B+zi!X5PH{@<0Z!4N8D@NwgSJ@3Y?jhm$8ob0lFo(g+2v7 zsz3L34eblX#prdC7~z@&v0Ag z#*If&z3ayUhS)(H7PP9me;ALC=m$a~HA!(ye2u!~KaWs2q*H%WIP{Jv_*kIghawDd zEEf2&+jwIC#49@~U%pIu0J3)PR({q6Az{EFqTETPWH%W|f`je*OliT(r7KN_$A>#I z)xSk{@gXg?JDTJ*0ueML-wS6DaBc0T?HBSJk)gp3`H#-@uT2<C2Sm}HTyk{50sS4rAn%k)?}?s2*tjcZ7+EkFYPh?iHb zf{>R%y9UXYe0Dr}cBw5eXF9wU!w~ym(xQ4FD0*Yl34OivH8So`gp^oM2QeR^G!2(7 z14)3?g50^1b}`y7tvIc)EJeHYXy&0pS(AAuD>*Dg4Bhb)b7*H`|%kHwwc8WDF83N~d+iGV64ou%<91To!Q*g=kr< zN!Kf|;vo=7_X0o$5wF?+f4tad-64}d5sVw>2#ZH0fSgno239?`&`Sno(F&&^=b66~ z*|Xg^xL3-XXz92MjEHtcbmm*lI!xDxH7e&cO*WxQmZ5rR`C~CC)?0Z}BEkVJboi2DC@Ya{777rkr z>YIM{;>*^BV5m0=S-4GJ0(nisd*=SjRg;1s3wZUr=Sup6Eyo_kYE03LIUY1(p_k(z z12%9bVJvO?M`iNh8DU_rkBP-=E;BgUuKtKgSbtf!1b!NB>su?XJT~yFoO*kDf!DdQ`{Fcq3ln z9S|N_*wE~lS0^em&T^oScCXqLbqcTDu`JtkKT1E{o4Nmy%C*!;hiAArTML7R&O!uX11lx! zPw8_&ZKZjOV6z#D1w(tZQ*Ebhh1}RFGGOZ<_9#LQw1_bS@->#%k*$V=&i(eRXmd!m zskr6spyCidb&!I=*O&cR1q0rXfv|1vFP>-G-)h;TkUMQiw zAx&zd-V&~?UjDAXFon0(&05HDQ_pDNtm@x+-hIHiI@WThw4Igv{IX>OE)3rS9Y7oE zIhVDR3{T&hL>BbAo+-Kb1$)^qI!?PF=&?V?*rp-9aEHGF63h51p8(>}n&O+ek2+Hy zdJUzm^b^rF_U-U5KCZ;MBd{?{dadjsy?9v2u9E+;_$Vhr#um%1$_590nB0Kri2D+) zkozwLC3^_z6eTXGiGzwW>siLa2!Mp+&LZMMQ35PY0oDsVs@lN$kV_S-RHa~cV!EBZ zD>q%SX*<1t)m)bO{@K?4v|rg+k;cL2ndef_ss?)}SQ~lOaMsPU$f%a8_*t)2_|F=!$NCCb8MT2MO`rmCT2S-Y6F$g*sCnqP{|I|n60Nywp zwu|MOP3omxB9~pyTMJPBh|owG<$RXcs?t`~QEQ%RiqbY>O%Jl3&pubjK40HX zTh9lX2hX26@1EY(G+c(Jb1Vl*uDaIk@I zwLlV5AZbFoP*A}Pgk0bdKfYT{wB0KosL%u!WVGXJ37`sn5%ilX3Lyv0-~jISL&gBgRrH6EYybq~D}2$*D4!UHF##M2l$#F< zx7Y;Ker2$tKc)qsx&ivqfd?9a{D|ogSn9zQGU$mCdV2aVBN@aAgi|=zz_&UaonQ`Q z6cnfz*N4hKH`_ju4={oQ=I4K*0Mnxk39NGP2u!FF1US2Iln~sA%l67fJgLEc1+)q2 zHZV^JAzd9o1QYSy0uD>SgnTa*pRb0$OWLX#TM=k?t`kVWj&@!u;2;@XeT*>&`e7@p zA0&Q!ao+)4esMsCzz#@AhJ-*Dz(DV7Jon!)1_#IRUvwY800ov%F!muGpty>rz5#^M z1`Cirz7!)kaDv30|Ac_Q>0X|p37~!u&lhn(Jhdob!QU~isBkVH=aFXuAbYU2sDiTy zP>3&&Z_^2A;fC<`mC=d`Bh!{|Q zexGkH;C&VpAoO)`tKWRaD8VWCQS(>v`N4H;3&8pB)?APi`1`2{RDuZuZs#TBBnB)H z{6f+0-?w@DH~Z_i@hbzvw|f4!ojA3g!igQ%us+N;0oTYckjM7|Kci|4WH#_M`vuy6 zU+RmfAIm3}0eFOZw%;_W68;MFga}T;Oh3A$Soxh@fIjDdGWZ^>%S-^_W!AURq<-sd zjeCHwfdOAD#ldp0kR~+LM+_XB$y0SH-CkJ!ksT5yo5*)`1zbZ2&j&WUkRcKflpoOR zZh=P>H#8`SZ)w?Ip!Y9w7T+8M2#NgPK&99LK+*PKUo}H8FrY6&S65K23@iPxi(rX2 z9Q352fIcLsRs__G&<_L{R7BvLbw9*!@X#*^+>6}rpgikKL_*J-?-iI&zi*?VZO(FL zpTwh@xGw~9D6kuzPpwjefu4C}p|)WE*dC2wQQ6&X#<3tAu%pA*7*Nz5a53Qx#pQ<_ zK?L9r#@hL7=PPJ%ckb^5Y~O9XB(x3Srb(Y5z~7f)gs~wM|NN1h^l#_qCp{>zv7P7G zTVx#OT|@Ky$K2@@KcM8W$4%J_+!c}b&B|Ir{ z?`{16DgdczY&tKO{C*V$c832=kdeCw0GY+PPMdTcySVCP?fEp{Z|OjYs0M-pZ!or_ zJw^hj>uk5rY3`NJs^l-bcANP23v^k!l2N9+C5tAih86A%eQ-mxWneCNmj)^v(8XKy zVb0q8&0M{V6J2D{5NGDFq3}`;d1FO)`0a97 z{fXFgd#Z>ZOXl%z7JFvcYuJ1*1o*3lM-^UqJi6l^EXt40Sa={vyzpLJi|3Cf_YdwF z=}x{_D)i^+X#7;4PBko&KLy?f5HE+}NqpnxzK5wR^({jzwRxobnQiA4%0H!%Wh&CLx9FP1dxAeciOU7F(B6` zumO&eI?sgJYIJ9k-nM0m6--%VyDe(T;`1I>uiAYBIZvIi)lfBxJw$S|X9GxpwDhF;H((rEwrpm&9KZE;^K!vjB__HNiRc?Ot3Cr| zd4VDb*GM(OZYoyzgl9xWN_TK05hhpbkN~jM6>Xx5jdr7Vja12vUs{WwFZn69NtH#> z(fY_Wt2_9<^fpM(Mn@$(7k7gk_m&;ta`% z2^4dQh>3^9m?m2=4jZtHYc-CP{>8Z;ynbT0^1^e-(+baeXDO)mZlF5Gaxr)00|eKY zMF|SWkF=JEFG9D74}?zOv?yeJeH(It69+1j0#A? z+h*(Xd`-`_f;SssSCf!jhP0V$bhgPak5LESQbEV4Y>QD7o4sU(I@1@QROn8Ar_~O!Z<%mwd2j3j z6D_^0hmmkN`ImoY7N)}_M`LzTr(B5%5Rk5&zfk8f!t3rHk}_}0!io>A-R>Z%#P34a zb*~i%*13dT4;E`4Dw(Ly8obe+Mx=2ULKZ%Bxh@!j`n-Ao6ifr~L0(L_>`Tfuu5dHB zG=OU<6e0VUtv7w{cBjdp2oID=Wod?UV7>r$)iC8ly|Y3nZ35V$VN9Fl2(D&P zkUt*}GWmT!FAZG%+lXq=p>lw9BeL*+u99c4{=>>x#!h>gI@AN5-x)*Jxwu9>;W~!`lFhwETKh9y?;dcR(^1wc~;`zZYSk5 zvhMcUR2=4Tl2qD$ca>+oNjcSuK8}N_qesNZgOC3JjXFksUykmdF4l&wZ%CbN3m(~r zblMwFt7T|qn5=vb=T+t`+HP(ffVttArA)5h;_Ke>f`R6kII1BLD33U(M3=!6LGfW7 zrvjaovv9^Yhe7fUVyJ~uDG{B9*ssyu(S3c>*&~YAEM1k=f`>O}-vgFa9aWT()Vulg>h@&9!P~ z%{6QsxO1?iV~woqv8g*m1Ki9tBG|k#%_&miQ32COex?lV;OA!=UAeBsy@Tm`* z47cqGe;6{5h*NAf;|Cwnu{yFqwYOm5_Nu`EK84VzzbvVIuHspxMeZ|vRWQy#4YmRY z>V#TV7cHx^ddl-@S*-pLx;3qYShUdZcS(Lo*7DW|M-6(YeeG(N!uSw?>IBXnf?J(##Pf<6Lv=N45}fSz(3% zw)F=}!zUM&XtFJ4b+`nqCXOfG!uR8*`FgDFu2QzXyPH}GG4OIG#64NBhLY8*@g;V$ zp`U)yy}NI@Z4QWW&DC0;kktiTSY}~yp<_v;x@(AT7ga=C1h_BzjrlKB3oCdJnJ>Q` z>Sa0yfJPUsI#~6Bt04o!y%KQfZ}e#cX7`3d1w=qM`*!B9yAuTpm$q$*YTy|jJjKyd z(_0TF-L6C59p=VCg1cD{A>ISimLpQB)3F?Wg)6;6ICl8E9k`|+5%%%;$+ai%N-sf zg(8_V`ETxPE4`Q^lTH~hmzV=!9GPh17Ntufj~3(swuQ)!+EdnqDC_xZ@FnLm^w$HV z3;Himyh*D&rhTIF-k4O7Yrc~kOw=Ntew54L#K@w)v)-T-r` z_x5)$;?q70tjs`RhR1jK{Q-(@oZ>F9)@Tr@LPPFIQ@tbWk||qjJyZ%h`HsA1-dng& zz%0p;%^rX0hRQcf1>l7>Y3Te2ydi~Ej89n7S-`J58pBIt9>ECkMyE{BS%{$Qk;{vc zzIUZp(5I^T)MQIH{tlJLbIAyS613?p#T|4?i9e(&@;>-`&uTb&!azG3Z26sy&O;*d z`Sze|kIFh16+_DQ4d_nIkCJyPjO-P)WJ^o7x(ktI5!J`~T2<#v9Q9c+KfNR!TaPmyZwxJ8W=ETO@nP=n#Q%p&nom`FtQ$BHKjHYa<1RQC&7 zo=(2yZ>~&HE@RoALg}BYWljIYg2?pX32^RsgYM}MYSTtQqsSx)h!~b+Kxb641{}W` zHvyv`%P(h&xUGcaohmMl=XsGR$`_orwe}b+A_1G|=YtaeAZdZK1i+Pw0V5Y+!jZOG zXF)jbfH>-VK^k45?Va}Dv0T)zy4o4jy0N_ZzviF)<}j-r+HLv=zO0{BE` zI@ekmUMs!;lySsIW{W+<7wPFZONg4YNb{-M9>D{zhD-QOr-5;$@qv3VoS#ef{ zUH%9efMLiEh9SYqAQ4-KTZ?FcJa6R=of`Ozc5O4j*BLApOR=l%=}v-S8xtjX+^PH# z6^dBXW`(&COLbzysB7Uz_1)i2C?N|@&q346PcJf12~5c>jzRBPh2CXS+3LG9HO0)t zHT8kss9>=l<)%4pANC*N{kpma6!X=w)=HEU$b?nE%6J|Upzy8t$%RtE(!288^vD#l zpL7x+blH{T8G*K8@g%w^k6i>q@Lt#9eVaJO{)J0?HDxmIr&zw-{NNnXB}$?GI5|6% zMT3cSmv#$iBs{zlw}zbOy}+!9y`lb#FeL5^R4OqZoMVr%7#eN*6YIYwwsEV|cUA)7<9m~5+=IXiE-64|AoU;S&?mD~vssO{#(;$r4~u#MjAI#U?#`8w zc9uYUyOL_~E!Q?G1)?IN)5zwSn?i|Vg3@|@9~G~}*}bVS)k$|h?+o+)R1vKKO^)$d zuPp5idv)y&@SZ&W%o*c<8C7*=FG>#H+LDk}isO9^Tf>smG=yn=4OOO{PtpK}Zz_)K zhO;~2{gO0iYW=91hg5C0VPcXtn)Tudo`3l!^&m;Orx>k>kXmcFRUGkh)tq~q&zuvB z?g@Lj%{ATl(rZ)k*Iw~C|5Ov)?$2I>+pxRv7@KyDE7lAI6XaKN{hD4);MtH6zMRmL z>eJxZiUyTYur;5RaeGE5j@|(tR+ZFqRe5{?pfHLn7!epj<>{~%9r-Q<4$yNdC6(h>um3aGCQ4b{(r4rgguV|Mio@4{E~rs5}Ke z6h!A%7$cp)T@?{gKhUO{Tu+ug59uAd*B;ed2xdP$q{m)(8F{rml`R4|pp`90-wU@Q zrI1K9T_^aZx1iMxe)mRDv609e%&#k?B+?l$dtm+A>3CmC*n>R^s#{#Ds6{=MYFJtC z;GpWWYd6Xv%>F}S`cY^_+{P|)fy%^#uZ_}7@@{d6}Pt4DFe85eAC_C+8vcV1P%u7@7IJ<8FczBjl2CV7LG$g zuc-BB=07M#KI04w=k|#cVn_}jH&hD;?JCMUd}bnsmT)|Sk2(SAGz2&6tN2$kgG|(+ z%BWv?;r4HTA~z+7dB@^0ldy)-H8NIaup-_$y;Ylxtb}LeEa4Pqu+|eY_?aBKGuq~s@OZH8z&)=F z4&`h${fTzt|FD<7v}rbEPk>FF;>zoqN(eVYrZvX~+WY}j@|Xz-9uSwFm}!3GDXFWF z4=g^cHMN#@;u#NA2J>A!5_v<5;WN3%Bs!d)yJwj)(X|GQ*B|r7Axb5}2|a;or6)v6 zk#=adgSK(D)c@J6n?h%|Z5GMY5bRmB$ke`P`Jz1Q0Hq*(t-6Ok7=<T9BV)BCeZc zp|{2I-njyp9OpEo)hE3_WQUcH^py?0>pX-G3S|F4WL$WPs0a8XaL)A?cz$!HsMIdW zFVM-Oy)BIv*{hfGPrxpPkKVcHdi(ylHusC7XMb68fyiNsD6-mQXAM=))XC|oantU= z{~*ywnAd&fpU&8?AW80^QIc)sOwlht`z5 z@9sRifF0Cw*zU-n*_5y-vdoV{EQ5{SS=Uc&PB6=QziuP+&8jAo6^^LplqPmUF zik9Lq0YwdfB}{8Qv*N`N7H3oYvZnf57D{{i%Y@$h{`7;<0=~z%tSHkZf~<%@??y=>OP#0(u{LH zRgq=N&?{NrYru~LuhE5%xVF_}`>GcpM&E8)-LvgBMhlCMsnK-7O_Okom2Mv*x@00!r5^$I%lKgD`#>DXSucKTj@kK0k;uhgfsb0xfX>kgt_jOycu^p zjwU9ZOM3XwnQ}nO_IYj1GjQo1e;>t3?S`yldDothD`BF3#?_DGHnGcwq0$_nU!>?T zWp)qIxhQL0y_nU3PRc}i?k;liZtF^r!lczh@Vp_>YeD>KydJeHYvn_K?*-1feD%_& zU*ASAvuXDfclVKX71#CCtVpY1@73nAZo_BPUUtfRp#5`g4>xynr%XWOJpz18-_y~% zv$$rY4$hKf5P;#6%*-kF65au@t6OSV*h|cUc=pkCI$f?r;BlFKtFf4hvHF$w45RbL z03@}*`o+1m@Q2h&o}b_BkYxS=Q0Uad$nJGKd_)#>hYvqZz9MQLuA-HJEH~ty!y(%5 zGjq@{6Gnx-FV;Isof&;#}una|B+Rjc4JB8{*CL-s=;0-QBFqMIr*mtV_E1_+gz) zmp1(Ap^YvMvcK)MDv@pl zdUz122vD}Hd$|FsMeha6ijx5<$q2*B&c)yw2nwy8Ix~yIKn|F)#V{2rQreUZ_s2S(drV!^kt7V5WKGs z7uAXNOqTv2Nb?$)^R%}ql};~Vs9T&XrE^-{yihkH4D;$NSIpENUEE%JR89i6H(z^M z2)ta3Q;hkyCV?7%o5|qk?DZ!>3aJpD+G(5WYKR=0oM45}bhWX~Xyu2wzULc7{yy<^ zR(jq!j@ksk3T?FUd<5)pSb*)(FF!y0tI?_-X|wwPjqb~3q8Mwgg!FLp+4;!h4;A&4 z@k$Xb8W1foRGWX>aF>F}ngu^tgc=Bt#V zm|M6D2c@uH-_)*QNMPmhD0nvyMb9c_Tw<(_i<_{StO>MgP~ z*jT2HfI87R%CK0srRnW_H=@ahho6GSP@Zp$szy_IeK-)EG<0g)IlrxYjAj4n$e~*U zcWeM6xzQ|&awD3{Jg?|ctV5}$ZxmzL?amq3K zQ}P>tcjg<~7`}Ktchl7O_9VA&6&HgP1_x{6BAohT+l=-i!k51eoA71NhE?EfAgtTT zWaPzbh>>4ZELyVj2XjJViZe(njPO`IX|4faVd5`_&=q%-XXHwmJ4uq9x(tY3Ia$Vd z?xZWeunWJl_R~u2B4~+=P96w1=!r!qyv+XSk^-pMeZ7s_>bD+gSH2Fj*}2jXq;O>( zIM873CFS6 zaE@bAWIgMX0+mv7QUUb@3jq%}mZRsr8$D{l-L`(l&}DdGy2Bs{9lMU@g>netslzs& zX8wbooj8g#e~FXd1KZ5J6+Hf4DqO>&G1I4(f&GKn@KM;^NKtp970=$HK2M|(s<}I{ zp%s12cfY82#srC>DEN48+jbZu(gy=LH_dk{>_-;3K?c4AvotgH%<4Yn6m@G$p5D<3 z`K*im;t(mEPws(#&VGDE4$HLlxuTD7@e#rz)^oy)aS`YKB6wbge`IEtBlRo?1lb+GXunzc~_*4fD{nraHM@m`W6T&(axWVAVRl;iUzE zZ7gHzIixJ%?*Mjy8Fxo%sZGQ*o15*}T~QH1tG1(bUo|nR42q2e`+{JY?X(RmbI}Re4y{oqdYiCfF{?xg z>wI;drpDE=&@++N-Yg?|5Lm*Qmc3h2V=6b<+;{J9%D^Jk7b9Y;toB0!e6z0UM!($# z?njJ*q>i!o!`#jCxyV(w*35N&r8MX8j}Pk6b?Ke6W7K;<@~<{?fq(#bc_Vbh(=o`@ z)iuRa($Ae9#()b2pEf+bhvGHLmEPa2=<8eZo;WhM8yTFfm@_sLkCsX~%Z4#iQq8d= zW1gV=q)oLrSm@m~l2vjB;6hTEFWu%X1XOQ9$vaxho41-hrF`@~dMyb?wV(5C;{2TW zt`cNCMBLtA=O?hb@x=jXqB|QDgFB>hn&E=JwGp`O*4g3HEQ5_nd*n}@vxW)sg&n^pjrZCg!N+!bX)t2b=Q zFi!%c(200@^3oaFY5^&SP#9hPuia>Y+NYOmH*!kb`AS6{#Q4H%t9b23l%wrWxhk6v z`yA!32(CvG1LcsiFFPHk?zvKtUzOHIjFVZ-m`LMV+8=6ZpV4{03cNeWu>!J&MFQ+{ zC^058fLQ)U>MjG`V}DFm&EVKzSZ$JMu2Euq=aI}JeikBLCIn!ZI>z=k2(vWj#c(pcYO=bE)|AJGR#&Zx8!n40LX8&@{JlD2Gl&}Crb-pwvoL^js{4cagk-IEa5Oj+ zjC4#1QPf2!$TB2NikUerO^!UimPD&g{y+}C- z2vCRlHZWg>i}$I4y9 zTc{!0oP~W>q0tK&QpsnEwK(~xl_!2*T_E~EZ}K3r@jinwfNUxpRSY*oi^h!SaN}HWs}+m4 zs39+1;;sVbR-oA@^=L;&`E6@)blB|or4GGT=X`N1kBh9dyo_YWD}dP5;rDSAEK*#A zD=!{<_vs4jQvR`@Q*nR&+{81*BMZsgY(A*_Hz$AnkB{bi*|nVlu=<#rqwo3j+go?B zE02w1Savhs{PZL!QjVe3IA!{j-_TPY{(jqQhHUe&Yj1}L7XMI7gX$R`;p+rKpsZ?d zi_N9Ohmgd|B;}gp3$OzII9IK!tJ=FJZ$*Or+b4OmW<1*>Ub8MbwN)77QDi-7WVl~M zd=q{?P4UU4!RNZP8f$C<>VB$eX1J;+k<((rToI&rnrm{=tfH#v-yZo{^6ZM&yXQI? zPMK@X2j%4@wZ=AgTOF18BbC!EM*0`=Y8iW&yjHzL@|~#D0^n@Y7$ru{JW;8fdB&&H za8k*BzT$fMKI~NWQXYTW7JKc2mXfcNW_9COq|2F~ro$6s9ciC`i^x+q|7mGaCZyv9 z3&q+@&3RJe*gHtS#uD0+Al0&GxlxIwxbpfn>FRRJCTAO2PBWJIIi*{d>|Kclp={r# zLAK1`u>ESj7_ih;hTsY@<@i8ZqaB_8*HWpwqxkt(<0U%-?ri2(O4gj-qGue(*13;F zszq`0b8pv6PBz@_-XJN;Ecjf4HoID}ExXehHqVvjr0sO!L!aWgF|SkerYp@;$||Js zlud(roCX5EO@kXH669NDKDL~o{2lTQGJOBy8R9fB z-y=nr2fzT4@x~pRf(zTWqvv;+!K81V1nyhOqGZS3Kh;BdE#V#iRcLIbfA-2%ongdd zWO98IUCn({$yzLt-4M*(mCN+q!o=3qLBrii{#CK#-WvWKRax6t^E=5hxzJ#ITeF-0 zoTE6561MRq`@P}djOe(bJw1YFA~+d8K1~yb51^Gc2-4sX4wbO>xrI;?sr4nOUQcy! zccOD%h@7*_zcjhJIBJD~QZZe0tP!&>!LKuLeJ7)-TZEssiEIRZW&yhxhHr&`H@cT%3jZ`etUwSnon zN`P*oOCRy*&~`>n6|Oj?`yW+C_hH*D%FE2V_y@0{hS2io8$RZr7AGFDr@o!ltO?(@ z(rxu27u7oL*DG0{{GCVZ+XJ?gxQO;k+e@riT8I*_F{rKgdR#$S6%NO@mI!Evvtdsb zCtdfJ$wj5`mfuXYoY0kCgzQHy4fy%`IiO(NDWN$Up*_2E_ddwIV((FFx3_NVl!!q4 zX%Nnf?GD0&b9be$iEKH;se1W>>hTn@ihB8c2v>HgLq=-+a!QOYyQJf4!dfu1Z(P7JQ5a z({CKdv#{C!cmA+7u`{xSVdwnswj%8tSszo|Cu3F+<6mi)|&;g z}tiIJ!aO{D5cRhkt@J&B1?SL;o-N7X2=Wv}lS z)}KFbeR{56&9B;`?>nQNxTfxrcN%JwXM}e)Vm&x%e_C)#THv+hy|qx7z=n7`rXZ3s z0jZ6=qJn}UzJYNwoU{N`ap7_xc1nVOxN;ySra)Mxrlz4lxdHuK+le_+2PjKU<5{^3agF$%x~;f9FiBE*wR`|D_l0zn|&N^%0QJA)rWNNyp?9e`p; z-SWajZv=eFLGZyalLJM8NO66K`k44b1Hc3~@T?If{V8??5g2A5;x%_dNr^LkhZ2Ao z%fVHyC9+9TBmW|1ghEULP2oL=?(FdENz$IqK+O57A;U$HfshsooDwGEAPeS(xxvu_ zMgEH4g+A$L^$G?2sT`h$8vq8G14V@lAVn6!j(yMN5jY3)DZ>vQHU@#W+lTM^ngW(3 zCT6;dN5s-(B&W>BnFEaqlEjPjC0fFR9FhF~hs6KVW8E#;XBZIp&4);AfX@g99{~-7 zDCruSh!qVc4j%Xot4j9GrT7gj^^GL-jl}g0F#4h&nO*|Ge&?{?yW;Z^zzxA2flI$H zcL4b!1mM7nfc^doVVHo8f_|~lL1)|zS0N5 z{{{f(-)MBPa2(=bP-Nv502qM)3xI&}z>_=>Bm+)40_lISDSs$HN)n4BfmZ;$4=Lne z!ypIy4i17841-6(4&Wb%5+LPe=ylU|wFoLLe0e z=H-U?1(T5nq=;ybU)^M70ja>hxc;L$xDSB<4*lWl1S$p+*)~ntpE$ zB%j9OM1Oq)HD1wN{VHv`Q(}+jDfTF93H+u=h%9~9F**s_Nx0m_j(2l!kGZB{8Hf6n zH)fL(dj&f>qhlJWq^|pHC7)^RlhFzZR0>Dcyt9tE%i;OF{$e)P>me}uqV?JZU{ZDS zQ@dwq-RSO)W+(MK5sB<)`GHhgT!KV>@^koa9f_m+{Dq`@wuPqrLHY>ah!d)R&l|1NPXXi^JtbfAdac?E#J}%A7a*Z?$Wj-yRJ~^kVRa_jRj64(e#my>7kHwW)aLH!ro(-^}je?Dr)*7P;)rrsEqFnYJZH zRI$}z^t-lB8F3p+hS|;!3JLK3kN(wix&t=brcYC#qJ{;S^Z@H5Qsc{voE))0VSmBS z{Cw*r!)8l`+Y^N`#zhDz0qZ4(1=jDXF~(t*!ePq1F^h&St*cHhG%Xbw`h1(y{WDQo zZ3dBxW|6{AUGZc`6}P#RcuWO9o71np*QWYpWz5D|+b+5p{YKSNf0t!^c8?$d(~p0I zYQ8JjzaO|YHa#BxC^F)B&sMU&Nq?=KaYJ_R!|^vg)njh>id={|DWf!|j z<*cpv@VIUXzGyWui0tbk^{Kc!M^3S{myh3=i+|?3Fu#muWxKxn9m-EAiIsWJ`s}K= z6_p(Vrr$D`$DFR&Js7D_Y*|Bog%rHhHBP}&Gu^Ah{^y!ci=ChFZcFlm?|%>~t?~1i zK;NSc?GavxwV9IQEo*6pId=zz{hkoMFNsw}iL(ZbPO+k;mHudS8BNCJWsX39EE8Ep z#%H-_O#Dxm&A1GB*SE*o9n_+zce$4-_OI|q)$hoA=JU_D*{A5!-TO4rJ4-7*kTRdm zvM_9CRbl%+MgOjF8o6tv?tj*$iM;HrN^Kr4U&151yU-IeG-(;3+{A=|YMv8KADZ&U zt87`9m1rc)^3FDT^onC9d-9{@I`e6dB;@o)cPT}lBlp?xWzgxw#8YtwlmpcnlpHO* z+e__(>jhsRUoU+{YDla+P&ix765pQE+BUukxgP!*n#r6}kyc1EmVe<~si5yiSX$+y zxPD2Ki<`U?SKiV3Jjr}>r#D2NDd9MlSCAf&f9v4_npfm(NxW%sn+qg=s1cIiu2N%9HnJkwvR1mOV@CVP9sH-Sk2I)gx?fLi zNS8l3vQa!$Q*aaJe!ly~g*d;4uxfkD{x|dCcVLks+Z}P4rY38H{+g6SWPW1%7UJ@a z4Lng$M~DD=ZP`YrfzgvfFbOJYEo_gyrphCIy+l#e2A!{}+kb@X3u((Yj!!^{)v{?H z^&PXP3eD`~D>{0m#Od;r+5DU;?bb%&0Sz_o1lmN@^jjTj(k;yh@7gG}W04m)?w>R1 zHy@kxtl#$>myd5tN`=%(GV{?UjND%oJB}DuDV{4xw^5^bo;4RUUNeYuI%eg;AkQDG z*5~t5Y<)hK29$d*A0XUUgqf9R^_J<0VHXA?7H=2vGNq6xTi%jFe?iDlZfqisf# zfD)Ot1%f`DhBPcD{yIy+f|jEyD@(^@oZ6cEuI1!2cmjJv4snEYkBW5ra~$_ZAi1Bk z$dH>_N`D?Fu62FSps_ZG%3fVP86rNtPYv_wqKUq?mOUgoppwa3N7)}8TPadp$pGgX z;Aawb+88dqE~m_A1P^b0NTfjtZe5-j;K7R*}Jjkh29V-be>k4*pJo9r#|=7Z1nJWuMj^JQUC0#=D-o=!O2?UiO(= zYkx0Er^Q(Oj)(w{bk1VAB`Ze^WB)TrpSlA3jOlIK)NPs?-crHHu#6KuF-=VQ8u+Qg zbFaS(M%?_+WM(UPf5JmAz=qd(=^jek^Uer6HYit3ZDsfm*_G)daN`GUb=x2@-1B>*%81Zb80;dxw-qZPU5_ugB z1uRLo&0jo*$h)E1CL|uZ=f~Bh-7(B8Rm8`e|Dmfzb&39Sa4Z%#@%-uX(f0GyUr96q z&`TB_^ra`J+z?}WTEoo^Z{=Jx<+Qo!5_$JT4E9A<;z=cntVukX(*9T9S1Sf$;eS=k zl5ww;D_hLTN>N*$FX#s6y0GtF$ZjL{Vi+zxP(tQbaWa2%URvo&%kwkKRr(MWXeSzI zd}BQ9^qZ{`0fvDtk@Y$=zLDmJ;8ZuN;+$gH=$qOjvmc6E{w%yRIGx{;HYhhbTI{0w zV4XN3@F2@7oUg4U-4r*C#+S7iM1N|ljZ!I%RZ>cgHC8&mTE6_CFQ|<2m~C83Vc||U z>E`3~PL92rauaI!mEy#cD$OxsDMB-AySs1LUU%7AidQzr1f-AB64wZmLcXGRYD3Zr z;AGQW(Q=SAg(j6J7E>!zoVAI9t5v;Y?hB}+BrGy`sx7@dt7m+h&z)7MLQ$cMFu3j%fj17q|RKhdYNUY zB*}T7?nJj=A=|z`XP#Ef7Z#KHlE;oy)1quTMmL8GKE@!PmicyTJ%2l8>a5RwL)Q-Y zYW2Cb(DqUd<zYd*&)%I~{t%Wsdw`HmH9;#Df@?LTkadtObJ&hpLM z_W5Ge&RiNhlx#P6kMyC1B;?N!oy2G%pdvTsLsot(Nu7E z)9p5hWLkhT6etL3hYLriBN+YmZqSR|7crTWuzi}@@A_^i*nj*_fA+Q~DTY%_=j&rFY!cG=m4Bd)t8x4M5myb6do?=d*9tKjSE4Um--4Q#b7n`WF+WazWI`ENB;B_Z z*57?I2T+gdBMNmG1SK>2>#bhqb(@@TZlHiZ*9fSUEigypt#tu{%U1-?1z=)v>)@Qx+yuGXttU-5Xw4?Zrb&sv@A6E`zo~-YQ z`t>a>x9+zC<)ds)xZe*p+y{eTK(Ze(+Ga%Ev{3T19&Z(?c+HaIhv0qg@6 zx3^UUl|TbFI5n36>;n}MGcXD-Ol59obZ9alF*!IhFqbe60u%)@Fg7aA8U+f>YBLbJr_B# z;!k=Z6I&xwaa$WFdS(VDZX$VrwUM)-!7;dkEbRgj&7 z?OzY;zqY?%infkUj>ZlEJ13&QSrtXa|6Qk(g`v|wxg7z2%|y0le?3iXjh+8#>0h?L zFn_I1h5#E!A}3Qfr+;!8f0+`Q037YC4Bh|c{tIU30QgrK&W->Z^Z%@Xj>y5(+|a?q z%GA;EFU();f2Q-FeG>gI-5c83S-Jl!+V)>w|FZ^wlcTAX83PP6%io;FPJeTo18iUz z|JfBO8#7xXW~P7ZO`Pri!{%b@@UH<;{j)RFe~U0Qv9+;sCo(ZLe}iF^w{`lPl8Ea6 zj%9}bK9c_%DE@CD_`ikT|2J~~D@Xs!BmRGV&;J!#+}X-X-q8B*0{r{N5dA$ehBich z?+lSF(LaaA%FyBe7h`A*uyX%DMg3QAb<=;B`+oqFax(lo79kt+ztk`>F#THza1;l) znVKj9oQy4q%nYsmf6nY*dQ}?}QwJ-6jp<)*|20-3dS)i3|6)_I02o`^{6oTzf16Bg zO#W*Jf9d*H{fv@7)kQ?rX#Y0{_Fs;Qe;2_?#og|2ZU3ViIa`zeDf|N?ENtsWFA6Z9)BGu^2U zGk17WRJ*^A8FV<{2;$p-}fbSJ9= z)b%s9AE`@$9~#+{9fFT>YC|k~7g7@tN?qaEIYr{h^AqLZ*vRlu?=AT616(}^%~?vRaXz(fA?i)LbAu09aQG@OI8B&Zz14) zCc$N+SQ*!=&=A-dmZAiHI>K?085L>0`mSZE^A+~Biw1t~G|S8tt{4F9QB&lyL>g() zkF76cH7Y^L!Np9ika!bGH6~7^bR|u-NWK{kwt5@^axs2{NWnV4v5KT!!QyDWPA6{y zD83$`e`=Mqf%@!oMfzbr04RMl^O0-BgFP>kprGcj5SsI-C&)MDa<&+OJzgA;l+7j# z;fkqWRrABE;E)1o%`x4`wXQN(`{b-|*rCXho7PQ)+)+}w>WT5$DMLjaGJjWk04iAVuCm)O)mO=Zc|qj+SzXnU(AOh_v=hI}O(ie*P+bhpq3DH`VZ>JVPSjgy0)05WWWWcDPw;AB!f3iI_ zVJ6$q@ZEx5STR4n-jeDM+!Xy}t&=G_o4WLGJYIP2%U07eL8)T;i1F_UBQ6KUQdG|b znf@}=iSZ&aEcJ1GRdwkrkbJedEl#K{f*vWGws_9^EW9 z&PpWfY~2sqA6AKJKC6ZtL^HJe^(Mnbh3v2oc)6Hi%tr5yHA-?>>gK8rC%<1=QQzn4 zeu6xD_H+~++g^R;wPgh^A!Eq=Z1V3)KonfcMyIWRG#3%|BZMD0#w*^Ees=Zp80rQOPP2y76>|-sGljQIFI*H-RuRu%#NsE!;w>wv@0n;OJYG{J&vZCgA@ZvbbkHA_Ld9IA zl??f3fj8e=p2-#X3K+JXe_d#l)^Iy;19x)g0FK#io`k9tKz;tkZSGBoLQr{Puh*R! zJ}#I4`_RGXKyfSVpUmkW!yg|oTH`(n2CnDI}y1TVD zHE}R{H3-<$5q;xITc>1&Yvth-j&ku{ZAE7qy20I>H^h52k)^tSWL!ZzF#Zv3 zx8*t9@ioQaDQV0H3|Xf&FF~_xN`tci$5lNIIN#!~t{?hXD@l3F(OTk-Ua^One`<956`$LvHc62@LEE6U0|(SXdArNr8-RT^|EA0MO& zb)SVLO<%?uyA=qa8;ZcBO-#279qe{$0lJsvNot|-a-vkU{t z6T?)rUtOZ+VTGd{0ne#Zlrg)lf<~?s{FtC*mP3Ybc?MgF^JJI&^}Q-#30)?BR`T&7 z1r08eO-G;hQK;itFFdpSBGP;!5VBo$lNB7OZ*@#^iW^gYg8QRuwbR6Zqm5g zf7Cyhi{37F2NgrgXt01xN?%OK#9%?&kVk&oskn&3f2Nrni{FNVvJmL%F-8^d&3a<1 zyFcYEmog*U;!qR?y~C$7Z&!Rh@(3N;0NpciDO2EqfY)}~(!70NdHw$6YS@JeBIMeL ze)U3h{k8UhM%v`1iZ59`i<-7JXa1lGKRJN(OG_j~D#^$#5YwHLyQ9X>lLxeUeX-q< zIF}wDf15omeAD4T{33am1K77W_yIz}|ITY&As(}bEFxOVltgc%fFY3YHM&SGt%&Nf zwoEX1fRroQC`79wAmm(kn6KJ`t2vd^23%tvxl3%>2Em}rDkT`Ztr2{w!>5a}+N&8z zOjAXK$t()T({&@&sH3(C8-5a}#vF<)KpyCZe{{%cw-0llU2#vLd9m6Kr)^aLaTUwF zo0vMy{MGD~cbWJCl;sVqpd`Kq7Bd@vnO(^2RRW_Wj&fzT>%)vBFJ%3cIPGwl9FPs$ zTfVhpO{6L#7oZ^oMHE#a=L|h~#&k?Dr~s@Gwdxsje#^qRRF46a9Hg4T1MajZLS1vO ze@kuRY^`_|fw;EY6OX-z*i6U9ac%C)(JU2=H`Zy;C);zf0&9yVJQdrNY-VWy z`+`j!u2rLBzfgFUy$~9GeF+1aq~cDKz4CQmd|!h}gt#sFMS4zRj@ArLb=hf}O$x)(jlv}K zzX9XN4+?cOJj!*Ri8El?Kwvi9ClKNk@=ej<=}mSGcn`t$XCuCY9{hBu`Qi~>(GdJ` z->bDMs#&6+Z>MBMiR(ba2-Qu7>xNMi=BD=b=#YS!9@=2p`!IuFGDTaLu+8{uA41Ns z{kUgtj{m1jItEfff1i2&Z^#QvnCLfKD_L@`Q74ZDCiTbi*}#(Uec7mjWCvq6D?+!K z8#d1(N+uOa(;oNMK|`NjAc3e00-0aWYT<9T)|1R$z5wTKF@ox1PV&I~xnU)^62uif z)!|*6g^ZA`Lbv4yJfNOS@NdRk91`rKz$pKmWS4_$VhfPLe{$3R1wNA`>@<&fLJ49d6sOH=fWV|WQ78D-_Fk9WSAiqb@w={>~fMZ zNfcw?uDCsU>p5?ZKb_HMZ6KEY8O*cZm#jaD{5QI71MY2sJ?Sh_Py24s9}0@ihwVkD z_K>6#pBn(KeOZMZn>FaU+K#<$tfAzGuYrHHh5ig0w?juOurkTO#iZm zV9KBo7cV9ZDKriG0wSvrN=zJe8_}Fc6+<(&xs4=HV1K9Y6PG>cxy1J76_x%t8auXS zQ!GoED0&n1;(>K>EDjf@RyL~CLLGUlDLaGiO&B_FR-+;)E``~|l(w7qMdOgm8Ro75 zzAm!bf1t|VFTq~Z(-e}xU3>)(WaZ@SH}|%#vQ!nU@Z&JZuBBo6=DwM=M&$(@T5yMD zDN@LQi9bnNd`WmWo}Bq9f!6XLtrIY!@xgHHFk%ufoG~etDYzu)P{(T#)TxM~jH*8i zG8g{xuCEpD^6K4aPj1EctISC3ANLCxNp%f8e`zFW;<+aJ>kgqxMqX4uvdvIaBiLYR zY0F#km=r=w9mDf7*h>s1)0i9}*aH)Qz#BxQl*&iHIds}Er>)#t(s7!Lum5byM>5-^ z^5sv6)@pVKIS47v=At%n<%0ph78fq~XyRs+oy(Pdqj-(-YRF0ua=bB3&$^wbJ~Ge- zf58M6NGPO9nZWKd-bc-f zre5*A%otZ*W_$b!PqLR)ET-(^gwB_^Bgg_E=4T!hpP~+-XnXmEs3+02WMf6vdpR8D zCNU|vY}OkNB@WV1>X1b6%!xfAQ=klW@uMaN?(TTtFk!@iq2;ggMTTsf<0$ zd7sYU0z$6S{qTktwOjr6@U)yv=4@S?l-WDeurIlzWPNba1re$u(v=8YuRo`2Bc7&j z*jm$!&MGQ^xBaLn#Q7;VTVeiR^e^A{) zHhnl*7(M?%e5qa$D6J6I?#uYclZTh9My4kugRID2)TMDD<@(7zpaUj0V?gG)K_VFs zjtmF*Ug9~ZHwZ2Hk8N&46)L1VnwslKdY+5hc?5sqR_-hq)1p;eAwyJ zyr0Wo<13n-nbokjAtl(B;U8_Hf9~m2O>3_H9#L}xRH1f}f3KWWyauKD z+uMCV%YHB^)kn@UQ*R$NIUI9o%%PcAUrzrC$lkVbbKkgR=fc59=52Ea)QRhwv|Ii( zcy=lePC;>~`D~Rh;0qqD)ri=6YT_SsNEr1a_JWz^3*DV0>GsFGg4j1sDtps&7_SS^ z9;l5xb5J{esXYF8^x)i&e|~C#cjHrw)6#WKij#$F*P|)>fu?A*LsGB#<{(ikq!EYg zL6?zkE*W3X<^q3>?k7{-wpb%1jfNCv^Bt`mR41GqvTla-LEy#sD1Z%tU@5X)x6&KE zD*vejennIRySb`?X=P?jH`S3}SXVZc*Q6|%74?Lh1Erf0Z_;|!e`j6&;&vVTxNq5Q zf>sf-`-hJh*|`#oVd>ie6jrpdkTw-I-XS1=IhP5%E+6R?TKLR1t6}wAy@&~DF!F=u zuGwMWh0~(}FYaw>*V~n0HNdY)(9oQqXf-B|khQI>7csSP#T!n}e|axETwn3GD&xd8 z{VTWgejS*VyBrZof3{BzurDdl&%yo&V-R=<*kI+EWpO5~ral(ut-LDXR8PL1R6d^% zlCjNRsazUTjVCIPsC4m9jHA=E4Hq7*j*_sTpnefV#`e3qnxHi4d)i{z`glqO&tQPQ zeg*H+Il2rY?i&qk#wnjBhU5Z|73rRD2G&lSO62W>l17IYe@z;sCrj^@BX9#%`|dpqgIUt;k`XDc#Epbk3^z z41QMbrfX)Tz%}n88Dkfit^7N&@rc4pZ%bY~C~~XSGE|u?M=a8S4pZmE-Y0wwe7a3> z{$~^$!V?-Jf2_`9oNao)eam6{5!$k}mjegYj|=JaPOj3Li9vi2WUNiKc~pu~tloz$ zR=O;pQ*+g0lrUs3?EQA4eh#xcsrt%?^Lj^tY|dL(Vyf{)C0SXBuY-(ULBg{;_LyyL z1-ExpR>N>b!S}rH6*zTPO1-DA# z(v2gFsBfgQeR1hY_Pb%&6{N?$O!@*Xp@*GhahRJVV6{MHJAm8?4inzxDt|^%fl`?- zyjsNje@8|`9i+%SR_?4ZBfZZaXqMDIy@gi-uffdV%l79Ttc~*zbEGzD=w>+*H03g? zfB)P_y6TqGU-@O-yYIa0pKJ{*P$$T62T^6Cib`zY8T>Rm$}46^ynXh%azvTyhsk?+ z>~lGz=MUPJXBUW&H_)XQ{d%AL8TfXT`cgX+e|T!aKV|i+vLU?74p#3m@Gn`Zb2WK% zNUW>w0zgCE;H{E#%3z6>Rp|rj@n2#$fYu~Sz4|}JGm}8-e+Z);Aq4Z7myRv96dTFD zqgv+Og+OB8(-_!1wQLxbku1aPgWoUS15H|^dA|@d9`kn{*>b78x+`Qltv2Oy>(9D) ze@XzX;9^)HR)qr^;2lE1ht2LiJYmu9Si{Rz3XOsjQXzysdFt*}Kv(u+%6WX-uss!2 zCphcK5Sh9-0zy#bx}Kv~2UX;9t?N_Y)ZrMS z2I-96ZUfBuaX%t{iSGSqOPos{OPW zo>+$1Q!U<&B7eAXHWFjSSq{_pgV$bELn-o4P%bndk8I#?wP7OlkEZshP13-$=0d)bu~lwxMqxy0eg*Gh$x?9uaF|a$>j4vQn}eOW=*ne;y> zx-N5ACqqUq=JqFWsOz#fi2=4Yw?io)O51;Whdu~q`w}uy+ss86Mm4Rvf0kBc6A}zX zc=;DoSaY7+3Y>?F9D6hzTeCS1HG6B&X!~z0RHRz8&VPU^@)Sj2Xl z?!i0$u}>c)&fqLKfl?y7f$E!zeBB~xi%Qf=;B{;9*aU>1=#LY3DQl8g>?ii-iG!cL zcJYNE?;E(WEV##`1ev~qf2SoM#H)b&p>EkJo}8<5nXXLzsy3%SSMELW&zNgGEarQn zcgpTuzPz%X!zRlc&k8#5&+XpKi({CRa$yQ(zdzKC3wUDmmS!rjfpt$Tu<+vMWMrhg zw0N=Fs3lTo4pbd%MgB4x*+Hl+$5cjcw^eoSEKcSSz@q9ee!@ky9}xKBXZmeIe% zMg|n!8*t;pHXiX* zVcwfzug*wLbErJa_K4mXI~=BoI}p26_i5@i9qyYnWBgsrQ0Jk4a;`1qVAAl@H>ED- z(H`dZI@Q8wy`uAOiBmiWWiHN8UAv6w3QcPjh7na#G&@6aZ`@E&^t=uhBicnSDHGz%q46?pwI{FxyBxnY@pVjI&Y`q)=>8F*!$jh{A78N z1zLMVeeL$o)AI~8rV!Qso~}-iv?W%>LWnRx&sQ&5AqA3nL<$9hrxW4UK%pK^dl-C( z6O@@1^6xG$6;`A&KEqOehw^%c#3idp9?o|a7Q=E}f1yMZ?Qp@DOdVg2lRciFPR7k$ z`ZSxWBi%?Ak93WjxgJ%YUKGZw?aD`xlTBP)oby3?LU|R=QZgRr;r8ImeO<}HIEFl( zN@ASmlr(jF7WDd;eKS0S@lLJ3bBYdk)Y`HPR|Lz>!wR6kL=N1K7Nqe>wxS@Nx8utauX1SP@`X^Nf)*vMj}!(_^j-Syf9sZE z6lNyj(gljQis?KET$yKM{}XRqltA%3w)c9$QmbhaPQ z@{c}UlX#zdzo2C)svL2k#}WrMw^%`&PgZA89s zbvM_;aRs&uL0d%Vm!2&IQ64jf(h|EKBpI?(9Ya!%e+L|uPGAzh zO0Z129E(f3@TZcUpO}Jn(~d7!66oOd=>{_4K~VtD=!H&i`r+*;5vYc4iQbsK@DmYY z65ZC;D_L&&Rpw%KXKtL|~|ipd@Z?3WRS|o*X`n z@?Zji-EG;^>NNTm$Oe-LgE6Qi$(8@a{~I$HAduS)?w`fTHpt$f`GlA$_$%JAD_b`KaYOMB@!w`{K?kd5!7Cd0jb+?g`A%)$kLf2zu)R-%T}smXRb zYF>|tq2ckf=-ZF7^HcXdmUoEe=7frRaA`=6gNb-j>p5K(xgtDHXb(NKZ>i0Qgaw zE&V5H#m@-34Y30Rf8CBOPiaI~fRB6e!;}7oNZ6%jSN~=iPb?yU@<%bo>4_jPA>#Gm zmYB_8QzwZBIsx%shzUMe`o&mXd8YfW7N$1DhG=MYK%;=?UQ0J5!m6tmiIvXT>N^c; z+7wX2A#qyOiz{|STVbJ-0*PGliN{oPcXL^}ZC&i_J+d^af8=!4B{|ITK`}wRE&0*p z-ET;@wq+K)d&6+xttBD0SbzSf5aR3yAEnV_ZMnnQ*);gFK5V|H>M356z8IEN`6Dj? z2X9x9A*pSFee7CT1Qo$14!`5Ou}&)`ez+;p z^{C+cQ?v`me>QZ0TmE_ax8Ao*fS{dmSF)Sl3rrQU3?*p@s%M)4b@vIIj7ZCbTSJ=! z#D!V-39_)3BK9dmM#t~a%-0jWd*W4q!GK8xa%A)wPlSgE+w}UiR;fTuLd9Nsn+lIb zN6I$_@)mJ&UD^&Ah8sX2&bET%Pmj=p=QXx?B%GPl$ zz~-@owlEo1_z~3bF1*q2K=9qXSIUPh7X(uLJzk)Q_(iYt5*+TLTDjO3_frg`qlqD6 z232UGn;mkUPXVKb9Jp(Kq5G7SWD@LaKnsY}a{Z1$h^f@*1Pn=1DzA{%SmltV5Q8O- z+x}ZWf7EL$`e>YI$nDeN^Sa09&aub%bL4q5=;-EJ?*N(p;!q|kfngcw?be4^6Uj)k z_~RG$ZoTWzr!iRI#3Z{~8h|{V>cdhGiB+>Z_Ga0vo|hS}^jpYp@L>di18sKiZ%-2w zzYq4XvZ~@$49*aClBeS{VW4AMOVm87s?9Hpf6W$LdYK%z`65GK&fwEW`y^2D-Fty* zSBzq1NH5_5G+7;7pEHU2<>jhsE>u{}?##~Fw$D~?%-PivWZIiKN%>Nt6|vAyLz5k5 zeHlH)$Pz8dObZq1DfgchBcJn3Tmp+K(#F61e>YXRuiGy zteL~j7PF{qUkcR3vJ#Td@YLA4p~`RnO`S03Row`wG-y9#ZSHV*>}|8vcmUuC32xI$ zqnIEL)^#AQM^g1fXX@Z${gl7<_uxT9D3$HUB|#m2sqk+cr4RkQO@zIT;gpSOf10@0 zZEysHNbu7UJ-v)4Yj;FTJZ0i}{M>Wn%TCUhcQ3upK#IDWldm;SngeY>Oi35Gg&XiRKG7cr!T)k;DEc|w*CY&reA`w{IT49+n{Z9U*yRV(KNz;1|+|c zZ#^r&hyBB?qrkzLpUJCF3ANw6e=C9;nUReaDY^s_0du^>S36F7KWJ?oHCsMgJW6`a ztK{OM2jW4_l30K(#A5S#t$g_c$x+u=OBX0F(RdjeO=P@Gys0gvij}@gM{&&iwVVrM zOW2;0_dXt}3GwQw-B64XZ6D=nLs^)*%{(VyHS;NvX)4t*B2;^kPvuLHGW|r#h??XqwK)qPNFkyZlgwH+N@(6|4nm2&a~Cmz@x0w#dYWuAjXJfkA93x;td|I-%>70+V7d#Qn~s&iM_~@$NDom=U^UjY6X<*5 zOUvS^C9o3-C$=g20;*j(>A$654IHE074+kvfnc5K-eOj7^F3(oe=%3J0rMT26%vd< z2wHp7EG?VQs`gf`wlTnQp9%$eYS8yFqbH7WNhoa~aDhlk`)O8$pyID*X)hoCXWU^; zAhJpI!$sevYe6C^HQn<{_jbvYoc1b5ZBD36J3;vn=)9`vRm6kPKiL=8l;<{)mN3`K zF*`LX@DY^p$*w#ye`#0<)4T;0Gj4Kbrom64d*~b0;b)3Qw7Zk0`-o(751_;gZ?y zGKE$<9&`wYg`jv!GetgPuIe^Rx6+XcuLB!zryQ!2+D zzj=#cO^>1)~L0 zq3N8IagPm2HEUS)F)*T_E}I137l9!OC<+hI7_AX*Sfh}8E{pBY9zN;K$S6T3WfH}w znoS>>fPug_o^z@%$RCC{Ov6u#);~W4HIhIxGvB96f04GSO78W#4BG66T`FC9Cw9HN z30wZ$STqogt(VU&{spjddL@qf>1b<1EFnKE(Co3WJ&jcnM#ZiY*5m?xTYTXBi(V#~ zMhza9km1_1=mUuj_2q#IyRuKZbzS+W>c$_zQdSOT<0~sIa3I;SgWO_vM@pb=w)+AN ze_l&hf6YP1skEW=02Jff!>Ktnt*p`~8gk*hB0YevB?cKXnH=wY2jAC!85Pro501nN z7gVmSD2d4F@Tg&n2POR`|EP)0?_G0G={$RqSl;ktZYRFx8q1`5gtdlo^WZV#mSz#YUDnQkn%|a-{`b)<7E`p7--~rofODS8NVux44GnV; z(~sCHprS z|5%-fb9|`g%WDLfllDLr))ldfR5(}Uf6cu}8WM!7QiaQR%DELaDd#!w7#I}F^k|u+ zk1{YywU@>@ja`$KNVTKa=^DfLHpPK74v$DqyBr?&3~$p1rW00R6>0R8cPXEWQV)Mk znjQ(28ZPQIo|2t%*Rb3KHj0gMq%ryHx|`78R{qN+DQ4g@7PoXKK83`qR!l(@;ALni+NY(d4ey&*3END_cH+i9=-NlV2pzfEUh8#KG zZHWZY;M70) zHIbrJq5aN}{h~g+*|>ezpdiA{e-_}|O_1_J(T;##n!hC5@;bYwFXQ-O0uRVl z^$sfFQ<`_f2UYcKZ`^mqO_X6p_UdYNXtQ9nIxyRS))p7|*y`;+`^vm|`T^>8-3T_^ zP6bSUHzF{HS$eW&hi{{cugQNnPXO9d$Ib$S>6!2GoBwov?12l?{Hh9ee^8kaq=dZx zXkh-Oy%g!I3eILNcRGh`>SA+U>BhXVbux>~lXr(t)~x3e7$ z6n}}y8Ci17mb!g)*1v3K3rDU(I10+2Mt}=ahDSv;((y*DktDpJ#*9B1(*{cb2!jK@ znhXU7Rb9{0RqS27Ng?4Of5^aB1r7bjW5ddg^*1;85I&382rCeo#aO>C@@dieGkvJ8 zLFZ9V6roO74>|waguUtua?!HLLJMi{tJIVvMHI9BsuX>6)_1U0lU4C zHZgqLiEm}L)9^i7*Y!CsPV`=6&uC^f2tBIKTINq1j@B|q;WRA7v#6;iQFa354l}V< z5<~bYeaJOs^k%sU8O}dn6M%@7dUx;wL-wzuMy@5SplyEZ3%w`&>ydIU{j$_w+%rfh zeI&_ZZvk6e-h_KMBjOQDLY_$I`lLZWqgg~R%=mKj>>QT97 zx`34aas}5|k-NR%6gpo?Lx20lDogbkCHZy#{k`T>vcf%0i?5bf6-%ddaC%mG3Oy&FXLz0{Re2NGyn-hzQ&% zs+T>Mz295fH9DYN6keaQzA?O)`Ulzdpz?-f=6o+O{nb4;qq*YPfmJO-hURGG6UrPW zDpVKmY~XIuzxQV65@;sPXJ(=d?4ac2H~iT-5%yNN09Qb$zklZ9A|hO;BMXSW5frdp zA<8fw#G<)I_{ur_y7Rzye(M~S=JoqM({5gpAo#bfms8F&M1H=c{4!cjfKZV7`DL{2 zC=B@C`0`@O?S6p5ivFnyQ47^qrTxnT-x1n+tPW>)nXi5shSj$R>PRblb=2Rv7&*#k z@m4pi&&)uvUw*OPY+&o0^kFAfn~? z-3SffkrhcW;)|~My)pjKO5IqF^?qHwc5?-`4TB!==39@F5xQYw;s|@Vxc3HQqvqb5 zs%?iL`hRW&$qcz?8=&<YuULNY}IBYz`NR-&#g8*~F_$wx_?;_HmM_d33N zqA$`A$*vE@jB+J;KwN+pc_Tdc8+fslm~wCZhA8@k<7%^BWNm+Ra9|D{Zk@9R9~NaU z-l<6^KUL(ow--}xn!7H`k3G8nJnJf0`@NcTBZ8&tt9Km(VmU%Qnbedkkp?qgTdl=y z-+v_vU8}L7b{Fo7WQFSCDip1Yj79Y0F#T%*swTmBk&+rFjIjvwyNdj^5@pPat9 zi3vioq|fplc$3X|qrA6^+KIxKwWt({vgJgOJ;=kz8x`&ay1E(OvV8pJ$*c1WNvr*ZErP3Y~ z(K*ygPXx%=lRX4jS`?Bo%R$CuUPudu;T5I`BJ|jJH~iYmZ{QnmPYJIxMN!4kkAEAL zO&8rx-kp0WVP(0B6^FxkmO=v1$ci!=Oz3M!EfJVd6 z9yUuyzwP4u(P&93F(nd+FY|?@9ob_?WggXkkF+qA3WR6KWg3C}w&Mm3e{*Ua|E>#o z-SZY--Ts8Qp-uoVR(To|Lr#=zE1cw&>)fSvaDltJeA({SFh=c+ z)dtN5;bM5V^R>oO%L|$6IjOABMNZbt<8|pO!C8c2f^8z} z)0dTHpU6kYb@NW=_VNH-Iy)na(0*x>_~aDQ+Hcb)=lba9@qrZ)IAuoPcKA8oSrFwFM9n82N;Uwfh5 zaf(}(K>R8ppTNTU*^@ITIXm0_t5k};Nj?u|Yi3<^V#0q~eiiXs2CKy?n0!UDX_4@} zmWH6Ip}8~#R$ik!!k4nAM)4&j8;`BLZx$Ijryznm_Aztbdw=Rl3ytJvbj#>DBzJ!I z^A~SV2Puf9BYlcYrQ(d#w%f?15@^!r>tGy|nv-^3^ZoYCf}N&Z)f$wBOwM9!Agk9b#c7gx{?T(U;TMoOcIg&Bmx$xtJiRqCF%XPe5ohfd?T{& z2u9hqb(__h7=I*P!fha{;0Pn6q-J_h0%`~IeBzVF$%1abQ4WzpPxHV`PyfE$EZK{c zz#-cne$9E- zVofN_Ji@Ph(;@D^F6y+Iz1Tz!?7Z3myC}#mpBb)vr+*I&;fJLYx+_$Q7dLvdBgY3P zz7aB2o}iFCaQ}Q-NR<}FWwZ$wEgRD){N3mQ75;a3lsh`v`5`X`@Xky)V>PEb-NhtP zJ9BeGo{7@nZHSmVRZbZxgKMVvaTs;Jdw@ZISPNSoebnFp>!X3}>Gzl0py`?{aWj#R z96JA6J%8CDEvFoS6O_|NM3Oo^fHmx4pIWW1a*E;2W&Xh3d}UXEv?j`;iHsOvAIsMt z8D=2dLGqS(a|D<0ws*b4bJ_Vx?i9r-;5EmmTEQ;Co^B?d{OAa^5WzjXhaEB^L@K*f z?7B*mx`FYaV5+tJA()KjoX_#x%>h%qh3vN=6@L%&kb_JkjmK4qIfx;ZJlR1`6Yv9X z?Y${uj?35?#pFoslx>?AE^!_KkMZZ3LXLRgL<#Kz7uFXxY+@f~jPyPeI-1p! zkHp(1g@l)78|ty9ofE}Xh+R}(&jatWqw1!1306-VNe=ByAuGna7^jQ3>53{TzNbg2M0(mI)d^J>h(pX%e@$glOwcE6s=fty6 zf*x#MD(o#@R8i##-NMwe7{s2nS-W^Cc7KrIU;atMn1Jx05Za$S8R`94bInqXz>ca4 z*?y4oISl3kXG94>EWUR8E=sK%IdG6t7bf^Q&`rk=a05(m)^;VMX+ct1=?;{GHYh1z zuC0P`P(ei_$b^aA5=wMy z_jU4j?H!wW12#~Xj-8>c^dc=LXy<=dA$P9i7DSQ^*9hqx*J|~dw6wlmj$yedv(Rz{ zKJrD{l2?o4egv)!OwTuHLlwzx=YMP6L#0#(4o7ypM)>tl$;wp(gf?I@t*IYDs#;?Q z!xfa;^N;?%(u!A?AWM2M=EgPU@yk$dY=LVdN`i8B1N zWnZ3&bLz>3Y&Zdj%z|k=lh&_)i_4%v7j8cq1S2@7FSgqUNtz2fP)s|x>3`f%c{**; z*pGUX3*un3=>1k#$(aXOE0YCrf-2HueL$Y%sayl`D&H?lzXBKOCw{eCJh4-<89Fb_ z;GLXKekhHP0hl_$BOcRc9?utLx;dB6*dJShvo4Fi1@t@mi`M=iX(#PWws6_;aIS*6 zuz=sS5;^0DxKwQ&y^Y7=5P$K$lLo}!BP0cK^BM356QM-Lj!LW4>6gkReL~4Hgd%!* zRENnG*XXb>3bPH}k!q1;l2Uas$T$?NBo`;#F3Qyn3aMG`e{wh1Fx>*-aRbuzgn00l z>ApqUzNno-gV}QvT8|fN?P$$=K-~FB6(oeumvrr{jT!@Y^G|K(i+?vdm`19#X&Xv0 zLyUNOqN%|3#tDV$w2h|`(^zU=N5`V-45vy#9IvlmyDJc`rq!n*gp%vzu&nEJa2t8^ z`4=xW!+(h*NQC(!^cc4wot2xi@Ki;d49w10b$HhXR1t*XEEFCD9Pt#uXEK7^`s&PNkzcT zur*Ys2X64PJyo9}?7qL>+6Nl8SM?ZCFP)m^;_9i4ztf8h?5BRC_fsW75w#A&AFB&WXKkC92F~onwet9To9OT<`(M52SLml|+ zYJd%%;xh$cw|vf~$76AJDNtO6AKc?<7Y0+Hv-df+ll&}-PCulpeQ|cSRiB%DckLSb(Bm~pxvzOQ@L=A zHtk&LaytP}=I)YNlYdoj#;iXdgUB3n0kF%tIvw&fi)J#OXudL0LJ}ktezlzVQunn{ zAulQ~gMSP>0tL4|Vt1`ZRqsUX)vXbmDqR126U5m@h3N4j3ySFzsM2 zJAbHAb*9WCK)Y7*LLN4dH%DTKTZ+;WjDIX!;QX1tw6^6Mv2`2hIcP)tHz%Atesj!W zV|P9_#r$F2D`eZ^YM+trdY#dk<=x4}q`ErR5zpsi(c^RReE%8^rd7I8_fFQci4Q)a zbrd&#)cSCi0uM{^yq5)kZt+~K*8dl~4}V1P4D=2a-jMvCjl#eSs;OTNd+kSupdsMkWSLoa`G&KDU~>EtT`wnl`>>C1lKUB* z=eEPQa7*cMgQlFTL;_aJhrrC@1e3NIq^gK^nP6&)z`-2s&wtD)leG`^_rnn+9)*SPIHZ;dmVNll1I8;k=RAudZ?!;l;fhm^hqhs;rfrhl_I-8ie1 z-U(DXpglF#T^32?2E|PR70=0yq19jG-D+_>(zXao?g?i}(Ibb2WyX@M zN$94ciP%6%oI0;G)KH#X5l}_3N0*9tMgeV2jqhRMWFT2n;v&JTf7lNcRia+#k9h}V z^)*un4lMbep*4x>Nr(Q?>3`>ZK=yF1v&&b6=4eM{-EhSz97vEeY z$~t9n8dPWz&Y6}hSf92l6=-)M-`y1R3=n{;&(Ii%dRz>)Vt&j@_+C$GVaDvV+`Q; z+IuSvmJMbpKC5TMyE`Bm>DuyV4{3%v=`dcQeY?j3jl9UZj#l@)CBmL(B~T zqJzuyLTOXb2CCSAPk#lN?P;Xhj%0ziAsPHTb?Bq4s#G;@vTYJ~*WM5nQ`fAh^7_T- zIE1~{Fs%eoRP6C^h1X&!4of!adGGiaHqhQ;RSdHK=4ACPefIUibA@?VO&A8sUV>n- zW516tH+Y^>%uR_r$o#Yh!y$RMd7tj3gGjD2>1q63ODZUuy&>dFXAl{V z%Uky607Xwd6}8vxkYe^8wr2G-ugY_xsnHPe7>rK}A`RM*9YFs)VA$U8!LVsbVU#40 zS;4xYHg0X@jeq*2U`msyHlsAUe{`lvX5BAIg(=$T#{AyK_oHZQV_bj})C_%%g!cC2 zIiZy?$8r}E9zfxF^3F9HN=Bmm7V(&AAr_S_5AR1{6@mErcCxDj^29P^U}53Q@&m{- z8V*wG`n+}bzr+cn05k*e_#Lo5Ak(0b5dqt~RP>=Lx_=dYWDR0upP1_);Ia<(kz8|# zlkl7)3^P8NzF?_(WR&wOso_v3QI~cAFR?@kC7XU9%Z@~4?3y(r6C1ZJ;c*5whAu<( zRA9O=$5|SBI4LP+qrSUBuf&55mYvT!O3)N%aLvIb%D>9+v%%go4Kq9)PAEnvFOy;c z$p2^a%zx%Bo5&wg^;~_{aZIYMJtrqHNCgtWqQ3%KS~*5fvMjx}7EPECxA5&5f8sE7 zN-Nc49`KQP6C;udjd#N8u>%e^1q6f{;P0_bzcGrSX<;2SJuTh>?nfBn@En|}&g4{3X#7rFG+9?uWUjgR^a8?KWEtE@&9MDald zbbXhOmBaXz(MvNZaAD>yi1S&gXHU^;b~8OYH)~8G$IfgFi9Ps!#n4DA6qefm-^GZ1 zUw>QQ;%~E%H9+@(%>>fGZ_l21qH!HjhV+5$j*NuF^!*?ARH%T*9UP=B=F({zGhIiN zKp0y_;5eEVwYIGM1GrL(Q5oPt@tZGWqfV_HgDWrno=lzZ&krl-6?YrtQ!+jqd1(=E?q zn;T!s1T%K4SIy>{6eR3s9#0A{8FgtA2YP_=+D$ zOM#x~Z6-=Y)lNWEGx7~&2lSANvlsoOHho_7m)v8lUIgQL?hp&Z`gPsjw14x8M8S!_ zyWvs_kU>-A*A(Um5xRAV7f!H%y(aly5jyYn2xZ!bCw0)w<~-!+LL+pby732t!Z;gW zH&d4lCA+V28d)P8Q(OH(Sd;mi0ccC*M3}Djrx6ST_G($XD%io09#w&-Ux#^c@2CKF zK^UG{z%R_q+_FQqf%9&=T7N5X+_3CXF~&7|U)rddZ*pos^ypMz6#>>I@DA&?`kD1o z!j&NxjMMzTQ6_7~6r`AJ2t!9|3+R}F&)!ser6tpjglp1_>BGZ!tbNb#hmnt9;uN49_E&~;;&MAmA zTgrI&c?U>M@uX->Tz}b|H;C_V13>#IatQf~W^hd}Ufi8ik;DjCYL-S>y$(9c$vjW{ zYiF;dB^-V^;Lp2^5%vN*0p;xCufk*vf=;c+Lb$k;G) z03ZstiHX6QQheoT@-c%{K|A!jB*$HI&=#^ieTgpEk~Le=Fn=j#3DiHprURFra7&f5G$;S;%pPjYPGVm)s1^=nLq)?j13X1cp|-obJt2 z|2;(m%9JCT=Z}MmYUuM?e9Byo&?&!~^@wfCP-5p1c74iqU|kOMh4tO!{NQVqPiwEG zP3H6mVHVO3)21@gWSr8;*psUI3<``uQ^L6Cfh3>Un0gTbU@H5yg=#_f@ep??zv61s zlTMS?GA-vE(F%(ml_@Kv>9(N4?=8z+MSKYy0)NOz#1*bnu&ABZ^OD5`*3bLOEM(pY z8y8J~OQ~Di1g_FUf$D8uL}=QTa^92$1Ee+_#AMq#p*1qtx7VX<)UtXf(@~f%F2lw4 z<&Z=kp|=51aeVIQRpGl1Z>g87>--fYFV z6oQn;bKD|4=Qd8IjS9+edZZ8h`1hqH$06R!X9`tb5%%O}NU=j|Gdc7iyc7 z0PR*mAH;;tt0&TctcaVuc%b-ifT*rBOz+eX_VipjEfhDz0FIXygT{J73iB@Xu)*yH znMY(~j|wV@0~TlTD6!uXPDaAPc0I(};6+|30G*yq*xDWGob)K7;O&#q&uG#bNPqEE z9HK}i-4-#_Qeo3BI^pX}x0F>i^7+Dt8r0P|oy@Fn>n?^I$@QhwVq;8eCAsEx$@0gm z5eO1CS=M%WT{25)yH;`b-l%(F^$m=GnLe7OX!WZY+Hg+0;U%QzhTNYZ)L`Pt-2**{ zJ9s)lW8rJbyA*x`b+ zF?m@tl8XT|njFpC_%tuQx)e!}Ad1q!#D?`#<3}%kf_d>Y1FR1J+I*%Y$jp0~ zk9p&p{&k2Y82m*tvZ|1YKG@8mnBp@I)yRo}=m49Lo0_X7l`E}{*3IK>i4;^j}3RU-2@_0=RevEGWTmfV+ zB8o3!i~{v%zF-mg%MIzHJLN`RE6c`-uA@-KNbJoiBlqsq&kF!}b}=D3Hpw>#a?aJM zYP)`?x2?vTNnL$J;}P@u=%Bx)5gJ#D|Bt`Gw-uQ-x{8OR&wDI?uYcM?fGM!wyOlKh z1f4xKK2#bUXojLK1{m%<2jc6wT&HDT;u>p-eh~w;-AQ!-W*?`HiPI{3vh^D@ zs)wc`Q&wXVHFq!tN;%krnb??F`2mU`J5yH|RR=po2R?ZwRiLG-4A{gL@Q!gIQBjFI z15Lmn2YU$9PVql>R09G5U@IWN0%QvWh$|`U$S6t!Xr&c3 z0MbBvp!0hX%C4riATxkG$P8%j0;B_2I5-1r|8W4AIoO+n{wjaXh54OJ)CFJyaB&2h zf!^JK9%ewtzaU0{Bhc9n;M4So7uXW|CPYI-NNDTgdCk6 z-f!5wWA9|j4lZC9GiQ(^81NodSwiX`d4jD>z<1Af0gt%_D=JT zf=xj7E&wpl1N?tiEK?xB9OU9?YvTDH`<=|u8T5A=t}Y;Z%YS9S2yg~knmC)=0$p6* zY2La2dYymO3HUG7n>ae!dj9S0@b|6%%mD;;0oqzHBeAi+$20@K$F>C7BeDF|FEaKP z4gfaRf7s1k9sh~B0iFMTAlkorhVDHH6LSZ9TTg&F&;oynMbQEL9uh$NKU10ce^2E9 z1&RMx1pZ%<_y14af7j^04DtW(JpVhjl&h_+qKVym1N>vp0Nxjki9O(b*8t=Je=QqZ z6KB9*3kPKOf4Q32fowhhJLiADtp)r?*8joz@9;lDh}v7eE5yXc#mw~&Gsr~>VgrGPAM&OAW4nKtOx*f3M+P zx4$c3QI=K}Rrt*C-)!5zFDt)y1z6qF5eWE?NLmUG=Kp#4i%Lw)!2{sU#Kz4BU}EQC zeILg6apYs?^!n(A=U*p-f1{DKH*+xmtB=&c zCidpbfe`Do%ye)yUe3UngkEnq z8}vY^V@aKQVSYfRLzjQrmrcHMBm~p-sf}j8!)=uteU%9V=AhK#V>Hg6Kx#M2nskN~$0AY*nBe&(ACV=2 zJ&m1j>dgMYKDqI@BDPg)Gb@pvwEEm z+*pYVQ2@e;LSHg?d;+DaDZZM8U0q=8^a|Xfvl1n*GstRWbhv2;+}16np!!I$&~jv) z$aq|tB7Y?%y>uQ&BCVTb$EDnlZ(MK z>R|}-Wklxm3aJEfRuL+we#S$s$e&y0pvY&fAqfkIu%n9narK(;aX2@SbiBujA7d9J zUWNG)^FLPOcbWN_qRA*8hX`uvtvW%PVsB-k3PB@BW>=PeAwNr9YJKZqQDuMP@4c3x zNg=_{M8Os0Hf$4x_;RSLHv_T9FyC+>)p6590~x7a5;b8rDAC_j*^S_PT}}orM^&iUf2C0suE^ z69*UDG$=ux6>`{~6(3!9RjcH2nRuXlf2Eljl3vvJwSHR>J?u?5gp{xo$wP!2LHT5! z<7rj@HZ!0GM6P8=(|96C{3_4mdKH$di}7LdW@qqPt-Uo+ix(d8aEgCz_NPX}(~aF} zMvhF+5_M~Lce7~FAsNlfa(S>n`+7MYrJ?I#NV{H7s(Zn8>>sNN7tR3@?3aBk^H1vm z6A*HfWK_6xr-(Vy5^%e(=jGk`!Xx(LHbPg5z5^9JzHcsd*gFuAB2YY$7|CE8&MF)u zFiW)8I3(EglYa)I=!So^se_4^U4@2}v2~1Uvm{Q<2a3VduUX5S$W{{Hpd`r2*0n~t z!+yiOc184UquLse<__XPUsvk}S1j+L-EqKDo(t0RYeG}|vTPv87XBn)`QyG<^r%k2|3ZO+&B26^Zpu(p?Hp4ldY@6x&8e2uRB4B5k@-jj5 zAu+~S_Xq4NRXdhk0@$*E5%7a|`eHP@5IoMh6mtSVTj6K)uo!l?jMgF=%Xw?>@8RS( z^nx4ypq9MKl5l^NynC{n`*jU3UFIpU`CI7_o+gc=Me02ND*ZZR3j+d`-rcAk#{P6c-ZsG*`L}3S0ZoKVeWNg(fRI zZ`heoQd}t=)E+{o(~DfchIcH?f#qlC{)Ojb1t?s1@V9?GjO8i_*|dbC^<>Hf`elC} z=jYsPdOsc~myU19jk@}szdgA%ioC$iyyC4W38Yb#h?1B`q`g$^!{osr9nv{l-eK{6 zy=F=n?%jI|+$|k>0a|cmPM$DQ*)g`m>$Y9$>(E7@o0Z%DzK^(!cs6z52OqJ~_cW!* zr}rP?5g>oCe*7korc_(X(522dM%_THUWL8gwOHdj&TM*)G|@R{ew6uBpV>1_#rd=7 z8n1zp~z6)s7oV!D6cqK{v=eqv&s(+1+?59r^SEW3*ilA7kL}9aP4N@HxeKJK%F%P zb*knxjsMQeU2%vOuJaFcpVTf4#k^&wH@5}h{3cBZLpxwlkn-TN-T2ubB&YRJ9)y;W zD1eX_*UAq2o5i!J6~8iq0s-|r&$X7kDX+7XgTtaM^DZEifx}7pI>X3%1wRo)d>35`1JQehIT(AI@^mB{19JW=+4#ruMtv^XEaQ)GT(dihbUf$IVr;>(a<6 zPK8j2Y`83znIcdkUz^5~BGk>ilSL=AcU8ORwJ>}gPQ@MekIGq!wZqkWJwB1XR!HgA z!o4=4OD4Sni*hlvor@0XlKc7PvEvTk>+FA7G-@L{oma??gLpN_M9J8h@ePcA{3ZpG zp0I_0#*cROOJ=_-enx0+n=#)za8A1cJIm@4Yk~?;e@zi&#Qw~6cIuX6cJ$7E4hNCT z{^ruLzLQ$R*mmjnxyJg^Owp|me=7@(+csogrz=9&{c(Ia9^adpVx9m3d9X~7+_ryn zP-ES6B%_6uY?Dsvb{2Usm=f-LyxikzKapO9d1Kj^=cJ?BvK>;``Z^3#XuXzv#CUha z*1JT_&V2XE>py}_4J3UVG}yRi(>q6ExV9hJn4f3|1A0V~0UGr|&)k zk{VC8amu4_Z$f*S&zCP0DPfN?f<3o?wRr<~%%Vv}_{<-Z-pq*CQAU|^Iwu<_WvG(C zcR=6D!2d_K^3VaVB`-4tpGVIRR|DzyQL6(abi$em6$> znEsG3wjnMdo&IHtH~N>W$hL0y{g;_ObOwZ z{%oto5fPNq5RAp~^9njly$hnZ4dwa|J{RTWf{$H-*8M0at+R1{@Q`TLduMNCe}-Em zI}76V)hZ(O4%qt;TuVIWZ}fkc42+5Ov)ZCF(hHzI6<)Y7-4Gdw3-X8)?3us`3KDt| zS)kKd`xlDWq(CrLr&S_~V71%>mbBjlmX1#;Q+&yjxO@p2f|^h_FgE?f=sKX&*L|Wp z%J(ZgzW)@E@9FbHGunzs#QEyXip2Qi2m4^&A<h;i+-sLnY?awb$Bmoed9w$jZ-MBP&dS^_r&~a0BtFh*qX%Vdu+*7M@ry~~ z&K2ny^;so7w>c)cgg)9;Ig<9-*_lc9TLG*fbPp)?=a0$tfKoi8A=IHY6K|Xi5H0Z< zxrR_BZw!{yofwPT;t+pdImKPM;^8@&eJ4pKG9ox*1$m%4Rir?2S01u6 ziBM$WoldcVyGencaj(j$&ilxBQ zQGEO3+6IhNP19kb8xU>o*IE=ruItSGb(pg>)2y59Uq8}Ucbk9l{?rhRpOrgzYT8YQ z@cmX@ixm(cvhvXlS#UXHqjihKFrMPky|U62v(XP|uMA=t%Sw|Z>!)gu+1bZW8k6ym z>1G!+%KcV?w#M^QhK8u^Vyk{B?bam-y1}*1cY3*cE^iY0V!T7%Z_`L>qgk#+eZahF z%dig75M87;r^kOQ7qtN!|& zM$(Cb&KcYNUT{|3qIwm7sD_x`#IXzB@;bDxSeii=;bSmd*i`Sz(-UzSkW?m*I) zu(2w^@!5aYi)`W1^K7*;o73L)ON;b0KH1|CFlas3mQ;z%sID)8|0umr`o;Q4+{k-X1AqBpymdmzT=ZG@mmwq0-c*dccVRtWH+9cZ5Vq zXB_L>UWZL}3DcI1qoT6BgB86&OI#8QzorUUzt_GO zG%m&6viLzj>z><3Dbg<;yeA|oFenVpG`YiG5Q*~RXvdpgPZ@O|!>Opezww zSVU1e4o~I6y+A@Bkvqv@b9TNS4+C6XOSl#FJ26cnT{QA-kIFnA2NwCh?@MgLCeDaK ze4W{2w$zP*#iz;ugsNj2fZ>-VD!cwGm$a<=@^3cN^wA+g#go`+=lGp!!V?)6Db|1b zDisYndK~<4LnpFg1LJ9VL>F&2_Kf_kuw#aW5u}}+AI+S`SVa!!VDw;y%vtZe#!Heu zhdjKMqN!Mq7wU$@!{_lfSk7~e1Q5|s3u5p9a7xGXBTv;QaHeyJ{MHkaAL!o##;~sI z0!<+2vSzblL|n5E>$qgR&F>hDxE_DjZ|PTfmNPKKp;fw|Q{Re%lE0%Lal#&KQ+r8K zYPl(9h0|UZ$uI|h8;zGf49NXvZQuB{VWz-*cx0gTs=YeWLqiy$hb4!m&m%=xnL=f@ zDLXb2rAI$3M;X-#f6;7Csfuu=CYJk0#=yGqeUj8I4uL1rfRH(7-;XXa&dq-6@vaO!n#g?M;A~J5@U(JB@*N2Q}Xc= zIbEJ&1#L^F8|yxPtpCdP_lm%K2zr{U)8CTWGQG}^#BjyeT-pTMDAG~(^vd5(#l&eo zjySL}dlz1PN=iN5rLkjn-Qi7pIm@Vr*!)(daS;Q|j~xNRF+1Kk3cP>4V4>RIvS0%! z@LojjhIev~d#k5YZ)S9~Y#IDbcn7C_=BL|+`D4u7Ymmc7IG_UQZgN8_vZnO;6(As8 z{F6A%@Y};?&zcxJ$Hjzeq#yNkC(lW3lEQ!gw3G3e_B&>DMhPtyX6L{KH9o<&G-Arw z75(W8py)&47_61GF7ki*Ep9RSNz>j~(rMacE58^PGga^7M{MfGFT3Lx+XPf(6@v|9 zKu#xKQc;6*j1n=0ROaMbBE+|k+J);Odz0q^$jf~M+g?2MHxs%J@LP~ltUi2-xK#Ih z(;0A3aYP6lHFvcrzm+~jEN$TU(&(2qam2cl(EK285q@N}L}7ntsPH_EM?Ws?PyCYt z1+RV^al;U>4fep1XZSg~yU;WjhJ9}7YEI02VvvXdthHQr@%T-e*ygAG3!u zig<`v7HrF)q+VtI%zBk}J_#MKUo#*o3X?$a0u`=*9t4bC#~<*ZWkllioS5_EqkFE? zV;H{h<)S-UYI=Wgqq$+k6AH59iK&UoRBKqTn_X_4``#x_|Ex(GppTlj#gZGxWwiM< zOtcS5qJ0SIE8g;cJ!@Z3W#*D8bXQyj`YlO3duI6uCyBT11_?RIW{q5HOw{%~7VrQ= zeoV^9FqEJi-kITyiq++^Nl>e{|Ib(-<2RJWwCnliVUK^Yn05O&PeL2PH zhtE)udT;BIB_xAbG#FQ}YuW}YKP?kC=vHMiUJR2##}m)B-488&$oJ2OLJdUea5>0d zJBjDL)3m3!&}}cFGu3a0Qg8&gw#D7)H&jkCQ zwac2#2Twds+xFTAGpv`YS&&(B(3BABTxiz$qpQezbVsRf_$Q-mbv#C)QH@j|;~!AD zx)v~(ta*nK|K5gpE1~77c&y#01-9lvRjhc_;XHr1juTh%t`kTzQk85*#uJ9-sC>un zt5AX}pwj9AVhX?5Z5SnQumD`3w~O`Iibyw^oGL73XFOE2zn7SG~j)|)!*-U!(A z(m{VGM9wkGIae!9;74ijwa4U=^pFjM!V4pM@L0%hJgVh?j9135Z$Wp^*snK6uo$)y z_eG2hpRPVvYH3LAAv+-c(up*eykcRnqP&vS#TIkfjQJ?k6kqM_xcsJ(xa zw~aY#LBQ8K6)wTnoRlAYPxWZ) zcih~S0knOh;qu*}UyzMfC--vT%tq8vDn43_6%D)VQAmD4BeA6lY>_ zQ;mg65MQ_ptY=#NX7AXYV3fSzDB*vt`pMHCnN1+B>?n1TV!M|4t5|mjf_j{K0=;uD}MXI1F`{nj9-Jf4LQg(mF*G)e<-sa(FD`LTWM7%wIafzg$r4hMpn}s*d*sq;b*$! zL6cxmt7pvZamz%6xP7;ta2Q&~+ zZwgGaz9aVOTL*22`z+vXr3`;l(ZfjeFc22Lni9N7jH9tisT~?BIO}#37itr<-yd%F z?E?D9kUzXecU(^7Hd+G%he*KFC+$Z}23giv^bHCk4WvRq&xT-C@qmtI3;UMBDd%mP$3p(;~g}aF704*tB^i6$nqVZ)zescyqq$2e7>446Z+_Eg2qN2(C|vTq3TAi0(vcS*CKtl zCTl5~C&@CFU;ZiPUJBm@nK{K-^C&BMZ?tA`y(LBH14+-1*-liFvZz7j^@&hW+k^`; zHMe*w>g(g))3<+L1Rd4(h*ed>0m~1P=$s`@g3_N4+sKIf@@*EF!BzywoA2}oHkH0}&>2zNAH!O#5 ziSfcn%H(H7GS=-L5cBs#_Nr%%MU0hr@u7pF;`aGdNv(gdXCME#N{2l7T=Nm(%Dv)j z8^!9?FfL-*FnkZ-vP6A3PtYsgVDTFrMF%N8P;O6*t+uUA(I(fZ;PRJDwqg`w$EiV| zk?;#xpSz@{#I2%61@>7`wZQo_t0>^UbX0&RWcD*^maQPY`4tNUW$C5NN^$l|+*?Y%6y5gsn+h}Y1f+o7|2(e?Z zzKi8hP&&WuRkl#0BYghQMw=v+prANQD`X?KNWT(iF3V5PIZd9$h+nmcDuWIvWL5Xf z|K{KWlEfnennN*n-}->} zbAVJn4W|mJ${Ldo`bYp@ifN3V$=xFJr8Hf~LkD;RkZn$jhdAZu?eV`{g>m@>Q$qNY z1WXcy?dQ@k>8_OKV4}uv~8W$JZ#utdmi* zQ~Q6fq8QL<`1fmfH8Q7&-7VAwMSewMZjQyI_Eabe0GZm(ru;DhOJHMbKnx+`Q&h(= zob~TE*sMqVIasE%fo*d+=dIAn6DA(V7kD+&ia}Bq$#EsSnQwozjhzxoAT z>Tm}Ej+uXYS?jN<5D6%szS0&Xe3NlbKbJ`5MLPnOU$z??L3IfbRv zB_jF<%>x?K{qzRgM%(W87d{bM7a3etw>qaH*_o3Qg!bNm7Q;`}i3X-zyL6F6<}v6d z74dDDLl~tQO|ybET|z^QcvH~ZEIX4OAra5>1L1=e$EK&18pu)uphlAK+n4q3(u|>~SGgZSR z5W@Vq_Ji`PIA+G8NaY67m6KM|S;ei} zgif9WN}ZLWR&_4F>y~0uD|EE|P-ZP9Qrmg+NjfL3F)@t?!hGT{g1aG7@g#_mwHHjN zfLUDA9RD1psG~bCtv`llB@R;-%b}hRjc?EGsU3}}(uXgGYvR8K`WTZxr#^qFgzn6T zgFT&H-B`2t#x@r|{9??!v_4gv3`0}qG;)*UepZS3ia_H>wwTwW`$URKFM1K)F0?Oe zY>9KjxI8V1)mvk)gMhLyKe}=ghsY1N9-NaIid%1mWbSJ$1NRo%25IYuM?ohmNFY4Q2t@aSCl(d$!Ew<*if^k!_3@p8fIo@W@culhT||(!)dr- zX6A;OnYm$R=;qsd_iBHvw32^##$#KutjFVX&b&jVQkHbdvQ+0qD<=HJ7&o%Ng0C_p zlHyuksAroi2HqK$w75M}b{j%7K&|!uBUS9QZFIxq+AW~abolgnN>V|&*BF(?5O6Gv zX5Po!{CVy!MYLZ}DUR+3Cwrr4(NBt?3_e3wK=Q(IEAeC$HA1BxAM%IbsHlSeMFn4y z9Js;1M+kh$+4pBFrPNHw93i zIPvUNg^(>mC^n^>;b;$?eG~bb1(Qcz$XAG7NBT0c3Ycun1P|0Q5@4Aw*FaRoFJm;c zA+NCb??I_k?)Z&G62NkPwEAIfDNmmTx?!hT1-99E=a=q^=gF>!BT}h>QzDL=ZQkl= z^dHPa>gmpK^mkB~iXkm*lfLU`-Y?zz{MZQ_x;gsP8Hg*^^!eR_c{NQ>thicNM-fo6 zM#|6Y2j+sd_%kff5>F@|dO)eLyT2}PtzDHf{iKZJ!0v*!Rr89IWYf6-et=R39=Jk!0dS;U zapau_g%+`iTq~XH=Z^d${n7$@bkW|$_L-VmL{DW|;kRzjKt&(PIl!rut22-7yUiwz zqwf8R(iv`cKB@*pR*ILN*lj(nc9Xx&xbuETeXhtE)V4h0nX?9gw222H#i@n+eA6d} z1kRnMGRQ3hoONsK!rC>A=5;InzD=J8wn8S0#{eBfk-dP&v8R7e55|E(SV)>toO`bM z8K%UWfz$!SX)k)CFHoY6&?l5d@LkNR>z|wy6PRD8pI37xiP^t0O%N?^(o~(?+@&Dm z2b7WeLvB5uy;dgCbvU7RQ#b%BriBjtrvsx8`E7W7F=2<#Ly_LL$uK zR#JIVkXvo5A&F5JMrAD70r4It&W0Ws=_1qr=rr6>GYpT+|6d5p1sw2Yf99NrK z5QWs`Lkr#}NWj>lbm4S6!JGz1AWah{RO3_L$7{*g@d`QbTvKJ0EIbACp_mrakNG2o zkS`;24)|cO?un-ImIDP7jZ)8_-i803Vkl;vy zM#c%eWsdss1JY)kA%21JVcxmfIdaL3UrnR1IY2Gv2fqnkhvy!2FS39Wme3p{Ie~Q( zOqW3ScArBV!zMj?Om1gCG@yILrkYS-`(;XB4tpN$Ek<_zD|3SA-(PPGbKBz zejpaxZw53hAff*G@7W1vv|8}8N{R*|qg#}-nDwtoze}jqy{uv~RTuuY(F!Af7hLyi ziwW7NXo&RUrw&abQG<-`jh*(A!x_TA{zSH+s&ZG@&mp21OSLFu-|9Q!JAHIBPNb-M3tAIIB>>1*SXy+TIbk11bcuzFC*tpCpk$p@}ft<3=xt3Hm4}Zfpvk)+`BRwnn*7Q-`}69Ty|q`0perC6S+#+N1s z|G;>$E|fa0do|Wbv?ldS7ssPbpuK-$coWr$q(1ncMXvQN+P3E$Kio3YqJ`@%0zq@p zPfx$^Q!;26k`4CJGhan>bmKtKsd1sg;bX@F`I*dOt==g&Yl?~+KrZgISJZcmO9+M7 zE9#7j3|7f`%uI2Ca3n8akSckP@`z?0V+Z?9Vgyj=O@22{^zdD zOA=S}@23n*>(P|%zM^M{O%EmNbXCOY8U>*=GF%;l)iYGVUi9G6v7|pP^r4wycoYY6 zEng6)g|%&s!87j26d6mjGwJq-RZ#O#pNWJ&2pq-__)#fL+5PmHmIVL()`3yGZu6(9m-Dw6lrDU_(@ro;qT|Od|%pAZZvkoPsnJ;b)%T9 ze|)R$in(*I!so!}2IjO7ojp3^+w^K2UT#N6yi4xqmGUEWHV=rDW>G?iYh>+2viH{k za~%pMH@SpX1Hg-j4gp%XW0H;NFj1iyedQh*m##fvc zEkQbhrm%fQmk54$D0d|$p5J+E`Yl-@w9+`;1V&(XaFo2Vs>AF-s>LMcP=1p`3@n0Q zvIVV7E9nyEs_180qb24THD@S6BAf*IGG5el`|#MTKk#sGZB$5_7vu9cYFg{|)cu)! zBedn1Kel|z9i9dEz3D6LPpTmi?UA>%n$%%2zXahEe&%-tg79Yvs+r4o7jCX zG_9!w!=2G@44o<5KZe|tzVyQQq z`hH!}Td2O_p|cm0NQb>wVz!}5z-vI8Wwbe)LUt>WrBSSkPU^rAtbfNsRQZ?aZQB~L z_x&E`hE!4CIrsRKL>1pE{lMg%#x1_|vM=>uY?GozaI87adnUZPwcRYw6j=FJdmN+_ z2W%E226VDD{4f@AVdti3Hcu`+X~{D?L^U>CruT75YdTT2`c7ou0%~zoph?(hkp^C~{jzj&!z$ zwqsUpylnuZBX^C3&}}RVn;mY>6B4HyY?{n83PvRz9+u5&NKY#V+aaprkg)ba7~tym zcNo7`fXZJla#BsI056^RY7=WNH*O6bCWY-6$-mTydQ2#(SA~bR=G%gWm1$;DwS7!h zrxkl;^2=i#w}((yOM_(-Hp8F(0(aWR=0uMOkgRCs&L2*ay_3nR=V@YNf96;q3Cwj0 z;e-ic+{M*3gk4U?csxvsFBy^g3V;C+xRFLwB9q}Ib4F0Zmyjr9exYds`W9{b&pxS@ zYwyBPV@q=je{j)~CS1<~PDgnrf#y4t@qeRx0*i>{Tgq0|Hw^{KrcRixOK?OJN*EvL zs-fg>4BtRQe;WF^vFnic42%0Bww98w`$n0f3@c$jxCr_7;cj3#f9(F!{QwZat`O4P zaN!LRfq*cPkO!tnsBmMiO}lCJZm-i>dD*-eu({g~1Rd-dv(myw1z?p|xsvL#yTr!m zhLZ+Pjqu}@iJ>C&MSP`%9-r|ps8k8GWM$4Twi=3-W98PZy<@kL$(lY#D$;=N@6_MV zpjNj4)@P9VlePE!4UAC3KtN5DQ5$s4zijr_4aU^NkjKs_GQ?SZd7Au@=BNC28JE)$ z6++HAh`wUB+DK%WLhhRgt}{FR#)GrfUJ(!%U0%x*~t7=;?>i-WVC z)q>fqXtFce5#4WhqeQDzlqe;p^CPWnw(?*QjKSXwZiL{$R0zpcRPg<5)yNEO0Pkd~cIwUpD zCOUW>k&p=iSSB`%8KvHhO1Xv;V&j01yzuYtt2Dl8_`gzaM9PK{nf((^GHG)~DhUz} zu_T|~aBmqtY@Az155V8|{v%wu7>s?7u*eY@Rt1{hMt(CYHD<(C znBDZfWZ$?u5Tv7!=?zdY>jIVw_3YYXJ{;N~4I)`aT`jS|>b#051>h>nuA8x~XK=*s zr90+2`XWe&_v0I@sj<=ixd{~Y@+nnnv69GhzmJY`ZxYQo4z}=W;$=aLfqjulLRb9~9l6~j3*+lM__fJxX z=-j^SxJ^Upz2t-K`dtir6`HUuno(5PceIH1ja#6mKrRA_b$uLV8 zzqz93SUPyw3y`BC_w%l7xf>jg{y10A_n&0xfEv-$l>P!P53 zvs1NUvK--hqiq%%;&**1M~{H1-fr&dKBnMN&g4M_Q%x2{`^k+aLAE|ac8O2tQ`)sje+RA?GH^(H8`;I@__mI4P*)=9AQyE#?sU2(eP#XfLw zd7SV(G00Ku;AG4id;`A-B+~5GjDo`4*dY7F_0F4}GcOu|CAbgUbLtV#a+sKdoQ}1M z#-i!%Ijv`-w5b|+3b!nVd2kzHt9kyEI0W`Clw+o45bGs*HXqzK$e7liJj2Ghr^XdC zJV1QRlvxA*>Uk_})ltyb=V7)yRJO3r!pB%xHX4rwxOOGrWCZC{g)_z`Cf~`^ShAmv zboDc1F3_54Y4#eCvmr=SB|0_eoG(Hm>MtC!Bab3XwdPfpkuN(|=Ft>pSQVWCV}QS2 zmx`2VYi?%`b&whBb2SjANF%ip)yY2dG%c92ShEdPb8&9OYjW3t1>Kynfx4#Rx3Kmj zuBl6(aoIoeWrY``FPF-Y@KZv04Qt30{+Di?SG~%qbtV$dtNal00FzpQTNQgQ)500G z3Hro(eQ=J+NnJx{q$x_AXi&okH}JNy+Exf@>Tvq0+TBk$l0Vn;+1gjSi~hrv^__J) z^h@8Lv`?{d!J3c6>+k57^n@{VZ7%f>pTi8et*gW2h`p~W=nMMr^bOINcLX&5T(~P6 zHtl6auH|Z)OB7tUt-jY-jEJV_OhfZmQq5%Rx&;_j=#d3ZU8xa~Z!hCDyMQrlpJo}W z*sCI^i5N@UZ23VjmWutUmK!JdoDFDn?DsK| z1BZ1?^H%q2?DM*pN?xN?KHf%z{WM`p#KwCBt64?y>PYqAAF1@8dTAi z%+6I=<^g%~)HoVgu&T__uz<|rfsP%^)f~I&U!1p_LZ!vm^bL7`pRUf|JGPK1^Pt1w zrs0Dh%~hO;!v$PWhnam+U=SBvl?n4`Cy6x=@)8yN*_sVWgg9>`2vw?Kztk3ibA_Aq zbqT0JhM-(uDM_V4>-#+81QQx=9| zF{|qmHZJ+>%_{%`<1M!Q|EfgeZowslideT5|n*P^#XSws5$$IYHbBKvg`fj#8Ye=f%HzsriH)F+Qycf(JR~K2!@}IrnaNutD8khLHaz#gn8O-!g#-$IxC#=Lt z%0)j4_j z08t}6DF|nP6lxWx*WXMM+%slJcaL}o{g5G&l^F;iZ3e|j0^H72r zr&}ET2x}aaz{?+SZSIcs2t{e4KH9yJl;uY9=KNTJLkYY16D(@y#)_SV*qsBn8P$j* zwcs8tt~v)u?%09E22>*2ChXEWr{CQDdl-5F&x~tTJ5aCi)lPwn)R>l_on{wEuj7C? z^0VxcmAQV|a1`=`)`AuTI~?+zPTdQOmQ|@%N9bo%6YqinbDCszR2x251v$1&P5QVr zovZeZrG7?#;y8W^YGxbXtF@V;8pV$xL`fiKLi5lBdjtA_}N$}~wwu|O0^x0o< z{#3?{`;D8*@d1TFg;~oI>jFWB0z|@L{{6 z3SrUyyAqaB&fLM$&5D?tn=|c8O@-$FaN+L1xo|BH6%^=|5P+NsQCGK8As5#LL8tN` zF8G(UQ`IzF_qkN8=<9#%#5jCDztqn5zaMa}YGVGoEqSTG_c#5wK~#{5$N7{NoIADM zMfC3E=lzQHPw(inFLz(p=jyWL=AE2tTk+$}{93bSIy(mV29*5MOQ7uby9XTON?Odf z`1FUC@3`zSe2IqdY_DI=o$+g*Iq6apdfr`dk56>7eAQ(j^Rl6MiIn=O*Q$B;F4R}= zxDdx_DExyOsigOf&!^8gU(S*9zrpx>@@9YR`g`XTY%*+p!XYajAIf9+M>Y$l_A&0? zqiuf{)A4z=0{HPYgfu3Yo125d08&W)nC0#0>y7g2e%`uWg7E z!VAFn^@1a|MFW8u)dj-^>4X<2rrN~(79awW4Vec4NJ=At$FV>QAt!-@SX;veG(uR5 ztANkJ6=I6gNzsO=DI{woRHIh&o(KouBK|>qGlmd43>5GzECPYyEG?>7X8~!3YffP( z%2x#K6{RgK6B)+m!snj*;sQ^x`~SrS(*NcH;ujYPzPJ#+_OHS444j>$)OpR>2HX$lhg(cWf2JqCg>_2Y zmaF|27@WSqV0r@1ANC(G-2Mj)0}3;inR60=odh0Vst<#YZJFfbMz!}qs`or@lUBE6 z)3d5#tT(+!O_;^_Q$-lZ@RMwuep-U60`w|q(X8w6lcwn{bK)%HHlXz-@ZH_H73uz- z!0nBCdyiU&^1?lxyj?6CrjqN$d<|)YhF3Uby}xz&X2nM&3bxJE2ohaiNMe7$uXJD` zrV0CiqJuFpr3rXJ>a@iCfUE@rW%{oyM9B;C84Qex<-gL4uYBS^=>;qIPZSDdZZ>AP z|HBM6Hr6B~a%$j0SJ!cU2+e=FW@n!o&i0BkkIHD+`4@$P>bmp>L|>o@bF+fGGc~pR z>)G^#!3eqdXyW?tAL6#o^Ye+P$%(1C-&o~&p;*OEa7fKYBK^u(6MxJ{;e~hg=0see zB(A!o!TgtAr9b@T*6H@F4rC)nW353A11@ic_dV0^e{Y(iZkGHKjsZ z*yu4_iM8)Uj5VwJ;3zkQY!e0%?&nIAgh;7y!A$!sxIzt_)}`Q@arJu%{yNwhXM{l! zn_)tKOAQ9vs3v3@laLx0LzAcw)QpqCa&&C0V1*<=SYmW~RdAr_p{Zb*GMS;KVQVv) z9Z=Z+_K{&5kxCiM1WV`fnud)AE<9&7K~)FxDfAhEl7dwWl_{;D5&A&Vhdu}WAjXl~ z!SdmXT1H?}K$HqQlVh?oM(&Hnqq;%{tER3cYzzickAyOmW>|WuJmF&;sHCtYep~M7 z!}mJJs?cS*A~wT9U%TW*N=JDFs##fc?)(Ky40OQngq?uw=DMCHQ$i33clCQph4mUEjvvK-sy1BM=i6hg4kFheAyOfj9HgocOd|*hBn;MswH;{Y1ZZ(o zuqHEbAP?IJudJHLO@ul#M@%#uAQVu7_!!WN!*n3^EdnbHpL!s``g~W3Gr0_ZFYevO zEZP{usu%4d2+Pt6d@%K9L}dIes+Uluv=3PjVPvu8t)93>vgI&!Pa2a1%jrWoaBpgDqthIO206N~B-T7!R#%SSiciPDi;(_-VsZd@ z3K#~IA`1xqX2>S__yBFw19V>Q(vn`Tz+LJ~hs+Pf=i?73Z?pJbdf#DbT){O0Y!NdC z@5jQBL?!O>6&qv_Vok0$>Ll;#iKnqNqrqCAr>(p@N+~KjRulZf)6M9lyD76TpsN%u zkp&@qJGx*U=SSKU#cvQA+RL*+!O($u0~e@MRh?X0p|IZbj1aC|!~F~k0ZM^$N+M#$ zA%&#H;b28!O({hI>;7V5gvZrdWCu7D>C7;)o!&0Q<0^U4wLTxHgMBaD;qBlvtb=FE z*oW!j<5T~-i$a9uy@x`ND(Dfp`Wt`$0n6H0T?bl1`d8b|G!D?^TmKoTMq=O%tCe}C zH$DnYs3Qcb$~`|HyQnGEZJcP!vU*k~fRQ}8%YsQmAZ!_-BukP-Q!tk~eEFMsd6);K zyAg)L6P!R|dm)5_N(b(Ujxq#~YO6y5(lh?lKc~i@A=S38Z)HS{^5;n$psWZ}OP&aB zyM}YUsv@kIr|>*zSBmX)ukyfb1Vzz5o{1i$hMNAo8ZK4{XMe{K!unRt4Fvl&U1kh^ zpUQ7{vC7opECey8qUetThXsYToc>pcLs%Q^N?syu+D1*~dEJvOMyT?|ecpp2q4Drg z;IvH853PaL$ef)yYgEo>sb9Z2V4Tr-_k*)sYhX`Ky-ZXS+gva?g`_|^Odj7PukNfy{2aZOV;AuA!M^kj`Pg`hngJ`I%>D4vv+7QzY zIaiM{RuNa^K8Rt$<2zsg&8;*bdfR}M6G%=z7|tb*ic}!Qs|JD9Q(Dfp66*~q3_&%L zq8Zdrs5g!r<_uY38^ge0%i40uI#cLTJn5G$$0ubxopcxA^YvGud>st zUQ;0a%)x8#pGds?xgNtv2xx} z;A;JQwE6z{?b)# z!lm?v_cL==a4_Oc@2sm7*tXBJb2;d0+H?KpD36elBp{TdsdT0rJqeDBAbsD=3SyZ% za)m3ItN>pI<46Yc`L{j#3 z;?nP{vIpDaSMel$uYTw-IF^ro*eHiSIn_w8w%*-kE?Y7(bOSD*_rH`|nF%%-;J@W? z-CXg+x6;M6_G>PwNWU9GcU$Rg?a(U1>gU8<0sswVi$?{Rf)h%ob0KvWzhP`~Qs(~4 zMdLtbT7}Ca*4S^*wmAMmBjOzgwcYiWe+fRmKY8c{YZNG2s*=vnRsA&bBVI?{Qginj zwjp(=DDr}r=zx+B6ppLyEPO#hD7&d#$9@T?UW!Uszm!Fxg6xU9Sq-zlOr048t^;O& zhJov<=M6fG2Gq8yvDxy7=5C z4+2?R!5N2&?A-F%$*V)S69xNeO6q@F@x`%>W@<@qC*G@2LIhyFiw~otC%hm#w=Gr9 zJ5i)WP%*~4Rk#o!al_8BHw}=%vmbs<&j2n0q59(9bih#QANzOf(?Dw5h%uO%#;m^5 zQAv@f6RW0Q8_5-e{2B5`XXF`GB^9F|_jnm;Ed`5a%uko-ey~kpIXkLJt7bgqYk9v! zh5UZ_KO8N7srsDSROkk38Y>I{H$2(gn5OhnH;rM*uKum61WD+(Az6tf2Qhqi{{X|6 zj80<4QEo4Bf0CL}$Tl*~14J)Lf6}Yb2;a5KFiw=n`N6ChY3Z>EX2GQCBu4U=PA$!Y z)Qz7Vj!zzkS#l%)My||cEX)*+lDwp`%s}7XFgk(Caq@bQ*g+blQ(fcQD7wI?8j^w0 zsLIRoda?>ZY%}?#J7;ZrM=W*eZXiK$RP#3WU0oxZ!~7CuteR2L-~ZwM?QT5j&OW)% zdk5y&k)f~`mOT^6jS{^ztg&idm=H|oAcmhDn_hN8c=hf6WxZj%WV`3rgg{kVTEWYB zLDHbxh9lZ%|BciRU~yyEtI$r@JiCmW`EI=*F=59XExoi-1hIWTP!aBj05tgB)($mX z_U0GQhNm84J2AP%Z!mY;c?WV^@p!&nrePn~xSTVLtv_&_Glf+Fwu5jbVqpZfro(G1 zk@PFtDZ;~pkHkYL4q(sAJR#e!#1fvWg-~?EW}WFGGPZwy2n^-@Y2{~g^Eu9|7g<-) z+fNqzgaOsNTfiQ2KYzUb0nE@n-k(ms?OW<^p&Zz6XdfT}ykNBbJ$;*~TXE;BT`Tag zt(m^)mVxwn)=MZ0`Q!=pnaE_l{kcN%PQV4|YhK31-ofid^xYMsCh2vajqi*7qYL~W ztTT#mTfXo?^zpf(-`Q@~I<8rpXoOyW2536^o| z1s8{6mn<_X0uHM_ZrlWun*T!8_XO?R{*o<{E}MFfU(eouBI%Xr33qoIDlqNU`SFSf z{))569U_J4*5!JEuWoUw4X1~Vt1;;G4WrjZ<{%q(l0E7MafDWY^x z*{rn8Eje7ioZt-n?a!_4AQwo|?=Th8(V89WK$GzC%w4B{3;b~@F7w_cyFXv*J+woU z^S(E;LH;FYDA>Uz@ULvx^2bDpk{yvV`kel-qmy;wOYDy-_PrtB^3x~KRbLu&#a_Y9 z(vV+86M@ECoYNe$dW>2Laq1zs0S=}ctnmWb+jK)oFZ5b`FYn*po#J{b-g>(l-|c@q^x={qz!v ztboORQ{YscGFO9NGpCQ_X-}X zn-PVCQN$0oTNNcACeV77cW`((h9m=tWv_&U#s4?4dNRRhe~=)d&pQssSfjE=DI%PB z{|XQldKMKe8K3{hQtSpB$uowfpG~v07t>$+>6v*C8johJKtzX;4e{Ly%X2nMfGuo; z1M0JJY8-`*aKFtL1t75Qwn4B-(0v}=lMFSUkHs7!|XP_DNp zUmBRml8MXCAh1v&6)|U-{o%g-YRXogIs?kz_j)SE3%=hgU{XF}Rc)QTtaRJ~cPp98 zU8)QxSJ^Ukn$OyZSMP=#BQkC1=4Jlcbso7CWv>HUcGz%bo)PtWsb0A3q}MdipHgn& zb^&R;foU{E^=VM6GsJ@o+KuG0?E>0})W1b#P6^DI=jV0V*dmY+Cl0#Aa|wRu3j?+K zU0%^pvlY_8jGVmYO-v_?(VWjNbzf`z&2I#Jy@DBCKk7}c1UM}byX7v-N)GQ&zz6=8 zN>A>TqIMsYmh+m4!kKo271FDCZw9j$D$O&}K3*0Caw{K5s>!eHWtB*eyS}+Na zpvR_dl4#>54$5#KY9phCozvm?Is#Y~F59}7r`a;;c}^t*(e+}a(aq-C>vx^*4|iq7 z>nt3TLkd5{YPIx&p=(bYV6e`R%6^e}Ne&7m*@0KD!d6f18drHw0}|O~=~K<6R=5&! zX{edV)}HZyig$ZwKDUI$=Z_KFjl~>|$#A7~p?+aOTNmLW9&8HZBHdTxNCPInhnqwS zIVeJ;+=l620#Cxk7mbzY@KqL}qikT5T`V1QL<`^ErP=SP+GSJielAv|*^MN6msDc8 zmrvW9^+z6j)QdQ-Vvp4KX*S--<3ovS@w%AP(%m~CiT4Nnt?ktbju3bg3+~A4@V>*k z{5|yXk8>B~@qb2k(`0-=;lS8f(h4IX1EE=1nAo}5IMe8&Ao2glP>h0%17l+UiGufy zgA0yP!rH~vjhLN-`+tUVSXj8yP{BZ{fmogG_=9Fd|J)vt_*Jmc6Hans7$*D) zwiDH#&{x%t)05|(tov<8x65hCX0c}DTOiyM2-Jy0f-1kyV-w<>DGDu&ZoqqRM?-4m z;9_$VsbS@uhLc^N%QBkb1i4wqm>n~2o=Ltr0lkn$f!ve$r}&mg4}TYZ`U1WhLylIG z9%pI0F@&0?n($5|KxyLQKrRpAvsJT-Fvp%DcrUb0*@y+734#7L`D5LW(slh8`vyK< zm$Sziidb|1izAjD5n@hZ+xvx3B5{6$KKB!^4<-U=2{A~sVdnzAG3Jbe>wB(p0* z%z^M745GL<0-RWKj5ZXlpN%5I5TKi%Gl2nxA!LPkFF{Oz+YcTXgi+xY5>#R8r!GyN zfccHODDjO8gu)D=9(;}oJQWLlRp_Xf?kL1CK`<6n*xQ1hUSp(k7(qxG461-sIS-aE z|4YfZ(D{y^uY|QgG zQa6nCy1YB7`);$p4E#9$WDAvu>Y4s1nK9p8j{mqS6}7rQ%XFkMJUWuSeBCRmnHi)t z{QibkeL<^z7RHXnqfiZ0jd7ACuO0G0UC7XU zO1JG+7qNAdwOWQ)hkU064RC5ZE-x3tQ?Cy2kXIaS?(3Ppehi~G0D|DFVVAn zeE6=k;uS$bslFv+Tl2J$#SN^u?aCw5g^CXN}{#& zLSm#G(Uv9>R9;@XsNPtPaz|*54dz0U#}Gnu=5YQCIuqXbOeB474&d;fw79I=sH1~7 z#tW@&Lm6V<6dQ*EN#f@4=C%G(ch+XHlMO>}j`jW}S6c?VWZrWs;m?C!c@by6dQv=l z!qZS?J}+Nu2Q~shyIe>;RLP^CmhJF^SO1Wvv`fLm9P?Dm9MecpqdG_@i&MOCNv#8M zeXz0$VH~&d=-hsS0VuXREUJ`5AGhyqmuFlowO3eM&s$tKFgpq5?A$1}Oqy|HV26_5 zdgEoUd9Eypp|hzz{k1+gH4d}>a}U<=`+J?wCF8lEp)aq1@5}r`b_s8#XhdK4^Ln^* zmcsr5KrVHfsv@n@lT4F51gj~-E-jwy&-pNYpfcR{24Bp<2O!Ub4RxNUkuOjkdw5P= z|H&r{FGit4TM@~V1_|v==*0w!Rxq7U%X8`VQpQ6|a6Z}kndf#Tod9zdr?~HxE&xSQ zsnFYzmiBqi_5Qi2dm!5pdQAYg584nE-Z$<}8>0P0=(lq4Y}`Axkt^s?BJEPfQ%I^1 zuIezYxvWPiyyXzd$rPvfutHi z1GWe&c9?6H!|@|Mf~VFJgck zy61cMF;Xy&jbxpiHKL38lEOKcLAcHO+%WS!1qh7650@~Mh5VM+Yc=7ZN#hKR?>RLSsVgnyvc^`su{hHb}>di3A; zsI@SV)VvnnUJty z6GfZaNuW^1H)W6}J2UaGtM@kuyxwbdt8*ICXO;4@0wagm+9 zM=lGUHsCn&#OCnfyBl<{No-o~kea{c|H7-XWmoEe}vv^sef0GB3s0j zR|O0?oez2Tesj?AEYq|n&>xN$7bA|1i_9NkkZU$FyJx`Ik9lfUqnQ83<wXjr5xH?c&8o0Dz${>#j5aQR4rLSb%T zDr~-~(6?2a3oUbY1t$K+rd=kkdGaDBCj(TBX}Mofib;m~j?fDd=OOjj57K8hI#aSP zu`1ps&{pTn7%?&7TEdF=@;4JqX=)YplZdVnxnFOJNhoDPR!7C@U1zJ9wNHL3%t{S~ zcxzixl^V^|6MI&h3p3-wX3T_cU6Em2)7w9y)f+2K^_Qs3sOBUfLh}EGT~|`7um-wS zI^mgP?5U_EeES-ICg^KK*gc|oWAAAD!E2=OZV)V_vc&wOH*c+KN-&%Sq*TaQJ!g{Ywm(56(bU7#fwzX(-##R%gUC0t1Bv6 zn6S_jF@Lv>gua(Q(?sK}`w7Xmo3SzqCZ~%>Y3+lZzJPq8(4tIBzCAa0L;m2u2kSTg znlfN-$4$M76~MG{n3^i_?t7Bk{$}dyQeT`rgOI~1n>@o!`QonvtKF_nnlycS-$$}HgrjuAJ%~=~JccaXi>iiSebs^q0_r}HaOkv6VLvl8Ipb6bA zpI)@$&p8yo7458>oNlj1qfBE;dY2L28VwtPGto+%Mszb+1JSvVZZO3YLO`~a?QE*4 zcP;$a;!|6XV16rlD^J015I(aU1=Mt5y#kF$Y~LwYk;7)&XE9Wudtr2tah22XAquPp zB`J(iT@hjmP@#=MUBU20@V=e|;Dv)P%p388;EpO?3{Sixj2p6eHX`2%(-mssH>&6^ z+!3=A{sq;V`2@EUm_6DB+L5#q+y%}W-;uQwls(eL_akj5qzi~O$ceihur+SBjCL== z3%)gOxsMrhHWQY=>aQaeRs&{S!DWaBlBAzO0;1s!0TQ2Ks_FQ4bctO6kf8SfVQfT% zIz0eUg>V5uVGx_1(~FQLO!j@xg$*Un6iwb4QimJ&7&~%6>fAeseZmB7unrCpVoD$p z)R`R@6u+2xG)F6VC^TUEdj@u-eh-p8T2f_fdN&ecu4E#AwIpd>KdM|JKSy4+FsZ@! zQ9{nV6C-5f#Phmu7jU?B0G9M)D{5>I_7L;e4y@`MxdQ1Z;W{WaAumWIK?leQz7L2r zeoF>zu4dCFoVQoBi7(1I=!X%^Up+S?9_j280m5}8sqdjlq0=G$fRI?9 zz#MYMeI{bOeHdcs0*(TGn>QY8f^-EHNjjp3jEc4z`Vq_nf3ij3U7^?Fo$Wfn{zX6F z{H7s5|8+AUZvR0v3N18#PX@F^N-YAd_vc7lh%Z_EcW(62WG+*O{(!Fm_Thm{QKFTp zvj-IxwnXKhS#bx-g>VD57$+>X2&HK$;O;$lM?7cu7N?#w#*FnQl7V}fxD^JjyZk!V zEJ(ci7U|JT4UZC7K@AuC$NO2W2&qckj`-OfMG|-E+(7jqzZX^7IWLID5@qTY47! zG<&~4sDaiST~1!LCBQ?WDOp^;q_gc24?B9bwRsT9kkYvnu~H`Q-*v8S%yG8MXdQ5| z)v!K|CbD$`x#*}~q{I*|BE*ysF1|S}n0W7RjRY!!ef7L_8w_w>E z?>qK#b9&#}UImaQ*)i?dpVW&8=b8H24sgMp3@#`AG>a;N1C&M=-<#;0-od$qu$}DV zO75Ip1>cK@DL_vlfygwV!MCRo~EPP(>_)T#Vc|$6ump#mz!y6cl z;}pG~2N|w>;MFypy8en!WkBg_BbZLOBe)I6MF8`dBd8m=;^FN*NDq-)Mio!KCNrVe z5k(JxX$M~J^ojsQEC_}1KHOKk`U=Ni!Dr%dTfVR#U~+Oiq4POMFE{eZX4HIrJkfsS z9!PeB4GJFCV>aZ0RWTkQ%=LE?LjvgHT4B*&Jjkc+&p`Bx#!{n0r}bkaR&5Z6q+-SM zll^4@PZ8D25Ih9pi;)fomILcaF#?JU!v+fM~I%)Ts2bv=2MCT4mxp4J{@>*~1c-1=9mr;+E< z+br6T*0Ae5XjvP{RM2a9AJ#R@*-pcCes=a|KY}^Fs}g^7^=@`RUh-2p{p$yF1Pp+k zzG+B84b11f{9cuCgCZ}F1sOxCA=W(_(rOkFnt8KoWj(<01o=x*5Vs?;DQ14s$xMRS zTufhr%{;_FqVj(QQvj_0Wt7~E>X=a-GkRV|bIoYr8AU(SpJ~i08Rb7CVzXgDOlE{d y#+PP9T}E_fgkCmbrN{pkoB4Xl{SVA|8`lbDmz diff --git a/paper-l0/sections/background.tex b/paper-l0/sections/background.tex index 8d436b009..ab8c83e66 100644 --- a/paper-l0/sections/background.tex +++ b/paper-l0/sections/background.tex @@ -12,6 +12,8 @@ \subsection{The survey calibration problem} In the subnational setting addressed here, the constraint vector $\mathbf{T}$ contains targets at multiple geographic levels---congressional districts, states, and the nation---requiring that district totals sum to state totals, which sum to national totals. This hierarchical structure produces $m \approx 37{,}800$ simultaneous constraints with near-collinearity across levels, placing the problem beyond the regime where classical closed-form calibration methods operate reliably. +Subnational microsimulation also sits within the broader spatial microsimulation literature. Reviews of static spatial microsimulation often distinguish between \emph{reweighting} methods, which begin from survey microdata and adjust weights to match small-area constraints, and \emph{synthetic reconstruction} methods, which construct new small-area populations from aggregate tables \citep{tanton2014review, odonoghue2014review}. This distinction matters for the present paper. Our method remains, at core, a calibration-weighting approach over observed CPS households, so GREG and IPF are the closest classical benchmarks. At the same time, by cloning households, assigning them to new geographies, and assembling area-specific output files, the pipeline also produces derived spatial microdata for small-area policy analysis, making it relevant to some synthetic-population use cases even though the empirical comparison in this paper focuses on calibration methods. + \subsection{Generalized regression (GREG) estimation} The GREG estimator minimizes the chi-squared distance $\sum_i (w_i - d_i)^2 / d_i$ subject to Equation~\ref{eq:calibration_constraint}, yielding the closed-form solution: @@ -27,7 +29,7 @@ \subsection{Generalized regression (GREG) estimation} \subsection{Iterative proportional fitting} -Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts cell counts in a contingency table to match given marginal totals. The algorithm cycles through dimensions, scaling each dimension's cells so that their marginal matches the target, then repeating until convergence. IPF converges to the maximum entropy solution subject to the marginal constraints \citep{ireland1968}. +Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts cell counts in a contingency table to match given marginal totals. The algorithm cycles through dimensions, scaling each dimension's cells so that their marginal matches the target, then repeating until convergence. IPF converges to the maximum entropy solution subject to the marginal constraints \citep{ireland1968}. In the spatial microsimulation literature, it appears in both synthetic reconstruction and reweighting forms; the discussion here concerns the reweighting form that starts from survey microdata and updates weights rather than building a synthetic joint distribution from scratch \citep{tanton2014review}. In the microsimulation context, IPF adjusts household weights to match cross-classified population counts---for example, persons by age group within each congressional district. IPF has several practical advantages: it preserves non-negativity by construction (weights are scaled multiplicatively, so positive weights remain positive), it requires no matrix inversion, and it scales well to high-dimensional contingency tables. EUROMOD, the EU-wide tax-benefit microsimulation model, uses IPF-based calibration to reweight national surveys to demographic benchmarks across member states. @@ -35,11 +37,13 @@ \subsection{Iterative proportional fitting} \subsection{Spatial microsimulation} -Spatial microsimulation constructs small-area populations by selecting or reweighting survey records to match local-area census constraints. \citet{williamson1998} introduced a combinatorial optimization approach that selects a subset of survey records for each small area using simulated annealing to minimize the difference between weighted survey totals and census benchmarks. \citet{huang2001} extended this with a deterministic algorithm based on systematic record selection. \citet{tanton2011} applied generalized regression reweighting to create small-area estimates of poverty and housing stress in Australia. +Spatial microsimulation constructs small-area populations either by reweighting existing microdata or by synthesizing new unit-record populations from aggregate constraints \citep{tanton2014review, odonoghue2014review}. \citet{williamson1998} introduced a combinatorial optimization approach that selects a subset of survey records for each small area using simulated annealing to minimize the difference between weighted survey totals and census benchmarks. \citet{huang2001} extended this with a deterministic algorithm based on systematic record selection. \citet{tanton2011} applied generalized regression reweighting to create small-area estimates of poverty and housing stress in Australia. \citet{harland2012} developed methods for creating realistic synthetic populations at fine geographic scales using iterative proportional fitting combined with Monte Carlo sampling. \citet{lovelace2016} provided an accessible implementation in R with the \texttt{spatial-microsim-book} framework. -These methods typically operate at a single geographic level---producing estimates for each small area independently. Joint calibration across multiple geographic levels (district, state, national) with a single set of weights is uncommon in the spatial microsimulation literature, as it requires simultaneously satisfying tens of thousands of constraints that span different administrative geographies. Other operational models avoid the problem entirely: TAXSIM (NBER) operates at the national level without geographic calibration, while state-level models maintained by individual state revenue departments calibrate only within their own jurisdiction. +Within this literature, combinatorial optimization and especially simulated annealing occupy an important place as methods for generating synthetic spatial microdata from observed survey records \citep{tanton2014review, odonoghue2014review}. Their main advantage is that they work directly with real microdata, can be flexible about household structure, and can accommodate settings where the unit of analysis in the constraints and the microdata do not align neatly. Their main disadvantage is computational intensity: they are usually run area by area and search a large discrete space of candidate record combinations \citep{harland2012, odonoghue2014review}. + +These methods typically operate at a single geographic level---producing estimates for each small area independently. Joint calibration across multiple geographic levels (district, state, national) with a single set of weights is uncommon in the spatial microsimulation literature, as it requires simultaneously satisfying tens of thousands of constraints that span different administrative geographies. Other operational models avoid the problem entirely: TAXSIM (NBER) operates at the national level without geographic calibration, while state-level models maintained by individual state revenue departments calibrate only within their own jurisdiction. For this reason, simulated annealing is an important reference point in the broader spatial microsimulation literature, but it is not the closest like-for-like empirical comparator to our setting. The benchmark design in this paper therefore focuses on GREG and IPF as the classical calibration baselines most closely aligned with a shared weighted-microdata formulation. \subsection{$L_0$ regularization and the Hard Concrete distribution} diff --git a/paper-l0/sections/discussion.tex b/paper-l0/sections/discussion.tex index 54eb6ddff..9309c5602 100644 --- a/paper-l0/sections/discussion.tex +++ b/paper-l0/sections/discussion.tex @@ -7,6 +7,8 @@ \subsection{Configurable sparsity trade-off} This trade-off does not exist in classical calibration methods. IPF and GREG produce a single set of weights without sparsity control. To reduce dataset size, researchers must discard records post hoc or apply ad hoc thresholding---neither of which jointly optimizes accuracy and sparsity. The Hard Concrete gate provides a principled mechanism for this joint optimization, with $\lambda_{L_0}$ serving as the researcher's preference parameter over the Pareto frontier. +This feature also broadens the method's practical role. The local preset yields area-specific unit-record files that resemble synthetic spatial microdata, while remaining anchored in observed survey households, model-based enhancements, and calibrated administrative totals. The paper's empirical evaluation remains focused on calibration baselines, but the resulting datasets are relevant to some of the same downstream use cases as synthetic-population workflows. + \subsection{Computational cost} The pipeline runs on Modal, a cloud compute platform, using T4 GPUs for the optimization step. Stage 1 (clone creation and imputation) requires approximately 2--3 hours of CPU time. Stage 2 (matrix construction) requires approximately 2--3 hours across parallel workers, dominated by running \policyengine{} simulations for each of the 51 state-level configurations. Stage 3 (optimization) requires approximately 30--60 minutes of GPU time for the national preset (4,000 epochs) and 5--15 minutes for the local preset (1,000 epochs). Stage 4 (H5 assembly) requires approximately 4--5 hours across parallel workers for all 488 (436 CDs, 50 states plus DC, NYC and a national) H5 builds. diff --git a/paper-l0/sections/introduction.tex b/paper-l0/sections/introduction.tex index b67b421c6..ef2acca45 100644 --- a/paper-l0/sections/introduction.tex +++ b/paper-l0/sections/introduction.tex @@ -7,11 +7,11 @@ \section{Introduction} Existing calibration methods scale poorly to this setting. Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts weights along one dimension at a time, cycling through marginal constraints until convergence. IPF handles cross-classified tables but does not naturally accommodate hierarchical geographic constraints---district targets must sum to state targets, which must sum to national targets---without ad hoc post-processing. Generalized regression (GREG) estimators \citep{deville1992, sarndal2007} solve a constrained optimization problem that minimizes distance from initial weights subject to exact calibration constraints. GREG produces a closed-form solution for moderate numbers of constraints but becomes computationally intractable and numerically unstable as the constraint count approaches the tens of thousands. -Spatial microsimulation methods take a different approach, constructing synthetic populations for small areas by combinatorial optimization \citep{williamson1998, huang2001}, simulated annealing \citep{harland2012}, or deterministic reweighting \citep{tanton2011, lovelace2016}. These methods typically operate at a single geographic level and require separate calibration runs for each area, making joint multi-level calibration difficult. +Spatial microsimulation methods take a different approach, often distinguishing between reweighting methods and synthetic reconstruction methods for constructing small-area microdata \citep{tanton2014review}. Within this broader literature, researchers have used combinatorial optimization and simulated annealing \citep{williamson1998, huang2001, harland2012} as well as deterministic reweighting \citep{tanton2011, lovelace2016}. These methods typically operate at a single geographic level and require separate calibration runs for each area, making joint multi-level calibration difficult. This paper presents a method that addresses these limitations by jointly optimizing weight magnitudes and sparsity in a single gradient-based framework. We adapt the Hard Concrete distribution \citep{louizos2018}, originally developed for neural network pruning, to the survey calibration setting. Each household-geography combination receives a continuous weight and a stochastic binary gate. The gate is parameterized by a learnable logit and trained via gradient descent to minimize a loss function that combines relative calibration error across all 37,800 targets with an $L_0$ penalty on the expected number of active records. At inference time, the stochastic gates collapse to deterministic zeros and ones, producing a sparse dataset in which most household-geography combinations are dropped while the retained records carry calibrated positive weights. -The approach builds on \citet{woodruff2024}, who developed a two-stage methodology for constructing enhanced national microsimulation datasets from the Current Population Survey (CPS) and the IRS Public Use File (PUF). Their method uses quantile regression forests (QRF) to impute 72 tax variables from the PUF onto CPS records, then applies dropout-regularized gradient descent to reweight the combined dataset against approximately 7,000 national targets. The present paper extends this framework from a single national dataset to subnational coverage by introducing three new components: (a) a clone-and-assign procedure that replicates each CPS household across multiple geographic locations, (b) $L_0$ Hard Concrete gates that replace dropout regularization and enable exact sparsity, and (c) a hierarchical uprating scheme that reconciles targets from different administrative sources at district, state, and national levels. +The approach builds on \citet{woodruff2024}, who developed a two-stage methodology for constructing enhanced national microsimulation datasets from the Current Population Survey (CPS) and the IRS Public Use File (PUF). Their method uses quantile regression forests (QRF) to impute 72 tax variables from the PUF onto CPS records, then applies dropout-regularized gradient descent to reweight the combined dataset against approximately 7,000 national targets. The present paper extends this framework from a single national dataset to subnational coverage by introducing three new components: (a) a clone-and-assign procedure that replicates each CPS household across multiple geographic locations, (b) $L_0$ Hard Concrete gates that replace dropout regularization and enable exact sparsity, and (c) a hierarchical uprating scheme that reconciles targets from different administrative sources at district, state, and national levels. Because the method still solves a calibration-weighting problem over survey-based microdata, GREG and IPF are the closest classical empirical comparators; at the same time, the clone-and-assign pipeline produces derived spatial microdata files that are also relevant to synthetic-population use cases. The configurable sparsity penalty produces datasets of different sizes for different use cases. A high penalty ($\lambda_{L_0} = 10^{-4}$) retains approximately 50,000 records, suitable for national-level web-based simulation where download size and computation time matter. A low penalty ($\lambda_{L_0} = 10^{-8}$) retains approximately 3--4 million records, preserving geographic resolution for all 436 congressional districts. From 77501daf6a45d09336ea5916b0e23ca87d014e61 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Thu, 9 Apr 2026 20:40:49 +0530 Subject: [PATCH 3/6] Add benchmark scaffold with shared-matrix and IPF conversion paths Introduce a paper benchmarking scaffold that compares L0 and GREG on the same exported calibration matrix while routing IPF through a separate automatic preprocessing step that reconstructs IPF-ready unit and target inputs from the saved package metadata. The scaffold includes two R runners, manifest-driven bundle export, common scoring against the shared matrix, environment setup helpers, and end-to-end tests for the runner schemas. --- Makefile | 30 +- paper-l0/benchmarking/README.md | 240 ++++++++++++++ paper-l0/benchmarking/benchmark_cli.py | 240 ++++++++++++++ paper-l0/benchmarking/benchmark_export.py | 128 ++++++++ paper-l0/benchmarking/benchmark_manifest.py | 194 ++++++++++++ paper-l0/benchmarking/benchmark_metrics.py | 95 ++++++ paper-l0/benchmarking/install_r_packages.R | 23 ++ paper-l0/benchmarking/ipf_conversion.py | 295 ++++++++++++++++++ .../manifests/greg_demo_small.example.json | 54 ++++ .../manifests/ipf_demo_small.example.json | 48 +++ paper-l0/benchmarking/requirements-python.txt | 2 + paper-l0/benchmarking/runners/greg_runner.R | 53 ++++ paper-l0/benchmarking/runners/ipf_runner.R | 148 +++++++++ paper-l0/benchmarking/runners/read_npy.R | 66 ++++ tests/unit/test_benchmarking_runners.py | 235 ++++++++++++++ 15 files changed, 1850 insertions(+), 1 deletion(-) create mode 100644 paper-l0/benchmarking/README.md create mode 100644 paper-l0/benchmarking/benchmark_cli.py create mode 100644 paper-l0/benchmarking/benchmark_export.py create mode 100644 paper-l0/benchmarking/benchmark_manifest.py create mode 100644 paper-l0/benchmarking/benchmark_metrics.py create mode 100644 paper-l0/benchmarking/install_r_packages.R create mode 100644 paper-l0/benchmarking/ipf_conversion.py create mode 100644 paper-l0/benchmarking/manifests/greg_demo_small.example.json create mode 100644 paper-l0/benchmarking/manifests/ipf_demo_small.example.json create mode 100644 paper-l0/benchmarking/requirements-python.txt create mode 100644 paper-l0/benchmarking/runners/greg_runner.R create mode 100644 paper-l0/benchmarking/runners/ipf_runner.R create mode 100644 paper-l0/benchmarking/runners/read_npy.R create mode 100644 tests/unit/test_benchmarking_runners.py diff --git a/Makefile b/Makefile index 777619dea..7d5e99618 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all format test test-unit test-integration install download upload docker documentation data validate-data calibrate calibrate-build publish-local-area upload-calibration upload-dataset push-to-modal build-data-modal build-matrices calibrate-modal calibrate-modal-national calibrate-both stage-h5s stage-national-h5 stage-all-h5s pipeline validate-staging validate-staging-full upload-validation check-staging check-sanity clean build paper clean-paper presentations database database-refresh promote-dataset promote build-h5s validate-local refresh-soi-targets push-pr-branch +.PHONY: all format test test-unit test-integration install download upload docker documentation data validate-data calibrate calibrate-build publish-local-area upload-calibration upload-dataset push-to-modal build-data-modal build-matrices calibrate-modal calibrate-modal-national calibrate-both stage-h5s stage-national-h5 stage-all-h5s pipeline validate-staging validate-staging-full upload-validation check-staging check-sanity clean build paper clean-paper presentations database database-refresh promote-dataset promote build-h5s validate-local refresh-soi-targets push-pr-branch benchmarking-install-python benchmarking-install-r benchmarking-export benchmarking-run-l0 benchmarking-run-greg benchmarking-run-ipf SOI_SOURCE_YEAR ?= 2021 SOI_TARGET_YEAR ?= 2023 @@ -13,6 +13,8 @@ BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) NUM_WORKERS ?= 8 N_CLONES ?= 430 VERSION ?= +MANIFEST ?= +RUN_DIR ?= SOI_SOURCE_YEAR ?= 2021 SOI_TARGET_YEAR ?= 2023 @@ -37,6 +39,32 @@ install: pip install policyengine-us pip install -e ".[dev]" --config-settings editable_mode=compat +benchmarking-install-python: + pip install -r paper-l0/benchmarking/requirements-python.txt + +benchmarking-install-r: + Rscript paper-l0/benchmarking/install_r_packages.R + +benchmarking-export: + python paper-l0/benchmarking/benchmark_cli.py export \ + --manifest $(MANIFEST) \ + --output-dir $(RUN_DIR) + +benchmarking-run-l0: + python paper-l0/benchmarking/benchmark_cli.py run \ + --method l0 \ + --run-dir $(RUN_DIR) + +benchmarking-run-greg: + python paper-l0/benchmarking/benchmark_cli.py run \ + --method greg \ + --run-dir $(RUN_DIR) + +benchmarking-run-ipf: + python paper-l0/benchmarking/benchmark_cli.py run \ + --method ipf \ + --run-dir $(RUN_DIR) + changelog: python .github/bump_version.py towncrier build --yes --version $$(python -c "import re; print(re.search(r'version = \"(.+?)\"', open('pyproject.toml').read()).group(1))") diff --git a/paper-l0/benchmarking/README.md b/paper-l0/benchmarking/README.md new file mode 100644 index 000000000..8d68b3608 --- /dev/null +++ b/paper-l0/benchmarking/README.md @@ -0,0 +1,240 @@ +# Benchmarking Scaffold + +This directory contains the implementation scaffold for benchmarking the +`L0` calibration pipeline against: + +- `GREG` via R's `survey` package +- `IPF` via R's `surveysd` package + +## Experimental Setup + +The benchmark is organized around one shared exported bundle and multiple +method adapters. + +- `L0` and `GREG` are compared on the shared calibration representation: + a sparse target-by-unit matrix, the selected target table, and + initial .npy weights. +- `IPF` is benchmarked from the same target selection, but it requires a + conversion step because `surveysd::ipf` consumes a microdata table plus + IPF constraints rather than a generic sparse linear system. +- The intended benchmark tiers are: + - a practical reduced-size comparison tier, used for like-for-like `L0` + versus `GREG` runs that are small enough to execute routinely during + development + - an IPF-focused reduced-size tier on count-style targets, used because + classical `IPF` is most naturally evaluated on count or indicator margins + rather than the full arbitrary target set + - a scaling ladder over increasing target counts, used to show how runtime, + memory use, convergence, and outright failure change as the benchmark moves + from small target subsets toward the full calibration problem + - a production-feasibility tier, used to test which methods can still run at + something close to the full production clone count and target volume + +Methodologically, the benchmark treats the methods as related but not +identical: + +- `L0` and `GREG` can consume arbitrary linear calibration targets. +- `IPF` is most natural for count-style or indicator-style targets, so the + current automatic conversion path supports `person_count` and + `household_count`. + +The core workflow is: + +1. select a benchmark target subset with a manifest +2. export a shared benchmark bundle from a saved calibration package +3. auto-convert the bundle to IPF inputs when needed +4. run `L0`, `GREG`, or `IPF` +5. score all fitted weights against the same shared target matrix + +## Layout + +- `benchmark_cli.py` + Main CLI for exporting benchmark bundles and running methods. +- `benchmark_manifest.py` + Manifest schema and target-filter logic. +- `benchmark_export.py` + Export utilities for shared benchmark artifacts. +- `ipf_conversion.py` + Automatic conversion from the saved calibration package to IPF-ready + unit and target metadata. +- `benchmark_metrics.py` + Common diagnostics and summary generation. +- `runners/greg_runner.R` + R backend for `survey`-based GREG. +- `runners/ipf_runner.R` + R backend for `surveysd`-based IPF. +- `runners/read_npy.R` + Minimal `.npy` reader used by the R scripts. +- `requirements-python.txt` + Python dependencies for the benchmarking scaffold. +- `install_r_packages.R` + Installs the required R packages for the benchmark runners. +- `manifests/*.example.json` + Example benchmark manifests. + +## Environment Setup + +Python: + +```bash +pip install -r paper-l0/benchmarking/requirements-python.txt +``` + +R: + +```bash +Rscript paper-l0/benchmarking/install_r_packages.R +``` + +Or, from the repo root: + +```bash +make benchmarking-install-python +make benchmarking-install-r +``` + +## Chosen Interchange Formats + +- sparse matrix: Matrix Market `.mtx` +- target metadata: `.csv` +- unit metadata: `.csv` +- initial weights: `.npy` +- benchmark manifest: `.json` +- method result summary: `.json` +- fitted weights: `.npy` + +## Notes + +### Shared calibration package + +The exporter reads the saved calibration package directly from pickle rather +than importing the full calibration CLI. This keeps the benchmark I/O path +lightweight. + +### IPF inputs + +The exporter now auto-generates IPF inputs when the manifest includes `ipf` +and no external overrides are supplied. It reconstructs an IPF microdata table +from: + +- the saved calibration package +- the package metadata's `dataset_path` +- the package metadata's `db_path` +- the selected count-like targets and their stratum constraints + +The generated `unit_metadata.csv` is currently built for `person_count` and +`household_count` targets. It expands cloned households to a person-level table +when person targets are present, carries a repeated household `unit_index`, and +adds one derived indicator column per selected target. The generated +`ipf_target_metadata.csv` then references those indicator columns as numerical +IPF totals. + +External CSVs are still supported through `external_inputs.*` and override the +automatic conversion path when provided. + +### IPF conversion step by step + +The IPF conversion is implemented in +[ipf_conversion.py](/Users/movil1/Desktop/PYTHONJOBS/PolicyEngine/policyengine-us-data/paper-l0/benchmarking/ipf_conversion.py) +and runs during `benchmark_cli.py export`. + +1. Load the saved calibration package and apply the manifest target filters. +2. Read `dataset_path`, `db_path`, and `n_clones` from the package metadata. +3. Query `stratum_constraints` for the selected targets from the target DB. +4. Identify the source variables needed to evaluate those constraints, such as + `age`, `snap`, or `medicaid_enrolled`. +5. Reconstruct the cloned household universe from `initial_weights`, + `block_geoid`, and `cd_geoid`. This yields one benchmark unit per matrix + column. +6. If any selected IPF target is `person_count`, expand that cloned household + universe to a person-level table using the source dataset's person-to- + household links. Multiple person rows may therefore share the same + household-clone `unit_index`. +7. Calculate the needed source variables from the dataset and attach them to + the IPF unit table. +8. For each selected target, evaluate its original stratum logic row by row and + materialize the result as a derived indicator column such as + `ipf_indicator_00000`. +9. Write `ipf_target_metadata.csv` so each selected target becomes a + `numeric_total` IPF constraint over one of those derived indicator columns. +10. Run `surveysd::ipf` on the generated unit table and target metadata. +11. Collapse the fitted IPF row weights back to one weight per shared benchmark + `unit_index`, so the fitted result can be scored against the same sparse + calibration matrix used by `L0` and `GREG`. + +This means the benchmark uses one common scoring space even though `IPF` +requires a richer input representation than `L0` and `GREG`. + +### Why the IPF conversion exists + +`L0` and `GREG` can work directly with a sparse linear system of the form +`X w = t`. + +Classical `IPF` does not start from that object. It expects: + +- a unit-record table +- categorical or indicator variables on that table +- target totals over those variables + +So the benchmark exporter translates selected count-style calibration targets +into that IPF-friendly representation instead of trying to feed the sparse +matrix directly into `surveysd::ipf`. + +### IPF target metadata schema + +`ipf_runner.R` supports two target metadata encodings: + +- `numeric_total` + One row per target with: + - `scope`: `person` or `household` + - `target_type`: `numeric_total` + - `value_column`: unit-data column to calibrate + - `variables`: grouping variables used to wrap the numeric total in a one-cell + or multi-cell array + - `cell`: pipe-separated assignments for the target cell + - `target_value`: numeric total +- `categorical_margin` + One row per margin cell with: + - `scope`: `person` or `household` + - `target_type`: `categorical_margin` + - `margin_id`: identifier for a margin table + - `variables`: pipe-separated variable names, e.g. `district_id|age_bin` + - `cell`: pipe-separated assignments, e.g. + `district_id=0601|age_bin=18_24` + - `target_value`: numeric target + +The automatic conversion path currently emits `numeric_total` rows. + +## Example Commands + +Export a benchmark bundle: + +```bash +python paper-l0/benchmarking/benchmark_cli.py export \ + --manifest paper-l0/benchmarking/manifests/greg_demo_small.example.json \ + --output-dir paper-l0/benchmarking/runs/greg_demo_small +``` + +Run a GREG benchmark from an exported bundle: + +```bash +python paper-l0/benchmarking/benchmark_cli.py run \ + --method greg \ + --run-dir paper-l0/benchmarking/runs/greg_demo_small +``` + +Run `L0` on an exported bundle: + +```bash +python paper-l0/benchmarking/benchmark_cli.py run \ + --method l0 \ + --run-dir paper-l0/benchmarking/runs/greg_demo_small +``` + +Equivalent root Make targets: + +```bash +make benchmarking-export MANIFEST=paper-l0/benchmarking/manifests/greg_demo_small.example.json RUN_DIR=paper-l0/benchmarking/runs/greg_demo_small +make benchmarking-run-greg RUN_DIR=paper-l0/benchmarking/runs/greg_demo_small +make benchmarking-run-l0 RUN_DIR=paper-l0/benchmarking/runs/greg_demo_small +``` diff --git a/paper-l0/benchmarking/benchmark_cli.py b/paper-l0/benchmarking/benchmark_cli.py new file mode 100644 index 000000000..79f59050f --- /dev/null +++ b/paper-l0/benchmarking/benchmark_cli.py @@ -0,0 +1,240 @@ +from __future__ import annotations + +import argparse +import json +import subprocess +import sys +import time +from pathlib import Path + +import numpy as np +import pandas as pd + +from benchmark_export import export_bundle +from benchmark_manifest import load_manifest +from benchmark_metrics import ( + compute_common_metrics, + load_targets_csv, + write_method_summary, +) + + +ROOT = Path(__file__).resolve().parent +RUNNERS_DIR = ROOT / "runners" + + +def _run_subprocess(cmd, cwd=None): + started = time.time() + proc = subprocess.run(cmd, cwd=cwd, check=False) + elapsed = time.time() - started + return proc, elapsed + + +def cmd_export(args): + manifest = load_manifest(args.manifest) + output_dir, info = export_bundle(manifest=manifest, output_dir=args.output_dir) + print(json.dumps({"output_dir": str(output_dir), **info}, indent=2, sort_keys=True)) + return 0 + + +def _run_l0(run_dir: Path): + inputs = run_dir / "inputs" + outputs = run_dir / "outputs" + + from scipy.io import mmread + from policyengine_us_data.calibration.unified_calibration import fit_l0_weights + + with open(inputs / "benchmark_manifest.json") as f: + manifest = json.load(f) + + options = manifest.get("method_options", {}).get("l0", {}) + X_sparse = mmread(str(inputs / "X_targets_by_units.mtx")).tocsr() + targets_df = pd.read_csv(inputs / "target_metadata.csv") + initial_weights = np.load(inputs / "initial_weights.npy") + + weights = fit_l0_weights( + X_sparse=X_sparse, + targets=targets_df["value"].to_numpy(dtype=np.float64), + lambda_l0=float(options.get("lambda_l0", 1e-8)), + epochs=int(options.get("epochs", 1000)), + device=str(options.get("device", "cpu")), + beta=float(options.get("beta", 0.65)), + lambda_l2=float(options.get("lambda_l2", 1e-12)), + learning_rate=float(options.get("learning_rate", 0.15)), + target_names=targets_df["target_name"].tolist(), + initial_weights=initial_weights, + targets_df=targets_df, + ) + + weights_path = outputs / "fitted_weights.npy" + np.save(weights_path, weights.astype(np.float64)) + return weights_path + + +def _run_greg(run_dir: Path): + inputs = run_dir / "inputs" + outputs = run_dir / "outputs" + temp_csv = outputs / "_greg_weights.csv" + + with open(inputs / "benchmark_manifest.json") as f: + manifest = json.load(f) + options = manifest.get("method_options", {}).get("greg", {}) + + cmd = [ + "Rscript", + str(RUNNERS_DIR / "greg_runner.R"), + str(inputs / "X_targets_by_units.mtx"), + str(inputs / "target_metadata.csv"), + str(inputs / "initial_weights.npy"), + str(temp_csv), + str(int(options.get("maxit", 50))), + str(float(options.get("epsilon", 1e-7))), + ] + proc, elapsed = _run_subprocess(cmd) + if proc.returncode != 0: + raise RuntimeError(f"GREG runner failed with exit code {proc.returncode}") + + weights = pd.read_csv(temp_csv)["fitted_weight"].to_numpy(dtype=np.float64) + weights_path = outputs / "fitted_weights.npy" + np.save(weights_path, weights) + temp_csv.unlink(missing_ok=True) + return weights_path, elapsed + + +def _run_ipf(run_dir: Path): + inputs = run_dir / "inputs" + outputs = run_dir / "outputs" + temp_csv = outputs / "_ipf_weights.csv" + + with open(inputs / "benchmark_manifest.json") as f: + manifest = json.load(f) + options = manifest.get("method_options", {}).get("ipf", {}) + + target_metadata_path = inputs / "ipf_target_metadata.csv" + if not target_metadata_path.exists(): + raise FileNotFoundError( + "IPF run requires inputs/ipf_target_metadata.csv. " + "Provide external_inputs.ipf_target_metadata_csv in the manifest." + ) + + cmd = [ + "Rscript", + str(RUNNERS_DIR / "ipf_runner.R"), + str(inputs / "unit_metadata.csv"), + str(target_metadata_path), + str(inputs / "initial_weights.npy"), + str(temp_csv), + str(int(options.get("max_iter", 200))), + str(float(options.get("bound", 4.0))), + str(float(options.get("epsP", 1e-6))), + str(float(options.get("epsH", 1e-2))), + str(options.get("household_id_col", "household_id")), + str(options.get("weight_col", "base_weight")), + ] + proc, elapsed = _run_subprocess(cmd) + if proc.returncode != 0: + raise RuntimeError(f"IPF runner failed with exit code {proc.returncode}") + + raw_weights = pd.read_csv(temp_csv) + if "unit_index" not in raw_weights.columns: + raise RuntimeError("IPF runner output must include a unit_index column") + if raw_weights["unit_index"].isna().any(): + raise RuntimeError("IPF runner output contains missing unit_index values") + + raw_weights["unit_index"] = raw_weights["unit_index"].astype(np.int64) + n_units = len(np.load(inputs / "initial_weights.npy")) + if (raw_weights["unit_index"] < 0).any() or ( + raw_weights["unit_index"] >= n_units + ).any(): + raise RuntimeError("IPF runner output contains out-of-range unit_index values") + + per_unit_spread = raw_weights.groupby("unit_index", sort=True)["fitted_weight"].agg( + lambda series: float(series.max() - series.min()) + ) + inconsistent_units = per_unit_spread[per_unit_spread > 1e-9] + if not inconsistent_units.empty: + raise RuntimeError( + "IPF runner produced inconsistent fitted weights within the same unit_index" + ) + + weights_by_unit = ( + raw_weights.groupby("unit_index", sort=True)["fitted_weight"] + .first() + .reindex(np.arange(n_units, dtype=np.int64)) + ) + if weights_by_unit.isna().any(): + raise RuntimeError( + "Aggregated IPF weights do not cover the full benchmark unit range" + ) + weights = weights_by_unit.to_numpy(dtype=np.float64) + weights_path = outputs / "fitted_weights.npy" + np.save(weights_path, weights) + temp_csv.unlink(missing_ok=True) + return weights_path, elapsed + + +def cmd_run(args): + run_dir = Path(args.run_dir) + inputs = run_dir / "inputs" + outputs = run_dir / "outputs" + outputs.mkdir(parents=True, exist_ok=True) + targets_df = load_targets_csv(inputs / "target_metadata.csv") + + started = time.time() + if args.method == "l0": + weights_path = _run_l0(run_dir) + elif args.method == "greg": + weights_path, _ = _run_greg(run_dir) + elif args.method == "ipf": + weights_path, _ = _run_ipf(run_dir) + else: + raise ValueError(f"Unsupported method: {args.method}") + elapsed = time.time() - started + + weights = np.load(weights_path) + summary = compute_common_metrics( + weights=weights, + targets_df=targets_df, + matrix_path=inputs / "X_targets_by_units.mtx", + ) + summary["method"] = args.method + summary["run_dir"] = str(run_dir.resolve()) + summary["runtime_seconds"] = elapsed + write_method_summary(summary, outputs / f"{args.method}_summary.json") + print(json.dumps(summary, indent=2, sort_keys=True)) + return 0 + + +def build_parser(): + parser = argparse.ArgumentParser(description="Benchmark scaffold CLI") + subparsers = parser.add_subparsers(dest="command", required=True) + + export_parser = subparsers.add_parser("export", help="Export a benchmark bundle") + export_parser.add_argument( + "--manifest", required=True, help="Path to benchmark manifest JSON" + ) + export_parser.add_argument( + "--output-dir", required=True, help="Output bundle directory" + ) + export_parser.set_defaults(func=cmd_export) + + run_parser = subparsers.add_parser( + "run", help="Run one method on an exported bundle" + ) + run_parser.add_argument("--method", required=True, choices=["l0", "greg", "ipf"]) + run_parser.add_argument( + "--run-dir", required=True, help="Exported benchmark bundle directory" + ) + run_parser.set_defaults(func=cmd_run) + + return parser + + +def main(argv=None): + parser = build_parser() + args = parser.parse_args(argv) + return args.func(args) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/paper-l0/benchmarking/benchmark_export.py b/paper-l0/benchmarking/benchmark_export.py new file mode 100644 index 000000000..ff81da2f6 --- /dev/null +++ b/paper-l0/benchmarking/benchmark_export.py @@ -0,0 +1,128 @@ +from __future__ import annotations + +import json +import pickle +import shutil +from dataclasses import asdict +from pathlib import Path +from typing import Dict, Tuple + +import numpy as np +import pandas as pd +from scipy.io import mmwrite + +from benchmark_manifest import BenchmarkManifest, filter_targets +from ipf_conversion import build_ipf_inputs + + +def load_calibration_package_raw(path: str | Path) -> Dict: + with open(path, "rb") as f: + return pickle.load(f) + + +def build_shared_unit_metadata(package: Dict) -> pd.DataFrame: + initial_weights = package.get("initial_weights") + n_units = ( + int(initial_weights.shape[0]) + if initial_weights is not None + else int(package["X_sparse"].shape[1]) + ) + data = {"unit_index": np.arange(n_units, dtype=np.int64)} + + if initial_weights is not None: + data["base_weight"] = np.asarray(initial_weights, dtype=np.float64) + + if package.get("cd_geoid") is not None: + data["cd_geoid"] = np.asarray(package["cd_geoid"]).astype(str) + + if package.get("block_geoid") is not None: + data["block_geoid"] = np.asarray(package["block_geoid"]).astype(str) + + return pd.DataFrame(data) + + +def export_bundle( + manifest: BenchmarkManifest, output_dir: str | Path +) -> Tuple[Path, Dict]: + output_dir = Path(output_dir) + inputs_dir = output_dir / "inputs" + outputs_dir = output_dir / "outputs" + inputs_dir.mkdir(parents=True, exist_ok=True) + outputs_dir.mkdir(parents=True, exist_ok=True) + + package = load_calibration_package_raw(manifest.package_path) + targets_df = package["targets_df"].copy() + target_names = list(package["target_names"]) + X_sparse = package["X_sparse"] + + filtered_targets, filtered_names, filtered_matrix, kept_indices = filter_targets( + targets_df=targets_df, + target_names=target_names, + X_sparse=X_sparse, + filters=manifest.target_filters, + ) + + filtered_targets.to_csv(inputs_dir / "target_metadata.csv", index=False) + mmwrite(str(inputs_dir / "X_targets_by_units.mtx"), filtered_matrix) + + initial_weights = np.asarray(package["initial_weights"], dtype=np.float64) + np.save(inputs_dir / "initial_weights.npy", initial_weights) + + unit_metadata = build_shared_unit_metadata(package) + has_external_ipf_inputs = bool( + manifest.external_inputs.ipf_unit_metadata_csv + or manifest.external_inputs.ipf_target_metadata_csv + ) + has_partial_external_ipf_inputs = bool( + manifest.external_inputs.ipf_unit_metadata_csv + ) != bool(manifest.external_inputs.ipf_target_metadata_csv) + if has_partial_external_ipf_inputs: + raise ValueError( + "IPF external input overrides must provide both " + "ipf_unit_metadata_csv and ipf_target_metadata_csv" + ) + + if manifest.external_inputs.ipf_unit_metadata_csv: + shutil.copyfile( + manifest.external_inputs.ipf_unit_metadata_csv, + inputs_dir / "unit_metadata.csv", + ) + elif "ipf" in manifest.methods and not has_external_ipf_inputs: + ipf_unit_metadata, ipf_target_metadata = build_ipf_inputs( + package=package, + manifest=manifest, + filtered_targets=filtered_targets, + ) + ipf_unit_metadata.to_csv(inputs_dir / "unit_metadata.csv", index=False) + ipf_target_metadata.to_csv(inputs_dir / "ipf_target_metadata.csv", index=False) + else: + unit_metadata.to_csv(inputs_dir / "unit_metadata.csv", index=False) + + if manifest.external_inputs.ipf_target_metadata_csv: + shutil.copyfile( + manifest.external_inputs.ipf_target_metadata_csv, + inputs_dir / "ipf_target_metadata.csv", + ) + + runtime_manifest = manifest.to_dict() + runtime_manifest["resolved"] = { + "output_dir": str(output_dir.resolve()), + "inputs_dir": str(inputs_dir.resolve()), + "outputs_dir": str(outputs_dir.resolve()), + "n_targets": int(filtered_matrix.shape[0]), + "n_units": int(filtered_matrix.shape[1]), + "kept_target_indices": [int(i) for i in kept_indices.tolist()], + "target_names": filtered_names, + "package_metadata": package.get("metadata", {}), + } + + with open(inputs_dir / "benchmark_manifest.json", "w") as f: + json.dump(runtime_manifest, f, indent=2, sort_keys=True) + + export_info = { + "n_targets": int(filtered_matrix.shape[0]), + "n_units": int(filtered_matrix.shape[1]), + "inputs_dir": str(inputs_dir), + "outputs_dir": str(outputs_dir), + } + return output_dir, export_info diff --git a/paper-l0/benchmarking/benchmark_manifest.py b/paper-l0/benchmarking/benchmark_manifest.py new file mode 100644 index 000000000..4fad528a5 --- /dev/null +++ b/paper-l0/benchmarking/benchmark_manifest.py @@ -0,0 +1,194 @@ +from __future__ import annotations + +import json +from dataclasses import asdict, dataclass, field +from pathlib import Path +from typing import Any, Dict, List, Optional + +import numpy as np +import pandas as pd + + +COUNT_LIKE_VARIABLES = { + "person_count", + "household_count", + "tax_unit_count", + "spm_unit_count", + "family_count", + "marital_unit_count", +} + + +def _normalize_string_list(values: Optional[List[str]]) -> Optional[List[str]]: + if values is None: + return None + return [str(v) for v in values] + + +@dataclass +class TargetFilters: + include_geo_levels: Optional[List[str]] = None + include_national: bool = True + state_ids: Optional[List[str]] = None + district_ids: Optional[List[str]] = None + variables: Optional[List[str]] = None + domain_variables: Optional[List[str]] = None + count_like_only: bool = False + max_targets: Optional[int] = None + + @classmethod + def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "TargetFilters": + raw = raw or {} + return cls( + include_geo_levels=_normalize_string_list(raw.get("include_geo_levels")), + include_national=bool(raw.get("include_national", True)), + state_ids=_normalize_string_list(raw.get("state_ids")), + district_ids=_normalize_string_list(raw.get("district_ids")), + variables=_normalize_string_list(raw.get("variables")), + domain_variables=_normalize_string_list(raw.get("domain_variables")), + count_like_only=bool(raw.get("count_like_only", False)), + max_targets=raw.get("max_targets"), + ) + + +@dataclass +class ExternalInputs: + ipf_unit_metadata_csv: Optional[str] = None + ipf_target_metadata_csv: Optional[str] = None + + @classmethod + def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "ExternalInputs": + raw = raw or {} + return cls( + ipf_unit_metadata_csv=raw.get("ipf_unit_metadata_csv"), + ipf_target_metadata_csv=raw.get("ipf_target_metadata_csv"), + ) + + +@dataclass +class MethodOptions: + l0: Dict[str, Any] = field(default_factory=dict) + greg: Dict[str, Any] = field(default_factory=dict) + ipf: Dict[str, Any] = field(default_factory=dict) + + @classmethod + def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "MethodOptions": + raw = raw or {} + return cls( + l0=dict(raw.get("l0", {})), + greg=dict(raw.get("greg", {})), + ipf=dict(raw.get("ipf", {})), + ) + + +@dataclass +class BenchmarkManifest: + name: str + tier: str + description: str + package_path: str + methods: List[str] + target_filters: TargetFilters = field(default_factory=TargetFilters) + external_inputs: ExternalInputs = field(default_factory=ExternalInputs) + method_options: MethodOptions = field(default_factory=MethodOptions) + + @classmethod + def from_dict(cls, raw: Dict[str, Any]) -> "BenchmarkManifest": + return cls( + name=str(raw["name"]), + tier=str(raw["tier"]), + description=str(raw.get("description", "")), + package_path=str(raw["package_path"]), + methods=[str(m) for m in raw.get("methods", [])], + target_filters=TargetFilters.from_dict(raw.get("target_filters")), + external_inputs=ExternalInputs.from_dict(raw.get("external_inputs")), + method_options=MethodOptions.from_dict(raw.get("method_options")), + ) + + def to_dict(self) -> Dict[str, Any]: + payload = asdict(self) + payload["package_path"] = str(self.package_path) + return payload + + +def load_manifest(path: str | Path) -> BenchmarkManifest: + with open(path) as f: + return BenchmarkManifest.from_dict(json.load(f)) + + +def save_manifest(manifest: BenchmarkManifest, path: str | Path) -> None: + with open(path, "w") as f: + json.dump(manifest.to_dict(), f, indent=2, sort_keys=True) + + +def is_count_like_variable(variable: str) -> bool: + return variable in COUNT_LIKE_VARIABLES or variable.endswith("_count") + + +def _build_geo_mask(targets_df: pd.DataFrame, filters: TargetFilters) -> np.ndarray: + geo_level = targets_df["geo_level"].astype(str) + geographic_id = targets_df["geographic_id"].astype(str) + mask = np.ones(len(targets_df), dtype=bool) + + if filters.include_geo_levels: + mask &= geo_level.isin(filters.include_geo_levels).to_numpy() + + geo_keep = np.zeros(len(targets_df), dtype=bool) + national_mask = geo_level.eq("national").to_numpy() + state_mask = geo_level.eq("state").to_numpy() + district_mask = geo_level.eq("district").to_numpy() + + if filters.include_national: + geo_keep |= national_mask + + if filters.state_ids: + geo_keep |= state_mask & geographic_id.isin(filters.state_ids).to_numpy() + else: + geo_keep |= state_mask + + if filters.district_ids: + geo_keep |= district_mask & geographic_id.isin(filters.district_ids).to_numpy() + else: + geo_keep |= district_mask + + other_mask = ~(national_mask | state_mask | district_mask) + geo_keep |= other_mask + return mask & geo_keep + + +def filter_targets( + targets_df: pd.DataFrame, + target_names: List[str], + X_sparse, + filters: TargetFilters, +): + mask = _build_geo_mask(targets_df, filters) + + if filters.variables: + mask &= targets_df["variable"].astype(str).isin(filters.variables).to_numpy() + + if filters.domain_variables: + domain_series = targets_df.get( + "domain_variable", pd.Series("", index=targets_df.index) + ) + mask &= ( + domain_series.fillna("") + .astype(str) + .isin(filters.domain_variables) + .to_numpy() + ) + + if filters.count_like_only: + mask &= ( + targets_df["variable"].astype(str).map(is_count_like_variable).to_numpy() + ) + + indices = np.where(mask)[0] + if filters.max_targets is not None: + indices = indices[: int(filters.max_targets)] + + filtered_targets = targets_df.iloc[indices].reset_index(drop=True).copy() + filtered_targets["target_name"] = [target_names[i] for i in indices] + filtered_names = [target_names[i] for i in indices] + filtered_matrix = X_sparse[indices, :] + return filtered_targets, filtered_names, filtered_matrix, indices diff --git a/paper-l0/benchmarking/benchmark_metrics.py b/paper-l0/benchmarking/benchmark_metrics.py new file mode 100644 index 000000000..341117202 --- /dev/null +++ b/paper-l0/benchmarking/benchmark_metrics.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Dict, Iterable + +import numpy as np +import pandas as pd +from scipy.io import mmread + + +def load_targets_csv(path: str | Path) -> pd.DataFrame: + return pd.read_csv(path) + + +def compute_common_metrics( + weights: np.ndarray, + targets_df: pd.DataFrame, + matrix_path: str | Path, +) -> Dict: + X_sparse = mmread(str(matrix_path)).tocsr() + estimates = X_sparse.dot(weights) + true_values = targets_df["value"].to_numpy(dtype=np.float64) + rel_errors = np.where( + np.abs(true_values) > 0, + (estimates - true_values) / np.abs(true_values), + 0.0, + ) + abs_rel = np.abs(rel_errors) + achievable = np.asarray(X_sparse.sum(axis=1)).ravel() > 0 + + active_weights = weights[weights > 0] + weight_sum = float(weights.sum()) + ess = ( + float(weight_sum**2 / np.square(weights).sum()) + if np.square(weights).sum() > 0 + else 0.0 + ) + + metrics = { + "n_targets": int(len(true_values)), + "n_units": int(len(weights)), + "n_achievable_targets": int(achievable.sum()), + "mean_abs_rel_error": float(abs_rel.mean()), + "median_abs_rel_error": float(np.median(abs_rel)), + "p95_abs_rel_error": float(np.quantile(abs_rel, 0.95)), + "max_abs_rel_error": float(abs_rel.max()), + "ess": ess, + "active_record_count": int((weights > 0).sum()), + "negative_weight_share": float((weights < 0).mean()), + "weight_min": float(weights.min()), + "weight_max": float(weights.max()), + "weight_mean": float(weights.mean()), + "weight_median": float(np.median(weights)), + "nonzero_weight_min": float(active_weights.min()) + if len(active_weights) + else 0.0, + "nonzero_weight_max": float(active_weights.max()) + if len(active_weights) + else 0.0, + } + + if "geo_level" in targets_df.columns: + by_geo = {} + for geo_level, group in targets_df.assign(abs_rel_error=abs_rel).groupby( + "geo_level" + ): + vals = group["abs_rel_error"].to_numpy(dtype=np.float64) + by_geo[str(geo_level)] = { + "n_targets": int(len(vals)), + "mean_abs_rel_error": float(vals.mean()), + "median_abs_rel_error": float(np.median(vals)), + "p95_abs_rel_error": float(np.quantile(vals, 0.95)), + "max_abs_rel_error": float(vals.max()), + } + metrics["by_geo_level"] = by_geo + + if "variable" in targets_df.columns: + by_variable = {} + enriched = targets_df.assign(abs_rel_error=abs_rel) + for variable, group in enriched.groupby("variable"): + vals = group["abs_rel_error"].to_numpy(dtype=np.float64) + by_variable[str(variable)] = { + "n_targets": int(len(vals)), + "mean_abs_rel_error": float(vals.mean()), + "median_abs_rel_error": float(np.median(vals)), + } + metrics["by_variable"] = by_variable + + return metrics + + +def write_method_summary(summary: Dict, path: str | Path) -> None: + with open(path, "w") as f: + json.dump(summary, f, indent=2, sort_keys=True) diff --git a/paper-l0/benchmarking/install_r_packages.R b/paper-l0/benchmarking/install_r_packages.R new file mode 100644 index 000000000..6ba0e6083 --- /dev/null +++ b/paper-l0/benchmarking/install_r_packages.R @@ -0,0 +1,23 @@ +packages <- c( + "Matrix", + "survey", + "surveysd" +) + +repos <- "https://cloud.r-project.org" + +missing <- packages[!vapply(packages, requireNamespace, logical(1), quietly = TRUE)] +if (!length(missing)) { + cat("All benchmarking R packages are already installed.\n") + quit(save = "no", status = 0) +} + +cat("Installing missing R packages:", paste(missing, collapse = ", "), "\n") +install.packages(missing, repos = repos) + +failed <- missing[!vapply(missing, requireNamespace, logical(1), quietly = TRUE)] +if (length(failed)) { + stop(sprintf("Failed to install: %s", paste(failed, collapse = ", "))) +} + +cat("Benchmarking R packages installed successfully.\n") diff --git a/paper-l0/benchmarking/ipf_conversion.py b/paper-l0/benchmarking/ipf_conversion.py new file mode 100644 index 000000000..8f765b1c1 --- /dev/null +++ b/paper-l0/benchmarking/ipf_conversion.py @@ -0,0 +1,295 @@ +from __future__ import annotations + +import sqlite3 +from pathlib import Path +from typing import Dict, Iterable, List, Tuple + +import numpy as np +import pandas as pd + +from benchmark_manifest import BenchmarkManifest +from policyengine_us_data.calibration.calibration_utils import apply_op + + +_GEO_VARS = {"state_fips", "congressional_district_geoid"} +_SUPPORTED_TARGET_VARIABLES = {"person_count", "household_count"} + + +def _detect_time_period(sim) -> int: + raw_keys = sim.dataset.load_dataset()["household_id"] + try: + return int(next(iter(raw_keys))) + except Exception: + return 2024 + + +def _load_stratum_constraints( + db_path: str | Path, + stratum_ids: Iterable[int], +) -> Dict[int, List[dict]]: + ids = sorted({int(sid) for sid in stratum_ids}) + if not ids: + return {} + placeholders = ",".join("?" for _ in ids) + query = f""" + SELECT + stratum_id, + constraint_variable AS variable, + operation, + value + FROM stratum_constraints + WHERE stratum_id IN ({placeholders}) + ORDER BY stratum_id + """ + with sqlite3.connect(str(db_path)) as conn: + rows = pd.read_sql_query(query, conn, params=ids) + grouped: Dict[int, List[dict]] = {} + for stratum_id, group in rows.groupby("stratum_id", sort=False): + grouped[int(stratum_id)] = group[["variable", "operation", "value"]].to_dict( + "records" + ) + return grouped + + +def _ensure_supported_targets(targets_df: pd.DataFrame) -> None: + unsupported = sorted( + set(targets_df["variable"].astype(str)) - _SUPPORTED_TARGET_VARIABLES + ) + if unsupported: + raise ValueError( + "Automatic IPF conversion currently supports only " + f"{sorted(_SUPPORTED_TARGET_VARIABLES)} targets. " + f"Unsupported target variables in manifest selection: {unsupported}" + ) + + +def _required_constraint_variables( + stratum_constraints: Dict[int, List[dict]], +) -> List[str]: + variables = set() + for constraints in stratum_constraints.values(): + for constraint in constraints: + variable = str(constraint["variable"]) + if variable not in _GEO_VARS: + variables.add(variable) + return sorted(variables) + + +def _evaluate_constraints( + constraints: List[dict], + columns: Dict[str, np.ndarray], +) -> np.ndarray: + n_rows = len(next(iter(columns.values()))) + mask = np.ones(n_rows, dtype=bool) + for constraint in constraints: + variable = str(constraint["variable"]) + if variable not in columns: + raise KeyError(f"Missing column for constraint variable: {variable}") + mask &= apply_op( + np.asarray(columns[variable]), + str(constraint["operation"]), + str(constraint["value"]), + ) + return mask + + +def _build_household_clone_arrays( + package: Dict, + sim, +) -> Tuple[pd.DataFrame, np.ndarray]: + household_ids = sim.calculate("household_id", map_to="household").values + n_households = len(household_ids) + n_clones = int(package["metadata"]["n_clones"]) + expected_units = n_households * n_clones + initial_weights = np.asarray(package["initial_weights"], dtype=np.float64) + if len(initial_weights) != expected_units: + raise ValueError( + "Initial weight length does not match dataset households x n_clones: " + f"{len(initial_weights)} != {n_households} * {n_clones}" + ) + + if package.get("cd_geoid") is None or package.get("block_geoid") is None: + raise ValueError( + "Automatic IPF conversion requires cd_geoid and block_geoid in the package" + ) + + unit_index = np.arange(expected_units, dtype=np.int64) + block_geoid = np.asarray(package["block_geoid"]).astype(str) + cd_geoid = np.asarray(package["cd_geoid"]).astype(str) + if len(block_geoid) != expected_units or len(cd_geoid) != expected_units: + raise ValueError("Geography arrays do not match expected cloned unit count") + + household_df = pd.DataFrame( + { + "unit_index": unit_index, + "household_id": unit_index, + "base_weight": initial_weights, + "benchmark_all": "all", + "state_fips": block_geoid, + "congressional_district_geoid": cd_geoid, + } + ) + household_df["state_fips"] = household_df["state_fips"].str.slice(0, 2).astype(int) + household_df["congressional_district_geoid"] = household_df[ + "congressional_district_geoid" + ].astype(int) + return household_df, household_ids + + +def _load_sim_columns( + sim, + variables: List[str], + level: str, +) -> Dict[str, np.ndarray]: + columns: Dict[str, np.ndarray] = {} + for variable in variables: + try: + values = sim.calculate(variable, map_to=level).values + except Exception as exc: + raise RuntimeError( + f"Failed to calculate benchmark variable '{variable}' at level '{level}'" + ) from exc + values = np.asarray(values) + if hasattr(values, "decode_to_str"): + values = values.decode_to_str() + if values.dtype.kind == "S": + values = values.astype(str) + columns[variable] = values + return columns + + +def _build_person_level_unit_data( + package: Dict, + household_df: pd.DataFrame, + sim, + needed_variables: List[str], +) -> pd.DataFrame: + household_ids = sim.calculate("household_id", map_to="household").values + person_hh_ids = sim.calculate("household_id", map_to="person").values + hh_index = {int(hid): idx for idx, hid in enumerate(household_ids)} + person_hh_index = np.array( + [hh_index[int(hid)] for hid in person_hh_ids], dtype=np.int64 + ) + + n_households = len(household_ids) + n_clones = int(package["metadata"]["n_clones"]) + + person_columns = _load_sim_columns(sim, needed_variables, level="person") + person_frames = [] + for clone_idx in range(n_clones): + unit_index = person_hh_index + clone_idx * n_households + frame = pd.DataFrame( + { + "unit_index": unit_index, + "household_id": unit_index, + "base_weight": household_df["base_weight"].to_numpy()[unit_index], + "benchmark_all": household_df["benchmark_all"].to_numpy()[unit_index], + "state_fips": household_df["state_fips"].to_numpy()[unit_index], + "congressional_district_geoid": household_df[ + "congressional_district_geoid" + ].to_numpy()[unit_index], + } + ) + for variable, values in person_columns.items(): + frame[variable] = values + person_frames.append(frame) + return pd.concat(person_frames, ignore_index=True) + + +def _build_household_level_unit_data( + household_df: pd.DataFrame, + sim, + needed_variables: List[str], +) -> pd.DataFrame: + frame = household_df.copy() + household_columns = _load_sim_columns(sim, needed_variables, level="household") + repeated_columns = { + name: np.tile(values, len(frame) // len(values)) + for name, values in household_columns.items() + } + for name, values in repeated_columns.items(): + frame[name] = values + return frame + + +def _target_scope(target_variable: str) -> str: + if target_variable == "person_count": + return "person" + if target_variable == "household_count": + return "household" + raise ValueError(f"Unsupported IPF target variable: {target_variable}") + + +def build_ipf_inputs( + package: Dict, + manifest: BenchmarkManifest, + filtered_targets: pd.DataFrame, +) -> Tuple[pd.DataFrame, pd.DataFrame]: + _ensure_supported_targets(filtered_targets) + + metadata = package.get("metadata", {}) + dataset_path = metadata.get("dataset_path") + db_path = metadata.get("db_path") + if not dataset_path or not Path(dataset_path).exists(): + raise FileNotFoundError( + "Automatic IPF conversion requires metadata.dataset_path to exist locally" + ) + if not db_path or not Path(db_path).exists(): + raise FileNotFoundError( + "Automatic IPF conversion requires metadata.db_path to exist locally" + ) + + from policyengine_us import Microsimulation + + sim = Microsimulation(dataset=str(dataset_path)) + _ = _detect_time_period(sim) + + stratum_constraints = _load_stratum_constraints( + db_path=db_path, + stratum_ids=filtered_targets["stratum_id"].astype(int).tolist(), + ) + needed_variables = _required_constraint_variables(stratum_constraints) + has_person_targets = ( + filtered_targets["variable"].astype(str).eq("person_count").any() + ) + + household_df, _ = _build_household_clone_arrays(package, sim) + if has_person_targets: + unit_data = _build_person_level_unit_data( + package=package, + household_df=household_df, + sim=sim, + needed_variables=needed_variables, + ) + else: + unit_data = _build_household_level_unit_data( + household_df=household_df, + sim=sim, + needed_variables=needed_variables, + ) + + eval_columns = { + column: unit_data[column].to_numpy() for column in unit_data.columns + } + ipf_target_rows = [] + for row_idx, row in filtered_targets.reset_index(drop=True).iterrows(): + constraints = stratum_constraints.get(int(row["stratum_id"]), []) + indicator_column = f"ipf_indicator_{row_idx:05d}" + mask = _evaluate_constraints(constraints, eval_columns) + unit_data[indicator_column] = mask.astype(np.int8) + eval_columns[indicator_column] = unit_data[indicator_column].to_numpy() + ipf_target_rows.append( + { + "scope": _target_scope(str(row["variable"])), + "target_type": "numeric_total", + "value_column": indicator_column, + "variables": "benchmark_all", + "cell": "benchmark_all=all", + "target_value": float(row["value"]), + "target_name": row.get("target_name", f"target_{row_idx}"), + "source_variable": str(row["variable"]), + "stratum_id": int(row["stratum_id"]), + } + ) + + return unit_data, pd.DataFrame(ipf_target_rows) diff --git a/paper-l0/benchmarking/manifests/greg_demo_small.example.json b/paper-l0/benchmarking/manifests/greg_demo_small.example.json new file mode 100644 index 000000000..01f02696a --- /dev/null +++ b/paper-l0/benchmarking/manifests/greg_demo_small.example.json @@ -0,0 +1,54 @@ +{ + "name": "greg_demo_small", + "tier": "tier_a", + "description": "Example GREG benchmark manifest for a reduced package and a coherent geography subset.", + "package_path": "policyengine_us_data/storage/calibration/calibration_package.pkl", + "methods": [ + "l0", + "greg" + ], + "target_filters": { + "include_geo_levels": [ + "national", + "state", + "district" + ], + "include_national": true, + "state_ids": [ + "06", + "12", + "36", + "48", + "53" + ], + "district_ids": [ + "0601", + "0602", + "1201", + "1202", + "3601", + "3602", + "4801", + "4802", + "5301", + "5302" + ], + "count_like_only": false, + "max_targets": 1000 + }, + "external_inputs": {}, + "method_options": { + "l0": { + "lambda_l0": 1e-08, + "epochs": 1000, + "device": "cpu", + "beta": 0.65, + "lambda_l2": 1e-12, + "learning_rate": 0.15 + }, + "greg": { + "maxit": 200, + "epsilon": 1e-07 + } + } +} diff --git a/paper-l0/benchmarking/manifests/ipf_demo_small.example.json b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json new file mode 100644 index 000000000..f979e7d93 --- /dev/null +++ b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json @@ -0,0 +1,48 @@ +{ + "name": "ipf_demo_small", + "tier": "tier_b", + "description": "Example IPF benchmark manifest using automatic conversion from the saved calibration package and its source dataset.", + "package_path": "policyengine_us_data/storage/calibration/calibration_package.pkl", + "methods": [ + "l0", + "ipf" + ], + "target_filters": { + "include_geo_levels": [ + "national", + "state", + "district" + ], + "include_national": true, + "variables": [ + "person_count", + "household_count" + ], + "domain_variables": [ + "age", + "snap", + "medicaid_enrolled" + ], + "count_like_only": true, + "max_targets": 250 + }, + "external_inputs": {}, + "method_options": { + "l0": { + "lambda_l0": 1e-08, + "epochs": 1000, + "device": "cpu", + "beta": 0.65, + "lambda_l2": 1e-12, + "learning_rate": 0.15 + }, + "ipf": { + "max_iter": 200, + "bound": 4.0, + "epsP": 1e-06, + "epsH": 0.01, + "household_id_col": "household_id", + "weight_col": "base_weight" + } + } +} diff --git a/paper-l0/benchmarking/requirements-python.txt b/paper-l0/benchmarking/requirements-python.txt new file mode 100644 index 000000000..515179319 --- /dev/null +++ b/paper-l0/benchmarking/requirements-python.txt @@ -0,0 +1,2 @@ +-e ".[dev,l0]" +PyYAML>=6.0 diff --git a/paper-l0/benchmarking/runners/greg_runner.R b/paper-l0/benchmarking/runners/greg_runner.R new file mode 100644 index 000000000..c8234a73c --- /dev/null +++ b/paper-l0/benchmarking/runners/greg_runner.R @@ -0,0 +1,53 @@ +script_arg <- grep("^--file=", commandArgs(trailingOnly = FALSE), value = TRUE) +if (length(script_arg) != 1L) { + stop("Could not determine greg_runner.R path") +} +script_dir <- dirname(normalizePath(sub("^--file=", "", script_arg))) +source(file.path(script_dir, "read_npy.R")) + +args <- commandArgs(trailingOnly = TRUE) +if (length(args) < 6L) { + stop("Usage: greg_runner.R X.mtx target_metadata.csv initial_weights.npy output_weights.csv maxit epsilon") +} + +matrix_path <- args[[1]] +target_csv <- args[[2]] +weights_npy <- args[[3]] +output_csv <- args[[4]] +maxit <- as.integer(args[[5]]) +epsilon <- as.numeric(args[[6]]) + +library(Matrix) +library(survey) + +X_targets_by_units <- readMM(matrix_path) +target_meta <- read.csv(target_csv, stringsAsFactors = FALSE) +base_weights <- read_npy_vector(weights_npy) +population <- as.numeric(target_meta$value) + +mm <- Matrix::t(X_targets_by_units) +if (nrow(mm) != length(base_weights)) { + stop("Unit count mismatch between matrix and initial weights") +} +if (ncol(mm) != length(population)) { + stop("Target count mismatch between matrix and target metadata") +} + +cal_linear <- get("cal.linear", envir = asNamespace("survey")) +g <- survey:::grake( + mm = mm, + ww = base_weights, + calfun = cal_linear, + bounds = list(lower = -Inf, upper = Inf), + population = population, + epsilon = epsilon, + verbose = FALSE, + maxit = maxit +) + +fitted_weights <- as.numeric(base_weights * g) +write.csv( + data.frame(unit_index = seq_along(fitted_weights) - 1L, fitted_weight = fitted_weights), + output_csv, + row.names = FALSE +) diff --git a/paper-l0/benchmarking/runners/ipf_runner.R b/paper-l0/benchmarking/runners/ipf_runner.R new file mode 100644 index 000000000..3348c2717 --- /dev/null +++ b/paper-l0/benchmarking/runners/ipf_runner.R @@ -0,0 +1,148 @@ +script_arg <- grep("^--file=", commandArgs(trailingOnly = FALSE), value = TRUE) +if (length(script_arg) != 1L) { + stop("Could not determine ipf_runner.R path") +} +script_dir <- dirname(normalizePath(sub("^--file=", "", script_arg))) +source(file.path(script_dir, "read_npy.R")) + +args <- commandArgs(trailingOnly = TRUE) +if (length(args) < 10L) { + stop("Usage: ipf_runner.R unit_metadata.csv ipf_target_metadata.csv initial_weights.npy output_weights.csv max_iter bound epsP epsH household_id_col weight_col") +} + +unit_csv <- args[[1]] +target_csv <- args[[2]] +weights_npy <- args[[3]] +output_csv <- args[[4]] +max_iter <- as.integer(args[[5]]) +bound <- as.numeric(args[[6]]) +epsP <- as.numeric(args[[7]]) +epsH <- as.numeric(args[[8]]) +household_id_col <- args[[9]] +weight_col <- args[[10]] + +if (!requireNamespace("surveysd", quietly = TRUE)) { + stop("The surveysd package is required for IPF benchmarks") +} +if (!requireNamespace("data.table", quietly = TRUE)) { + stop("The data.table package is required for IPF benchmarks") +} + +build_margin_array <- function(df) { + variables <- strsplit(df$variables[[1]], "\\|")[[1]] + rows <- lapply(seq_len(nrow(df)), function(i) { + cell <- df$cell[[i]] + parts <- strsplit(cell, "\\|")[[1]] + entries <- strsplit(parts, "=") + row <- as.list(setNames(vapply(entries, `[`, "", 2L), vapply(entries, `[`, "", 1L))) + row$Freq <- as.numeric(df$target_value[[i]]) + as.data.frame(row, stringsAsFactors = FALSE) + }) + frame <- do.call(rbind, rows) + stats::xtabs( + stats::as.formula(paste("Freq ~", paste(variables, collapse = " + "))), + data = frame + ) +} + +build_single_cell_array <- function(variables_str, cell_str, target_value) { + variables <- strsplit(variables_str, "\\|")[[1]] + parts <- strsplit(cell_str, "\\|")[[1]] + entries <- strsplit(parts, "=") + row <- as.list(setNames(vapply(entries, `[`, "", 2L), vapply(entries, `[`, "", 1L))) + row$Freq <- as.numeric(target_value) + frame <- as.data.frame(row, stringsAsFactors = FALSE) + stats::xtabs( + stats::as.formula(paste("Freq ~", paste(variables, collapse = " + "))), + data = frame + ) +} + +unit_data <- read.csv(unit_csv, stringsAsFactors = FALSE) +target_meta <- read.csv(target_csv, stringsAsFactors = FALSE) +base_weights <- read_npy_vector(weights_npy) +unit_data <- data.table::as.data.table(unit_data) + +if (!(weight_col %in% names(unit_data))) { + if (!("unit_index" %in% names(unit_data))) { + stop("Unit metadata must include either base weights or a unit_index column") + } + if (max(unit_data$unit_index) >= length(base_weights)) { + stop("unit_index contains values outside the initial weight vector") + } + unit_data[[weight_col]] <- base_weights[unit_data$unit_index + 1L] +} + +conP <- list() +conH <- list() +if (!("target_type" %in% names(target_meta))) { + target_meta$target_type <- "categorical_margin" +} + +numeric_rows <- target_meta[target_meta$target_type == "numeric_total", , drop = FALSE] +for (i in seq_len(nrow(numeric_rows))) { + row <- numeric_rows[i, , drop = FALSE] + value_column <- row$value_column[[1]] + if (!(value_column %in% names(unit_data))) { + stop(sprintf("Unit metadata is missing numeric target column %s", value_column)) + } + target_array <- build_single_cell_array( + if ("variables" %in% names(row)) row$variables[[1]] else "benchmark_all", + if ("cell" %in% names(row)) row$cell[[1]] else "benchmark_all=all", + row$target_value[[1]] + ) + if (row$scope[[1]] == "person") { + conP[[value_column]] <- target_array + } else if (row$scope[[1]] == "household") { + conH[[value_column]] <- target_array + } else { + stop(sprintf("Unsupported numeric target scope: %s", row$scope[[1]])) + } +} + +margin_rows_all <- target_meta[target_meta$target_type == "categorical_margin", , drop = FALSE] +if (nrow(margin_rows_all) > 0) { + for (margin_id in unique(margin_rows_all$margin_id)) { + margin_rows <- margin_rows_all[margin_rows_all$margin_id == margin_id, , drop = FALSE] + margin_array <- build_margin_array(margin_rows) + scope <- unique(margin_rows$scope) + if (length(scope) != 1L) { + stop(sprintf("Margin %s has inconsistent scope values", margin_id)) + } + if (scope[[1]] == "person") { + conP[[length(conP) + 1L]] <- margin_array + } else if (scope[[1]] == "household") { + conH[[length(conH) + 1L]] <- margin_array + } else { + stop(sprintf("Unsupported margin scope: %s", scope[[1]])) + } + } +} + +ipf_result <- surveysd::ipf( + dat = unit_data, + hid = if (household_id_col %in% names(unit_data)) household_id_col else NULL, + conP = if (length(conP)) conP else NULL, + conH = if (length(conH)) conH else NULL, + epsP = epsP, + epsH = epsH, + verbose = FALSE, + w = weight_col, + bound = bound, + maxIter = max_iter, + returnNA = TRUE, + nameCalibWeight = "calibWeight" +) + +if (!("calibWeight" %in% names(ipf_result))) { + stop("surveysd::ipf did not return a calibWeight column") +} + +write.csv( + data.frame( + unit_index = if ("unit_index" %in% names(ipf_result)) ipf_result$unit_index else seq_len(nrow(ipf_result)) - 1L, + fitted_weight = as.numeric(ipf_result$calibWeight) + ), + output_csv, + row.names = FALSE +) diff --git a/paper-l0/benchmarking/runners/read_npy.R b/paper-l0/benchmarking/runners/read_npy.R new file mode 100644 index 000000000..04a4ef797 --- /dev/null +++ b/paper-l0/benchmarking/runners/read_npy.R @@ -0,0 +1,66 @@ +read_npy_vector <- function(path) { + con <- file(path, "rb") + on.exit(close(con), add = TRUE) + + magic <- readBin(con, what = "raw", n = 6, endian = "little") + if (!identical(as.integer(magic), as.integer(charToRaw("\x93NUMPY")))) { + stop("Unsupported .npy file: bad magic header") + } + + major <- readBin(con, what = "integer", n = 1, size = 1, signed = FALSE) + minor <- readBin(con, what = "integer", n = 1, size = 1, signed = FALSE) + + header_len <- if (major == 1L) { + readBin(con, what = "integer", n = 1, size = 2, signed = FALSE, endian = "little") + } else if (major %in% c(2L, 3L)) { + readBin(con, what = "integer", n = 1, size = 4, signed = FALSE, endian = "little") + } else { + stop("Unsupported .npy version") + } + + header_raw <- readBin(con, what = "raw", n = header_len, endian = "little") + header <- rawToChar(header_raw) + + descr_match <- regmatches(header, regexpr("'descr': *'[^']+'", header)) + shape_match <- regmatches(header, regexpr("'shape': *\\([^\\)]*\\)", header)) + fortran_match <- regmatches(header, regexpr("'fortran_order': *(True|False)", header)) + + if (length(descr_match) == 0 || length(shape_match) == 0 || length(fortran_match) == 0) { + stop("Could not parse .npy header") + } + + descr <- sub("^'descr': *'([^']+)'$", "\\1", descr_match) + fortran_order <- sub("^'fortran_order': *(True|False)$", "\\1", fortran_match) + if (fortran_order != "False") { + stop("Only C-order .npy arrays are supported") + } + + shape_text <- sub("^'shape': *\\(([^\\)]*)\\)$", "\\1", shape_match) + shape_parts <- trimws(unlist(strsplit(shape_text, ","))) + shape_parts <- shape_parts[nzchar(shape_parts)] + dims <- as.integer(shape_parts) + + if (length(dims) != 1L || is.na(dims[1])) { + stop("Only 1D .npy vectors are supported") + } + + n <- dims[1] + + if (descr == " bool: + proc = subprocess.run( + [ + "Rscript", + "-e", + f"quit(status = if (requireNamespace('{package}', quietly = TRUE)) 0 else 1)", + ], + check=False, + capture_output=True, + text=True, + ) + return proc.returncode == 0 + + +def _load_benchmark_cli_module(): + benchmark_dir_str = str(BENCHMARK_DIR) + if benchmark_dir_str not in sys.path: + sys.path.insert(0, benchmark_dir_str) + spec = importlib.util.spec_from_file_location( + "benchmark_cli_for_tests", BENCHMARK_CLI_PATH + ) + module = importlib.util.module_from_spec(spec) + assert spec.loader is not None + spec.loader.exec_module(module) + return module + + +def _write_common_inputs( + run_dir: Path, + matrix, + target_values: list[float], + variables: list[str], + geo_levels: list[str] | None = None, + target_names: list[str] | None = None, + initial_weights: np.ndarray | None = None, + method_options: dict | None = None, +) -> Path: + inputs = run_dir / "inputs" + outputs = run_dir / "outputs" + inputs.mkdir(parents=True, exist_ok=True) + outputs.mkdir(parents=True, exist_ok=True) + + mmwrite(str(inputs / "X_targets_by_units.mtx"), matrix) + if initial_weights is None: + initial_weights = np.ones(matrix.shape[1], dtype=np.float64) + np.save( + inputs / "initial_weights.npy", np.asarray(initial_weights, dtype=np.float64) + ) + + if geo_levels is None: + geo_levels = ["national"] * len(target_values) + if target_names is None: + target_names = [f"target_{idx}" for idx in range(len(target_values))] + + target_metadata = pd.DataFrame( + { + "value": np.asarray(target_values, dtype=np.float64), + "variable": variables, + "geo_level": geo_levels, + "target_name": target_names, + } + ) + target_metadata.to_csv(inputs / "target_metadata.csv", index=False) + + manifest = { + "method_options": method_options or {}, + } + with open(inputs / "benchmark_manifest.json", "w") as f: + json.dump(manifest, f) + + return inputs + + +@pytest.fixture +def benchmark_cli_module(monkeypatch, tmp_path_factory): + cache_root = tmp_path_factory.mktemp("benchmarking-cache") + monkeypatch.setenv("MPLCONFIGDIR", str(cache_root / "mpl")) + monkeypatch.setenv("XDG_CACHE_HOME", str(cache_root / "xdg")) + return _load_benchmark_cli_module() + + +@pytest.fixture(autouse=True) +def _require_rscript(): + if shutil.which("Rscript") is None: + pytest.skip("Rscript is required for benchmarking runner tests") + + +def test_greg_runner_end_to_end_exact_fit(benchmark_cli_module, tmp_path): + if not _r_package_available("survey"): + pytest.skip("R package 'survey' is required for this test") + + run_dir = tmp_path / "greg-run" + matrix = csr_matrix(np.eye(2, dtype=np.float64)) + _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[2.0, 3.0], + variables=["household_count", "person_count"], + method_options={"greg": {"maxit": 50, "epsilon": 1e-10}}, + ) + + weights_path, _ = benchmark_cli_module._run_greg(run_dir) + fitted_weights = np.load(weights_path) + + np.testing.assert_allclose( + fitted_weights, np.array([2.0, 3.0]), atol=1e-8, rtol=1e-8 + ) + np.testing.assert_allclose( + matrix.dot(fitted_weights), np.array([2.0, 3.0]), atol=1e-8 + ) + + +def test_ipf_runner_end_to_end_numeric_total_person_scope( + benchmark_cli_module, tmp_path +): + if not _r_package_available("surveysd"): + pytest.skip("R package 'surveysd' is required for this test") + + run_dir = tmp_path / "ipf-numeric-run" + matrix = csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[1.0], + variables=["person_count"], + method_options={ + "ipf": {"max_iter": 500, "bound": 20.0, "epsP": 1e-4, "epsH": 1e-4} + }, + ) + + unit_metadata = pd.DataFrame( + { + "unit_index": [0, 0, 1], + "household_id": [0, 0, 1], + "benchmark_all": ["all", "all", "all"], + "ipf_indicator_00000": [1, 0, 0], + } + ) + unit_metadata.to_csv(inputs / "unit_metadata.csv", index=False) + + ipf_target_metadata = pd.DataFrame( + { + "scope": ["person"], + "target_type": ["numeric_total"], + "value_column": ["ipf_indicator_00000"], + "variables": ["benchmark_all"], + "cell": ["benchmark_all=all"], + "target_value": [1.0], + "target_name": ["under_5_people"], + "source_variable": ["person_count"], + "stratum_id": [1], + } + ) + ipf_target_metadata.to_csv(inputs / "ipf_target_metadata.csv", index=False) + + weights_path, _ = benchmark_cli_module._run_ipf(run_dir) + fitted_weights = np.load(weights_path) + + np.testing.assert_allclose( + fitted_weights, np.array([1.0, 1.0]), atol=1e-8, rtol=1e-8 + ) + np.testing.assert_allclose( + matrix.dot(fitted_weights), np.array([1.0]), atol=1e-8, rtol=1e-8 + ) + + +def test_ipf_runner_end_to_end_categorical_margin_household_scope( + benchmark_cli_module, tmp_path +): + if not _r_package_available("surveysd"): + pytest.skip("R package 'surveysd' is required for this test") + + run_dir = tmp_path / "ipf-margin-run" + matrix = csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0]], dtype=np.float64)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[2.0, 2.0], + variables=["household_count", "household_count"], + method_options={ + "ipf": {"max_iter": 50, "bound": 10.0, "epsP": 1e-9, "epsH": 1e-9} + }, + ) + + unit_metadata = pd.DataFrame( + { + "unit_index": [0, 1], + "household_id": [0, 1], + "snap": ["yes", "no"], + } + ) + unit_metadata.to_csv(inputs / "unit_metadata.csv", index=False) + + ipf_target_metadata = pd.DataFrame( + { + "scope": ["household", "household"], + "target_type": ["categorical_margin", "categorical_margin"], + "margin_id": ["snap_margin", "snap_margin"], + "variables": ["snap", "snap"], + "cell": ["snap=yes", "snap=no"], + "target_value": [2.0, 2.0], + } + ) + ipf_target_metadata.to_csv(inputs / "ipf_target_metadata.csv", index=False) + + weights_path, _ = benchmark_cli_module._run_ipf(run_dir) + fitted_weights = np.load(weights_path) + + np.testing.assert_allclose( + fitted_weights, np.array([2.0, 2.0]), atol=1e-8, rtol=1e-8 + ) + np.testing.assert_allclose( + matrix.dot(fitted_weights), np.array([2.0, 2.0]), atol=1e-8 + ) From e506dc0c9c2cf7bba373deacb1f6e3b62955d75a Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Wed, 15 Apr 2026 18:05:58 +0530 Subject: [PATCH 4/6] Reorganization and feedback integration -- second draft --- paper-l0/bibliography/references.bib | 10 + paper-l0/main.pdf | Bin 367043 -> 344834 bytes paper-l0/sections/abstract.tex | 22 +- paper-l0/sections/appendix.tex | 75 +++-- paper-l0/sections/background.tex | 166 ++++++----- paper-l0/sections/conclusion.tex | 25 +- paper-l0/sections/data.tex | 114 +++++--- paper-l0/sections/discussion.tex | 84 ++++-- paper-l0/sections/introduction.tex | 66 +++-- paper-l0/sections/methodology.tex | 314 ++++++++++++--------- paper-l0/sections/results.tex | 99 ++++--- paper-l0/tables/calibration_accuracy.tex | 6 +- paper-l0/tables/comparison.tex | 20 +- paper-l0/tables/production_feasibility.tex | 21 ++ paper-l0/tables/scaling_frontier.tex | 26 ++ paper-l0/tables/target_summary.tex | 25 +- 16 files changed, 700 insertions(+), 373 deletions(-) create mode 100644 paper-l0/tables/production_feasibility.tex create mode 100644 paper-l0/tables/scaling_frontier.tex diff --git a/paper-l0/bibliography/references.bib b/paper-l0/bibliography/references.bib index 3c3e862b5..bfc6d2d40 100644 --- a/paper-l0/bibliography/references.bib +++ b/paper-l0/bibliography/references.bib @@ -115,6 +115,16 @@ @article{anderson2013 year = {2013} } +@article{imai2014, + title = {Covariate Balancing Propensity Score}, + author = {Imai, Kosuke and Ratkovic, Marc}, + journal = {Journal of the Royal Statistical Society: Series B}, + volume = {76}, + number = {1}, + pages = {243--263}, + year = {2014} +} + @article{tanton2014review, title = {A Review of Spatial Microsimulation Methods}, author = {Tanton, Robert}, diff --git a/paper-l0/main.pdf b/paper-l0/main.pdf index 51448ecff335f38b501bb831230edc85b0cfdf3f..afc5430b1bc307095a78b96c81d5759260102b7e 100644 GIT binary patch delta 248147 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

7Oxl1}QAvH#?< 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 z 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

+3Qb*?P=wt-vdc zJq+vnxx*$a#@#-&y0Iho@D2}mb-Ei=vnaydK|3%X7wb3P=#M>LmqlBWh8-Ow<+3ji z&Kj)nfcLC3M{}^^K~s`>y%+AiJ@T*SE)|;OzEUl0#&>S4Pn_|dOk|5`8PT_SC55FN*oHgxX# zN@Uun?|Uo;>$&NSH$3#&8N=H;N;^7g^;!hWN*E zD8^LaV!I_G&u^83#rIRS2Q&x<5Fd=Cu?hBI4a%NNN#>m#M5v`J`&;nGM`I@Xq$OEQ z(V&dGe0Oggsud0T<~2ovkPq)(1?X4!+0Zko>e=oACx;*C&IuT6%>Ah)I_ zTAPA={S9w?0haP1lMsE4wmbCik{k0X@g#8GSmPF`6dY`PIBB+mDV)cGB_%DcLt!!A z>!TlJNlwq(UTLEcKbXZdMuahjz|4L@W#NimtoDJ6xn+ui`QqNIy6|c-`Aoj?+?Fh?Ce`IgXz4Ol+ADCvAqPfzyuG zUlv^Ve-9hNxq@|A3lOB}Zo}F9PsjKkhAo6ltRzGI)}&InLNsNVd*je_2CTXe( z%hh^Q28_?^gr*TLp{+Vj&73RMas=}wQ))yp)p5=j);_s}0i-mJu|H@jCF`}0LA57Y zm-|a6Ws1{|_2AN4X(^eG2C()JuJ0n!aqtpHvLuhfb0+NjyIhnIY6)Bd5EyLOCp}Uh zD!S*W5dm>7d%ZxQYME~mJiC6P$^t#+n~i5Bv&Je8ApnT1@6auNWU^jS!lk zA~POzK-^_LDc@f@X{LMUEskLFQ*hd8M+7WKZHAgHidn73mhZaG?Fm%YuCbkSe9Z?n zf((b@XR>JWoB6Tl7t}%(jJ#dnCG2v!x5rY@1b{_YwknO0#+zUNh>(T|UI;or9u1dE zqzO?Yap@N4R`g$IXDPgvUVJ>8S#)k@dgW^9EL66RtZ^ddp;G=9!H0MJn4Ibi5-})w;eQ+q)hq->m9X@;6Y2Y#$nuNB?N{V911>#Db%IU_ z3$X~LJ}eXb_p>g?MP_T}3oZo>*LKpQrRdJH_3HJYmO_{AMphpEo_~WMXwig@&X-e^ zS15AlbUn=5b#e&yyGx4}qJ+yM=i1Y0uq!|-_UOlVX#&KMD9#Vmu-lV2CG<4G8^Tk} znOL@OPe*QL49CMy$gujROVr!t*JAiDgW8A{eOBT|`U2~*RjxtFFK&mj9+0(YA$&C@ z=~GP>D~+q+#$6R+G)XE#qP`0krs0yFzc+5_{(Ui0v%J>+hK>wOGX;}cZvF8#d)f;` z6??b}u(L9}%2?d2BakeGU1HT2xxec?hO19}aXmQ--am z)hw~H;X#hBY_&^B17kt+BVu@NHYV0imP7lwC(YQ*o6}#J4?8gD_QN;!Qz{@z8={Q1 zCx*$o_KGU`yF`;M?!4NH3E9Q6tPCD-;Lu9P&3WD4rZ)OGIkHAXLtk7qGHi4_7UooH zQgC%~@Uu8pE-n(|?`qv;$jdr#w?d@o#pc~axU-eX8jbALg(f~^cP&ioJZ)w0o2?M! zQ2CE*wwKWEf%5dE-$VeD^MF~ODv#?+{u_iW(Q&PM5H1YQ8RrRL=*erg z+7bwQ_&GY{9zdAJfPyxbLv?=~VAbD5qUO^%&4N zoxKfGu-}^~&(}5GQhV!JKPM$W2de-(ckmT{?CTCan>}pRKsf{ zWE{z9uMVhxDMxkJ89L(YcwRARUHnfmM`D;LGyw?8w$?=|JLSZTr3z!f6|co?YB^Fw zEE_R2xNzpYUzpR}v@-pMe;A-uwTdL<`vAm$;2yiSdhN78ooCAI@pT(3@^ zeuQG}X`$5N95SW&DVH9Xt?reUpUaa$x~V@Bp07RGb(+y)I!0wzA`0W+2omfWU-LAAdf1ib1DHn z)eQTI6U2SkEGuVVy~y+Ax3YO+{q17kDXR5PrHv`h(7H>IDruv_HjmWl-Hz`BUA~Ps z->#H2N2&Pb9DhU@75bW=)yDdg|0vs9Wl~soA7)xr@A2zty9k*fETCMSq^N7giaYT8 zW_}TWGH3A1$t|YoR%+CLC*vO=Xf1f0(;si^Inr)bLdWO`pjN&2V;QiV{TSL*<gJLGT0|q6-PudF>?e%-xHbqB_~)L5Ump z(n@0oiSceIpq#NuKn3Xe-KG{8J-_TV-1y{TCTZU*&3|j?cX1CxPcI>QKkYsog8bYp zr`O$yVu5!7{Q9-9Y1ek~{0N;1)h+MoA3!bfo>xxs4nu;*4O@PmQL=P9$h-=LuJ za;#R4hk@Dgn4ye3TIs%0Q^ZA}Jq@@*(J5A#pxiJ5G1wJ0JPM@t^d9Lc=@}{GkWUuF z(@{ds6_5hv&|AZKxJ6^>;hCRk!yT?WuSmI?cg$i>(#B}56MwO>tIke33g?pQp?*xY z#utjt(Ak(6g~YbyypgpMGG4)G&+mDvdyo-KIUngmw4__6a)q{M5!tLyxjjTA_`M&d zNM`o{e8=B+nIWI)!Qk{N1|n#` z;^`2LB~^P_+GmcfzNM4T{8* z(;^7z#QnKRdqE4s5>%K4V@2q6XlTG(vS70l+Eb=vMpmL$lfUVdKZWPiZc{^)lSCe~nku@W~&`>ei4-hTmtKz+YH z9v;qF*)e}@+65LNkp@<>rCne-+S1TuX*5dMJ7bEyC1x{K^WWgpU26c$g6sHI&`FukW< zw2|tpGAl{G3GN*ll#9T)SiC4uR$tI@Xzv@DQlLyOhwCv7<^& zND_Z|bk;mOV)&Q zYzEoLqjmXP;B_JfXk^{$3Lvb_R|6$!*QfWMo?R~F57TM{q3(wi=%lcSAP@wo7w*bF z66*GXOQ%zD^b#%Z?2Nk&5U!TkSH%ND@g}mWSR$>%3BaPs(Y^KM4}rE;lWw2=gJ4Yw?B{cr(hc7$I1&`E4$fm7-IAj3cY7ah%Rg;JxngTUH1EY8UO^3prpMMh?UAd!j9F{nxf%(7ZvFftFSKey6V z_xn`%Zu7)lAv`A~3g7RPCGe(SRE+0luJp~e4Yh|Hh%-R3n^PKhSg0hD1tNB4(xxLd z3AI1NR#n;-m+nQRE+k^;8)}b(2JxNvSXw`?wJfRuvvpdA&*KXaMo8giKBA%imOh1GHA%B26XR4AsXNx%!obS3 zjTQABFh7ZPY0Kq}pn5R)jWF-cd^}mPEwu+#j45h3hH3i6?L$wPE6LezCPSuTzfP`* zk~EBRqTfk}Ky2frnlbyWeTsivbZ+eUz@pA!{F#KDg>Hg&d5XaIZVtHz0u3SV&^KsI zEo-WS_Op0)~tg4xW&kHdHah$Yc_xb^Q0Hv4h`>3*EZdwC;aNL zg=QXIVsqS$eY5*!uhMdl|MAq-So$C*I^kCYZEr=b*+foVB$ZmhZMlE8OcAqYl4|hk zE*_$!X~6>{Bz*QMbsMkE=2YK_rjZia2vF#5oYPtLGrzHzlwG=Cc?*DW@~Xf2OaKwl zTzS`C;8YP_()XOPwDHT?Vd5N4{?M=)*^EZCLq2M}DKS|C`vOcz#F=dEHsuj>0H#Xv zQxvW$ukq(+@EW++L9u^I-eVsK}EwrYy73$e%IT@u0jAl?@6^NP~WwiJ__1*s2 ztr)P*PH~V;!j)0-cEk=e&y($}3_qBaAKeeyjKl8lUm8WGCZ+Ab(PSCDYdR<-)F(|XAIp^ zOpzK3f8H!%g-$Sl>+zHM>fut2f!P6Q4#WH?7>pXtsQki^+9__W5+l?*`WWHiH7o9J ztD8jb{>0mowBCQfmNBK`l?~_iTkUZ31xSt8Cstw4lTBfhdU?Wb1$BCDOscmLcG+z9 zGM?skB}SQ}y=Hp>{`;|fO5bxE4G0!8Q*_I$@|{MQr*XqTT(xgYPP*) zz6{*88Lt1p`u&$epNhl~$T$7?vA3L!NI8Uo#Veux_`Xbe#D}9aEN)p;i*28~D-2tpKPdWR^q>YXn{hK#=*^KiQkZhad3m=KLx(rqC*{6#0_ur20MY+0_ zIcws!$Y99yf?0ZA3Z!K~`bMG<`j=n&ndyQK*mrnc^@gri7kergDfye+aWWLa$wF70 z{fo8m(kCaZ)L5i-ZKdZKpSEoxb?d3mj%)QH#QA?t0~dfqDrz504=NPG)xZsZW*!oC zpQl=+1<|3~*PEB*ihGz`n_wgUX(CBY3K$7HDR+<>XvpYOk@z&V;UfQ3tJE-GuqdgtC|{J_1^C%#Yh z~Q+hDN}thm3}|PN!!hg`^e;4 z=5m&y&h2|ZHYzE*tHg?~Bs-LC#M!`#Jc1Vcy|rzje9%+#{DXJ=cq<}{gG}Ad^o#*y z5?;cTKChVU5E@5<=6+|f&JVFw%wK;8Geweh0C%k&f-1kvw7*frQ@>W|%{=#eu428? z4Zj;or9^#9MMAXk)YFZD2XPt1m-FOX!!V~>NpcGge~Eou%DwZ_C$hnl?k6^92d(%8 z_spub9Y1PpwG!9?To{t9HGR>RUJ2_1XhiJuXwlFn3btMeJ|JH=_Cc#eABTUOzm>AW z+sr?+_Yjy;00DOn+1-JP@;|tE*>F2Z4n~ z$;LaXOG*gE_h50XIWH{59LmNt?($}VzjuEW^Sd&mY>XRkdrRTYtaaUs$1n^Uct7s$ zy;x4Nc;=h3LYM=xB}v!)dggyl#jC%O2|Ctg46&8WF6|oly4~c0mldA2x|a^zkZ}s% zsO2Cu-qpuJOm^2(j<;Bp9~z|l;iS_6O=7g~&H@cIM}sv(m}=ZOG}6#?OLBCJ6Gx^L zKd6O3+&=XcxbmD7$dO)jb<6Yxr1hz$KDh=-$89{ari~kS^$94whMQUXx}4+$O#+8Z-w zFZy;(S09ALx?^$_1Ikt5)H|U#`Q6>s{z2_{yUuiES?}7#e6REiia{Uk4^0~1C?=-b zGl5DSZX3_-b*Ddvx}twPO{9*>KGpO$iqCJZsKv2=A|8PDQRj?S=_0K8()pdkM89B5 zwWbS0DO+iLc93}w=GsVrcqq?C4>*mV(d;?^CxNKk<$W?LyN{aQLqy{gJ#=QR?0t_L3iAZ$nGI<_EHgahCcriXQhd7C&v`o0P*Af^oR0b7QYd zg2c<59JzZN;)H03PwOO4_m8W>u*Y1x-o`T#r$>5Kq+riIrl4M68p78vd3RF|!Ebds ze~mVVy^5$Ln+kt~&Loc0u&OdY^AHf29?q+d6_Giw?7FG1S~~KPXApVx4I@h##c#QV zdvqj0<`w#ZrL!zw$?I~EdX_gug;{VM&N`EpEbYfBCp+JwpN*>$(KI4P_s5pJ3%V?L z5iwFQKIxg5F^4&;GMk|OMJ8QOKQ&nMofP<%Ifu(^tZtgdl~VATC~<3 zCqM>&c~7H&12@&jxT;N2bM;J8)H{YmEqn1%Xw~Px$CHgn!OhP4%R!| z&h+J;bk~1n&;1zHOD4G-Q9Ybn@3{wpS`+Xws08=8p5(>KqI}9UzkmCz7+S@=;Ou5D zSw8#i^}IO8$G@0oIfY1?xoZ%% z6~D-lqkJUThvGbUKccaZ_H+ff@@!CSprVPoHT2QNTbkLMrO?#SBg2mL>5xjDXp4ru z%`KglvIX!*Yz`g%88P?`PRpkD9+fLPYTEc0g+-UgVp^W7_$T5tvL?c*+sqvXV8uf5 zb}oND>bf9bB0N3VmfAL^oE6PQp|Yy_;Z8TgF4okLovD6GD-$Ffk~{y4S6*cU&nupUlKnZDLF|=?6$lp%8A!-%j{9eH|E&z zlS*?ry=&AYH-33y?{ec34VfsbjapRemHEyZ=TK$N{Q%)aa2@xlIetrHB>K=sP2vOA z%PA}O_X!NPx^n{EB7NH#o-0zyUX5Fs9zFKgF79lF!qpc)qNIMv90HZX$8|4Buiby9 zd}7KJMimrTmodWDsi~D)_VjNg#oKu*?jPM>bcfAXtOW-LLQx80M0gsi6r!b@qv84(fE+N;aQJXJiAhjCvbWF|O1P`){Dc zul2@hHHSSiunT4JE|FGjOSJnDZ0uj6U+>4?cj~@ucDTK(s-^R}SBnhm=NWNAs-BwW zv%}pE%Up=Mu%6Sv6v{i4h!tQpo`)r3r}UnG2bDoakQTj+s}Ak|0b*+J8VY4@WOH7Ym#DPJu2-tT|k zn|W_Cll;!wYwxqyIcxtWyj%vxB8qT~JwgqG#)*J|AX$L2uCb*g00a^Tf;P2T0z(DZ7%l*y%RS1dxoeYJ+Feq0j+6Ret1UMjF5CDBO9U#sd zCk%k1;lGGb7k?}UpAYqfB3+>Nc*5__p#U{SLjV*n@UJ{9%pK{9!ve8LmtPV^f0e^`D@Zq^x%@k0CkT{s}oaED(a;2y4`rf8&_2SQWj zF9i=#{0DPH-~bSijHIN56ae7{KzPHPM1Pex@o`1`4u67w!FUA$ey$i-fCF9xA^_=t z!2eMAVWFM~0M6Y55#aZ~1OHr6fWZJb5{3iVBOH-vivLu{!w82zYy9QABfSCEAiVd$ z0MM_`zn|{n?FGl6U3~sS|9!urTH3~@rm8}J6#qM>q=fMX_=!jWL}VnS@pcuH0Z2(p z0s{V7#eV>b{M!ZSKdG8%2Mj>wPqX+_`d7oAfA63F?`#MF{#i>8gEuV#!2chQ+khY- z82$_V|LyeODgQTv|Elu;^7wx@q~_t`@;l7`JN|!!p(vz_&tC%GvmQ9S|8+6=DM0@> z)g19>W_1y8qzCH1qnbDR_6|`{!X})BbFNUynz;Z920a&ZlbR;s{i`KP&BsvTk1hhwfe zzLiRg{7nBX!H|R2&YIZzW|H~zX{c0}_n(eZ{82NfOBh(6ZR^;V(mqFippKuw# ztlV+ink;>c#S+P^R>|}I*ta~;^&piXbF7>0Vw0{B`hqVWH**$GkH!KY$v+sb8`LN9 z^=Q)zukIuv*UnmXvRxWGG`rZp*?%LN|fwOv3F?}VoVdvFTLP?$n z45=+frFko;WA&xv4t8KZRF^s>y1vQ3*JhrGpM2d6JU8V8d~msBPbFqV<52fJbV`ae z>$Vj{;dzRUwr;wfby;;WR`S`xnuRQF#Axd?NNC=$=90Y9t7iMOo7Aez;eYz=P3dhd zf}Aa4%3E?|Yqxp*-P?nGu9s|QXbN(CA_k8c$HkVXICs-z;;J8SMjLxj9XuBzl*u2Z zTuhPFL_M;m$ro`Z0X{M(jiyW5l^yvsSoxf_n&xX3m%~26m6RNrM2A|H>l5NMd{MCqlsDIecpl${^mTiFpY2is;S;)(;MS5STHqq8*)AaR9k#S#$ zT5ktSFo|>4I;#kmv9+&obh&Kox}%1=Himb1S6XC#rt_AcB^c%94q6cv$S>OK`vyu> zRGA4z_Oy*$FH`66ZCB^E%US{*WVUcmcx)xRKA;nLc=HMch2jE&{eOG!j;`vZjBs%V zLLylFY`nJWf+C%}8e`jJH3?1mE7jBVMeycc^8!DWbomKgALF^q;^0_IRmt>CFa>+j z$LnBGAEo7wL4LMQ@X*t{FUw6_FGcyJ_a)k=oEj|&@&MJ7H0Zw2M}QQcY!VQXGg#X? zG4Nkv8F+1U8tLlCz<;$vWva!jvSvxPd@;(e;oi%})-s`e5@5#&u_%|#=n=Xf(aI?< zS^oSoL*sXaUgxopPIG3Dnr#USLZ@%5ZeuPu4R^Ao#+o$_ZMXXx)c!y1QN=%U!%k7C zTLJkyz1fsx6EIy|^u)q6o`8#_}PO zitc(X(gu8C0B3VI?QOp2(FLA$-}%-kydDuHzw!R{qfAO9-E|*}pXRuGshQ&fF=N8=HPtH{XnXT`GsXcIDY+3z`CV%cm?_Emm<6G-XQLD$&_AVbT zv#;-0e2kLRt=wYe)6O@=0%Iu!;+`8w&Zs^nnM!jjc-#-cAc$EtT1&zXyRq-UgT8F< zASWRYq1vGO8QiJ#n=Ov(Dzz}8M`J4dS!C(1LBb(hkEerJ-i&m7tYrz$7neM;c_sf~ z!7t{lpMOFaQUxK|DZCZvKN!s3-Jh(^_)+H~aj8O5WyAZ_`9WYps?Wm2dZ7Kls@^IZJJw>3xTmt*VnktT5%O&`>VFy?JFUck~R;6Y`A$#?LOda;d=* zME&oc`k|Eh#$PF}K;n?@!V|Y|(2pwd^wVe$Tk|$02?)y$jN1 z#|**+Uc;(e-D0z8J6I0~6Wf4@%c(`>$9*)m{3RDk?)YV7pS_8ZYh>BJ^vO?+nooe92?QDt zQGwjJ*InI_F(o)5sI_~e!B#qZw}|KHx;O`UBeEovuDg+$V=2)jMHMzhSuR{3W`BRF zs@2RVwZPSRR4`KrDph9CTD^5ip^3+Al;A4aLAW9lFVpb6O>QRxd%PIi{NT?S_C0w} z(OqARP|N1g>2!T-1L$yk&7=Q9*804>;4*tdU4rJK?w1oiC8CPTmq`q-U!~5e8+Hw> zf6Wi6ZjP{=hMLz!xcO^Ozmhs!SAQcb<2nP~I}iQBA=fd?#}iO?F*HJ^Sz^`ylyR4? zGnOTnda(U!SYj7U`@NxRYw2D$8GCti5V6cc;Xru(0s}1%U+j?=mCfFuZvaL{e^>hF zfE5Q;?N*N3>sa}({vUHXA}<-wT6~n)JfBQEHScG?<$pZ*-eWZVv)S(A27jrvIi{#> zO4>Ztxn?j1-V!4R;VZH8ewVn9VTI;PS)phubF%h@3^FN_*ON#UXl9&9Xebn(X+wh} ztgV{d`jg#A)xu%d6?rw@=MlYv!>S~k9|~^_TqEkO3jM$m8nxqnG~ZLdQ5b7-pU0&j zZ?x9LF1#c*;VEa`ZYe+Guz&g8T`YW`kewaY-XH_UFb>;jurC0*&-_@a zyGFn{Yu-a-rKJwxfTip>c*xbe@`&a(b}>#bKXa6$y=EU4<|MG00dUx+YP4faG0gBS zD2e$wgx0{kk$=8MjDPu3F=tU^9(puG^!>uHqegztk(0@4@tt1VUbt>OaRV3U6qkzR zqtZ3rvmT#obN36@-R^eB;3~Cq8KB<@XAKy*o9UU?EQ6PnBTV?8haAY!JuZl93-Ef< zbuy6R^={ZAV#r1)8Bs;@;znJKin4iGVC7|QMd4Gw6o9*vNlLuVj1h)sj zQ@k&UVp&rW<7yDXtkP1+-->OT{GNXrzdadp#g`uUKt(5Q)@Xv7o>nT1(v6#_TVjQ8mFbfaL7hd_9-5?YeiX@p_eTVRrT1g z#ES%UBLMJ>khmqk_oUFcsx~R7d{K12^c+YKC^_4zpMMJ^n8-6Fj2WeI3siXO-wj`% zQ|EDxF9V*n+u7LEjD-bd4iR{6EHw7kOqgs1UljJnsoS z1tm3SJaewWc^OLm^Tu%OqgT3uMdq2}EKqik$N zI_{S*FShrN@aI`~-<7-B6-;?06}bMa@5f&4+JEcC*b8kDepntV6jxNNKHXurpzzgG z0jBe_N#|_@_H9PS_(#;$_!jIB8lX{|oZpqG=~O1B#b#F4*Yc)Q6f&tnXJ=mpqP5f- z0vL?aQ=BKWB3pq@vo0Ei51S>1_w?L2Fbs^1zFHp!5VrQR-@E+OX3*Kss4Fd1z`jA% z)_*=_awE0Gm+X^=6DM-Z&yriBjMzw~xg;sWBcq5#>Pk=R_Ls{7?uVUPLn668B~i6J zE&Q4%{(2+ZJ7$eO+VZUIINwRr6%x~n!PN3>#kOi7RHWbe#%toa3&415ylVr{!Io_g+o z%AY=G5H78ifhbKiDDI&BU@sK@6Fxr>VR3=|sC-qMCF1!fH6Lrza!tvb%*PwatKO|l zB%=Xuzx57z-V;A_4JB(gv^cjkP)Fy^Z4wvgv=0t_smnuA9H+cUF`=N})tnr35`Um6 z;4Q!R$z{lv;>tp5L4fwU5hJ2c@>^F*>5H?>@$)afyD1Uml1FB)FI_k4ZZ1Ua@w{0c zg^bOI)!5t=oO^d7CDw9Ji&P@_#_naH#eD4CYnK`FQO!&F4>)NrP}9yO849HHINsY= z2_es>>F&)^E7!ks5yjdF-FRor?0=mz*D*~h$ect6Tv__)5SN;QCFr#}GI0@^ImqkF zTj2=)Aqaw-e%@af#ti8gtz$j!k*DZv*#TZ-Dvtc}2h-8^AeD+NZ^Oq$$bXx@MYON8 z*SP4;4~jsW>AF@0%e9uUuBxwkkav4!lyYogW$c5UtEVPQvpy`|(Tdz6G~UE2!Xd6e%Ra@#}W-Y*V%pnva&c7-3wWacWSzeqMZ$^;mzX31P_vvd32_ne5zc z6=YTZVYsQXpeto7xcJ3=YA`7R)z>{wHt_tOPf2Z*be)FtWAwcgjepN9O;Z;7g<6*% zz7%u05bU(k6|lgTOR-?;2Z6vHflSei%}xof=y9UE*N(4nURH zmE7G)zZ0}#Li;u+K7thE>m%{d_{6C1Nsr#~8F0bm%-OsP$7%#ip5UDml%RiF$Jfp_ z9W4=a0%ZT%lA%^GYUqgIp%<-Uk=X>m+Wq&CKCkGlepP?ta5kt-Wh;wwg~KodZ}!6Mn!; zrO4hJj}CSPg3YSHM!cv=!Xy!Bvs){f8-I{-dPM>uhX?R;1b-p@W0NZx535~^3%4#% z%;twgi9Pv3ow{;{m`6=E2v{V(E)H7zkc}(@$fhL+>xS>(= znT^%3%6%O&8d>CYy#K8P-|yjvYZNP696@T;xcKDN3Qot9M5b+{e*5M7@E1O`^P`8T zSlgeExqq71ZboJWF-{5sOir$_1_K`W2m~DVwSZTZIn&-X^Q5lJ?l9gI^Q?;!VaaqL z`9@Ox{DrIY?c_J{BTUop=|_A|uQI+}3Ef)ksVxx9^ihV|uFyx^`mmAQwPnVAFsgqj zL^7$5Vf4HPc;YGU?e+ML7v(@S!bL?ZRoe-2u7BQU9>7jh7pE*7U~~L*W0|kO;CMrxQRm_5kEeCl1$NS5M~VoPpyF+w5W zE2EQ|nHF;mbz(_&H%O#qfNYHJ0)NBUw=9uF1I1LCze=WS z{_ctX*FxNT>oEg?L7Ks?{-YB)Uvv8BwcAX`wTE}$jU^_&O51yz{U+}7TH8iu7=K4O z`tqt5lL9M;Ug!(w^ThQe9bN^AY*a66$1;OOtA!sr>c5a!H*NwJ* zTFqRewDaBieA~^Vp7tSTh9_qL}AoKiV!C zdx7-%YeYla+zh(1jHb?e&a&E$VzTQbxXgt9VB< z2m-6^@=Y>SxK z{``Z&x+FQr2L}3BeJAwp&Da&@Y(?=AaA4?EkND-IirnX86SbjE`T2+h{@!%no>dJ` z!i|^Po!eq}b!TMes>0%OLTpl+81)tI^z>;kF|s*6cox!`?^eP;%-<$E(glD}2|c@> zr{Y%3aXf2&2US{Y@qbw&!va0a$oBlgdjQo4HTUecq0BW@oE8o{x~j?X%&&+EMEzR&Caje|wsNI)5evV-46A+Z9&AR!r`ims7`6i`S=6eJ`h z0^r~)JExQtMU3(yD!MZmE>{|dn^=ZM9+$p{L1d3k{#t{4ysf9;^a!w>XA zU>$*ma10#n35NlHH4MB5afScs3h2Di&v-)XC%rC>G#*d9)X0}|7rr};U;K; zM7VpvHC6wj;2^+%Fb6mmC@v%|At5FWgu4Ub-cU!uU*U~?+~B{Bf5N|DTn7PuZYVdP zJ+29O0Ky)Q`vLf2Af9j_7VQBK@cZ9}f3E<-!ax`TiUr!i9S}&sf1=}Hxc#3s?(oqF zZ=jVBPJ6;YpV3&9P7GSUGjW&vR_e~^&a9~^CmypnZ*>Lj(b;jKv7@RJDo8Y+d`FCD5BoqbvHD@B? z5+(5$M-oKR$6a*nrSey$G*JA+C9)$+{I#yvJ380`I1pN#B z4d4<9!d>9Me}?NHOhN=G=mNq1I$11E_)#g!9PSN=0;a}MP}wl2>aeDxN@Yebfgc}Ww(2DDc+4xzwWV`56`C`F&3uehudKKsj ze0f05lFEpUQ_g8w#gDOIVgH8xU|~%jPl>il_b}Ep89c|2LBt<|n_}sYedev=Gd|4B z^k#Q=f2E1;Z+d6yXG8BDcrOkl?zQenc37@ z;jSb8p#*4=i1&Xlrdtr-v^yteZ_4yop+|*`e}pubLH2WhgLh+_lVP*611w5OfGw~@ z=GFVMFY#H?Ouot;ho0V5`^03GR1qAQ4PR7PhkcqU?saB_|etP1YKC=6k zpnH4Xb+0H=O(S*W+}vH6_Mu*}%N=k7LLb)e(H$r6MOUYp@fPC=^#a6^Y(_!W?ZUM2 ze_O>as!n|j!l4I+rEN*w%gvn6e|+pNw3d%;@SJhVdJ$j04RfC8+vvNVD&H;mZIsor zmM1So{34C^&gUkAfDSs_k8>#kfr>wUhdL&&hdtRr`&O)Ox?j03C*)7n;@c&DxW}ye|BZc!j?#GFmd)htZy8C_2a^Wf^MN5!uqzO-02X~1~|e|`pm zTM}oII`^9EqeaQ=DI%*7R~B3O{zrXLduE8co&byRT4&FaFBJw9N@9`F`hx8p#=K6<(EfnXFYwZzTGFr9eXTtk-R>%HsHzJ z*WRanLPh3xnh4z4En7YwG3P+{NTv&mY6}v+6?8Bk}a zeF(HU>%PLY$4dqcDe4}rrT+WJ6IJ+ zNyar9eKbwO6&E@Ce=#eN!aV7?GtRlzzhF@vkI*2cTfa7F<@0%Ery8SJRI65~8Q z>?z?H!TdaL!uKCH5N>5UYG^>Gp<>8_d$K3Cd1xyx`8wL@f97GP@h)3v;{;{takJ1u zN;@ptJVDaNZtr?hmjm2~<|!osXewaQbo_ zys)+~7m;Ro5X@XrzV*g+i!-6Ry4z+o@+HzNG~`wfG=JfRIA_yM3D)z=iN`AksuSf0 zr$R3eCx@#nwx3b5cTc{bF3;IfrB(2nGCT|J39^iYf4t41{vp*l-=>c#nwH@?ie-JS zCh<{%?TuG^kweqNqa5~tX^AsU3}X?gYnPPqJMFMec4D5Sxsmoz?u+XdTSQ(;-#c1F z9j!V|lDiw4udzk6?u8xPNVJ1y)B|{0SU_{P8yS{A4V#76Klt{D3_3vkK23SHJ%pXW zt5EUQe@10AtuhlJpZ%n`G@hbNubsF~X$h(@lBgzfb9!7e%jUJ=LQgASZ(@f|y1mS` zJYmc=M!gnsgc(q0<~_kVwY{7rS@KEd-DE;|wnhX!*MR}~EhlN~b}#pdXU}FRo(&x= z9Js^1lERr5AsL&oV9*rhoq5(9Jcb?Y!tZkCf5pBM@!cEW zy1T4Q(~YdOFSv$HMFoDkA&d@N1^6?DF8H@=Y{EhqQ=>j|&l4&Ld+Oie6mcnFdbHz4 zE22qzTl+j0%r)($9@@Lp_0iFK9l+kRFj8^84&Zi7K2p1XWVyU`YycY_M&L7##ARU9qG~gN)+@K?h4NX>AgD%e{T!s zq%7y9>3xyPt|+-f%&L(2{bVnww8Y3>pjt18i|Q7qE}cb|;n@e6*;#qbJ_}>c+K|$L z;07g26#m0*_lImn=3N3U9_mjU;zqDvpKT(x3HjR)oOmenTIp>*hyuo1_`o0n7@M0o zdT(a^r&wqB06axVqwf0=Hmi4Te=R1d^#S#g27oZ(K(=D=!DV(?X@nXyf#o!fy!7j1 z34Myyse_L+x@_gSQVban2hG~hwXN@{jvPE_Jyg_S9fRc?#@s^+YUw8+iG@|itMRn6 zqBEsBC^jpu2I~1XySN1Tp6d${B?OfihhDvrQdT78ka&(S1Kf`vTBsYZ7Eqm$%sU?Wh+j3O&2^LI z=lFx2pw?sEv`Fiv`g|$We@a*!gJ9c5lfC-B zwQ6}i#GGKAk2s&ye^R!DwwY~|glEZ?GUodt!}w6D;H!>?-oo@+MnmuS;rh->8>%u7 zKWP&&-3LnK=!C(iqQ?@*3`ldqzVF#}qKe%E)J-0xIm{z_&j8=*PnY+`t!EU2#0Fhu6#>Y@noL-e;cwbvj>ZF`wUDw*Kdv>|$b5{$0X8jR- z`8tb-=POLAUkMfFkU2G`e9FSSyRDc{eK80x-+{tWHEn>Su15JTUeXg0)=zvwx9h00 zueThBDP$B(e;kn*E-lEBd5ttZ^Jn$!!81HJULOQpT&7XEUNl~%yL&b5S;NPM3Ju1y z@x!c|I7(I3FEw3?Z_*2EpL?=1H_j7u((PLnPA+`a7_k^)u=drzi~u3(LzB4cQ%*yk zjwOyknldG+tIWIBzJC?HJQc0VjZ>yH9*5klu=Pokf3ZjTnDBXhkR2vVSbTXsq75Bk z9Ab6Sm?1`UNX2xYjty~g?r8zOZ7w^$cF!rtv&;F0Ot|smG-{hs3Mf&GKE&(xXe_O>XGxn*mE2M``By5k98(qBoQi}Bl zsmxGyzS+5<1W)0d`%2yX`J}Av2j|f@$SDWW>i`DWTeK!xyYUBoa`(2V;OW5QA}h}M zW>G0nIsvCzcWPzRL(7XGqaaYQUGQ2%)w&V@EHUOS6)a!JdX}4%G#S+IFD)fz`nF?7 zf9F+PbU~s!8FRSD@oD}3eG$Wpv%Uw2#%WpL+^LXKyTcK;5O3#D6vNAv*1Q)dkHXFm ztTAR{wxK2;WF~GV2vBDz2SOi3bX2CUe#=p2cu1yAm~@ZG2tJ^<0;PT$V#TYJz7kr> zGZ#?nY3rAHix80C)!v%(wEh8P*n5dge*q4+2w%;PAoXkG&@)v#oR3IccH8Gi(IO?H z`V?AjZjlEN5x%0a-F0uFa5H^_o{f=bgrxB{0;6{XardHP; z&y`eS?IX#U1Zhoy?mAwVvrhIrqyKS$>aNWl%yom%#F0+}%;^ zJYy8YYe|{Nk#X22IZ9NBrr40LyvSU0oy%j+@9#_6C<}idC?N4lk{&i&b;?<<4ax4b z>eAy7Uyg7bh-e+}H(ck_k^zxUf7=`;#PGt@O6H#5)_@WN2QNv zl43TAe_-48o-}=Cmw5B}&~h^d+$?Q@7@OD?zOFNH6T>+^`mX-GWkEL5XY50)4HNx4 z3+4!}Ym)oD0+jDO-Sn;+9I^teAwI7@53KjtEI$F4^{2_+jXtLb&mUB_f4seK_UTcc zm@WJ2?5$$fs`acga1+>&WfV$Emrf52S(;LJ@5?>(%nzlzYBTn*rt^sgZ@)AkwbiDF zSS7k^JWn9)%bl@e!vQC&Pq&*fg3>J>x@m zeFNevh$u(%D>a^`n10;52wK8BCc<{z{xHlBVgP7Bm%rh2nanmE?)?G;p#+Vkg3?wZ z4K7dN3cgk>)=wU!&r3NQtGrAKTC;ul0@T@5lY6jsScnEyLL=FiQ=;cJbALH{&z_DK zIh`wa#Acdor8KhVvncTg7_tVFmHV~M(D?B?cZchAh&0x2Y8{yBnu!pRUeQ`mPO$gC zE%Q>dlM+nR&wFcTp@h;~$ z@S#^fFUft7j)&#DiYp_UqksIlBdR^LB{bPDSDI@8$QU+OAaU z-H%GM@D3gIq!UkOFTAmr4)9Qp5k`d?QGIW^?7LopRG|T_G`E#&xAo^JZ3*UsY}OyVGt_BYm^E$$e>4 zr}i0gt2wnjrhoJrvhqNP)H{oljwf-$*I(X}q9&{l)RNowYd^WwEt-30&iI^Fd@T%0 zKDnj*lgj?4SzYH6XDA<9Aj44Tb02CslxioBJ5L+(G75W1+!kW)k zS?;{${Yvij^SbE?z5Aa(@y>X@hSjbwe%ScfQ?L^Jy?}=XIuxns^x7hfXHFb}Ju~aQH zH^VR&H-B^7k0zj`2-2(cv*~$YS6N!|38Z8_x%p9pKSOjXs&i&O!}(+n`qD#{oW{WA z%I*DTZqv}6pt`|8t}pseZUi5P-5u7@p$$0gw^n8#^LVwDNFpa|9lj-yb>_9xKT+r9K=H;V!4F5Hbca`;}NNZv7Vb(iN+Lu#zoV2M66H80o8Mv^fg zTZ4`*Nlg)6&-4*hv8$+;Oz9XNSL=>}a(A4Aam&`%M)9EvCYo|jbv{tRiPF^#7pd)t znpZD1d+N`N)g<1jnYIS5TFj~Ztlg)7K!5DGa2?#{9yjuo#7T_rvPhKx)X@sjE$W(; zFdJ4{eP&Wt(RG!ai1gUdE<@B4soZL%4|eq%uq7hZ%F3$lydU^xdbn`^qsk*H3O(+G zvogxH-3;B>S>y1@x><6Vc$0J^T?~VoWtYZt^BVIRA`PB;@`Z~*|AtSt1r{W13V&vX z%&MgeXUF*EbeFzL^h1n-i7SWOv_(lkgA`b_&Q4?1$akqi@iRcC~W|+JP$U_w&{WO(ZztR z^y6#KbwJV`4T^@gW5Px5un!5kc z%CjBe)56ANF~#yY_LFOVCEhCLflk5Px6*DZpqp;lc~a+Q?o~&DY4}2Le==jIqWeB4 zI~flVcL*hlacAj}R5C8Vq0!E#N?A>jI(bU_c*1f859TfQ>E=5o^`Q*>%Tz96RZrWJ<>$>prM*C(H^z&F>yO-DGOgNIM+reb#bdU(n-HVfr+O;y~8IIes1PUYs5NpJugb7wnR#yq0j>%ryg zHTii&XDHvr{MUlL`gN|3awXX{bv7crIl8xc1a}xrs|5Rm?vR>1P4>*{x($ko41pBK zxm~!q*5-aSiBt^k$h`VLp{jMg3T19&b98cLVQmU!Ze(v_Y6>+rIhRp;0}~T6GcYm= zFHB`_XLM*XATc#KI5n3r4gwSfF*hDol(3Mn)ETMn+~hGBOo22TS08pCEdk0PLo=X*>;HtH zM{6UX9pF7XKv_}-Aa4V-{+F@LzYJ&r|85R| ziJs}d;r{LYS0FR%zn%3B4MA2m`qr*y)+PXBGfN;qUQCAG!Nq|Vpl@yTm!ZC;J%8xk zU*AdJ%u?Ur-QaKP`T#LOMS%W$h5xS4-q6m>#=)N6-pul^8X5iy^WJ7rYa?Nhl@-w1 z!5;1}ej;XeK*RUGyE6Rya4oDs&erb#LB?j*M#g`YVdQATplWSq>j;z-`M1rx2=0%} z1n2-@V`OCHWMKvXZ2>?RLsN#o5`U<;+5rDnGW{ifuffyZ24n*;elG*)X=V(3|ABM2 z*LMN}9PAu{p6>rt{4auIVgeYM89D$AfF@?vaDSq|i-E@f!tdvAXXXOXVtgMzCII7K zpa1^TexEQSkhP`jAM?MDm_bclQbkIJ=HDg%S1BX}asjy0u>$CrSy%vUEPosTb}n{+ z=l@1g&^P-xi+^}ZS{s7^T>m2b-lhK#cKY`OQ2u*8r~v;POAhotw?F{ppE3W&$i`^+ z{>AkFdD#DU`TsZLe?|F!9rORoNX*gF@^3xmzYP9=^!iq2mahM{c%NHGhxZ+j1-);A z_5U?h1O97qWr0R!j#mFyD}U*r|Go=?)+Uz!ZKRpKn3)UENWsj((Dd)w_?KAquRXIg zvj!@F?9KkVSpalQjEw(B_r6?)7Vo!*{rgD%tpdL9&i`f zIL7x$VrF9lxHG+PqY=>M?;!>-&|8BX-dzCi)p-JpL3VI|9Vt5-fPX>oFVVjcJAgsx z58?nY2>(Hx00xmihzr0V`d`Gs2w)KVgO~se;(rh`fI;F9VgWEn{z0q&2B|;jos0Az z^v*@*4|?Y!`v<*qk^6(*xyb()alUg=_=DcFEB!(5*_HpG_v|Wv(0g{(Kj=N5+8^|u zLF2!O>pg?!AM|di|9=O)Gc)*u-aBDnr*CKhe1Bhz9sbB!{wx32g8WzUp2+aOi0wU? zA;|K5HvS{|YeX1~{sG?;0RPy(w+#3{@!0>;+d97Q)gPDlju`)O`3r#@?f#*E=VtN` z_}(Pb|3cRHCYie0m;(Pv>0M^_5BN^{pXuH!vibwxFD8b6_Q9jdq zHTHi}z8|i=rM|uCKMdZZ|8alcO9lsL&_C4g9*%#gyhr={MYT5s+5NMy_a-_01HN-} z{sWocyW;wX!+*Q28_@1wIsRw)4IS<5-e17K@8|cM;XnBA=N1Tb0UE+B&4Ubi0?cay zTJNg_@to=Q#=p#v?Wv_u(YY_#wK+Z_!6Z^uX83K`-3lfSb$?pj5v9BlSSEULKWVOm z3H}+c*z)A@tQ)H|wbuf-IEmRmk#{0k+eZM4Pp2ZV?|<=P>+#js0-_nbLyGK&ts^Ir zLJr!!bFa8dZC}aCXwdwg;(jH&H2ibPG+m@>#5doZ^OcE zW2`m`t%Oik>?n!NKGurXqhr z%S&tEARCIksYYY{23yJ1VgLsFt&2))2xnPLb%oyca{ra}EPGTlg;V;;&Dj~h-qkW; zqCk?(0JV|G+%Wb`6Qk?{Qfe4&JV#dE{7{K>HTV5z0jU+E3W2E>u~YCd+2Dh_F5Qys zCx0W9&n7fAk0)Om5BW~QAZInd2kUz`H72X!hsoWbhe@z$Ff8xzYS#4U9p+^R_r-%_ z;)#ysYmJPP|A>@??`A!mySqh<*o96)#x}LFFm4Qy(<;v(!xVZR8vb1=*3ECClqy|Z zs~tKP!>c@_;Mdgoh8$g%|K+A+TWb`*Cx3oPyXv!7%Bbc{m*%4Du*+a&L``t@fUg?4 zh*s>(5m-7oYW?2NIUW)&{FXok&j-);*o}^!DgB#yb9&vE@yH*`BN9aQYu5XbI>-0@ z&e20NvW+v;E>=x*nEM(P$>^her>ltcc6(@LF*e5Tj3S*L>;k0+Sx4V_w2v7o+kZ_x zCMN0c3zY;R*N3X4XCbUIEN^vI$<eR3P;*$ttEa-<)G?Dr|hx<>nM#ts4##{+J@k&u1<;_Ro}%lGbK2PPWVkXuH^_IPUZMuG2!&&)`;mS z@h8!JPyGJ7yTBGR07fT+_$lH8HIs?+-2roFHY-EHkE|w^4uR6`Z&e&_EBbE7Q%v|r zRH2RZo2eI9zTu)Sei{@%2Y*ZMj@d%Q486Zto3}G>x6MJ%8=@b^I5QzcKHrZXviKNe zNoogYgmt+#)o@3R?jjn`XBV#?hsW<7Ulu$S8JnDvb=YJ-@tR!{$rDmixEDvy)r=rH zm%b|RD+ALhI7QwrN2c($Yndm;JNG>a@5IV|gyxDsGm$@I&(L%r{eQcX&ov9Opy5xJ z-Y61d%7c)=<=v;mQbK$5x6;)HeV^_pc-Yo5@)WEDX9sD1d|eoJTN}=eOE<(M3dYuB z(NRHy%TjQHBgd_(+UYtji`BkUQc5oo&KHK%sbqWM`g|>Twnf7~Aap`{usT3>ED%@2 zT}Y`$u}=#T4E8G2Cx2dofJ0{&H>#2ylsJc}Vdevg93Vt%@g1V*fc%s9c&R8!y5nWb zlE&s^vEDB}lqnrOLa;i@#PS&mXsgsm0(fZ(Wa;f0L<+tvlnl{L1vy%7*+cg*WfpN} zB_sj%Z&{oCbQg0vnCg)fJ}ZYe-eQ>awx%gPP!|;`QDR z^NJy1A}IE{^)^j)pt})NRH7wIttCQ%mb(o(C~aeLzoYJYe(0gD-Olg$ruf`0tN|#B z2yH?(kSM=EmVat6HSgb+hW=3Pm?|q`IF)~dQh_7WBR|D=51_=B?&GExJ~bPY=E~`C zk?5mCbJ`Yto@I5>Wg`sPi~h0n^EoW7m-afd&}iF|jly8WV9k~`N#d3sARk|K$l13A zD<@}tr`aq18w$qOag4BWpn6_5;Y0g%m&w!7tPumm2Y-4P(3ux?Z(9=T*3Wk2;SM0W z&HYF{9MgG?CkWX`8tjxZ>6g18?xel!4uKv&00kkle#8^!lLzYW3{)`GBAw~wLdvIQ zrVghpS#b5|MM3iz;;)cb{uXRsj{C{eHL_352$!6%f<`>Bim<;2ISE&WD*)Yg#2~BJ zBaigN{C~HlVC0EAOJCjkvj=)|Md_(Ha|JUT^k|aDLB~tS2_GxU5qJWrUPB0}86keyp8Nc)_NnAM2#~`VP=)Pd=_eYD-sC{; z_2H6tXwYKuh`eC4V}!VBw&`DdeOly%*+^7N!GE_Ek?Ct|jdEW-)2l&`A2f1K!1GuL zKopmHb7N@CIFz7h*CY)HT>?v8lpW9GjLh4Nitg9^G#U~Gp7)WLW5c~t#%3L*=k6;N z85-)=p~dhji+{jrstPFYS=ic>m9J6r&2F&Dy~PfzOI7oYOSB|wepb9<%Q2RfYng9T z4}XMX+djtNm$&70gygcF6s;WSkzve5v{1(1seVcCI4I;|EN&qBOz*75^Awm0qV0sm z$`_Kcu#m2Ihv72*XkzkA3vPMjQA*y5=QE9sBs-{2ojXf<8%ogO^m(;`@03IJ)bPlA ztfv8{6pW(r1A4G^lN|D7>NrzG+ChQZdVhcED@@VS+t*cu;uJYYXd14!Wn@+klyFyZ zWXh@T*NqLtB45Pr&M=a4x8ZFhkbJjpf=8L5<}1FNP~N`3K%=IQAkkX;!=`|KF3=@u z56^%<=75i693v6@Z3srAGw|1W#ynQ&kxGGyP@N?t+EOH!>WkR1R3$$Ns+Ns*H-G#x z)UeICX~bgJkMYj9qRSxF51c*|bMbE32kY%JLHxBok00W(p1BF7!+9!h9<$Zn$VSx@ z0&XBl7lXO642HODcIw1*jM9Y03FoDhD8bpa=v1iBScx+tr(89_^eANOUnn8q%Rg40 z4a=gHDhPh=H;(mDAu+~}Ac5ou-hU;(suz;SDYf^C4xGSi7ctBD90&D+u|pzU@|#j| zl8<6A2+Z_X; ztcmf#=LJrW)fMrH%=NWj-*|pXAi!DoZ$TR}hip{35UGztqyJzc=I7qT*g|Pe+WUm* z@R_h@6O*5;dFn3FBp^(=1AnOHmX-w^0}J#73~!iHB|nOsB0!kaJqCUZ=slGWV0XH4 zbIgkoFz|;B?}IgSsWa?f)3aMaCAaH5z(+)qJUxa+jmC*yZr0^P`RI$tq*lmZ}j-{(nv<4^WL9gc+h zSn}v#WS@hXE(|W`W`Eewl2-WS$0qJI=Dpb6lnDeJGlvt*8kORsf`{#B8`!&1bPRIu zP3Wr$)|I64v0~G}y?iKObKLkMMX2)ou{>TP1OuG2NMoxJ)4B<5a>D(&n$8!w_5Sf= zro-E`r^54TfG zK#uNjb9UB#L2^<=^~bN_6Teemeu$M@l-0o3Lj7)+H}6Pp!>!m@-lwU9Q3K-6P1+aB z&V5Y|rz*KmNxJIVgej4_)cATilFnIo+R4=Q0&VnJN`?uOA5FGykROetFWsPURIv*Q z|5tmnv0>xnOn;VLU0WqQuZg8s zs~G*q48OO3hL2i&#b0yWH`(=0c*zc*KmX)O!D^W}nXo7DP}!j?FS*gofs;PL;2xs` z>E=pjWH*NGf@qAF-8M?}h{_?gF*SdAAFwdfc~__Wy?=OzA`2JK%^j!t#GpQZ#?V5+ z;GnxhpLm^at3P?y zU42#eg?}dnf|50IgYdFMw119lSUG+V8fSm3X_DVz1WeNM5Q+JN@ z1G)~6Rq2Q%ngBDeX0rbHVhafgu^1F2l^mtkMc#qY?4hPf`4DhCDIo(pB(NVm&S50q zle<40V5=4$q#yemr*gF%E0fzEiwwqzkeWo6cYhR`Fvay~VcVQbPVyU6ND(GJ z-M9F#hg}&$gISC&+Da37YYI+`q36Mp@(N-sT+!Je3Lb*jKqgE;@J>+1ur~$HmA+;_ z!14gUXr}CzE$Aq7jT0M3I^dr5Lv!husI8+z@B zj(fE;Bs|KMjEDGzWR*^QFvduqHOVSynSH%bFVLlNNMOol zrV^Y-a^EPr|FvW2zfkofwzSAifqzAJ1CDH4!auEEAa<1?%>~2c7Lx8yz7*u zCgM8Xy>+!-l`aZL&^kWS+v~G9SY4YMj~am@Bk?5nO$nsv{KkzOgvrZk8=ff5aq1(x zpu>;@mgfwLZ5ow8pa;i|SC-2?msoq;JoIopAQ9aWZuD15g4xbTQ!qF#IR_LRg1A5~ zzZOR`!+ra)T`3=DI73a3hJP+}C{p1;ttmpYum#|SKm0Vw9oSRNW_v#mE{lg?tee=D z2J5XF%%U>B#Bhq#R$=B5mDd|OSw^9ORtJhaf6rwf4@Q=fbMQvEh`+4Mt1oaOT-;BZzr5~>CJ((kL+!Y0>oN=X&9bnWqqcF@^9DgH}P+2~xq}#H^ z8h8+Tojk_z9x*?4a^M&UdItJtrQ+txsL#r?A3QO9qWGZ4O*Aok+4iBXqb|0H@FzIN zC8tS*Bsl4fIBnwFsH~o=r}%L}2G%e?m0{c})cRFY+8f7~G(0h<&~RInCHN5iD#8cQ z4dDc4{hVWn6P$EofPXUo7^5a{2|?>`S)ELf=!dQOUkQl3>LEt@KxsrBuYt`*9~xL< zr1ni-EAeKhNLLd^F22G#5<;e5?^CuV`QtSZr{Y z@{_;xD@CQg%LN7@LO1o+7$)pMHh7Cyxa^*=@O4gTMZyi^G>Kgro_+ebvT()zhcDgJ zuEPjVTC-2HI=sYm1x%z>Y%&S!vM4B$bbPOva|x2?U`)YApEFRUxX#H_C8Hq%KUV`L z`b?rW8Vsphgnv-LX^P4*R>jn;je=x7CzLcCQw%a zfi6To7~ei(W;TN;dUP0prDV|R71;6M5iZyO)7H0R-+!4?zd;O8Yoh(oDjXgL1}2Yr z8>)C3s-ahOpeLm(RJloLS~zQad4$G^K+H2l|9fHpuYwaQv_VtFi8MJ(@e>) zV(+bZ{Q?(Eo(T~}#<#5c*VVE|sLCt~h<|ME+TcfEsbG1rf={Znje_yGMsv@bl)xIQ4`o&pcN4^?^NMtUdCX(~rjb={G*#`4f6iIiQ+tJn@dslOxpc<7_|X z5?xn1HCB_Pa7DB`(_nLuU|7nAW?$_tOn(KAoqQ~%_(ynL>l9S>9U}DB=o~Jy9kvYv z6pMA7r}XB$2YhncxgZIciXi__Qw^=+ zT7JfXXT2EY@x=wmHj zBrTmPTotaDo{b`Avs(Y#cF|J z-+VzqYDbgqkoFS1&p{PHwP8gbE~7T8IE%O=!x2waUTbpe)94$ta1}ci+dx7e(%JfE z3<&uon*Kt)4ToHXB|CiU$IXFXd4FS$Yn7e?flxwRPf-BbfzHzGg5HbAt7Qi`-z|ka z5B-62VjZ)llWPBSh&xLsS=POWOEkW(5q%2(!zky}n$V5|@3PwGlUg(dBLn=G=KBLcMb}P%>pF< z%2Ve;?iEk0WRjUva!?k-$Pb@tTo^WH;Eys@`CPD3CsLU?JKMCBpeH}erbh}}HpTf!Vy6UvVQR-JyYt_XlaWW60T`V(#ywfwUdB5J@ zs=zKm{;7^2Uqdjtjen#Xa6!F^zz=-UHFdC$6Q{R20$kQeJDWTUIf$06pKLDJ$eq^o zc`0C~yQ|dQRZl&#keSvS=RZfw#QF=SD6u|(Xn*lO2c_ApBrCQ#RkC_@mFh%cDW-4a zM{(95ly?%|W7`i6@86-)u!Z5LFZTwaaCo)poRD=1*B6%eZ?Dd2 z7R7VTI90HSs5npS2`eX2IP6s?7_`9Xf((jmqApSkgaMf3FT$7n(lgGX`^fNHfPi+b z!?4Bj_8c<3#}&3vv)iO5S+XwEAs;<V&KHD=I)P7IXStICnV6}>!Z*}ZE|{m~?q{Tm2K zzh(<>6fsc5*6H!(B2esxG2lbpbZv!<~xS?Cdstb=oyVf6D-Ju2;c znhMNXB44qP($;O*E_N8z!ike$XoK%ICQ{PFbOK)EF8Twme+X=^UgSD;l{CqH4D>`q z$l`OZkAEW`3d2Q-uICX}9!8zc7Ws{=ej=-fT(ngtptwjjhuVL`EOk?v%k`vJ@QaLs_X|;D(Ifz52upY6YW{I0PdkhDj76{0|S{p zrv|Db9Gt+V!%xXgdCiaTTj*g}MDVJ(-XwWOZhw6SiKKLG0dt>@f`u@eW52ZMti@TK z>7RI(@7_SvKCxYf@05QuI_>Rc z9$XE=$nDg@YD$>~$A_tOjSQrAIs{W}L{C6~OdbrV52=DQ1K=>Wk1(zA2y3%_-EIgS z$$tRMDdR|mt?COmw`;n4reiumK>K`Rwz`?wzv`30ZFgIWkoI;PMpn*=yIfJrsI6o2 zbB;=ay*?&{_9cRNj0)YOXGeO{L7D&uV_19 z3c(+fHT_g$G*GBp-fG9^L2wxTK;9;;>uGLnv)@{=Q4`*{%p3Zy-;0MLfdf*Ma*n->ZF`>>`bdGvBQ%q;!3EKz;MYy~B zc{YBl9DYX7tMwjnf*7+XFAn9-c-nGe9l54ah=?9j<8KvEOEUI`8+I?YCHue6(if9b zN*hl}e_*dX6OG_WY9hif`maYOr+>_ZA^M+-)k~B6Z4|Mp&*M^%f9|%gPpG+%f=fL> z2~hL7fi@-C81)9B{>`j86X(~GXI2wg9JuMdu zj&vf+;TKP<{0=N=CH!v`@!pJ5Q>1Jb$XvU#Q=c zSPV~dq=A@2f?H~{^JDE zC&Dd=d3S5nvBWw%@9?NB#(&YJ0CKdKXH+n5adBFq5gOfUhI7jc~-Pjdl($2>= z7FGVjs+BZJ(MQMT#)FDmEDzTBnWRCK`4gs&I#MCRc}NfC-HnyNEr{PbL_%-wkq0PS zbP9V4t`)7vQ%owr-c&nu?2u0xEit71FJlpqie4~uG$NUWWmw+c)qk7hCtHwuUv-VX zdGoP--`gqR7h>s%5s$pArA$v2GMNi@w?2;#=$fy2Q%@4kHGl==!-@m1)E_7zg?ja}E52A^c+|WSXI*jYOFS&pAtrd6=O&XGWF>1HSm*`oAbWq}G1-*>$0cl#f=r zD6%2GYeCv%QLxR@%7oJG>WL@oZKH3B7su(vbwaP4qy-?g4bg(ev|2Q%{LjTAHtyiBcD$yYzaWDt}&Y&^k5o3K!QkcEar&Hb=u$ z-1X>)pzq@XF>xkj(!6~w=)Rkqr^j_zGo16a_g*Q)*2B`;*F)OfcNxls^+Bwb6T4G^ zT4*|j7jB%)RBHu4x!LUc;!&n7hUWYJgx=*uD$_$wE}HTun*OnyA(h^N{2P+a0oLB| z^Lo;DD}Vcd1Jg}?@01iycUG2QL}TFWnV;-$IX9LzjAwO8+ZB7TYTY9^q*>b>h0)g) zi~SR@t}mx|nE_=_!Z5QMQ$hE(y@}$6P(l8#!_D07P!0}cw0v`q2TxBzeFE7->*`V) z2V^ac%ir3HwBnn(3gLg+xqY3qWVPcBVvp;7t$$(jNDjd^l*`d<7Dh2bhP zI?E@jP@*4>fxV$R%|Vov;!_fOy_a<``U_oqrT#dyiF5}g5w`p00a?gUcnO~Z4fREi zR6gSVchKR-o|Lvh^_zw~LjiEaj#1g1z}D2w54r$7~hgyUBs=L&Df;cd3sZ@RiPLpo9 zOoegfW*jnpv?QVK43Zl_mXqkwOBx=1zp4Q~FC?bCkX$7k9Sh&7G^g@PbQ@N=2P?$23~l}S3)Jp>$mkGU<$ z0!-|j!)V3gz0Enz+No~$vD~cKN9QHG0^(Gu4bzqwAJdO#o$m>-N)!q=v7B=7+J7tR z;5KDM-+uWq)x9*FP@Xy~+CyXU?kyX>fWs=^ccHmvEa0_-gO3dQ*po|a`KB7Tl8&Mr z76;<~FmR&ppqeoCY0ggg){|Y}xvwR|*4PRk?}WYV$=gObLNkNTNQ7s@emTz|p8()m>O7zHfrpkia5{9QzYq|zCJ6hkvJntE1qy_!0R)%aV z+!dA-xTww$r#zHxLM<%N={Qp#1=(Ttb2kUX2d}p$42GTW(&{EgSAX;KkVT!xN={VJ zaEq8^GqbiM@5l)RuE1p|$bZ@xcQay-739U66|5~J)PYBl4R;0lnci! zx4ut=g=cUeX1FaQX4IbJyd9B%TYs{I_5|rOW&Xm#hD*hMYDLdalaEY(AQd1wwi&{ktkW#z}APW zOEM_bl}7d^3|_XMi2COJa&8fGbN1CWZ9;yHZWs#Hc?AKrd1pV}17pahTIY6MD)?Yv za5+j8oVkUFhSp}(uuLOq*R?iOeBkLDtS49X`qN12?JaLrhv{(Dq=Lu8cZ9*>3dn~Z z__P3q$@x!<0}BQ;p?`CxJO;{noJ?{Vhz1{*lJ>t`6ISf;A${4PF}$qf?oPn=LfS-3 zuns3Fm4mGp5$A#8%F<>>gekGwPG#fyP(Mr5b{2gymY^RZeR83!RHM}8xA2Q2Hn(Pb z3A`I{!y_VzY}FY{)52Va?!%06q?vRSNZCwf=)xBrn2KH>0e=z2E?Q9bT3w)S3F#Ca z=S+Z!jD3oiMyjC4BB#FqU_wavn7ktS}PCpO#;R9flR1)q?z zhYws0Rui3}qI`U&HrwBIP9B_9Z>YjA&UEqc_H)A>TBc?%xx8M{sd@Mun0SFzDp(UA zA`ur_x?y8`JbxQ-U<*41FL=fpvp#@f7#0?E72G%9Bk8F{%tL%SqAWo9_35o6}Dim55SMH`=HZDH< zVn?0m@aXp_uhK&f+y~|~{ruXmTawyx4&}<*^P&&L2oHQ7!A?W1i+Hq|k}#@b-Rv%4 z@j(-s9e?N40gf-ZdQ2VmU9%8ujTnyVYvw<0>r?LKTdhl_04E)SRvSOt1?W2Buu;ej zso8_es7R~CEcH&-brgfZE--|7hgt`Kf-MhKb8$IGug0+inf8s~>e2b@{rh|NvHs6} zO1d}JI39a}))`Bdxhx8$sCDAuCjQpbBv{`IaDRP`jE5wjn*h(h*mer%xKL?`$z8!J z%W)f{Z{a{P9~wg<<>6fvtsp`rNpE>(HjhLj_uRqBwxISkC{taj7&K4%!XF}MpcciZzMJaB}s6=?)Nn1d?W)oY-;GvW$2 z;?Y)7H+|`dPZKuvSH^#Ds(k1y4XbKsZncN2O56bwL3CMwxwx1fr4CVzoYirBypVe2 znB<2_w@Zd@17eX^2{Q-jQxnyfHJDs+O!1W0%+%R0!!c7L*Y zk;_~m?MSx%$?RI@=q0)QT5Fo@H|IO6Tcep7TiGi5PP&X=S_aS469^6~$BxAD<%f0Y ztRx3Awo6~QDaXGm@XkFT&wx~4`!O*|FGaYUpH9Ozvo+(KD%{H$Ow8l8KfmC|qxV!= zKKK!0RXNpbWB8lrUxo1~c|q06QCuX0dC6K8fJox#B<)h2zNXuMBqc2c69OZNKZhJXBg<|Tovh_Rc zRPZG&ZGri5!7A%^39)l$pRWXXP!ti3%gn)?_xR-zRH0a-rpPRfM_2n*vVWZNj=!}B zyGd%}k};ik6!O%Ya(S|qU8>?iAVC#-7WkOmV~;4v9d#RZyMd(gC*QKK?4|iy1W)|0 z1s+pU9bigvoZP#~(>!+kHKAK66Xo5~r@!%(m`!ymQpY@M^CzR{JK&A9py>q#DNi$i zr=Zy=2@VK7R}Zs~hm*k-=+)=+1WoZ?iTsWl6vN;1w(B)~C0jJq@8w zms}wd8*+?7M!s2wy^6)8dHt1w5D~Mm=5(s5ZHknUFe#Fc}I-c6kURLsMkTF6G}zcvHdo!*U>% zFyxE&YVre@MB{I>%0WehkI+k-hM0BqU=;W69y~LedF>ydwSQB7EK@f-V&5rh^28tMNx3o5SwDPEYDLCZ6JNQ`N zahib{KZ=8ywJUTpfj$s|>D+%8nQq`7O&T&%I~9dxaBY*$ljl~(y@&s6b~u8%8H;py zg`cXqTa5%+MSu2zwE*A*b%+d#c;Xodioq&CR%&=OJhJKcOQV8=Cn9oK>R%->3M6e{cN>peTb!!n_@|q2cHtUg+_eW8Go^vCvF#nE8$7h!!r+Vu;V{^ zZKhw(WhCdp(9A2K8XSutulb9`nR?A)rqu2=3FJB)^Q7n%CqX&r1E2F*iRLGlM2`by zm^fp^XkVHPZ1^{0u`l4@{t%vqy}^xj=snC1x%==sD;vKOVCQmfd32Y`x)_~S{c7#4 z94Ki}vw!u?M9;6z)T-`0u1O9m6~HUA%4hS4dooZ>__u_i_e2U3|Aan>3;9v1hJOpz7E^=Y&_dt(*Xm;(j}M4jm_+NL zY#_al<)_KdX;{uLFx&$Ax^2w6TJ_#x4GYm)@uwpzVPAwH6Yf+>;wf$y9RC z8h`xVaMK!fb1n}dHec8`5O}&sgb%;R@sq$%tMhCEyH&TS+C#!N3{Jly2h*1FF#MxR zdr62CV`ROljC}XCsa&p&1K09^@?HQka*n5|)>9Hf*anyje@8Rhaas*CY)I`CgZ9}l z2cghDyY&ZO8zTEUr2r$rj?{2_`MAj%#($xxwp`ndVKMXu-eBZjs~)NfK8tXET+5^C zVlx7(x3?|a{h#<_uPc3JyZp^nJVC6o#ORI~@(OWjuWMSeRr`Ft0RLV&Duegj=H1>DKp&#X{bZ_Y=lC zbTUJ*rzYMeg+;D3BlbC}DF7pbCZrZxh(9lcMA+CrmkLBxr~E4Arp)l8VVX%jQ#uaK z)_pp};ajKQ=&aMt8{xCEmLzepvVT8F8F=5@I=cT}ZL>uE(2&ej)0(Eku{OQyro_}*rm}Jlf zd3jDWJ45|cdnL!O6+<#lO2b>ow+eKoN!!z`V%EEKG=+!;#{?Ar!_UZb)El0=Ay*Ng z)MACOE_rfyr%we_YRCQX<|4gn6xj`}`IU5)V+NWOn48GY-^j*nofXhmuf|lLvS%o- zaSrDi>5LiL&oOvrYipcXWPj8=a8`X>kUKpQxX>(p4t|)21jVENLQL9@OlR#aV{U+bO6h zfx+(N+%(l^Kmak)xfV!xt}L-cC?6v|7K}>ee%)q8O}hG6K>2G!ymN&)+xrtkDucVN z4}kt~>x)?54{sq_!pi^-Sc<%xk&V%e{wv4ho{kV_rglLp{8>Daby zn;qM>?WBV*wr$(CZ6_VuwlO_3Yu1{J|6HB>bFu5xu6kbkeW?cc8?s|JjJ;(*=@w)6=yqaF>_r zbnu~=o{1q+wU64^y=QuTLl7;x8r)2@{a4}m9@DyfGb6wNQ<(7qnApwJzk=$Lev1C2 zZ6(+#gNxpTXlc!Cww|^DFc!-#*beQ<3P-oL@A0o zJs=h#c};-N0hfBeXVSk|pL1#)ZB#or;wIt{lUui>Qw~i3W`Hoa(_V?Oof#YK)zC2K z)AO1_VZ)Oc$LkU%kU0Fo@y*P@7g>fy6K=YH7*DOm9vn`1X-i*&#S+`^hu6r9&P*Go`P1azJf_dM=8Hl3jnUIPB$LIB0 zSHJ@ZabR<{!*z-r^RMX^n#ec(}*+)UlY_MbV$|0}jV8NxVA zjHYRcd>m8Vb&UP*D(w7R5Cco#A1YA2blq2K&RtkTZP9rHJ$I08F}oj==MmaBX{kKH zBZa$n0(1?OcO`z^ZnqlpvMXbZ?$(9r<2VAuFR~Ga)jBY_bhFTtEe@ZO8@t{7ic#E4 zWc~Bd_OQhqkm8D+tr9o{y4!k7nog)$g8BcnRhO*9oim(>lgF^Fl~X-c7q`M(+=T`) zTL_pE@`}+!Pvk%L3+3n^Nf|i1wR1@4T$ov3Y#!90u$|MJQ`9=sO^B)JIE}(DU7#sHYhbqQ zn7qP{dKrIv9*^Ye%zYUzY}|9tC@XYH9hM4fd(c4OaHjy+rHO&5PP4VWA;(rGQwXOA z8Y@+o5@+xBx_~7MfQYUfLDIVaF#>=dcs>?fQT=rbRhGM2Q2s}e%VwrtcYe)vsu)1J zWrG{>JKgqOxuc_big7JkaX3qlSNX0tiFHcQJk?D0EVylJTuughsa07E1;}V4cXov9|}(jdQ%aA3qi>wnEla*yOiuWp~NeyCf3BdYYfvvh(i*Nc1vA zYSOg5)U>%9?HTIYjU=m0Tx}1O2$z@%(wYXplbkb}s~qe_B&;&fqTvi8o?Vs{-`2-S zOoLybf@3ZSk5L+_hy|eG(&R&scr4~A5W+Qij*JS2pkr`*(U(V#c?uEu7+LP%(YeD6 z=#~EMf~>lYW>u~Uu^FUbj?l}_fQb>GNY&uE^U3KM+7naG!gSO6cxx$`N=e$)?^@cz z@1LCFvwSXJGJr`M2a24Pvn_%zOI?d1B{1U^sJF*wkR9JC6bBf*Af0VeeolycxLFrY z&9T7uX~vq5w)3+~&zQ5btSHoz#WC4?Ak`zRj5Y*aXBs)0l(UKQC~DOfoV4I@)r#tt z02iE~HFK%ccqi|y&MWA=d-JA}z7^iMp1}^UL+dK5wcZQWoaEz)Ub5ZMu)ouSFj$@m zJz_O5$TZRrx&Yp*XHTE>dRg)#T}l&Gx%>r!8&@XNt5`S z9hT$iL1q96D-=CrYarru?REOfPUsi0)e#l-;m*AuRkFIJ48>d%mTg zO-)no1P%c2FzE(K`Y0RvPbz1)x*gmP8P~=R#w{l{YfA{)L)bNg23AFU2T9ggo+5NC zyQMp>_|7h>2plJ9$(XmmSIRER)JEP6Xgcp#yk1iWu9#nSHr3*E!Gge7wgFP2Zn)@U zwF@LHSSo=r&UnSv5K*Os7rTne$R4I`)*RV73q$7!+5D_6H~#d$rtgWhNF|SGqFTAa zY-a|ef4^C+EGHk}#1;&Dq!!k}8n1%v+WgE*wvf}G9~{?DN^gzY;oX72n8;%fmT!sL z4+=KT%9X}7$h=V@9aWooH&Jft-t+e$f-c+H=1B5U$6w}MMj083NM7T%Gd!<=3jwTK zG&!JJ^D+^bxT_B-<)g8K6T6vVQAU-r#_FkBD~NLRPawKD=~L}Ly9F$quRLL&v_3f zZAGz_7C>#5{>nIcxZyiYtdA{huL3qc%X;(NzcU7`Y)vw;V~7gX z2KZOXJ!;44Y?V6c*oa?bk8M8QYn60z)|oXc=|yqvyVkePR-?~A;f&{B{sG8msWj*E z3k0J5>gt;hV*cChC~UWGiE0v1TKMOyj70KsV@A`vO$S#O=ST;LIBe=Nr~qvvXpTLc z82KXg6(opcFaMem{BOhX{!7wq$B-1Z%|<5$88;xzh|-~S9jb~#(a$S`kUB6V%)kV8 zmXfP7Co9Mb#>%JT_Ip*T~*Wq*onIxuT%XHhf2{9xrRcv#P@Td41^(_jF zDli3cm0=y6d;RCBot#v}TQe;mD+t-)L56?a<(V0Y_VB`g;6XT;2pI|OjjW(~c~iB# zKw*$r7}@_H6T!~Uxa>W{+BHehU^HaGZiPc~!F-a)hpv4r01^QN9P6Ttf4vX9qu9Nf= z&4-_zm!6#;-EDb5cxNb6Wa!(V4eW5VrAY<2!$X~8p(1ed1fg=dOF~Z%1t0)sPu?xz z8$yFvjB#n7Ca4-L#9_b;a!-md1jIZYaSqeZ%t}bxRHzt)JK5^{SC}NNA0BGJtsf2+ zr!gfh+1ZAXQ83sq#9j2=2P8}fIN<3`@8o$-ygJc3usvZ)hd>8lT4KFJVc}hWM5qyZGtB#Dpyr9km= zoV<+u^r57Tgs{RvFojA1#3G(`V2HJ#2o&mdaC=fzv*4$3wp`y;w! z!8*35Nxzj$nqJH}gs|j|>-OjF6U`_`F2?HAVJblP3eu0X2MRv092lAmr(7 zip86rwjWH~&%8Qrhb)pNp>G4s2%n|`F})cDziR*#>I9B@1eyc=PvIG2m8S}ovFbB$5`yht(y(R{ZU-lsK6t{ZKvHvlvYV4LJ7pgYDY;N(4cnp+I@1Bc^!6+=ft~ufQD>G0(T^QQ#80 z`2|Bj3A7@_H^eKXoy6?w^asg|TruWXMcyS@3!7(vND%v@l2Ye`b2HU3V%N*_ za=Pe*_zC}J$^zs8)x#n{ddmna#RSb!1sAf$mjoS6kRluLj8KSoy`Ay*L@?q)J4?#O zGS!&M82HMJk4n?xwL6N#ZHYD(Fc=DMeH4EM#ML}0wy24GMJb2NYjR-opoD&>J%!|O zsi8JG;6Oe{ywKJbO&_k^!AL$`rm^bchekiCL>f? zGG^JMZf@LBel-U!GYq#A&_ivP(=l8US(h!5l2uryr!%pt7)fcK6}Pi{R)vf(mzpm0 zu(8=EV$|y+6mPZ5oA;D?xNTctFQk+#ZdFscVM*My@PAfps%#9`!n2)Y`F)5qRCyX!U#~AeRAKeQ2~Eo8 zRIu4^Vx@V1OMYdY2Vm=?L|36h_AbRyc)8EC3>%FJ$=g_peOrn<$3Qc`=$plU%~`QJ znHT@T=87-B&Jj1$UQ@Sb$;t#lSwFw_Ib@LHvH*Ph3Vf(qM<)GvvnpvXqpsnfyvM9% zwO7j}tKc85HdP8D>2K?2EW0%~oIQ7&Y;_%7o_~}YI}CzmUl8Nw^8HM1$fJ#-Z@!*p zdg`pUfz!OaM7XdJa2jhZIy1l0)9oKF)>F2iQ?PZq0{y!#{LsCMY8ucxmYBIPdZIZD zlLbUV9&kgrXFXIkY^l!wdGDrg>>eYBy~0n?juU6s!asgpnrh=}xFE8gC%?2gn=+jW zxml{NQhE^JzLrE7hvIXwWgyY;%Qj4bRuXS*Iwt5Pj$}4@oN|#@Z^r%J`l8?~ZTxEo z`L0?<%4_qq2zzr-WiVRnzMd2Qa`9TMh6iXLyIRN_GIfvf$pRnB%50o8uBfa(4#v5dS{;9JnEg+G?kQ7i}oBW=l!Ul z6Bkt-x2sH{!S61c%yu+Bi}x6{?0#Bt`8fMSz}aa2d10b?BdkQ$`z-!)D7)F_vkurq zOT`#YeViywe?PQy=7{lVIH(>NJ2tacxS!mgrp{t%RF(j`y0?Rki|u>XCDEXzxA}jZ1vVWje+JI$ZIXx&TU3f zNP^GgAgtryZqL3Q?3IyEbT#Y%b zW~jf-Vn{v*AoJ;~#=eYJu?)CL^GAxew&$^3_#vhGqy|8E9$;=VT`68j+ zt=pN!qnu;Vsx~`j@V(+9;@r?=VIHw2moFo#wx}%Es?>Ygh2k9dZLjc1FtqvNcNF@K zW%YjxSG&p{`Y zo?&yHX{6e?e-zGULn*1Qu;~D{aPt?_ZGRm<1g@jBX8u!E!;%Vo2}%sg#m@e}nNyq` z9H~MBAXI>AbyF3ct%Tt~>05*7&Q2aMclT2WZb1&#XmAQnuwU2x*+BhUTOeS+fQ9`G z`a${wV8=Obx;1yY^jU63buV%%xI5jJYn)fQqng(LWHktu(MkM*_IJK_x(fql?Wb?S zzy8CH=qkrm#)5cjfjVSjk`(H1vui*p+7AJb42lWx_X7ft!}E(p=%b;gju?lE3+;IC z>w}MR0E+alL89T|8SSO*6#;7D|GDM8c7fy(1d@qm$RRW@tAv390R+7Y*e`+l138Ez z_TgW`f{a;PW|mn{gK8wP!2wMWLP41wz|K9_xk79JFZH_-hVg`<86X4$XZ>gaUFIPY zzPbY}uXSQI8m@tG{5omI;6K~o4s9WwzOMFx+5!yd4cuQw-GNr|c7YoG`v|;%LP7cv zdCU=Z?LlJQyiN&(YZyJMyuALr2uz9JnMac6E{eK4q%0k zQ3=AOnFDu8fOjlotX>-&=03b%VAo!+^BN!kNU*N6vN3wr_*$G%9rG0d4#AyqXip!O z6NoV`5DxYf*2x_Z=cl?_<_^-8e3(bmEJ@wo=~h4Lg1Z_vgwww42vn0muhiucLX z3W^yp{^g~hLinrz#4xMxmKS;<;GILbnhR0?nS-?=j?6AdIkW}|1h!`EWG%cGO9cR? z{ozP%|8^$+fh7Hoh596jfBB)f-eG$u2z~wW%K3q>KHR&kvOKuw1On(X`i{z>9+0J*+}#h7A^?^6Kycu==m14D1mVa9~@V!B#go z1)fi1w}3#v`m_2G=L%B*>rlIgXaLmDO!*xon-j3NEf=DB0eVERSNG%C`_H}UYP%|1 zE85xbmyJjHr02qO2OomJ;zmEZp%AFAv%~hVTwG-weW{7+X#{=avm~D$s~)ew1t10A zKjb?Egxi2>Hk)0>I*z`}dJFt*f#RQ+huY-f9RpM%H-+6BuKB~q;^?&7z`y}$|}1Q+ZcV$G1ALGWrwM8C+~w9i`dA%q-t>Yrd3A3C5Ty>o$q2DU8N z3A#wq8>XhU(*tv0m4@7D|Mb>&^QX0VqJ?ikWPfTi8=8Bf^s&_ZijGjj)C$9F2Y#=G zc6gkVG2)3YM_pf>32mQg6R@2&H{VR#E>@UfbrPCSpx*#7?}ZMA#H7=<53yRjJc{DJ z%R$InO}8mvAhq7zWq^-~hmU>9FLt$6U@#j!YJl2G1ShdpDjV{lF*vicvE}Kw5_Uuy zEW5D&6rJa&+iTo+ZYa2xQXH4>#M>Z|dZ-`UV*QTF$k6*>BcE&^0jQW6Ac?P|YWkNi zZirfExqVnnA+E=zN_ty4mC{Kfn#TUXtl81uKSI{!A1{n3>nXVZRIGz~JG{>NFIukh zFXL3GCh*ASp&tgQH`eE4XRAh14kkRr2-}3lVXJM=@!P06{R?(GMSucKA(kbr9B(i# zjsi`nJ3@gi9wKI@JV5_NVdZcA_Yx*2lkl0ncLtb!Nk-K<0pi>>Wg)843Qmr?ps{o= zNL?}o?3r&;x%RNaR0cxK%VSz`)|P@d&xPMKjS4dqA8N zIL(VSLs>$j*?H0A*8%^e6u!@~FB$w{I8{(a%_wK}czT0^3;^{_*@<|az}s5_TCL<{ zb}I&5NoR<(mmg(SG^135_gyiF)Qn)p2bawZL$BpX+vZoa7E?cde{b!JYf&u3>7Pr? zaP9!IYs-RaoE^#70RF-j^>o(`2i*#5r2M&)Wl0}sHtL#IAAU1ER`+BrZF+cmai+n~ zsZ~PH@VZd60Kn+L0f)<7pYG$cSkt7CP3E5~$b5NunIal5@pUMb6sn`Pq+JexESaaH!@Zu^s8VU(R&8SNI~AUq(<&^Z@s?{W7*;8zy@!t{_gv9N2k; zbdGz?m&9Oxr|pdkbg69mrL_vWjft_STKjtk;WG7${RNT{(EXtv7a!!bwD?GLtT<`% z?DJKAHJ-MvIbPgIpxL~s31|F;an=Vuz_C&VCJ&6_F;-dnr4MrJ+eP+6l{l#K2PTDE z>83veKLEY>F1(9!dN;F+sn-#(K2}nm|BQA+(Jl;QSJllB`ykaW{S>7ZDG5UApw_g# znu{0sQPN<8yn#$*8DjdFs7%AV(=6De<~3unou)DT=rW_a7M3{H-pA>XCZd5>pk$C8 zS>8B%QL#bmRR~&7!$cT#F8tJr!t(T*asMPQ1_)N8$LMKWPfX%&ONzKd<=$Dm`=;J* zgDkCcG=4s(gqO=jNn(5NeM#Wavw)Y%ZU_I#*u=mS&qm@bEUI1J9K=zFss=l~stJI3 zmIo%g>XQRap9(2S;FH6bPG@Dyq5+F~IC|~gsu)BAw#X7^CKFPTRbGAjMM0?Hn(yN* z2#~lMj8kKW1GXHX_7+mWfU7Pdp@U$ZZ`yFg=v5kQvhO?#kg)=qsx$H;o-nUltqqI% zZ0sA?z9c70rqMi9!_DQlFPg+T_)L}&E16!u9Lcbqe5qxoA>bdifiQo*QH>IjkU3RN zHwg+s^hw?>J_N@c5ApFL`Yr4ukvLy)4R5BmI@tW**bG;F!klpQFLG6DH|YD&gCYaCv^>(Vu5;ND#bI|^(I8O z6v;+Doty>&7e9Iq9&Pe9y|Ar0b<*t$I^A_eA0iHU;IDa!RQKfR|E}ng~z-sU2DE!qrzE7*-z#-Q* z%2Jx~>kCA?hJk%WvX9%ixhDx1Kzd3k-Pm+)$304@Uy(v;J|1MP^n7T#S{V8ZpbO(* zvX3T3VuM6kYeZUZIl*K#e+)+9dXvCQPGE`Emev^1Jq_vf81zj>S;{=m0CsEMb&HG{ z$hzwqOh3gn62p^bq9oVT2~CFL)E+nG{ z^DjwB$`%)WoIk2plxAfOWw4Rskflt3CidHn=<{Bxqmy>!lz`|R>!!<8#&9#ej96Py z?L9_jBXW9E=G`1JqfuvA0AaWY#ND+l?B|j}yqGGwX_(s^q7s|ZWX`|x# zbM{62CYMR$t|pvSb-pSU`F@Jn!Dt)e*tEahiMiP!JXTio8`IpIMO$*ca%G!D3y~-< zaUJ^$+wKjkTnmh?Ly|-cSM*miJ_J*)JKcj1svOQ(w@(~LmkHr?0F6>zfo403lg;UW z>Bg5RHI#zNWsiBwCM4-}9MIBgp4uBwWI>~|k{ZGFRkHu}4|NNvfMH(d2iI2ahw!PU zkD-{(q;AtJTYzUHMN;``KSZ-3rkA&knQ1U`{Y|M$Y{IBp`EEx!W$A@8U+=*>D(&z7 z2JMHl=^N)b2U8R$0=TYDm91!fq#DQX_aww=c;fGQ-Sdu)7Ml(EN!j2p5_QU~I)iH_ zr9$-=hFlGwv-h7$^ozrgqy{j04QGf#&EnF}u=WtQ&c-QX6}hb}hhtLj=FNqdw5t`J zgW)KHeTZ}IPb!rCA;?vS%jWumlep^k29v4ptMCD87h1w^0B4)pPh>YwzKjerdJ(b> z5qyH{%F|fEqgA6>Ms&>|*bR}#1r@7U^-*)`Xtevd&OG()S@GUpx!%QINiK9N#;WdL z#;BSxKS87fqP4Ub8rjw&MiAuE=48$28li7NKCceU(KbATln!g36$bx ztce~73uEPzM=u2^N-9eT7uzqtZ0Du_WrP(76Va7_5Y=Fg=0Pgsnv3V|oV=W{JqfUWg(c+Ff=4ssD2z z3*q4z;kJ$Mc?l5fW5gXP1xmpd67LRyeb6olNM)t&y=<;Av;d@cOdjvScg?c)tPfdR z1R^IpAYm3)^_iHl5q^u`NZjn#;KDU>=RW46q0^!=79CV?x8#XKsUx1Ns3AQazgDF& z>*z%B5^KsM)IhHF%*i5dr5m2ejv3Z3uFVRNu(jj(Dge2q)8ptG?wy8i4si6v)sh%j zHlaG=tfy|ygL7;8K{B?de#n77>YI4xy(959U>u8K{nh_!+oB~wRb$-_!)mh5LYaJ? zK&@LDLRB2BOUQiS^En2XAXRtll6qr`sQStDUOmlvu+ePkR$|HzG$cX&ynCn7k6G$T zGW@d3_^*4V?gAcBU1(gYZTM?Gx6`u+gn|P|kblt{ka%j5)NbX*y(ZVXbx#GFDdog7 zVDS6Z!f(7M>WqRa0wu@Zw}&ZFX#c#u(Rh7Pa%$~eLx~{m&C~dO6tWM=O|Ol{S$uxy zr3A|&jDs7mAht8DSX8hKTj0hPMZeYmDZ==fIUS8KOgkmKdYJg&CLsf7CDFVD+%YLi3#?Q$a>6yK7U6HXO04thIpLs7+HJ%H-EEb06Y_1h9 zRerkpWJcDalY-PzwY7KIx@_9FDJSLe{z|T74EeE~q7^Nr-@2||LsK-@i;5fduXfCY zFp4SAmJ#2GzT>=3lNsFNX~_SKUEFbIUvRxmxkf-l=d&ofqkhGuHBStOR(0BMlHd_` z4z;JJs4%Gu)O{JaV(vTieRS;34cz!uhDXHc?uo#OhCg-p-+k4~0N=iTfBPPl zASgD@U(cSbTyeFyHNG8R3Ai_2zVdmSc`9Il^knezGf%}e^p0j;%-sDzX=y4mzXdiR z$E~^e+uwEyP97{T2OYs!Qux1_XjQ+Cie+ey<|Dp=JI0)&ED<@H+0+SJm&@X(w<$=Y z^pU2gvBC$$t%<90Ii>jX0OHH@b0g*G9a7(j(Hyr9VI<6%zhEecBMlb|P@2Lq->z9@ zc6&5&YP=+|V1D0Rrx9R~A)FxMuJ2%3jJT+LOBgXHxv$m+Tz!~-+bt-OFGqv&FAj`N9qtZ@8foFFz_>kUMJ$jhx4o#x1H8pbWwixn1Xn_g zWODDnpAwtliKs!Tp^+Mc;S!`=vy0OpSf?|1G5`@O<8rm)fbl4@&VMhh=^)<$+& zv?7;+Ma?9aX3`rJEzabj2hqq6C+uVm6WNDe(VJDEVn^ylSW0XDy3nHK?Of0vPS7Nq z)6Nk>{yicO4I}J6fU91W1K7bnV`HyP(_>mt-&Z%0ke7GU`6h2Lcr*)HW}klU4gDyM zPVRO)e~!YFdJJw;Qfizp34@sD?O zA8m1;SgKva3Hje9Kw^h~jUYRpS=q?g@YK+bt|pqFns8cl01&-=Yp}}3k{w$znI*$8X_(rT_&Za}Pqc8I0o;JlQe@jhk#*#?7(W85E;{R455wW$od}|7ODTN%`#D zYq{WWVO2}TzdKeg{2D{Bm0V&Z5{)vxJVHEU-Pzfvrh9fIAyb6-0S% zuimQQQ&ls+?s;NoD(O=XGAi%ajGW&rdhr{f@0E@iJz)NO&|lsNh6)z=|^_X=o+; z8Q!VP^+OIv9gC&_N_^twHQAI*1Dy0zFhLQ~kSzyRi%qjpM`GR$2EX`0O;V#rKM$Jd zKov1{3qVw^_uQrB>>oqU(H$637T^V6!Bm-}H`3ata`A`DZu)7E5e>5f2e)fm+^sFZ zWG#0dac)PcI_EwaisIc!LE41M#MPZ{6u11KNoj6zKz6OKw^To66Et!=X5x=3%v+k> zRdSZH)~4f*O*GbnSIGT8vVDo3t~z-BoWdIt8=w{>9U{o}T3mz-q5WPe=$>s@ksTc# z8haf-F;W!Y&|(H1G6jO1Gyj5+BE+3-I9cgmILYY0@#PnS4_ zPGq_l3o`N~XBYM48gXQFS>t7{X_m)S4!grO(Xa#&HWw&ju;z*ty*9%Ucas$7U7dn2IzX4e zMV*&bp7N~f?;AUui{igd@OuV(I*)!y4W^E=4t3T?RwJhJbV#Q?v7T9$2S5 z=GvsliS*wZdL4}vTguITN0-Hp$O2zun~a?)y074~N#r7t=(Y<}`m5V)F|)Td6WDo9 zln)VClN;u0oZ6n>=vF>DhG71`AON*5pV#?nbDqh!b{&rhc#1S9tT;nvLuq29W)&pi z!U7N>hoP2^ZdAna&7c~WyIz%q$bE3?lj_bZFM?PBcF_?g9eKhf>%c-34AIzyno&Vr zu5Yyh)hI7|Z|*M2I5N-v{HC^%!=F*lD+@7o4z`Z^R?KZqN7J$|X&e_}I zenGTu09@@0sskU22`hI^M(Df^VJm=XM6pq5g2oUaW6Ak;Dd`@b!DRH}D%xO!Mdk(W zJv$-3L4ax^aFKPl&=fsmfpCNYqOLKI!Kvpk!72+V9vdM}<`_nXd9kqy89nqec>$`D ziR_b}T`cS}*fT#!r|54N2aJ{)CbVF%265S#ZjGSq9RC^cM@OY8+RIHE?xu!288Nll zK~}m+*dX!d)^8^mQ~Nme?C#ejac+n_p+LqcyE73}iYy92s+UgBH52<<3dtF#;!+W2 z`fOlV{K`6vVIJu4Jz9!QMv?n*lW|(_9aS0%M87n-4d}y8Gb44N1fa!C6@JI~U~dQc z%{XyGq2Id-H z1d+iXC3{fiC~HT(q*t9wIr|dIt1=_8>du)S&m)lk$w#`W>5S|g zQS|ZsX-75M;#v^-TfDrexV;7nOPs0B`A`2sEb97bIPXUnk(kf8yU<9LY~%wlLP`VPyDARz+aI zY>Uy=t0b7eAJFE=_3qeSX+ZKfLCA(V77MN&TH7<=`C>yCHw))M^8NKI(R5Djih)5& zI=zp4crXd1uP=V+li2PQ$m4P1&gTRj~Ep_&ulvq<6a z!}PzvP!S{Vkgl{LW{e>&ylv{Qn1!7MNWsF$L#wtu5`Zfqa9ToYT2KYf{)5Z!uH~og zLW82VX5`BrjSV-`9YRQ-aoP|v7$5yV0wa;7+L=;#<_sO5zxC{n(=|5knu2vx>WlYYh(3m1~j*om@VMxk?FfurogBe!A&UYD7DTk@zB_ z9XFAPqtPDkKW6$B)*VFU3rbR+P#|!0$-dOc^ zm<WhjR&^41Y^#1T13Dk09<+{>k~7Tw+Q@IAvxx zHNZUN7aCW9zV5rp_occLS#VgqP<$z-ShfJiy5t!ezY-FsMW`9zEVJ{TPljr-CW#2T z`q*4NdbE63xALQE^UEiQTQb9*6wS9zL#@Mkn`dm4H)1a!4c=t-Nj|KFo(PH6Az+A8 z9_*Esu81y|O9|VTGm)r0+H!c&ax--}5MX@P7RCD!LMe=WsvUpA$?ntF1JvK#jmQRsZ7~N zFs(Sr|7J$6_06^k_-^XpyaYH)A!=Y$#ZZa3SF3qTfDpmd*uP_#0_<#+Bjq<`m)?N-PFliq4R>PXv{06E=B@%5%C{iT5pg0UpDE z#cfsm1eh{Dr~YjD(pa~PZNP`xFd!w@U0FbRj)44o6G36n*MK8Roi9?32e@}cOPYYf z&I0D|y4v}f0>iW$-QLsF2YiN$WxPkJ0%uT2U{tz-ki0wW({bu}>jIQ3~?)E`i2Y_yp9B>_qEybXJqutTDkaQ(^zTF&Y8aUIn0roHMx;Ncn$uVK{1}}V zcH*TfX51x~V}W(4Sn#rc9{O;)u)YV7Uyw86_sx=Z1kv|%J)Uc>0nAa}_MNPh!FUe$ zpZZU1b$gednonVE%zg!wJeF*5ZL zm`2oOC%pbozBb9ZcA9upXWz_jy8C}?!%|&@rG2&ev~NN`J(3dw{ELxXeV{&sUGxS8 z80y03rlB+pp3FX56ZM6sdIgzx$a{NgbqLW{J6?xaGwCsa9e0pa#M29y-4Q=7r=_P6 z#1KrQh&qs^0Cszaxbl3U6Sd#0`y`AV>sByZRfRq!d4QtSklo?2A1!SS7yl+Rz8LSFok;3{wJ;Xx{LMwvlgh zxs0;E)e?dvHt251un|qcZu5=rdd=ezVGSO90817sQafTx-;=)5xQSDX>_+ux`=5#Gz`JOi$1A82h z7E^f@gA}9Fz32ay=KaZt;#TxTu-tccEeLC91++Ay!o1s~<~@fXWaofkcIcqarGh+E z!GGq9bEVglgbsNxqsif76NsSd0`z*3h%LTP1O5GZv$)wBZBimBI$@5Mc*hh(6Dw}S zT+uu22W8Atlkx7zZ9EA|f69A0EJ}I41eF#0DL?WO+A-gqM~85I#w(FpX^zI_*xU3J z0I!~o5#@Y)gpJM1s499HGm*5X3J5{%UqS;CUX+KA(wS*?>yRHkDaK~%lie)XA=#Gg zF3(jQgXlp7$T?Kwt_)sN8d~t)${IM-JzuB;)&)pA_Vm3W#udpX7fmF`m(;40LNe}x z#M#A{U6=TN>H0dIEyc~HUoHc_RXM(BfMaZ*V@QFW!kS%;X@mKdsL5y-dV&F@2PHha zc9PuCY^S?_)G8zzaaYXb+E+R#9q2&~I-75+hK^YJSu~i-%xT<$t^9 zOOz*pEFyy3wk(-@d6aLOFM>2*@1pOCT_DdK8<`rzEPI&3u(TBLBqZo0 z;>jwmkU!wGdCtB6X>^4xRnZF+HB}ZC3?7t`h4X*rSHQS98QBsI$tVG?Zl)SK+AVZ( zyNH|B4gsD29&KQ>A_t1L|9*vN-Nk2Z>ja|+8s+-x_}IGs=y|XIi)~!PWE$PwTR^I+ zW{k)LnF&JH?=}NV8#UDhBogs@| zgv@4ul=F^0*gmzt@F284jcX0|FQJ?uPnlSlSsH=Te%`;VO>cekj}3TmVgaEv8LJ?` zGT0qP+!^;SKWiVo1)^g8Hwmz`I+s8YYIZU1rCl_DdxyHO(t?Ixr$1^#pErZdZs-O; zvjWh7+*N@{cW`d*?oLF(hgL%Y(C^X&;#DjY2(Y=&4bt~1+^L&y4?x{#?eQDI=Z{tX z&lJ&_k@18359^Nw?(M(nd_nwM^?yiY%nzEK5lq9~t3Ldvc^>*L0sqg>=@@6`s^668 zC9N&sn~gj!k#r2tq6XH9z41Mi>D%9WHT~yn1UR{0F0Xf669^OrauVQhu13gW&6Ah7 z*!l5Y;^%h!6R$Kd18W1{&)%!6!H2q-n}2m7IH1Db{XVowhsy@Z-)kL!$5_=;#-IRd+UbKe|a+n+d4 z3t;<0fXXizGK3@{>fEmR5az}-P+$yJC?fe!f@fmCr@1HA?Vq30VL{j(72hj4#*g%b zmDW#C+rChMj*u;=4EC${4##&zh{a7ZfC{65soYDBK^J&15P;O7l-%%E-3!*lyg~<< ze1cZJ1U^254sbHLie}tO(Y4HW<|DoHH1E`RY=RV z;WVW7a1zJ9-(oC+?dMi2u7i_eZVq`AxE9H`wJm<*-nV$um^px92|z=1npysiZ%f4z zy^NBVwcZ*dX6K!Bz8`bcJv1zCaa#f4Z;)$@rgo(CqxaIn6$JDcyS2dan_AGX?^n%Y zMG>?`Jh@NW-pC0qU7(1RA-)G#qk!sw_t8;oGh6-k2|mkGs>i$3_YjSEWyp+T671Px zb6or7KuWrI1FP4qN`ewhNBpu-vDXR*&&%0gL zQ-nYcmN1HS!&wZ+#YhopE}f*ev-%17*!2bL^x_kSPW5N5h;;TDh4$^9r&w+vq;}?R zAV>_taVP*8vd^CCub{+YA6n8n-kTRASh+7MjsaYX^7jN)+6J+GRHS}uw1T}Ji3R%z zQs=1!QC7$fnF@R=ldRrMS}Fs|lSQ#`*uyYS#R(ncaPZ%B%lJX1uV>J@W2QBpR~n~S zWd$9D?*hqPeFiSfTBQ#Hs}0KdzPK0iGJ3NesH%_nbVLYf<5j^+qY;<+YChW(Q6_Mw z-d&^|xXrwIV(N2?`%1%#l^>BxGURiO4ES8&z7(xR#BO^JgE^9?yZ!)PR)~m_1o0!L z`hstQV7BoaCnze9TCe&^ZA3EDs{|LR!@Cy`GFSd*N5-n_E#BYFX2txxOqIeYUc^4|z~@ z`Smyo?9@@qO=0#Z)#(Zn=yHw(mr2ez9&Myn+PussU#XrHRQ<~~u~u~g1*8z32*WD< z)nd*V)?l?Pq#3nk)(&evry8~FE1KMs(2BjZVG{X76?Y^y$+HoV6hB0a?rKLEi-eEl zFsY}HPGp40_gi^`hhA1a*`O4Flq+a*pt0F@>gwGD@X4m3B-78jEiE^{@Fv~xc`Y04 zWLBU%T|)UQ2U0~3|KWk?BT*ck`6LC<>QnQ(R?#htDrKB#)!S zLe~T&gdfkCQ+uaM;MQ{b`q~iWQPU~lSA>;2EbvW)BxPE#JrY-n#pR#0|n3h^=2`!@5b?)IwZ9~HHD zz+-n;O)~+_Jp`8gyR65T&OkUkaJaud=~UHEimDp>fOE|a?)gk1PoP5h<>{hAq&)N%PUI!T%Ft~Vc%Toi!cBI1Jc6STy|N5&~E!EBE*REt? zWQvNN_4B$gDsQp|BXw_*N&sQmtUKef^9ZQH;64|Hg-); zsW2Ph_{JNq5Wz$)=`7-qV|#)%3g322a~s6Kajj(|ul-*DPC&80v}e3E7_ZQJ@tiCy z6zyrA7-T>qtanw@%!9|Ow{^7?_Vg#!1;wOZ(AtAUs?v^7z3YfF07 zF5WVnU}lSt$TGd^3pYK?p{d(Z&>!z$?BrhoTZ;uZ)E9?^Q!uu=3WX*nJol7q9+RSHv4Xi5*@NztH;~{y+C)E z>=7+jQyhPX^5Lf#_8{hd*~k|k^nBYSMD_r(V{ZJ^?ZY~RND}nM1O`7XRRh6e!n@Z( zzlP9cS94&RXlXe~4oSGY3Tx6&0ET%SX@b|vIe%3Hs3xTc0IwRoN$?#}i?Ak>spMi3 z=i_gqSHGlA(V@^t9=zupAA^JsJ&lWyof)D!QVFU`$Bz^u6~?In%9=AQRVZo4a$`e#GymH-CI^>z)pHp4JWd zS$~k)!MA(rU*&qN5ra}p+RM+eSM`Z~xrv#2XOf?k*s$WG4TGV1n#BeIB}0r7jDw1g zU&~;{da}i8Bk2yl_RI-H*}|1R8Ck!qag57{pn#thfre4*rUpy!jY3 zEB9w5{1ui>gN^i2L>u{hHGuz0Uy=HK41a4u)C=`sDW0|E)bA?0)dzK*S0Fg})^Xx` z3W!_2&bnm_&6SxjV^@CPn4_Qy_&!q^a=NZJXp329n_P${Qn9WrQf8kvZo$#mK+Cg& z5c>5omeZx*YE!JamN&}bR`;mvW90&q;gm*={Lu#boIhC|o`yJo)AB$V<@tRq)_)!| zNzNIn;}g(bw=c03F5cR^Tze7pdyGXejmi8?=UcQ;Y~h$3s%mgwRJ#uS?Ne3y?O7US zR7I+!t0D#)+jM~3!7kIVo+pd9(Qk_EbrAXO#- z2Z0#B4Q0Z1uZX#LjuVbjx43|?E`JM~pSlc>PH)+8$4&>V4*^HX1p zdPNrJV7lmRs&(dxbGPNjfin9mZraLRvxO++_XApCdFd7xT}v_DZ&z5zb@~AT^E;r| z6q{7n+^`EO(gO7fZ+-0ZTYp$=ukYkM(UlX+A-JY(m^V`W9*DHTiu47+Y?h;ge+FGV zT831ma(LyhmkQ`}goQUgahBPuoAn`c8|^UP6e5_0+yQTlw8M3*b2`p3rs3##E2WpT z>>nppCec)@bXisq4-$BLRAq!=O!)-Pl>PR!ls`qNR_T?XETkvrI)4z%@_n36hn4F^ zWo5EEA`f!A!@uG75L;6S>@#6@X3&_uTp}If-pLw|rQ^IcLJ3Ef<+DbfEYfJ-o^T4< zl%|mirFe?4C0!!MOqB(jAv5)NL`#|>uq7)+C8*)%@+`A%p&_IlHzD+;nTmvV3{FXM zfbdaI>(i_(B~MGoo_~_&7>lXl_0JP#SdqniBrGo-G_x%E{QnG!tqvJuQ?}J5Rk3`i z2br#98!x%|jt2~)?{Ykt6UafjsJcS8iM83krB?uj$A5<>r8M%?x{O#>6A$=)Q-Xt^ zy8%^J%A^Fbj765@I~5E$#FjhfRNJB^F9gZ?pK&VV5-R~2?thCQgm96>m#idG^aRfo zz@P49Ka-Ltj}}9xgUYN3jBa;BbX)Hc!j)e#`AnOf<|Nm-+fuI93&KSxuo^>B&*P{V zJFV1{O^m3bowU_V+I`z`2WFk~YDQZgUrxvtJ?ip~Zdbj|eg>Ik?OUH2%@oMP;MWTV zC&t08@Y(0E9DjsBCp2rhH?MVA#rONUEs0ALF6J|S39<~JX_}Y*k%p)04pz#|Y)b(^ zrVV?45|Y`w*)nM=H7S@!VT&vZex1y_aC0Fo#2ON+tq|YDnJv|c6tnS)D8*Mc)9Iq< z_3MjQBK<^z(|c+!aQ0Z?Zrm!b8~Wp9;p6v_!|!4Gr+*kJvhwWe{=x`ajueQ;25aPH zmXljj4o%z(1u&x9PCtT=-2U+HzhYP7vWUpWhOIy>S^CUK=SW2h;qru8)?Sa@3T3|j zGKPv$7z4~O#0_Ivw(?;i<}hezA!A0UGUQX$zW#RW$|L;vbUKnxjKKU0pg)*`H%lt~ zvCQ##dVe>cNQTN&CM!M8E~xqhd5F)KdgP|}d)~;yxCoRI_+Y-5XWU-;ac!AwSG#V| zcZk1wqjl)HoGVPcjk3BiBv;0r(NO6tvqqg^{w$Q&F=O}fx}xuC8u1%~kbu32Twwaq z2T3{2fTX@?(UTVVo5!#}QQJLiS^}s}%OTf!h<}Y!auBv+)q$%HX17moqlLJ+tep5P zbmn8l!n#{u>34g=@h7MdRMu8cGU^-Az+(wqgA}5hMRPlqvv=abmUx8&;I8!W|>?YgJu8J8}s(WRGQu6CoB!=gF|5wM!=y6Xpp$p*X zVIq~uniRF?Z+0H+7V4%X)UE>Maz4RRVyY5RBwcLXGIyK=q`j%cBrkaBmJ&)9TYt6C zU+cX>YDBZm%V;DNPakXhim<8-tW&3Gl5kF&b+UA>wUPM3t>Y5KMwDMaa~jn*|Jots z;wg^gNKYAdOjLW^R$V~f z2dRs>OgbS(d1c_7f#%Y-?jQnb}H>Mtl&`H$%#Q=XJofM zL`mx*_hVDI;9+t0GQ)yr>Xa5SR)8#lTj?-@m%c2rx`YS|fj2BUr&0O7KYu`D3LRrW z=4bFr3TFRx&A6;4RixbNK}{e_oLP%VCaJZ&f-mLILz8G^9m~X1!p)}ml24&`nB6UU zWBIS=opbUbEqqru&Z4-=*P67X``Q5rcB!{en{Ev|6Q;sXt3ag{PJ?qR0ju2tVCl>n(MD=_-?<{r*l@ir;}ds6^`IVii_fwh`wsFlR!%+?66IV zyJ(3wn0#^72eGxVDfSyjhsQ831~)A4rb2**iCvEw*7~IvXIHs)u`? zH|3Jr><&dD-Uh1-;}hU;_6T6l`^HnuDuW{JOTEu(4SZpVGG!ZnR68T(@CL6!@o?w0 z$$e!nC)}}lI25m>jaeEZ;Tc`r8xl{`5-mYXa5Y!Q$q)CQX@AXNBbym76=huq7(7#I zwGCX#ivY6vcePKn&E z+5iM34-E!udV&ep40*^3LlYAJa12Ea9~sOiPb6F6YpH$se6c3I4!*+a$O|i-MQx6^ zVbkl8f)Ty4*MD%K$HX2m-sPbepNmOlaY1Pm9g#CNLxJxr74gm3Ykg4O>Y8+Y=32Qn zOC>=gD;$u`X|-ytmQAi*TLY>*n+UGqp+t;?9x!I5q$lVL-V>tm5SdFTSh0;#K6AG4 z=ER_!{9z64sdU+C2<(I6KhtGD!TW--eeL5CX(!P4(0>{KVRM%)?Uny#zLV;Y90?iQ zOvB`{a)twe+pe(SbeHMjNG!X=Gz`lCT&NpNGPQ(s|9F2&e0rFLY;DyL$jtT^5;vk@ zeW66u)w*nm!675-C}XP;ES9s%6*+JqnlZQTn4T?@(^sgW-nARXaLk6Ej$E9A)kfWV zi2G`?iho^&fLc3;$Rr4R)hFcUbc3Mga}`2p^zR>wNOqa7Bgr*h&~kqWNwS(iJb`R+ zMd~Z z%70AeqYlM)i(2i?=UtJ3&U2o-NsT;sRq1C6Rj|X%JR2hM<+6?xE=fHxqEveM{SAIk z&!wMy#%}|4F3;2)mgAGo*tm3J*DS`|j4<6?eIh;!r}lnM`h`OE*o>eGlE08XS$9ho z_tQjHYD|5`TiOUTW$AYPcKm0kVSY5V*nd^*wFF|sUFr548yh_b+9(yysXU6&0#-H3 zmN+XYdtYK$Il(21&_fJ;I7@UG7PYM`D6Sa8elxm3-{4$f_EbY)XUk?7p>7WR1EyOv zNzQtFcHww-afI`HS7myp#=uQCu54sPT%w^;>+PkJpdlYiG#9+`9Z%3xcU)M>MSrf? z>H_%SdcfAKJDaQ9Z}QQr+fdSyVmC!AUB7n*(V=6=(%;4q#$?{765d+-53DWB2S<%{ zxSZUzgow&PK_4Q^oP%HT;5trg6i6NpA|}WUVk{1$6g1_KMtq)&3~%8eU09qepbQ5IyXd1a`{BN@&kQ@m2fsOaJUA`2KIZ1J{v)Mgj`f_>p`El=N2@#?&z4KOb73o<5h(wx-qP z%=pRb&9yCm^usKPDFv(w9Hc&!Q_Eqwf1of6M~4Lg(SolZTDEGRQAD=0Qh!5OE?$UB zc{t05*A9+j1gR@S71Of|b3ZTAhVq1Rpp6!&Z^kAIJf6NPg^xRG~Xj+lAT&0>Abd4}xOb!r-ReDE{Lm~r2_ zY!ZhG`#RYda@~h$97#xsKpE-+H5oXzbf?5S(8|2QchqX+XYF`YRGSf*WQgSS!TDRl z34buh)A6y7BUbeBkHeIJ6*3=9W2uKCoUp1LrvqwLBB>10gOd|n`hPEV-o&nGov3R4 zLo{EFdxA=T%M0$c3tehQl%25AqxyLlXtvHS7?XIfsa2bi}ML?dw1xq~2Ny-whseT2!Z%cV3)daf7 z%po}&&`ksst83p`M}I4{#ATDGrqOu1jqEW_DVn7OH^kKFhGrxnPa+Wk4HrTJmCf`m zIPRFDA}6Us3Fwt;TzZ2II{0|PoY9Ygt>%qDWe5a5_|+Mnh`blgS?#jp)~E|!3i13N zm@Mx6%ZZXNL}st2@Dv8ou!Il>XWzTyM!#D|F-%sYf`7Y-W5L+sl>J03-VjuM z+dN-R#*T312#)zSKaRM2mD687iSQgHzGfPQuYY1lxK7W`<$rvvAjx&i1>~}e4REP+ z%mltg*5iFDAMbZSG%XmtI*4qhAhY{Eoi(Zm-&JSZ$^w9IuIw!DCv4#kAwiIpNN8Sa zs6M=)tzqaxDSy@HpFUlHC4xx)GsQ~ex?o=0zX}yfJ?Y>t@U=>2sjDUJ%7k%-S>8pU6_RNob0L$cr{>8*DlqhJc4`>sZ^jLFz0w_CKobe9uJKV#xyh^Y*upNbAOqME3 z*^r%gg}8TRh?>-i0bSl-BDjry6K|p~B@wr-7|y?RqS+F;TW&z=EOaUdzJ%=~P)?zi zk*DO0Vt4EwrcC(mt`O@Gl0Orf zUv?2;!kz)KUx&j(yfw%7MQFgXt!-9vvku=OvH9jmIP~l>YAsE^zUNJrD7^r&F5Y#I z57^s)`=cbC@<&M9rkB;q!YR6H-PD8kx08aJ`+pcSL@e8Y=`V-7*Z#AiF8pHr>a7|< z$Vj(M!v?sHAEC`rv@6iMvoV`N-%@{>2un5!prEcS&?3TH-0%ij=*A|-mM(|G^KDtDxN@Eze=KRIv}a zhyXKZhLdEKFMp8y({r9)B~F|RZm@2exzw!k1nde>VrB)l)of!n`+pxhPgqZB7$HAc zk=mBK_fz8>Af*!F#mx!-T0$f>ViWZYgzLTHYZbr-^^E1x5-=r4r7*U7qGp@tf3WJi0BuW{-b~#_H*mU#`w9s@n z5$Tx;ZtMN@ta!oj&?t89w&)4QwSNRqu&c>Ze*QUM019}+SU+1wmW3*e&Jel*w#zK{ zTdf{HUx{72N%F4WuJU~4OR?N%tavTe6SY&Sh!gem+YkC2 z{4^W6T!kCgVb2y5vs?Jd$IdLjSZreNmk!AbX3l(?4>2x-h!0Wk>!--1UwMq*9DnN037*0ystNqsu;M-5sfGwbHByfKt;pHMRP9HsU@@|v z_svk4??c4;^5C)V55axywdjVz)eQDN6V=Ck?9!W{8vYFx*UR5^X$+WRy+$V3Cfb3W zrXKjQ<5U$r6nf!RmI?UJulnJOcq-_j(=LR6k!9iKY|?I z5|FK?%hfaK+{c5Itg0~U&&!MqD9cz0#lY4qwY?uGs6$)Jg}$b|MTT)!8$w+?%((O9 zdut*=5=LOttjWBFj))=2%|5iSTA|Zja42c`%m1txiMy{wrY(iXZq#`GA<5v6Wu&rs zjX0ggX&e=~4w+OLZhsz`J@jMYRyxdID1j=~UsR(050q4#i`ri11(q;=ScPgtH6u53 zL)Eo=N!ZuZvXbShvwmC2fOU-8>48rgVUY&I!l|d&z^hnkSw9Ps2|9_dvP znhXmZKPVQu_4a4n>`#f>g#27W=jcCUJ%D@49vJhxD219xh<~=CtXMW7W3QjqgyQ{! z2I)Z3PbwrbY>nT+#aG5+CR(^N9t3^x80hRYFd`G#zU-K%i5{XZz>&qAO^ro|7L1+# zARV*XPRfvke-}d8yHF0eOGIu6R=u^R959$F6s$i8o~ZpIb5K zFa65h$c}}Q#HgOMPIAH$O;;?D%P5c~G~$ChsyGqgfqfq7`#@xEmGwj1%9wR@()=AN93Ho39Y|_U!B&SCYNt@R^{k!dTUPcp{^E!u~EsYdwE+>yMLvG8>IGBwm20uE*GEY>paV0CDUJd zBkOCLJ9BQ~M;yW!LQvR(*U=g+FqNdKb15ov5I!V2ni-qgA5S)#>qOmW5C4Z0G|%1e z{$cGKH^E)@iYjkh{4N@c#?*zce_$HVVfK7kj8g+n$QqOp>ufoHnNFC$sPC>>K5yNi zepf|KQzV`v@grw=FlP%O1bNEG=$A|VCNMf1y+e}R@4urAZ8vHE0XX}!wx}! zL@YZnk!rFqF}bVw0tPn2H`JF44jAvBc&n!r)3)YtqGDo(G{_)@{{u(-BTkd!%_g_G zGz8`#12s1}mjUbp6_>YF1P%i*FgTYm4gwSfF*P_eHkXkJ0VscZV{~QhmTv4+Z0*=q z#jI3pRjeJ`wvCEy+qP4&U9qhSZ@%yJ>C@xfzJL1mk3GhEC!aZ=`OY=g7@M3}UWs1F z$i@IDW@GJ0&&#8enW=53u~l0bpojZDjUWX$}mZv4npd0Qvw2TcDxYryJ1K5NP|C ziVk24w6`*IaQJ)%m^lDU?Def3KYQS412D5Tv~)813&5w`*ye9Qw)Qrk7FM6S&tUR4 z4vr3n_GY$@fX}S*qGJER>1e9&_*ZTRvrjd^#`x3H$i~p=uaf@OeTMneI_jHQI{+Mk zu8x1@G5~)9jLaNtE%n_#bAJZ2wKw}4hLeMtwaLE_&;jg$Ci?b9mOuxG&oG~{|LV@a z>ID3k>h*1HE#3b1w)xxYKQWj&Ish$=8Q_>%K64s6e&#kYvxZ~*YgQzzjcowTO#hG@ zIobYG=M1#}yFpZc%?$M?2z?_PYfCqP5zrWpQPzLP@iQfW>VL*E!~Y)1{|glVuMqsd zLht_{x&O}5f4Ri}zxVmyLyI|CTFUBMeGb4sb`0Qi$>>`HKKBej8t~VmakBcqT=cEX zEZzQJPXBJL2K)zFVH-=Mf7eMk>VLLG$lBzS7A6L!e+bPS#LQfQM)GEkhNb{xeap{& z{Vji2u{HwQTbfw|KY9JTr2u+nCZ>PWDVv%ZT3G)@0Q)~wKx?CahyO{{-{2WF#8l+v zWNH7K<@&dw{O1rjD!bW!V*8I$WNeK7^YB*~VPP9rfCoJ@$5#M7D;x9Y-TMT@#lhtD z-=zFI5c9vzGWw48X08Cu&$^kI|E~T&e*b?uY5!Z8Z`Ou3Mt_ZslB2%0(dVT7r{FKO zp_9G+C&7PT{?DradH#Fmfk0QFA>7KMjUi8^kLy>daG zZu(+ro+M+nyxN{zwm|C1rOK@FExAio|&1`yPm{F76Pgrmm?%7M}0p~3EJ$lg6X+N>B@avpsw@5B@0pN?*N_ILG$?~u>V zoVFk;qfWLOk}Dz%aYl`8X)?x@8#I4D>5TofmFf(?7pkisZmnbzRsFRig{>ZnL=~K> zk7jGX+d(uB3@i|U)W@a~mqI?P#P&Q!H9A6sj2=9|O>;7_GuA*#vR2fzP=%TFpoJZS z&=WzFNV&4bj=J-)uqRFx_|+PCv&+8n8>H<=06Xt`k3qSGgSpNjex$iCU-^HHAQ?cd z7OI!=!dw$YeQRi6a>D*a=@XKY#Vwt~wdziFwK-xioC2PM3MF{Q6BkcCsvcdrZNQB+ zQusiU|GJsYO_HD!M{KPSHQPW(Z+a7VmiyXo1@2042e zf{gI90}F-@9>Eq*4j)1CyM_u=UnjIqKbY=}Fy(UweD#^hZc zPTGwTVEe4QC-_(9t&d)|9ze9;HKOn08a*>&tGA3fzr*{EZC4 zz8iOsFxn-PM2JD>PnjT(Hn9;XaPFQP{k&8CH7Y%>@##>OmRQBfHSLaH-|= zVNGMSxgy17E%yiM$5QJNB%PPAy2P8~@d?n>*gvk~k_onS3oETM9y?^&7W;G&--~d$ z>9Rh6D8cw{!zP2;SZ`$b{}3+=(qw(pe69muOnCd)?ZfWY!Q6i;F!G9{*SnqM)mBYr z0{=)hb(EYe-nW4-y$>ldSizUyt8HwrcKtpH(i$nlO=@D&M2kV! zYg*qL3juNn3Ap%@<>0%+(zn4YBWHVVIL=^*z2ZA_75;(kgJR(zrC9&;BYqFX>3w;L zgCzXb8!;oIRM>y0tv0eoW(=lXegKA0Gq)K15;Up(O2LpI^uvlNSZ$HM|DNV~*SxSXt}1;EQv3bhvXp)?jK8Uet{S@DbmI2n4x*8_ z;v@G;>_~sD?1IBs`%-q%Fdv2-ma$+D^8H%vXRQ@CG{Mh-yz(N|zExh1psXGi6-KN?v7qRSAjEaCCw{G9el>5WD6 zC}23R?VW6(DoFzkPDhuH+?|6k^}fu#egpxB3XOj*N@`@p$Sn1T_7latqUR!qB*4j< zCqm0=exbn`xAQMaqXksmXJMVz!aGCeZfySBjR9&b z!>hV+j1If9C>^$B|GGGjyqjXDD(69znR_axcLO5d^88 z3&Vd;NnXEhB2`A{(!9q*)vFkh{1+uOwfsXu0Wk+Uy-ThmAywiy-NVE8i?>PzM0*_7 zN5Ge=n1u7hD&b7ek%@8v6oHAc#L(dvdn5kx7_0D;nRT|%K%89h!DCaz!7u14FMPGX zbZi^pmoJo>2>YoN*w7||50%DL%zoGo=eB=6aQkuc@OxeRV*MzR?7x%E`QarEidcLHqXP+OsZxz+)@79Ewc4@FwS)j7`zcH@A9t?p_oc0_8+a}@yvfV zb)4TWthWPkEZ3@HFn?NZ8B-4A520nMA1`K}+s{$bfp1tarFNfsCkA%cIS$N{aL20z zs#YnS8I^i4oWl5;go5m~3G9}0@mP)AM$uk^|D)0NOvbe;5TAZ1@hVF0?v1h6+2 zXF!m3x5HRV8wSUTHf_Gd6*oTb9T9(GFlJ$)lB|%i$(m?8Zl&qlg$qeKx3nK0UiJH{{L5dYcI zjwUa-TSVM!EYGadt6LhSz@YQTx{XppqH57RTH*M9g07DRw!icE&rOyLb=_7%LTO(48)HL>u)q63NnU zaZzH{SXRcTlO;bWXYj@K;>&+47fM1~&_#mGO&9?}qSRIH&56wnjnoY|O8;W#Ji!Lx zh~2Y%GMgF{$r;?|yC3@0G`;^n!xaKz&v1>W$tbn!ztiGuBKlm}@x}OqC$h z;)2rPhTR_!19*qXYP%f2i`X|an0#!XjM!Gpqmsx{`XBsya?}d`6^=g2b)+Lw|oCqR-0E9$2@W>tdA9 zZG(;pE!2i|C-F=G8ZdFqARaD2!h1g(Gb|!iG3glC`ec$^j8$1#iZZMk<2dhKN~@Bd zm2E1xAvV6)W+_o1iWtRivz4uRZ;i9)0%b=1Q$Y9EUQhLKy47~A#D+L6#W3v@@1WBD zQLfLkrhnLx#@Bzl`P&5XR%?w{{z&D7qjyQevuu6d=eF9mVOJMHz)^TYm8_*xdZ!{) z<=vkOXJU}FJiF}%JWG750t!nX(j9z>vdh7FVJ}xyt^h;LZcr%vOa2Ezlq-lOPpMbOfd z-Loe7t|EWpfsx2dh{G0z>U*t(&kNLLMlR9kOCrrL#QnELKcZ?*FAOnsOV3zd?09AB z(*y^dnVHoLYY3P$mKO()){tl}T)Srnckv+002pqwLA#S%)$g&ry+Vn5)+^5jNW}Av z@$$0dK6)%Q6%Dz=1oZMF3cvZCgzer7K~kmZBHe#Djb_MJ_|m5cTzP}G-<@5VSXp{y z(6uw=)hR^9+Jk(HpvpVd95sksjbJrd3gtIw<% ze|>)|>73sr+WD0(Xp%ESJ^8+_j*B7>ZZOv-q$-aLQB zs~&oOZ`5h(~5O+>mu^- zF=#BKqr*wDeKYOVuE1sXjV9E9@dv#K#9F6`fZGH?A0B1-v(jA^g8}2}ix2eBly_7? z_-`bfAw)zFE~0NPPACYCm}d_yQABtyp1*&#qgAX{)BTaOdJnm)jbYixhv$&!Ef z*fa2|L(2G>w=2M71aVH_c@Af%e~XtFV!y(`aGvaay;+Wsa~>0`l(RyCQ`taQM~| zfQjUpIp#>Na>5VfTf40Cp1hAO0C4x%@HPwkKN!c5@kT_)=`z7LV|9N`L_oSxg(aHd z@86a3L-sx_QlW1`Vb0}oRs9y?|IaAs}fuVK>&L?$OcQH?K}02 zyW25*j=nm9oT~n`jtFz1QdJJ~JwZ&ZY*mWl_Ls5o67A(M~?E#LA^UGlN2`a1SAs0gmwPzQ%mafXQjSzRtNeC0F(J z5$@$#BQuw8&&IUL47(Bu%e$^)oyF48OWaOJkB1PKrXo^T|1lRf_?_dX)&IP*_D%*TLf=8yCP5qFW#G!BDw(-OV-=7 zL!{KX8Mc3c4}lVfdeO6;+UD^MisTJf<8~X$@CoUh+qep>R!h_&`@xgohxBpP>Tq**JUcYAiiEf{iqyA6RXt-%{Hd+QKq-bR1T zHE2k6z$Lw&#Th=x799ymEikQ3^4QRnKek;Rv1t5U3>BViQqe3q|9px^edNfR?iN@Lh?Qek)#+u95&f(tnzwk7MRHa z&klb+5|0Icl2BNZ%wvDJ?IX@3%5z1(`KdWW>O5>112^Shq_XDJzb$#Pd*c|;j8I7W zevri139C01W{&Wfb)uw`T|v{a-aPb09B#)NjUSW}`ZAN4*ndB3MF>eI7VrA#>rZp` zseGiBjpZ!sWVGO!k7fe8_hV%3aWrCX`{sX(@U%Us&8c_xfB2@bRr*VTIbZOxCf2WwNxp0zgz{43H-im91k-xI_^(=ju<12q0Ty z+;DAun+_;v&58v`XO(f@Klsb9ryQd4=gAL`a?+~^ptx72_qgg)O6)a)Y^wk462gCI zy3$OBpM42QE>>$XHKa7{ONmIA0>MYFptt%6=TLV*`QmRp0Fk4gYD5{D24m?bh?k&R zgU@8F7H+1Y0O8X!Z+HT$@XT&z2Yd{M>F~wP9(rldmFPA1Ad^~=t=U)qlY}d10oe)V z&BIZUFzMcNlcDF7QSkL9y23?7fQf$|GM&+sT1%WI$K*9OUoD=%3agD>+(AoxI0fGq z=KCL7Z#nJ$-0JzS7ckwG>ABRuQpAJG`KR?sk__o>!-`SJ<*oI+i-b@8sT|(R?!JG2 z53hUudFcD(SL{U=$xPBn=_2V^syrlBstXMA?j7IHhQK^`4+k5*SoBcdi$s4cN=n(k z{rSE>?N#*v?2*;PUKH}ucaj)3E<+Sre$QxANTe2>A_4MVWcic|ZVbiuYbnI5 zGX!>zyf|=&LZ8E}5OWPlWE{j41Wzc000i^=+X<*xGd;XZ%A9Xp{^Z&*9#j;e2o0UO zG}w((7adI!a)AH*rh^LDN+W-Bn5mDZ8FmUamL5~Ko9NhZhp3J`0%~}kkgADM$uO1q zcNtKFY6L}XpB8k312tNw@^dsjy*^&^R$`g-2`0)H-7US33;s>PsK=f<+5q@Nmj4dRgvebD#68PYjUa>qjkF9F)1?0NwbG!R z_p?vC;Rdz95zI#B#iNfn=hu*1G>BeG)Z4YA4vu*#EQTnjiA|_s{_ZTj=ooS?4Lrs+ z)8GK`uF#Y%h$jZe_Kbf~Zw@bN5DaNm7xz&$ZG{=qfR3HU0oqe>u~s4p=u~HEDwTFo z%h735+2^M%j*SSZ?R4O7y=P3MI8Ug=W3mT|zp?+a$u`Rb1Ia@yJWILsu#DQpBxar~ za8^EEUtrz^ummjYfu>OjF>ma&N)TF}JEOY)@<`pVYo!7uQ}};z3GI>ga~gV_2mCs? z-{oFil5+-uEt3*+IKg}*sJGq`u;UvWttW!($KR1-6dQ~9lTUPfN$G8fT_5+CwD11& zPai{nD-%Vy^cGW(Rn7=e(cVmCMUS3TF(U5F68S9egYuMy_Rt4gW-t#g>I++?Imw|6 z`u5fjkShB>!k~XydB;1Kd?W5M0`+qz@ySE(5HY&Iu&OulL4gcrvXqLa&4qzz>5nIm z0Ul@PLj%e43i_`6_{^0zN=UsMf8=+rC?@;Ybsk^D8fZH%nt@k%5e`i6xH?7kw|r3n zGq2qDca6AOHIoFKB7(?Q(@Mr_*v(FL-_9`7^`PPL4+wt_oY?&(4gUCW={>x#B)s;I zd9-&2)*0yzw=fKCHy1`9j^T&2S9!WLG`tjk#}}g01AAhKWj3;x4x!4{`Y59}1!s4f zK&O-?I|*O@a3_;I;Y=T8dy=szVvi9lsHGEx0R*aVW;{)-!3>1MBS_@@_u_Jo zidG;R)zg0rjqsu&7IC9f6ATW~sVd;>f;@wS8)@b@jF|ILne?0?j+6UXBubaVTuZ7O zfuw^{<`C|rh@z7Q##*N}9)U}FBUu%pwmp4K=h->~@!`xZ7{(Y=>qnP9=5e`T(PESZ z+^M@H1oia^QZ-ZiC>X9BAMdhxn1ZVmy?Kug&nJJ0-%oh6XUsP2I(Z0&T3pIkxWn9~ zvB-&cEw)(+6v=*G12`-IAXSou^<2Fn_Y_Qxq_6>U6jt`Wv0I#eSHr&~ndEdFsG@{OTC zOw3^UJ%vi1kdeo%y`Nfd6cAFjB{kZ_=Q3tAmot{XZzN6L6iORcY0jY!wTUr>Cu6Uf zATwFo9`S@Wo>}MFcgNB>VZqwsfMEhm=;nXIxp2<_6>(KfJu9}q|KC>vy7WP z-SoAs^1^^JkbTh5S&0IVuxYk33Pyi8RFxWBRFbdn(dXkBO?19Ch+@9QX}7Y;IAu_* zk{*kWIhexN%+UVn0P)>eah=3J+3!ioYSH#JY_B7~*Dy`YcCiE}nc*-9Gb{r=#G-#D#GxeGag(Thg_1wB2qWhf1OgjvA?J9|=~LdD`Hq9SVVs zf$JH*14rVspYcnohz`Fhr7eGZ$IIC%E#jTgq3T&^$!$_#p@@^oWr;WQ3Zid!eT+Ko zk&ziCjrnc`4{Mp-2_Y0;@g}b54<;w8O9j(ehtO8A94kopXSR>*L?t$9i`XrO7aI}6 zSB#oj)J`Dtj=XIXB6O*~W^r@txq47$5=NOlVUNqp9`_};v98%1CSQM|q%9JCz>P4_ zl6oKHSY16^#yDxRY}AuGvKhCC9QfThRS8Czgf9#TkWE7_GxFeCSqpf>p7Jqkz3S;-rU zb$SFc#UZ$oZl@DqC8~c+X+)mGhcUAJePEw;@;;jjTn)URPUB-Pzz;D9cfY&{Vl83` zWQ{2{sBC`Nzd4+JGO7!X8om-HXkkM6>`p2ZN|`o0g*A8A5`&58t*vUT?F*1R!VRNv zRv)rO_f)5RD%Y+Ib(~y93zg7skkpovZbB3f#-XLKyq2|LN27n4_b#)OY7ys5&Li?N zh88VnExq+R^$V5z&3szF@fI`KNP1yXXI~54jhz9?S#?gM)0sIsE{+NDtQYu+mhnaq zxdZrn z(;r^u)0?~ze=>$!3Q;{M2jdm>NLeRGwj4zhY_XJBeV2dcZdC*cj8Yt6qPab2t(?EW z@qir=`6;5$uOxhzGgKifn>f=|`iPZ~cINlpEm9w3OAJDempsZFprM~3tG<@sFiXd- zc!&s%x6~}kN6){(c?S5ceh4Ywgx3?#V*wQKjva8vs1C37nt|sod%v5@t^bO1;7+V< z<09!0m6U&&H(tni^hKZUoZrs`34gSOmP>P8|D+8!b@WZlH6)lfkiL>%FP9x`ng^AR z61>`1gn|zyFGem&%Qq~OhajRj9>Lg#;mhgMxn{Ad*h^u2tDleWJM;_j+czcMafVm^ z--u@kftthizFZ;~YoI)>5nUTPBXLfMwr(iJ9EgAIX!=vxAO$=vyq#pSd?5}qAOfr* z7sF`*nz8UfaoeocgD%rLW5NJOK)Ao4!7+B&>Ed+dVZVi)qW|PR`o_4QJ1?j6@;$zZ z8(EqA(I?3GX+WrX3QY@y`(x{hOAFPQ>c776(&iG4&IT!r?qSSs#{~}iV*&X=iL^FR z#w%i@)GK~}6@FjEnS<9Vk|$fK5jrqro|j0Gsk2!MaK`TVZC=pFeqOuYw`^E6r2BD169&Fud#_L#qBBJQ9U>kL*4fp$+nE zog*nKR;xPB{R@Ji>V5WMI|!WIke&;e60M$fn+B>@Bb<3Ln^{ELLp!2Fc!_rgBk&{# zQp{idDH?kezY~$gW~qWU*s~^~yAn1Zjj4)iKi}5kpW1eyVr-=Og>kJ`NHPo#e2c?> zYn42I8-x|x)uNH?Ef_^V&;*!H2(tY`kZqT~M7e5JSA;m2asL9voExt6arm%3a#RT$ zt=jH~Ehns++V0Z_;7TFTm`nt@`l>)k@7sOz_8xuKY%S#2^5&EK@+A7pP|W4*PjFdk ze@XLmpJzp#tGGQZJUwb8rRzezb9YKxroq6HT4tcm&>m=GT5tT2Qf5y zC4z2t$RrY%=c!Wzd$J2DYr<;2i_(?rGjpL9Du3?MR*Njws-f|q_>I%$yS=r4!cr}N zrR_1fIM|7}sw&(!gk~$|tFlj{Pms?QW>{uXiIyA?VoWE@w^o0Fx+49VhDL?%-*RwF zIW?HXepjeLMie=?_WJ`F7fym&zoWThtLA*^D~ZrDjQdYR(GJ?~hO@kr-v=YB->`yJiXs*6TH`4by+? z)ewJU{=I!nF*n!F1SUI`o<-SL=&9hf&x$&QB2A| zzLR26Vt=MfnX@EM;L|qJuEOP?V>U1=ite_5!%eM2xhSU%x;76aZg@sTgUqc`-Y{cw zv%sM;$$pxRR+*;z!Z_idhF=Ebjy|A#zM_b!XFjOrQ1cbFm9xFdtsFk%o4cxXdh>&S@l=(00zw`9=>(X&HYNs`U73;-W>Hmgu#Wt+mnn%7 zzkWgQj>!$!v**{)mKfnxl0Kp4>ry8?WY=Hymd}bpsDKA=*jI8i*Uh0Zp)TR_a4UU_ z-upo*6UVAK3Sz%m2h`1`;!QbLV2D&*XK&25hiJ2P((xs?uZ8OyFI}mB&(^U=K@NQI zpx33!)0PF&Xc6XjZKsQtuh=-kV~>Jv&C^+;C}0OgXMb8?1H=6N$NlnaJAwwgPtIfN zvs~VFIP`Zrks3Bx5lM?FzzzGpDj%y)>+~2{EZ&;D5fj;^qO>K7T$NN$qcHZh>+P1?zT6d^ z=ubnOZW*oZ8zAbICC7;y-!852fl%S5Orc?LsakoA7<#h>4Y*%7vs%V`@xkyjS}F#M zK6P_Yrp+4qWelN|@;*~%vRPtulz{k9_oNPA5t)jA$elx=8esvy6Kg zp}K(s(byH2%uQoxnOn>npUOAQ4jWSYEUK(L)`}!OppZHv!vlKTMryRC?zSFbiN|~l z*mObWs=yr>$eM`00Jz$eS*HOMwMx1uZrhw zAOVNt+|klGI9}~eZUkoI^dp|ttb$Ah6p@W~k>q7L zlOmTk4x~ym7xt!g^`;2LzqO;2Fi)!vpAs~-h`2noud~yCZ&*j!h1`&61A&VVLrRhQ*9P9*=YQIzo>wxEfm^?@8lG7vUgbwL5Dv+P` zK?oFkfPOT!>S%ULEj(pyelM;eI(L$`!R*IQ)vbm7p21T9)?(Bzc0!^mM8bmkkhoDDxT0hX{SMg|p@vqHSOz0g-|Q`gu*j+DUxWxtfTwpe6bbSxvUuqoRXBiLrtnn&;aK20Bv_{u>Ce9 z#&jfq0V37x#}x063XGP}0&l3ySESzvE%IBk5R^Wp;S|jUbe44p8tHFBn1HSPbSPJ# zb|-dB{!7`)4hw%7{LC3qIZ=y*zT+-7A2O~E#jv0oKk_`Jv#P&A9aXwy>(o@8;O=3) z2+ofvDqCTb(oJ)!5Ov?sph+Z%)2n@A)W$l0j0mox%I0S^Ez1j%H@sQM0AqC1t04V4WDl7Zp`ikOeXc z_9d^j4g$QhY(@qSB+RGDUg>2@ICqg)$yz}e%qe2O7^}{BPUpl^e0e;`=^>ndh8v%% z*K5qVFyk#JlE!HTKP(S?qN;2fG1ARlfgSe#8HR*Gt6wq=+}pO^2)vxC9{iAO#Yg{G z=OiXX(pv|dN_^Ee6!_Ar|KwkM4cZ=u9B?(A1M{*#$)zA(9el_#8Qae@(Hx+Pz>1Ye za+r;%Ngpx_C`gO(n#Bt|NYD9ym3>r#-e6kgGZ!%Yo6F>p@lQGFz!sEBswnj+v7+2d z@-TR_;@3R~uAtvMXWY`jQT1mRb%WLiFp-GEEr}M6dPyl$U@4gav^tH{OcdaMDhoKIRg%pF zr=mf8>;^?;3R-U&M10F>MBeDi$`HMg5x`sKP+hg2PzFR06n6Y|PT5=8I#)tu>T+dIdKuIJMIUy+KgXbxq z4=$*R((h^0wafL%6kJ1pt0W<`)1epSAX;ngM6~p-!O&s~X$9RHUl6GbGEf$*v$pxs zQztVa5EBM*^+kNiZe*x4fpMbMmvrgfYIQ+&0jRDv3L3;^V1sjK8serO#yQM%a0w7f z!Ixb9Enjy-f^yT-K%ovm!b1YC?%ViqCMm~+QmXwQP{xz`bL9ko>`&YMEl@=cI1r_{ zefZ8BTcjozO;;=l32Cqq2qKQT=a@$JZ+7mouKQHbesKJlKW2o6Pn2aa($HS>7&iG4 z`DEY=%m2{HF>o6$zx4ud@i?2?l>FMf^3T7&lv6olRv2gB?MEdIJWAEiFja)*JHF|t zv;^ij4h)DQ2bHXU*g7>Nvkx-R&JzvZ)0=}oi) zOHiG1XE#a;qL-N(b|a<)>#eGg6~p+-4?uOwq4+-Zhy<6J`BK*=Lp0xR_id7k5s6k{ zFFcUGQBGAJG*09*xe)~u);M{5d7x?(4idke3*DAh7N>E4C7rF9q7GDG@_WuW2Rle# ze@)OtBM%9JH(mOkL#7Cx0&uiWe%2uMXx)DzCF5t>Wal$tU%t>pE_9cBqCi&(|Wb^=VX^4;N}_*8Lr(4U?!N+nwoj6#EC{-s8ld^ptO17mFz7!n3zL!6XKJ% z6qNnJhEPa<(0vlDfsa@+HyNJ&8$GcSBsp=?6b_8~=!2%e=!8+5kW4auW_o|H3ZsAL z4J!wa!EC1r-{HKo8cKmm@T}LD1-!y@W)@6z>~>5)(77erg3ox}z{1cnhh_2?ows`( zW(d1dFf~d$)oQGQJ(A4H*-AJVsLzkadQ8&eaRL2*!+qD4p-3a0(Z!2&4GoX2K3@;s zZG@hCHoxAucBd2Gz}TagD0vv%G!C|Rw#strL^VqvcN%h3S9-p5+`?WG3&d~Xc(|g5 zeBKWN*Jt&pCb>kO3sW)E{e@_S4_Xm0JD%Bf1Cew#`*`wN?i*&QB)k~&rPF8LiCZ3( z6EA&#MDpK9$BBMF_bD(rpZN0Imc2KfuGXdVU<>p z>XIkJsoSLx57fJ>@6`Pe=!9D zH+8BZoW_hwy-qhW#TyMyv9L@sLt-61^;z1&h|w(X6P)DAb@!!oWIZL|3Y|oyE{~HibXhky#f4kZ2^nx%B@$EE_HAD%#1;#XZ3W4H zDboj=ot!O}dAEFyCBytQTxfBN5=>gXd2PdRT~2Rgm%6C5XsuWKC_>CUy>=maai z0?3kV%?&caZ(mTAKdL67M5?}Gso7?sIzG|wLrMrH@HdJI-qkRmEYx&^U&Rw4F(u7Wkk3T+FEQeX!(T`I%(=c9L2D05?*EOByw zohZxWYnZc=$nhLx)=5P*81kxc$8o_dbY=GgWBLzTgo^#$ev0V(21?eZuo8^ zuDus;*YnD0YmpXL>2>3B{PXO}DPn3%MgYFqP_2bom1IyHx?~b9wewHK0?2cJ`&*%% z3v9DM#si^!Xetr<^1Ps(NP?ezWxX#PSF`%6InVZjsO!7FqLdx3~HT6BIS0W8(x-rr&-?s=E zkf5`mM?bZP;Yn9!eQniL;$q={u0$_AVqcS}3~ymvD3cB%)!P8$Rer3WEhQ0~Sd?~o z3v)I%LY$$E-G}rNeyC@!yb+@e>D({IE-eWg!rQ{FVtO6#2Ga6~Zswe9flUqRfhKKc%`PIOAp9Cfvtb3~luM?gke3R3S~w7} zD3K|p9Ug3HkyuLdQ=A18;`cM(Ro#dOgs@A~+Xc#6l=bAnPi)!P%H)cGv0e@hwcqj)Om$-^7UOYtxVP@xkQThz z?|4{Ki@Lmj224)OWUaB|iC4)G%|889TTq&r>n~ljsMK@>P}Z25w@k)XN7m8|(rPg$ zhk5PLb_S2)WsW{|S=unzi{Q4TS8dg#IeTN&Q?VLM7wgIOKFYOL6Kct9U zZh%1+sOnhDD-hnn5sptSt_Wk??>im|b~Bfo{588NQ_~67h$8CDsa>=wFYgH5-ko@V z`7Gjp@o15TM&vF`0Lm#&k0Q<3-Ik}z3@UIc)4aGdZxoIZA0)Knj4%7e$=U=I!w#!~z4WO0Qxjw{5vl@OayAx_}LT zB$D_z3->z_72ThogQXjK#QodcTyaXB&y1`w08`omqDecvU@uFlxoWk{ZWWrKw_q>a zz&q$_9i0lb?TO}ld{2#uU7Pxv!x>n5;WdM$A#>&Qa}S^Zf8(2p3}}@$b$BycI#)*| zF_O~L=-n6-We1-FV`sQW6QyhHNcWk432FbIFJnu+>D0Td>fJ#_DJ4|}8FAokHCGTA z#mA}@;m~MbtgT)jZpU3%oTGdMW&Ik64a%)>CbFls%eu64vl}TM+tb%O(;^QKi ze>5{odH5r|;wd$}?%|XdsJ_2d#evJ7HTshwF&}HfKebSdHo-%D_rox}NnbA({v9sP z@spe-E5Z`AApzz|q@#rp`!sUZ-3T8vc09Ez_I4$0i8Gd_rD3X`bZWb>7mNH*Z5<xu^)KitO4EZlJp#*ZhQwM#P(=fw*L=po=Fi znV_l9u;X+=^rrXdLF(D&Ff~-wRC|eu1B}3Q$h+o{+&b+<%Y?rniN?X!`vW(WvU)fz zY!l+Qp7v#}Sc+VeFn$St@z&BYs>vJ~U(mc33|9K)_1<5JAJiJmHnC!|FHo#wZeqq`pQ=DKJXFKzZ`OY~e?37{iq$>xuu@LLu zbl?8&<8G*u`VK1+zIU+Ns?UfdY5_ob2e7 zw?ilfM`_yj?21w&Y96vUXQu76{W+2?33;AygiaFKlDCpGsXX{2Rd3&o?0)%PosSuaT{YeBb(!2C458h2lNGM{5X0VT0(A z`@C@1ynh>i%8&OVcq3qOI&palYLt@6+sH_^#7fi%1oR#-cb`RTxDA?F-Uuq5e%$>` zh{<0cl!7=o_Eut9|EYNj{bl<=Q8pJK z)Rg}^Y!510?Enu8(A#hFa|WK;(bRfLg1bN zh9i^BIzL!@H2NXmidD&Jpmf25a`G+UK9B365#Etz)8A;ToRNU&iPk6l>`aGyLR{>) zHHJ7}*mEcS`S4{B zp23F1t4zO5 z0Wp^W>;n}MGcXD-Ol59obZ9alF*z|ZHJ30B0u%)?IXO2nlQ9}6f2_A-bY*R~CLEg; zdxsUi&W$J2<;In}VzzT>yWhDvL}0J5LuYW0!woJ6r!%0~{>=TADeSy8ctrzjS|L{%T!} zt%1$}7jqAne}7_`m;=nLogM9rJ^#l33+4#2{#P2V&elN7|IC0M05Z2U2ASEJJ3Ie{ z`HTHecmA_Z!2eRcv7@7%=fAui{$=$)bFg-CHn+22L||e48`IR~Z){6zAOh1rvmyhu zZ~(9{|66Y6>i8czH*?Ux8btli%+UNz!r06KXy*wqe>1m0U{Z8&`5O{I{eQmy9tG@ORGuXW@P@i(Artj+QZyT+1ka_ z3SePufA_a%|B`C}&CEe|)ALR0K6GkIJp4~tlTVr z@892qcv#uL|8GM63y9@E&kDvaAZrhR-ru^Je_8%j{r~v==Sly+z(@d19nAh29W@tY zpxNJP`=5e;)TXW=&|i}OwE+HB{U7Il&Aqv~hq)=j+OmTwU$9MjR)$MGPTuIGxZYqt z3*=~sV_B1WaiM>$L!V!I_zq8%(OX>zWAilcM~COqspI>BEbZZVKepZ1zEtze0>ba) ze>4My=$lksTy%$lOa^7h8E0D2-dBtA+fcfk%$kS0lPanPrEf4q(_L&JxT_}`e{#1% ze@u!;M-*Svw8l8BZnS2wFZD&IXH-eYPmf=RC&orc`fi{H4hZOSf z!$J{bS&I_|=}CTw&8W*7G;}Y^oUL;HI&T!@O}EWj<%zXM{M{V2ER{}P%(3->u1PH{ zJ-nEu8=7Dyt;x)dmZ74f86_~o#omA~L@6PN5+z*kKT(;yD_jy|(B<--7*3!Uf2>A5 zeW)SlOqpR+z#5VvhUK?=I=v#_v^O(^YI^ds!6Y6W|&&>lZNMCxWUwrJ&)P4)cf z8Z@j>dP{5%dY!x6HXVa*TbngXNxg5M;tYW?|e|w7V**nUjN!>_uGreBa@wc5Sg6vMw)U3Wp&b?$l zqAbAU6+8AGm79=8LFy0WP>)Dkl!e%l`Y*B*;17mOmdti1vbEaqjR3wb-6&i=i^k`I zNC|t0IFr>~Kl!(*4Op>15So4v$yM$f`5lf?RFsbU@IG#CSxfQxc{Nz%fBQYeOYgz1 z{Vm=p;5a&SCEpyIG8{K%++ecTQ{%0QO>DZ3pd;C=!Oc{04TE#{RD@w5%<>g~`9ihVT|6c# zG33|0h#y?C1KFGnfgaY_?7Pt-p0{!9mVyH|bnt@bD#gZV%%8i90|gR5!5U}+@Cilz z+!OhbZ+8UkhvL7(ZuctkRzr0c6+39eP!=-#(+y<5aWi69G60A8e|Q{D%vdNkwEec= z7gjA#uC`%be~a}Y zGcNOWe&A-*uEhouE7^K0lR_z_i{GI_t$e8P0;$(0(BgVc(^T7R7iWKW;FzjPs$tb& z;o{^gyx!=17k-UHJQ-YB052{932Lr6c1hrb%dHe1g@ z$6=S0?z?8p1(>1RZ!jAzF5*PIC(OeMXEFKXT&tpxt!1eJIv#jo!}v2-uLkkp-P>7s zChs~_DYzo3&*#>Hh=3>H&&a|1 zP)Qr&O4c;T=-V5D?hh~+F~0r*0IXo@rtGl;1ewv>2YTM3`8U36#Di!lMC8yT(z+j* zsK5JIg6y^8ejVgES=zau?ajtx?^Zdjj0TMNYkvF8e{x>Q01)qO-QL)nn}JMTi~={m ziNEqBE%Xqf4dR??w()U`M!S7qYr|q5xhB|~Hzs^Blc&CWU|PjIFy)AG-0~jn{FvhM zmNpdthppG0m!e%Zr^R1D;;EUoKHK80X&8C?Rhs&m#V=@DHvDS>cE9DP7Z--|H{B)v zm{li)f2k%9n}ob3%}J`1pJcAWCAS>41Vy8F>VCJ9Fy_SCVISeys|f;Id3;dd**hx~ z1COeBls!tTSV|5GW~eW+h=>rr(n6U%=;6uq+xMY2h3xOoHD?-hzP@OcTD}WQI^YPW z(y;KaBxXv7Z9mvObuxV&W2X3ucx@TXP-A&ye<;mU4fuRqx}&Aj^tXaJ!l`VBZ>iXrk*sRIOC7L zf86m1gDl1f9iGC-ueXj9*q$TU^DuPDnK21H-=gsmZjOX8BWi#F;2miEEf2^e0voqY zw6COr5hph-d%53qX;Cf7L$ujBC_H|mm-@q48DKnj)T%qv<08t)T&MGNa5Owsh~F&s z1ed_dX|qC1%AWs}i^YWpQbv6`s=J9Jf2NxqN#2A(vJ&eXFh!T_&3fZ$c|PVZm$9Hb z;8PU`|3S`R*{=L};1f9ng55Fls8SI^K-YCS(7t|N`V74DH15I$lkjZBy!fEH+x)u6 zByaZ7Ad;?`#Yq1(XL+xKJUN7Bqbn9FlWgJ0{80+xrb2-xb<0AO2Fx*h>X!SCo|Y6WDF8`i7D1hFQ&ezD;EwKBIijl z3DvC(3_a5y6{xY|X-VS-LTk^XcS|e-QH;v%QbX|Co1m9EeY=@zd|JRHbkxO|Eu!(g z-8a%qI_sM8kSFnLE#W8v6~V5_e@9$)`*HR;mG_id7Hb^w+t-9p*KjR+NNLh7Uo1}e zmr2hdSzn3IYlg9q_A7#zpl=9zgdvwhpwNHrXP+{TIV44Rc!6p12p6m z0<}fp0MUgCuJFUB%tyq-O5jS-Yu>SEH>^xc4cK5Q!5W!-&@OvoG_`m7e>7&U_R5!$ zsK0i56Y%y>Tj<%jt}OkyT4X{9C%TOK<$I4;5gjl^r$XK8kGkdPrGw_bVCYR9ykT8E z&O=z2-b?a*8N^)6wYtF=8TDbHA>~g0y7xLBwtgKcRJ0Be5ZT;`VK={-{?ZEUVntF0*`=va& ztG2}91EKtsWr6!FAmuY@M@Eayjt(9+yQTY}R_+u|OSvBw^u3jBe_`bU)VF5LN%N_b zsKhY`Kt->tXqzvrcQ)8*QGyiw&>KFshp%ZSz2909a&Fu!k#0Ql#LUtV-Z{G#Qk!>&WOFw21umMC-8ZfZ(6!C`N+cx~u`q%1TSTau$>bz=YE*Ec?Dnz6Q5AQiuPh<3n`8wq(89u{8H1ZV{^h~BZc zzdWPX%X9W^p)}z75Mb57SU?hfgE#4HV4!e&OifB)9%;!te?l~7MUg=3rP)!!Ah+ut zi;PR^K_66_l#>wF#V9o>_QB{S353-&8NzPf!c>arZLOSXS3;(awp$Sr;NYZRI^tJiijFC9;yxruxY%J*>HMQZ7>wNbjyJsFw$kcLZ(~L|nqyKR7If z{q>I_17y!Lf5>)nS2hxxZmo+71Ekg&rHvjgOlJ_cyoR} zqk%@jRsE_;^8s$R4GJj>C_lf)!Sn5lPf0%QX#iS@A{WwD6;43&$!mvnZ z4kfd_VNxQFJ)11J$EBdpQ3?|z1;bc(J%ahu6zA4b8rb1(Re>Ft|PLSWvbvyad&YdfG?P(jAuT>Q96luGvdQSSu|77uA~!X z+Zlgu0KLh3T@bF*DZ-P%hkO8;;wP3vBf(9f6ZtHlw_~?>g^FtPetXfSBQ*Kg_u87k zsk~Bw-5&BxbH_<8BMe~Hwb16|*e$W8h-Gw5MmZg^2kJZ02GKo}d2 z7M2cw4wGF3Cn1TkjcUoKfvpqQ(oPm6w7=8;PQV%bRO)d3g28YUgBRDjDUmG-h}pzA zzh_&Vh$ld(laDU5(n8;A&dH>I6@|~A)vgSVPh~MPr|aQ=);{EMMYwH5u8*oQf2wx! zPju4pHisqllw2i*SUo-+;N8|&m8nJ)eHew>XTCnfX2pO8_XLP~}YbG{P8n2IdUtX^4=I}cEFf2s6T z)at=}^eDMoV?pD5yIaUiu5aW^e<#C~%ri4w2ZgDa_)v4?SYV_@vLn*bRkY?aD}|Lg zN91R6mKsf_GlO6_gA&1@8^vT)D#ky#zO~~_+j+ER;J1`qt!yeru{dD}6#Nvg)9DEY zi73zJVKnm;Kv_dAE}RR{#?Pp_R;c<#^PA+?Qk0_Pe#bFC?QxxY%fuXpe-c_yEaQD; zgqt3Q484{P%Lud1YyTo}kp^GxS`SF(dwm_T|9Mb|_Juq-3*2+&`|lQIbDxAh7VJwO zi#V3K{@^Si_y)E73w6YSc z2jaoPYapK=JbX6qVD7EIet|!@`7uJf@LMt0;_*vo|wRe`5#T{Qh`h{EUP2 zLaQ=JRw=y0k7>o5kDsSjt~WH3qS#5?t!W|k>d`Z>6Co~hNbadoDuob<0w4TN>M6J{ z7&B$XA+NC-1J)B$(|s%>-_7GJQm|+%Zx)Jq(XOGXbttiJRc)IHarz`*ZTaKJs!mr{ z4dP8`DV}Y_Tf4Yte+G5)FZTei=(!=g7Zv6BpN~RZymeUU>SfkHwH@W@Axt5n&4}^$ zD9FF9_cit0rJBk&K%4<7_MNzc^3#=+VC8$NsFuV+Tf8nO)H!3UG-tJc`=U`T8 zh?-@g+5X)OI^xlu!?diqm|h9Y*#>%eZd`Ek;1i+qw|iRGOX{0-*s2*lxm1LtegW0K zw<#71gpAi|NA5f}3l4)4$Nfot5M~9!b|=Yt0&p&2_Dz$^UkyM%>I3zL>Y`3Tnn%x7 zM{f^a-1{+)f33(K0-Eu<`tHf`@<<&9wB;O_$|gHx4LYwNsX7tucyurN%nVEEga&pu zbjL*Et=*n(3>XU`$jgg*(Z}nORoJ$ z?G>FN`HubjBz?n;Pq(u)JUDnz43(+lw!StvUG|QyM7|;6tCDw!wV`1p|I!(j94f&p zEn?=0fDX3w0-qiEo?j;JPP=;4&Ap0trwRyWe7?&jvfO)HwPQ zj_!lE-vJopvbdFLsJcIEa2CqpzHuj|{;{YcFAwu^kl80pa(c@dyRE0>@dty=I6_&t zLv8+CGt6#`X`PHQl(L;mrd0NG%9zR6e+pj{X`dkJE{Z8X4ol01CKHbIfIe-K<^fvi z+sp*lt`ha*z3%6BW-uNMD@G<?f)~-g!T9HcjI~Nk+t&cel-51IMpS|SLYN_vAIv}a^+Rx!E3G}z0Yy$SseN6x;9_}AhH7#M z{45RkREha=zr-UE%YUr!+T6YGed)ST6$fByl9DK+Uy9lQ;>HTJ2Dh3 ztNzoH-WNW<9*XUKUuG-ZSsO&f+n4e}zAn?gkiLVB>+vJK@>4crKjO&AzBG>e5?u-{9qf4-v7LroY> zw6!JK+>!+i1NARa!deVEBo17{#P?+ibIS#0q}4a7#A&|t9hI60*bku*zgRZ;+Hz=< z1(8nrhtzkOb{Z%Eu2mrxSOP95R+M=7iO1+oDd|V<^#|&(fbAN?^`b>@yx#EYO^EXc zU!mhFRt9^}koXq}G-@@lz1{4=rCcBMNRgR}2e_ zz0{ElEz2SFQ9E(i;~fP1xL=KZwsHlh+%nTo8R`A~TC-F-sx!(F8XZvd)7Ta(kbwt| z#vka19yF-f$ zSsVGwdVXCWBTaDcOSrRWya^}9yen1Xas6}>_9lFnn@J>p+>}_R4c$f6oGHoEZl+%! znj0=CWihYkZq2ri8`iNt*S{<+2c!iQQ2iRrU@#*4^A1L)mO+^$`vzk<@vKmz=-vR8 z8_j=98+BT@oF_-vSRvmV}=vF+p1Pr(XlGoFR)0Qk68$vLa#HMOF zm)hKwwXha#K*4%en+*LmQsLP2{d)@&x6F;wvMrc+ot9^C$7y{ZJS&$AO9<*-aFaUR zY-$k6KCqg?Sw!~xv0oH|_Qt!P-unpyO0qS=oN*c^wST24fA&tB^gH72DIJp}jz29a z&=Vfpm?0GA0n{Q3}?qVZ9zCTsva!nEjk zQ`g`@M*xZcHvy|+99G52RXrqp_zHp&vA*&M4hg|v?DTd@M{llKu#7H6hJN_y+88;@ zn29#g9I3ZQQ#miRuU=~EwC?Ra;c{lHTHlTR@_jNQf2x!bDNU5f8xI7cSmJ(k}rbSGui+0+2IiX3JNb+xoB%I?baPKjf9k5c(DxE>Z8*qh!sVSAO25m@A&^mV z!VkvDef*$}^xVsttR@%=h@KQw#Up*JdSVSviZvHJJkG|hg_-*&-t)&&4*G;y8b6_D zI1XEN%S**lmRE97*KJEmrIF6UEYW%yf1*~re0KHj3MIaY@ABFAH6Pt%NJ+9&?=3m{ ze|=6Na1qe`>4~MwWE%FA(#$}R)y-okpO<2CY-9b5Ky(IxzjJ-Lh4sC?$;(dvD1nl9 zj2iYKmYdEkU(%hU&rs|A!!Fy_oQAXms~Uoyadws(??KT_7Qr-t+ikY$vOy9dx&J^( zKr|Fa!nZiim8VHjAw=CW$w5qp1Pm;{fB1-;X`uXLcfOoHJUmp+YQ((;VFzQB7hU;u zUf)$-FL)Zwc)P{U$6nyq5wjJe*EV&VzL@y1=#bRhy(t0TnU$|+x}q1#J}X_c{o2h+ zODkm3XS94Pmdl{L(Ra7#NdK-i`r?N0wLXiq9@B_HqGJ;x-=c04t21BZ%73J1f1tK! zU@mT*{)8d&&3RLc+7*Lke_His6?!sZhKCN{O$?8eVI&i1RC?`5W)Q z4QaQl+`cp*@!LT76Q@ZLZB@M;Ce4@K)fp(8BH241>_j?>20U2Wpl6aWNG(+~u)y{0 z6EFJRQFD9DBWq`MRq)r~+O()yeUEB$T~M}1GNkZ6n)U_3j6ryZv{bBCyih>I zu6VYYB@4TwlhV7(r$Z7E6Fz>uvRrpuf-crL)-9Q(Y!l@iIpp`JcO^Eg=nLC z`KEw^_!@smrIL{XpA5&;fsedtQ5Jwj)bT<UiIM z)b?I?N0J^W88^T`a1ia(f8m$w7oQMjLmSrKmhA>69Z6NY1Cel2lffI{ttrw9o9<2|9VPUlQ8@tC~OIPR~{(2*w(r5aba!dyb#BiA7@f z!Y4#fLP3ezD<9)Ef88`}1GB#du0e8*J1b1l#+PBTmBr79NDN$HTEkZ>`Lq6YFmYal zTZtEwzPIxz`j_y*e$Eqx#Ra6*I5sz)YwRa?1Q z9`;#a)eST$q9f5YvWV&n!11{0i4?J&r- zk=k{|xk)3tu2S0;3Ygdyi`R35`8b9w;xAmbawmi&d_Z|Kx0u2=yocZcLj_9LW#hG?^En$zADE;;HrZG-K58g zFTI2o#*Xx}(Hz_sX-p^`5%pk<&yXpo^g8li+i@%>P|pf}(-x)S9xdJvTJomx?;IP& z-lDSCbIGU}z@=?^$znEbzeZ46MSaj@@mhUkNlYaLe^t;A+u`7aWolw(dLqn95y40a z{i0A+G;x3vC3x@^VYo(F^~=$EG(;RPICKr(({+?2a-rI2ob4A5194iH|Aecf898@84|9 z?7}#{8T!NpQqxquU)6cly5sU=zUsYs?~e6&ua`B58x~*n+(}|a8r37H=(iwqVDYor zaqST|GZnO(SNtIU`jUMsOm#s76O`8#OK8Y$e;w~VRY#+?V}4=ny!or)no?PSmu={< zV4!p6rC2woPQ+*aEA32@UH9O9OPAvxwO&=pmT3s8gzuJ$E28ot^G>Z3sl$p+Oo0r% zn*kl_<3pJg$*TSq`hXX5H93)7Gbt+~U6**>-V|o)K`xH2Sg{;VwiXYW?bB}a@6vjA zf4_PCZk69JBfnfnmX#viHfnT;~xdqWpb7ye^^mluThxEs1rJslp_jP%sHobOgt+-@h= z`<>(74_OEL*^l&H%g+t}s!;Yr^ZSRyCBNh=E>`R)X|HBp|MVF>VE8axi+}r_<6x@8 zKz|}r2xfS=r>@`D4WqhO2&eQq3Kxko5@2r>#S8BD_c_dd*LZeBVaXA=7n;G7zK;8a zB#NooynuB$6SJUb1_5{7M0OgZj@pV^>~ol!gkDl03J&`46_PAVTmbK~wXa&S5Ua=< zSLxuU4>@3iE11~r!O{8zC%OXN2#z{(r z$y%aoH}cv*jJbJX7Ve;p5>X09e2tCj?)iBZlGJ7CfUnZ#bLC!cXU$pW(^g1I8Gmuf zCAgsf;!fgfL*kx3IZQ?T_vc-xb~lK}x9#?@a(>YfRJh-^#w6-2ik%>#WU9enR@?l= zHN8PS3VP>KmZB^=y*d}69tG0OHBn$A$+quvaNx{$X65S`tTNtBSjah?;*Ke~Ab?lcJO)~pvq8(&| zz2D+FaS#@!zm=O|@!%U}`YN@z5<>V64K0r2G_5`)8~S1_@1a^XCGu?48>XQi9!Rx5 zW8FyNYj_)yL259^s$z;sCpXZ%KtJ8;BZmB_tigPemzW6o{es>MmsMZ5?0*`*a3JkD z1Q}22>tDqQGs}qHdHG|;M7Kfd+Y|pMHUEm}NN>+JxE2HzuU8@@ir&b1-%jprL6%}M z@n(~*GrCmaH#%atZ-&Z!w z^^fq?7hIlTmS{JP^KG0=qi=`sz zAA%nL@pWf5Bg1-rmrIM!-}_}@JQ4Nav+P8DCM;VEI2MHKV9|{*p27$7k|lpr^6EL0 zct3=ONoDY!2(!7lsK4-FMcx<4`6oz9Kav$-b2Z*4HK3eB0pTK9FMmz^tb}leP&bp8 zLs{jrs3SSN2%lG^aZ>-~JyIUEzn^oCx1B<3f;ZBgf9E(r1e_LlRY0k-*GdD z@9Km_^IEgcn`x0_{kOlYftvxhTIi33O*(K3G>c6ZK^i=l2Jwi z%Q@Plt8lc2C4W(lIDc>9!9W8Eg#9?RFS732=2Qcy zv$-2{f;o*b+*-nLzh!8xCCcS^^AyT1H($H8h`Abxafd26o;v}cq}ZEqxcCu0*ku8^ zz?P2JNh-`gT#BJI>jP^)o~cyE9mg{jzt{FawSv1r~<#gp?GOCJKv@HBgjK_qi6!LU6Z^ zybVs;WZb$|JQ{>rohoYoTxr!RY*?2{73*IN({W{BKoY{Nng#{8+hK`0*0A^t^Jl+&1`x(!7n5;&Yg)t|KvWmVfYWo1CR?vzSBBV0_MEKM537+9`e_ z7kDY{Q9QCW;)A=Baj$LY!7aLG-R_W{b+4BBrXTX4&PN#6P?$c3D`Ji*jMD5Ky7xyY z%)OIpAjV}>t0AKttgB+hN&k)XI~^~{Nw9qT-mL4sbbmQ^jt3Jv_V44|sBn3KiV6PX zuR5GPn}!t0*=G^DA%u7_rl{gR7j}cS9$(3SA#5Zp z^gXJDz<*_8wtH-?E1Zs~*jQD2yGt#2m))h#zhPDA1s*tCz#ELDSc2yx$(SIQ%YG+f zJfIsfR)Q68+B97tw@wfn>f(2C-NUaVtAY8W0W9@qShh+Cb?AO1*Q+5xp2j~O5&r`o zy9;r`5YhCc5pOUtCf+fS@KnDr;Ypb(Xu|(Nqkk00I0xC&1ProW=%wtoJ(;)Z2*O&Y zSEj!)jJVFCdUztvo;!aD_mD##2c zB7fnmD~a390a_(P6yg90h!}l(F6yoY6}b^B%oOP=U6nd}c*U6PnG|5sqy{Siaju&b zdcEJw(4Kr9)os+Wo`aYA&4orHj9DffOR~&^fn+=UHH~9Jyk9OM%e%D{d2#b|p(q^T zC>WO5R*)3@y47?Ga~;1g$`2`C?vK+G<$tG4G;>WYI9|&zyD)XLz@k0)j&iX~AE|O$ zl(|JufL-cJs8vu7y!By0$Z|VGr@#`4%Alf286;x6EETaF4KBv7yKS~HRr32$4 zuzT1| zh}-L~Tj(BzOq!ipc;K-GS&UHsyg#9EiH9Ta`!>qyh6FRUb*romqYJ9s>e=Yevd6S- zYbG)>*-w^;g-<3IJ+mGfd~BU~_aT$A@!+hn4_$i5;W z_S(jK;s4Oxy1w_F_Bg*yV9xGoP(N@jE73*IBMYp5C#8}I5A2_ZjJt)bwi=%TsG==dVec<+~}{~PvLU|GqT3!?U&uA2d~TMwO1xtSMRDk6O-^< zeQX?&RpGEu)HS6^aRhyAMCx_fCa$4R^5vo~owTQthiIjVBSH-c~+t6?xbE){13 zSl`XuvZ;R&c+;-neyS1@UChJR#^A*pH3Cn~ovv<)<721jD&o7rXV!RTB$_be=@pGg zNn$TOQD}f~7N+vuJ%37#QJ{Otnlgu+bF#%4>eDwImz7ZHY0xIY^7SmKYMAagwxU;zxODeE zxzOB0JcWaw*-vo&RQ|#%-rh8GhG$sjXTM@bkw%#JEc1$Oa1d0EM*zoPI-W6xvkpXx zxclCXMl-}naDUU~)Z^B;fu<-?4}hRBrpKZ2fO``N`rub8aFTU|POuR2^^wnxE2V{v z+dhCI7QW2;+f785gb4I>JXZ@<@PYJ20ulTMzKriF&fnHC)@qB}y<> zyBv6g)S+=ZT*+_VG5R87J4@D9CZw*oIDGLgFXZ+biD18pbC4&rS{xQdrw{e57szjnX7H)*ze94qJT115kSd5mA~*JEai!r)GNol)6#emP}GiBUyF zaAf%Fj{glIU>S#4KO7{*eA^(OY`E^7JHqFt5QW{>`#B>0TVn;y38)AEdLLqh z2wKRj$RWDWJetiIZM%M$7eZY(RNg$~DN?pgCZZ4W7@SN|>kcaeT3d|uAiu|Ew`mMO zoPYa13RRf)JzOxV*l->wufQCobWTfzlKl>1-#CxorxY z+oB+1)M@wmiNAlDIw+H?@J(3sE-5bl9SxAEJp3oHeRMSw3q5UYi?e+P;(soa znaVL#`MQ=@*y2#2igC!L02w?>qh>}r5=`%At}jL@2s#({u373CS1DnU;gYQigcTWy z4p|fprMo&a##65>pSa^sm?hMtT1zCUtAKNLw|NCgEAbll9;!+S2nN(8($xr0u=w6Z zyY&=I&=%B|I9H=G{vaY=ViO7841XG@>Mr&O4bt3C&SovlnT0cJ8DVD4f8{3v&Y=5a4o+a{x z(%!?g!ui<;o)bf{cu@=Uswx~1;mye^2d}lZL`xY&k@WejOtA8%8z{IVBK00p5AE5(vQU&Eq3_aUg6D%{VXRF|l^><+h zd%BGHyOiQB|9wTY%p3r~6z7JB`I#pyLl`JWc(i8J5WG{-0NDRv>43Q-)+O3nAtl!p_Yj;T>Z zd-!g1WHFu@O0jzE@Mb$kP>^!l^g~Ruk1ctmt{TovsmXpt6TL-3oPlUz&4rQ{}21)w%04rz^)A@C+ly0F5z)cA!AOg$!gH zZJBbOXn9`1*X7(f7D;o^Zk&E6=KF@DmR>hVy=#NkzfOC9A6w=gz`Q) z>Zn?TOEF9_zj}r3Yxqir!g04G5*?q8*sSkw&+n=*pT-rOJiZ0kbNy`N{E%;Y5E1-ut`pr>r&;FDtLageILU?t;ncZ@I^97XUP@ zjcD-o3pH6pcuYr%QwO07j@*!Sc%dm70%Fu_yg?*)FS zZT^YV6K4Bg)%XUAE+3ezD@E=!rqh$i&3J=^(|k%CQusY9aKejd`rF2hZRf|%lq#c& z30+A`LVsQ>57;Ui!PFQ>8Vn9qh_~Y((abYFeJ9aO0-D_D_;#VU3PX1On68x&?YKt~ zUgz*i(1vZQt`Nm{EB=yLtdPwuX1UpKA9aa8k=0;%rV68(fx`EMd4jrS>b`(l1F<{E zt;HiR#?Wlfhr7wW29DMHcSF3bY@7gGMBg|Q^M6P^I)SVB-@5nsLy$)fe5c4I{Wj4O z-A56v+*|0=kg1~0(kQ=^tCwIC z4Mq@R*N_=oBN!!tG2Z!~81maTK2_5Xcia6hkbt;X@J+5qvLVp*P z+4<57mVFSFE}rORheCD*ZVSBFLj=fu6T@bd>>kAqPai1Ob~)L|kH7@WXa^dHww4w@|76@-CWO!?u^#eW==&>nwk;8?i@M;a9)W^NH8x%Ybevh*-K{%$fR zD)*jH^5Ct%9q`>+N7^mv*qWiglYwy0sH)0~N{zjSx(sSHOJ>;UE;8!Hja1Z{mGamQ z^mGm_A{A9WYvg_n&~4UKaF*!26#71`5c}X}Sk`1(4H?G!-Sh!^fR~im`hT(bH7lF7 zyEl)RK8qSMiIJ~cVAN-*re!_kPK~uVv$qEc%*)+IloIiHogB{Pc&@y4#Qyy_%uys? z;GlxVF78DnmK{9C;(FcwTP>}!XfBUkHp25Ps%|AUF)X>$_d&0B&pfM{bKBfT!ylv_ zleA*(2w!|ngi1;-a8!~pC4U3>DoGb-k{=o}UPNnvgAlsUmVNRQloHB-yViyXTzvrJ&du>9ysHEl4KCOl=eFEjFh1L# zWQ_J0g32T2wq3)|W-^<9v|6`+X?C}BIre!}`)!U@X`6J21~h9#5}x}l<{qYO8FSB< z>{&~bV9e1Q!;y+%!GA!SyjRW(pnJ^GI8@RQHLk7pEi2I2KRaHSu4CbC`SIETr`pMo zN}G1w;8301j!4(lH1iYgqJP&V^6y`pojruynh9NA8XOY0oQ9~ug??NGjR?vK5gq?d z*m%p~a)GXz@ee!Yta=frHq00QU0&h=@WWrXM^Oxd^NTHCBY#cgR-rXSXWQC^EJCI_`CoQ{)@;@Huc9dmz9=_XT`?KN1PP11G=bH$K{ zHm!S%p>ThZZGSTjMB-f^K8wZ_^>rQItAi!_b8IGCVH7on7^YrT2zhjl*A08T)-)4~ zl{^jB*x!9Ku(#&D>J3=Q-JmsH?+}%8rL$)VbO_tejb`$qmGeu*X_n86xYF)y=s%o8 z3@kCBop0dkMTuQ-ZGb%HYGiGc4F>Cw9`e*~tx!M(SAUdj@16bm%7{|(&B5jg&U!?y zKKXoeZ7N2E+2jU@l@yxsidiaL{#E@+K2xCm-VQlW>_m^9^8IN1Zb2K`5#$j^ZNjB^ z4?>Ps+eP~k4s~!;Ia9k_;@LTP?B>$cNSPzDC2R%)*-2(&2|Uyt^)ZF-2=v(Qnv2_E zTRXHHZhxj7QJnogi);+GNgjl1&(r4(G`h8X8zC%#cooA~QMSAI5zP_nHrzQrrma51 zMbN>RB8L>?m2k8h)UO${@rngidC4g_#-p2xIz`4@YwJ$)%bq1MNg-aJJyxbl^vwMD zj5NvF9`wcmjnd}Pg%RfuUmn-J{!$^1wQ{pOOMf#MW0R+A6jiyEnVhB9+0VeHv*dCqAhBF=0IDdh=VlKcEUDO3Jf^rUK<`QdyXFr)>lG_F*c zL%WWHyz+K{4tQp2N|`VqXM_xbJ_>1Fg@5}go2*wz`NRS{RjF-yLzkDndXg&b%HPoC z3~{okclusgc(G{3kXfe~zA~DMokFJFZ@_*Soy5W*VmehW=;rSILeR{<&NrPR(ulRL z5XVls0fQr%{yx{eV_nTjC%p+;R;g-?ZgYFv;Jt8zC7lg*l z%wm_Vwlk-7uTM(oS^H!>UsY>j^z6DX%i1?q9_}s~19OgB49ykFA=U9Kqy+f&)*w3B}Y3xDl<7#^}q8)ROBbu}R0@+QwJJipL{GQtWO2v9Yo zJTHn4ntlCXUB;wx$iZ|@+g&HO(<)QK_k&l%eA}HpYDYXl5aKL3BoM$liTcUn7{M;U z4Bu%N7(U9F&+ybYh5Fi3Qxn7eMcPW^6J?^$tHXCK`dA2sK83{3@6}+xL4Vs6zND6m zG&i@d%Aa}imw-THyrZ2_j82iO5w}70h0~A)Z_Z7OQW=B0)xxxB2fNK!!W?``T)JylF#z>x5S$HwP59ssW6pU7EAbWLsjFu^T@s)KJNIBRy4QpJ5C z^%_5kP{Y%zZVGl{!}QGaXa2~5aOo~pvl4&^3HC7> z@Q991=gXI>27j{p=aF5Zro}0km6Y|q8a6Yi z4*d~R$VHH6B1d8mQ+Q@bCu#HzkbI;ns9e9$+tx-A@ZHqDC$aC#{!-mko6Glkk?~iC ze?D0ILRns{{|03a0{U3V3_qR#QY6hEw;y7g;7s z!mzevOMl`Rl%JQn>AgEA%pCP@t32->&Qv{*8lJTN%D@|BVV?x^Y`1Y14Q$cV>rMqA z2QHHsWA5X3+iq=rp~>uV6PfLwz(JVEi!af|N?P-mNL>nELH}@iP-6FOAHiL!lraXc zMJg);AWN5Kghypw?d_b29Ehf)xv4$(com)=_gy+-ZACejpS zD5WJL3lGMA?{v8vA9<>dk$Sj^cky1@MpwX_`vcI-1U3o8X_5+FV7{a$$yB@rKYviAA^}4+g`R1_(i-TXbzY7vi={r^jK{T9 zIY~WgeM5kE1-iw*8SGH2hFEr!o(K#0opsMIrQ`IDDHSb&0B*?AUCdSrR9btaa2n`} z=Zg+9$cnppkV4L9eRd~EybjPjWwSy{1h4P|m@1WLJ!@}@Q7Zzx@h<*0;3<7r9)GfJ z)!YI_sh;wvng6P}e9QWHQ5Z==>DY}>w5+TAMJRUWz!urmRtZWXYCP!A1yA8o`a2)j zd0oc-#{R0Ivd?Twy@8*!R>O1mBj?l(^ns4HZ*q7I`_#p0K#s{!rAZD z7&Hz*)A0x~Wc&%l@jWuLt@(aEIe)gY7L&Isy87(J4J^aUVW3Lx2v3KF97rZ#0I%s($LsXvQwvzI?NBlyI+iAKHbPfK0MGec?Xt^3Af=d!&TwUpxx+g&cy4*oxt zF*RaycQA#2I2L!^!W|wpFH+KqhZu3l*|3nf2o`Ki8 zwL=#huKZ0~KOe@S_GgZSZT|8{W^MFB#dM+eUKXd-OL_8F^dX3VIH&5WqBPHB=u~bf z`R*Nk8dG)j9LD=xS?4djtbT8PSd`*Gn1#}wWE(KVuCf$4y9;1z6=c1QRP5L)C_n`g zH9pQNR^4ryqIgi+Nz)(M>VKV-+yc?_S$F{-sV;yIG1P~W1ckYb`9C@dW3Q@AgnUwv zCwcICm!6AlSQVa^aj@O(x3xJ+U8A(6W2_K`l)TOzH~T>_V>$38M^_0P-w;f+oPFy} zpiRb61&AT-NZzq!t*sU^y zBhEk6ZFU&t9H$}eaLUEo=uo)eL|Bt4W1g%Jxo{AM>NCHBzkk=dk2ax|1l^~%f;?k%@Vd&eV-#kog^XLf__hkv|je$u1a zsDZXUf*;fHZO1gE@wm7-D^-2AxbpPW&+u$plx`sl3N6gkrWp5;fI~>I9j1Dh87Wc$ zra49zIB0d+%YUTVmz-J$Qu`VG|58*!_O~ZAF9zcB{{bX|Z+Xp_X*-j97ZPx+w@WUH zjj-Y|*kIbNrM@i!k|sazbuYRVxqB2wn0Zu->B)R_PXH;;aIms9Z)MNkj6+SvroY`g ze?1MLsX$_vEfK@*AFUczM7-dq* z13xd>nEXy=ZE1`#c&D=QX7e0%5=)E)Qr?bWuk9FBbPEH{`SMgm<2f#^8+U=p?^wJ677OBFdi-YF;NGp%zS^dRZ8(0r2xRaM)Qh^ z0HBDKuAY)B2}OT8r9*uw9wu6dp+Ea+KdejX6j+c_WYT$Sp*+9P-znzjCrl99-3s=` zUsqVj)9?Fq78{nTWD0@51Q_ zDJDc}7*0S{5MG=aIe=1Q_)!)p}GT}>HX3^Et+;!rU`TDbQ}+ZNSG za08*Q0G6a3=rB7zWpwn%-E@u0H-81a)17_jmC)YWDEqzaLI{5#c`1agpTtw1R zE!p%$SV{nqxB=U&f87Z>ziX19|BdVk7}I9*HB zxuZE05igb&O7|ly-65x6cCc_sRbDbb%`SKUjokgmchVvkF)Ijjrzv$}@jVVob1hMU zcvJiu))WQMxR?<+#U1+oT(Q-fs%+K!d{1=eU>B&laj%f#F8MY!+HL)3J((1BM1|So$tOkf9B1P?yq;Ps#R5c)vl%>QBq|PF|{)W zO4`{vF|aT)^8yqsZH%2ARqSjO?0DoDRDkBrGEPR;fDeoVfr3KJ0chl8X=f{LQ>JpjKDWq@kmu|Ci-27l5(*Kar0}M@w^C z0OiLI7ofGBy$#UT>4V~b9H05eN#AV5q}Nn1ui3P3HTpbn4%+5#Ounox2! zwzf0@$XS{IZ5@F$05dxWfb~BP024b~Q_H_vbAM#~;1Y2J7y%sZfhLw8VL&$%p#5JE zJ-{C5U}Nd%`0*QH=?E})FtT;}xC19UfTgX8wX^A81$@}e?EWsu-ofs}!{!6~AXBn) zbaFItu(Wpqd}LJ;m;6VaP8LQ^f8}m$Zc+Ei@@~PyvW#^*#TIX|6w>7X^;ICz4ZR7y>YvEX$ z{9mC)HkQ`z|6TCEdusy!QT2at{yY4S6e70f9||$Ba4>TG!))m&Y3T+uRkCz4v3~%V z8Cic^-rsh0TT`HewWTfaL*&2j_algz`QI=#3rmx4wtuO?@ec@SYx?g!eCYOf2TWSh zD%xVQbpOq^{o7gTV=A1~-0gvY|Hz~%Z)f_Shrg&qMeW=Go(wFUJOBn(F6NKN`0*Th zSlPY*A8G$4V)@ru-pI+p(hZ=?%zwzt%mVoM{^#dkr?3A;BVlV|XZqJ1sX7_intqJl ze;WRRO`IJZJ{13Z8+>&B&-34p00?vgnjkDM*qQJJS*4_>I#uIj4~&WH_H?m84g}j5 z)v4u!{3`7_eN#fWc*+c4s)8BoCwSkQ-RF<(U-!Py{vPVWwx;S#0-og(dViDAbc4{= zDO2NY@{N5f@R?#nff%!bq%H{xfeox~^<^uA=B)_vq z@i9rRjlpXBR1bz;op*df8Gm?xN7XkxIMCmD3EjO%K$jH*Pr+w|I@oBGz?-rGrFmZ$Ki+WnSi=mn0K4TiPEPw=1I@ zO(QLKizYtF6>62$&*_M&ccRY9jfcMYm~pw8i%w$$xl^4{#8tJj-G6ljwh~mahtF{^ zpy5qy*F)(-FZn^WaX2mUkrkJ#*|BhtG+4x%cRs%A`r$2F@U=E5?o<;W|Kms$%h zX`cxd%npoPj2UnJKACcGufa>E`zDsgN|3nmb?1TDMmugv)(YoTa0MsCS$q~ht?+ZA z^3CrfD9z}oi^{@n_wSw|_IKF!1(V%TOf|;ie;D z^KFCaY?bFRS97?v|bW?$cs})5|*bIvIbys%5dEeMCGD;HqxnCX@pu5Yv zBJfVXXlq5pQ2@(8-R`xS6B7j#@{2;;5zSwG@-MAXa;Tz? zbBXDG+f>w7i+^>x5jSAr%ag};g64SO7$fg<^xA@WcuSZ*!&ebmURnZxo3-(Si>>P9 zmK_zcnC=w>&c9WvU&!~-VMdUIOtalB>fdJu zRDp=KtSIVFc=6G4T+UY^IXa)vCU5ozuT|Sx{582@;eU^&SZ4dx8=h`#PSdhwx|b+h zy1IUe1RRl2y)2gn`m%16(U9vq9|g7Pb|<^$UB|pxR5-E^2xGn+V3-PR_)UPxPLfby z)11O*ONqn$emyVi0tt@TihUEfQt%$A;PQTVti#*`0~dzi3jdVo^o_j=%fN{#(qkOl z$ymrYjelNbQ_9%R$it>WUDD7hO68XXRt*~2;AwQ`GCQJ$cm{+xDanTBC}+qn)N5y0 z?+&uH;b_hv4&-&UPGH6IKFS>%H2FC{Ew2V7Iag`06Hh00Cc@eu_~7QfE}rXNJ|-iu zu>{X)>QI<7K8}vh`8C5o*;B$h#GRu>MEt&v*MDys>C-pL`1N7crS^!WerpKseH~lR zo04N1tj$#(m7%3hBoFYTMo=V<*H@>&r9w2pI+<*p>5Pu4qFCj#F;9A#phAm}GSn%D zex+!`kd1RP&!Y#Fb5CE4X5~ALGcQH`0idk%(z}@ryP8L85{_lRxAk?i^XhxR45O(g zu75Gb9Vh<&^E)Sc9Vb=h$^TbI@eqy%m4aFF{b$w)=b;=VJvk2ttuShNWB#Szo8S5> z9x$kj=i?v}W?WRBsYA64FOqOI=vM=bE9H|MiC|NlX*S8MZG+!JAdK>jR`=d9(;*}| zlG-WV1Wup%9K}9L(=9xTCKb;)Z+n zpZtFpkGufQ*wQEe&{NpZx54VPUg~MngrS<0+3wzlU4}gy+wnRbv(R=oCCR1s9e?5A z!7&qL@TDl$7SnaA@r+S6d{(Q%-057b@g8S1K1Z17m@_?2@7H5=Pf>P|7Fp;1s%Zc8 zLVU9CKmxVIK8JBQ_UE%KNC++ImTK;hsiNGPn}%E~iO?0>oCx$2B`-|?SUdr>t;I?c zXoI{o!h`gRmFY`F!9A<=V3$YD*?)do*tPJZq4Xkm^9xLyN!N`y!5hR`V?c*WcGLK7 zZqBM*q+p$|zw4w{elYqiE3K)uCDtx+TnNe`oxG$QhxKNEUx2J8ft)2uT09?I%Fh;7 z=v^lFf)?D$Ffusg^IYdz(x%*wVm3Cj()2sOU^=$%O4n%yR;#%22*O-E2Y-mS4%_FZ zLz7O&He#1hJM}-9?m75o+g+?^f3v9W_PO^Tc1X@*_9)xthCXhskz5ytPqE7fgJr>F zGR+iN#`CnQFDXFW%zroQfb^_tbH5gZt;4Fg!z{0yC0jpQyZG%a7Yv{OMc8{8tL%H| zd)scg|E7h3J`LBfuF{m334eB3S5V?POB$>zf?SGy@{LsS&s;sE6=kBH^+&PxaWCl* z!LJ#Ik|0mMZzXE%=XvN)b*nn19{w@1b*q$9nS<1>O6>g86=zRlF(^|?X@8(#gcW3U zm}1A%q1t#=zh6Ajv)F0~i>|nu!HZttaym2>Q4=Eg9odG5A(vomDfy_+L&o=K!Z4ORSyJ#Jes#Q**<0IDSv{3Zy0Xgitaf(Bj;M_ z7`F*6UJjGgnxPN|^}mggg6)9qFyOwd{j~@Uj13uQ);5!pdp$VA%x4#~EjOU0L-;pE zg9HaT0-0-dVt!18uFhhW z*z>1;y{)<{oPT&9f4dMNRdPyKrnn0Qi1E*GFk-!LFET7jQ|XYr_7A7OXxn$Ov{K?6 zAWWDLL-Z-CpSTN+w61D2zd6oS(odFIr9mQ7KyaG7HF=YSFqRTf$ycKzmmMU!UzTf8 z`qc>2wSU}pB9}Vf+M6@-(?Z}p%hbXk?VLadvZ)AXM=e)c(tpdqE2EfSA+JIl8)5dU zi5y=*i;Z+=(0r=m4m}EP`JbPXV}mS^ajmpD%cj;I0stFNtyNf#;l z)w$OVCqyymynd=N{BG)8VermqSv2X%4TBV07=IudSrazb%X=e5PLpb+U)B z2||G(MjCdCYS_l|C5&h=1p<50z`InuC55gPY2oeVA#2e6M|*Nw>UUtOPd9_VZN%D) zP=9$P?d0Maz%gpe^J>(p`7=(xJ8w+Zsyu|cdz_yW)|fKFhSXg`y(H~;h3b!y(AgdG zA!gIr%+ggkwzJDt3%j#CdHTK2yw#pZy+da#zbhri8glX+T9Xm+?Ls*i2o>@lj~i&k z3V3smv>g03t?vi4Voq`@k!<#<*j;wkO@C3?>RnGCG4E+MggoeRyg~raIuf$5IQ?VJ z&36|l%3MB{jX{Gb*-!^xhY$P2kb$zJoTYY(jqoy1N)D0@W-?3+HU`?*ssW9?hNcSO z+Kv+P)+fehF~beLSyw$Unod=0_rZ0g2=V<))_dG@F*l+6M`}7cLd#X z@HSk1>Y*cigLLhKX=^CE(DXs?jaIZ-psUM)+J|AHPc&Dn4x^)C<))9>5~|~BIS10Q zswXs63lG1F9d^!xy+N=#>BCX8Wf2yh^30`XbFDztRHt+emC=O4 zK(59udAu&s4JDf~noMyWCFE-mQGd9sp(HXr4&!9|U*?|V&%F$IqDg)hO^G9|zU^MGhlZv;RC>?(^g`>vtr{(lV?fsP}O zdAb29eA%>#Rntn^zcS;DYNH+!*KPP^XU=yJv7Q$Y7L3ea?m_jQWK*fveFt`7OV66N z)glSA`Z}&_?8fuyD^*^;NAO9YsFDBY=&5C2$ZreC3e5R0DulES%a1IXYqm9)IiFVK z=PZ4BshOqu?`HnQ2ZrT9u79h$%tjok_}c$4EzIx44|b+u`;7mvsmyR0!t(Rdex1BU z^WcC$=ZWinFUb~j-d*HKqSbz`1M6A~re!#Yr^;R{o(EI?&2};@oJH88cF4cL4}ZWG$m%Y!)N*Ba z6H@HQho;q%n(I>((ijE|3AZHx^; zq{RM2GYx%7O{IK;DnhhpYo4u{o7G562=W-6abf?{JxmZD!XbIEpFk1OZZ;byq?<7BD5w~p${4o)f-aN zPXte)UrQ}gd4&^hex5TFnXg#ZAXjapVqA?_12~vA=b~Nu9e*8EpTE-XSBZ7&O_&yH z_KU5!e8Dq9Ry7S{nwB78-lM(7r+xgTVd|sBI-<~D9%wdk@)HZx@%wp@&rL#7-cU@x zZSL2%Karr#G`3DHtFhn~-ViE?50s0=f6;-%AVNOj3x9yUBtf%A6$iZ5o^UUmioxbS z(h5aal5$ELgEbbj{_LZ|y$0bCQBpXyJZ0ochSB6qCe+~4PZP{_v=s;i!b#CtW*@%K zID)XUqYsC#U8a8p^cFDz4jlDfWiez1%zYFu2r7>cpPh53%g3r>iJqFlX%&hc`}M!O zU>d(=6Mrhh?t=Dg^6{u?9J`|dD*r}KRMoKg%E`#_IsZ}i)j{vy@R z7oV*q%SLl%S{ag(W=NBKjDSJye!;kqK3nj#Y<8}jE#=-wp|T2osm>bF?D z26qQ2f)aK7;HUXuYt{M1#D3f8*VdJ$M&wxa>k*MyLV#5570U{(i8-GT-^@Fm>x}Z* zzI1>HLI9UWv$0@lAhg0)n@VAxvkJ}N&`m8hJW+R)_DjM1h!)}(>QY2X!#=SYF#s43 z^M80if|3qYX7w7?d94pT4z;n(dKnX|8U*>4_8N8+dg=&Ei}NV~R&Gyc$T&N=jhA|1 z0}Utz%jq|_5v3J)mJ&oII&)u}fuJp&LrnD~uSz6`w=!uEJ<1QuAHxt;2{j~4L`gL5 zrxMj^NDYTo2Kh>p3ZN>VO9RM8;E2ETfeiJ0sgzMdZ}EVP;#u63{BaJ{T-QIuk8$YD_Gu8`?&A(_t+fjzTh zu@%pW&0RIhY_8xPT_Nm-zLheTII@MkRZt#X&^3w#cXto&?(XjH1bJ|R```q3cX!ud z!3h%Ff(3VX=kR{tU+3KXRp)M2&+6V?doHG`_wHV!NCh{=0%C9V<`4qDsr63R^!#e4 zQnbX^Bf9|CzP~eRSvtig_b@4v7$51%yEo8q`qE8jm_c1ai52oyqFUIGM85uORy9or z*`(~s8TU!2E-XU3MEk@yKTA7tBY=J1`&nsTjr}BJykwRqI|K)3vJdzZ-!t!I6q!S@ z?*Z})^l*6a_fCY-puxG!Z_TfF>K{pn1owqlv;}}z@CsQ@SqW~<*7uHvUM9xSs$U86 zMrMPCT!QOE!n=7ce=7WC+*{GbN5j75A+`;}lj6Fmpss#jFFx)br3;+w0a|6fe&5^Q z?a!gwyi-!w@kwXAOCBiAy{KN<1=Ow`mXlGmKWn}#YEtb_aE6RuT!mQ;4iNEW4<4dX zeg~vw{+O0?&vCKvYP1U~VnfwRKQ|#c{)=?!_A3g4Cpc9yka@G#BfFizBGQWPu*O_< zoGcWhEZCc^POI-#tQRgW{GkInRS`06`ju0se9tgpeQaUe9CnAuB$_x4Yl??{KtqZxP zk76AdEvdudvRH!+mr1&Lv<2E5K-#l7a^6RGN3!R?zk@@HA9xp39-(>~lEK^+8emet%0K6jDr%_pXLMRoRxB+)FXSkCPaF1r;j5Z-T*02NxvA62n$ z|0rDPHe+QzHtwa>jC{x+{}cf?kbnm_jJ^3{zE->u$Cpw0P$T=STBm(VXpFxbC$l=! zu{aft;6s1Ig794n#g;zB%QY2{QeVR~+C{TqE+$Q(!(<{zy`oYm@1;(I=#+e%Xn3v; zp-{iD*Pr@Cw1M??OvC-VHDs8CP=5$@Uy~?q)vu@{Qd;gGM&#fB{ibf?7z`L_vnU%W zooYfQ7C8%D8qT#l#3bg0jCB7hk?nhESs_KRudH#)gD%DQ=>PeAVBW=<#2b6D>h-Dt zZsC`V!j4mC*oAtyEcdDWLtXTu%2^OVy-d6JBDYJ%)EK?Sf073~&DGMX}=m%f!x=6_t*mIU`29r((dxt>_(F%g>CeSiL)_#Xc53`LYB``FhP3srIVH#NTmX zqRO(iGxcA}e}Oab`pa*aHrul3AR8|saQ3bbY6)2(UllVWlpp>SY6sr9lo8AaxFu&d zDVP1aoY$01gCLf{0|~#Rtr}{2inYY%3cY|A<7sMv2_#8%5=z*u)!AWG}MVftGl#CD-0 zLV_4`eW~c(ODhYVwWwa=Q)z=q{>altGgMg_=`^KtmF|lcXj)z%5wHBQ-cNjHkDq|9 zngu~(yW{t9HH<`^d~G%G5=I@PEpvGa)}lk#OWUC744KScqzAahqN9-?d){cu>Z!v= zzI~Xv^&VC%5xYWBak3Hs64hi+g=v`+KB4X{Gb3{(h4T0xS?f~Hgse?yZWj$i!wK$Z zM1sUsbqa?;0tV>G_T9s(U19M@&*c4zKhox7ND+CG0%Xf^n~c#?88r!-XB-}g%z&S5=j!LEv2*tRD1%H?cp5{Um}GvHvwyMI!tV<=$>VUeX+)o+>Fn8Z z|3GR|kn*;!P`2LEnRu3q5pJo0r$D(aDkz#l{oEzX9?F6l(Jj$|^bPLh81B-?+t?;M zX|z;ft=RpxZs)Om!FvP$QGw$%669}}VqF*O{@FvQFD<;4h^ekBgOBpZ@Z=?S zj)PY?EfTYf1o@`~GzSqMSN@yQzt_8Rh=1@>Zl5SH9OV(!_7S(9B0WS{rn;_ zeSGzg2mt{5Bi>3jI#$MMK!c2ta$wP*y|Kl|Qecg=vtOme;8KBkPR0SEr4pXzK=223 zA7Y-h!b^NTa)nrthh%#MuvqF>AQ$J+dc$$!LS*U^jRuMtJ~1aAdX%3%oL8Y3U3o6` z6r>vV!cZBy_2@h7ga?`W3+9RgwItd*>}h#}yMV>`+XnFo14)RQHS!~N8qDxt=Uer* zQcq@WDY;qjHU_Z<73YT*d4_dgje^tk?t>?s5U&rUjz7Y(;Q9Emn-Mn@dL6K4UE@|x zKQT>1;+NL6bZys7jubEvS|R;1m=TpBcu`r;8q7S{O6iIP{Y#^~Bm zV+$*xcj1zBUN#~IFjJY}^j*chNEXs+gAd=o zf~d{nnu+u&t_FP}$n}z66LPiA0MwMybiqyWX5(>zg=qu0FvK>3U!({P?J7Dn%mA{} z0(A36t;Wu5R-Pz#tjJT-tZ07Jx0*xF?vkD!!2SUqa)Y|`=qw_LZY`buLH>#o8+5N1hIF*L_ zHqyR4wLWr+YN@)b_mjM3aHMKR&za&N{oLbAfk+tY%NQ}Qb6EHsqcla#B?RoFN$PL9 z`m_uOsZA2T8$9Nq{z>MP>n+IS9z!p5NAfFqSeql*yB%pP9At(hK0+nFezHY|q@Ho? zY#kiRwSM>7{kt>WUv>s3%Y=uJRSl2%%uf{ru})^e%c>szJ%S{P%`EdvY;kdttlk%O zQ5;Kcc^T#f@H1}08D{L2vUuR9(7Gl@;?8LZ$=BD@i;NSa@&wkn*e zGnO67=RU1P#`!b48#dJnnpUl-V!Yrb9#|Ip3|VqR$7RyElDwdYmi=k*)QwS!JZcr% z5d63JU%4PPahC2iE0oj=t_aswK};Q`^LvvqM~=PGR~ubzDfs-;iD+Pbu;OJ!bY_M7 zfR$KLUFA8$7N z#4aRJ_p?58!||-MhhKN9rfQB2cCdNQW$R%*rI%N99P8>j~*_K*cA@08rjS6(5``L&gB6MC<*1O&$X z++HYHTq9OijFiKyc5;CVC!(y#u4_%1K2s8Gn6csrUnV2FSTUpm71kBEktN}7JR<(| zn}U3H-Z5hkE{&GJjD41mR>Pc^#JQvDnZP0Y*m??+n;{soX$HWsP{Y4mpeu|biE3C= zWog7Rg~%+gmSPu7jv5>Z@}4Q~l7 z*r58Ahl&I0;R7$f17FX%bJ!P9&V^ZT!#^eopr83JQ?7P9)OHxh0g20G)%@b2_Xhjy z)P|a_SDFEd{LmiE%G7f*v4h4LNI)y$`K^Df*3vpw7#k3-H{Dk%rD);DFw?b#F2(Z< zzsgr>7S|+-=Y=1e`=x=luAQYg`ehpKB;$#J^<*v!8--M~{LYg+UkWZ3Lqz}kZAZlY zkiDJhq&!KZO-p&crY@VQ2BwIlitsdFKyMS?3BI}B%$vq42SKUPhVx8zZ%~}e0rhc& zQXy@YU>o32K3=iHq*J)LO9Q`-W3B;j#lE3^Lp}pNN=^iM_F_iNZR}o*33P5t4h*%R zYK#0J!Mr(_3*OlzuD7MYfKe0Ldrs!1n`E0RI2dng&6$L|abch4`3CzB&g9-t58h1Kv^4%5*K!Yt5;-Rp>?Xxmbl=H!O;_qYOh@pbRPv)`|bvd-+xNre)JVI|aUNsKe?y?pJ@+IO(j z0PFk;@ySISN=6vI?XlxT#By*RW5J(Y0x+oxn~=}q7)ghvO9aK$++?)4_=_JF4`IM! zbd0}oVEcOsXphWWetndGtTJE1BHno9j5l1>bXNSN4~I43&9blMtqsMtMees59MytZ zua!Cb6_NNU&BCK!olBH5b@A7BPJZ)LvK{Hk!m1-m#a?=!=gmUX-FRp6ER~KF89Dhh zNdk0f2F6qm_h-#p%neaoWt(}hwnM<_XkHy@z6C+B9rqt^i@}&v67lo|PaYFMme)H; zUl(iTic~XCQ;xU2GKj%+@$Z$nu`ZeSDaHlF|N5gV~n~+PhyIBHFj}Dgv-In@+JH zVJEvISy1xpemr^`2QT(%G;|IL4ry{?bMG$x@gv$j-!uFD7-vqqeg{Gm@x4vRulx1_ zx8$la0!v1FSV2jYdz@GvaqU#}sC}{G)xngRo38W4!*Cs8Yo_~G82fQ}8IcysZ<79M z2sZDHBFg*xiOyeU=2@gLcIAML%9M_LM+F}okCvkZCHhdOQMALD{~jE0Q4J4z+>aU| z*cHu;6W84MAtsOpf?0WZvwo&#qMVgAwB3{-EJUY3(x=bPqpaTM*{?ie9rdbZ`g?c$_nUWh!v1riYh>48Fl5aH0Rji zsVhgsa86G}GuHOX#$zuu9OhqRuM~HE4JRQM)E8fHp=U{ECOq7qFN0Qb_3fiQzOQ+G z7XRzCA8}(vI^~KBA$7kIYd?D2F;C8uZ1K;>h^;L;t8^9J3c(d0y34Y#H17@7N$%gZ zgicuKiKpxHML(P$9bCi&(`I?ux(n{`fp!2${SjC#E-= zmv=X>f{*tpp6N~3bbdObsAt*JL3S{-fI#r$(2w?24Vrs4<8==}Z!!`hw0m)$DwtaQ zYPWSMs}<4bgFgphH0%x?o{N6Oo6L9YgGFd*-;CWS5e=T+kjSk)1Y4tdGkLL)z}EFU z_l?u;8;m&5o`u!~<^`qZgo>p8fBtsP*Y@ zfzxoLq)bBSjl2uM&6$Np9NG6iCVDc_Y2!Os{0h>~>12D|8p99YWPDp5eC%)lzX)J` z5LHlx>_{a+4DM@To^<(eV%N}#w^yqNK72v0^4E;qBR(5{zw#{{v{y72DBVSIw!*Vr z!D3G9E`6F zWmmjxdd`_NAE(HW!mizMc=9otOZ7hb<9!d)DHY!BGUQi2Xeu{5<~a(rHo?6n45!Ew zS&GyB$tFTXT9j$zCA2mr)zW+&BN37M(Q=<c8kpfz??^A>fynJU6uPx`QshA&g2`9ERRK$`i zg$Sb+T0YzDR@_juj|2xb4pH)?F9G7)6+gkz5Fvo-^(oujziqqz+m`Q}tEE0%rz0{S zuKof}Q_Wf;yR8vFoR&eMfvM7PllG))EobYKV=X@syoo1`<|4}B#SwN9Gr0*VZZF5$ z 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 delta 270809 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�<0yV{)qfb;of_H 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 z zS$O&im!X>l8E^RSP8(zj#=DGTWRtWVo(UU`fV=_wDtq9jWi*+BehnStIVm=2 zL671P#()uv4jdMrY7gzf`Zsy$mZiJe7#(o}-mj)lp4p}k>eNcxioaqzUf8$O3`6yc zacpYT0+PG)s<~k>MUHk}aG#|Y$E&ZRJ=2ZnO=q#9OdMGp?$LpxQ%0;{VS?}#e4#gf z09MV;2BsTScGQwudFSl!6fBRFd?@kxuaGb)g&WTsx>wEBrs7Z{S_?mAo(1g@c!!#; z)Z?U`+n$wJP@3Gz;|~b0(lA7L;DaPS^7ll(7rtJ&Q2-io1wpgU#1m4(7wm}~W4w4C zY8c!lak|OsP_+-$bP^THPbeK>YT_jw0R1gfO6WmT;gS}&JZLBZh02eMWl(0igf<^) zT)Fi@fz(U~7al!cF+?!Usu3ViA&?mZu7YIm69OACN=)}x{%0cKt?MRlqTb!tMuoIh z?;2&e2`X?+=rl^^uHD!Py7H#z)=&}=@r^2#)nc?9q9 z{@?8j;o%O3K7|i7b0ZwN*o{KoMtUHSvAJP;6121c{jFF^D|hNK;pD=MF9!>@7{wvO ziZH}qp5%;LSVp+tp7^ov^a+I)u;#JfLF|(Iq_)%NmK@CK5c$srRN-B01AQ+fZPdry zg0d)W4N$UQW74CCKtAqkloYiV7XHydJ&nOn6Ei47?xuJKq7Y5(_8D-ihs=&tP7Y7g z38uhsy1}M`hCjzPe+Da>hv<1daD#qo4FNun0quR8a>g<1W*ia86HS%|(9V_Y6G+hy z56|N@tJyh0+Hmm4X@k&3(S;$z)dL%s74n3Xw)GMuVpc@hhU2wPrVE?{7hbE}!sM4y zy)Bl!`Xasy%YnRVIEL-96!XiD<3(ecH@JOO`y&b~0_kAvVdVTXlBH2&q}Yg1#psQ;aZq<1xr3 zr9ngW&U59`7*Rf?D*D!4f)M);fY3Ar?DV)PMMk`N(3|s5*!JN8mNj@Vpb9i-xw$$t z8HeQ?7@~xl`odw+Phq`m@wAogrJoAew#+P9GnIzz`a@aJUE;)L_dB)`V<6{rG+f-Q zX50#*EBs*N6w3_3KWEh+vWXi?j*U)=?dR-l8yP!VpI$;hsx{*QW1ovA-$u;aFF+xU zeokOwWrDF$75>b7yHv z_h+M{7i`;U8QUky&pa5JBjaL0b8)e)pRZZNjgyEpSMI+#avKgSE%S?x`}HDU3gQ%j(v9;gP$Y=dt#dk{J!|e>MEA|z1aBH8R?e$M zH*HK;e{9{rr0|cnIIk%VY(YgHM7B1#d$JT-Pc;|BTRT+m1Yvo@t-n73-Gk=eJk(<~ zF8InC!f{6-l8<~Of1c zzT%gnmt`@W?*++2a^+Kk4RmMeK8%%N(H~NH$4b?7%rBM5S}kv}oH`gpObh5e-7E zztXw?p{!sWzO~#6RogkCp&>Bl;w&0Rm^VG~zH2YwsLjdT$O zY&gFml1c=!h;2le+PIh1KPHt~LPire_z|5DenFOm<2J^PBCV0pBq-V{Eg?)%jw`Tp zwJv%qWVo@T=B^r3Fp=y&^1PHN&d!uJND_bpiXzro$8R9pmUn*6X8k)&yF)q+gn)G%jx~!|1Iu*bG zJUPgx{mKFFzPOa+vG@@UH1NOj?8N*w8`DHJsH4F~pOKh4lKo+zFN@w3Lo`4gX?-k@ zW==2@;vQx5t^RRgmb#;Sv?wtnZgIj%Dp|%hNqK;2=G$o2#r6mP6oUuJ9%qxCPQyy{*Ae<=HST z&7JC4a?M)ztYJB8K?eD*Y#kO+&$vnOO}b|A_c@542%*Qn+%PJ@a=J~W_k}=jc(;$1 zkC?NY)xnJwO^EM78*&5nbbmIfuX%+F4or7cb9z*j&UYJM_2q6%*x*B--CF%OL4Y

ashvTOfsB+=jB?&woKN{qxcY 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 0$ ($\times$ 436 CDs) & \$ & 9{,}156 \\ -Tax unit count for each of the 21 domains ($\times$ 436 CDs) & count & 9{,}156 \\ +Person count by AGI bracket (9 bins $\times$ 436 district-level units) & count & 3{,}924 \\ +EITC dollars by qualifying children (4 bins $\times$ 436 district-level units) & \$ & 1{,}744 \\ +Tax unit count by qualifying children (4 bins $\times$ 436 district-level units) & count & 1{,}744 \\ +Aggregate AGI (unconditional, $\times$ 436 district-level units) & \$ & 436 \\ +21 income/deduction dollar totals, each with domain $> 0$ ($\times$ 436 district-level units) & \$ & 9{,}156 \\ +Tax unit count for each of the 21 domains ($\times$ 436 district-level units) & count & 9{,}156 \\ \midrule \multicolumn{3}{l}{\textit{Census ACS S2201}} \\ -SNAP household count ($\times$ 436 CDs) & count & 436 \\ +SNAP household count ($\times$ 436 district-level units) & count & 436 \\ \midrule & & \textbf{33{,}572} \\ \bottomrule \end{tabular} } -\caption{Congressional district calibration targets (436 CDs). Each row is replicated across all 436 districts. IRS SOI provides paired dollar and count targets for each income/deduction domain.} +\caption{District-level calibration targets. The 436 district-level units correspond to the 435 +congressional districts plus the District of Columbia. IRS SOI provides paired dollar and count +targets for each income and deduction domain.} \label{tab:cd_targets} \end{table} @@ -78,31 +84,33 @@ \subsection{State targets (4,080)} Target domain & Type & Count \\ \midrule \multicolumn{3}{l}{\textit{Census ACS S0101}} \\ -Person count by age band (18 bands $\times$ 51 states) & count & 918 \\ +Person count by age band (18 bands $\times$ 50 states + DC) & count & 918 \\ \midrule \multicolumn{3}{l}{\textit{IRS SOI}} \\ -Person count by AGI bracket (9 bins $\times$ 51 states) & count & 459 \\ -EITC dollars by qualifying children (4 bins $\times$ 51) & \$ & 204 \\ -Tax unit count by qualifying children (4 bins $\times$ 51) & count & 204 \\ -Aggregate AGI (unconditional, $\times$ 51 states) & \$ & 51 \\ -20 income/deduction dollar totals (domain $> 0$, $\times$ 51) & \$ & 1{,}020 \\ -Tax unit count for each of the 21 domains ($\times$ 51) & count & 1{,}071 \\ +Person count by AGI bracket (9 bins $\times$ 50 states + DC) & count & 459 \\ +EITC dollars by qualifying children (4 bins $\times$ 50 states + DC) & \$ & 204 \\ +Tax unit count by qualifying children (4 bins $\times$ 50 states + DC) & count & 204 \\ +Aggregate AGI (unconditional, $\times$ 50 states + DC) & \$ & 51 \\ +20 income/deduction dollar totals (domain $> 0$, $\times$ 50 states + DC) & \$ & 1{,}020 \\ +Tax unit count for each of the 21 domains ($\times$ 50 states + DC) & count & 1{,}071 \\ \midrule \multicolumn{3}{l}{\textit{USDA FNS SNAP}} \\ -SNAP spending ($\times$ 51 states) & \$ & 51 \\ -SNAP household count ($\times$ 51 states) & count & 51 \\ +SNAP spending ($\times$ 50 states + DC) & \$ & 51 \\ +SNAP household count ($\times$ 50 states + DC) & count & 51 \\ \midrule \multicolumn{3}{l}{\textit{CMS Medicaid}} \\ -Medicaid enrollment ($\times$ 51 states) & count & 51 \\ +Medicaid enrollment ($\times$ 50 states + DC) & count & 51 \\ \midrule \multicolumn{3}{l}{\textit{Census STC}} \\ -State income tax collections ($\times$ 51 states) & \$ & 51 \\ +State income tax collections ($\times$ 50 states + DC) & \$ & 51 \\ \midrule & & \textbf{4{,}080} \\ \bottomrule \end{tabular} } -\caption{State-level calibration targets (50 states + DC). IRS SOI variables mirror the district structure. USDA provides both SNAP spending and household counts; CMS provides Medicaid enrollment.} +\caption{State-level calibration targets for the 50 states plus the District of Columbia. IRS SOI +variables mirror the district-level structure. USDA provides both SNAP spending and household +counts, and CMS provides Medicaid enrollment.} \label{tab:state_targets} \end{table} @@ -150,7 +158,9 @@ \subsection{National targets (106)} \bottomrule \end{tabular} } -\caption{National-level calibration targets. CBO, JCT, SSA, CMS, and Census values are curated from the cited administrative sources and stored in the ETL pipeline. Dollar values are inflation-adjusted to the calibration year.} +\caption{National-level calibration targets. CBO, JCT, SSA, CMS, and Census values are curated from +the cited administrative sources and stored in the ETL pipeline. Dollar values are +inflation-adjusted to the calibration year.} \label{tab:national_targets} \end{table} @@ -197,3 +207,18 @@ \section{Algorithm pseudocode} \State \Return $\hat{\mathbf{w}}$ \end{algorithmic} \end{algorithm} + +\section{Dataset assembly details} +\label{app:assembly} + +After optimization, the fitted weight vector is reshaped back to clone-by-household form and used +to build deployable H5 datasets. The assembly step keeps only active cloned units, reconstructs the +associated person and tax-unit memberships, derives geography from the stored census block +assignment, and recomputes geography-dependent quantities such as Supplemental Poverty Measure +threshold adjustments. + +Two implementation details matter for fidelity. First, geography is derived from the same cloned +block assignments that were used to build the calibration matrix, so the assembled dataset matches +the unit universe that the optimizer saw. Second, take-up draws are regenerated with the same +deterministic seeds used during matrix construction, which keeps take-up-dependent targets +consistent between the calibration package and the published dataset. diff --git a/paper-l0/sections/background.tex b/paper-l0/sections/background.tex index ab8c83e66..759da035c 100644 --- a/paper-l0/sections/background.tex +++ b/paper-l0/sections/background.tex @@ -1,76 +1,114 @@ \section{Background and related work} \label{sec:background} -\subsection{The survey calibration problem} - -Given a probability sample of $n$ units with initial design weights $d_i$ and a vector of auxiliary variables $\mathbf{x}_i \in \R^p$ for each unit $i$, survey calibration seeks adjusted weights $w_i$ such that the weighted sample totals reproduce known population totals: +\subsection{Subnational microsimulation and spatial reweighting} + +Subnational microsimulation usually starts from the same basic problem: a national survey contains +the behavioural and demographic detail needed for policy modelling, but it does not contain enough +observations in every local area to support direct estimation. Spatial microsimulation addresses +that gap either by reweighting existing survey records or by constructing synthetic small-area +populations from aggregate constraints \citep{tanton2014review, odonoghue2014review}. + +This distinction matters for the present paper. Our pipeline remains a reweighting system built on +observed CPS households. We do clone households across sampled geographies, but the core empirical +problem is still calibration of survey-based microdata to administrative targets. That makes +classical calibration methods the closest reference point for the benchmark design. + +The spatial microsimulation literature also provides broader context. \citet{williamson1998}, +\citet{huang2001}, and \citet{harland2012} describe combinatorial and synthetic-population +approaches that search over record assignments area by area. \citet{tanton2011} and +\citet{lovelace2016} discuss reweighting approaches for small-area estimation and policy analysis. +These methods are useful precedents, but they usually target one geographic layer at a time. Our +setting requires one weighted microdata system to reproduce district-level, state-level, and +national targets jointly. + +\subsection{Survey calibration} + +Let $i = 1, \ldots, n$ index sampled units, let $d_i$ denote the initial design weight for unit +$i$, and let $\mathbf{x}_i \in \mathbb{R}^p$ denote the vector of auxiliary variables used for +calibration. Survey calibration seeks adjusted weights $w_i$ such that the weighted sample totals +match known population totals: \begin{equation} - \sum_{i=1}^{n} w_i \mathbf{x}_i = \mathbf{T} + \sum_{i=1}^{n} w_i \mathbf{x}_i = \mathbf{T}, \label{eq:calibration_constraint} \end{equation} -where $\mathbf{T} \in \R^m$ is the vector of $m$ known administrative or census totals. When $m < n$, the system is underdetermined and a distance criterion selects among feasible solutions. \citet{deville1992} formalized this as a constrained optimization problem: minimize a distance function $\sum_i G(w_i, d_i)$ subject to Equation~\ref{eq:calibration_constraint}, where $G$ is convex and satisfies $G(d_i, d_i) = 0$. The choice of $G$ determines the calibration method: a chi-squared distance yields the generalized regression (GREG) estimator, an exponential distance yields raking (multiplicative calibration), and a truncated distance yields bounded weight adjustments. \citet{sarndal2007} provides a comprehensive review of these methods and their statistical properties. - -In the subnational setting addressed here, the constraint vector $\mathbf{T}$ contains targets at multiple geographic levels---congressional districts, states, and the nation---requiring that district totals sum to state totals, which sum to national totals. This hierarchical structure produces $m \approx 37{,}800$ simultaneous constraints with near-collinearity across levels, placing the problem beyond the regime where classical closed-form calibration methods operate reliably. - -Subnational microsimulation also sits within the broader spatial microsimulation literature. Reviews of static spatial microsimulation often distinguish between \emph{reweighting} methods, which begin from survey microdata and adjust weights to match small-area constraints, and \emph{synthetic reconstruction} methods, which construct new small-area populations from aggregate tables \citep{tanton2014review, odonoghue2014review}. This distinction matters for the present paper. Our method remains, at core, a calibration-weighting approach over observed CPS households, so GREG and IPF are the closest classical benchmarks. At the same time, by cloning households, assigning them to new geographies, and assembling area-specific output files, the pipeline also produces derived spatial microdata for small-area policy analysis, making it relevant to some synthetic-population use cases even though the empirical comparison in this paper focuses on calibration methods. - -\subsection{Generalized regression (GREG) estimation} - -The GREG estimator minimizes the chi-squared distance $\sum_i (w_i - d_i)^2 / d_i$ subject to Equation~\ref{eq:calibration_constraint}, yielding the closed-form solution: +where $\mathbf{T} \in \mathbb{R}^p$ is the vector of published totals +\citep{deville1992, sarndal2007}. In practice, the auxiliary variables may be counts, indicators, +or continuous quantities such as income components. When the target system is internally +consistent, classical calibration methods seek exact reproduction of those totals. + +The subnational problem in this paper extends that setup in two ways. First, the target vector +contains variables from multiple administrative sources and therefore mixes count and dollar +constraints. Second, those constraints are nested by geography: district-level totals should add to +state totals, which should add to national totals after uprating and reconciliation. In the full +production problem, that yields tens of thousands of targets with substantial collinearity across +rows. + +\subsection{Generalized regression} + +Generalized regression (GREG) calibration minimizes a distance from the initial weights while +enforcing the calibration equations \citep{deville1992, sarndal2007}. With the usual chi-squared +distance, the calibrated weight for unit $i$ can be written as \begin{equation} - w_i = d_i + d_i \, \mathbf{x}_i^\top \left(\sum_{j=1}^{n} d_j \, \mathbf{x}_j \mathbf{x}_j^\top\right)^{-1} \left(\mathbf{T} - \sum_{j=1}^{n} d_j \, \mathbf{x}_j\right) + w_i = d_i + d_i \mathbf{x}_i^\top + \left(\sum_{j=1}^{n} d_j \mathbf{x}_j \mathbf{x}_j^\top\right)^{-1} + \left(\mathbf{T} - \sum_{j=1}^{n} d_j \mathbf{x}_j\right). \label{eq:greg} \end{equation} -This requires inverting a $p \times p$ matrix, where $p$ is the dimension of the auxiliary vector. When $p$ is moderate (tens to hundreds), GREG is computationally efficient, statistically well understood, and produces asymptotically unbiased estimators \citep{deville1992, sarndal2007}. - -GREG has two practical limitations in the subnational setting. First, the matrix inversion in Equation~\ref{eq:greg} becomes numerically ill-conditioned as $p$ grows into the thousands, particularly when constraints at different geographic levels are nearly collinear (e.g., the sum of district age counts within a state nearly equals the state age total). Second, GREG does not constrain weight signs: calibrated weights can become negative, which is undesirable for microsimulation since negative weights imply subtracting households from the population. Weight truncation or bounding after the fact restores non-negativity but violates the calibration constraints. - -The Congressional Budget Office \citep{cbo2018}, Joint Committee on Taxation \citep{jct2023}, and Tax Policy Center \citep{tpc2024} use variants of GREG calibration for their national microsimulation models, where the number of calibration constraints is typically in the hundreds---well within GREG's reliable operating range. - -\subsection{Iterative proportional fitting} - -Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts cell counts in a contingency table to match given marginal totals. The algorithm cycles through dimensions, scaling each dimension's cells so that their marginal matches the target, then repeating until convergence. IPF converges to the maximum entropy solution subject to the marginal constraints \citep{ireland1968}. In the spatial microsimulation literature, it appears in both synthetic reconstruction and reweighting forms; the discussion here concerns the reweighting form that starts from survey microdata and updates weights rather than building a synthetic joint distribution from scratch \citep{tanton2014review}. - -In the microsimulation context, IPF adjusts household weights to match cross-classified population counts---for example, persons by age group within each congressional district. IPF has several practical advantages: it preserves non-negativity by construction (weights are scaled multiplicatively, so positive weights remain positive), it requires no matrix inversion, and it scales well to high-dimensional contingency tables. EUROMOD, the EU-wide tax-benefit microsimulation model, uses IPF-based calibration to reweight national surveys to demographic benchmarks across member states. - -However, IPF has three limitations relevant to subnational calibration. First, IPF does not naturally enforce hierarchical consistency: district-level targets produced by IPF do not automatically sum to the correct state totals, requiring post-hoc reconciliation that may introduce new inconsistencies. Second, IPF handles only count targets organized as contingency table margins; incorporating continuous-valued targets (e.g., aggregate income or benefit spending) requires auxiliary procedures outside the IPF framework. Third, IPF scales cell counts multiplicatively, which can produce extreme weights when initial cells are small or zero, and convergence slows or fails when marginal constraints are mutually inconsistent. - -\subsection{Spatial microsimulation} - -Spatial microsimulation constructs small-area populations either by reweighting existing microdata or by synthesizing new unit-record populations from aggregate constraints \citep{tanton2014review, odonoghue2014review}. \citet{williamson1998} introduced a combinatorial optimization approach that selects a subset of survey records for each small area using simulated annealing to minimize the difference between weighted survey totals and census benchmarks. \citet{huang2001} extended this with a deterministic algorithm based on systematic record selection. \citet{tanton2011} applied generalized regression reweighting to create small-area estimates of poverty and housing stress in Australia. - -\citet{harland2012} developed methods for creating realistic synthetic populations at fine geographic scales using iterative proportional fitting combined with Monte Carlo sampling. \citet{lovelace2016} provided an accessible implementation in R with the \texttt{spatial-microsim-book} framework. - -Within this literature, combinatorial optimization and especially simulated annealing occupy an important place as methods for generating synthetic spatial microdata from observed survey records \citep{tanton2014review, odonoghue2014review}. Their main advantage is that they work directly with real microdata, can be flexible about household structure, and can accommodate settings where the unit of analysis in the constraints and the microdata do not align neatly. Their main disadvantage is computational intensity: they are usually run area by area and search a large discrete space of candidate record combinations \citep{harland2012, odonoghue2014review}. - -These methods typically operate at a single geographic level---producing estimates for each small area independently. Joint calibration across multiple geographic levels (district, state, national) with a single set of weights is uncommon in the spatial microsimulation literature, as it requires simultaneously satisfying tens of thousands of constraints that span different administrative geographies. Other operational models avoid the problem entirely: TAXSIM (NBER) operates at the national level without geographic calibration, while state-level models maintained by individual state revenue departments calibrate only within their own jurisdiction. For this reason, simulated annealing is an important reference point in the broader spatial microsimulation literature, but it is not the closest like-for-like empirical comparator to our setting. The benchmark design in this paper therefore focuses on GREG and IPF as the classical calibration baselines most closely aligned with a shared weighted-microdata formulation. - -\subsection{$L_0$ regularization and the Hard Concrete distribution} - -$L_0$ regularization penalizes the count of nonzero parameters in a model, encouraging sparsity. Unlike $L_1$ regularization, which penalizes the sum of absolute values and produces approximate sparsity through shrinkage, $L_0$ regularization produces exact zeros. The $L_0$ norm $\|\mathbf{w}\|_0 = \sum_i \mathbf{1}[w_i \neq 0]$ is discontinuous and combinatorial, making direct optimization intractable for large parameter spaces. - -\citet{louizos2018} proposed a differentiable relaxation of $L_0$ regularization using the Hard Concrete distribution. Each parameter is multiplied by a stochastic gate $z_i$ drawn from a stretched and rectified Bernoulli distribution. During training, the gate is sampled as: -\begin{align} - u &\sim \text{Uniform}(0, 1) \\ - \bar{s} &= \sigma\!\left(\frac{\log u - \log(1-u) + \log \alpha_i}{\beta}\right) \\ - s &= \bar{s}(\zeta - \gamma) + \gamma \\ - z_i &= \min(1, \max(0, s)) -\end{align} -where $\sigma$ is the sigmoid function, $\alpha_i$ is a learnable parameter controlling the gate's probability of being open, $\beta$ is a temperature parameter, and $\gamma < 0$ and $\zeta > 1$ are stretch parameters that place probability mass at exactly zero and exactly one after clipping. The expected $L_0$ penalty is: -\begin{equation} - \E[L_0] = \sum_i \sigma\!\left(\log \alpha_i - \beta \log \frac{-\gamma}{\zeta}\right) -\end{equation} -which is differentiable with respect to $\alpha_i$ and can be optimized with standard gradient methods. - -At inference time, the stochastic sample is replaced by the deterministic mean: -\begin{equation} - z_i^{\text{det}} = \min\!\left(1, \max\!\left(0,\; \sigma(\log \alpha_i)(\zeta - \gamma) + \gamma\right)\right) -\end{equation} - -The Hard Concrete distribution was originally developed for pruning neural network weights \citep{louizos2018}. In the present work, we repurpose it for survey weight selection: each household-geography combination receives a gate, and the $L_0$ penalty controls how many combinations are retained in the final dataset. +GREG is attractive because it can accommodate quantitative targets directly and is well understood +in survey statistics. + +Its weaknesses are also clear in a microsimulation setting. The matrix in +Equation~\ref{eq:greg} becomes harder to invert reliably as the target system grows and the rows +become more collinear. GREG can also assign negative weights. That is acceptable in some +estimation settings, but it is awkward in a microdata file that will later be used for tax-benefit +simulation, where analysts expect households to represent positive population mass. + +\subsection{Iterative proportional fitting and raking} + +Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968}, often called raking in +survey practice, adjusts weights multiplicatively so that selected margins match published totals. +When the margins are compatible and the algorithm converges, the fitted margins are matched +exactly. IPF preserves non-negativity and avoids matrix inversion, which makes it a natural +baseline for count-style calibration problems. + +IPF is narrower than GREG in scope. Classical IPF is built for categorical or margin-style +constraints, not arbitrary linear dollar targets. It also does not naturally encode a large mixed +system of district, state, and national constraints in one pass. For that reason, the benchmark in +this paper uses IPF only on target subsets that fit its assumptions rather than forcing it onto the +full production matrix. + +\subsection{Adjacent weighting literatures} + +Two adjacent literatures inform the framing even though they are not the main empirical baselines +here. Small area estimation borrows strength across areas to improve local estimates from limited +samples \citep{anderson2013}. Covariate-balancing methods in causal inference choose weights to +balance observed covariates between treated and control units \citep{imai2014}. Both literatures +share the broader idea that weighting can repair deficiencies in the observed sample, but they +optimize for different inferential goals than the hierarchical administrative-target problem studied +here. + +\subsection{\texorpdfstring{$L_0$}{L0} regularization and the Hard Concrete distribution} + +$L_0$ regularization penalizes the number of active parameters in a model. In our setting, the +parameters are household-geography combinations rather than neural-network weights. Direct +optimization of the $L_0$ norm is combinatorial, so we use the Hard Concrete relaxation proposed by +\citet{louizos2018}. Each unit receives a gate $z_i \in [0, 1]$ that is sampled during training and +that collapses toward 0 or 1 after clipping. The expected number of active gates is differentiable, +which makes it possible to optimize calibration error and sparsity jointly. + +That adaptation changes the role of regularization in calibration. Classical calibration methods +return one fitted weight vector for the chosen target system. The Hard Concrete gate makes the +number of retained records a direct object of optimization. This is the mechanism that lets one +pipeline produce both compact national datasets and larger subnational datasets. \subsection{National-level predecessor} -\citet{woodruff2024} developed a two-stage method for constructing enhanced national microsimulation datasets. In the first stage, quantile regression forests \citep{meinshausen2006quantile} impute 72 tax variables from the IRS Public Use File onto CPS records, preserving joint distributional characteristics through sequential conditioning. In the second stage, dropout-regularized gradient descent optimizes household weights to match approximately 7,000 national-level administrative targets from the IRS, CBO, JCT, Census Bureau, and program-specific sources. - -The present paper extends this framework in four directions. First, we replace the single-geography dataset with a clone-and-assign procedure that replicates each CPS household across 436 congressional districts, 50 states (plus DC), and New York City, enabling subnational coverage. Second, we replace dropout regularization with $L_0$ Hard Concrete gates, providing a principled mechanism for exact sparsity with a configurable sparsity-accuracy trade-off. Third, we introduce hierarchical uprating to reconcile targets from different administrative sources---where, for example, district-level IRS totals may not sum exactly to state-level USDA program totals due to different data collection methodologies and reference periods. Fourth, we add take-up re-randomization so that program participation varies across geographic clones of the same household, reflecting local-area take-up rates. +\citet{woodruff2024} developed a national pipeline that imputes tax variables from the IRS Public +Use File onto CPS records and then calibrates the resulting dataset to national administrative +totals. The present paper extends that work in three directions. First, the pipeline now assigns +households to district-level units and states rather than keeping a single national geography. +Second, the optimizer now uses $L_0$ gates instead of dropout-style regularization, which produces +exact sparsity at inference time. Third, the paper evaluates the resulting system as a benchmark +study, with explicit comparisons to classical reference methods and an experimental design that +tracks what happens as the target system approaches production scale. diff --git a/paper-l0/sections/conclusion.tex b/paper-l0/sections/conclusion.tex index 81ef17637..a82e2161a 100644 --- a/paper-l0/sections/conclusion.tex +++ b/paper-l0/sections/conclusion.tex @@ -1,14 +1,23 @@ \section{Conclusion} \label{sec:conclusion} -This paper presents an $L_0$ regularization method for calibrating microsimulation datasets to subnational administrative targets. The method jointly optimizes household weight magnitudes and sparsity using Hard Concrete gates, producing calibrated datasets that simultaneously match approximately 37,800 targets across congressional districts, states, and the nation. +This paper studies $L_0$ regularization as a calibration method for subnational microsimulation. In +our setting, the problem is not only to match administrative targets. It is also to do so across +nested geographies while producing a dataset that remains usable in an operational policy model. -The key technical contribution is the adaptation of $L_0$ regularization---originally developed for neural network pruning---to the survey calibration setting. Each household-geography combination receives a continuous weight and a stochastic binary gate. The gate's learnable logit and the weight magnitude are jointly optimized via gradient descent, with the $L_0$ penalty controlling sparsity. At inference, gates collapse to deterministic zeros and ones, producing a sparse dataset in which the number of retained records is a smooth function of the penalty parameter $\lambda_{L_0}$. +The paper's main empirical design reflects that goal. Rather than presenting $L_0$ only as a new +optimizer, we benchmark it against classical reference methods on shared exported calibration +packages. The tractable benchmark tests whether $L_0$ is competitive when classical methods can run +comfortably. The scaling frontier identifies where those methods begin to fail or fall outside +their natural scope. The production-feasibility case connects the comparison back to the +\texttt{policyengine-us-data} deployment problem. -The configurable sparsity is practically useful: the same pipeline produces compact 50,000-record datasets for web-based interactive tools and detailed 3--4 million-record datasets for subnational policy analysis, without separate calibration procedures. +That framing is important for the substantive claim. A useful subnational calibration method must +do more than fit a small benchmark. It must support a large hierarchical target system and produce a +manageable microdata file. The $L_0$ gate is valuable here because it makes sparsity a direct +optimization target rather than an afterthought. -The pipeline builds on the CPS-PUF imputation methodology of \citet{woodruff2024}, extending it from national to subnational coverage through clone-and-assign geography, hierarchical target reconciliation, and take-up re-randomization. The full pipeline---from raw CPS to calibrated H5 datasets---runs in approximately 8--12 hours on cloud infrastructure and is fully open source. - -The method is implemented in two open-source packages: the \texttt{l0-python} PyTorch package (\url{https://github.com/PolicyEngine/l0-python}), which provides the Hard Concrete optimizer, and the \texttt{policyengine-us-data} pipeline (\url{https://github.com/PolicyEngine/policyengine-us-data}), which implements the full four-stage calibration. Calibrated datasets are publicly available on HuggingFace (\texttt{policyengine/policyengine-us-data}). - -Future work includes extending calibration to county-level targets as additional administrative data becomes available, implementing adaptive $\lambda_{L_0}$ scheduling during training (analogous to learning rate schedules), incorporating an early stopping criterion based on held-out target validation, and applying the method to non-US microsimulation systems. +The broader contribution is therefore twofold: a sparse calibration method and an open-source +pipeline that makes the method deployable. Future work can extend the benchmark to finer +geographies, refine the target families, and test alternative sparse optimizers on the same +exported calibration packages. diff --git a/paper-l0/sections/data.tex b/paper-l0/sections/data.tex index b1b741518..8c5bc6f39 100644 --- a/paper-l0/sections/data.tex +++ b/paper-l0/sections/data.tex @@ -1,89 +1,121 @@ \section{Data} \label{sec:data} -The calibration pipeline consumes two categories of input: base microdata from household surveys, and administrative targets from government agencies. This section describes both. +The calibration pipeline consumes two classes of inputs: household microdata that define the unit +universe and administrative targets that define the calibration problem. This section describes +both. \subsection{Base microdata} \subsubsection{Current Population Survey} -The primary microdata source is the Current Population Survey Annual Social and Economic Supplement \citep[CPS ASEC;][]{census2024}, a nationally representative household survey of approximately 200,000 persons conducted jointly by the US Census Bureau and the Bureau of Labor Statistics. The CPS ASEC contains detailed demographic variables (age, sex, race, household composition, state of residence), income variables (earnings, Social Security, pension, unemployment compensation), and program participation indicators (SNAP, Medicaid, SSI, TANF). +The primary microdata source is the Current Population Survey Annual Social and Economic Supplement +\citep[CPS ASEC;][]{census2024}, a nationally representative household survey conducted by the US +Census Bureau and the Bureau of Labor Statistics. The CPS provides detailed demographic structure, +household relationships, labour income, transfer income, and reported participation in major +programmes such as SNAP, Medicaid, SSI, and TANF. -The CPS has well-documented limitations for tax microsimulation. Top incomes are truncated for privacy protection, causing underestimation of capital gains, partnership income, and other high-income components \citep{burkhauser2012}. Benefit receipt is underreported relative to administrative totals \citep{rothbaum2021, meyer2021}. Tax-specific variables---itemized deductions, tax credits, and filing-status-dependent calculations---are either absent or imprecisely measured. +The CPS is not a complete tax-benefit dataset by itself. Some tax variables are missing entirely, +others are measured with substantial error, and top incomes are top-coded or otherwise imperfectly +captured relative to tax records \citep{burkhauser2012}. Benefit receipt is also underreported in +many surveys relative to administrative sources \citep{rothbaum2021, meyer2021}. The pipeline +therefore augments the CPS before calibration. \subsubsection{IRS Public Use File imputation} -To address these gaps, we impute 72 tax variables from the IRS Public Use File \citep[PUF;][]{bryant2023a} onto CPS records following the methodology of \citet{woodruff2024}. The PUF contains individual tax return data with detailed income components, deductions, and credits, but lacks household structure and demographic detail. +We impute 72 tax variables from the IRS Public Use File (PUF) onto CPS records following the +national pipeline of \citet{woodruff2024}. The PUF provides detailed tax-return information but +lacks the household structure and demographic coverage needed for microsimulation. Quantile +regression forests \citep{meinshausen2006quantile} bridge that gap by predicting tax variables on +the CPS from the PUF training sample. -The imputation uses quantile regression forests \citep[QRF;][]{meinshausen2006quantile} trained on the PUF and applied to CPS records. To preserve the joint distribution across the 72 variables, QRF models are applied sequentially: each variable is imputed conditional on all previously imputed variables in the sequence. A stratified subsample of PUF training records preserves the top 0.5\% of the AGI distribution (retaining all records above the 99.5th percentile) alongside a random sample of 20,000 records from the remainder. +The imputation proceeds sequentially so that later variables condition on earlier imputed values. +This preserves more of the joint tax distribution than an independent-variable approach. The PUF +training sample retains the top 0.5\% of the AGI distribution in full and samples from the +remainder to keep training practical. The resulting enhanced CPS keeps the CPS household structure +while importing tax information that is missing or unreliable in the raw survey. -The imputation overwrites a subset of 44 unreliable CPS variables with PUF predictions, while retaining original CPS values for all other variables. Each CPS record receives QRF-imputed values for the 72 tax variables, producing an enhanced dataset that combines the demographic detail of the CPS with the tax fidelity of the PUF. +\subsubsection{Additional source imputations} -Social Security income, which appears as a single total in the PUF, is decomposed into four sub-components (retirement, disability, survivors, dependents) using a QRF model trained on CPS records where all four components are observed. An age-based heuristic serves as a fallback: records with age 62 or above receive 100\% retirement allocation; younger records receive 100\% disability allocation. - -\subsubsection{Source imputation from additional surveys} - -Nine additional variables are imputed from three external surveys to fill gaps in CPS measurement: +The pipeline also fills selected gaps from other surveys: \begin{itemize} - \item \textbf{American Community Survey (ACS) 2022}: rent and real estate taxes, imputed with state FIPS as a predictor. Because geography is assigned before source imputation (Section~\ref{sec:stage1}), the ACS QRF conditions on the clone's assigned state, producing state-aware housing cost predictions. - \item \textbf{Survey of Income and Program Participation (SIPP) 2023}: tip income, bank account assets, stock assets, and bond assets. SIPP public-use files lack state identifiers, so these imputations are state-blind. - \item \textbf{Survey of Consumer Finances (SCF) 2022}: net worth, auto loan balance, and auto loan interest. SCF also lacks state identifiers; imputations are state-blind. + \item The American Community Survey supplies rent and real-estate tax information. + \item The Survey of Income and Program Participation supplies tip income and several asset + components. + \item The Survey of Consumer Finances supplies net worth and selected debt variables. \end{itemize} -Training sample sizes are 10,000 household heads for ACS, up to 20,000 weighted-probability records for SIPP, and 50\% of SCF records. +These source imputations are part of the base microdata construction rather than the calibration +step. They define the values that cloned households can contribute to later targets. \subsection{Calibration targets} -The optimizer calibrates against approximately 37,800 targets spanning three geographic levels and multiple administrative sources. Table~\ref{tab:target_summary} summarizes the target structure. +The target system combines district-level, state-level, and national aggregates from multiple +administrative sources. The pipeline stores these targets in a target database, +\texttt{policy\_data.db}. Table~\ref{tab:target_summary} summarizes the full active target +inventory stored in that database. Individual benchmark runs use subsets of that inventory, so the +exact target count in the experiments is reported by benchmark manifest rather than inferred from +the database-wide total alone. \input{tables/target_summary} -\subsubsection{Congressional district targets} +\subsubsection{District-level targets} -At the district level (436 congressional districts), targets come from two sources: +District-level targets cover 435 congressional districts plus the District of Columbia. The main +sources are: \begin{itemize} - \item \textbf{IRS Statistics of Income (SOI)}: adjusted gross income, income tax, EITC by number of qualifying children, capital gains, self-employment income, pension income, and other income and deduction categories. These are available at the ZIP code level and aggregated to congressional districts. - \item \textbf{Census ACS}: age distributions in 18 bands (0--4, 5--9, \ldots, 80--84, 85+), providing demographic structure within each district. - \item \textbf{SNAP household counts}: district-level counts of SNAP-receiving households from USDA administrative data. + \item IRS Statistics of Income (SOI) targets for AGI, EITC, income components, deductions, and + tax-unit counts. + \item Census age-distribution targets from ACS tables. + \item SNAP household counts derived for district-level use. \end{itemize} +The district layer is numerically dominant because each target family is repeated across hundreds +of geographic units. + \subsubsection{State targets} -At the state level (50 states plus DC), additional targets include: +State targets cover the 50 states plus the District of Columbia. They include: \begin{itemize} - \item \textbf{USDA}: administrative SNAP spending by state. - \item \textbf{CMS}: Medicaid enrollment by state. - \item \textbf{Census Bureau}: state income tax collections. + \item IRS SOI targets aggregated to the state level. + \item Census age targets. + \item USDA SNAP spending and household counts. + \item CMS Medicaid enrollment totals. + \item Census state income tax collections. \end{itemize} \subsubsection{National targets} -National targets provide top-level fiscal and demographic constraints: - -\begin{itemize} - \item \textbf{CBO}: federal budget projections for program spending and revenue. - \item \textbf{JCT}: tax expenditure estimates for major deductions and credits. - \item \textbf{SSA}: benefit totals by program (retirement, disability, survivors, SSI). - \item Additional administrative totals for healthcare spending and demographic benchmarks. -\end{itemize} +National targets provide the top layer of the hierarchy. They combine IRS totals with curated +aggregates from agencies such as CBO, JCT, SSA, CMS, and Census. Some domains rely on curated +published totals stored in the ETL pipeline because there is no single machine-readable source that +matches the calibration year exactly. -\subsection{Hierarchical uprating} +\subsection{Hierarchical uprating and reconciliation} \label{sec:uprating} -Calibration targets originate from different sources with different reference periods. IRS SOI district data may reference tax year 2022, while USDA SNAP data references fiscal year 2024 and CBO projections reference the current budget year. Two adjustments reconcile these differences. +Target sources reference different years and do not always aggregate cleanly across geographic +levels. The pipeline applies two adjustments before calibration. -The \textit{uprating factor} (UF) bridges the time gap between the source data period and the calibration year. For most domains, dollar-denominated targets use the Consumer Price Index and count targets use Census population growth projections. For ACA premium tax credits, state-specific uprating factors derived from CMS/KFF enrollment data capture state-level variation in marketplace enrollment growth. +The first is an uprating factor that moves a source-year total to the calibration year. Dollar +targets are usually uprated with price or programme-specific growth factors, while count targets +use population or enrolment growth where appropriate. -The \textit{hierarchy inconsistency factor} (HIF) corrects for district-level totals that do not sum exactly to state-level totals, which occurs when district and state data come from different administrative sources or use different collection methodologies. For each state $s$ and variable $v$, the HIF is: +The second is a hierarchy inconsistency factor. For source families where district totals do not +sum to the corresponding state totals, the pipeline rescales the district values so that the +district layer matches the uprated state layer: \begin{equation} - \text{HIF}_{s,v} = \frac{T_{s,v}^{\text{state}}}{\sum_{d \in s} T_{d,v}^{\text{district}}} + \text{HIF}_{s,v} = \frac{T_{s,v}^{\text{state}}} + {\sum_{d \in s} T_{d,v}^{\text{district}}}, \end{equation} -where $T_{s,v}^{\text{state}}$ is the state-level target and $T_{d,v}^{\text{district}}$ is the district-level target for district $d$ within state $s$. Each district target is then adjusted as $T_{d,v}^{\text{adj}} = T_{d,v}^{\text{district}} \times \text{HIF}_{s,v} \times \text{UF}_{s,v}$, ensuring that adjusted district targets sum exactly to the uprated state total: +and \begin{equation} - \sum_{d \in s} T_{d,v}^{\text{adj}} = \text{UF}_{s,v} \times T_{s,v}^{\text{state}} + T_{d,v}^{\text{adj}} = + T_{d,v}^{\text{district}} \times \text{HIF}_{s,v} \times \text{UF}_{s,v}. \end{equation} -For IRS SOI data, where district totals are constructed from ZIP-code-level data that sums exactly to state totals, the HIF equals 1.0. For SNAP household counts, where district estimates from one source substantially undercount state administrative totals from another, HIFs range from 1.2 to 1.7 across states. +This reconciliation step does not remove all modelling judgment, but it gives the optimizer a +target system that is internally coherent across district, state, and national layers. diff --git a/paper-l0/sections/discussion.tex b/paper-l0/sections/discussion.tex index 9309c5602..6850b4d21 100644 --- a/paper-l0/sections/discussion.tex +++ b/paper-l0/sections/discussion.tex @@ -1,42 +1,88 @@ \section{Discussion} \label{sec:discussion} -\subsection{Configurable sparsity trade-off} +\subsection{What the tractable benchmark establishes} -The $\lambda_{L_0}$ parameter provides a continuous sparsity-accuracy dial. At one extreme, $\lambda_{L_0} = 10^{-4}$ produces a compact dataset of approximately 50,000 records that loads in seconds for web-based simulation tools, where users expect near-instant feedback. At the other extreme, $\lambda_{L_0} = 10^{-8}$ retains 3--4 million records with fine geographic resolution across all 436 congressional districts. Intermediate values produce datasets of intermediate size. +The tractable benchmark is the cleanest answer to the most obvious objection to the method: does +$L_0$ only look good because it is the only method built for the largest problem? That objection is +fair, which is why Tier 1 matters. If $L_0$ performs competitively with GREG on the mixed-target +tractable benchmark and remains competitive with IPF on the count-style benchmark, then its later +advantages cannot be dismissed as a scale-only story. -This trade-off does not exist in classical calibration methods. IPF and GREG produce a single set of weights without sparsity control. To reduce dataset size, researchers must discard records post hoc or apply ad hoc thresholding---neither of which jointly optimizes accuracy and sparsity. The Hard Concrete gate provides a principled mechanism for this joint optimization, with $\lambda_{L_0}$ serving as the researcher's preference parameter over the Pareto frontier. +This tier should also clarify what kind of advantage $L_0$ does and does not offer. If GREG +matches the tractable targets with similar accuracy but produces negative weights, that is a +different kind of limitation from simple inaccuracy. If IPF performs well on count margins but does +not extend to mixed dollar-and-count targets, that is a scope limit rather than a poor +implementation. The benchmark design is meant to keep those distinctions visible. -This feature also broadens the method's practical role. The local preset yields area-specific unit-record files that resemble synthetic spatial microdata, while remaining anchored in observed survey households, model-based enhancements, and calibrated administrative totals. The paper's empirical evaluation remains focused on calibration baselines, but the resulting datasets are relevant to some of the same downstream use cases as synthetic-population workflows. +\subsection{What the scaling frontier establishes} -\subsection{Computational cost} +The scaling frontier shifts the question from local accuracy to method limits. A useful result in +this section is not just that one method is faster than another. It is where each method stops +being a credible tool for the target system under study. For $L_0$, the main trade-off is usually +between fit, sparsity, and runtime. For GREG, the limits are more likely to come from unstable +linear algebra, memory use, or negative weights. For IPF, the limits are more likely to come from +scope and convergence. -The pipeline runs on Modal, a cloud compute platform, using T4 GPUs for the optimization step. Stage 1 (clone creation and imputation) requires approximately 2--3 hours of CPU time. Stage 2 (matrix construction) requires approximately 2--3 hours across parallel workers, dominated by running \policyengine{} simulations for each of the 51 state-level configurations. Stage 3 (optimization) requires approximately 30--60 minutes of GPU time for the national preset (4,000 epochs) and 5--15 minutes for the local preset (1,000 epochs). Stage 4 (H5 assembly) requires approximately 4--5 hours across parallel workers for all 488 (436 CDs, 50 states plus DC, NYC and a national) H5 builds. +This frontier is important rhetorically because it distinguishes two claims that are easy to blur. +One claim is that $L_0$ can solve a hard production problem. The stronger claim is that classical +reference methods become difficult to apply before the production target volume is reached. The +scaling ladder is where that stronger claim lives. -Total wall-clock time for a complete pipeline run is approximately 8--12 hours. This exceeds the cost of a single IPF or GREG calibration, which takes minutes. However, the pipeline amortizes the expensive matrix construction step: once built, the calibration package can be reused with different $\lambda_{L_0}$ presets or target configurations without rebuilding. +\subsection{What the production-feasibility case establishes} -\subsection{Limitations} +The production-feasibility tier connects the statistical benchmark back to deployment. A production +run has to do more than minimize loss on a benchmark subset. It has to produce a microdata file +that can be published, loaded, and simulated. That is where the sparsity mechanism matters most. +Without it, the cloned unit universe remains too large for many downstream uses. -\subsubsection{Temporal gap between PUF and CPS} +This is also the tier where the paper can be most concrete about failure modes. A table that says a +method ran out of memory, returned negative weights, failed to converge, or completed in a given +runtime is more informative than a generic statement that the problem is "large." The production +case therefore should remain a feasibility table first and a performance table second. -The most recent publicly available PUF references tax year 2015 \citep{bryant2023a}. The CPS ASEC is updated annually. Imputing 2015 tax return variables onto 2024 CPS records introduces a temporal mismatch. The QRF imputation conditions on demographic and income variables that are available in both datasets, partially mitigating the gap, but structural changes in the tax code since 2015---such as the Tax Cuts and Jobs Act of 2017---may not be fully captured. +\subsection{Trade-offs and limitations} -\subsubsection{No early stopping} +The benchmark does not remove all modelling judgment. Several choices remain consequential. -The current implementation runs for a fixed number of epochs without an automatic convergence criterion. Convergence is assessed post hoc from diagnostic outputs. An adaptive stopping rule based on validation loss on held-out targets (excluded from training via \texttt{target\_config.yaml}) could reduce computation time and prevent overfitting to the training target set. +\subsubsection{Target-set construction} -\subsubsection{Target selection sensitivity} +The exact target count in a run depends on the benchmark manifest, the active target families, and +the achievable-target mask. Database-wide counts are useful for context, but the paper should base +its empirical claims on the exact exported target set for each run. -The choice of which targets to include in the optimization affects calibration accuracy on excluded targets. The \texttt{target\_config.yaml} mechanism provides flexibility but also introduces a modeling decision: including too many targets may overfit the weights to specific administrative totals, while excluding targets leaves them uncalibrated. The current configuration was developed iteratively through validation against held-out targets, but a more systematic approach to target selection---analogous to feature selection in supervised learning---could improve robustness. +\subsubsection{Clone count and geography scope} -\subsubsection{Take-up uncertainty} +Clone count affects both feasibility and fidelity. More clones enlarge the feasible support for +district-level targets, but they also enlarge the optimization problem and the output dataset. The +same logic applies to geography scope. Extending the current setup to counties or other local areas +is possible in principle, but it would require new target data and a larger benchmark package. -Programme take-up draws are stochastic, introducing noise into the calibration matrix entries for take-up-dependent targets. Different random seeds produce different take-up assignments, which produce different calibrated weights. The pipeline uses deterministic seeds for reproducibility but does not currently quantify the sensitivity of calibration accuracy to the take-up random seed. +\subsubsection{Hyperparameter sensitivity} -\subsubsection{Geographic resolution} +The $L_0$ method is not parameter free. The gate temperature, initialization, and sparsity penalty +all affect the path the optimizer takes. This is why the hyperparameter configuration belongs in an +appendix rather than disappearing into prose. The benchmark should treat those settings as part of +the method specification. -The current pipeline calibrates at three levels: congressional district, state, and national. Finer geographic levels---counties, metropolitan areas, school districts---are feasible in principle but would require additional target data and a larger calibration matrix. The census block assignment already provides the geographic foundation; the constraint is the availability of administrative targets at finer levels. +\subsubsection{Computational cost} + +The pipeline is computationally heavier than a small classical calibration run. Matrix +construction, repeated policy simulation, and gradient-based optimization all cost time. That cost +is acceptable only if the pipeline solves a problem that simpler methods do not solve reliably. The +benchmark is therefore essential to justifying the added infrastructure. + +\subsubsection{Comparability of IPF} + +IPF is the least like-for-like baseline in the paper because its natural target representation is +different. Restricting IPF to count-style margins is the right methodological choice, but it also +means the reader should not interpret every $L_0$ versus IPF result as a full-system comparison. +The paper should say that directly. \subsection{Generalizability} -The method is not specific to the United States or to any particular tax-benefit system. Any setting where (a) a household survey must be calibrated to (b) administrative targets at (c) multiple geographic levels is a candidate for $L_0$-regularized calibration. The UK Family Resources Survey calibrated to HMRC tax data across local authorities, or the EU Statistics on Income and Living Conditions calibrated to Eurostat regional benchmarks, are plausible applications. The \texttt{l0-python} package implements the Hard Concrete optimizer independently of the \policyengine{} framework. +The specific data engineering in this paper is US-specific, but the benchmark question is broader. +Many microsimulation projects need to reconcile survey microdata with administrative targets across +multiple geographic levels. Where those projects also care about keeping the resulting dataset +small enough to use, a sparse calibration method may be more useful than a classical exact-fit +procedure even if the classical procedure remains attractive on smaller subproblems. diff --git a/paper-l0/sections/introduction.tex b/paper-l0/sections/introduction.tex index ef2acca45..255ca30ab 100644 --- a/paper-l0/sections/introduction.tex +++ b/paper-l0/sections/introduction.tex @@ -1,20 +1,52 @@ \section{Introduction} \label{sec:introduction} -Microsimulation models estimate the effects of tax and benefit policies on households by applying program rules to individual-level microdata. Most operational models---including those maintained by the Congressional Budget Office \citep{cbo2018}, the Joint Committee on Taxation \citep{jct2023}, and the Tax Policy Center \citep{tpc2024}---operate at the national level. They calibrate household survey weights to aggregate administrative totals such as total income tax revenue, program enrollment counts, and demographic benchmarks, then use the reweighted dataset to simulate policy reforms. - -Subnational policy analysis introduces a fundamentally different calibration challenge. Rather than matching a single set of national aggregates, the microdata must simultaneously reproduce distributional statistics at multiple geographic levels: congressional districts, states, and the nation as a whole. A dataset calibrated for the state of California must match California-specific IRS income totals, SNAP participation counts, Medicaid enrollment, and age distributions, while remaining consistent with national budget projections from the CBO and tax expenditure estimates from the JCT. Across 436 congressional districts and 50 states, this produces approximately 37,800 simultaneous calibration targets. - -Existing calibration methods scale poorly to this setting. Iterative proportional fitting \citep[IPF;][]{deming1940, ireland1968} adjusts weights along one dimension at a time, cycling through marginal constraints until convergence. IPF handles cross-classified tables but does not naturally accommodate hierarchical geographic constraints---district targets must sum to state targets, which must sum to national targets---without ad hoc post-processing. Generalized regression (GREG) estimators \citep{deville1992, sarndal2007} solve a constrained optimization problem that minimizes distance from initial weights subject to exact calibration constraints. GREG produces a closed-form solution for moderate numbers of constraints but becomes computationally intractable and numerically unstable as the constraint count approaches the tens of thousands. - -Spatial microsimulation methods take a different approach, often distinguishing between reweighting methods and synthetic reconstruction methods for constructing small-area microdata \citep{tanton2014review}. Within this broader literature, researchers have used combinatorial optimization and simulated annealing \citep{williamson1998, huang2001, harland2012} as well as deterministic reweighting \citep{tanton2011, lovelace2016}. These methods typically operate at a single geographic level and require separate calibration runs for each area, making joint multi-level calibration difficult. - -This paper presents a method that addresses these limitations by jointly optimizing weight magnitudes and sparsity in a single gradient-based framework. We adapt the Hard Concrete distribution \citep{louizos2018}, originally developed for neural network pruning, to the survey calibration setting. Each household-geography combination receives a continuous weight and a stochastic binary gate. The gate is parameterized by a learnable logit and trained via gradient descent to minimize a loss function that combines relative calibration error across all 37,800 targets with an $L_0$ penalty on the expected number of active records. At inference time, the stochastic gates collapse to deterministic zeros and ones, producing a sparse dataset in which most household-geography combinations are dropped while the retained records carry calibrated positive weights. - -The approach builds on \citet{woodruff2024}, who developed a two-stage methodology for constructing enhanced national microsimulation datasets from the Current Population Survey (CPS) and the IRS Public Use File (PUF). Their method uses quantile regression forests (QRF) to impute 72 tax variables from the PUF onto CPS records, then applies dropout-regularized gradient descent to reweight the combined dataset against approximately 7,000 national targets. The present paper extends this framework from a single national dataset to subnational coverage by introducing three new components: (a) a clone-and-assign procedure that replicates each CPS household across multiple geographic locations, (b) $L_0$ Hard Concrete gates that replace dropout regularization and enable exact sparsity, and (c) a hierarchical uprating scheme that reconciles targets from different administrative sources at district, state, and national levels. Because the method still solves a calibration-weighting problem over survey-based microdata, GREG and IPF are the closest classical empirical comparators; at the same time, the clone-and-assign pipeline produces derived spatial microdata files that are also relevant to synthetic-population use cases. - -The configurable sparsity penalty produces datasets of different sizes for different use cases. A high penalty ($\lambda_{L_0} = 10^{-4}$) retains approximately 50,000 records, suitable for national-level web-based simulation where download size and computation time matter. A low penalty ($\lambda_{L_0} = 10^{-8}$) retains approximately 3--4 million records, preserving geographic resolution for all 436 congressional districts. - -The method is implemented in open-source Python packages and deployed as part of \policyengine{}'s US microsimulation model (\url{https://policyengine.org/us/model}), which uses these calibrated datasets for both national and subnational policy analysis. - -The remainder of this paper is organized as follows. Section~\ref{sec:background} reviews survey calibration methods, spatial microsimulation, and the Hard Concrete distribution. Section~\ref{sec:data} describes the input microdata and calibration target sources. Section~\ref{sec:methodology} details the four-stage pipeline: clone creation, calibration matrix construction, $L_0$ optimization, and dataset assembly. Section~\ref{sec:results} presents calibration accuracy, sparsity analysis, and comparisons with IPF and GREG. Section~\ref{sec:discussion} discusses trade-offs, limitations, and generalizability. Section~\ref{sec:conclusion} concludes. +Tax-benefit microsimulation models apply policy rules to household microdata to estimate fiscal +and distributional effects. At the national level, that usually means starting from a survey such +as the Current Population Survey (CPS), improving measured incomes and program participation, and +adjusting weights so that the resulting dataset reproduces known aggregates. Subnational work is +harder. Analysts often want estimates for states, congressional districts, or local areas, but the +underlying survey was not designed to support all of those geographies at once. + +That gap matters in practice. Many reforms are proposed, administered, or debated below the +national level. A state tax proposal needs state-specific incomes, filing patterns, and benefit +participation. District-level analysis needs those same outcomes to aggregate correctly within each +district while remaining consistent with state and national totals. A usable subnational dataset +therefore has to satisfy a hierarchical calibration problem rather than a single national one. + +Public survey microdata alone do not solve that problem. The CPS provides demographic structure and +program coverage, but some tax variables are missing or noisy, top incomes are imperfectly +measured, and geographic detail is limited. Administrative targets help, but they arrive from +different agencies, with different concepts, and at different geographic levels. In our setting, +the calibration problem mixes count and dollar targets across district-level units, the 50 states +plus the District of Columbia, and the nation. + +The methodological goal is straightforward to state, even if the implementation is not. We want a +calibration method that can absorb a large hierarchical target system, keep weights usable for +microsimulation, and let us control how large the final dataset becomes. Exact fit is attractive, +but a production dataset also needs to remain computationally practical. A file with millions of +active cloned records is useful for detailed subnational work and still expensive to simulate. A +much smaller file is easier to ship and run, but only if the loss in fidelity is acceptable. + +This paper studies an $L_0$-regularized calibration system built in PolicyEngine's US data +pipeline. The system clones CPS households across sampled geographies, builds a sparse calibration +matrix from tax-benefit simulations, and jointly optimizes positive weights and binary-like gates. +The gates give the optimizer a direct sparsity mechanism. In practical terms, that means the same +framework can target a compact national dataset or a larger subnational dataset without switching +to a different calibration procedure. + +The paper's contribution is empirical as well as methodological. We do not treat generalized +regression (GREG) and iterative proportional fitting (IPF, or raking) as universal substitutes for +the full production problem. Instead, we use them as classical reference methods within scopes that +match their assumptions. The benchmark design uses shared exported calibration packages and asks +three questions. First, on a tractable benchmark, does $L_0$ perform competitively with classical +methods when all methods can plausibly run? Second, how do the methods degrade as the number of +targets increases? Third, which methods remain usable near the full production calibration problem? + +The rest of the paper follows that structure. Section~\ref{sec:background} places the work in the +literature on spatial microsimulation, survey calibration, and sparse optimization. +Section~\ref{sec:data} describes the base microdata and administrative targets. Section +~\ref{sec:methodology} presents the calibration pipeline and the benchmark design. Section +~\ref{sec:results} reports the tractable benchmark, the scaling frontier, and the +production-feasibility case. Section~\ref{sec:discussion} interprets those results and discusses +their limits. diff --git a/paper-l0/sections/methodology.tex b/paper-l0/sections/methodology.tex index 82d9920f3..392297f5f 100644 --- a/paper-l0/sections/methodology.tex +++ b/paper-l0/sections/methodology.tex @@ -1,158 +1,194 @@ \section{Methodology} \label{sec:methodology} -The calibration pipeline transforms raw CPS microdata into a calibrated subnational dataset through four stages: (1) clone creation and geographic assignment, (2) calibration matrix construction, (3) $L_0$-regularized weight optimization, and (4) dataset assembly. Figure~\ref{fig:pipeline} provides an overview. +This section first, it describes the calibration system that produces the weighted +microdata. Second, it defines the benchmark design used to evaluate that system against classical +reference methods. + +\subsection{Pipeline overview} + +The pipeline transforms enhanced CPS microdata into a calibrated subnational dataset in four broad +steps: cloned geography assignment, calibration-matrix construction, $L_0$-regularized +optimization, and dataset assembly. Figure~\ref{fig:pipeline} summarizes that flow. \begin{figure}[ht] \centering \fbox{\parbox{0.9\textwidth}{\centering\textit{[Pipeline overview diagram to be inserted]}}} - \caption{Four-stage calibration pipeline. Stage 1 clones CPS records and assigns geography. Stage 2 builds the sparse calibration matrix by simulating each clone through the tax-benefit engine. Stage 3 runs the $L_0$ optimizer to find calibrated weights with configurable sparsity. Stage 4 expands the flat weight vector into per-area H5 dataset files.} + \caption{Pipeline overview. The benchmarked system clones CPS households across sampled + geographies, builds a sparse calibration matrix from tax-benefit simulations, optimizes weights + with $L_0$ gates, and then assembles the retained records into deployable datasets.} \label{fig:pipeline} \end{figure} -\subsection{Stage 1: clone creation and geographic assignment} -\label{sec:stage1} - -The base CPS contains approximately 100,000 household records, each with a single state of residence. A stratified subsampling step reduces this to approximately 12,000 households, preserving the top 0.5\% of the AGI distribution in full while uniformly sampling from the remainder. This reduction makes downstream microsimulation computationally feasible while retaining distributional diversity. - -To cover 436 congressional districts and 50 states, we replicate each of the approximately 12,000 households $N$ times ($N = 430$ in the default configuration) and assign each clone a random census block from a population-weighted distribution. Although the clone count is slightly below the number of congressional districts, every record is replicated 430 times across different geographic areas, providing the optimizer with sufficient degrees of freedom to place each household type wherever targets require it. - -\subsubsection{Block sampling} - -Census blocks are the finest geographic unit in the decennial census. Each block maps deterministically to a congressional district, county, tract, and state. The sampling distribution $P_{\text{pop}}(\text{block})$ is proportional to the block's share of the national population. Drawing blocks rather than congressional districts ensures fine-grained geographic variation within districts and enables derivation of county-level variables (Section~\ref{sec:stage4}). - -\subsubsection{AGI-conditional routing} - -High-income households are routed toward high-AGI congressional districts using a modified sampling distribution. Let $A_d$ denote the aggregate adjusted gross income target for district $d$ from IRS SOI data, and let $P_{\text{pop}}(b)$ denote the population-weighted block probability for block $b$ in district $d$. For households with AGI above the 90th percentile, the sampling distribution is: +The benchmark experiments do not rebuild separate pipelines for each method. Instead, they export a +shared calibration package from the existing pipeline. That package contains the cloned unit +universe, the selected target vector, target metadata, the achievable-target mask, and the initial +weights. $L_0$ and GREG consume that representation directly. IPF uses the same target selection +after conversion to an IPF-compatible margin representation. + +\subsection{Cloned geography assignment} +\label{sec:cloning} + +The base CPS contains roughly 100{,}000 household records. A stratified subsample reduces that to a +smaller working dataset while preserving the upper tail of the AGI distribution. This keeps the +downstream simulations tractable without collapsing the range of household types the optimizer can +use. + +Each retained household is then cloned $N$ times, with $N = 430$ in the current production setup. +Each clone is assigned to a census block, and the block determines the associated district-level +unit, county, tract, and state. The baseline assignment distribution is population weighted. For +households above the 90th percentile of AGI, the pipeline tilts that distribution toward +high-income districts so that the initial clone universe contains more plausible placements for +high-income records: \begin{equation} - P_{\text{AGI}}(b) \propto P_{\text{pop}}(b) \cdot A_{d(b)} + \Pr(B_h = b) = + \frac{P_{\text{pop}}(b) R_h(d(b))} + {\sum_{b'} P_{\text{pop}}(b') R_h(d(b'))}, \end{equation} -where $d(b)$ is the congressional district containing block $b$. This makes blocks in high-AGI districts more likely targets for high-income households, improving the initial geographic allocation before optimization. Without AGI-conditional routing, the optimizer would need to zero out high-income records that landed in low-AGI districts by chance, wasting capacity for population and demographic targets in those districts. - -\subsubsection{No-collision constraint} - -The same CPS household must not appear in the same congressional district in two different clones. If household $h$ in clone $c_1$ lands in district $d$, then household $h$ in clone $c_2$ must land in a different district. This prevents a high-weight household from dominating a small district's targets. The constraint is enforced by resampling: clone 0 draws blocks freely; each subsequent clone checks for collisions against all previous clones and resamples colliding records for up to 50 retries. Residual collisions after 50 retries are accepted; these are rare with 430 clones and the large block distribution. - -After cloning, the total number of household-geography combinations is $N_{\text{clones}} \times n_{\text{records}}$. With 430 clones and approximately 12,000 base households (after stratified subsampling), this produces approximately 5.2 million column positions in the calibration matrix. - -\subsection{Stage 2: calibration matrix construction} -\label{sec:stage2} - -The calibration matrix $\mathbf{M} \in \R^{m \times n}$ maps $n$ household-geography combinations (columns) to $m$ calibration targets (rows). Entry $M_{ji}$ is the contribution of record $i$ to target $j$---for dollar targets, this is the household's simulated value of the target variable; for count targets, it is 1 if the household satisfies the target's domain constraint and 0 otherwise. - -\subsubsection{Per-state parallel simulation} - -The matrix is populated by running each household through \policyengine{}'s tax-benefit microsimulation engine. Because many target variables depend on state-specific tax and benefit rules, a separate simulation is required for each state. A parallel dispatcher sends one job per unique state FIPS code to a pool of worker processes. Each worker creates a fresh \texttt{Microsimulation} instance, overwrites every household's \texttt{state\_fips} with the target state, invalidates cached downstream variables, and calculates all target variables at the household and person levels, accounting for differences in state legislation. - -For county-dependent variables---currently limited to ACA premium tax credits, where eligibility depends on county-level benchmark plan premiums---an additional simulation loop iterates over counties within each state, setting the county FIPS for each iteration. - -\subsubsection{Take-up re-randomization} -\label{sec:takeup} - -Several benefit programs require a stochastic take-up decision: whether an eligible household actually participates. To construct the matrix correctly under take-up uncertainty, the pipeline runs three simulations per state: (a) a baseline simulation with original take-up values; (b) an all-take-up-true simulation that computes each entity's benefit value assuming full participation; and (c) a would-file-false simulation for tax unit variables. - -The take-up rate for each program is resolved at the state level from the clone's assigned census block. Programs with take-up re-randomization include SNAP, ACA premium tax credits, Medicaid, SSI, TANF, Head Start, and Early Head Start. The pipeline draws take-up booleans per (variable, household, clone) triple using a deterministic seeded random number generator. The seed is derived from the variable name, original household ID, and clone index, ensuring that draws are reproducible and independent across clones. Different clones of the same household may have different take-up draws, reflecting the fact that the same household placed in a different geographic area would face a different local take-up rate. - -\subsubsection{Clone loop and COO assembly} - -After all per-state simulations and take-up preparation complete, a clone loop iterates over each of the $N$ clones. For each clone $c$: - -\begin{enumerate} - \item Read the geographic slice: which state and district each record maps to in clone $c$. - \item Draw per-clone take-up booleans for each benefit program using the clone's geographic assignment and the deterministic seed. - \item Assemble per-record values by looking up the appropriate state simulation results for each record's assigned state. For take-up-dependent variables, entity-level values from the all-take-up-true simulation are multiplied by the per-clone take-up draw to produce the matrix entry for that clone. - \item Evaluate domain constraints---predicates that determine whether a record contributes to a particular target (e.g., ``SNAP $> 0$'' for SNAP dollar targets, ``age $\geq 18$'' for adult population counts). - \item Emit nonzero entries as coordinate (COO) triples $(\text{row}, \text{col}, \text{value})$, where $\text{col} = c \times n_{\text{records}} + i$ for record $i$ in clone $c$. -\end{enumerate} - -The COO entries from all clones are concatenated and converted to a compressed sparse row (CSR) matrix. Typical density is below 1\%, as most records contribute to targets only in their assigned geographic area. This ordering ensures that the matrix accurately represents what the calibrated weights will reproduce when applied to the final dataset. - -\subsubsection{Target configuration} - -After the full unfiltered matrix is built, a configuration file (\texttt{target\_config.yaml}) selects the subset of targets used for optimization. Each rule specifies a variable name, geographic level, and optionally a domain variable. This separation allows the same expensive matrix to be reused with different target configurations without rebuilding. - -Targets with zero row sums---meaning no record can contribute---are marked as unachievable and excluded from the loss function. - -\subsection{Stage 3: $L_0$-regularized weight optimization} -\label{sec:stage3} - -\subsubsection{Loss function} - -Given the sparse calibration matrix $\mathbf{M}$, a vector of target values $\mathbf{t} \in \R^m$, and a weight vector $\bw \in \R^n$, the optimizer minimizes: +where $P_{\text{pop}}(b)$ is the population-based block probability, $d(b)$ is the district-level +unit containing block $b$, and $R_h(d) = A_d$ for high-AGI households and $R_h(d) = 1$ otherwise. +Here $A_d$ is the district-level AGI target. + +The assignment step also enforces a no-collision rule: the same source household should not appear +twice in the same district-level unit across clones unless repeated resampling fails to find an +alternative. With 430 clones and the current working dataset, the cloned universe contains roughly +5.2 million household-geography candidates. + +\subsection{Calibration-matrix construction} +\label{sec:matrix} + +The calibration matrix $\mathbf{M} \in \mathbb{R}^{m \times n}$ maps $n$ cloned household +candidates to $m$ calibration targets. Entry $M_{ji}$ is the contribution of cloned unit $i$ to +target $j$. For count targets, that is an indicator or count contribution. For dollar targets, it +is the simulated value of the relevant tax or benefit variable. + +The matrix is built from \policyengine{} simulations. Because many target variables depend on +state-specific policy rules, the pipeline evaluates the cloned households under separate state +configurations and reattaches the results according to each clone's assigned geography. For +county-specific rules, such as ACA premium tax credits in the current setup, the pipeline can run +additional county-level loops. This design keeps the geographic information in the calibration +representation rather than in a post-processing step. + +Several targets depend on programme take-up. To make the matrix consistent with the final dataset, +the pipeline re-randomizes take-up at the clone level using deterministic seeds derived from the +source household, the clone index, and the variable name. This lets two clones of the same source +household take up a programme at different rates when they are assigned to different places. + +The matrix is emitted in sparse coordinate form and stored as a compressed sparse row matrix. After +construction, a target-configuration file selects the rows used for a given optimization or +benchmark run. Rows with zero feasible support are marked unachievable and excluded from the loss. + +\subsection{\texorpdfstring{$L_0$}{L0} optimization} +\label{sec:l0} + +Given the sparse matrix $\mathbf{M}$, target vector $\mathbf{t}$, and weight vector +$\mathbf{w} \in \mathbb{R}^n$, the optimizer minimizes \begin{equation} - \mathcal{L}(\bw, \balpha) = \frac{1}{m}\sum_{j=1}^{m}\left(\frac{\hat{t}_j - t_j}{|t_j|}\right)^2 + \lambda_{L_0}\sum_{i=1}^{n}\bar{z}_i + \lambda_{L_2}\|\bw\|_2^2 + \mathcal{L}(\mathbf{w}, \boldsymbol{\alpha}) = + \frac{1}{m} \sum_{j=1}^{m} + \left(\frac{\hat{t}_j - t_j}{|t_j|}\right)^2 + + \lambda_{L_0} \sum_{i=1}^{n} \bar{z}_i + + \lambda_{L_2} \|\mathbf{w}\|_2^2, \label{eq:loss} \end{equation} -where the weighted estimate for target $j$ is: +where \begin{equation} - \hat{t}_j = \sum_{i=1}^{n} M_{ji} \cdot w_i \cdot z_i + \hat{t}_j = \sum_{i=1}^{n} M_{ji} w_i z_i. \label{eq:estimate} \end{equation} -$z_i \in [0, 1]$ is the Hard Concrete gate for record $i$ (Equations~1--4 in Section~\ref{sec:background}), $\bar{z}_i = \sigma(\log \alpha_i - \beta \log(-\gamma/\zeta))$ is the expected gate activation used as the $L_0$ penalty, $\lambda_{L_0}$ controls the sparsity-accuracy trade-off, and $\lambda_{L_2}$ provides mild weight regularization. - -The calibration loss uses \textit{relative} errors: a 1\% miss on a \$1 billion SNAP target receives the same gradient signal as a 1\% miss on a \$9 trillion employment income target. This scale-invariant formulation prevents large-magnitude targets from dominating the loss. - -\subsubsection{Hyperparameters} - -Table~\ref{tab:hyperparameters} lists the optimization hyperparameters with their values and roles. The stretch parameters $\gamma = -0.1$ and $\zeta = 1.1$ follow the original Hard Concrete paper, placing approximately 9\% of the sigmoid's mass below 0 and above 1, which is what allows clipping to produce exact zeros and ones. - -\input{tables/hyperparameters} - -\subsubsection{Initialization} - -Weights are initialized from age-bin population targets rather than uniformly. For each congressional district, the sum of age-bin target values gives the district's total population. The initial weight for each record assigned to that district is set to the district population divided by the number of active records in the district. This gives the optimizer a demographically grounded starting point: records in high-population districts begin with higher weights. Small Gaussian jitter in log-weight space ($\sigma = 0.05$) and log-alpha space ($\sigma = 0.01$) breaks symmetry between duplicate CPS records. - -Gate logits are initialized so that $P(z_i > 0) \approx 0.999$---nearly every record starts active. The optimizer begins from a dense, approximately calibrated state and prunes as the $L_0$ penalty accumulates over training epochs. - -\subsubsection{Presets} - -Two presets control the sparsity-accuracy trade-off via $\lambda_{L_0}$: - -\input{tables/presets} - -The only difference between presets is $\lambda_{L_0}$. All other hyperparameters are shared. A higher $\lambda_{L_0}$ increases the gradient signal pushing gate logits below zero, pruning more records. - -\subsubsection{Optimization loop} - -The optimizer uses the Adam algorithm \citep{kingma2015} with learning rate 0.15. At each epoch: - -\begin{enumerate} - \item Sample Hard Concrete gates $z_i$ (stochastic during training). - \item Compute effective weights: $w_i^{\text{eff}} = \exp(\log w_i) \cdot z_i$. - \item Compute predictions: $\hat{t}_j = \sum_i M_{ji} \cdot w_i^{\text{eff}}$. - \item Evaluate the loss (Equation~\ref{eq:loss}). - \item Backpropagate and update $\{\log w_i, \log \alpha_i\}$ via Adam. -\end{enumerate} - -At inference, stochastic gates are replaced by their deterministic counterparts. Records where $z_i^{\text{det}} = 0$ are excluded from the output dataset. - -The current implementation runs for a fixed number of epochs (100 for regional fits, 4,000 for national fits) without early stopping. Convergence is assessed post hoc from diagnostic outputs. - -\subsection{Stage 4: weight expansion and dataset assembly} -\label{sec:stage4} - -The optimizer returns a flat weight vector of length $N_{\text{clones}} \times n_{\text{records}}$. Stage 4 expands this into complete H5 dataset files suitable for microsimulation. - -\subsubsection{Weight reshaping and geographic filtering} - -The flat vector is reshaped to a matrix $\mathbf{W} \in \R^{N_{\text{clones}} \times n_{\text{records}}}$. Most entries are zero. For per-area datasets (e.g., a state dataset for California), clones whose congressional district falls outside the target area are zeroed out. For city datasets (e.g., New York City), clones whose county FIPS is not in the city's set of counties are zeroed out. The nonzero entries---typically 3--4 million for the local preset or approximately 50,000 for the national preset---identify the active (clone, household) pairs. - -\subsubsection{Entity membership preservation} - -Each CPS household contains persons who belong to sub-entities: tax units, SPM units, families, and marital units. The assembly step looks up the membership mapping for each active household and concatenates the corresponding person and sub-entity indices across all active clones. Entity IDs are reassigned to globally unique values using a compound key $(\text{clone\_id} \times \text{offset} + \text{old\_id})$ with binary search remapping, achieving $O(n \log n)$ performance. - -\subsubsection{Geographic variable derivation} - -Each active clone carries a census block GEOID from the geography assignment. The assembly step derives state FIPS, county, tract, CBSA, SLDU, SLDL, place, VTD, PUMA, and ZCTA from the block GEOID. Because many clones share the same block (especially in dense urban areas), block GEOIDs are deduplicated before derivation and results are broadcast back via an inverse index. - -\subsubsection{SPM threshold recalculation} - -The Supplemental Poverty Measure threshold depends on local housing costs via a geographic adjustment factor. Because each clone's geography differs from the base dataset, SPM thresholds are recomputed using: -\begin{equation} - \text{threshold}_k = \text{base\_threshold}(\text{tenure}_k) \times \text{equiv}(n_{\text{adults}}, n_{\text{children}}) \times \text{geoadj}(\text{CD}_k) -\end{equation} -where the geographic adjustment factor for each congressional district is derived from median two-bedroom rent ratios from the Census Bureau. - -\subsubsection{Take-up consistency} -The H5 assembly must produce identical take-up draws as the matrix builder for every (variable, household, clone) triple. Both stages call the same function (\texttt{compute\_block\_takeup\_for\_entities}) with the same seed derived from (variable name, original household ID, clone index). Any divergence would mean the matrix targeted a different subpopulation than what appears in the final dataset. +The weights are parameterized in log space so that the fitted weights remain positive. The gate +$z_i$ is a Hard Concrete random variable with expected activation $\bar{z}_i$, following +\citet{louizos2018}. The first term in Equation~\ref{eq:loss} is a relative calibration loss, so a +1\% error on a small target and a 1\% error on a large target receive comparable weight. The +second term is the $L_0$ penalty. It penalizes the expected number of active cloned units and +therefore regulates sparsity directly. The third term is an $L_2$ penalty on the weight vector, +that is, a penalty on the squared Euclidean norm $\|\mathbf{w}\|_2^2$. This term shrinks the +magnitudes of the fitted weights and discourages solutions that satisfy the targets by assigning +very large weights to a small number of retained units. + +An $L_0$ penalty on its own can produce a sparse solution, but sparsity +alone does not guarantee a usable microsimulation dataset. The optimizer could still concentrate too +much population mass on a small subset of cloned households, yielding unstable or implausible +weights even if the support is small. The $L_2$ term addresses a different problem: it discourages +large weight magnitudes conditional on the chosen support. In that sense, the two penalties play +complementary roles. $\lambda_{L_0}$ controls how many units remain active, while $\lambda_{L_2}$ +controls how concentrated the fitted weights can become among those active units. + +The separate tuning parameters are therefore a practical advantage of the objective. Increasing +$\lambda_{L_0}$ pushes the solution toward a smaller retained dataset. Increasing $\lambda_{L_2}$ +pushes the solution toward more moderate fitted weights, even if the support size is unchanged. The +two knobs let the pipeline trade off calibration fit, sparsity, and weight stability more flexibly +than a single regularization term would allow. The full hyperparameter configuration, including the +gate parameters and initialization choices, appears in Appendix~\ref{app:hyperparameters}. +Algorithm~\ref{alg:l0} gives pseudocode for the full optimization loop. + +After optimization, the retained cloned units are assembled into deployable H5 datasets for +\policyengine{}. Those assembly details matter operationally but are not the main object of the +benchmark paper, so Appendix~\ref{app:assembly} summarizes them. + +\subsection{Benchmark design} +\label{sec:benchmark_design} + +The empirical design is organized around one shared benchmark package and three benchmark tiers. +The package is exported from the saved calibration pipeline rather than rebuilt separately for each +method. This keeps the comparison focused on calibration method, not on differences in upstream +data preparation. + +\subsubsection{Shared benchmark package} + +Each benchmark package contains: + +\begin{itemize} + \item the cloned unit universe + \item the selected target vector and target metadata + \item the achievable-target mask + \item the shared initial weights + \item the sparse calibration matrix for scoring fitted weights +\end{itemize} + +GREG uses the exported sparse matrix and target vector directly. IPF requires a conversion step +because it works on unit-record tables and margin constraints rather than on a generic sparse linear +system. The exporter therefore converts selected count-style targets into an IPF-ready +representation while preserving the same cloned unit universe and the same target selection. + +\subsubsection{Experimental tiers} + +Tier 1 is a tractable benchmark. It asks whether $L_0$ performs competitively when the problem is +small enough for classical methods to run routinely. The mixed-target tractable benchmark compares +$L_0$ with GREG. A separate count-style tractable benchmark compares $L_0$ with IPF on a target set +that fits IPF's assumptions. + +Tier 2 is a scaling frontier. Starting from a controlled benchmark package, we increase the number +of targets while holding the basic unit universe fixed. This identifies where each method slows +down, destabilizes, or becomes methodologically inappropriate. + +Tier 3 is a production-feasibility case. It moves as close as possible to the full production +calibration problem, with the current clone count and the current production-style target families. +The goal is to study which methods complete, +which fail, and document why. + +\subsubsection{Method scope} + +The comparison is intentionally asymmetric where the methods are asymmetric. $L_0$ and GREG can +both consume arbitrary linear targets, including mixed count and dollar constraints. IPF is +evaluated only on count-style or indicator-style margins. This is a methodological choice rather +than a concession. It avoids misrepresenting IPF as a general solver for the full sparse matrix +problem. + +\subsection{Evaluation metrics} +\label{sec:metrics} + +Each benchmark run reports: + +\begin{itemize} + \item mean, median, and maximum absolute relative error across achievable targets + \item runtime + \item peak memory where available + \item convergence or failure status + \item any method-specific pathologies, such as negative fitted weights for GREG + \item retained-record counts and effective sample size for $L_0$ outputs +\end{itemize} + +These metrics support the paper's three main empirical questions: comparative performance on +tractable problems, degradation as scale increases, and feasibility near production size. diff --git a/paper-l0/sections/results.tex b/paper-l0/sections/results.tex index c56f7606b..e5709262b 100644 --- a/paper-l0/sections/results.tex +++ b/paper-l0/sections/results.tex @@ -1,61 +1,90 @@ \section{Results} \label{sec:results} -This section presents calibration accuracy, sparsity analysis, convergence behavior, and comparisons with alternative methods. All empirical values are marked as placeholders pending completed pipeline runs. +The results are organized around the three benchmark tiers defined in +Section~\ref{sec:benchmark_design}. The point of that structure is to separate three questions +that the earlier draft treated together: how $L_0$ behaves on a tractable comparison, how the +methods degrade as the target system grows, and which methods remain usable near the production +problem. Numerical entries are still marked as placeholders pending completed benchmark runs. -\subsection{Calibration accuracy by geographic level} +\subsection{Tier 1: tractable benchmark comparisons} -Table~\ref{tab:calibration_accuracy} reports mean, median, and maximum absolute relative error across achievable targets, disaggregated by geographic level. +Table~\ref{tab:comparison} reports the tractable benchmark. The mixed-target setting compares $L_0$ +with GREG on the same exported calibration package. The count-style setting compares $L_0$ with IPF +on an IPF-eligible subset derived from that same package. -\input{tables/calibration_accuracy} - -The mean absolute relative error across all \tbc[total count] achievable targets is \tbc[mean error]\%. At the national level, where the optimizer has the most flexibility (every record contributes), error is lowest at \tbc[national mean]\%. State-level error averages \tbc[state mean]\%, and congressional district error averages \tbc[district mean]\%. - -\subsubsection{Error by target source} +\input{tables/comparison} -Error varies systematically across target sources. IRS SOI income targets, which have large magnitudes and strong signal in the calibration matrix, achieve mean error of \tbc[IRS mean]\%. ACS age-band targets, which are count-based and distributed across 18 narrow bins per district, achieve mean error of \tbc[ACS mean]\%. SNAP household count targets, which depend on the take-up re-randomization mechanism, achieve mean error of \tbc[SNAP mean]\%. +The tractable benchmark is the most direct test of whether $L_0$ performs well only because it was +designed for the full production setting. In the mixed-target benchmark, the key comparisons are +accuracy, runtime, and whether GREG produces negative weights. In the count-style benchmark, the +key question is whether $L_0$ remains competitive with IPF even when the target system is limited +to the class of margins that IPF handles naturally. -\subsubsection{Unachievable targets} +\subsection{Tier 2: scaling frontier} -Of the approximately 37,800 targets, \tbc[count] are marked unachievable (row sum zero in the calibration matrix). These correspond to congressional districts where no clones carry nonzero values for the target variable. Increasing the clone count from 430 reduces the number of unachievable targets, at the cost of a larger calibration matrix. +Table~\ref{tab:scaling_frontier} summarizes the scaling ladder. Each rung uses the same basic +cloned unit universe while increasing the number of benchmark targets. This isolates how method +performance changes with constraint volume rather than with a changing data-preparation pipeline. -\subsection{Sparsity analysis} +\input{tables/scaling_frontier} -The $L_0$ penalty produces exact zeros in the weight vector. Table~\ref{tab:presets} reports the number of retained records under each preset. +The scaling frontier is expected to show more than runtime growth. It should also identify where a +method becomes numerically unstable, fails to converge, or stops being interpretable as a credible +comparison. For GREG, the relevant failure modes include memory pressure, unstable linear algebra, +and negative weights. For IPF, the relevant limits include inapplicability outside count-style +margins and non-convergence when the margin system becomes too hard to reconcile. -Under the national preset ($\lambda_{L_0} = 10^{-4}$), the optimizer retains approximately \tbc[national count] records from the initial \tbc[total] million, a reduction of \tbc[national pct]\%. Under the local preset ($\lambda_{L_0} = 10^{-8}$), approximately \tbc[local count] million records are retained (\tbc[local pct]\% reduction). The national preset provides a compact dataset suitable for in-browser simulation; the local preset preserves geographic resolution across all 436 congressional districts. +\subsection{Tier 3: production feasibility} -\subsubsection{Weight distribution} +Table~\ref{tab:production_feasibility} reports the production-feasibility case. This table is +designed to be concrete. It should state which method completed, which method failed, how long the +run took, and what the failure looked like when a method did not finish. -Under the national preset, the weight distribution spans from \tbc[min weight] to \tbc[max weight], with a median of \tbc[median weight]. The effective sample size (ESS), computed as $(\sum w_i)^2 / \sum w_i^2$, is \tbc[ESS] under the national preset, representing \tbc[ESS pct]\% of the nominal sample size. +\input{tables/production_feasibility} -\subsection{Convergence behavior} +This tier matters because a tractable benchmark alone does not establish practical usefulness. A +method can look reasonable at a few hundred targets and still fail to support a deployable +subnational dataset. The production-feasibility case links the benchmark back to the actual +\texttt{policyengine-us-data} use case. -Figure~\ref{fig:convergence} plots the mean absolute relative error across all achievable targets as a function of training epoch for both presets. +\subsection{Supporting diagnostics} -\begin{figure}[ht] - \centering - \fbox{\parbox{0.9\textwidth}{\centering\textit{[Convergence curves to be generated from calibration\_log.csv]}}} - \caption{Mean absolute relative error over training epochs for the national preset (4,000 epochs, $\lambda_{L_0} = 10^{-4}$) and the local preset (100 epochs, $\lambda_{L_0} = 10^{-8}$).} - \label{fig:convergence} -\end{figure} +The tiered benchmark tables provide the main narrative. The following diagnostics support that +narrative by showing how the fitted $L_0$ solution behaves within a completed run. -Under the national preset, the mean error decreases from \tbc[initial]\% at epoch 0 to \tbc[final]\% at epoch 4,000. The error curve flattens by approximately epoch \tbc[plateau epoch], suggesting that the remaining error reflects structural limitations of the calibration matrix rather than insufficient training. Under the local preset, the mean error decreases from \tbc[local initial]\% to \tbc[local final]\% over 100 epochs. +\subsubsection{Accuracy by geography} -\subsubsection{Residual error analysis} +Table~\ref{tab:calibration_accuracy} reports absolute relative error by geographic level for the +selected benchmark or production configuration. -Targets with persistent high error after convergence fall into two categories. First, targets in sparsely populated congressional districts where few clones have nonzero matrix entries---the optimizer has insufficient degrees of freedom. Second, targets where the domain constraint is restrictive (e.g., EITC by number of qualifying children in a specific district), limiting the pool of contributing records. - -\subsection{Comparison with alternative methods} +\input{tables/calibration_accuracy} -Table~\ref{tab:comparison} compares the $L_0$ method with iterative proportional fitting (IPF) and generalized regression (GREG) estimators applied to the same calibration matrix and targets. +The benchmark manifests determine the exact number of targets in each row. Those counts should come +from the exported package rather than from the full target database used by the pipeline, which can +include multiple years or inactive target families that are not part of a given experiment. -\input{tables/comparison} +\subsubsection{Sparsity and convergence} -\tbc[Comparison results to be populated after running IPF and GREG baselines on the same target set. Expected advantages of L0: joint multi-level calibration in a single pass, configurable sparsity, scalability to 37,800 targets. Expected disadvantages: longer computation time (GPU-based gradient descent vs closed-form or iterative solutions), sensitivity to hyperparameter selection.] +The sparsity penalty produces exact zeros in the retained weight vector, so dataset size is an +explicit output of the optimization rather than a post-processing step. For the settings reported +here, the main summary objects are the retained-record count, the effective sample size, and the +distribution of fitted weights. -\subsection{Application: subnational policy impact} +Figure~\ref{fig:convergence} plots mean absolute relative error over training epochs for the +selected $L_0$ runs. -To demonstrate the practical utility of the calibrated subnational datasets, we analyze the distributional impact of a policy reform at the state and congressional district level using \policyengine{}'s microsimulation engine. +\begin{figure}[ht] + \centering + \fbox{\parbox{0.9\textwidth}{\centering\textit{[Convergence curves to be generated from + calibration logs]}}} + \caption{Convergence diagnostics for representative $L_0$ runs. The final figure will report + the calibration loss over epochs for the tractable benchmark and the production-feasibility + run.} + \label{fig:convergence} +\end{figure} -\tbc[Policy application to be selected and simulated. Candidate: analysing EITC expansion impacts across congressional districts, showing how district-level datasets enable geographic disaggregation of winners and losers that national datasets cannot provide.] +These diagnostics are secondary to the benchmark tiers, but they are still important. They show +whether a feasible production run is achieving that feasibility by keeping errors low, by keeping +weights stable, and by pruning the cloned universe in a controlled way rather than through ad hoc +thresholding. diff --git a/paper-l0/tables/calibration_accuracy.tex b/paper-l0/tables/calibration_accuracy.tex index 14f7d16cc..e4d69cde1 100644 --- a/paper-l0/tables/calibration_accuracy.tex +++ b/paper-l0/tables/calibration_accuracy.tex @@ -13,7 +13,9 @@ \bottomrule \end{tabular} } -\caption{Calibration accuracy by geographic level, measured as absolute relative error (ARE) across achievable targets under the local preset ($\lambda_{L_0} = 10^{-8}$).} +\caption{Supporting diagnostic: calibration accuracy by geographic level, measured as absolute +relative error (ARE) across achievable targets for the selected benchmark or production run.} \label{tab:calibration_accuracy} -\tablenote{Note: \tbc[Values to be populated from \texttt{unified\_diagnostics.csv} after a completed pipeline run.]} +\tablenote{Target counts should be read from the exported benchmark package rather than from the +full target database used by the pipeline.} \end{table} diff --git a/paper-l0/tables/comparison.tex b/paper-l0/tables/comparison.tex index d2dc5efa3..8161211d0 100644 --- a/paper-l0/tables/comparison.tex +++ b/paper-l0/tables/comparison.tex @@ -1,17 +1,23 @@ \begin{table}[ht] \centering {\tablefont -\begin{tabular}{lrrrr} +\resizebox{\textwidth}{!}{% +\begin{tabular}{p{0.27\textwidth}p{0.14\textwidth}rrrr} \toprule -Method & Mean ARE (\%) & Median ARE (\%) & Runtime & Sparsity control \\ +Setting & Method & Targets & Mean ARE (\%) & Runtime & Notes \\ \midrule -$L_0$ (this paper) & \tbc & \tbc & \tbc & Yes (configurable $\lambda_{L_0}$) \\ -IPF & \tbc & \tbc & \tbc & No \\ -GREG & \tbc & \tbc & \tbc & No \\ +Mixed-target tractable benchmark & $L_0$ & \tbc & \tbc & \tbc & Retained records: \tbc \\ +Mixed-target tractable benchmark & GREG & \tbc & \tbc & \tbc & Negative weights: \tbc \\ +Count-style tractable benchmark & $L_0$ & \tbc & \tbc & \tbc & Retained records: \tbc \\ +Count-style tractable benchmark & IPF & \tbc & \tbc & \tbc & Converged: \tbc \\ \bottomrule \end{tabular} } -\caption{Comparison of $L_0$ regularization with iterative proportional fitting (IPF) and generalized regression (GREG) estimators on the same calibration matrix and target set.} +} +\caption{Tier 1 tractable benchmark comparisons. The mixed-target benchmark compares $L_0$ with +GREG on the same exported package. The count-style benchmark compares $L_0$ with IPF on an +IPF-eligible subset.} \label{tab:comparison} -\tablenote{Note: \tbc[Results to be populated after running IPF and GREG baselines. ARE = absolute relative error across all achievable targets.]} +\tablenote{ARE = absolute relative error across achievable targets. Exact target counts come from +the benchmark manifests, not the full target database used by the pipeline.} \end{table} diff --git a/paper-l0/tables/production_feasibility.tex b/paper-l0/tables/production_feasibility.tex new file mode 100644 index 000000000..b0598762e --- /dev/null +++ b/paper-l0/tables/production_feasibility.tex @@ -0,0 +1,21 @@ +\begin{table}[ht] +\centering +{\tablefont +\resizebox{\textwidth}{!}{% +\begin{tabular}{p{0.16\textwidth}p{0.17\textwidth}p{0.17\textwidth}rrp{0.19\textwidth}} +\toprule +Method & Target set & Status & Runtime & Peak memory & Notes \\ +\midrule +$L_0$ & Full production mixed targets & \tbc & \tbc & \tbc & Retained records: \tbc \\ +GREG & Full production mixed targets & \tbc & \tbc & \tbc & Negative weights / solver status: \tbc \\ +IPF & Production count-style subset & \tbc & \tbc & \tbc & Iterations or failure mode: \tbc \\ +\bottomrule +\end{tabular} +} +} +\caption{Tier 3 production-feasibility benchmark. This table should report completion and failure +states as directly as possible.} +\label{tab:production_feasibility} +\tablenote{The IPF row is reported on a count-style production subset because IPF is not used as a +general solver for the full mixed-target system.} +\end{table} diff --git a/paper-l0/tables/scaling_frontier.tex b/paper-l0/tables/scaling_frontier.tex new file mode 100644 index 000000000..244659bb3 --- /dev/null +++ b/paper-l0/tables/scaling_frontier.tex @@ -0,0 +1,26 @@ +\begin{table}[ht] +\centering +{\tablefont +\resizebox{\textwidth}{!}{% +\begin{tabular}{rrrrll} +\toprule +Tier & Targets & $L_0$ runtime & GREG runtime & IPF runtime & Main outcome \\ +\midrule +1 & 250 & \tbc & \tbc & \tbc & \tbc \\ +2 & 500 & \tbc & \tbc & \tbc & \tbc \\ +3 & 1{,}000 & \tbc & \tbc & \tbc & \tbc \\ +4 & 2{,}500 & \tbc & \tbc & \tbc & \tbc \\ +5 & 5{,}000 & \tbc & \tbc & \tbc & \tbc \\ +6 & 10{,}000 & \tbc & \tbc & \tbc & \tbc \\ +7 & \tbc[full selected tier] & \tbc & \tbc & \tbc & \tbc \\ +\bottomrule +\end{tabular} +} +} +\caption{Tier 2 scaling frontier. Each row uses the same cloned unit universe and increases the +number of selected targets. Runtime cells should be replaced by failure labels when a method does +not complete.} +\label{tab:scaling_frontier} +\tablenote{The final paper may split this table into separate runtime and failure-mode tables if +the notes column becomes too dense.} +\end{table} diff --git a/paper-l0/tables/target_summary.tex b/paper-l0/tables/target_summary.tex index 100e952c6..0bf9d1407 100644 --- a/paper-l0/tables/target_summary.tex +++ b/paper-l0/tables/target_summary.tex @@ -5,17 +5,17 @@ \toprule Source & Targets & Geographies \\ \midrule -\multicolumn{3}{l}{\textit{Congressional district level}} \\ -IRS SOI (AGI, income tax, EITC, 21 income/ded.\ domains) & 25{,}288 & 436 CDs \\ -Census ACS S0101 (person count by 18 age bands) & 7{,}848 & 436 CDs \\ -Census ACS S2201 (SNAP household count) & 436 & 436 CDs \\ +\multicolumn{3}{l}{\textit{District level}} \\ +IRS SOI (AGI, income tax, EITC, 21 income/ded.\ domains) & 25{,}288 & 436 district-level units \\ +Census ACS S0101 (person count by 18 age bands) & 7{,}848 & 436 district-level units \\ +Census ACS S2201 (SNAP household count) & 436 & 436 district-level units \\ \midrule \multicolumn{3}{l}{\textit{State level}} \\ -IRS SOI (same domains as district) & 2{,}958 & 51 states \\ -Census ACS S0101 (person count by 18 age bands) & 918 & 51 states \\ -USDA FNS SNAP (spending + household count) & 102 & 51 states \\ -CMS Medicaid (enrollment) & 51 & 51 states \\ -Census STC (state income tax collections) & 51 & 51 states \\ +IRS SOI (same domains as district) & 2{,}958 & 50 states + DC \\ +Census ACS S0101 (person count by 18 age bands) & 918 & 50 states + DC \\ +USDA FNS SNAP (spending + household count) & 102 & 50 states + DC \\ +CMS Medicaid (enrollment) & 51 & 50 states + DC \\ +Census STC (state income tax collections) & 51 & 50 states + DC \\ \midrule \multicolumn{3}{l}{\textit{National level}} \\ IRS SOI (domain-constrained aggregates, EITC) & 51 & 1 \\ @@ -26,7 +26,10 @@ \bottomrule \end{tabular} } -\caption{Calibration targets by geographic level and source. District targets dominate by count. Full variable listing in Appendix~\ref{app:targets}.} +\caption{Calibration targets by geographic level and source. District-level targets dominate by +count. Full variable listing appears in Appendix~\ref{app:targets}.} \label{tab:target_summary} -\tablenote{Source: \texttt{policy\_data.db} active target count.} +\tablenote{Source: active targets stored in \texttt{policy\_data.db}. Individual benchmark runs use +subsets of this inventory, so experimental target counts should be reported from the benchmark +manifests.} \end{table} From 5642a6236561e4851bf48bf39bbd2d5e8a589672 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Wed, 22 Apr 2026 22:08:11 +0530 Subject: [PATCH 5/6] Fixing L0 inputs to IPF inputs conversion --- paper-l0/benchmarking/ipf_conversion.py | 962 ++++++- .../manifests/ipf_demo_small.example.json | 34 +- .../notebooks/01_greg_walkthrough.ipynb | 1275 +++++++++ .../notebooks/02_ipf_walkthrough.ipynb | 2389 +++++++++++++++++ paper-l0/benchmarking/notebooks/toy_data.py | 114 + 5 files changed, 4637 insertions(+), 137 deletions(-) create mode 100644 paper-l0/benchmarking/notebooks/01_greg_walkthrough.ipynb create mode 100644 paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb create mode 100644 paper-l0/benchmarking/notebooks/toy_data.py diff --git a/paper-l0/benchmarking/ipf_conversion.py b/paper-l0/benchmarking/ipf_conversion.py index 8f765b1c1..9f5624619 100644 --- a/paper-l0/benchmarking/ipf_conversion.py +++ b/paper-l0/benchmarking/ipf_conversion.py @@ -1,8 +1,28 @@ +"""IPF-benchmark input conversion. + +Turns a filtered slice of the calibration package into the unit-table + +categorical-margin representation surveysd::ipf consumes. + +The conversion groups selected targets by their stratum-constraint signature +into margin blocks, maps each target's constraint tuples to a bucket label +using declared schemas (age 5-year buckets, AGI brackets at district and state +levels, positive-dollar indicators, raw categorical equality), materializes the +derived columns on the cloned-unit table, and emits one `categorical_margin` +row per (margin, geo, cell) triple. + +Single-cell-per-geo margins (e.g. `(district × snap > 0)`) get their +complement cell synthesized from baseline microdata totals so the margin is +proper. Complement cells are labelled and scored separately so the paper's +reporting can distinguish authored targets from synthesized baseline pins. +""" + from __future__ import annotations +import math import sqlite3 +from dataclasses import dataclass from pathlib import Path -from typing import Dict, Iterable, List, Tuple +from typing import Dict, Iterable, List, Optional, Sequence, Tuple import numpy as np import pandas as pd @@ -11,8 +31,603 @@ from policyengine_us_data.calibration.calibration_utils import apply_op +# --------------------------------------------------------------------------- +# Geography and positive-dollar constants +# --------------------------------------------------------------------------- + _GEO_VARS = {"state_fips", "congressional_district_geoid"} -_SUPPORTED_TARGET_VARIABLES = {"person_count", "household_count"} + +# Upper cap used to close `> 0` dollar constraints into a finite bucket. +# Larger than annual US GDP, so any real dollar amount falls inside [0, CAP]. +POSITIVE_DOLLAR_CAP = 15e12 + + +# --------------------------------------------------------------------------- +# Value coercion helpers +# --------------------------------------------------------------------------- + + +def _coerce_value(v) -> float: + if isinstance(v, (int, float)): + return float(v) + s = str(v).strip().lower() + if s in ("-inf", "-infinity"): + return -math.inf + if s in ("inf", "infinity", "+inf", "+infinity"): + return math.inf + return float(s) + + +def _equality_value(v) -> object: + """Canonicalize an `==` constraint value to a hashable label.""" + try: + f = _coerce_value(v) + if math.isfinite(f) and f.is_integer(): + return int(f) + return f + except ValueError: + return str(v) + + +# --------------------------------------------------------------------------- +# Bucket schemas +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class RangeBucket: + label: str + constraints: frozenset # frozenset of (op, float_value) pairs + + +def _bucket(label: str, lo_op: str, lo_val, hi_op: str, hi_val) -> RangeBucket: + return RangeBucket( + label=label, + constraints=frozenset( + [(lo_op, _coerce_value(lo_val)), (hi_op, _coerce_value(hi_val))] + ), + ) + + +AGE_BUCKETS: Tuple[RangeBucket, ...] = tuple( + _bucket(label, ">", lo, "<", hi) + for label, lo, hi in [ + ("0-4", -1, 5), + ("5-9", 4, 10), + ("10-14", 9, 15), + ("15-19", 14, 20), + ("20-24", 19, 25), + ("25-29", 24, 30), + ("30-34", 29, 35), + ("35-39", 34, 40), + ("40-44", 39, 45), + ("45-49", 44, 50), + ("50-54", 49, 55), + ("55-59", 54, 60), + ("60-64", 59, 65), + ("65-69", 64, 70), + ("70-74", 69, 75), + ("75-79", 74, 80), + ("80-84", 79, 85), + # The target DB uses two different upper bounds for the 85+ bucket + # (`<999` and `<1000`). Both map to the same label so either encoding + # matches cleanly. + ("85+", 84, 999), + ("85+", 84, 1000), + ] +) + + +# `eitc_child_count` uses discrete values {0, 1, 2} plus an open-upper ">2" +# bucket. Declared explicitly so the matcher routes every authored target into +# the same derived column `eitc_child_count_bracket`. +EITC_CHILD_COUNT_BUCKETS: Tuple[RangeBucket, ...] = ( + RangeBucket("0", frozenset([("==", 0.0)])), + RangeBucket("1", frozenset([("==", 1.0)])), + RangeBucket("2", frozenset([("==", 2.0)])), + RangeBucket(">2", frozenset([(">", 2.0)])), +) + + +AGI_BUCKETS_DISTRICT: Tuple[RangeBucket, ...] = tuple( + _bucket(label, ">=", lo, "<", hi) + for label, lo, hi in [ + ("(-inf,1)", -math.inf, 1.0), + ("[1,10k)", 1.0, 10_000.0), + ("[10k,25k)", 10_000.0, 25_000.0), + ("[25k,50k)", 25_000.0, 50_000.0), + ("[50k,75k)", 50_000.0, 75_000.0), + ("[75k,100k)", 75_000.0, 100_000.0), + ("[100k,200k)", 100_000.0, 200_000.0), + ("[200k,500k)", 200_000.0, 500_000.0), + ("[500k,inf)", 500_000.0, math.inf), + ] +) + +AGI_BUCKETS_STATE: Tuple[RangeBucket, ...] = AGI_BUCKETS_DISTRICT[:-1] + tuple( + _bucket(label, ">=", lo, "<", hi) + for label, lo, hi in [ + ("[500k,1M)", 500_000.0, 1_000_000.0), + ("[1M,inf)", 1_000_000.0, math.inf), + ] +) + + +@dataclass(frozen=True) +class BucketSchema: + name: str # derived-column name to emit on the unit table + variable: str # source variable the schema bucketizes + buckets: Tuple[RangeBucket, ...] + applies_to_geo_levels: Tuple[str, ...] + + def match_constraints(self, pairs: frozenset) -> Optional[str]: + for b in self.buckets: + if b.constraints == pairs: + return b.label + return None + + +AGE_SCHEMA = BucketSchema( + name="age_bracket", + variable="age", + buckets=AGE_BUCKETS, + applies_to_geo_levels=("national", "state", "district"), +) + +AGI_DISTRICT_SCHEMA = BucketSchema( + name="agi_bracket_district", + variable="adjusted_gross_income", + buckets=AGI_BUCKETS_DISTRICT, + applies_to_geo_levels=("district",), +) + +AGI_STATE_SCHEMA = BucketSchema( + name="agi_bracket_state", + variable="adjusted_gross_income", + buckets=AGI_BUCKETS_STATE, + applies_to_geo_levels=("state", "national"), +) + +EITC_CHILD_COUNT_SCHEMA = BucketSchema( + name="eitc_child_count_bracket", + variable="eitc_child_count", + buckets=EITC_CHILD_COUNT_BUCKETS, + applies_to_geo_levels=("national", "state", "district"), +) + +RANGE_SCHEMAS_BY_VARIABLE: Dict[str, Tuple[BucketSchema, ...]] = { + "age": (AGE_SCHEMA,), + "adjusted_gross_income": (AGI_DISTRICT_SCHEMA, AGI_STATE_SCHEMA), + "eitc_child_count": (EITC_CHILD_COUNT_SCHEMA,), +} + + +# Cell label used for the synthetic positive/non-positive binary bucket. +POSITIVE_LABEL = "positive" +NON_POSITIVE_LABEL = "non_positive" + + +def _positive_column_name(variable: str) -> str: + return f"{variable}_positive" + + +# --------------------------------------------------------------------------- +# Target normalization +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class GeoKey: + variable: Optional[str] + value: Optional[object] + + def level(self) -> str: + if self.variable == "state_fips": + return "state" + if self.variable == "congressional_district_geoid": + return "district" + return "national" + + +@dataclass(frozen=True) +class ResolvedTarget: + target_id: int + target_name: str + target_value: float + scope: str # "person" | "household" | "tax_unit" | ... + source_variable: str + geo: GeoKey + cell: Tuple[Tuple[str, str], ...] # tuple of (derived_column, cell_label), sorted + raw_constraints: Tuple[Tuple[str, str, str], ...] # preserved for diagnostics + + +def _group_constraints_by_variable( + records: Iterable[dict], + exclude_vars: Iterable[str], +) -> Dict[str, frozenset]: + exclude = set(exclude_vars) + grouped: Dict[str, List[Tuple[str, object]]] = {} + for r in records: + var = str(r["variable"]) + if var in exclude: + continue + op = str(r["operation"]) + raw_val = r["value"] + if op == "==": + value: object = _equality_value(raw_val) + else: + value = _coerce_value(raw_val) + grouped.setdefault(var, []).append((op, value)) + return {v: frozenset(pairs) for v, pairs in grouped.items()} + + +def _resolve_variable_cell( + variable: str, + pairs: frozenset, + geo_level: str, +) -> Optional[Tuple[str, str]]: + """Return (derived_column_name, cell_label) for this variable's constraints.""" + ops = {op for op, _ in pairs} + + # Declared range or discrete schemas take precedence: they pull equality + # cases into the same derived column as the range cases (e.g. EITC). + for schema in RANGE_SCHEMAS_BY_VARIABLE.get(variable, ()): + if geo_level not in schema.applies_to_geo_levels: + continue + lbl = schema.match_constraints(pairs) + if lbl is not None: + return (schema.name, lbl) + + # Pure equality → raw categorical pass-through (value identifies the cell). + if ops == {"=="}: + if len(pairs) != 1: + return None + _, val = next(iter(pairs)) + return (variable, str(val)) + + # Positive-dollar `>`-only single constraint at zero. + if ops == {">"} and len(pairs) == 1: + _, val = next(iter(pairs)) + if isinstance(val, float) and val == 0.0: + return (_positive_column_name(variable), POSITIVE_LABEL) + + return None + + +def _resolve_target( + target_row: pd.Series, + constraints: List[dict], +) -> Optional[ResolvedTarget]: + geo = _extract_geo(constraints) + grouped = _group_constraints_by_variable(constraints, exclude_vars=_GEO_VARS) + cell: List[Tuple[str, str]] = [] + for var, pairs in grouped.items(): + label = _resolve_variable_cell(var, pairs, geo.level()) + if label is None: + return None + cell.append(label) + raw = tuple( + sorted( + (str(r["variable"]), str(r["operation"]), str(r["value"])) + for r in constraints + ) + ) + return ResolvedTarget( + target_id=int(target_row["target_id"]) + if "target_id" in target_row.index + else -1, + target_name=str( + target_row.get("target_name") + or f"target_{target_row.get('stratum_id', 'unknown')}" + ), + target_value=float(target_row["value"]), + scope=_target_scope(str(target_row["variable"])), + source_variable=str(target_row["variable"]), + geo=geo, + cell=tuple(sorted(cell)), + raw_constraints=raw, + ) + + +def _extract_geo(records: Iterable[dict]) -> GeoKey: + for r in records: + v = str(r["variable"]) + if v in _GEO_VARS: + raw = r["value"] + try: + val: object = int(raw) + except (ValueError, TypeError): + val = str(raw) + return GeoKey(variable=v, value=val) + return GeoKey(variable=None, value=None) + + +_SCOPE_BY_VARIABLE = { + "person_count": "person", + "household_count": "household", +} + + +def _target_scope(target_variable: str) -> str: + try: + return _SCOPE_BY_VARIABLE[target_variable] + except KeyError as exc: + raise ValueError( + f"IPF conversion does not support target variable " + f"'{target_variable}'. Currently supported: " + f"{sorted(_SCOPE_BY_VARIABLE)}. " + "`tax_unit_count` and `spm_unit_count` would require a separate " + "unit table keyed on the respective entity and a separate IPF run " + "per entity; left out of this pass intentionally." + ) from exc + + +# --------------------------------------------------------------------------- +# Margin assembly +# --------------------------------------------------------------------------- + + +@dataclass +class MarginBlock: + margin_id: str + scope: str + cell_vars: Tuple[str, ...] # sorted derived-column names used as cell dimensions + geo_var: Optional[str] # geo dimension included in the margin + targets: List[ResolvedTarget] + # cells that exist in the target package ( (geo_value, cell_tuple) ) + target_cells: set + # cells synthesized from baseline to close the margin + synthesized_cells: List[Tuple[object, Tuple[Tuple[str, str], ...], float]] + + +def _margin_key(t: ResolvedTarget) -> Tuple[str, Optional[str], Tuple[str, ...]]: + return ( + t.source_variable, + t.geo.variable, + tuple(sorted({dc for dc, _ in t.cell})), + ) + + +def _assemble_margins( + resolved: List[ResolvedTarget], +) -> List[MarginBlock]: + blocks: Dict[Tuple, MarginBlock] = {} + for t in resolved: + key = _margin_key(t) + if key not in blocks: + source_variable, geo_var, cell_vars = key + all_vars = (*cell_vars,) if geo_var is None else (geo_var, *cell_vars) + blocks[key] = MarginBlock( + margin_id=f"margin_{len(blocks):04d}", + scope=t.scope, + cell_vars=tuple(sorted(all_vars)), + geo_var=geo_var, + targets=[], + target_cells=set(), + synthesized_cells=[], + ) + blocks[key].targets.append(t) + blocks[key].target_cells.add((t.geo.value, t.cell)) + return list(blocks.values()) + + +def _should_synthesize_complement(block: MarginBlock) -> bool: + """True iff the block has a 1-cell-per-geo pattern.""" + if block.geo_var is None: + return len({cell for _, cell in block.target_cells}) == 1 + cells_per_geo: Dict[object, set] = {} + for geo_value, cell in block.target_cells: + cells_per_geo.setdefault(geo_value, set()).add(cell) + return all(len(cells) == 1 for cells in cells_per_geo.values()) and ( + len({cell for _, cell in block.target_cells}) == 1 + ) + + +def _synthesize_complement_cells( + block: MarginBlock, + unit_data: pd.DataFrame, + weight_column: str, +) -> None: + """Add a complement row per geo to single-cell-per-geo blocks. + + The complement's target value is pinned to the baseline weighted count of + rows falling in the complement cell. That makes the margin feasible + without requiring an external complement total. + """ + cells = {cell for _, cell in block.target_cells} + if len(cells) != 1: + return + (cell,) = cells + complement_cell = _flip_cell(cell) + if complement_cell is None: + return + + # Evaluate the complement cell's weighted count from the unit table. + mask = _mask_for_cell(unit_data, complement_cell) + if block.geo_var is None: + value = float(unit_data.loc[mask, weight_column].sum()) + block.synthesized_cells.append((None, complement_cell, value)) + return + groups = unit_data.loc[mask].groupby(block.geo_var)[weight_column].sum() + for geo_val in sorted({g for g, _ in block.target_cells}): + value = float(groups.get(geo_val, 0.0)) + block.synthesized_cells.append((geo_val, complement_cell, value)) + + +def _flip_cell( + cell: Tuple[Tuple[str, str], ...], +) -> Optional[Tuple[Tuple[str, str], ...]]: + """For a cell that contains exactly one `_positive="positive"` entry, + return the same cell with that entry flipped to `non_positive`. Otherwise + return None (complement not defined).""" + flipped: List[Tuple[str, str]] = [] + changed = False + for col, label in cell: + if col.endswith("_positive") and label == POSITIVE_LABEL: + flipped.append((col, NON_POSITIVE_LABEL)) + changed = True + else: + flipped.append((col, label)) + if not changed: + return None + return tuple(sorted(flipped)) + + +def _mask_for_cell( + unit_data: pd.DataFrame, cell: Tuple[Tuple[str, str], ...] +) -> np.ndarray: + mask = np.ones(len(unit_data), dtype=bool) + for col, label in cell: + if col not in unit_data.columns: + raise KeyError(f"Unit table is missing derived column '{col}'") + mask &= unit_data[col].astype(str).to_numpy() == str(label) + return mask + + +def check_margin_consistency( + blocks: List[MarginBlock], + tolerance: float = 1e-3, +) -> List[Dict[str, object]]: + """Return a list of consistency issues, one per (geo_value) that has + mismatched totals across different margin blocks. + + `surveysd::ipf` refuses to run when two person-scope (or two household- + scope) margins imply different population totals for the same geography. + The check is `rel_err = |t1 - t2| / max(t1, t2) > tolerance`. + """ + totals_by_scope_geo: Dict[Tuple[str, Optional[str], object], Dict[str, float]] = {} + for block in blocks: + # Include synthesized complement cells — they are part of the margin's total. + by_geo: Dict[object, float] = {} + for t in block.targets: + by_geo[t.geo.value] = by_geo.get(t.geo.value, 0.0) + float(t.target_value) + for geo_val, _, value in block.synthesized_cells: + by_geo[geo_val] = by_geo.get(geo_val, 0.0) + float(value) + for geo_val, total in by_geo.items(): + key = (block.scope, block.geo_var, geo_val) + totals_by_scope_geo.setdefault(key, {})[block.margin_id] = total + + issues: List[Dict[str, object]] = [] + for (scope, geo_var, geo_val), margin_totals in totals_by_scope_geo.items(): + if len(margin_totals) < 2: + continue + tmax = max(margin_totals.values()) + tmin = min(margin_totals.values()) + if tmax == 0 or (tmax - tmin) / tmax <= tolerance: + continue + issues.append( + { + "scope": scope, + "geo_var": geo_var, + "geo_value": geo_val, + "margin_totals": dict(margin_totals), + "relative_spread": (tmax - tmin) / tmax, + } + ) + return issues + + +# --------------------------------------------------------------------------- +# Derived-column materialization on the unit table +# --------------------------------------------------------------------------- + + +def _bracket_age(age_values: np.ndarray) -> np.ndarray: + out = np.array(["unmatched"] * len(age_values), dtype=object) + for b in AGE_BUCKETS: + lo = next(v for op, v in b.constraints if op == ">") + hi = next(v for op, v in b.constraints if op == "<") + mask = (age_values > lo) & (age_values < hi) + out[mask] = b.label + return out + + +def _bracket_agi(agi_values: np.ndarray, schema: BucketSchema) -> np.ndarray: + out = np.array(["unmatched"] * len(agi_values), dtype=object) + for b in schema.buckets: + lo = next(v for op, v in b.constraints if op == ">=") + hi = next(v for op, v in b.constraints if op == "<") + mask = (agi_values >= lo) & (agi_values < hi) + out[mask] = b.label + return out + + +def _bracket_eitc_child_count(values: np.ndarray) -> np.ndarray: + v = np.asarray(values, dtype=float).round().astype(int) + out = np.where(v == 0, "0", np.where(v == 1, "1", np.where(v == 2, "2", ">2"))) + return out.astype(object) + + +def _materialize_derived_columns( + unit_data: pd.DataFrame, + derived_columns_needed: set, + raw_variable_values: Dict[str, np.ndarray], +) -> pd.DataFrame: + df = unit_data.copy() + for col in derived_columns_needed: + if col in df.columns: + continue + if col == AGE_SCHEMA.name: + df[col] = _bracket_age(np.asarray(raw_variable_values["age"], dtype=float)) + elif col == AGI_DISTRICT_SCHEMA.name: + df[col] = _bracket_agi( + np.asarray(raw_variable_values["adjusted_gross_income"], dtype=float), + AGI_DISTRICT_SCHEMA, + ) + elif col == AGI_STATE_SCHEMA.name: + df[col] = _bracket_agi( + np.asarray(raw_variable_values["adjusted_gross_income"], dtype=float), + AGI_STATE_SCHEMA, + ) + elif col == EITC_CHILD_COUNT_SCHEMA.name: + df[col] = _bracket_eitc_child_count( + np.asarray(raw_variable_values["eitc_child_count"], dtype=float) + ) + elif col.endswith("_positive"): + src = col[: -len("_positive")] + if src not in raw_variable_values: + raise KeyError( + f"Cannot build derived column '{col}' — raw values for '{src}' not loaded" + ) + df[col] = np.where( + np.asarray(raw_variable_values[src], dtype=float) > 0.0, + POSITIVE_LABEL, + NON_POSITIVE_LABEL, + ).astype(object) + else: + # Equality pass-through: derived column == source column, cast to str. + if col not in raw_variable_values: + raise KeyError( + f"Cannot build derived column '{col}' — raw values for '{col}' not loaded" + ) + df[col] = np.asarray(raw_variable_values[col]).astype(str) + return df + + +def _collect_required_source_variables(blocks: List[MarginBlock]) -> set: + """Return the set of raw policyengine-us variables we need loaded.""" + needed = set() + for block in blocks: + for cell_var in block.cell_vars: + if cell_var == AGE_SCHEMA.name: + needed.add("age") + elif cell_var in (AGI_DISTRICT_SCHEMA.name, AGI_STATE_SCHEMA.name): + needed.add("adjusted_gross_income") + elif cell_var == EITC_CHILD_COUNT_SCHEMA.name: + needed.add("eitc_child_count") + elif cell_var.endswith("_positive"): + needed.add(cell_var[: -len("_positive")]) + elif cell_var in _GEO_VARS: + continue + else: + # Equality pass-through uses the variable name directly. + needed.add(cell_var) + return needed + + +# --------------------------------------------------------------------------- +# Clone-unit table construction (carried over from the prior implementation) +# --------------------------------------------------------------------------- def _detect_time_period(sim) -> int: @@ -24,19 +639,14 @@ def _detect_time_period(sim) -> int: def _load_stratum_constraints( - db_path: str | Path, - stratum_ids: Iterable[int], + db_path: str | Path, stratum_ids: Iterable[int] ) -> Dict[int, List[dict]]: ids = sorted({int(sid) for sid in stratum_ids}) if not ids: return {} placeholders = ",".join("?" for _ in ids) query = f""" - SELECT - stratum_id, - constraint_variable AS variable, - operation, - value + SELECT stratum_id, constraint_variable AS variable, operation, value FROM stratum_constraints WHERE stratum_id IN ({placeholders}) ORDER BY stratum_id @@ -51,51 +661,8 @@ def _load_stratum_constraints( return grouped -def _ensure_supported_targets(targets_df: pd.DataFrame) -> None: - unsupported = sorted( - set(targets_df["variable"].astype(str)) - _SUPPORTED_TARGET_VARIABLES - ) - if unsupported: - raise ValueError( - "Automatic IPF conversion currently supports only " - f"{sorted(_SUPPORTED_TARGET_VARIABLES)} targets. " - f"Unsupported target variables in manifest selection: {unsupported}" - ) - - -def _required_constraint_variables( - stratum_constraints: Dict[int, List[dict]], -) -> List[str]: - variables = set() - for constraints in stratum_constraints.values(): - for constraint in constraints: - variable = str(constraint["variable"]) - if variable not in _GEO_VARS: - variables.add(variable) - return sorted(variables) - - -def _evaluate_constraints( - constraints: List[dict], - columns: Dict[str, np.ndarray], -) -> np.ndarray: - n_rows = len(next(iter(columns.values()))) - mask = np.ones(n_rows, dtype=bool) - for constraint in constraints: - variable = str(constraint["variable"]) - if variable not in columns: - raise KeyError(f"Missing column for constraint variable: {variable}") - mask &= apply_op( - np.asarray(columns[variable]), - str(constraint["operation"]), - str(constraint["value"]), - ) - return mask - - def _build_household_clone_arrays( - package: Dict, - sim, + package: Dict, sim ) -> Tuple[pd.DataFrame, np.ndarray]: household_ids = sim.calculate("household_id", map_to="household").values n_households = len(household_ids) @@ -124,7 +691,6 @@ def _build_household_clone_arrays( "unit_index": unit_index, "household_id": unit_index, "base_weight": initial_weights, - "benchmark_all": "all", "state_fips": block_geoid, "congressional_district_geoid": cd_geoid, } @@ -137,18 +703,11 @@ def _build_household_clone_arrays( def _load_sim_columns( - sim, - variables: List[str], - level: str, + sim, variables: Iterable[str], level: str ) -> Dict[str, np.ndarray]: columns: Dict[str, np.ndarray] = {} for variable in variables: - try: - values = sim.calculate(variable, map_to=level).values - except Exception as exc: - raise RuntimeError( - f"Failed to calculate benchmark variable '{variable}' at level '{level}'" - ) from exc + values = sim.calculate(variable, map_to=level).values values = np.asarray(values) if hasattr(values, "decode_to_str"): values = values.decode_to_str() @@ -162,20 +721,20 @@ def _build_person_level_unit_data( package: Dict, household_df: pd.DataFrame, sim, - needed_variables: List[str], -) -> pd.DataFrame: + needed_variables: Iterable[str], +) -> Tuple[pd.DataFrame, Dict[str, np.ndarray]]: household_ids = sim.calculate("household_id", map_to="household").values person_hh_ids = sim.calculate("household_id", map_to="person").values hh_index = {int(hid): idx for idx, hid in enumerate(household_ids)} person_hh_index = np.array( [hh_index[int(hid)] for hid in person_hh_ids], dtype=np.int64 ) - n_households = len(household_ids) n_clones = int(package["metadata"]["n_clones"]) person_columns = _load_sim_columns(sim, needed_variables, level="person") person_frames = [] + stacked_raw: Dict[str, List[np.ndarray]] = {v: [] for v in person_columns} for clone_idx in range(n_clones): unit_index = person_hh_index + clone_idx * n_households frame = pd.DataFrame( @@ -183,7 +742,6 @@ def _build_person_level_unit_data( "unit_index": unit_index, "household_id": unit_index, "base_weight": household_df["base_weight"].to_numpy()[unit_index], - "benchmark_all": household_df["benchmark_all"].to_numpy()[unit_index], "state_fips": household_df["state_fips"].to_numpy()[unit_index], "congressional_district_geoid": household_df[ "congressional_district_geoid" @@ -192,32 +750,31 @@ def _build_person_level_unit_data( ) for variable, values in person_columns.items(): frame[variable] = values + stacked_raw[variable].append(values) person_frames.append(frame) - return pd.concat(person_frames, ignore_index=True) + raw_values = {v: np.concatenate(a) for v, a in stacked_raw.items()} + return pd.concat(person_frames, ignore_index=True), raw_values def _build_household_level_unit_data( household_df: pd.DataFrame, sim, - needed_variables: List[str], -) -> pd.DataFrame: + needed_variables: Iterable[str], +) -> Tuple[pd.DataFrame, Dict[str, np.ndarray]]: frame = household_df.copy() household_columns = _load_sim_columns(sim, needed_variables, level="household") - repeated_columns = { - name: np.tile(values, len(frame) // len(values)) + repeated = { + name: np.tile(values, len(frame) // max(len(values), 1)) for name, values in household_columns.items() } - for name, values in repeated_columns.items(): + for name, values in repeated.items(): frame[name] = values - return frame + return frame, repeated -def _target_scope(target_variable: str) -> str: - if target_variable == "person_count": - return "person" - if target_variable == "household_count": - return "household" - raise ValueError(f"Unsupported IPF target variable: {target_variable}") +# --------------------------------------------------------------------------- +# Main entry point +# --------------------------------------------------------------------------- def build_ipf_inputs( @@ -225,7 +782,29 @@ def build_ipf_inputs( manifest: BenchmarkManifest, filtered_targets: pd.DataFrame, ) -> Tuple[pd.DataFrame, pd.DataFrame]: - _ensure_supported_targets(filtered_targets) + """Return `(unit_metadata, ipf_target_metadata)` ready for `ipf_runner.R`. + + Consumes the same `filtered_targets` slice that the GREG and L0 runners + see. Internally filters to the IPF-eligible subset with two checks: + + 1. **Count check** — keep only targets whose `variable` is a supported + count (`person_count`, `household_count`). Dollar-total targets stay + in the shared matrix for GREG and L0 but are dropped here. + 2. **Resolver check** — keep only targets whose stratum constraints + resolve through the declared bucket schemas (age, AGI district / AGI + state, EITC child count, positive-dollar `>0`, raw equality). Targets + whose constraints don't match any declared schema are dropped. + + Both checks are non-fatal; dropped targets are recorded on the returned + metadata's `.attrs['dropped_targets']` so the caller can report them. + + The surviving subset is grouped by constraint signature into margin + blocks; single-cell-per-geo margins get their complement cell + synthesized from the baseline weighted count of the complement predicate + on the cloned-unit table. + """ + if filtered_targets.empty: + raise ValueError("filtered_targets is empty; nothing to convert.") metadata = package.get("metadata", {}) dataset_path = metadata.get("dataset_path") @@ -239,57 +818,206 @@ def build_ipf_inputs( "Automatic IPF conversion requires metadata.db_path to exist locally" ) - from policyengine_us import Microsimulation - - sim = Microsimulation(dataset=str(dataset_path)) - _ = _detect_time_period(sim) + # --- Count check: drop non-count-style targets ------------------------ + supported_mask = ( + filtered_targets["variable"].astype(str).isin(_SCOPE_BY_VARIABLE.keys()) + ) + dropped_non_count = filtered_targets.loc[~supported_mask].copy() + targets = filtered_targets.loc[supported_mask].reset_index(drop=True) + if targets.empty: + raise ValueError( + "No count-style targets in filtered_targets; IPF has nothing to run. " + f"Supported variables: {sorted(_SCOPE_BY_VARIABLE)}." + ) stratum_constraints = _load_stratum_constraints( db_path=db_path, - stratum_ids=filtered_targets["stratum_id"].astype(int).tolist(), - ) - needed_variables = _required_constraint_variables(stratum_constraints) - has_person_targets = ( - filtered_targets["variable"].astype(str).eq("person_count").any() + stratum_ids=targets["stratum_id"].astype(int).tolist(), ) + # --- Resolver check: keep only targets that map to a declared cell ---- + resolved: List[ResolvedTarget] = [] + dropped_unresolvable: List[Tuple[int, str]] = [] + for _, row in targets.iterrows(): + constraints = stratum_constraints.get(int(row["stratum_id"]), []) + rt = _resolve_target(row, constraints) + if rt is None: + dropped_unresolvable.append( + (int(row.get("target_id", -1)), str(row.get("target_name", "?"))) + ) + continue + resolved.append(rt) + if not resolved: + raise ValueError( + "No targets in filtered_targets resolved through the declared " + "bucket schemas. Nothing for IPF to run." + ) + + blocks = _assemble_margins(resolved) + + # --- Build the cloned-unit table with needed source variables ---------- + from policyengine_us import Microsimulation + + sim = Microsimulation(dataset=str(dataset_path)) + _ = _detect_time_period(sim) household_df, _ = _build_household_clone_arrays(package, sim) - if has_person_targets: - unit_data = _build_person_level_unit_data( + + needed_source_vars = _collect_required_source_variables(blocks) + + has_person_scoped = any(b.scope == "person" for b in blocks) + if has_person_scoped: + unit_data, raw_values = _build_person_level_unit_data( package=package, household_df=household_df, sim=sim, - needed_variables=needed_variables, + needed_variables=needed_source_vars, ) else: - unit_data = _build_household_level_unit_data( + unit_data, raw_values = _build_household_level_unit_data( household_df=household_df, sim=sim, - needed_variables=needed_variables, + needed_variables=needed_source_vars, ) - eval_columns = { - column: unit_data[column].to_numpy() for column in unit_data.columns + # --- Materialize derived columns on the unit table --------------------- + derived_cols = {cv for b in blocks for cv in b.cell_vars if cv not in _GEO_VARS} + unit_data = _materialize_derived_columns(unit_data, derived_cols, raw_values) + + # --- Synthesize complement cells for single-cell-per-geo margins ------- + for block in blocks: + if _should_synthesize_complement(block): + _synthesize_complement_cells(block, unit_data, weight_column="base_weight") + + # --- Emit categorical_margin target rows ------------------------------- + out_rows = [] + for block in blocks: + margin_vars_joined = "|".join(block.cell_vars) + # Authored target rows + for t in block.targets: + cell_assignments = _cell_assignments(t, block) + out_rows.append( + { + "margin_id": block.margin_id, + "scope": block.scope, + "target_type": "categorical_margin", + "variables": margin_vars_joined, + "cell": "|".join(cell_assignments), + "target_value": float(t.target_value), + "target_name": t.target_name, + "source_variable": t.source_variable, + "synthesized": False, + } + ) + # Synthesized complement rows + for geo_val, cell, value in block.synthesized_cells: + cell_assignments = _complement_cell_assignments(geo_val, cell, block) + out_rows.append( + { + "margin_id": block.margin_id, + "scope": block.scope, + "target_type": "categorical_margin", + "variables": margin_vars_joined, + "cell": "|".join(cell_assignments), + "target_value": float(value), + "target_name": f"{block.margin_id}_complement_{geo_val}", + "source_variable": "synthesized_baseline", + "synthesized": True, + } + ) + + target_metadata = pd.DataFrame(out_rows) + + # --- Margin consistency check ----------------------------------------- + issues = check_margin_consistency(blocks) + target_metadata.attrs["margin_consistency_issues"] = issues + target_metadata.attrs["dropped_targets"] = { + "non_count_style": int(len(dropped_non_count)), + "unresolvable_constraints": int(len(dropped_unresolvable)), + "unresolvable_examples": dropped_unresolvable[:10], } - ipf_target_rows = [] - for row_idx, row in filtered_targets.reset_index(drop=True).iterrows(): - constraints = stratum_constraints.get(int(row["stratum_id"]), []) - indicator_column = f"ipf_indicator_{row_idx:05d}" - mask = _evaluate_constraints(constraints, eval_columns) - unit_data[indicator_column] = mask.astype(np.int8) - eval_columns[indicator_column] = unit_data[indicator_column].to_numpy() - ipf_target_rows.append( - { - "scope": _target_scope(str(row["variable"])), - "target_type": "numeric_total", - "value_column": indicator_column, - "variables": "benchmark_all", - "cell": "benchmark_all=all", - "target_value": float(row["value"]), - "target_name": row.get("target_name", f"target_{row_idx}"), - "source_variable": str(row["variable"]), - "stratum_id": int(row["stratum_id"]), - } + if issues: + import warnings + + warnings.warn( + f"{len(issues)} geography-scope combination(s) have mismatched " + "totals across multiple IPF margin blocks. `surveysd::ipf` will " + "refuse to run with these margins combined; run one margin block " + "at a time or harmonize the authored totals. See " + "target_metadata.attrs['margin_consistency_issues'] for details.", + stacklevel=2, ) - return unit_data, pd.DataFrame(ipf_target_rows) + return unit_data, target_metadata + + +def split_target_metadata_by_margin( + target_metadata: pd.DataFrame, +) -> Dict[str, pd.DataFrame]: + """Return one sub-frame per margin_id, safe to pass to `ipf_runner.R`. + + Inconsistent authored totals across margin blocks break a combined + `surveysd::ipf` call. Splitting by `margin_id` lets the benchmark run + each block independently and score the weights separately. + """ + return { + mid: sub.reset_index(drop=True) + for mid, sub in target_metadata.groupby("margin_id", sort=False) + } + + +def _cell_assignments(t: ResolvedTarget, block: MarginBlock) -> List[str]: + assignments: Dict[str, str] = {} + if block.geo_var is not None: + assignments[block.geo_var] = str(t.geo.value) + for col, lbl in t.cell: + assignments[col] = str(lbl) + return [f"{col}={assignments[col]}" for col in block.cell_vars] + + +def _complement_cell_assignments( + geo_val: object, + cell: Tuple[Tuple[str, str], ...], + block: MarginBlock, +) -> List[str]: + assignments: Dict[str, str] = {} + if block.geo_var is not None: + assignments[block.geo_var] = str(geo_val) + for col, lbl in cell: + assignments[col] = str(lbl) + return [f"{col}={assignments[col]}" for col in block.cell_vars] + + +# --------------------------------------------------------------------------- +# Back-compat / diagnostics helpers exported for notebooks and tests +# --------------------------------------------------------------------------- + + +def resolve_targets_for_testing( + targets_df: pd.DataFrame, + stratum_constraints: Dict[int, List[dict]], +) -> Tuple[List[ResolvedTarget], List[Tuple[int, str]]]: + """Pure-Python helper used by the notebook walkthrough and unit tests. + + Resolves each target against the declared bucket schemas without touching + the saved calibration package or the microsimulation dataset. Returns a + `(resolved, unresolved)` pair. + """ + resolved: List[ResolvedTarget] = [] + unresolved: List[Tuple[int, str]] = [] + for _, row in targets_df.reset_index(drop=True).iterrows(): + constraints = stratum_constraints.get(int(row["stratum_id"]), []) + rt = _resolve_target(row, constraints) + if rt is None: + unresolved.append( + (int(row.get("target_id", -1)), str(row.get("target_name", "?"))) + ) + else: + resolved.append(rt) + return resolved, unresolved + + +def assemble_margins_for_testing( + resolved: List[ResolvedTarget], +) -> List[MarginBlock]: + """Expose margin assembly for the notebook walkthrough and tests.""" + return _assemble_margins(resolved) diff --git a/paper-l0/benchmarking/manifests/ipf_demo_small.example.json b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json index f979e7d93..d9168a5a8 100644 --- a/paper-l0/benchmarking/manifests/ipf_demo_small.example.json +++ b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json @@ -1,7 +1,7 @@ { "name": "ipf_demo_small", - "tier": "tier_b", - "description": "Example IPF benchmark manifest using automatic conversion from the saved calibration package and its source dataset.", + "tier": "tier_1", + "description": "Example IPF benchmark. Uses the same target_filters path as GREG and L0; the IPF converter internally keeps only the count-style targets whose constraints resolve through the declared bucket schemas, builds one margin block per constraint signature, and synthesizes complement cells for any single-cell-per-geo margins.", "package_path": "policyengine_us_data/storage/calibration/calibration_package.pkl", "methods": [ "l0", @@ -9,22 +9,16 @@ ], "target_filters": { "include_geo_levels": [ - "national", - "state", "district" ], - "include_national": true, - "variables": [ - "person_count", - "household_count" - ], - "domain_variables": [ - "age", - "snap", - "medicaid_enrolled" - ], - "count_like_only": true, - "max_targets": 250 + "include_national": false, + "district_ids": [ + "0601", + "0602", + "0603", + "0604", + "0605" + ] }, "external_inputs": {}, "method_options": { @@ -37,10 +31,10 @@ "learning_rate": 0.15 }, "ipf": { - "max_iter": 200, - "bound": 4.0, - "epsP": 1e-06, - "epsH": 0.01, + "max_iter": 5000, + "bound": 10.0, + "epsP": 1e-04, + "epsH": 1e-02, "household_id_col": "household_id", "weight_col": "base_weight" } diff --git a/paper-l0/benchmarking/notebooks/01_greg_walkthrough.ipynb b/paper-l0/benchmarking/notebooks/01_greg_walkthrough.ipynb new file mode 100644 index 000000000..a01991e80 --- /dev/null +++ b/paper-l0/benchmarking/notebooks/01_greg_walkthrough.ipynb @@ -0,0 +1,1275 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e90d4c4c", + "metadata": {}, + "source": [ + "# GREG walkthrough: linear calibration via R's `survey` package\n", + "\n", + "This notebook walks through a single end-to-end GREG calibration run on a ten-household\n", + "synthetic survey. The goal is to show the exact input and output formats the GREG runner\n", + "consumes so that the paper's benchmark scaffold is easy to audit.\n", + "\n", + "GREG (Generalized Regression Estimator) is a classical survey-calibration method. It\n", + "rescales each unit's design weight so that, taken together, the weighted sample exactly\n", + "reproduces a set of known population totals. Its natural input is a linear system:\n", + "\n", + "$$\n", + "X\\, w_{\\text{fitted}} = t\n", + "$$\n", + "\n", + "where `X` is a `(n_targets, n_units)` matrix of per-unit coefficients, `t` is the target\n", + "vector, and `w_{fitted}` is the fitted per-unit weight. GREG finds `w_{fitted}` that hits\n", + "`t` exactly (when feasible) while staying as close as possible to the design weights under\n", + "a chi-squared-style distance." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "33a8b994", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:53.419894Z", + "iopub.status.busy": "2026-04-22T10:29:53.419671Z", + "iopub.status.idle": "2026-04-22T10:29:54.086542Z", + "shell.execute_reply": "2026-04-22T10:29:54.086232Z" + } + }, + "outputs": [], + "source": [ + "import subprocess\n", + "import tempfile\n", + "from pathlib import Path\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "from scipy.io import mmwrite\n", + "from scipy.sparse import csr_matrix\n", + "\n", + "from toy_data import (\n", + " HOUSEHOLDS,\n", + " TARGETS,\n", + " build_target_matrix,\n", + " diagnostic_table,\n", + " household_table_with_coefficients,\n", + ")\n", + "\n", + "NOTEBOOK_DIR = Path().resolve()\n", + "GREG_RUNNER = NOTEBOOK_DIR.parent / \"runners\" / \"greg_runner.R\"\n", + "assert GREG_RUNNER.exists(), GREG_RUNNER" + ] + }, + { + "cell_type": "markdown", + "id": "24edf197", + "metadata": {}, + "source": [ + "## 1. The toy survey\n", + "\n", + "Ten households split across two districts (`A` and `B`). Each household has a design\n", + "weight of `100`, a household size, an adult/child breakdown, and a household income.\n", + "The design weights, summed, represent 1000 households nationally." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9c97b4d8", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.088038Z", + "iopub.status.busy": "2026-04-22T10:29:54.087901Z", + "iopub.status.idle": "2026-04-22T10:29:54.094804Z", + "shell.execute_reply": "2026-04-22T10:29:54.094581Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictn_adultsn_childrenincomedesign_weighthh_size
01A2030000100.02
12A2260000100.04
23A1025000100.01
34A2145000100.03
45A2070000100.02
56B2340000100.05
67B1120000100.02
78B2180000100.03
89B3190000100.04
910B1015000100.01
\n", + "
" + ], + "text/plain": [ + " hh_id district n_adults n_children income design_weight hh_size\n", + "0 1 A 2 0 30000 100.0 2\n", + "1 2 A 2 2 60000 100.0 4\n", + "2 3 A 1 0 25000 100.0 1\n", + "3 4 A 2 1 45000 100.0 3\n", + "4 5 A 2 0 70000 100.0 2\n", + "5 6 B 2 3 40000 100.0 5\n", + "6 7 B 1 1 20000 100.0 2\n", + "7 8 B 2 1 80000 100.0 3\n", + "8 9 B 3 1 90000 100.0 4\n", + "9 10 B 1 0 15000 100.0 1" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HOUSEHOLDS" + ] + }, + { + "cell_type": "markdown", + "id": "05de5230", + "metadata": {}, + "source": [ + "## 2. Targets\n", + "\n", + "We want to calibrate to eight administrative totals: four per district covering household\n", + "count, adults, children, and total household income. The baseline column shows where the\n", + "design weights land before calibration." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0426309d", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.095989Z", + "iopub.status.busy": "2026-04-22T10:29:54.095918Z", + "iopub.status.idle": "2026-04-22T10:29:54.106231Z", + "shell.execute_reply": "2026-04-22T10:29:54.106008Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_nametarget_valuebaseline_weighted_total
0district_A_households520.0500.0
1district_A_adults940.0900.0
2district_A_children310.0300.0
3district_A_income23500000.023000000.0
4district_B_households480.0500.0
5district_B_adults1000.0900.0
6district_B_children600.0600.0
7district_B_income25000000.024500000.0
\n", + "
" + ], + "text/plain": [ + " target_name target_value baseline_weighted_total\n", + "0 district_A_households 520.0 500.0\n", + "1 district_A_adults 940.0 900.0\n", + "2 district_A_children 310.0 300.0\n", + "3 district_A_income 23500000.0 23000000.0\n", + "4 district_B_households 480.0 500.0\n", + "5 district_B_adults 1000.0 900.0\n", + "6 district_B_children 600.0 600.0\n", + "7 district_B_income 25000000.0 24500000.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hh = household_table_with_coefficients()\n", + "base_w = hh[\"design_weight\"].to_numpy(dtype=np.float64)\n", + "X = build_target_matrix(hh, TARGETS)\n", + "\n", + "baseline_df = pd.DataFrame(\n", + " {\n", + " \"target_name\": TARGETS[\"target_name\"],\n", + " \"target_value\": TARGETS[\"value\"].astype(float),\n", + " \"baseline_weighted_total\": X @ base_w,\n", + " }\n", + ")\n", + "baseline_df" + ] + }, + { + "cell_type": "markdown", + "id": "7b3731d6", + "metadata": {}, + "source": [ + "## 3. Input format 1/3 — the `(n_targets, n_units)` matrix `X`\n", + "\n", + "Each row of `X` is one target; each column is one household. Entry `X[t, i]` is \"how\n", + "much household `i` would contribute to target `t` if its fitted weight were `1`\".\n", + "\n", + "In the benchmark scaffold this matrix is held in [Matrix Market](https://math.nist.gov/MatrixMarket/)\n", + "format (`.mtx`) so the R runner can read it sparsely via `Matrix::readMM`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "701a7ffa", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.107415Z", + "iopub.status.busy": "2026-04-22T10:29:54.107338Z", + "iopub.status.idle": "2026-04-22T10:29:54.113255Z", + "shell.execute_reply": "2026-04-22T10:29:54.113049Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_1hh_2hh_3hh_4hh_5hh_6hh_7hh_8hh_9hh_10
target_name
district_A_households1.01.01.01.01.00.00.00.00.00.0
district_A_adults2.02.01.02.02.00.00.00.00.00.0
district_A_children0.02.00.01.00.00.00.00.00.00.0
district_A_income30000.060000.025000.045000.070000.00.00.00.00.00.0
district_B_households0.00.00.00.00.01.01.01.01.01.0
district_B_adults0.00.00.00.00.02.01.02.03.01.0
district_B_children0.00.00.00.00.03.01.01.01.00.0
district_B_income0.00.00.00.00.040000.020000.080000.090000.015000.0
\n", + "
" + ], + "text/plain": [ + " hh_1 hh_2 hh_3 hh_4 hh_5 hh_6 \\\n", + "target_name \n", + "district_A_households 1.0 1.0 1.0 1.0 1.0 0.0 \n", + "district_A_adults 2.0 2.0 1.0 2.0 2.0 0.0 \n", + "district_A_children 0.0 2.0 0.0 1.0 0.0 0.0 \n", + "district_A_income 30000.0 60000.0 25000.0 45000.0 70000.0 0.0 \n", + "district_B_households 0.0 0.0 0.0 0.0 0.0 1.0 \n", + "district_B_adults 0.0 0.0 0.0 0.0 0.0 2.0 \n", + "district_B_children 0.0 0.0 0.0 0.0 0.0 3.0 \n", + "district_B_income 0.0 0.0 0.0 0.0 0.0 40000.0 \n", + "\n", + " hh_7 hh_8 hh_9 hh_10 \n", + "target_name \n", + "district_A_households 0.0 0.0 0.0 0.0 \n", + "district_A_adults 0.0 0.0 0.0 0.0 \n", + "district_A_children 0.0 0.0 0.0 0.0 \n", + "district_A_income 0.0 0.0 0.0 0.0 \n", + "district_B_households 1.0 1.0 1.0 1.0 \n", + "district_B_adults 1.0 2.0 3.0 1.0 \n", + "district_B_children 1.0 1.0 1.0 0.0 \n", + "district_B_income 20000.0 80000.0 90000.0 15000.0 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_df = pd.DataFrame(\n", + " X,\n", + " index=TARGETS[\"target_name\"],\n", + " columns=[f\"hh_{i}\" for i in HOUSEHOLDS[\"hh_id\"]],\n", + ")\n", + "X_df" + ] + }, + { + "cell_type": "markdown", + "id": "37917e5c", + "metadata": {}, + "source": [ + "## 4. Input format 2/3 — target metadata\n", + "\n", + "A CSV with one row per target. GREG only needs the `value` column; the `target_name`\n", + "column is carried through for diagnostics. In the production benchmark this file also\n", + "carries geography and target-family columns used by the scaffold's filtering logic." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5d6d8d89", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.114281Z", + "iopub.status.busy": "2026-04-22T10:29:54.114212Z", + "iopub.status.idle": "2026-04-22T10:29:54.117336Z", + "shell.execute_reply": "2026-04-22T10:29:54.117109Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_namevalue
0district_A_households520.0
1district_A_adults940.0
2district_A_children310.0
3district_A_income23500000.0
4district_B_households480.0
5district_B_adults1000.0
6district_B_children600.0
7district_B_income25000000.0
\n", + "
" + ], + "text/plain": [ + " target_name value\n", + "0 district_A_households 520.0\n", + "1 district_A_adults 940.0\n", + "2 district_A_children 310.0\n", + "3 district_A_income 23500000.0\n", + "4 district_B_households 480.0\n", + "5 district_B_adults 1000.0\n", + "6 district_B_children 600.0\n", + "7 district_B_income 25000000.0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "target_metadata = pd.DataFrame(\n", + " {\n", + " \"target_name\": TARGETS[\"target_name\"],\n", + " \"value\": TARGETS[\"value\"].astype(float),\n", + " }\n", + ")\n", + "target_metadata" + ] + }, + { + "cell_type": "markdown", + "id": "0dd15424", + "metadata": {}, + "source": [ + "## 5. Input format 3/3 — initial weights\n", + "\n", + "A plain `.npy` array with one entry per unit. GREG will scale each entry up or down to\n", + "meet the targets." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d9568fd2", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.118341Z", + "iopub.status.busy": "2026-04-22T10:29:54.118271Z", + "iopub.status.idle": "2026-04-22T10:29:54.120286Z", + "shell.execute_reply": "2026-04-22T10:29:54.120032Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([100., 100., 100., 100., 100., 100., 100., 100., 100., 100.])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_weights = HOUSEHOLDS[\"design_weight\"].to_numpy(dtype=np.float64)\n", + "initial_weights" + ] + }, + { + "cell_type": "markdown", + "id": "9970f7ef", + "metadata": {}, + "source": [ + "## 6. Write the bundle and invoke the R runner\n", + "\n", + "The R runner lives at `paper-l0/benchmarking/runners/greg_runner.R`. It is a thin wrapper\n", + "around `survey::grake` with `cal.linear` (classical GREG). We call it as a subprocess so\n", + "this notebook can be run from Python." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f243a04f", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.121387Z", + "iopub.status.busy": "2026-04-22T10:29:54.121318Z", + "iopub.status.idle": "2026-04-22T10:29:54.877325Z", + "shell.execute_reply": "2026-04-22T10:29:54.876992Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "return code: 0\n" + ] + }, + { + "data": { + "text/plain": [ + "['X_targets_by_units.mtx',\n", + " 'fitted_weights.csv',\n", + " 'initial_weights.npy',\n", + " 'target_metadata.csv']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tmp = Path(tempfile.mkdtemp(prefix=\"greg_toy_\"))\n", + "\n", + "mmwrite(str(tmp / \"X_targets_by_units.mtx\"), csr_matrix(X))\n", + "target_metadata.to_csv(tmp / \"target_metadata.csv\", index=False)\n", + "np.save(tmp / \"initial_weights.npy\", initial_weights)\n", + "\n", + "out_csv = tmp / \"fitted_weights.csv\"\n", + "\n", + "cmd = [\n", + " \"Rscript\",\n", + " str(GREG_RUNNER),\n", + " str(tmp / \"X_targets_by_units.mtx\"),\n", + " str(tmp / \"target_metadata.csv\"),\n", + " str(tmp / \"initial_weights.npy\"),\n", + " str(out_csv),\n", + " \"200\", # maxit\n", + " \"1e-7\", # epsilon\n", + "]\n", + "proc = subprocess.run(cmd, capture_output=True, text=True)\n", + "print(\"return code:\", proc.returncode)\n", + "if proc.returncode != 0:\n", + " print(\"STDERR:\\n\", proc.stderr)\n", + "sorted(p.name for p in tmp.iterdir())" + ] + }, + { + "cell_type": "markdown", + "id": "92601777", + "metadata": {}, + "source": [ + "## 7. Output — fitted weights\n", + "\n", + "The runner writes a two-column CSV (`unit_index`, `fitted_weight`). The benchmark CLI\n", + "immediately converts that to a `.npy` at the per-unit level; we do the same here for\n", + "symmetry with the IPF notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "10bddbe0", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.878793Z", + "iopub.status.busy": "2026-04-22T10:29:54.878683Z", + "iopub.status.idle": "2026-04-22T10:29:54.885418Z", + "shell.execute_reply": "2026-04-22T10:29:54.885215Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictdesign_weightfitted_weightratio_to_design
01A100.0116.8751.16875
12A100.0100.6251.00625
23A100.0100.0001.00000
34A100.0108.7501.08750
45A100.093.7500.93750
56B100.0120.5001.20500
67B100.046.5000.46500
78B100.0-15.500-0.15500
89B100.0207.5002.07500
910B100.0121.0001.21000
\n", + "
" + ], + "text/plain": [ + " hh_id district design_weight fitted_weight ratio_to_design\n", + "0 1 A 100.0 116.875 1.16875\n", + "1 2 A 100.0 100.625 1.00625\n", + "2 3 A 100.0 100.000 1.00000\n", + "3 4 A 100.0 108.750 1.08750\n", + "4 5 A 100.0 93.750 0.93750\n", + "5 6 B 100.0 120.500 1.20500\n", + "6 7 B 100.0 46.500 0.46500\n", + "7 8 B 100.0 -15.500 -0.15500\n", + "8 9 B 100.0 207.500 2.07500\n", + "9 10 B 100.0 121.000 1.21000" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fitted_df = pd.read_csv(out_csv)\n", + "fitted_weights = fitted_df[\"fitted_weight\"].to_numpy(dtype=np.float64)\n", + "weights_view = pd.DataFrame(\n", + " {\n", + " \"hh_id\": HOUSEHOLDS[\"hh_id\"],\n", + " \"district\": HOUSEHOLDS[\"district\"],\n", + " \"design_weight\": initial_weights,\n", + " \"fitted_weight\": fitted_weights,\n", + " \"ratio_to_design\": fitted_weights / initial_weights,\n", + " }\n", + ")\n", + "weights_view" + ] + }, + { + "cell_type": "markdown", + "id": "2926226c", + "metadata": {}, + "source": [ + "## 8. Did we hit the targets?\n", + "\n", + "Compare the weighted totals under the fitted weights against the declared target values." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "22253313", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.886473Z", + "iopub.status.busy": "2026-04-22T10:29:54.886395Z", + "iopub.status.idle": "2026-04-22T10:29:54.931192Z", + "shell.execute_reply": "2026-04-22T10:29:54.930895Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 target_nametarget_valuebaseline_weighted_totalfitted_weighted_totalabs_rel_error
0district_A_households520.0500.0520.03.61e-13
1district_A_adults940.0900.0940.03.23e-13
2district_A_children310.0300.0310.01.26e-13
3district_A_income23,500,000.023,000,000.023,500,000.03.52e-14
4district_B_households480.0500.0480.05.65e-11
5district_B_adults1,000.0900.01,000.02.09e-11
6district_B_children600.0600.0600.02.18e-11
7district_B_income25,000,000.024,500,000.025,000,000.02.07e-11
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diagnostic_table(hh, TARGETS, fitted_weights).style.format(\n", + " {\n", + " \"target_value\": \"{:,.1f}\",\n", + " \"baseline_weighted_total\": \"{:,.1f}\",\n", + " \"fitted_weighted_total\": \"{:,.1f}\",\n", + " \"abs_rel_error\": \"{:.2e}\",\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0d5fa748", + "metadata": {}, + "source": [ + "## 9. Known pathology — negative weights\n", + "\n", + "With `cal.linear`, GREG imposes no sign constraint on the fitted weights. On a small,\n", + "tightly-constrained problem like this one it can drive individual weights negative. The\n", + "`survey` package supports logit / raking variants to avoid this, but those variants\n", + "introduce their own trade-offs and do not cleanly generalize to the full subnational\n", + "calibration problem. In the paper this is discussed as one of the limitations of GREG\n", + "at production scale." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "cd7fb43c", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T10:29:54.932519Z", + "iopub.status.busy": "2026-04-22T10:29:54.932430Z", + "iopub.status.idle": "2026-04-22T10:29:54.937006Z", + "shell.execute_reply": "2026-04-22T10:29:54.936786Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Negative-weight units: 1\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictdesign_weightfitted_weightratio_to_design
78B100.0-15.5-0.155
\n", + "
" + ], + "text/plain": [ + " hh_id district design_weight fitted_weight ratio_to_design\n", + "7 8 B 100.0 -15.5 -0.155" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_negative = int((fitted_weights < 0).sum())\n", + "print(f\"Negative-weight units: {n_negative}\")\n", + "weights_view[weights_view[\"fitted_weight\"] < 0]" + ] + }, + { + "cell_type": "markdown", + "id": "2ed96e52", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "Inputs to the GREG runner:\n", + "\n", + "| Artifact | Format | Shape |\n", + "| --- | --- | --- |\n", + "| `X_targets_by_units.mtx` | Matrix Market sparse | `(n_targets, n_units)` |\n", + "| `target_metadata.csv` | CSV with a `value` column | `n_targets` rows |\n", + "| `initial_weights.npy` | float64 array | `n_units` |\n", + "\n", + "Output of the GREG runner:\n", + "\n", + "| Artifact | Format | Shape |\n", + "| --- | --- | --- |\n", + "| `fitted_weights.csv` | CSV (`unit_index`, `fitted_weight`) | `n_units` rows |\n", + "\n", + "Next notebook: `02_ipf_walkthrough.ipynb` — same toy data, but through the IPF runner,\n", + "which needs a very different input representation." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pe3.13 (3.13.0)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb b/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb new file mode 100644 index 000000000..40e1f4b40 --- /dev/null +++ b/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb @@ -0,0 +1,2389 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "52f383f9", + "metadata": {}, + "source": [ + "# IPF walkthrough: raking via R's `surveysd` package\n", + "\n", + "This notebook is the companion to `01_greg_walkthrough.ipynb`. It runs the same toy\n", + "survey through the IPF runner that sits in `paper-l0/benchmarking/runners/ipf_runner.R`.\n", + "The focus is the input and output formats IPF requires, which look very different from\n", + "GREG's because IPF is structurally not a generic-linear-system method.\n", + "\n", + "IPF (Iterative Proportional Fitting, a.k.a. raking) adjusts unit weights so that the\n", + "weighted *counts* of a set of cross-tabulated categories match known population totals.\n", + "It works on categorical or indicator margins, not on arbitrary linear combinations of\n", + "unit attributes. This shows up as two concrete limitations in our benchmark:\n", + "\n", + "1. Targets must be count-like. Dollar totals such as `district_A_income` cannot be\n", + " calibrated with classical IPF and are dropped from this tier.\n", + "2. The input is a unit-record table with category columns plus a target table that\n", + " lists each margin cell, not a sparse `(n_targets, n_units)` matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "58b0ecc8", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:55.818351Z", + "iopub.status.busy": "2026-04-22T15:52:55.817976Z", + "iopub.status.idle": "2026-04-22T15:52:57.713782Z", + "shell.execute_reply": "2026-04-22T15:52:57.712543Z" + } + }, + "outputs": [], + "source": [ + "import subprocess\n", + "import tempfile\n", + "from pathlib import Path\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from toy_data import (\n", + " HOUSEHOLDS,\n", + " TARGETS,\n", + " diagnostic_table,\n", + " household_table_with_coefficients,\n", + ")\n", + "\n", + "NOTEBOOK_DIR = Path().resolve()\n", + "IPF_RUNNER = NOTEBOOK_DIR.parent / \"runners\" / \"ipf_runner.R\"\n", + "assert IPF_RUNNER.exists(), IPF_RUNNER" + ] + }, + { + "cell_type": "markdown", + "id": "7ba5d741", + "metadata": {}, + "source": [ + "## 1. The toy survey (same as the GREG walkthrough)\n", + "\n", + "Ten households across two districts with adult/child breakdowns and household incomes.\n", + "The design weight is 100 for every household." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "942aa620", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.731752Z", + "iopub.status.busy": "2026-04-22T15:52:57.730813Z", + "iopub.status.idle": "2026-04-22T15:52:57.756288Z", + "shell.execute_reply": "2026-04-22T15:52:57.755107Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictn_adultsn_childrenincomedesign_weighthh_size
01A2030000100.02
12A2260000100.04
23A1025000100.01
34A2145000100.03
45A2070000100.02
56B2340000100.05
67B1120000100.02
78B2180000100.03
89B3190000100.04
910B1015000100.01
\n", + "
" + ], + "text/plain": [ + " hh_id district n_adults n_children income design_weight hh_size\n", + "0 1 A 2 0 30000 100.0 2\n", + "1 2 A 2 2 60000 100.0 4\n", + "2 3 A 1 0 25000 100.0 1\n", + "3 4 A 2 1 45000 100.0 3\n", + "4 5 A 2 0 70000 100.0 2\n", + "5 6 B 2 3 40000 100.0 5\n", + "6 7 B 1 1 20000 100.0 2\n", + "7 8 B 2 1 80000 100.0 3\n", + "8 9 B 3 1 90000 100.0 4\n", + "9 10 B 1 0 15000 100.0 1" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HOUSEHOLDS" + ] + }, + { + "cell_type": "markdown", + "id": "09a679e5", + "metadata": {}, + "source": [ + "## 2. Target set — IPF-eligible subset\n", + "\n", + "The GREG walkthrough calibrates eight targets, four per district. Of those, only\n", + "**six** are count-style and therefore runnable through classical IPF: adults and children\n", + "in each district, plus a household-level total in each district. The two `_income`\n", + "targets are dollar magnitudes and are dropped here.\n", + "\n", + "For this walkthrough we stay with the person-level count targets only and use them to\n", + "build a single categorical margin over a `district_role` factor. Household counts would\n", + "require a separate household-level margin, which the `ipf_runner.R` supports, but we\n", + "skip them in the demo to keep the narrative concentrated on one margin construction." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7473b3bb", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.767375Z", + "iopub.status.busy": "2026-04-22T15:52:57.766686Z", + "iopub.status.idle": "2026-04-22T15:52:57.781093Z", + "shell.execute_reply": "2026-04-22T15:52:57.780513Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_namecell_labeltarget_value
0district_A_adultsA_adult940.0
1district_A_childrenA_child310.0
2district_B_adultsB_adult1000.0
3district_B_childrenB_child600.0
\n", + "
" + ], + "text/plain": [ + " target_name cell_label target_value\n", + "0 district_A_adults A_adult 940.0\n", + "1 district_A_children A_child 310.0\n", + "2 district_B_adults B_adult 1000.0\n", + "3 district_B_children B_child 600.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ipf_target_specs = pd.DataFrame(\n", + " [\n", + " (\"district_A_adults\", \"A_adult\", 940.0),\n", + " (\"district_A_children\", \"A_child\", 310.0),\n", + " (\"district_B_adults\", \"B_adult\", 1000.0),\n", + " (\"district_B_children\", \"B_child\", 600.0),\n", + " ],\n", + " columns=[\"target_name\", \"cell_label\", \"target_value\"],\n", + ")\n", + "ipf_target_specs" + ] + }, + { + "cell_type": "markdown", + "id": "d196b0b2", + "metadata": {}, + "source": [ + "## 3. Input format 1/3 — a unit-record microdata table\n", + "\n", + "IPF consumes one row per *observation* in the dimension of the constraints. Because our\n", + "targets are person-level counts, we expand the ten households into 27 person-level rows.\n", + "Every person in the same household keeps the same `unit_index` and the same\n", + "`base_weight`, so the fitted weights collapse cleanly back to one weight per household\n", + "after the IPF run.\n", + "\n", + "The key column is `district_role`, a categorical that combines district and role. IPF\n", + "will read the target margin against this column." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a38a3df8", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.785356Z", + "iopub.status.busy": "2026-04-22T15:52:57.785050Z", + "iopub.status.idle": "2026-04-22T15:52:57.816369Z", + "shell.execute_reply": "2026-04-22T15:52:57.815478Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictroleunit_indexhousehold_iddistrict_rolebase_weight
01Aadult01A_adult100.0
11Aadult01A_adult100.0
22Aadult12A_adult100.0
32Aadult12A_adult100.0
42Achild12A_child100.0
52Achild12A_child100.0
63Aadult23A_adult100.0
74Aadult34A_adult100.0
84Aadult34A_adult100.0
94Achild34A_child100.0
\n", + "
" + ], + "text/plain": [ + " hh_id district role unit_index household_id district_role base_weight\n", + "0 1 A adult 0 1 A_adult 100.0\n", + "1 1 A adult 0 1 A_adult 100.0\n", + "2 2 A adult 1 2 A_adult 100.0\n", + "3 2 A adult 1 2 A_adult 100.0\n", + "4 2 A child 1 2 A_child 100.0\n", + "5 2 A child 1 2 A_child 100.0\n", + "6 3 A adult 2 3 A_adult 100.0\n", + "7 4 A adult 3 4 A_adult 100.0\n", + "8 4 A adult 3 4 A_adult 100.0\n", + "9 4 A child 3 4 A_child 100.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows = []\n", + "for _, r in HOUSEHOLDS.iterrows():\n", + " hid = int(r[\"hh_id\"])\n", + " for _ in range(int(r[\"n_adults\"])):\n", + " rows.append({\"hh_id\": hid, \"district\": r[\"district\"], \"role\": \"adult\"})\n", + " for _ in range(int(r[\"n_children\"])):\n", + " rows.append({\"hh_id\": hid, \"district\": r[\"district\"], \"role\": \"child\"})\n", + "\n", + "persons = pd.DataFrame(rows)\n", + "persons[\"unit_index\"] = persons[\"hh_id\"] - 1 # 0-indexed household clone id\n", + "persons[\"household_id\"] = persons[\"hh_id\"] # surveysd::ipf 'hid' column\n", + "persons[\"district_role\"] = persons[\"district\"] + \"_\" + persons[\"role\"]\n", + "persons[\"base_weight\"] = persons[\"hh_id\"].map(\n", + " dict(zip(HOUSEHOLDS[\"hh_id\"], HOUSEHOLDS[\"design_weight\"]))\n", + ")\n", + "persons.head(10)" + ] + }, + { + "cell_type": "markdown", + "id": "d6f1495f", + "metadata": {}, + "source": [ + "The `unit_index` column matters: `ipf_runner.R` uses it to collapse per-person weights\n", + "back to per-unit weights. All persons sharing an `unit_index` must end the IPF run with\n", + "the same fitted weight; the runner enforces this and errors otherwise. (surveysd's\n", + "default `meanHH = TRUE` guarantees it.)" + ] + }, + { + "cell_type": "markdown", + "id": "0d1d21de", + "metadata": {}, + "source": [ + "## 4. Input format 2/3 — target metadata\n", + "\n", + "The IPF runner supports two encodings in `ipf_target_metadata.csv`:\n", + "\n", + "- `numeric_total` rows, each pointing to an indicator column on the unit table. This is\n", + " what `ipf_conversion.py` auto-generates from the saved calibration package.\n", + "- `categorical_margin` rows, one per cell of a margin table. Rows with the same\n", + " `margin_id` are grouped into a single surveysd constraint.\n", + "\n", + "For a clean textbook-style IPF demo we write the targets as four `categorical_margin`\n", + "rows over a single `district_role` margin." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7b01aae8", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.820513Z", + "iopub.status.busy": "2026-04-22T15:52:57.820253Z", + "iopub.status.idle": "2026-04-22T15:52:57.838627Z", + "shell.execute_reply": "2026-04-22T15:52:57.837691Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
margin_idscopetarget_typevariablescelltarget_valuetarget_name
0margin_rolepersoncategorical_margindistrict_roledistrict_role=A_adult940.0district_A_adults
1margin_rolepersoncategorical_margindistrict_roledistrict_role=A_child310.0district_A_children
2margin_rolepersoncategorical_margindistrict_roledistrict_role=B_adult1000.0district_B_adults
3margin_rolepersoncategorical_margindistrict_roledistrict_role=B_child600.0district_B_children
\n", + "
" + ], + "text/plain": [ + " margin_id scope target_type variables \\\n", + "0 margin_role person categorical_margin district_role \n", + "1 margin_role person categorical_margin district_role \n", + "2 margin_role person categorical_margin district_role \n", + "3 margin_role person categorical_margin district_role \n", + "\n", + " cell target_value target_name \n", + "0 district_role=A_adult 940.0 district_A_adults \n", + "1 district_role=A_child 310.0 district_A_children \n", + "2 district_role=B_adult 1000.0 district_B_adults \n", + "3 district_role=B_child 600.0 district_B_children " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ipf_targets = pd.DataFrame(\n", + " {\n", + " \"margin_id\": [\"margin_role\"] * 4,\n", + " \"scope\": [\"person\"] * 4,\n", + " \"target_type\": [\"categorical_margin\"] * 4,\n", + " \"variables\": [\"district_role\"] * 4,\n", + " \"cell\": [f\"district_role={c}\" for c in ipf_target_specs[\"cell_label\"]],\n", + " \"target_value\": ipf_target_specs[\"target_value\"].astype(float),\n", + " \"target_name\": ipf_target_specs[\"target_name\"], # carried for diagnostics only\n", + " }\n", + ")\n", + "ipf_targets" + ] + }, + { + "cell_type": "markdown", + "id": "d5e14a28", + "metadata": {}, + "source": [ + "## 5. Input format 3/3 — initial weights\n", + "\n", + "Same `.npy` format as GREG: one weight per unit. Unit index here is the 0-indexed\n", + "household clone, so the vector has length 10 even though the unit table has 27 rows." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b8bbecff", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.843331Z", + "iopub.status.busy": "2026-04-22T15:52:57.843045Z", + "iopub.status.idle": "2026-04-22T15:52:57.847716Z", + "shell.execute_reply": "2026-04-22T15:52:57.847077Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([100., 100., 100., 100., 100., 100., 100., 100., 100., 100.])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_weights = HOUSEHOLDS[\"design_weight\"].to_numpy(dtype=np.float64)\n", + "initial_weights" + ] + }, + { + "cell_type": "markdown", + "id": "12676e8e", + "metadata": {}, + "source": [ + "## 6. Write the bundle and invoke the R runner\n", + "\n", + "The IPF runner signature is longer than GREG's because surveysd exposes more convergence\n", + "knobs. The ones that matter for a small problem like this one:\n", + "\n", + "| argument | meaning | our choice |\n", + "| --- | --- | --- |\n", + "| `max_iter` | hard iteration cap | `5000` |\n", + "| `bound` | per-step weight change limit | `10.0` |\n", + "| `epsP` | person-constraint tolerance | `1e-4` |\n", + "| `epsH` | household-constraint tolerance | `1e-2` |\n", + "| `household_id_col` | hid column in the unit table | `household_id` |\n", + "| `weight_col` | base weight column | `base_weight` |" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a05a01ee", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:57.850576Z", + "iopub.status.busy": "2026-04-22T15:52:57.850350Z", + "iopub.status.idle": "2026-04-22T15:52:59.988165Z", + "shell.execute_reply": "2026-04-22T15:52:59.986772Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "return code: 0\n" + ] + }, + { + "data": { + "text/plain": [ + "['fitted_weights.csv',\n", + " 'initial_weights.npy',\n", + " 'ipf_target_metadata.csv',\n", + " 'unit_metadata.csv']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tmp = Path(tempfile.mkdtemp(prefix=\"ipf_toy_\"))\n", + "\n", + "persons_cols = [\n", + " \"unit_index\",\n", + " \"household_id\",\n", + " \"district\",\n", + " \"role\",\n", + " \"district_role\",\n", + " \"base_weight\",\n", + "]\n", + "persons[persons_cols].to_csv(tmp / \"unit_metadata.csv\", index=False)\n", + "ipf_targets.to_csv(tmp / \"ipf_target_metadata.csv\", index=False)\n", + "np.save(tmp / \"initial_weights.npy\", initial_weights)\n", + "\n", + "out_csv = tmp / \"fitted_weights.csv\"\n", + "cmd = [\n", + " \"Rscript\",\n", + " str(IPF_RUNNER),\n", + " str(tmp / \"unit_metadata.csv\"),\n", + " str(tmp / \"ipf_target_metadata.csv\"),\n", + " str(tmp / \"initial_weights.npy\"),\n", + " str(out_csv),\n", + " \"5000\", # max_iter\n", + " \"10.0\", # bound\n", + " \"1e-4\", # epsP\n", + " \"1e-2\", # epsH\n", + " \"household_id\",\n", + " \"base_weight\",\n", + "]\n", + "proc = subprocess.run(cmd, capture_output=True, text=True)\n", + "print(\"return code:\", proc.returncode)\n", + "if proc.returncode != 0:\n", + " print(\"STDERR:\\n\", proc.stderr)\n", + "sorted(p.name for p in tmp.iterdir())" + ] + }, + { + "cell_type": "markdown", + "id": "5443c219", + "metadata": {}, + "source": [ + "## 7. Output — per-row fitted weights, collapsed to per-unit\n", + "\n", + "The IPF runner writes one row per person in `fitted_weights.csv`, keyed by `unit_index`.\n", + "Because surveysd enforces equal weights within each household (`meanHH = TRUE`), we can\n", + "take the first row per `unit_index` as the per-household fitted weight. This collapse\n", + "step is exactly what `benchmark_cli.py._run_ipf` does in production." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a55772a1", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:52:59.993937Z", + "iopub.status.busy": "2026-04-22T15:52:59.993551Z", + "iopub.status.idle": "2026-04-22T15:53:00.020116Z", + "shell.execute_reply": "2026-04-22T15:53:00.019300Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows returned by IPF (one per person): 27\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hh_iddistrictdesign_weightfitted_weightratio_to_design
01A100.0105.2386871.052387
12A100.0103.0967261.030967
23A100.0105.2386871.052387
34A100.0103.8065531.038066
45A100.0105.2386871.052387
56B100.090.8067900.908068
67B100.098.0136830.980137
78B100.0111.2108081.112108
89B100.0118.4086741.184087
910B100.0142.6715641.426716
\n", + "
" + ], + "text/plain": [ + " hh_id district design_weight fitted_weight ratio_to_design\n", + "0 1 A 100.0 105.238687 1.052387\n", + "1 2 A 100.0 103.096726 1.030967\n", + "2 3 A 100.0 105.238687 1.052387\n", + "3 4 A 100.0 103.806553 1.038066\n", + "4 5 A 100.0 105.238687 1.052387\n", + "5 6 B 100.0 90.806790 0.908068\n", + "6 7 B 100.0 98.013683 0.980137\n", + "7 8 B 100.0 111.210808 1.112108\n", + "8 9 B 100.0 118.408674 1.184087\n", + "9 10 B 100.0 142.671564 1.426716" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw = pd.read_csv(out_csv)\n", + "raw[\"unit_index\"] = raw[\"unit_index\"].astype(int)\n", + "\n", + "print(\"rows returned by IPF (one per person):\", len(raw))\n", + "per_unit = (\n", + " raw.groupby(\"unit_index\", sort=True)[\"fitted_weight\"]\n", + " .first()\n", + " .reindex(np.arange(len(HOUSEHOLDS), dtype=np.int64))\n", + ")\n", + "fitted_weights = per_unit.to_numpy(dtype=np.float64)\n", + "\n", + "weights_view = pd.DataFrame(\n", + " {\n", + " \"hh_id\": HOUSEHOLDS[\"hh_id\"],\n", + " \"district\": HOUSEHOLDS[\"district\"],\n", + " \"design_weight\": initial_weights,\n", + " \"fitted_weight\": fitted_weights,\n", + " \"ratio_to_design\": fitted_weights / initial_weights,\n", + " }\n", + ")\n", + "weights_view" + ] + }, + { + "cell_type": "markdown", + "id": "50394ac8", + "metadata": {}, + "source": [ + "## 8. Did we hit the person-count targets?\n", + "\n", + "We diagnose only the four person-level count targets IPF was actually asked to fit.\n", + "The household-count and income targets that GREG received are outside IPF's natural\n", + "scope and are excluded from this diagnostic." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "79f26958", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:00.022698Z", + "iopub.status.busy": "2026-04-22T15:53:00.022525Z", + "iopub.status.idle": "2026-04-22T15:53:00.131161Z", + "shell.execute_reply": "2026-04-22T15:53:00.130561Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 target_nametarget_valuebaseline_weighted_totalfitted_weighted_totalabs_rel_error
0district_A_adults940.0900.0940.06.07e-09
1district_A_children310.0300.0310.01.84e-08
2district_B_adults1,000.0900.0999.95.35e-05
3district_B_children600.0600.0600.18.92e-05
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ipf_scored_targets = TARGETS[\n", + " TARGETS[\"target_name\"].isin(ipf_target_specs[\"target_name\"])\n", + "].reset_index(drop=True)\n", + "diagnostic_table(\n", + " household_table_with_coefficients(),\n", + " ipf_scored_targets,\n", + " fitted_weights,\n", + ").style.format(\n", + " {\n", + " \"target_value\": \"{:,.1f}\",\n", + " \"baseline_weighted_total\": \"{:,.1f}\",\n", + " \"fitted_weighted_total\": \"{:,.1f}\",\n", + " \"abs_rel_error\": \"{:.2e}\",\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9560723f", + "metadata": {}, + "source": [ + "## 9. Known pathology — targets that IPF cannot accept\n", + "\n", + "What classical IPF *cannot* do on this same toy survey:\n", + "\n", + "- **`district_A_income` and `district_B_income`** — these are dollar totals, not cell\n", + " counts. surveysd's raking expects margin structure, not arbitrary linear-combination\n", + " targets. We drop them in this walkthrough.\n", + "- **Targets over unit-level attributes that cross household/person boundaries** — mixing\n", + " these with person-level count margins needs care because `meanHH = TRUE` is what lets\n", + " us collapse person weights back to one per household.\n", + "\n", + "These are the core reasons the benchmark plan treats IPF as a *reference method on\n", + "count-style target subsets*, not a direct competitor to GREG or L0 on the full mixed\n", + "target set." + ] + }, + { + "cell_type": "markdown", + "id": "0ba12597", + "metadata": {}, + "source": [ + "## 10. How the benchmark scaffold produces these inputs from raw target constraints\n", + "\n", + "Sections 3-5 hand-built the unit table, the `district_role` category, and the margin rows directly. In production, those artifacts come out of `paper-l0/benchmarking/ipf_conversion.py`, which takes the **same `filtered_targets` DataFrame** that the GREG and L0 runners see — the manifest's `target_filters` controls target selection for all three methods — and internally drops anything IPF can't use. Two filters run inside the converter:\n", + "\n", + "1. **Count check.** Keep only targets whose `variable` is a supported count (`person_count`, `household_count`). Dollar-total targets and tax-unit / SPM-unit counts stay in the shared sparse matrix for GREG and L0 but are dropped here. `tax_unit_count` and `spm_unit_count` need a separate unit table keyed by the respective entity; left out of this pass.\n", + "2. **Resolver check.** For each surviving target, map its stratum constraints to a categorical cell label using declared bucket schemas:\n", + "\n", + " | variable | schema | cell labels |\n", + " | --- | --- | --- |\n", + " | `age` | 18 five-year buckets | `0-4`, `5-9`, …, `85+` |\n", + " | `adjusted_gross_income` (district) | 9 brackets | `(-inf,1)`, `[1,10k)`, …, `[500k,inf)` |\n", + " | `adjusted_gross_income` (state) | 10 brackets | extends district up to `[1M,inf)` |\n", + " | `eitc_child_count` | 4 discrete | `0`, `1`, `2`, `>2` |\n", + " | any dollar var used with `> 0` | binary | `positive`, `non_positive` (positive is capped at $15T so the cell is a closed bucket) |\n", + " | everything else with `==` | raw equality | the value itself |\n", + "\n", + " Targets whose constraints don't map to any declared schema are dropped.\n", + "\n", + "The survivors are grouped into margin blocks by constraint signature, single-cell-per-geo blocks get their complement cell synthesized from the baseline weighted count of the complement predicate, and the blocks are emitted as `categorical_margin` rows. Both drops are non-fatal — counts land on `target_metadata.attrs['dropped_targets']` so the caller can report them." + ] + }, + { + "cell_type": "markdown", + "id": "a31399a7", + "metadata": {}, + "source": [ + "### 10a. Input: a slice of `filtered_targets`\n", + "\n", + "The converter takes exactly the same DataFrame the GREG and L0 paths take. Below is a tiny illustrative slice including a mix of count-style and non-count targets so the count check is visible. Four person-count targets span age buckets in two districts; two household-count targets ask for `snap > 0` in each district (single-cell-per-geo — these will need complement synthesis); the remaining two rows are non-count targets that the count check will drop." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "2df63fc2", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:00.134922Z", + "iopub.status.busy": "2026-04-22T15:53:00.134679Z", + "iopub.status.idle": "2026-04-22T15:53:00.146923Z", + "shell.execute_reply": "2026-04-22T15:53:00.146243Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_idstratum_idvariablevaluetarget_name
011person_count210.0pc_age_0-4_d601
122person_count205.0pc_age_5-9_d601
233person_count200.0pc_age_0-4_d602
344person_count198.0pc_age_5-9_d602
455household_count80.0hh_snap_pos_d601
566household_count70.0hh_snap_pos_d602
675adjusted_gross_income12000000.0agi_total_d601
786tax_unit_count200.0tax_units_d601
\n", + "
" + ], + "text/plain": [ + " target_id stratum_id variable value target_name\n", + "0 1 1 person_count 210.0 pc_age_0-4_d601\n", + "1 2 2 person_count 205.0 pc_age_5-9_d601\n", + "2 3 3 person_count 200.0 pc_age_0-4_d602\n", + "3 4 4 person_count 198.0 pc_age_5-9_d602\n", + "4 5 5 household_count 80.0 hh_snap_pos_d601\n", + "5 6 6 household_count 70.0 hh_snap_pos_d602\n", + "6 7 5 adjusted_gross_income 12000000.0 agi_total_d601\n", + "7 8 6 tax_unit_count 200.0 tax_units_d601" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Mirror of what benchmark_manifest.filter_targets would produce for a small scope.\n", + "filtered_targets = pd.DataFrame(\n", + " [\n", + " {\n", + " \"target_id\": 1,\n", + " \"stratum_id\": 1,\n", + " \"variable\": \"person_count\",\n", + " \"value\": 210.0,\n", + " \"target_name\": \"pc_age_0-4_d601\",\n", + " },\n", + " {\n", + " \"target_id\": 2,\n", + " \"stratum_id\": 2,\n", + " \"variable\": \"person_count\",\n", + " \"value\": 205.0,\n", + " \"target_name\": \"pc_age_5-9_d601\",\n", + " },\n", + " {\n", + " \"target_id\": 3,\n", + " \"stratum_id\": 3,\n", + " \"variable\": \"person_count\",\n", + " \"value\": 200.0,\n", + " \"target_name\": \"pc_age_0-4_d602\",\n", + " },\n", + " {\n", + " \"target_id\": 4,\n", + " \"stratum_id\": 4,\n", + " \"variable\": \"person_count\",\n", + " \"value\": 198.0,\n", + " \"target_name\": \"pc_age_5-9_d602\",\n", + " },\n", + " {\n", + " \"target_id\": 5,\n", + " \"stratum_id\": 5,\n", + " \"variable\": \"household_count\",\n", + " \"value\": 80.0,\n", + " \"target_name\": \"hh_snap_pos_d601\",\n", + " },\n", + " {\n", + " \"target_id\": 6,\n", + " \"stratum_id\": 6,\n", + " \"variable\": \"household_count\",\n", + " \"value\": 70.0,\n", + " \"target_name\": \"hh_snap_pos_d602\",\n", + " },\n", + " # Non-count rows — dropped by the count check:\n", + " {\n", + " \"target_id\": 7,\n", + " \"stratum_id\": 5,\n", + " \"variable\": \"adjusted_gross_income\",\n", + " \"value\": 1.2e7,\n", + " \"target_name\": \"agi_total_d601\",\n", + " },\n", + " {\n", + " \"target_id\": 8,\n", + " \"stratum_id\": 6,\n", + " \"variable\": \"tax_unit_count\",\n", + " \"value\": 200.0,\n", + " \"target_name\": \"tax_units_d601\",\n", + " },\n", + " ]\n", + ")\n", + "filtered_targets" + ] + }, + { + "cell_type": "markdown", + "id": "d3b17f56", + "metadata": {}, + "source": [ + "Here are the stratum-constraint records for each of the six count-style targets (the remaining two rows have no bearing on the walkthrough because they'll be filtered out before resolution runs)." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "79cc71b9", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:00.150211Z", + "iopub.status.busy": "2026-04-22T15:53:00.149982Z", + "iopub.status.idle": "2026-04-22T15:53:00.163106Z", + "shell.execute_reply": "2026-04-22T15:53:00.162477Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stratum_idraw_constraints
01congressional_district_geoid==601; age>-1; age<5
12congressional_district_geoid==601; age>4; age<10
23congressional_district_geoid==602; age>-1; age<5
34congressional_district_geoid==602; age>4; age<10
45congressional_district_geoid==601; snap>0
56congressional_district_geoid==602; snap>0
\n", + "
" + ], + "text/plain": [ + " stratum_id raw_constraints\n", + "0 1 congressional_district_geoid==601; age>-1; age<5\n", + "1 2 congressional_district_geoid==601; age>4; age<10\n", + "2 3 congressional_district_geoid==602; age>-1; age<5\n", + "3 4 congressional_district_geoid==602; age>4; age<10\n", + "4 5 congressional_district_geoid==601; snap>0\n", + "5 6 congressional_district_geoid==602; snap>0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stratum_constraints = {\n", + " 1: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"601\"},\n", + " {\"variable\": \"age\", \"operation\": \">\", \"value\": \"-1\"},\n", + " {\"variable\": \"age\", \"operation\": \"<\", \"value\": \"5\"},\n", + " ],\n", + " 2: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"601\"},\n", + " {\"variable\": \"age\", \"operation\": \">\", \"value\": \"4\"},\n", + " {\"variable\": \"age\", \"operation\": \"<\", \"value\": \"10\"},\n", + " ],\n", + " 3: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"602\"},\n", + " {\"variable\": \"age\", \"operation\": \">\", \"value\": \"-1\"},\n", + " {\"variable\": \"age\", \"operation\": \"<\", \"value\": \"5\"},\n", + " ],\n", + " 4: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"602\"},\n", + " {\"variable\": \"age\", \"operation\": \">\", \"value\": \"4\"},\n", + " {\"variable\": \"age\", \"operation\": \"<\", \"value\": \"10\"},\n", + " ],\n", + " 5: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"601\"},\n", + " {\"variable\": \"snap\", \"operation\": \">\", \"value\": \"0\"},\n", + " ],\n", + " 6: [\n", + " {\"variable\": \"congressional_district_geoid\", \"operation\": \"==\", \"value\": \"602\"},\n", + " {\"variable\": \"snap\", \"operation\": \">\", \"value\": \"0\"},\n", + " ],\n", + "}\n", + "pd.DataFrame(\n", + " [\n", + " {\n", + " \"stratum_id\": sid,\n", + " \"raw_constraints\": \"; \".join(\n", + " f\"{c['variable']}{c['operation']}{c['value']}\" for c in cs\n", + " ),\n", + " }\n", + " for sid, cs in stratum_constraints.items()\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f38a89a6", + "metadata": {}, + "source": [ + "### 10b. The count check and the resolver check\n", + "\n", + "The converter keeps only `person_count` and `household_count` targets, then walks each surviving target, groups its constraints by variable, and matches them against the declared schemas. The result is one `ResolvedTarget` per surviving target, with a `cell` tuple listing the `(derived_column, cell_label)` pairs that identify the cell." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0180aac4", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:00.166735Z", + "iopub.status.busy": "2026-04-22T15:53:00.166460Z", + "iopub.status.idle": "2026-04-22T15:53:31.531154Z", + "shell.execute_reply": "2026-04-22T15:53:31.529991Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "count check: kept 6 / 8 targets; dropped 2: ['agi_total_d601', 'tax_units_d601']\n", + "resolver check: kept 6, dropped 0\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_namegeoderived_cellscopetarget_value
0pc_age_0-4_d601congressional_district_geoid=601age_bracket=0-4person210.0
1pc_age_5-9_d601congressional_district_geoid=601age_bracket=5-9person205.0
2pc_age_0-4_d602congressional_district_geoid=602age_bracket=0-4person200.0
3pc_age_5-9_d602congressional_district_geoid=602age_bracket=5-9person198.0
4hh_snap_pos_d601congressional_district_geoid=601snap_positive=positivehousehold80.0
5hh_snap_pos_d602congressional_district_geoid=602snap_positive=positivehousehold70.0
\n", + "
" + ], + "text/plain": [ + " target_name geo derived_cell \\\n", + "0 pc_age_0-4_d601 congressional_district_geoid=601 age_bracket=0-4 \n", + "1 pc_age_5-9_d601 congressional_district_geoid=601 age_bracket=5-9 \n", + "2 pc_age_0-4_d602 congressional_district_geoid=602 age_bracket=0-4 \n", + "3 pc_age_5-9_d602 congressional_district_geoid=602 age_bracket=5-9 \n", + "4 hh_snap_pos_d601 congressional_district_geoid=601 snap_positive=positive \n", + "5 hh_snap_pos_d602 congressional_district_geoid=602 snap_positive=positive \n", + "\n", + " scope target_value \n", + "0 person 210.0 \n", + "1 person 205.0 \n", + "2 person 200.0 \n", + "3 person 198.0 \n", + "4 household 80.0 \n", + "5 household 70.0 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import sys\n", + "\n", + "sys.path.insert(0, str(NOTEBOOK_DIR.parent))\n", + "from ipf_conversion import (\n", + " resolve_targets_for_testing,\n", + " assemble_margins_for_testing,\n", + " check_margin_consistency,\n", + " split_target_metadata_by_margin,\n", + " _SCOPE_BY_VARIABLE,\n", + " _materialize_derived_columns,\n", + " _should_synthesize_complement,\n", + " _synthesize_complement_cells,\n", + " _cell_assignments,\n", + " _complement_cell_assignments,\n", + ")\n", + "\n", + "# 1. Count check: keep only supported count-style target variables.\n", + "supported = set(_SCOPE_BY_VARIABLE.keys())\n", + "count_style = filtered_targets[\n", + " filtered_targets[\"variable\"].isin(supported)\n", + "].reset_index(drop=True)\n", + "dropped_non_count = filtered_targets[~filtered_targets[\"variable\"].isin(supported)]\n", + "print(\n", + " f\"count check: kept {len(count_style)} / {len(filtered_targets)} targets; \"\n", + " f\"dropped {len(dropped_non_count)}: {dropped_non_count['target_name'].tolist()}\"\n", + ")\n", + "\n", + "# 2. Resolver check: drop anything whose stratum constraints don't map to a declared cell.\n", + "resolved, unresolved = resolve_targets_for_testing(count_style, stratum_constraints)\n", + "print(f\"resolver check: kept {len(resolved)}, dropped {len(unresolved)}\")\n", + "\n", + "pd.DataFrame(\n", + " [\n", + " {\n", + " \"target_name\": r.target_name,\n", + " \"geo\": f\"{r.geo.variable}={r.geo.value}\",\n", + " \"derived_cell\": \" & \".join(f\"{c}={l}\" for c, l in r.cell),\n", + " \"scope\": r.scope,\n", + " \"target_value\": r.target_value,\n", + " }\n", + " for r in resolved\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "7aba403d", + "metadata": {}, + "source": [ + "Note the two distinct derived columns that got produced:\n", + "\n", + "- `age_bracket` (from the `age > X, age < Y` range constraints) → labels `0-4`, `5-9`.\n", + "- `snap_positive` (from the `snap > 0` single-threshold constraint) → label `positive`.\n", + "\n", + "The congressional-district value passes through unchanged because geography variables\n", + "are already categorical." + ] + }, + { + "cell_type": "markdown", + "id": "28742af9", + "metadata": {}, + "source": [ + "### 10c. Group resolved targets into margin blocks" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e7ea3547", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:31.564079Z", + "iopub.status.busy": "2026-04-22T15:53:31.563724Z", + "iopub.status.idle": "2026-04-22T15:53:31.601885Z", + "shell.execute_reply": "2026-04-22T15:53:31.600362Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
margin_idscopecell_varsn_targetsn_geosn_cells
0margin_0000personage_bracket | congressional_district_geoid422
1margin_0001householdcongressional_district_geoid | snap_positive221
\n", + "
" + ], + "text/plain": [ + " margin_id scope cell_vars \\\n", + "0 margin_0000 person age_bracket | congressional_district_geoid \n", + "1 margin_0001 household congressional_district_geoid | snap_positive \n", + "\n", + " n_targets n_geos n_cells \n", + "0 4 2 2 \n", + "1 2 2 1 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blocks = assemble_margins_for_testing(resolved)\n", + "blocks_view = pd.DataFrame(\n", + " [\n", + " {\n", + " \"margin_id\": b.margin_id,\n", + " \"scope\": b.scope,\n", + " \"cell_vars\": \" | \".join(b.cell_vars),\n", + " \"n_targets\": len(b.targets),\n", + " \"n_geos\": len({t.geo.value for t in b.targets}),\n", + " \"n_cells\": len({t.cell for t in b.targets}),\n", + " }\n", + " for b in blocks\n", + " ]\n", + ")\n", + "blocks_view" + ] + }, + { + "cell_type": "markdown", + "id": "e4d86166", + "metadata": {}, + "source": [ + "### 10d. Synthesize complement cells\n", + "\n", + "The age-bracket block is already a complete 2×2 tile. The `snap > 0` block is a single\n", + "cell per district — IPF needs the complementary `snap_positive=non_positive` cell to\n", + "have a proper margin. The scaffold computes the complement count from baseline\n", + "microdata and emits it as a flagged `synthesized=True` row.\n", + "\n", + "For the demo we need a unit table with the raw `snap` column so the complement can be\n", + "evaluated. We reuse this notebook's toy people and attach a synthetic `snap` column." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "9ba8c9cc", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:31.627386Z", + "iopub.status.busy": "2026-04-22T15:53:31.627037Z", + "iopub.status.idle": "2026-04-22T15:53:31.797958Z", + "shell.execute_reply": "2026-04-22T15:53:31.795446Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
target_namegeocelltarget_valuesynthesized
0hh_snap_pos_d601601snap_positive=positive80.0False
1hh_snap_pos_d602602snap_positive=positive70.0False
2margin_complement_601601snap_positive=non_positive300.0True
3margin_complement_602602snap_positive=non_positive300.0True
\n", + "
" + ], + "text/plain": [ + " target_name geo cell target_value \\\n", + "0 hh_snap_pos_d601 601 snap_positive=positive 80.0 \n", + "1 hh_snap_pos_d602 602 snap_positive=positive 70.0 \n", + "2 margin_complement_601 601 snap_positive=non_positive 300.0 \n", + "3 margin_complement_602 602 snap_positive=non_positive 300.0 \n", + "\n", + " synthesized \n", + "0 False \n", + "1 False \n", + "2 True \n", + "3 True " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from toy_data import HOUSEHOLDS\n", + "\n", + "rng = np.random.default_rng(0)\n", + "persons_for_conversion = pd.DataFrame(\n", + " {\n", + " \"unit_index\": np.arange(len(HOUSEHOLDS)),\n", + " \"household_id\": np.arange(len(HOUSEHOLDS)),\n", + " \"base_weight\": HOUSEHOLDS[\"design_weight\"].astype(float).to_numpy(),\n", + " \"congressional_district_geoid\": np.where(\n", + " HOUSEHOLDS[\"district\"] == \"A\", 601, 602\n", + " ),\n", + " \"age\": rng.integers(0, 10, size=len(HOUSEHOLDS)),\n", + " \"snap\": np.array([0, 120, 0, 80, 0, 150, 0, 0, 200, 0], dtype=float),\n", + " }\n", + ")\n", + "\n", + "derived_needed = {\n", + " cv\n", + " for b in blocks\n", + " for cv in b.cell_vars\n", + " if cv not in (\"congressional_district_geoid\",)\n", + "}\n", + "raw_values = {\n", + " \"age\": persons_for_conversion[\"age\"].to_numpy(dtype=float),\n", + " \"snap\": persons_for_conversion[\"snap\"].to_numpy(dtype=float),\n", + "}\n", + "unit_table = _materialize_derived_columns(\n", + " persons_for_conversion, derived_needed, raw_values\n", + ")\n", + "\n", + "for b in blocks:\n", + " if _should_synthesize_complement(b):\n", + " _synthesize_complement_cells(b, unit_table, weight_column=\"base_weight\")\n", + "\n", + "snap_block = next(b for b in blocks if \"snap_positive\" in b.cell_vars)\n", + "pd.DataFrame(\n", + " [\n", + " {\n", + " \"target_name\": t.target_name,\n", + " \"geo\": t.geo.value,\n", + " \"cell\": \" & \".join(f\"{c}={l}\" for c, l in t.cell),\n", + " \"target_value\": t.target_value,\n", + " \"synthesized\": False,\n", + " }\n", + " for t in snap_block.targets\n", + " ]\n", + " + [\n", + " {\n", + " \"target_name\": f\"margin_complement_{g}\",\n", + " \"geo\": g,\n", + " \"cell\": \" & \".join(f\"{c}={l}\" for c, l in cell),\n", + " \"target_value\": val,\n", + " \"synthesized\": True,\n", + " }\n", + " for g, cell, val in snap_block.synthesized_cells\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0d203ac8", + "metadata": {}, + "source": [ + "### 10e. The emitted `ipf_target_metadata.csv` rows\n", + "\n", + "With the cells resolved, margins assembled, and complements synthesized, each block\n", + "becomes a small block of `categorical_margin` rows. `ipf_runner.R` uses the\n", + "`margin_id` column to group rows into a single surveysd constraint per block." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4d20c2a3", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:31.804688Z", + "iopub.status.busy": "2026-04-22T15:53:31.804344Z", + "iopub.status.idle": "2026-04-22T15:53:31.861703Z", + "shell.execute_reply": "2026-04-22T15:53:31.861165Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
margin_idscopetarget_typevariablescelltarget_valuetarget_namesynthesized
0margin_0000personcategorical_marginage_bracket|congressional_district_geoidage_bracket=0-4|congressional_district_geoid=601210.0pc_age_0-4_d601False
1margin_0000personcategorical_marginage_bracket|congressional_district_geoidage_bracket=5-9|congressional_district_geoid=601205.0pc_age_5-9_d601False
2margin_0000personcategorical_marginage_bracket|congressional_district_geoidage_bracket=0-4|congressional_district_geoid=602200.0pc_age_0-4_d602False
3margin_0000personcategorical_marginage_bracket|congressional_district_geoidage_bracket=5-9|congressional_district_geoid=602198.0pc_age_5-9_d602False
4margin_0001householdcategorical_margincongressional_district_geoid|snap_positivecongressional_district_geoid=601|snap_positive...80.0hh_snap_pos_d601False
5margin_0001householdcategorical_margincongressional_district_geoid|snap_positivecongressional_district_geoid=602|snap_positive...70.0hh_snap_pos_d602False
6margin_0001householdcategorical_margincongressional_district_geoid|snap_positivecongressional_district_geoid=601|snap_positive...300.0margin_0001_complement_601True
7margin_0001householdcategorical_margincongressional_district_geoid|snap_positivecongressional_district_geoid=602|snap_positive...300.0margin_0001_complement_602True
\n", + "
" + ], + "text/plain": [ + " margin_id scope target_type \\\n", + "0 margin_0000 person categorical_margin \n", + "1 margin_0000 person categorical_margin \n", + "2 margin_0000 person categorical_margin \n", + "3 margin_0000 person categorical_margin \n", + "4 margin_0001 household categorical_margin \n", + "5 margin_0001 household categorical_margin \n", + "6 margin_0001 household categorical_margin \n", + "7 margin_0001 household categorical_margin \n", + "\n", + " variables \\\n", + "0 age_bracket|congressional_district_geoid \n", + "1 age_bracket|congressional_district_geoid \n", + "2 age_bracket|congressional_district_geoid \n", + "3 age_bracket|congressional_district_geoid \n", + "4 congressional_district_geoid|snap_positive \n", + "5 congressional_district_geoid|snap_positive \n", + "6 congressional_district_geoid|snap_positive \n", + "7 congressional_district_geoid|snap_positive \n", + "\n", + " cell target_value \\\n", + "0 age_bracket=0-4|congressional_district_geoid=601 210.0 \n", + "1 age_bracket=5-9|congressional_district_geoid=601 205.0 \n", + "2 age_bracket=0-4|congressional_district_geoid=602 200.0 \n", + "3 age_bracket=5-9|congressional_district_geoid=602 198.0 \n", + "4 congressional_district_geoid=601|snap_positive... 80.0 \n", + "5 congressional_district_geoid=602|snap_positive... 70.0 \n", + "6 congressional_district_geoid=601|snap_positive... 300.0 \n", + "7 congressional_district_geoid=602|snap_positive... 300.0 \n", + "\n", + " target_name synthesized \n", + "0 pc_age_0-4_d601 False \n", + "1 pc_age_5-9_d601 False \n", + "2 pc_age_0-4_d602 False \n", + "3 pc_age_5-9_d602 False \n", + "4 hh_snap_pos_d601 False \n", + "5 hh_snap_pos_d602 False \n", + "6 margin_0001_complement_601 True \n", + "7 margin_0001_complement_602 True " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "out_rows = []\n", + "for b in blocks:\n", + " vars_joined = \"|\".join(b.cell_vars)\n", + " for t in b.targets:\n", + " out_rows.append(\n", + " {\n", + " \"margin_id\": b.margin_id,\n", + " \"scope\": b.scope,\n", + " \"target_type\": \"categorical_margin\",\n", + " \"variables\": vars_joined,\n", + " \"cell\": \"|\".join(_cell_assignments(t, b)),\n", + " \"target_value\": float(t.target_value),\n", + " \"target_name\": t.target_name,\n", + " \"synthesized\": False,\n", + " }\n", + " )\n", + " for g, cell, val in b.synthesized_cells:\n", + " out_rows.append(\n", + " {\n", + " \"margin_id\": b.margin_id,\n", + " \"scope\": b.scope,\n", + " \"target_type\": \"categorical_margin\",\n", + " \"variables\": vars_joined,\n", + " \"cell\": \"|\".join(_complement_cell_assignments(g, cell, b)),\n", + " \"target_value\": float(val),\n", + " \"target_name\": f\"{b.margin_id}_complement_{g}\",\n", + " \"synthesized\": True,\n", + " }\n", + " )\n", + "\n", + "emitted = pd.DataFrame(out_rows)\n", + "emitted" + ] + }, + { + "cell_type": "markdown", + "id": "4c68c47b", + "metadata": {}, + "source": [ + "### 10f. Margin-consistency check and per-block splitting\n", + "\n", + "`surveysd::ipf` rakes `conP` (person-scope) and `conH` (household-scope) constraints\n", + "independently, so it only requires margin-total agreement **within the same scope at\n", + "the same geography**. The check below runs on our two blocks and finds no issues,\n", + "because the age block is person-scope and the snap block is household-scope — they\n", + "don't need to match." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e4eaa3de", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:31.867738Z", + "iopub.status.busy": "2026-04-22T15:53:31.867216Z", + "iopub.status.idle": "2026-04-22T15:53:31.910411Z", + "shell.execute_reply": "2026-04-22T15:53:31.909443Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 mismatched scope/geography combinations\n" + ] + } + ], + "source": [ + "issues = check_margin_consistency(blocks)\n", + "print(f\"{len(issues)} mismatched scope/geography combinations\")\n", + "for iss in issues:\n", + " totals = \", \".join(f\"{m}={v:,.0f}\" for m, v in iss[\"margin_totals\"].items())\n", + " print(\n", + " f\" scope={iss['scope']} geo={iss['geo_value']} spread={iss['relative_spread']:.2%} {totals}\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "f8f9633c", + "metadata": {}, + "source": [ + "For a concrete example of a *real* mismatch, the `age × district` block and the\n", + "`agi × district × is_filer` block in the full calibration package are both\n", + "person-scope and share district geographies, but they represent different\n", + "populations (all persons vs. persons in filer tax units) and therefore imply\n", + "different totals per district. Feeding both into a single `surveysd::ipf` call fails\n", + "with `population totals for different constraints do not match`. The scaffold\n", + "handles this by running one margin block at a time via\n", + "`split_target_metadata_by_margin`, which returns a sub-frame per `margin_id`." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "0af2c9f7", + "metadata": { + "execution": { + "iopub.execute_input": "2026-04-22T15:53:31.928994Z", + "iopub.status.busy": "2026-04-22T15:53:31.928008Z", + "iopub.status.idle": "2026-04-22T15:53:31.964082Z", + "shell.execute_reply": "2026-04-22T15:53:31.962566Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Target rows per block (suitable for independent IPF runs):\n", + " margin_0000: 4 rows, per-geo totals: congressional_district_geoid=601->415, congressional_district_geoid=602->398\n", + " margin_0001: 4 rows, per-geo totals: congressional_district_geoid=601->380, congressional_district_geoid=602->370\n" + ] + } + ], + "source": [ + "per_block = split_target_metadata_by_margin(emitted)\n", + "print(\"Target rows per block (suitable for independent IPF runs):\")\n", + "for margin_id, sub in per_block.items():\n", + " totals_by_geo = {}\n", + " for _, r in sub.iterrows():\n", + " geo_part = [\n", + " a\n", + " for a in r[\"cell\"].split(\"|\")\n", + " if a.startswith(\"congressional_district_geoid=\")\n", + " ][0]\n", + " totals_by_geo[geo_part] = totals_by_geo.get(geo_part, 0.0) + r[\"target_value\"]\n", + " totals_str = \", \".join(f\"{g}->{v:,.0f}\" for g, v in sorted(totals_by_geo.items()))\n", + " print(f\" {margin_id}: {len(sub)} rows, per-geo totals: {totals_str}\")" + ] + }, + { + "cell_type": "markdown", + "id": "438b3847", + "metadata": {}, + "source": [ + "### 10g. How the same path runs against the real calibration package\n", + "\n", + "In production, `benchmark_export.build_ipf_inputs` receives the `filtered_targets` slice computed by `benchmark_manifest.filter_targets` from the manifest's `target_filters`. For a three-district scope that filter returns roughly 80 targets across `person_count`, `household_count`, `tax_unit_count`, and a handful of dollar variables. The count check keeps the ~57 `person_count` + `household_count` rows; the resolver check keeps every one of those (they all fit the declared schemas). The survivors assemble into three margin blocks: 54-target `age × district`, 27-target `agi × district × is_filer` (if AGI targets are in scope), and 3-target `snap × district` with 3 synthesized complements. The dropped counts are available on `target_metadata.attrs['dropped_targets']` for reporting." + ] + }, + { + "cell_type": "markdown", + "id": "efdf0275", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "Inputs to the IPF runner:\n", + "\n", + "| Artifact | Format | Shape |\n", + "| --- | --- | --- |\n", + "| `unit_metadata.csv` | person-level CSV with category columns + `unit_index`, `household_id`, `base_weight` | `n_persons` rows |\n", + "| `ipf_target_metadata.csv` | CSV with one row per margin cell (`categorical_margin`) or per numeric total (`numeric_total`) | `n_cells` rows |\n", + "| `initial_weights.npy` | float64 array | `n_units` |\n", + "\n", + "Output of the IPF runner:\n", + "\n", + "| Artifact | Format | Shape |\n", + "| --- | --- | --- |\n", + "| `fitted_weights.csv` | CSV (`unit_index`, `fitted_weight`) | `n_persons` rows, collapsible to `n_units` |\n", + "\n", + "Comparison to the GREG walkthrough:\n", + "\n", + "| Aspect | GREG | IPF |\n", + "| --- | --- | --- |\n", + "| Primary input | sparse `(n_targets, n_units)` matrix | unit-record table with categorical columns |\n", + "| Target vocabulary | arbitrary linear functionals | count margins or indicator totals |\n", + "| Handles dollar-total targets? | yes | no (without an ad-hoc encoding) |\n", + "| Negative weights? | possible with `cal.linear` | no (multiplicative updates) |\n", + "| Collapse step needed? | no, weights already per-unit | yes, per-person weights → per-unit |" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pe3.13 (3.13.0)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/paper-l0/benchmarking/notebooks/toy_data.py b/paper-l0/benchmarking/notebooks/toy_data.py new file mode 100644 index 000000000..80de561bb --- /dev/null +++ b/paper-l0/benchmarking/notebooks/toy_data.py @@ -0,0 +1,114 @@ +"""Synthetic toy household survey used by the GREG and IPF walkthrough notebooks. + +The dataset is ten households distributed across two districts. Each household +has a design weight of 100, a household size, an adult/child breakdown, and a +household income. The targets defined below are internally consistent so any +reasonable calibration run should hit them to within a small tolerance. +""" + +from __future__ import annotations + +import numpy as np +import pandas as pd + + +HOUSEHOLDS = pd.DataFrame( + { + "hh_id": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "district": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"], + "n_adults": [2, 2, 1, 2, 2, 2, 1, 2, 3, 1], + "n_children": [0, 2, 0, 1, 0, 3, 1, 1, 1, 0], + "income": [ + 30_000, + 60_000, + 25_000, + 45_000, + 70_000, + 40_000, + 20_000, + 80_000, + 90_000, + 15_000, + ], + "design_weight": [100.0] * 10, + } +) +HOUSEHOLDS["hh_size"] = HOUSEHOLDS["n_adults"] + HOUSEHOLDS["n_children"] + + +# Targets, defined as (target_name, target_value, coefficient_column). +# Each coefficient column already exists on the household table. +TARGETS = pd.DataFrame( + [ + ("district_A_households", 520.0, "is_A"), + ("district_A_adults", 940.0, "adults_in_A"), + ("district_A_children", 310.0, "children_in_A"), + ("district_A_income", 23_500_000.0, "income_in_A"), + ("district_B_households", 480.0, "is_B"), + ("district_B_adults", 1_000.0, "adults_in_B"), + ("district_B_children", 600.0, "children_in_B"), + ("district_B_income", 25_000_000.0, "income_in_B"), + ], + columns=["target_name", "value", "coef_col"], +) + + +# IPF-eligible subset: count-style targets only. +IPF_TARGETS = TARGETS[~TARGETS["target_name"].str.endswith("_income")].reset_index( + drop=True +) + + +def household_table_with_coefficients() -> pd.DataFrame: + """Return HOUSEHOLDS augmented with the per-target coefficient columns.""" + hh = HOUSEHOLDS.copy() + hh["is_A"] = (hh["district"] == "A").astype(float) + hh["is_B"] = (hh["district"] == "B").astype(float) + hh["adults_in_A"] = hh["n_adults"] * hh["is_A"] + hh["children_in_A"] = hh["n_children"] * hh["is_A"] + hh["income_in_A"] = hh["income"] * hh["is_A"] + hh["adults_in_B"] = hh["n_adults"] * hh["is_B"] + hh["children_in_B"] = hh["n_children"] * hh["is_B"] + hh["income_in_B"] = hh["income"] * hh["is_B"] + return hh + + +def build_target_matrix(hh: pd.DataFrame, targets: pd.DataFrame) -> np.ndarray: + """Return a (n_targets, n_units) dense matrix of per-unit coefficients.""" + return np.stack([hh[col].to_numpy(dtype=float) for col in targets["coef_col"]]) + + +def baseline_totals(hh: pd.DataFrame, targets: pd.DataFrame) -> pd.DataFrame: + """Realized weighted totals using the design weights.""" + X = build_target_matrix(hh, targets) + w = hh["design_weight"].to_numpy(dtype=float) + realized = X @ w + return pd.DataFrame( + { + "target_name": targets["target_name"].to_numpy(), + "target_value": targets["value"].to_numpy(dtype=float), + "baseline_weighted_total": realized, + } + ) + + +def diagnostic_table( + hh: pd.DataFrame, + targets: pd.DataFrame, + fitted_weights: np.ndarray, +) -> pd.DataFrame: + """Compare fitted weighted totals to target values.""" + X = build_target_matrix(hh, targets) + base_w = hh["design_weight"].to_numpy(dtype=float) + out = pd.DataFrame( + { + "target_name": targets["target_name"].to_numpy(), + "target_value": targets["value"].to_numpy(dtype=float), + "baseline_weighted_total": X @ base_w, + "fitted_weighted_total": X @ fitted_weights, + } + ) + out["abs_rel_error"] = ( + out["fitted_weighted_total"] - out["target_value"] + ).abs() / out["target_value"].abs() + return out From 6de667dc61824dd898742caca44ca184b5486980 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Thu, 23 Apr 2026 22:09:03 +0530 Subject: [PATCH 6/6] Make IPF benchmarking fail closed and runnable as one coherent problem Replace the old order-dependent sequential IPF flow with a validated one-call path. The converter now keeps only closed categorical systems, derives complements only from authored parent totals, reports explicit drop reasons for non-runnable target families, and surfaces incompatible-total failures through structured diagnostics instead of silently chaining margin blocks. Update the benchmark harness to export retained-authored IPF scoring artifacts, validate the external-IPF input contract, and let L0/GREG opt into scoring on the same retained-authored subset for apples-to-apples comparisons. Refresh the walkthrough notebook, README, example manifest, and add regression coverage for closure logic, runner behavior, export validation, and the new scoring contract. --- paper-l0/benchmarking/README.md | 127 ++- paper-l0/benchmarking/benchmark_cli.py | 156 +++- paper-l0/benchmarking/benchmark_export.py | 236 ++++- paper-l0/benchmarking/benchmark_manifest.py | 10 + paper-l0/benchmarking/ipf_conversion.py | 860 ++++++++++++++---- .../manifests/ipf_demo_small.example.json | 2 +- .../notebooks/02_ipf_walkthrough.ipynb | 467 ++++------ paper-l0/benchmarking/runners/ipf_runner.R | 76 +- tests/unit/test_benchmark_export.py | 286 ++++++ tests/unit/test_benchmarking_runners.py | 310 ++++++- tests/unit/test_ipf_conversion.py | 350 +++++++ 11 files changed, 2221 insertions(+), 659 deletions(-) create mode 100644 tests/unit/test_benchmark_export.py create mode 100644 tests/unit/test_ipf_conversion.py diff --git a/paper-l0/benchmarking/README.md b/paper-l0/benchmarking/README.md index 8d68b3608..c46d70c12 100644 --- a/paper-l0/benchmarking/README.md +++ b/paper-l0/benchmarking/README.md @@ -44,7 +44,7 @@ The core workflow is: 2. export a shared benchmark bundle from a saved calibration package 3. auto-convert the bundle to IPF inputs when needed 4. run `L0`, `GREG`, or `IPF` -5. score all fitted weights against the same shared target matrix +5. score each method against the target set that matches its benchmark contract ## Layout @@ -113,30 +113,65 @@ lightweight. ### IPF inputs -The exporter now auto-generates IPF inputs when the manifest includes `ipf` -and no external overrides are supplied. It reconstructs an IPF microdata table -from: +The exporter auto-generates IPF inputs when the manifest includes `ipf` and no +external overrides are supplied. It reconstructs an IPF microdata table from: - the saved calibration package - the package metadata's `dataset_path` - the package metadata's `db_path` - the selected count-like targets and their stratum constraints -The generated `unit_metadata.csv` is currently built for `person_count` and +The generated `unit_metadata.csv` is built for `person_count` and `household_count` targets. It expands cloned households to a person-level table -when person targets are present, carries a repeated household `unit_index`, and -adds one derived indicator column per selected target. The generated -`ipf_target_metadata.csv` then references those indicator columns as numerical -IPF totals. +when person targets are present, carries a repeated household `unit_index` so +per-person weights collapse cleanly back to per-household, and adds one +string-valued derived category column per declared bucket schema (e.g. +`age_bracket`, `agi_bracket_district`, `snap_positive`). + +The generated `ipf_target_metadata.csv` contains one `categorical_margin` row +per retained IPF cell after validation. That means: + +- authored cells that belong to a closed categorical system are kept +- binary subset families may gain exactly-derived complement cells when an + authored parent total exists on the exact reduced key +- open subset families are dropped rather than emitted as 1-cell margins + +The exporter also writes: + +- `ipf_scoring_target_metadata.csv` +- `ipf_scoring_X_targets_by_units.mtx` + +These score IPF on its retained authored targets only. Derived complements are +recorded for transparency in `ipf_conversion_diagnostics.json`, but they are +not part of the main benchmark metric set. + +When comparing `L0` or `GREG` against that same subset, pass: + +```bash +python paper-l0/benchmarking/benchmark_cli.py run \ + --method l0 \ + --run-dir \ + --score-on ipf_retained_authored +``` External CSVs are still supported through `external_inputs.*` and override the -automatic conversion path when provided. +automatic conversion path when provided. The external-IPF contract is strict: + +- `external_inputs.ipf_unit_metadata_csv` +- `external_inputs.ipf_target_metadata_csv` +- `external_inputs.ipf_scoring_target_metadata_csv` +- `external_inputs.ipf_scoring_matrix_mtx` + +must be provided together. An optional +`external_inputs.ipf_conversion_diagnostics_json` can also be supplied and will +be copied through for reporting. External CSVs must also follow the +`categorical_margin` schema below; the runner rejects `numeric_total` rows. ### IPF conversion step by step The IPF conversion is implemented in -[ipf_conversion.py](/Users/movil1/Desktop/PYTHONJOBS/PolicyEngine/policyengine-us-data/paper-l0/benchmarking/ipf_conversion.py) -and runs during `benchmark_cli.py export`. +[ipf_conversion.py](./ipf_conversion.py) and runs during +`benchmark_cli.py export`. 1. Load the saved calibration package and apply the manifest target filters. 2. Read `dataset_path`, `db_path`, and `n_clones` from the package metadata. @@ -152,18 +187,25 @@ and runs during `benchmark_cli.py export`. household-clone `unit_index`. 7. Calculate the needed source variables from the dataset and attach them to the IPF unit table. -8. For each selected target, evaluate its original stratum logic row by row and - materialize the result as a derived indicator column such as - `ipf_indicator_00000`. -9. Write `ipf_target_metadata.csv` so each selected target becomes a - `numeric_total` IPF constraint over one of those derived indicator columns. -10. Run `surveysd::ipf` on the generated unit table and target metadata. -11. Collapse the fitted IPF row weights back to one weight per shared benchmark - `unit_index`, so the fitted result can be scored against the same sparse - calibration matrix used by `L0` and `GREG`. - -This means the benchmark uses one common scoring space even though `IPF` -requires a richer input representation than `L0` and `GREG`. +8. Materialize the string-valued derived category columns the margins cover + (e.g. `age_bracket`, `snap_positive`) on that unit table. +9. Group the resolved targets into margin families, validate them against the + observed unit-table support, and keep only families that are already closed + or can be closed exactly from authored parent totals. +10. Emit one `categorical_margin` row per retained authored or exactly-derived + cell, sharing a `margin_id` within each family. +11. Write diagnostics (`dropped_targets`, retained-authored counts, derived + complements, and any coherence issues) to + `inputs/ipf_conversion_diagnostics.json`. +12. Run `surveysd::ipf` once on the generated unit table and full validated + IPF target metadata. +13. Collapse the fitted IPF row weights back to one weight per shared + benchmark `unit_index`, so the fitted result can be scored against the + retained-authored sparse target subset used for the IPF benchmark. + +This means the benchmark keeps a shared requested target space for the export, +but an IPF-specific retained-authored scoring space for the actual IPF +comparison. ### Why the IPF conversion exists @@ -182,28 +224,21 @@ matrix directly into `surveysd::ipf`. ### IPF target metadata schema -`ipf_runner.R` supports two target metadata encodings: - -- `numeric_total` - One row per target with: - - `scope`: `person` or `household` - - `target_type`: `numeric_total` - - `value_column`: unit-data column to calibrate - - `variables`: grouping variables used to wrap the numeric total in a one-cell - or multi-cell array - - `cell`: pipe-separated assignments for the target cell - - `target_value`: numeric total -- `categorical_margin` - One row per margin cell with: - - `scope`: `person` or `household` - - `target_type`: `categorical_margin` - - `margin_id`: identifier for a margin table - - `variables`: pipe-separated variable names, e.g. `district_id|age_bin` - - `cell`: pipe-separated assignments, e.g. - `district_id=0601|age_bin=18_24` - - `target_value`: numeric target - -The automatic conversion path currently emits `numeric_total` rows. +`ipf_runner.R` accepts one encoding: `categorical_margin`. One row per +authored margin cell: + +- `scope`: `person` or `household` +- `target_type`: `categorical_margin` +- `margin_id`: identifier for a margin block. Rows sharing a `margin_id` are + grouped into one `surveysd::ipf` constraint (via `xtabs`). +- `variables`: pipe-separated variable names, e.g. + `congressional_district_geoid|age_bracket` +- `cell`: pipe-separated assignments, e.g. + `congressional_district_geoid=0601|age_bracket=0-4` +- `target_value`: numeric target + +Open subset systems are not exported. If a subset family cannot be closed from +an authored parent total, it is dropped before the R call. ## Example Commands diff --git a/paper-l0/benchmarking/benchmark_cli.py b/paper-l0/benchmarking/benchmark_cli.py index 79f59050f..a6dc800ea 100644 --- a/paper-l0/benchmarking/benchmark_cli.py +++ b/paper-l0/benchmarking/benchmark_cli.py @@ -101,10 +101,51 @@ def _run_greg(run_dir: Path): return weights_path, elapsed +def _collapse_ipf_rows_to_unit_weights( + raw_weights: pd.DataFrame, n_units: int +) -> np.ndarray: + """Validate a per-row IPF output and collapse it to a length-`n_units` vector. + + surveysd::ipf with `meanHH = TRUE` guarantees every row that shares a + `unit_index` carries the same fitted weight; the spread check keeps that + assumption honest. + """ + if "unit_index" not in raw_weights.columns: + raise RuntimeError("IPF runner output must include a unit_index column") + if raw_weights["unit_index"].isna().any(): + raise RuntimeError("IPF runner output contains missing unit_index values") + + raw_weights = raw_weights.copy() + raw_weights["unit_index"] = raw_weights["unit_index"].astype(np.int64) + if (raw_weights["unit_index"] < 0).any() or ( + raw_weights["unit_index"] >= n_units + ).any(): + raise RuntimeError("IPF runner output contains out-of-range unit_index values") + + per_unit_spread = raw_weights.groupby("unit_index", sort=True)["fitted_weight"].agg( + lambda series: float(series.max() - series.min()) + ) + if (per_unit_spread > 1e-9).any(): + raise RuntimeError( + "IPF runner produced inconsistent fitted weights within the same unit_index" + ) + + weights_by_unit = ( + raw_weights.groupby("unit_index", sort=True)["fitted_weight"] + .first() + .reindex(np.arange(n_units, dtype=np.int64)) + ) + if weights_by_unit.isna().any(): + raise RuntimeError( + "Aggregated IPF weights do not cover the full benchmark unit range" + ) + return weights_by_unit.to_numpy(dtype=np.float64) + + def _run_ipf(run_dir: Path): + """Run one coherent IPF problem in a single `surveysd::ipf` call.""" inputs = run_dir / "inputs" outputs = run_dir / "outputs" - temp_csv = outputs / "_ipf_weights.csv" with open(inputs / "benchmark_manifest.json") as f: manifest = json.load(f) @@ -116,11 +157,37 @@ def _run_ipf(run_dir: Path): "IPF run requires inputs/ipf_target_metadata.csv. " "Provide external_inputs.ipf_target_metadata_csv in the manifest." ) + unit_metadata_path = inputs / "unit_metadata.csv" + if not unit_metadata_path.exists(): + raise FileNotFoundError("IPF run requires inputs/unit_metadata.csv.") + + full_targets = pd.read_csv(target_metadata_path) + if full_targets.empty: + raise RuntimeError("IPF target metadata is empty; nothing to run.") + unit_metadata = pd.read_csv(unit_metadata_path) + if "unit_index" not in unit_metadata.columns: + raise RuntimeError("Unit metadata must include a unit_index column for IPF") + + weight_col = str(options.get("weight_col", "base_weight")) + household_id_col = str(options.get("household_id_col", "household_id")) + + initial_weights = np.load(inputs / "initial_weights.npy").astype(np.float64) + n_units = len(initial_weights) + unit_indices = unit_metadata["unit_index"].astype(np.int64).to_numpy() + if unit_indices.min() < 0 or unit_indices.max() >= n_units: + raise RuntimeError( + "Unit metadata unit_index values fall outside the initial weight vector" + ) + temp_csv = outputs / "_ipf_weights.csv" + unit_with_weights = unit_metadata.copy() + unit_with_weights[weight_col] = initial_weights[unit_indices] + temp_unit_csv = outputs / "_ipf_unit_metadata.csv" + unit_with_weights.to_csv(temp_unit_csv, index=False) cmd = [ "Rscript", str(RUNNERS_DIR / "ipf_runner.R"), - str(inputs / "unit_metadata.csv"), + str(temp_unit_csv), str(target_metadata_path), str(inputs / "initial_weights.npy"), str(temp_csv), @@ -128,57 +195,59 @@ def _run_ipf(run_dir: Path): str(float(options.get("bound", 4.0))), str(float(options.get("epsP", 1e-6))), str(float(options.get("epsH", 1e-2))), - str(options.get("household_id_col", "household_id")), - str(options.get("weight_col", "base_weight")), + household_id_col, + weight_col, ] proc, elapsed = _run_subprocess(cmd) if proc.returncode != 0: raise RuntimeError(f"IPF runner failed with exit code {proc.returncode}") raw_weights = pd.read_csv(temp_csv) - if "unit_index" not in raw_weights.columns: - raise RuntimeError("IPF runner output must include a unit_index column") - if raw_weights["unit_index"].isna().any(): - raise RuntimeError("IPF runner output contains missing unit_index values") - - raw_weights["unit_index"] = raw_weights["unit_index"].astype(np.int64) - n_units = len(np.load(inputs / "initial_weights.npy")) - if (raw_weights["unit_index"] < 0).any() or ( - raw_weights["unit_index"] >= n_units - ).any(): - raise RuntimeError("IPF runner output contains out-of-range unit_index values") - - per_unit_spread = raw_weights.groupby("unit_index", sort=True)["fitted_weight"].agg( - lambda series: float(series.max() - series.min()) - ) - inconsistent_units = per_unit_spread[per_unit_spread > 1e-9] - if not inconsistent_units.empty: - raise RuntimeError( - "IPF runner produced inconsistent fitted weights within the same unit_index" - ) - - weights_by_unit = ( - raw_weights.groupby("unit_index", sort=True)["fitted_weight"] - .first() - .reindex(np.arange(n_units, dtype=np.int64)) - ) - if weights_by_unit.isna().any(): - raise RuntimeError( - "Aggregated IPF weights do not cover the full benchmark unit range" - ) - weights = weights_by_unit.to_numpy(dtype=np.float64) + current_weights = _collapse_ipf_rows_to_unit_weights(raw_weights, n_units) weights_path = outputs / "fitted_weights.npy" - np.save(weights_path, weights) + np.save(weights_path, current_weights) temp_csv.unlink(missing_ok=True) + temp_unit_csv.unlink(missing_ok=True) return weights_path, elapsed +def _select_scoring_inputs( + run_dir: Path, method: str, score_on: str +) -> tuple[Path, Path, str]: + inputs = run_dir / "inputs" + ipf_targets = inputs / "ipf_scoring_target_metadata.csv" + ipf_matrix = inputs / "ipf_scoring_X_targets_by_units.mtx" + has_ipf_scoring = ipf_targets.exists() and ipf_matrix.exists() + + if score_on == "ipf_retained_authored": + if not has_ipf_scoring: + raise FileNotFoundError( + "Requested score_on=ipf_retained_authored, but " + "inputs/ipf_scoring_target_metadata.csv and " + "inputs/ipf_scoring_X_targets_by_units.mtx are not both present." + ) + return ipf_targets, ipf_matrix, "ipf_retained_authored" + + if score_on == "auto" and method == "ipf" and has_ipf_scoring: + return ipf_targets, ipf_matrix, "ipf_retained_authored" + return ( + inputs / "target_metadata.csv", + inputs / "X_targets_by_units.mtx", + "shared_requested", + ) + + def cmd_run(args): run_dir = Path(args.run_dir) inputs = run_dir / "inputs" outputs = run_dir / "outputs" outputs.mkdir(parents=True, exist_ok=True) - targets_df = load_targets_csv(inputs / "target_metadata.csv") + targets_path, matrix_path, scoring_target_set = _select_scoring_inputs( + run_dir, + args.method, + getattr(args, "score_on", "auto"), + ) + targets_df = load_targets_csv(targets_path) started = time.time() if args.method == "l0": @@ -195,11 +264,12 @@ def cmd_run(args): summary = compute_common_metrics( weights=weights, targets_df=targets_df, - matrix_path=inputs / "X_targets_by_units.mtx", + matrix_path=matrix_path, ) summary["method"] = args.method summary["run_dir"] = str(run_dir.resolve()) summary["runtime_seconds"] = elapsed + summary["scoring_target_set"] = scoring_target_set write_method_summary(summary, outputs / f"{args.method}_summary.json") print(json.dumps(summary, indent=2, sort_keys=True)) return 0 @@ -225,6 +295,16 @@ def build_parser(): run_parser.add_argument( "--run-dir", required=True, help="Exported benchmark bundle directory" ) + run_parser.add_argument( + "--score-on", + default="auto", + choices=["auto", "shared_requested", "ipf_retained_authored"], + help=( + "Scoring target set. 'auto' uses IPF-retained-authored targets only " + "for method=ipf when available; the other methods default to the " + "shared requested target set unless explicitly overridden." + ), + ) run_parser.set_defaults(func=cmd_run) return parser diff --git a/paper-l0/benchmarking/benchmark_export.py b/paper-l0/benchmarking/benchmark_export.py index ff81da2f6..6c870754a 100644 --- a/paper-l0/benchmarking/benchmark_export.py +++ b/paper-l0/benchmarking/benchmark_export.py @@ -9,10 +9,10 @@ import numpy as np import pandas as pd -from scipy.io import mmwrite +from scipy.io import mmread, mmwrite from benchmark_manifest import BenchmarkManifest, filter_targets -from ipf_conversion import build_ipf_inputs +from ipf_conversion import IPFConversionError, build_ipf_inputs def load_calibration_package_raw(path: str | Path) -> Dict: @@ -41,6 +41,96 @@ def build_shared_unit_metadata(package: Dict) -> pd.DataFrame: return pd.DataFrame(data) +def _validate_external_ipf_inputs( + manifest: BenchmarkManifest, + *, + n_units: int, +) -> None: + ext = manifest.external_inputs + provided = { + "ipf_unit_metadata_csv": ext.ipf_unit_metadata_csv, + "ipf_target_metadata_csv": ext.ipf_target_metadata_csv, + "ipf_scoring_target_metadata_csv": ext.ipf_scoring_target_metadata_csv, + "ipf_scoring_matrix_mtx": ext.ipf_scoring_matrix_mtx, + } + if not any(provided.values()): + return + + missing = [name for name, path in provided.items() if not path] + if missing: + raise ValueError( + "External IPF overrides must provide all of: " + "ipf_unit_metadata_csv, ipf_target_metadata_csv, " + "ipf_scoring_target_metadata_csv, ipf_scoring_matrix_mtx. " + f"Missing: {missing}" + ) + + target_meta = pd.read_csv(ext.ipf_target_metadata_csv) + required_target_cols = { + "margin_id", + "scope", + "target_type", + "variables", + "cell", + "target_value", + } + missing_target_cols = sorted(required_target_cols - set(target_meta.columns)) + if missing_target_cols: + raise ValueError( + "External ipf_target_metadata_csv is missing required columns: " + f"{missing_target_cols}" + ) + unsupported_types = set(target_meta["target_type"].astype(str)) - { + "categorical_margin" + } + if unsupported_types: + raise ValueError( + "External ipf_target_metadata_csv contains unsupported target_type " + f"values: {sorted(unsupported_types)}" + ) + unsupported_scopes = set(target_meta["scope"].astype(str)) - {"person", "household"} + if unsupported_scopes: + raise ValueError( + "External ipf_target_metadata_csv contains unsupported scope values: " + f"{sorted(unsupported_scopes)}" + ) + + unit_meta = pd.read_csv(ext.ipf_unit_metadata_csv) + weight_col = str(manifest.method_options.ipf.get("weight_col", "base_weight")) + household_id_col = str( + manifest.method_options.ipf.get("household_id_col", "household_id") + ) + if "unit_index" not in unit_meta.columns and weight_col not in unit_meta.columns: + raise ValueError( + "External ipf_unit_metadata_csv must include either unit_index or the " + f"configured weight column '{weight_col}'." + ) + if "household" in set(target_meta["scope"].astype(str)) and ( + household_id_col not in unit_meta.columns + ): + raise ValueError( + "External ipf_unit_metadata_csv must include the configured household " + f"id column '{household_id_col}' when household-scope margins are present." + ) + + scoring_meta = pd.read_csv(ext.ipf_scoring_target_metadata_csv) + if "value" not in scoring_meta.columns: + raise ValueError( + "External ipf_scoring_target_metadata_csv must include a 'value' column." + ) + scoring_matrix = mmread(str(ext.ipf_scoring_matrix_mtx)).tocsr() + if scoring_matrix.shape[0] != len(scoring_meta): + raise ValueError( + "External ipf_scoring_matrix_mtx row count does not match " + "ipf_scoring_target_metadata_csv." + ) + if scoring_matrix.shape[1] != n_units: + raise ValueError( + "External ipf_scoring_matrix_mtx column count does not match the " + "shared benchmark unit count." + ) + + def export_bundle( manifest: BenchmarkManifest, output_dir: str | Path ) -> Tuple[Path, Dict]: @@ -69,41 +159,119 @@ def export_bundle( np.save(inputs_dir / "initial_weights.npy", initial_weights) unit_metadata = build_shared_unit_metadata(package) + _validate_external_ipf_inputs( + manifest, + n_units=int(filtered_matrix.shape[1]), + ) has_external_ipf_inputs = bool( manifest.external_inputs.ipf_unit_metadata_csv or manifest.external_inputs.ipf_target_metadata_csv + or manifest.external_inputs.ipf_scoring_target_metadata_csv + or manifest.external_inputs.ipf_scoring_matrix_mtx ) - has_partial_external_ipf_inputs = bool( - manifest.external_inputs.ipf_unit_metadata_csv - ) != bool(manifest.external_inputs.ipf_target_metadata_csv) - if has_partial_external_ipf_inputs: - raise ValueError( - "IPF external input overrides must provide both " - "ipf_unit_metadata_csv and ipf_target_metadata_csv" - ) + ipf_diagnostics: Dict = {} if manifest.external_inputs.ipf_unit_metadata_csv: shutil.copyfile( manifest.external_inputs.ipf_unit_metadata_csv, inputs_dir / "unit_metadata.csv", ) - elif "ipf" in manifest.methods and not has_external_ipf_inputs: - ipf_unit_metadata, ipf_target_metadata = build_ipf_inputs( - package=package, - manifest=manifest, - filtered_targets=filtered_targets, + shutil.copyfile( + manifest.external_inputs.ipf_target_metadata_csv, + inputs_dir / "ipf_target_metadata.csv", + ) + shutil.copyfile( + manifest.external_inputs.ipf_scoring_target_metadata_csv, + inputs_dir / "ipf_scoring_target_metadata.csv", ) + shutil.copyfile( + manifest.external_inputs.ipf_scoring_matrix_mtx, + inputs_dir / "ipf_scoring_X_targets_by_units.mtx", + ) + if manifest.external_inputs.ipf_conversion_diagnostics_json: + shutil.copyfile( + manifest.external_inputs.ipf_conversion_diagnostics_json, + inputs_dir / "ipf_conversion_diagnostics.json", + ) + with open(inputs_dir / "ipf_conversion_diagnostics.json") as f: + ipf_diagnostics = json.load(f) + else: + ipf_diagnostics = { + "requested_target_count": int(filtered_matrix.shape[0]), + "retained_authored_target_count": int( + len(pd.read_csv(inputs_dir / "ipf_scoring_target_metadata.csv")) + ), + "derived_complement_count": None, + "dropped_targets": {}, + "dropped_target_details": [], + "margin_consistency_issues": [], + "derived_complement_rows": [], + "converted_target_rows": int( + len(pd.read_csv(inputs_dir / "ipf_target_metadata.csv")) + ), + "source": "external_ipf_override", + } + elif "ipf" in manifest.methods and not has_external_ipf_inputs: + try: + ipf_unit_metadata, ipf_target_metadata = build_ipf_inputs( + package=package, + manifest=manifest, + filtered_targets=filtered_targets, + ) + except IPFConversionError as exc: + if exc.diagnostics: + with open(inputs_dir / "ipf_conversion_diagnostics.json", "w") as f: + json.dump(exc.diagnostics, f, indent=2, sort_keys=True, default=str) + raise ipf_unit_metadata.to_csv(inputs_dir / "unit_metadata.csv", index=False) ipf_target_metadata.to_csv(inputs_dir / "ipf_target_metadata.csv", index=False) + retained_target_ids = list( + ipf_target_metadata.attrs.get("retained_authored_target_ids", []) + ) + if retained_target_ids and "target_id" in filtered_targets.columns: + retained_mask = filtered_targets["target_id"].isin(retained_target_ids) + ipf_scoring_targets = filtered_targets.loc[retained_mask].reset_index( + drop=True + ) + ipf_scoring_matrix = filtered_matrix[retained_mask.to_numpy(), :] + ipf_scoring_targets.to_csv( + inputs_dir / "ipf_scoring_target_metadata.csv", index=False + ) + mmwrite( + str(inputs_dir / "ipf_scoring_X_targets_by_units.mtx"), + ipf_scoring_matrix, + ) + ipf_diagnostics = { + "requested_target_count": int( + ipf_target_metadata.attrs.get("requested_target_count", len(filtered_targets)) + ), + "retained_authored_target_count": int( + ipf_target_metadata.attrs.get( + "retained_authored_target_count", 0 + ) + ), + "derived_complement_count": int( + ipf_target_metadata.attrs.get("derived_complement_count", 0) + ), + "dropped_targets": dict( + ipf_target_metadata.attrs.get("dropped_targets", {}) + ), + "dropped_target_details": list( + ipf_target_metadata.attrs.get("dropped_target_details", []) + ), + "margin_consistency_issues": list( + ipf_target_metadata.attrs.get("margin_consistency_issues", []) + ), + "derived_complement_rows": list( + ipf_target_metadata.attrs.get("derived_complement_rows", []) + ), + "converted_target_rows": int(len(ipf_target_metadata)), + } + with open(inputs_dir / "ipf_conversion_diagnostics.json", "w") as f: + json.dump(ipf_diagnostics, f, indent=2, sort_keys=True, default=str) else: unit_metadata.to_csv(inputs_dir / "unit_metadata.csv", index=False) - if manifest.external_inputs.ipf_target_metadata_csv: - shutil.copyfile( - manifest.external_inputs.ipf_target_metadata_csv, - inputs_dir / "ipf_target_metadata.csv", - ) - runtime_manifest = manifest.to_dict() runtime_manifest["resolved"] = { "output_dir": str(output_dir.resolve()), @@ -125,4 +293,30 @@ def export_bundle( "inputs_dir": str(inputs_dir), "outputs_dir": str(outputs_dir), } + if ipf_diagnostics: + dropped = ipf_diagnostics.get("dropped_targets", {}) + export_info["ipf_requested_target_count"] = int( + ipf_diagnostics.get("requested_target_count", len(filtered_targets)) + ) + export_info["ipf_retained_authored_target_count"] = int( + ipf_diagnostics.get("retained_authored_target_count", 0) + ) + derived_complement_count = ipf_diagnostics.get("derived_complement_count", 0) + export_info["ipf_derived_complement_count"] = ( + int(derived_complement_count) + if derived_complement_count is not None + else 0 + ) + export_info["ipf_converted_target_rows"] = int( + ipf_diagnostics.get("converted_target_rows", 0) + ) + export_info["ipf_dropped_non_count_count"] = int( + dropped.get("non_count_style", 0) + ) + export_info["ipf_dropped_unresolvable_count"] = int( + dropped.get("unresolvable_constraints", 0) + ) + export_info["ipf_margin_consistency_issue_count"] = int( + len(ipf_diagnostics.get("margin_consistency_issues", [])) + ) return output_dir, export_info diff --git a/paper-l0/benchmarking/benchmark_manifest.py b/paper-l0/benchmarking/benchmark_manifest.py index 4fad528a5..e0794e7db 100644 --- a/paper-l0/benchmarking/benchmark_manifest.py +++ b/paper-l0/benchmarking/benchmark_manifest.py @@ -55,6 +55,9 @@ def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "TargetFilters": class ExternalInputs: ipf_unit_metadata_csv: Optional[str] = None ipf_target_metadata_csv: Optional[str] = None + ipf_scoring_target_metadata_csv: Optional[str] = None + ipf_scoring_matrix_mtx: Optional[str] = None + ipf_conversion_diagnostics_json: Optional[str] = None @classmethod def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "ExternalInputs": @@ -62,6 +65,13 @@ def from_dict(cls, raw: Optional[Dict[str, Any]]) -> "ExternalInputs": return cls( ipf_unit_metadata_csv=raw.get("ipf_unit_metadata_csv"), ipf_target_metadata_csv=raw.get("ipf_target_metadata_csv"), + ipf_scoring_target_metadata_csv=raw.get( + "ipf_scoring_target_metadata_csv" + ), + ipf_scoring_matrix_mtx=raw.get("ipf_scoring_matrix_mtx"), + ipf_conversion_diagnostics_json=raw.get( + "ipf_conversion_diagnostics_json" + ), ) diff --git a/paper-l0/benchmarking/ipf_conversion.py b/paper-l0/benchmarking/ipf_conversion.py index 9f5624619..e803c12a5 100644 --- a/paper-l0/benchmarking/ipf_conversion.py +++ b/paper-l0/benchmarking/ipf_conversion.py @@ -1,19 +1,15 @@ """IPF-benchmark input conversion. Turns a filtered slice of the calibration package into the unit-table + -categorical-margin representation surveysd::ipf consumes. - -The conversion groups selected targets by their stratum-constraint signature -into margin blocks, maps each target's constraint tuples to a bucket label -using declared schemas (age 5-year buckets, AGI brackets at district and state -levels, positive-dollar indicators, raw categorical equality), materializes the -derived columns on the cloned-unit table, and emits one `categorical_margin` -row per (margin, geo, cell) triple. - -Single-cell-per-geo margins (e.g. `(district × snap > 0)`) get their -complement cell synthesized from baseline microdata totals so the margin is -proper. Complement cells are labelled and scored separately so the paper's -reporting can distinguish authored targets from synthesized baseline pins. +categorical-margin representation `surveysd::ipf` consumes. + +The converter is intentionally stricter than the shared benchmark harness: +it keeps only count-style targets that can be represented as one coherent +closed categorical margin system. When a requested target family is a binary +subset and an authored parent total exists on the exact reduced key, the +missing complement is derived from that authored total. Otherwise the family is +dropped with explicit diagnostics instead of being run as an open 1-cell +margin or sequentialized externally. """ from __future__ import annotations @@ -22,25 +18,20 @@ import sqlite3 from dataclasses import dataclass from pathlib import Path -from typing import Dict, Iterable, List, Optional, Sequence, Tuple +from typing import Dict, Iterable, List, Optional, Tuple import numpy as np import pandas as pd from benchmark_manifest import BenchmarkManifest -from policyengine_us_data.calibration.calibration_utils import apply_op # --------------------------------------------------------------------------- -# Geography and positive-dollar constants +# Geography constants # --------------------------------------------------------------------------- _GEO_VARS = {"state_fips", "congressional_district_geoid"} -# Upper cap used to close `> 0` dollar constraints into a finite bucket. -# Larger than annual US GDP, so any real dollar amount falls inside [0, CAP]. -POSITIVE_DOLLAR_CAP = 15e12 - # --------------------------------------------------------------------------- # Value coercion helpers @@ -207,6 +198,14 @@ def match_constraints(self, pairs: frozenset) -> Optional[str]: NON_POSITIVE_LABEL = "non_positive" +class IPFConversionError(ValueError): + """Raised when the requested target slice cannot form one valid IPF run.""" + + def __init__(self, message: str, diagnostics: Optional[Dict[str, object]] = None): + super().__init__(message) + self.diagnostics = diagnostics or {} + + def _positive_column_name(variable: str) -> str: return f"{variable}_positive" @@ -356,9 +355,8 @@ def _target_scope(target_variable: str) -> str: f"IPF conversion does not support target variable " f"'{target_variable}'. Currently supported: " f"{sorted(_SCOPE_BY_VARIABLE)}. " - "`tax_unit_count` and `spm_unit_count` would require a separate " - "unit table keyed on the respective entity and a separate IPF run " - "per entity; left out of this pass intentionally." + "`tax_unit_count` and `spm_unit_count` remain outside the core " + "household/person IPF path in this pass." ) from exc @@ -371,13 +369,37 @@ def _target_scope(target_variable: str) -> str: class MarginBlock: margin_id: str scope: str + source_variable: str + cell_dims: Tuple[str, ...] # sorted non-geo derived-column names cell_vars: Tuple[str, ...] # sorted derived-column names used as cell dimensions geo_var: Optional[str] # geo dimension included in the margin targets: List[ResolvedTarget] # cells that exist in the target package ( (geo_value, cell_tuple) ) target_cells: set - # cells synthesized from baseline to close the margin - synthesized_cells: List[Tuple[object, Tuple[Tuple[str, str], ...], float]] + + +@dataclass(frozen=True) +class MarginCell: + geo_value: Optional[object] + cell: Tuple[Tuple[str, str], ...] + target_value: float + target_name: str + is_authored: bool + authored_target_id: Optional[int] + source_target_ids: Tuple[int, ...] + derivation_reason: Optional[str] = None + + +@dataclass +class ClosedMarginBlock: + margin_id: str + scope: str + source_variable: str + cell_dims: Tuple[str, ...] + cell_vars: Tuple[str, ...] + geo_var: Optional[str] + closure_status: str + cells: List[MarginCell] def _margin_key(t: ResolvedTarget) -> Tuple[str, Optional[str], Tuple[str, ...]]: @@ -400,19 +422,26 @@ def _assemble_margins( blocks[key] = MarginBlock( margin_id=f"margin_{len(blocks):04d}", scope=t.scope, + source_variable=source_variable, + cell_dims=cell_vars, cell_vars=tuple(sorted(all_vars)), geo_var=geo_var, targets=[], target_cells=set(), - synthesized_cells=[], ) blocks[key].targets.append(t) blocks[key].target_cells.add((t.geo.value, t.cell)) return list(blocks.values()) -def _should_synthesize_complement(block: MarginBlock) -> bool: - """True iff the block has a 1-cell-per-geo pattern.""" +def _is_single_cell_per_geo(block: MarginBlock) -> bool: + """True iff the block carries exactly one cell per geography. + + surveysd handles these as 1-cell `xtabs` arrays: the authored cell is + raked to its target and units outside that cell are left unconstrained + by the margin. Kept for diagnostics and reporting — no longer drives + emission branching. + """ if block.geo_var is None: return len({cell for _, cell in block.target_cells}) == 1 cells_per_geo: Dict[object, set] = {} @@ -423,88 +452,30 @@ def _should_synthesize_complement(block: MarginBlock) -> bool: ) -def _synthesize_complement_cells( - block: MarginBlock, - unit_data: pd.DataFrame, - weight_column: str, -) -> None: - """Add a complement row per geo to single-cell-per-geo blocks. - - The complement's target value is pinned to the baseline weighted count of - rows falling in the complement cell. That makes the margin feasible - without requiring an external complement total. - """ - cells = {cell for _, cell in block.target_cells} - if len(cells) != 1: - return - (cell,) = cells - complement_cell = _flip_cell(cell) - if complement_cell is None: - return - - # Evaluate the complement cell's weighted count from the unit table. - mask = _mask_for_cell(unit_data, complement_cell) - if block.geo_var is None: - value = float(unit_data.loc[mask, weight_column].sum()) - block.synthesized_cells.append((None, complement_cell, value)) - return - groups = unit_data.loc[mask].groupby(block.geo_var)[weight_column].sum() - for geo_val in sorted({g for g, _ in block.target_cells}): - value = float(groups.get(geo_val, 0.0)) - block.synthesized_cells.append((geo_val, complement_cell, value)) - - -def _flip_cell( - cell: Tuple[Tuple[str, str], ...], -) -> Optional[Tuple[Tuple[str, str], ...]]: - """For a cell that contains exactly one `_positive="positive"` entry, - return the same cell with that entry flipped to `non_positive`. Otherwise - return None (complement not defined).""" - flipped: List[Tuple[str, str]] = [] - changed = False - for col, label in cell: - if col.endswith("_positive") and label == POSITIVE_LABEL: - flipped.append((col, NON_POSITIVE_LABEL)) - changed = True - else: - flipped.append((col, label)) - if not changed: - return None - return tuple(sorted(flipped)) - - -def _mask_for_cell( - unit_data: pd.DataFrame, cell: Tuple[Tuple[str, str], ...] -) -> np.ndarray: - mask = np.ones(len(unit_data), dtype=bool) - for col, label in cell: - if col not in unit_data.columns: - raise KeyError(f"Unit table is missing derived column '{col}'") - mask &= unit_data[col].astype(str).to_numpy() == str(label) - return mask - - def check_margin_consistency( - blocks: List[MarginBlock], + blocks: List[object], tolerance: float = 1e-3, ) -> List[Dict[str, object]]: - """Return a list of consistency issues, one per (geo_value) that has - mismatched totals across different margin blocks. - - `surveysd::ipf` refuses to run when two person-scope (or two household- - scope) margins imply different population totals for the same geography. - The check is `rel_err = |t1 - t2| / max(t1, t2) > tolerance`. - """ + """Return per-geo population-total disagreements across closed blocks.""" totals_by_scope_geo: Dict[Tuple[str, Optional[str], object], Dict[str, float]] = {} for block in blocks: - # Include synthesized complement cells — they are part of the margin's total. by_geo: Dict[object, float] = {} - for t in block.targets: - by_geo[t.geo.value] = by_geo.get(t.geo.value, 0.0) + float(t.target_value) - for geo_val, _, value in block.synthesized_cells: - by_geo[geo_val] = by_geo.get(geo_val, 0.0) + float(value) + if hasattr(block, "cells"): + for cell in block.cells: + by_geo[cell.geo_value] = by_geo.get(cell.geo_value, 0.0) + float( + cell.target_value + ) + scope = block.scope + geo_var = block.geo_var + else: + for t in block.targets: + by_geo[t.geo.value] = by_geo.get(t.geo.value, 0.0) + float( + t.target_value + ) + scope = block.scope + geo_var = block.geo_var for geo_val, total in by_geo.items(): - key = (block.scope, block.geo_var, geo_val) + key = (scope, geo_var, geo_val) totals_by_scope_geo.setdefault(key, {})[block.margin_id] = total issues: List[Dict[str, object]] = [] @@ -772,6 +743,406 @@ def _build_household_level_unit_data( return frame, repeated +# --------------------------------------------------------------------------- +# Closed-system validation and exact closure +# --------------------------------------------------------------------------- + + +def _targeted_unit_slice(unit_data: pd.DataFrame, block: MarginBlock) -> pd.DataFrame: + if block.geo_var is None: + return unit_data + geo_values = {geo_value for geo_value, _ in block.target_cells} + return unit_data.loc[unit_data[block.geo_var].isin(list(geo_values))].copy() + + +def _row_to_cell( + row: pd.Series | dict, + *, + geo_var: Optional[str], + cell_dims: Tuple[str, ...], +) -> Tuple[Optional[object], Tuple[Tuple[str, str], ...]]: + geo_value = row[geo_var] if geo_var is not None else None + cell = tuple(sorted((col, str(row[col])) for col in cell_dims)) + return geo_value, cell + + +def _observed_cells_for_block( + unit_data: pd.DataFrame, block: MarginBlock +) -> set[Tuple[Optional[object], Tuple[Tuple[str, str], ...]]]: + targeted = _targeted_unit_slice(unit_data, block) + if targeted.empty: + return set() + columns = [*block.cell_dims] + if block.geo_var is not None: + columns = [block.geo_var, *columns] + observed = targeted[columns].drop_duplicates() + return { + _row_to_cell(row._asdict(), geo_var=block.geo_var, cell_dims=block.cell_dims) + for row in observed.itertuples(index=False) + } + + +def _parent_key_for_cell( + geo_value: Optional[object], + cell: Tuple[Tuple[str, str], ...], + subset_dim: str, +) -> Tuple[Optional[object], Tuple[Tuple[str, str], ...]]: + return ( + geo_value, + tuple(sorted((col, label) for col, label in cell if col != subset_dim)), + ) + + +def _group_authored_cells_by_parent( + block: MarginBlock, subset_dim: str +) -> Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], List[ResolvedTarget]]: + grouped: Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], List[ResolvedTarget]] = {} + for target in block.targets: + grouped.setdefault( + _parent_key_for_cell(target.geo.value, target.cell, subset_dim), [] + ).append(target) + return grouped + + +def _group_observed_labels_by_parent( + unit_data: pd.DataFrame, block: MarginBlock, subset_dim: str +) -> Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], set[str]]: + targeted = _targeted_unit_slice(unit_data, block) + if targeted.empty: + return {} + columns = [subset_dim, *(dim for dim in block.cell_dims if dim != subset_dim)] + if block.geo_var is not None: + columns = [block.geo_var, *columns] + observed = targeted[columns].drop_duplicates() + grouped: Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], set[str]] = {} + for row in observed.to_dict("records"): + geo_value = row[block.geo_var] if block.geo_var is not None else None + parent_assignments = tuple( + sorted( + (dim, str(row[dim])) for dim in block.cell_dims if dim != subset_dim + ) + ) + grouped.setdefault((geo_value, parent_assignments), set()).add( + str(row[subset_dim]) + ) + return grouped + + +def _build_parent_total_lookup( + block: MarginBlock, +) -> Tuple[ + Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], ResolvedTarget], + Tuple[int, ...], +]: + lookup: Dict[Tuple[Optional[object], Tuple[Tuple[str, str], ...]], ResolvedTarget] = {} + ambiguous_target_ids: set[int] = set() + for target in block.targets: + key = (target.geo.value, tuple(sorted(target.cell))) + if key in lookup: + ambiguous_target_ids.add(int(target.target_id)) + ambiguous_target_ids.add(int(lookup[key].target_id)) + continue + lookup[key] = target + return lookup, tuple(sorted(ambiguous_target_ids)) + + +def _full_partition_cells(block: MarginBlock) -> List[MarginCell]: + return [ + MarginCell( + geo_value=target.geo.value, + cell=target.cell, + target_value=float(target.target_value), + target_name=target.target_name, + is_authored=True, + authored_target_id=target.target_id, + source_target_ids=(target.target_id,), + ) + for target in block.targets + ] + + +def _try_close_binary_subset( + block: MarginBlock, + blocks_by_key: Dict[Tuple[str, Optional[str], Tuple[str, ...]], MarginBlock], + unit_data: pd.DataFrame, + tolerance: float, +) -> Tuple[Optional[ClosedMarginBlock], Optional[Dict[str, object]]]: + missing_parent_reason: Optional[Dict[str, object]] = None + ambiguous_parent_reason: Optional[Dict[str, object]] = None + for subset_dim in block.cell_dims: + observed_by_parent = _group_observed_labels_by_parent(unit_data, block, subset_dim) + if not observed_by_parent: + return None, { + "reason": "missing_unit_support", + "margin_id": block.margin_id, + "target_ids": [int(target.target_id) for target in block.targets], + } + + global_labels = set().union(*observed_by_parent.values()) + if len(global_labels) > 2: + continue + + parent_key = ( + block.source_variable, + block.geo_var, + tuple(dim for dim in block.cell_dims if dim != subset_dim), + ) + parent_block = blocks_by_key.get(parent_key) + if parent_block is None: + missing_parent_reason = { + "reason": "missing_parent_total", + "margin_id": block.margin_id, + "subset_dimension": subset_dim, + "parent_margin_key": { + "source_variable": block.source_variable, + "geo_var": block.geo_var, + "cell_dims": [dim for dim in block.cell_dims if dim != subset_dim], + }, + "target_ids": [int(target.target_id) for target in block.targets], + } + continue + + parent_totals, ambiguous_target_ids = _build_parent_total_lookup(parent_block) + if ambiguous_target_ids: + ambiguous_parent_reason = { + "reason": "ambiguous_parent_total", + "margin_id": block.margin_id, + "subset_dimension": subset_dim, + "parent_margin_id": parent_block.margin_id, + "parent_target_ids": list(ambiguous_target_ids), + "target_ids": [int(target.target_id) for target in block.targets], + } + continue + authored_by_parent = _group_authored_cells_by_parent(block, subset_dim) + emitted_cells: List[MarginCell] = [] + valid = True + invalid_reason: Optional[Dict[str, object]] = None + + for parent_lookup_key, observed_labels in observed_by_parent.items(): + authored_targets = authored_by_parent.get(parent_lookup_key, []) + if not authored_targets: + continue + + parent_target = parent_totals.get(parent_lookup_key) + if parent_target is None: + valid = False + invalid_reason = { + "reason": "missing_parent_total", + "margin_id": block.margin_id, + "parent_margin_key": { + "source_variable": block.source_variable, + "geo_var": block.geo_var, + "cell_dims": [dim for dim in block.cell_dims if dim != subset_dim], + }, + "target_ids": [int(target.target_id) for target in block.targets], + } + break + + authored_labels = { + dict(target.cell)[subset_dim] for target in authored_targets + } + if len(observed_labels) > 2 or len(observed_labels - authored_labels) > 1: + valid = False + invalid_reason = { + "reason": "unsupported_partial_margin", + "margin_id": block.margin_id, + "subset_dimension": subset_dim, + "target_ids": [int(target.target_id) for target in block.targets], + } + break + + authored_sum = float( + sum(float(target.target_value) for target in authored_targets) + ) + complement_value = float(parent_target.target_value) - authored_sum + if complement_value < -tolerance: + valid = False + invalid_reason = { + "reason": "negative_derived_complement", + "margin_id": block.margin_id, + "subset_dimension": subset_dim, + "parent_target_id": int(parent_target.target_id), + "target_ids": [int(target.target_id) for target in block.targets], + "derived_value": complement_value, + } + break + + for target in authored_targets: + emitted_cells.append( + MarginCell( + geo_value=target.geo.value, + cell=target.cell, + target_value=float(target.target_value), + target_name=target.target_name, + is_authored=True, + authored_target_id=target.target_id, + source_target_ids=(target.target_id,), + ) + ) + + missing_labels = observed_labels - authored_labels + if len(missing_labels) == 1: + missing_label = next(iter(missing_labels)) + if complement_value > tolerance and missing_label not in observed_labels: + valid = False + invalid_reason = { + "reason": "missing_unit_support", + "margin_id": block.margin_id, + "subset_dimension": subset_dim, + "target_ids": [int(target.target_id) for target in block.targets], + } + break + parent_geo_value, parent_assignments = parent_lookup_key + derived_cell = tuple( + sorted((*parent_assignments, (subset_dim, missing_label))) + ) + emitted_cells.append( + MarginCell( + geo_value=parent_geo_value, + cell=derived_cell, + target_value=max(complement_value, 0.0), + target_name=( + f"derived::{block.margin_id}::{subset_dim}={missing_label}" + ), + is_authored=False, + authored_target_id=None, + source_target_ids=tuple( + sorted( + { + int(parent_target.target_id), + *[int(target.target_id) for target in authored_targets], + } + ) + ), + derivation_reason="authored_parent_total", + ) + ) + + if not valid: + return None, invalid_reason + + unique_cells = { + (cell.geo_value, cell.cell, cell.is_authored): cell for cell in emitted_cells + } + return ( + ClosedMarginBlock( + margin_id=block.margin_id, + scope=block.scope, + source_variable=block.source_variable, + cell_dims=block.cell_dims, + cell_vars=block.cell_vars, + geo_var=block.geo_var, + closure_status="binary_subset_with_parent_total", + cells=list(unique_cells.values()), + ), + None, + ) + + if ambiguous_parent_reason is not None: + return None, ambiguous_parent_reason + if missing_parent_reason is not None: + return None, missing_parent_reason + return None, { + "reason": "unsupported_partial_margin", + "margin_id": block.margin_id, + "target_ids": [int(target.target_id) for target in block.targets], + } + + +def _validate_household_margin_invariance( + unit_data: pd.DataFrame, + blocks: List[MarginBlock], +) -> Tuple[List[MarginBlock], List[Dict[str, object]]]: + valid_blocks: List[MarginBlock] = [] + dropped: List[Dict[str, object]] = [] + for block in blocks: + if block.scope != "household": + valid_blocks.append(block) + continue + varying_columns = [] + for column in block.cell_vars: + if column not in unit_data.columns: + continue + nunique = unit_data.groupby("household_id", sort=False)[column].nunique( + dropna=False + ) + if (nunique > 1).any(): + varying_columns.append(column) + if varying_columns: + dropped.append( + { + "reason": "non_invariant_household_constraint_variable", + "margin_id": block.margin_id, + "columns": varying_columns, + "target_ids": [int(target.target_id) for target in block.targets], + } + ) + continue + valid_blocks.append(block) + return valid_blocks, dropped + + +def _close_margin_blocks( + blocks: List[MarginBlock], + unit_data: pd.DataFrame, + tolerance: float = 1e-9, +) -> Tuple[List[ClosedMarginBlock], List[Dict[str, object]]]: + blocks_by_key = { + (block.source_variable, block.geo_var, block.cell_dims): block for block in blocks + } + closed_blocks: List[ClosedMarginBlock] = [] + dropped: List[Dict[str, object]] = [] + + for block in blocks: + observed_cells = _observed_cells_for_block(unit_data, block) + authored_cells = { + (target.geo.value, tuple(sorted(target.cell))) for target in block.targets + } + unsupported_authored = [ + target + for target in block.targets + if (target.geo.value, tuple(sorted(target.cell))) not in observed_cells + and abs(float(target.target_value)) > tolerance + ] + if unsupported_authored: + dropped.append( + { + "reason": "missing_unit_support", + "margin_id": block.margin_id, + "target_ids": [int(target.target_id) for target in unsupported_authored], + } + ) + continue + + if authored_cells == observed_cells: + closed_blocks.append( + ClosedMarginBlock( + margin_id=block.margin_id, + scope=block.scope, + source_variable=block.source_variable, + cell_dims=block.cell_dims, + cell_vars=block.cell_vars, + geo_var=block.geo_var, + closure_status="full_partition", + cells=_full_partition_cells(block), + ) + ) + continue + + closed_block, reason = _try_close_binary_subset( + block=block, + blocks_by_key=blocks_by_key, + unit_data=unit_data, + tolerance=tolerance, + ) + if closed_block is None: + dropped.append(reason or {"reason": "unsupported_partial_margin"}) + continue + closed_blocks.append(closed_block) + + return closed_blocks, dropped + + # --------------------------------------------------------------------------- # Main entry point # --------------------------------------------------------------------------- @@ -785,23 +1156,10 @@ def build_ipf_inputs( """Return `(unit_metadata, ipf_target_metadata)` ready for `ipf_runner.R`. Consumes the same `filtered_targets` slice that the GREG and L0 runners - see. Internally filters to the IPF-eligible subset with two checks: - - 1. **Count check** — keep only targets whose `variable` is a supported - count (`person_count`, `household_count`). Dollar-total targets stay - in the shared matrix for GREG and L0 but are dropped here. - 2. **Resolver check** — keep only targets whose stratum constraints - resolve through the declared bucket schemas (age, AGI district / AGI - state, EITC child count, positive-dollar `>0`, raw equality). Targets - whose constraints don't match any declared schema are dropped. - - Both checks are non-fatal; dropped targets are recorded on the returned - metadata's `.attrs['dropped_targets']` so the caller can report them. - - The surviving subset is grouped by constraint signature into margin - blocks; single-cell-per-geo margins get their complement cell - synthesized from the baseline weighted count of the complement predicate - on the cloned-unit table. + see. Internally keeps only IPF-eligible count targets, resolves their + categorical cells, closes only exact binary subset systems backed by + authored parent totals, and rejects any remaining open or incoherent + system rather than sequentializing it. """ if filtered_targets.empty: raise ValueError("filtered_targets is empty; nothing to convert.") @@ -829,6 +1187,14 @@ def build_ipf_inputs( "No count-style targets in filtered_targets; IPF has nothing to run. " f"Supported variables: {sorted(_SCOPE_BY_VARIABLE)}." ) + dropped_target_details: List[Dict[str, object]] = [ + { + "reason": "non_count_style", + "target_id": int(row.get("target_id", -1)), + "target_name": str(row.get("target_name", "?")), + } + for _, row in dropped_non_count.iterrows() + ] stratum_constraints = _load_stratum_constraints( db_path=db_path, @@ -852,6 +1218,14 @@ def build_ipf_inputs( "No targets in filtered_targets resolved through the declared " "bucket schemas. Nothing for IPF to run." ) + dropped_target_details.extend( + { + "reason": "unresolvable_constraints", + "target_id": target_id, + "target_name": target_name, + } + for target_id, target_name in dropped_unresolvable + ) blocks = _assemble_margins(resolved) @@ -883,81 +1257,150 @@ def build_ipf_inputs( derived_cols = {cv for b in blocks for cv in b.cell_vars if cv not in _GEO_VARS} unit_data = _materialize_derived_columns(unit_data, derived_cols, raw_values) - # --- Synthesize complement cells for single-cell-per-geo margins ------- - for block in blocks: - if _should_synthesize_complement(block): - _synthesize_complement_cells(block, unit_data, weight_column="base_weight") + if has_person_scoped and any(block.scope == "household" for block in blocks): + blocks, invariance_drops = _validate_household_margin_invariance( + unit_data=unit_data, + blocks=blocks, + ) + dropped_target_details.extend( + { + **detail, + "target_name": None, + } + for detail in invariance_drops + ) - # --- Emit categorical_margin target rows ------------------------------- - out_rows = [] - for block in blocks: - margin_vars_joined = "|".join(block.cell_vars) - # Authored target rows - for t in block.targets: - cell_assignments = _cell_assignments(t, block) - out_rows.append( + closed_blocks, closure_drops = _close_margin_blocks(blocks=blocks, unit_data=unit_data) + dropped_target_details.extend(closure_drops) + dropped_counts: Dict[str, int] = {} + for detail in dropped_target_details: + reason = str(detail.get("reason", "unknown")) + count = len(detail.get("target_ids", [])) or 1 + dropped_counts[reason] = dropped_counts.get(reason, 0) + int(count) + if not closed_blocks: + raise IPFConversionError( + "No closed categorical IPF margins remain after validation.", + diagnostics={ + "requested_target_count": int(len(filtered_targets)), + "retained_authored_target_count": 0, + "derived_complement_count": 0, + "dropped_targets": dropped_counts, + "dropped_target_details": dropped_target_details, + "margin_consistency_issues": [], + "derived_complement_rows": [], + }, + ) + + issues = check_margin_consistency(closed_blocks) + if issues: + incompatible_details = [] + for issue in issues: + margin_ids = list(issue.get("margin_totals", {}).keys()) + target_ids = sorted( { - "margin_id": block.margin_id, - "scope": block.scope, - "target_type": "categorical_margin", - "variables": margin_vars_joined, - "cell": "|".join(cell_assignments), - "target_value": float(t.target_value), - "target_name": t.target_name, - "source_variable": t.source_variable, - "synthesized": False, + int(cell.authored_target_id) + for block in closed_blocks + if block.margin_id in margin_ids + for cell in block.cells + if cell.is_authored and cell.authored_target_id is not None } ) - # Synthesized complement rows - for geo_val, cell, value in block.synthesized_cells: - cell_assignments = _complement_cell_assignments(geo_val, cell, block) - out_rows.append( + incompatible_details.append( { - "margin_id": block.margin_id, - "scope": block.scope, - "target_type": "categorical_margin", - "variables": margin_vars_joined, - "cell": "|".join(cell_assignments), - "target_value": float(value), - "target_name": f"{block.margin_id}_complement_{geo_val}", - "source_variable": "synthesized_baseline", - "synthesized": True, + "reason": "incompatible_totals", + "scope": issue.get("scope"), + "geo_var": issue.get("geo_var"), + "geo_value": issue.get("geo_value"), + "margin_ids": margin_ids, + "target_ids": target_ids, } ) - - target_metadata = pd.DataFrame(out_rows) - - # --- Margin consistency check ----------------------------------------- - issues = check_margin_consistency(blocks) - target_metadata.attrs["margin_consistency_issues"] = issues - target_metadata.attrs["dropped_targets"] = { - "non_count_style": int(len(dropped_non_count)), - "unresolvable_constraints": int(len(dropped_unresolvable)), - "unresolvable_examples": dropped_unresolvable[:10], - } - if issues: - import warnings - - warnings.warn( - f"{len(issues)} geography-scope combination(s) have mismatched " - "totals across multiple IPF margin blocks. `surveysd::ipf` will " - "refuse to run with these margins combined; run one margin block " - "at a time or harmonize the authored totals. See " - "target_metadata.attrs['margin_consistency_issues'] for details.", - stacklevel=2, + dropped_target_details.extend(incompatible_details) + dropped_counts["incompatible_totals"] = dropped_counts.get( + "incompatible_totals", 0 + ) + sum(len(detail["target_ids"]) or 1 for detail in incompatible_details) + raise IPFConversionError( + "IPF-retained margins do not form one coherent IPF problem.", + diagnostics={ + "requested_target_count": int(len(filtered_targets)), + "retained_authored_target_count": int( + len( + { + int(cell.authored_target_id) + for block in closed_blocks + for cell in block.cells + if cell.is_authored + and cell.authored_target_id is not None + } + ) + ), + "derived_complement_count": int( + sum( + 1 + for block in closed_blocks + for cell in block.cells + if not cell.is_authored + ) + ), + "dropped_targets": dropped_counts, + "dropped_target_details": dropped_target_details, + "margin_consistency_issues": issues, + "derived_complement_rows": [ + { + "margin_id": block.margin_id, + "cell": "|".join(_cell_assignments_from_cell(block, cell)), + "target_value": float(cell.target_value), + "source_target_ids": list(cell.source_target_ids), + "derivation_reason": cell.derivation_reason, + } + for block in closed_blocks + for cell in block.cells + if not cell.is_authored + ], + }, ) + target_metadata = emit_target_rows(closed_blocks) + retained_authored_target_ids = sorted( + { + int(cell.authored_target_id) + for block in closed_blocks + for cell in block.cells + if cell.is_authored and cell.authored_target_id is not None + } + ) + derived_complement_rows = [ + { + "margin_id": block.margin_id, + "cell": "|".join(_cell_assignments_from_cell(block, cell)), + "target_value": float(cell.target_value), + "source_target_ids": list(cell.source_target_ids), + "derivation_reason": cell.derivation_reason, + } + for block in closed_blocks + for cell in block.cells + if not cell.is_authored + ] + target_metadata.attrs["margin_consistency_issues"] = issues + target_metadata.attrs["retained_authored_target_ids"] = retained_authored_target_ids + target_metadata.attrs["derived_complement_rows"] = derived_complement_rows + target_metadata.attrs["dropped_targets"] = dropped_counts + target_metadata.attrs["dropped_target_details"] = dropped_target_details + target_metadata.attrs["requested_target_count"] = int(len(filtered_targets)) + target_metadata.attrs["retained_authored_target_count"] = int( + len(retained_authored_target_ids) + ) + target_metadata.attrs["derived_complement_count"] = int(len(derived_complement_rows)) return unit_data, target_metadata def split_target_metadata_by_margin( target_metadata: pd.DataFrame, ) -> Dict[str, pd.DataFrame]: - """Return one sub-frame per margin_id, safe to pass to `ipf_runner.R`. + """Return one sub-frame per margin_id. - Inconsistent authored totals across margin blocks break a combined - `surveysd::ipf` call. Splitting by `margin_id` lets the benchmark run - each block independently and score the weights separately. + Kept as a notebook/test helper. The benchmark no longer chains separate + IPF calls across these blocks. """ return { mid: sub.reset_index(drop=True) @@ -974,19 +1417,54 @@ def _cell_assignments(t: ResolvedTarget, block: MarginBlock) -> List[str]: return [f"{col}={assignments[col]}" for col in block.cell_vars] -def _complement_cell_assignments( - geo_val: object, - cell: Tuple[Tuple[str, str], ...], - block: MarginBlock, -) -> List[str]: +def _cell_assignments_from_cell(block: ClosedMarginBlock, cell: MarginCell) -> List[str]: assignments: Dict[str, str] = {} if block.geo_var is not None: - assignments[block.geo_var] = str(geo_val) - for col, lbl in cell: + assignments[block.geo_var] = str(cell.geo_value) + for col, lbl in cell.cell: assignments[col] = str(lbl) return [f"{col}={assignments[col]}" for col in block.cell_vars] +def emit_target_rows(blocks: List[ClosedMarginBlock]) -> pd.DataFrame: + """Emit one `categorical_margin` row per authored or derived IPF cell.""" + out_rows = [] + for block in blocks: + if not hasattr(block, "cells"): + raise TypeError( + "emit_target_rows expects closed margin blocks. " + "Call close_margins_for_testing(...) or build_ipf_inputs(...) " + "before emitting target rows." + ) + margin_vars_joined = "|".join(block.cell_vars) + for cell in block.cells: + cell_assignments = _cell_assignments_from_cell(block, cell) + out_rows.append( + { + "margin_id": block.margin_id, + "scope": block.scope, + "target_type": "categorical_margin", + "variables": margin_vars_joined, + "cell": "|".join(cell_assignments), + "target_value": float(cell.target_value), + "target_name": cell.target_name, + "source_variable": block.source_variable, + "is_authored": bool(cell.is_authored), + "authored_target_id": ( + int(cell.authored_target_id) + if cell.authored_target_id is not None + else np.nan + ), + "source_target_ids": "|".join( + str(target_id) for target_id in cell.source_target_ids + ), + "closure_status": block.closure_status, + "derivation_reason": cell.derivation_reason, + } + ) + return pd.DataFrame(out_rows) + + # --------------------------------------------------------------------------- # Back-compat / diagnostics helpers exported for notebooks and tests # --------------------------------------------------------------------------- @@ -1021,3 +1499,13 @@ def assemble_margins_for_testing( ) -> List[MarginBlock]: """Expose margin assembly for the notebook walkthrough and tests.""" return _assemble_margins(resolved) + + +def close_margins_for_testing( + resolved: List[ResolvedTarget], + unit_data: pd.DataFrame, + tolerance: float = 1e-9, +) -> Tuple[List[ClosedMarginBlock], List[Dict[str, object]]]: + """Pure-Python closure helper for unit tests and notebook walkthroughs.""" + blocks = _assemble_margins(resolved) + return _close_margin_blocks(blocks=blocks, unit_data=unit_data, tolerance=tolerance) diff --git a/paper-l0/benchmarking/manifests/ipf_demo_small.example.json b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json index d9168a5a8..15939a7d7 100644 --- a/paper-l0/benchmarking/manifests/ipf_demo_small.example.json +++ b/paper-l0/benchmarking/manifests/ipf_demo_small.example.json @@ -1,7 +1,7 @@ { "name": "ipf_demo_small", "tier": "tier_1", - "description": "Example IPF benchmark. Uses the same target_filters path as GREG and L0; the IPF converter internally keeps only the count-style targets whose constraints resolve through the declared bucket schemas, builds one margin block per constraint signature, and synthesizes complement cells for any single-cell-per-geo margins.", + "description": "Example IPF benchmark. Uses the same target_filters path as GREG and L0; the IPF converter internally keeps only count-style targets whose constraints resolve through the declared bucket schemas and form a closed categorical margin system. Binary subset families survive only when authored parent totals exist on the exact reduced key; open subset families are dropped.", "package_path": "policyengine_us_data/storage/calibration/calibration_package.pkl", "methods": [ "l0", diff --git a/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb b/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb index 40e1f4b40..4f151d1bc 100644 --- a/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb +++ b/paper-l0/benchmarking/notebooks/02_ipf_walkthrough.ipynb @@ -571,15 +571,12 @@ "source": [ "## 4. Input format 2/3 — target metadata\n", "\n", - "The IPF runner supports two encodings in `ipf_target_metadata.csv`:\n", + "The IPF runner accepts one target encoding: `categorical_margin`. One row per\n", + "authored margin cell; rows sharing a `margin_id` are grouped into a single\n", + "`surveysd::ipf` constraint via `xtabs`.\n", "\n", - "- `numeric_total` rows, each pointing to an indicator column on the unit table. This is\n", - " what `ipf_conversion.py` auto-generates from the saved calibration package.\n", - "- `categorical_margin` rows, one per cell of a margin table. Rows with the same\n", - " `margin_id` are grouped into a single surveysd constraint.\n", - "\n", - "For a clean textbook-style IPF demo we write the targets as four `categorical_margin`\n", - "rows over a single `district_role` margin." + "For this textbook-style demo we write the four person-count targets as four\n", + "`categorical_margin` rows over a single `district_role` margin.\n" ] }, { @@ -1054,55 +1051,55 @@ "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 target_nametarget_valuebaseline_weighted_totalfitted_weighted_totalabs_rel_errortarget_nametarget_valuebaseline_weighted_totalfitted_weighted_totalabs_rel_error
0district_A_adults940.0900.0940.06.07e-090district_A_adults940.0900.0940.06.07e-09
1district_A_children310.0300.0310.01.84e-081district_A_children310.0300.0310.01.84e-08
2district_B_adults1,000.0900.0999.95.35e-052district_B_adults1,000.0900.0999.95.35e-05
3district_B_children600.0600.0600.18.92e-053district_B_children600.0600.0600.18.92e-05
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -1156,9 +1153,9 @@ "source": [ "## 10. How the benchmark scaffold produces these inputs from raw target constraints\n", "\n", - "Sections 3-5 hand-built the unit table, the `district_role` category, and the margin rows directly. In production, those artifacts come out of `paper-l0/benchmarking/ipf_conversion.py`, which takes the **same `filtered_targets` DataFrame** that the GREG and L0 runners see — the manifest's `target_filters` controls target selection for all three methods — and internally drops anything IPF can't use. Two filters run inside the converter:\n", + "Sections 3-5 hand-built the unit table, the `district_role` category, and the margin rows directly. In production, those artifacts come out of `paper-l0/benchmarking/ipf_conversion.py`, which takes the **same `filtered_targets` DataFrame** that the GREG and L0 runners see — the manifest's `target_filters` controls target selection for all three methods — and then applies three checks before anything reaches `surveysd::ipf`:\n", "\n", - "1. **Count check.** Keep only targets whose `variable` is a supported count (`person_count`, `household_count`). Dollar-total targets and tax-unit / SPM-unit counts stay in the shared sparse matrix for GREG and L0 but are dropped here. `tax_unit_count` and `spm_unit_count` need a separate unit table keyed by the respective entity; left out of this pass.\n", + "1. **Count check.** Keep only targets whose `variable` is a supported count (`person_count`, `household_count`). Dollar-total targets and tax-unit / SPM-unit counts stay in the shared sparse matrix for GREG and L0 but are dropped here.\n", "2. **Resolver check.** For each surviving target, map its stratum constraints to a categorical cell label using declared bucket schemas:\n", "\n", " | variable | schema | cell labels |\n", @@ -1167,12 +1164,13 @@ " | `adjusted_gross_income` (district) | 9 brackets | `(-inf,1)`, `[1,10k)`, …, `[500k,inf)` |\n", " | `adjusted_gross_income` (state) | 10 brackets | extends district up to `[1M,inf)` |\n", " | `eitc_child_count` | 4 discrete | `0`, `1`, `2`, `>2` |\n", - " | any dollar var used with `> 0` | binary | `positive`, `non_positive` (positive is capped at $15T so the cell is a closed bucket) |\n", + " | any dollar var used with `> 0` | binary | `positive`, `non_positive` |\n", " | everything else with `==` | raw equality | the value itself |\n", "\n", " Targets whose constraints don't map to any declared schema are dropped.\n", + "3. **Closure check.** Resolved targets are grouped into margin blocks and kept only if they form a closed categorical system. Full partitions stay in. Binary subset families stay in only when an authored parent total exists on the exact reduced key so the complement can be derived exactly. Open subset families are dropped rather than emitted as 1-cell margins.\n", "\n", - "The survivors are grouped into margin blocks by constraint signature, single-cell-per-geo blocks get their complement cell synthesized from the baseline weighted count of the complement predicate, and the blocks are emitted as `categorical_margin` rows. Both drops are non-fatal — counts land on `target_metadata.attrs['dropped_targets']` so the caller can report them." + "The next cells walk through that exact sequence on a tiny illustrative slice.\n" ] }, { @@ -1182,7 +1180,7 @@ "source": [ "### 10a. Input: a slice of `filtered_targets`\n", "\n", - "The converter takes exactly the same DataFrame the GREG and L0 paths take. Below is a tiny illustrative slice including a mix of count-style and non-count targets so the count check is visible. Four person-count targets span age buckets in two districts; two household-count targets ask for `snap > 0` in each district (single-cell-per-geo — these will need complement synthesis); the remaining two rows are non-count targets that the count check will drop." + "The converter takes exactly the same DataFrame the GREG and L0 paths take. Below is a tiny illustrative slice including a mix of count-style and non-count targets so the count check is visible. Four person-count targets span age buckets in two districts. Two household-count targets ask for `snap > 0` in each district, but **do not** include household totals; under the corrected IPF contract those targets illustrate the fail-closed behavior and will be reported as non-runnable subset margins. The remaining two rows are non-count targets that the count check will drop.\n" ] }, { @@ -1660,14 +1658,10 @@ "from ipf_conversion import (\n", " resolve_targets_for_testing,\n", " assemble_margins_for_testing,\n", + " close_margins_for_testing,\n", " check_margin_consistency,\n", - " split_target_metadata_by_margin,\n", + " emit_target_rows,\n", " _SCOPE_BY_VARIABLE,\n", - " _materialize_derived_columns,\n", - " _should_synthesize_complement,\n", - " _synthesize_complement_cells,\n", - " _cell_assignments,\n", - " _complement_cell_assignments,\n", ")\n", "\n", "# 1. Count check: keep only supported count-style target variables.\n", @@ -1690,13 +1684,13 @@ " {\n", " \"target_name\": r.target_name,\n", " \"geo\": f\"{r.geo.variable}={r.geo.value}\",\n", - " \"derived_cell\": \" & \".join(f\"{c}={l}\" for c, l in r.cell),\n", + " \"derived_cell\": \" & \".join(f\"{c}={lbl}\" for c, lbl in r.cell),\n", " \"scope\": r.scope,\n", " \"target_value\": r.target_value,\n", " }\n", " for r in resolved\n", " ]\n", - ")" + ")\n" ] }, { @@ -1824,15 +1818,13 @@ "id": "e4d86166", "metadata": {}, "source": [ - "### 10d. Synthesize complement cells\n", + "### 10d. Close only supported margin systems\n", + "\n", + "The age-bracket block is already a complete 2×2 partition (two age buckets per district), so it is IPF-runnable as-is.\n", "\n", - "The age-bracket block is already a complete 2×2 tile. The `snap > 0` block is a single\n", - "cell per district — IPF needs the complementary `snap_positive=non_positive` cell to\n", - "have a proper margin. The scaffold computes the complement count from baseline\n", - "microdata and emits it as a flagged `synthesized=True` row.\n", + "The `snap > 0` block is different: it is only a subset margin and this toy slice does **not** include authored household totals by district. Under the corrected implementation that means the block is not runnable as classical IPF and is dropped rather than emitted as an open 1-cell margin.\n", "\n", - "For the demo we need a unit table with the raw `snap` column so the complement can be\n", - "evaluated. We reuse this notebook's toy people and attach a synthetic `snap` column." + "The next cell builds a tiny resolved unit table and runs the same closure helper used by the converter tests.\n" ] }, { @@ -1869,62 +1861,35 @@ " \n", " \n", " \n", - " target_name\n", - " geo\n", - " cell\n", - " target_value\n", - " synthesized\n", + " margin_id\n", + " scope\n", + " status\n", + " n_emitted_cells\n", " \n", " \n", " \n", " \n", " 0\n", - " hh_snap_pos_d601\n", - " 601\n", - " snap_positive=positive\n", - " 80.0\n", - " False\n", + " margin_0000\n", + " person\n", + " full_partition\n", + " 4\n", " \n", " \n", " 1\n", - " hh_snap_pos_d602\n", - " 602\n", - " snap_positive=positive\n", - " 70.0\n", - " False\n", - " \n", - " \n", - " 2\n", - " margin_complement_601\n", - " 601\n", - " snap_positive=non_positive\n", - " 300.0\n", - " True\n", - " \n", - " \n", - " 3\n", - " margin_complement_602\n", - " 602\n", - " snap_positive=non_positive\n", - " 300.0\n", - " True\n", + " margin_0001\n", + " NaN\n", + " dropped::unsupported_partial_margin\n", + " 0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target_name geo cell target_value \\\n", - "0 hh_snap_pos_d601 601 snap_positive=positive 80.0 \n", - "1 hh_snap_pos_d602 602 snap_positive=positive 70.0 \n", - "2 margin_complement_601 601 snap_positive=non_positive 300.0 \n", - "3 margin_complement_602 602 snap_positive=non_positive 300.0 \n", - "\n", - " synthesized \n", - "0 False \n", - "1 False \n", - "2 True \n", - "3 True " + " margin_id scope status n_emitted_cells\n", + "0 margin_0000 person full_partition 4\n", + "1 margin_0001 NaN dropped::unsupported_partial_margin 0" ] }, "execution_count": 14, @@ -1933,63 +1898,41 @@ } ], "source": [ - "from toy_data import HOUSEHOLDS\n", - "\n", - "rng = np.random.default_rng(0)\n", - "persons_for_conversion = pd.DataFrame(\n", - " {\n", - " \"unit_index\": np.arange(len(HOUSEHOLDS)),\n", - " \"household_id\": np.arange(len(HOUSEHOLDS)),\n", - " \"base_weight\": HOUSEHOLDS[\"design_weight\"].astype(float).to_numpy(),\n", - " \"congressional_district_geoid\": np.where(\n", - " HOUSEHOLDS[\"district\"] == \"A\", 601, 602\n", - " ),\n", - " \"age\": rng.integers(0, 10, size=len(HOUSEHOLDS)),\n", - " \"snap\": np.array([0, 120, 0, 80, 0, 150, 0, 0, 200, 0], dtype=float),\n", - " }\n", - ")\n", - "\n", - "derived_needed = {\n", - " cv\n", - " for b in blocks\n", - " for cv in b.cell_vars\n", - " if cv not in (\"congressional_district_geoid\",)\n", - "}\n", - "raw_values = {\n", - " \"age\": persons_for_conversion[\"age\"].to_numpy(dtype=float),\n", - " \"snap\": persons_for_conversion[\"snap\"].to_numpy(dtype=float),\n", - "}\n", - "unit_table = _materialize_derived_columns(\n", - " persons_for_conversion, derived_needed, raw_values\n", + "demo_unit_data = pd.DataFrame(\n", + " [\n", + " {\"unit_index\": 0, \"household_id\": 0, \"congressional_district_geoid\": 601, \"age_bracket\": \"0-4\", \"snap_positive\": \"positive\"},\n", + " {\"unit_index\": 0, \"household_id\": 0, \"congressional_district_geoid\": 601, \"age_bracket\": \"5-9\", \"snap_positive\": \"positive\"},\n", + " {\"unit_index\": 1, \"household_id\": 1, \"congressional_district_geoid\": 601, \"age_bracket\": \"0-4\", \"snap_positive\": \"non_positive\"},\n", + " {\"unit_index\": 1, \"household_id\": 1, \"congressional_district_geoid\": 601, \"age_bracket\": \"5-9\", \"snap_positive\": \"non_positive\"},\n", + " {\"unit_index\": 2, \"household_id\": 2, \"congressional_district_geoid\": 602, \"age_bracket\": \"0-4\", \"snap_positive\": \"positive\"},\n", + " {\"unit_index\": 2, \"household_id\": 2, \"congressional_district_geoid\": 602, \"age_bracket\": \"5-9\", \"snap_positive\": \"positive\"},\n", + " {\"unit_index\": 3, \"household_id\": 3, \"congressional_district_geoid\": 602, \"age_bracket\": \"0-4\", \"snap_positive\": \"non_positive\"},\n", + " {\"unit_index\": 3, \"household_id\": 3, \"congressional_district_geoid\": 602, \"age_bracket\": \"5-9\", \"snap_positive\": \"non_positive\"},\n", + " ]\n", ")\n", "\n", - "for b in blocks:\n", - " if _should_synthesize_complement(b):\n", - " _synthesize_complement_cells(b, unit_table, weight_column=\"base_weight\")\n", + "closed_blocks, dropped = close_margins_for_testing(resolved, demo_unit_data)\n", "\n", - "snap_block = next(b for b in blocks if \"snap_positive\" in b.cell_vars)\n", "pd.DataFrame(\n", " [\n", " {\n", - " \"target_name\": t.target_name,\n", - " \"geo\": t.geo.value,\n", - " \"cell\": \" & \".join(f\"{c}={l}\" for c, l in t.cell),\n", - " \"target_value\": t.target_value,\n", - " \"synthesized\": False,\n", + " \"margin_id\": b.margin_id,\n", + " \"scope\": b.scope,\n", + " \"status\": b.closure_status,\n", + " \"n_emitted_cells\": len(b.cells),\n", " }\n", - " for t in snap_block.targets\n", + " for b in closed_blocks\n", " ]\n", " + [\n", " {\n", - " \"target_name\": f\"margin_complement_{g}\",\n", - " \"geo\": g,\n", - " \"cell\": \" & \".join(f\"{c}={l}\" for c, l in cell),\n", - " \"target_value\": val,\n", - " \"synthesized\": True,\n", + " \"margin_id\": d[\"margin_id\"],\n", + " \"scope\": None,\n", + " \"status\": f\"dropped::{d['reason']}\",\n", + " \"n_emitted_cells\": 0,\n", " }\n", - " for g, cell, val in snap_block.synthesized_cells\n", + " for d in dropped\n", " ]\n", - ")" + ")\n" ] }, { @@ -1999,9 +1942,7 @@ "source": [ "### 10e. The emitted `ipf_target_metadata.csv` rows\n", "\n", - "With the cells resolved, margins assembled, and complements synthesized, each block\n", - "becomes a small block of `categorical_margin` rows. `ipf_runner.R` uses the\n", - "`margin_id` column to group rows into a single surveysd constraint per block." + "Only the retained closed blocks are emitted. If a subset family had an authored parent total, any exactly-derived complement cells would appear here alongside the authored cells. In this toy slice the open `snap > 0` household block is dropped, so only the person-scope age block survives to the emitted CSV rows.\n" ] }, { @@ -2045,7 +1986,12 @@ " cell\n", " target_value\n", " target_name\n", - " synthesized\n", + " source_variable\n", + " is_authored\n", + " authored_target_id\n", + " source_target_ids\n", + " closure_status\n", + " derivation_reason\n", " \n", " \n", " \n", @@ -2058,7 +2004,12 @@ " age_bracket=0-4|congressional_district_geoid=601\n", " 210.0\n", " pc_age_0-4_d601\n", - " False\n", + " person_count\n", + " True\n", + " 1\n", + " 1\n", + " full_partition\n", + " None\n", " \n", " \n", " 1\n", @@ -2069,7 +2020,12 @@ " age_bracket=5-9|congressional_district_geoid=601\n", " 205.0\n", " pc_age_5-9_d601\n", - " False\n", + " person_count\n", + " True\n", + " 2\n", + " 2\n", + " full_partition\n", + " None\n", " \n", " \n", " 2\n", @@ -2080,7 +2036,12 @@ " age_bracket=0-4|congressional_district_geoid=602\n", " 200.0\n", " pc_age_0-4_d602\n", - " False\n", + " person_count\n", + " True\n", + " 3\n", + " 3\n", + " full_partition\n", + " None\n", " \n", " \n", " 3\n", @@ -2091,96 +2052,47 @@ " age_bracket=5-9|congressional_district_geoid=602\n", " 198.0\n", " pc_age_5-9_d602\n", - " False\n", - " \n", - " \n", - " 4\n", - " margin_0001\n", - " household\n", - " categorical_margin\n", - " congressional_district_geoid|snap_positive\n", - " congressional_district_geoid=601|snap_positive...\n", - " 80.0\n", - " hh_snap_pos_d601\n", - " False\n", - " \n", - " \n", - " 5\n", - " margin_0001\n", - " household\n", - " categorical_margin\n", - " congressional_district_geoid|snap_positive\n", - " congressional_district_geoid=602|snap_positive...\n", - " 70.0\n", - " hh_snap_pos_d602\n", - " False\n", - " \n", - " \n", - " 6\n", - " margin_0001\n", - " household\n", - " categorical_margin\n", - " congressional_district_geoid|snap_positive\n", - " congressional_district_geoid=601|snap_positive...\n", - " 300.0\n", - " margin_0001_complement_601\n", - " True\n", - " \n", - " \n", - " 7\n", - " margin_0001\n", - " household\n", - " categorical_margin\n", - " congressional_district_geoid|snap_positive\n", - " congressional_district_geoid=602|snap_positive...\n", - " 300.0\n", - " margin_0001_complement_602\n", + " person_count\n", " True\n", + " 4\n", + " 4\n", + " full_partition\n", + " None\n", " \n", " \n", "\n", "" ], "text/plain": [ - " margin_id scope target_type \\\n", - "0 margin_0000 person categorical_margin \n", - "1 margin_0000 person categorical_margin \n", - "2 margin_0000 person categorical_margin \n", - "3 margin_0000 person categorical_margin \n", - "4 margin_0001 household categorical_margin \n", - "5 margin_0001 household categorical_margin \n", - "6 margin_0001 household categorical_margin \n", - "7 margin_0001 household categorical_margin \n", + " margin_id scope target_type \\\n", + "0 margin_0000 person categorical_margin \n", + "1 margin_0000 person categorical_margin \n", + "2 margin_0000 person categorical_margin \n", + "3 margin_0000 person categorical_margin \n", "\n", - " variables \\\n", - "0 age_bracket|congressional_district_geoid \n", - "1 age_bracket|congressional_district_geoid \n", - "2 age_bracket|congressional_district_geoid \n", - "3 age_bracket|congressional_district_geoid \n", - "4 congressional_district_geoid|snap_positive \n", - "5 congressional_district_geoid|snap_positive \n", - "6 congressional_district_geoid|snap_positive \n", - "7 congressional_district_geoid|snap_positive \n", + " variables \\\n", + "0 age_bracket|congressional_district_geoid \n", + "1 age_bracket|congressional_district_geoid \n", + "2 age_bracket|congressional_district_geoid \n", + "3 age_bracket|congressional_district_geoid \n", "\n", - " cell target_value \\\n", - "0 age_bracket=0-4|congressional_district_geoid=601 210.0 \n", - "1 age_bracket=5-9|congressional_district_geoid=601 205.0 \n", - "2 age_bracket=0-4|congressional_district_geoid=602 200.0 \n", - "3 age_bracket=5-9|congressional_district_geoid=602 198.0 \n", - "4 congressional_district_geoid=601|snap_positive... 80.0 \n", - "5 congressional_district_geoid=602|snap_positive... 70.0 \n", - "6 congressional_district_geoid=601|snap_positive... 300.0 \n", - "7 congressional_district_geoid=602|snap_positive... 300.0 \n", + " cell target_value \\\n", + "0 age_bracket=0-4|congressional_district_geoid=601 210.0 \n", + "1 age_bracket=5-9|congressional_district_geoid=601 205.0 \n", + "2 age_bracket=0-4|congressional_district_geoid=602 200.0 \n", + "3 age_bracket=5-9|congressional_district_geoid=602 198.0 \n", "\n", - " target_name synthesized \n", - "0 pc_age_0-4_d601 False \n", - "1 pc_age_5-9_d601 False \n", - "2 pc_age_0-4_d602 False \n", - "3 pc_age_5-9_d602 False \n", - "4 hh_snap_pos_d601 False \n", - "5 hh_snap_pos_d602 False \n", - "6 margin_0001_complement_601 True \n", - "7 margin_0001_complement_602 True " + " target_name source_variable is_authored authored_target_id \\\n", + "0 pc_age_0-4_d601 person_count True 1 \n", + "1 pc_age_5-9_d601 person_count True 2 \n", + "2 pc_age_0-4_d602 person_count True 3 \n", + "3 pc_age_5-9_d602 person_count True 4 \n", + "\n", + " source_target_ids closure_status derivation_reason \n", + "0 1 full_partition None \n", + "1 2 full_partition None \n", + "2 3 full_partition None \n", + "3 4 full_partition None " ] }, "execution_count": 15, @@ -2189,38 +2101,8 @@ } ], "source": [ - "out_rows = []\n", - "for b in blocks:\n", - " vars_joined = \"|\".join(b.cell_vars)\n", - " for t in b.targets:\n", - " out_rows.append(\n", - " {\n", - " \"margin_id\": b.margin_id,\n", - " \"scope\": b.scope,\n", - " \"target_type\": \"categorical_margin\",\n", - " \"variables\": vars_joined,\n", - " \"cell\": \"|\".join(_cell_assignments(t, b)),\n", - " \"target_value\": float(t.target_value),\n", - " \"target_name\": t.target_name,\n", - " \"synthesized\": False,\n", - " }\n", - " )\n", - " for g, cell, val in b.synthesized_cells:\n", - " out_rows.append(\n", - " {\n", - " \"margin_id\": b.margin_id,\n", - " \"scope\": b.scope,\n", - " \"target_type\": \"categorical_margin\",\n", - " \"variables\": vars_joined,\n", - " \"cell\": \"|\".join(_complement_cell_assignments(g, cell, b)),\n", - " \"target_value\": float(val),\n", - " \"target_name\": f\"{b.margin_id}_complement_{g}\",\n", - " \"synthesized\": True,\n", - " }\n", - " )\n", - "\n", - "emitted = pd.DataFrame(out_rows)\n", - "emitted" + "emitted = emit_target_rows(closed_blocks)\n", + "emitted\n" ] }, { @@ -2228,13 +2110,9 @@ "id": "4c68c47b", "metadata": {}, "source": [ - "### 10f. Margin-consistency check and per-block splitting\n", + "### 10f. Coherence check on retained blocks\n", "\n", - "`surveysd::ipf` rakes `conP` (person-scope) and `conH` (household-scope) constraints\n", - "independently, so it only requires margin-total agreement **within the same scope at\n", - "the same geography**. The check below runs on our two blocks and finds no issues,\n", - "because the age block is person-scope and the snap block is household-scope — they\n", - "don't need to match." + "`surveysd::ipf` still requires retained margins of the same scope and geography to imply compatible totals. The check below now runs on the **closed retained blocks**, not on the pre-validation raw blocks.\n" ] }, { @@ -2259,13 +2137,13 @@ } ], "source": [ - "issues = check_margin_consistency(blocks)\n", + "issues = check_margin_consistency(closed_blocks)\n", "print(f\"{len(issues)} mismatched scope/geography combinations\")\n", "for iss in issues:\n", " totals = \", \".join(f\"{m}={v:,.0f}\" for m, v in iss[\"margin_totals\"].items())\n", " print(\n", " f\" scope={iss['scope']} geo={iss['geo_value']} spread={iss['relative_spread']:.2%} {totals}\"\n", - " )" + " )\n" ] }, { @@ -2273,14 +2151,7 @@ "id": "f8f9633c", "metadata": {}, "source": [ - "For a concrete example of a *real* mismatch, the `age × district` block and the\n", - "`agi × district × is_filer` block in the full calibration package are both\n", - "person-scope and share district geographies, but they represent different\n", - "populations (all persons vs. persons in filer tax units) and therefore imply\n", - "different totals per district. Feeding both into a single `surveysd::ipf` call fails\n", - "with `population totals for different constraints do not match`. The scaffold\n", - "handles this by running one margin block at a time via\n", - "`split_target_metadata_by_margin`, which returns a sub-frame per `margin_id`." + "For a concrete example of a *real* mismatch, the `age × district` block and the `agi × district × is_filer` block in the full calibration package are both person-scope and share district geographies, but they represent different populations (all persons vs. persons in filer tax units) and therefore imply different totals per district. Under the corrected benchmark scaffold that does **not** trigger sequential external IPF calls anymore. Instead, the export step fails the combined IPF problem and records the mismatch in diagnostics so the run can be narrowed to a coherent closed system.\n" ] }, { @@ -2300,26 +2171,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Target rows per block (suitable for independent IPF runs):\n", - " margin_0000: 4 rows, per-geo totals: congressional_district_geoid=601->415, congressional_district_geoid=602->398\n", - " margin_0001: 4 rows, per-geo totals: congressional_district_geoid=601->380, congressional_district_geoid=602->370\n" + "Retained target rows per closed margin:\n", + " margin_0000: 4 rows, per-geo totals: congressional_district_geoid=601->415, congressional_district_geoid=602->398\n" ] } ], "source": [ - "per_block = split_target_metadata_by_margin(emitted)\n", - "print(\"Target rows per block (suitable for independent IPF runs):\")\n", - "for margin_id, sub in per_block.items():\n", + "print(\"Retained target rows per closed margin:\")\n", + "for margin_id, sub in emitted.groupby(\"margin_id\", sort=False):\n", " totals_by_geo = {}\n", " for _, r in sub.iterrows():\n", - " geo_part = [\n", + " geo_parts = [\n", " a\n", " for a in r[\"cell\"].split(\"|\")\n", " if a.startswith(\"congressional_district_geoid=\")\n", - " ][0]\n", + " ]\n", + " geo_part = geo_parts[0] if geo_parts else \"national\"\n", " totals_by_geo[geo_part] = totals_by_geo.get(geo_part, 0.0) + r[\"target_value\"]\n", " totals_str = \", \".join(f\"{g}->{v:,.0f}\" for g, v in sorted(totals_by_geo.items()))\n", - " print(f\" {margin_id}: {len(sub)} rows, per-geo totals: {totals_str}\")" + " print(f\" {margin_id}: {len(sub)} rows, per-geo totals: {totals_str}\")\n" ] }, { @@ -2329,7 +2199,16 @@ "source": [ "### 10g. How the same path runs against the real calibration package\n", "\n", - "In production, `benchmark_export.build_ipf_inputs` receives the `filtered_targets` slice computed by `benchmark_manifest.filter_targets` from the manifest's `target_filters`. For a three-district scope that filter returns roughly 80 targets across `person_count`, `household_count`, `tax_unit_count`, and a handful of dollar variables. The count check keeps the ~57 `person_count` + `household_count` rows; the resolver check keeps every one of those (they all fit the declared schemas). The survivors assemble into three margin blocks: 54-target `age × district`, 27-target `agi × district × is_filer` (if AGI targets are in scope), and 3-target `snap × district` with 3 synthesized complements. The dropped counts are available on `target_metadata.attrs['dropped_targets']` for reporting." + "In production, `benchmark_export.build_ipf_inputs` receives the `filtered_targets` slice computed by `benchmark_manifest.filter_targets` from the manifest's `target_filters`. The count check keeps only supported count targets, the resolver check keeps only rows that map cleanly to declared categorical cells, and the closure step keeps only fully closed categorical systems or binary subsets with exact authored parent totals.\n", + "\n", + "The exported diagnostics distinguish between:\n", + "\n", + "- requested targets\n", + "- retained authored IPF targets\n", + "- derived complement rows used only to close a runnable IPF problem\n", + "- requested but non-runnable IPF targets, with reasons such as `missing_parent_total`, `unsupported_partial_margin`, or `non_invariant_household_constraint_variable`\n", + "\n", + "That is the contract the benchmark now uses before calling `surveysd::ipf` once on the retained closed system.\n" ] }, { @@ -2344,7 +2223,7 @@ "| Artifact | Format | Shape |\n", "| --- | --- | --- |\n", "| `unit_metadata.csv` | person-level CSV with category columns + `unit_index`, `household_id`, `base_weight` | `n_persons` rows |\n", - "| `ipf_target_metadata.csv` | CSV with one row per margin cell (`categorical_margin`) or per numeric total (`numeric_total`) | `n_cells` rows |\n", + "| `ipf_target_metadata.csv` | CSV with one row per **retained closed margin cell** (`categorical_margin` only) | `n_cells` rows |\n", "| `initial_weights.npy` | float64 array | `n_units` |\n", "\n", "Output of the IPF runner:\n", @@ -2358,10 +2237,10 @@ "| Aspect | GREG | IPF |\n", "| --- | --- | --- |\n", "| Primary input | sparse `(n_targets, n_units)` matrix | unit-record table with categorical columns |\n", - "| Target vocabulary | arbitrary linear functionals | count margins or indicator totals |\n", + "| Target vocabulary | arbitrary linear functionals | closed categorical margin totals |\n", "| Handles dollar-total targets? | yes | no (without an ad-hoc encoding) |\n", "| Negative weights? | possible with `cal.linear` | no (multiplicative updates) |\n", - "| Collapse step needed? | no, weights already per-unit | yes, per-person weights → per-unit |" + "| Collapse step needed? | no, weights already per-unit | yes, per-person weights → per-unit |\n" ] } ], diff --git a/paper-l0/benchmarking/runners/ipf_runner.R b/paper-l0/benchmarking/runners/ipf_runner.R index 3348c2717..e548734c8 100644 --- a/paper-l0/benchmarking/runners/ipf_runner.R +++ b/paper-l0/benchmarking/runners/ipf_runner.R @@ -45,19 +45,6 @@ build_margin_array <- function(df) { ) } -build_single_cell_array <- function(variables_str, cell_str, target_value) { - variables <- strsplit(variables_str, "\\|")[[1]] - parts <- strsplit(cell_str, "\\|")[[1]] - entries <- strsplit(parts, "=") - row <- as.list(setNames(vapply(entries, `[`, "", 2L), vapply(entries, `[`, "", 1L))) - row$Freq <- as.numeric(target_value) - frame <- as.data.frame(row, stringsAsFactors = FALSE) - stats::xtabs( - stats::as.formula(paste("Freq ~", paste(variables, collapse = " + "))), - data = frame - ) -} - unit_data <- read.csv(unit_csv, stringsAsFactors = FALSE) target_meta <- read.csv(target_csv, stringsAsFactors = FALSE) base_weights <- read_npy_vector(weights_npy) @@ -73,49 +60,33 @@ if (!(weight_col %in% names(unit_data))) { unit_data[[weight_col]] <- base_weights[unit_data$unit_index + 1L] } -conP <- list() -conH <- list() if (!("target_type" %in% names(target_meta))) { - target_meta$target_type <- "categorical_margin" + stop("ipf target metadata must include a target_type column") } - -numeric_rows <- target_meta[target_meta$target_type == "numeric_total", , drop = FALSE] -for (i in seq_len(nrow(numeric_rows))) { - row <- numeric_rows[i, , drop = FALSE] - value_column <- row$value_column[[1]] - if (!(value_column %in% names(unit_data))) { - stop(sprintf("Unit metadata is missing numeric target column %s", value_column)) - } - target_array <- build_single_cell_array( - if ("variables" %in% names(row)) row$variables[[1]] else "benchmark_all", - if ("cell" %in% names(row)) row$cell[[1]] else "benchmark_all=all", - row$target_value[[1]] - ) - if (row$scope[[1]] == "person") { - conP[[value_column]] <- target_array - } else if (row$scope[[1]] == "household") { - conH[[value_column]] <- target_array - } else { - stop(sprintf("Unsupported numeric target scope: %s", row$scope[[1]])) - } +unsupported_types <- setdiff(unique(target_meta$target_type), "categorical_margin") +if (length(unsupported_types) > 0L) { + stop(sprintf( + "ipf_runner.R only supports target_type='categorical_margin'; got: %s", + paste(unsupported_types, collapse = ", ") + )) } -margin_rows_all <- target_meta[target_meta$target_type == "categorical_margin", , drop = FALSE] -if (nrow(margin_rows_all) > 0) { - for (margin_id in unique(margin_rows_all$margin_id)) { - margin_rows <- margin_rows_all[margin_rows_all$margin_id == margin_id, , drop = FALSE] - margin_array <- build_margin_array(margin_rows) - scope <- unique(margin_rows$scope) - if (length(scope) != 1L) { - stop(sprintf("Margin %s has inconsistent scope values", margin_id)) - } - if (scope[[1]] == "person") { - conP[[length(conP) + 1L]] <- margin_array - } else if (scope[[1]] == "household") { - conH[[length(conH) + 1L]] <- margin_array - } else { - stop(sprintf("Unsupported margin scope: %s", scope[[1]])) - } +conP <- list() +conH <- list() +margin_rows_all <- target_meta +for (margin_id in unique(margin_rows_all$margin_id)) { + margin_rows <- margin_rows_all[margin_rows_all$margin_id == margin_id, , drop = FALSE] + margin_array <- build_margin_array(margin_rows) + scope <- unique(margin_rows$scope) + if (length(scope) != 1L) { + stop(sprintf("Margin %s has inconsistent scope values", margin_id)) + } + if (scope[[1]] == "person") { + conP[[length(conP) + 1L]] <- margin_array + } else if (scope[[1]] == "household") { + conH[[length(conH) + 1L]] <- margin_array + } else { + stop(sprintf("Unsupported margin scope: %s", scope[[1]])) } } @@ -130,6 +101,7 @@ ipf_result <- surveysd::ipf( w = weight_col, bound = bound, maxIter = max_iter, + meanHH = TRUE, returnNA = TRUE, nameCalibWeight = "calibWeight" ) diff --git a/tests/unit/test_benchmark_export.py b/tests/unit/test_benchmark_export.py new file mode 100644 index 000000000..779eeee15 --- /dev/null +++ b/tests/unit/test_benchmark_export.py @@ -0,0 +1,286 @@ +from __future__ import annotations + +import importlib.util +import json +import sys +from pathlib import Path + +import numpy as np +import pandas as pd +import pytest +from scipy.io import mmwrite +from scipy.sparse import csr_matrix + + +REPO_ROOT = Path(__file__).resolve().parents[2] +BENCHMARK_DIR = REPO_ROOT / "paper-l0" / "benchmarking" +BENCHMARK_EXPORT_PATH = BENCHMARK_DIR / "benchmark_export.py" + + +def _load_module(name: str, path: Path): + benchmark_dir_str = str(BENCHMARK_DIR) + if benchmark_dir_str not in sys.path: + sys.path.insert(0, benchmark_dir_str) + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + assert spec.loader is not None + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def test_export_bundle_writes_ipf_scoring_subset(tmp_path, monkeypatch): + benchmark_export = _load_module( + "benchmark_export_for_tests", BENCHMARK_EXPORT_PATH + ) + benchmark_manifest = _load_module( + "benchmark_manifest_for_tests", BENCHMARK_DIR / "benchmark_manifest.py" + ) + + package = { + "targets_df": pd.DataFrame( + { + "target_id": [1, 2, 3], + "value": [2.0, 3.0, 5.0], + "variable": [ + "household_count", + "household_count", + "household_count", + ], + "geo_level": ["national", "national", "national"], + "geographic_id": ["0", "0", "0"], + } + ), + "target_names": ["requested_a", "requested_b", "requested_c"], + "X_sparse": csr_matrix( + np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]], dtype=np.float64) + ), + "initial_weights": np.array([1.0, 1.0], dtype=np.float64), + "metadata": {}, + } + + monkeypatch.setattr( + benchmark_export, "load_calibration_package_raw", lambda _path: package + ) + + def _fake_build_ipf_inputs(package, manifest, filtered_targets): + unit_metadata = pd.DataFrame( + { + "unit_index": [0, 1], + "household_id": [0, 1], + "base_weight": [1.0, 1.0], + } + ) + ipf_target_metadata = pd.DataFrame( + { + "margin_id": ["m0", "m1", "m1"], + "scope": ["household", "household", "household"], + "target_type": ["categorical_margin"] * 3, + "variables": ["district", "district|snap", "district|snap"], + "cell": ["district=A", "district=A|snap=yes", "district=A|snap=no"], + "target_value": [2.0, 1.0, 1.0], + "is_authored": [True, True, False], + } + ) + ipf_target_metadata.attrs["retained_authored_target_ids"] = [1, 2] + ipf_target_metadata.attrs["requested_target_count"] = 3 + ipf_target_metadata.attrs["retained_authored_target_count"] = 2 + ipf_target_metadata.attrs["derived_complement_count"] = 1 + ipf_target_metadata.attrs["dropped_targets"] = {"unsupported_partial_margin": 1} + ipf_target_metadata.attrs["dropped_target_details"] = [ + {"reason": "unsupported_partial_margin", "target_ids": [3]} + ] + ipf_target_metadata.attrs["margin_consistency_issues"] = [] + ipf_target_metadata.attrs["derived_complement_rows"] = [ + {"cell": "district=A|snap=no", "target_value": 1.0} + ] + return unit_metadata, ipf_target_metadata + + monkeypatch.setattr(benchmark_export, "build_ipf_inputs", _fake_build_ipf_inputs) + + manifest = benchmark_manifest.BenchmarkManifest( + name="ipf-export-test", + tier="unit", + description="", + package_path="/tmp/fake-package.pkl", + methods=["ipf"], + ) + + output_dir, info = benchmark_export.export_bundle( + manifest=manifest, + output_dir=tmp_path / "bundle", + ) + + scoring_targets = pd.read_csv( + output_dir / "inputs" / "ipf_scoring_target_metadata.csv" + ) + diagnostics = json.loads( + (output_dir / "inputs" / "ipf_conversion_diagnostics.json").read_text() + ) + + assert len(scoring_targets) == 2 + assert scoring_targets["target_id"].tolist() == [1, 2] + assert diagnostics["retained_authored_target_count"] == 2 + assert diagnostics["derived_complement_count"] == 1 + assert info["ipf_retained_authored_target_count"] == 2 + + +def test_export_bundle_requires_external_ipf_scoring_artifacts( + tmp_path, monkeypatch +): + benchmark_export = _load_module( + "benchmark_export_for_external_contract", BENCHMARK_EXPORT_PATH + ) + benchmark_manifest = _load_module( + "benchmark_manifest_for_external_contract", + BENCHMARK_DIR / "benchmark_manifest.py", + ) + + package = { + "targets_df": pd.DataFrame( + { + "target_id": [1], + "value": [2.0], + "variable": ["household_count"], + "geo_level": ["national"], + "geographic_id": ["0"], + } + ), + "target_names": ["requested_a"], + "X_sparse": csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64)), + "initial_weights": np.array([1.0, 1.0], dtype=np.float64), + "metadata": {}, + } + + monkeypatch.setattr( + benchmark_export, "load_calibration_package_raw", lambda _path: package + ) + + unit_csv = tmp_path / "external_unit.csv" + target_csv = tmp_path / "external_targets.csv" + pd.DataFrame( + {"unit_index": [0, 1], "household_id": [0, 1], "base_weight": [1.0, 1.0]} + ).to_csv(unit_csv, index=False) + pd.DataFrame( + { + "margin_id": ["m0"], + "scope": ["household"], + "target_type": ["categorical_margin"], + "variables": ["district"], + "cell": ["district=A"], + "target_value": [2.0], + } + ).to_csv(target_csv, index=False) + + manifest = benchmark_manifest.BenchmarkManifest( + name="ipf-external-contract", + tier="unit", + description="", + package_path="/tmp/fake-package.pkl", + methods=["ipf"], + external_inputs=benchmark_manifest.ExternalInputs( + ipf_unit_metadata_csv=str(unit_csv), + ipf_target_metadata_csv=str(target_csv), + ), + ) + + with pytest.raises(ValueError, match="must provide all of"): + benchmark_export.export_bundle(manifest=manifest, output_dir=tmp_path / "bundle") + + +def test_export_bundle_accepts_fully_specified_external_ipf_inputs( + tmp_path, monkeypatch +): + benchmark_export = _load_module( + "benchmark_export_for_external_copy", BENCHMARK_EXPORT_PATH + ) + benchmark_manifest = _load_module( + "benchmark_manifest_for_external_copy", BENCHMARK_DIR / "benchmark_manifest.py" + ) + + package = { + "targets_df": pd.DataFrame( + { + "target_id": [1, 2], + "value": [2.0, 3.0], + "variable": ["household_count", "household_count"], + "geo_level": ["national", "national"], + "geographic_id": ["0", "0"], + } + ), + "target_names": ["requested_a", "requested_b"], + "X_sparse": csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0]], dtype=np.float64)), + "initial_weights": np.array([1.0, 1.0], dtype=np.float64), + "metadata": {}, + } + + monkeypatch.setattr( + benchmark_export, "load_calibration_package_raw", lambda _path: package + ) + + unit_csv = tmp_path / "external_unit.csv" + target_csv = tmp_path / "external_targets.csv" + scoring_csv = tmp_path / "external_scoring.csv" + scoring_mtx = tmp_path / "external_scoring.mtx" + diagnostics_json = tmp_path / "external_diag.json" + + pd.DataFrame( + {"unit_index": [0, 1], "household_id": [0, 1], "base_weight": [1.0, 1.0]} + ).to_csv(unit_csv, index=False) + pd.DataFrame( + { + "margin_id": ["m0", "m0"], + "scope": ["household", "household"], + "target_type": ["categorical_margin", "categorical_margin"], + "variables": ["district", "district"], + "cell": ["district=A", "district=B"], + "target_value": [2.0, 3.0], + } + ).to_csv(target_csv, index=False) + pd.DataFrame( + { + "value": [2.0], + "variable": ["household_count"], + "geo_level": ["national"], + "target_name": ["retained_a"], + } + ).to_csv(scoring_csv, index=False) + mmwrite(str(scoring_mtx), csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64))) + diagnostics_json.write_text( + json.dumps( + { + "requested_target_count": 2, + "retained_authored_target_count": 1, + "derived_complement_count": 0, + "dropped_targets": {"missing_parent_total": 1}, + } + ) + ) + + manifest = benchmark_manifest.BenchmarkManifest( + name="ipf-external-complete", + tier="unit", + description="", + package_path="/tmp/fake-package.pkl", + methods=["ipf"], + external_inputs=benchmark_manifest.ExternalInputs( + ipf_unit_metadata_csv=str(unit_csv), + ipf_target_metadata_csv=str(target_csv), + ipf_scoring_target_metadata_csv=str(scoring_csv), + ipf_scoring_matrix_mtx=str(scoring_mtx), + ipf_conversion_diagnostics_json=str(diagnostics_json), + ), + ) + + output_dir, info = benchmark_export.export_bundle( + manifest=manifest, + output_dir=tmp_path / "bundle", + ) + + assert (output_dir / "inputs" / "ipf_target_metadata.csv").exists() + assert (output_dir / "inputs" / "ipf_scoring_target_metadata.csv").exists() + copied_diag = json.loads( + (output_dir / "inputs" / "ipf_conversion_diagnostics.json").read_text() + ) + assert copied_diag["retained_authored_target_count"] == 1 + assert info["ipf_retained_authored_target_count"] == 1 diff --git a/tests/unit/test_benchmarking_runners.py b/tests/unit/test_benchmarking_runners.py index 1ff587f9b..149e3f9db 100644 --- a/tests/unit/test_benchmarking_runners.py +++ b/tests/unit/test_benchmarking_runners.py @@ -5,6 +5,7 @@ import shutil import subprocess import sys +from types import SimpleNamespace from pathlib import Path import numpy as np @@ -131,45 +132,44 @@ def test_greg_runner_end_to_end_exact_fit(benchmark_cli_module, tmp_path): ) -def test_ipf_runner_end_to_end_numeric_total_person_scope( +def test_ipf_runner_end_to_end_categorical_margin_person_scope( benchmark_cli_module, tmp_path ): if not _r_package_available("surveysd"): pytest.skip("R package 'surveysd' is required for this test") - run_dir = tmp_path / "ipf-numeric-run" - matrix = csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64)) + run_dir = tmp_path / "ipf-person-margin-run" + # Two household units, each with two person rows (same unit_index). One unit's + # persons are age_bracket="0-4", the other's are "5-9". Person-scope margin + # targets 4 people total in each bucket -> each unit's weight doubles. + matrix = csr_matrix(np.array([[2.0, 0.0], [0.0, 2.0]], dtype=np.float64)) inputs = _write_common_inputs( run_dir=run_dir, matrix=matrix, - target_values=[1.0], - variables=["person_count"], + target_values=[4.0, 4.0], + variables=["person_count", "person_count"], method_options={ - "ipf": {"max_iter": 500, "bound": 20.0, "epsP": 1e-4, "epsH": 1e-4} + "ipf": {"max_iter": 50, "bound": 10.0, "epsP": 1e-9, "epsH": 1e-9} }, ) unit_metadata = pd.DataFrame( { - "unit_index": [0, 0, 1], - "household_id": [0, 0, 1], - "benchmark_all": ["all", "all", "all"], - "ipf_indicator_00000": [1, 0, 0], + "unit_index": [0, 0, 1, 1], + "household_id": [0, 0, 1, 1], + "age_bracket": ["0-4", "0-4", "5-9", "5-9"], } ) unit_metadata.to_csv(inputs / "unit_metadata.csv", index=False) ipf_target_metadata = pd.DataFrame( { - "scope": ["person"], - "target_type": ["numeric_total"], - "value_column": ["ipf_indicator_00000"], - "variables": ["benchmark_all"], - "cell": ["benchmark_all=all"], - "target_value": [1.0], - "target_name": ["under_5_people"], - "source_variable": ["person_count"], - "stratum_id": [1], + "scope": ["person", "person"], + "target_type": ["categorical_margin", "categorical_margin"], + "margin_id": ["age_margin", "age_margin"], + "variables": ["age_bracket", "age_bracket"], + "cell": ["age_bracket=0-4", "age_bracket=5-9"], + "target_value": [4.0, 4.0], } ) ipf_target_metadata.to_csv(inputs / "ipf_target_metadata.csv", index=False) @@ -178,10 +178,10 @@ def test_ipf_runner_end_to_end_numeric_total_person_scope( fitted_weights = np.load(weights_path) np.testing.assert_allclose( - fitted_weights, np.array([1.0, 1.0]), atol=1e-8, rtol=1e-8 + fitted_weights, np.array([2.0, 2.0]), atol=1e-8, rtol=1e-8 ) np.testing.assert_allclose( - matrix.dot(fitted_weights), np.array([1.0]), atol=1e-8, rtol=1e-8 + matrix.dot(fitted_weights), np.array([4.0, 4.0]), atol=1e-8 ) @@ -233,3 +233,271 @@ def test_ipf_runner_end_to_end_categorical_margin_household_scope( np.testing.assert_allclose( matrix.dot(fitted_weights), np.array([2.0, 2.0]), atol=1e-8 ) + + +def test_ipf_runner_end_to_end_single_cell_margin_leaves_complement_untouched( + benchmark_cli_module, tmp_path +): + """A 1-cell categorical_margin must rake the authored cell and leave + units outside that cell at their base weights. This is the semantic the + converter now relies on instead of synthesizing a baseline complement. + """ + if not _r_package_available("surveysd"): + pytest.skip("R package 'surveysd' is required for this test") + + run_dir = tmp_path / "ipf-single-cell-run" + # Two households: unit 0 is snap=yes, unit 1 is snap=no. Target: 1 yes-hh + # (authored), no complement constraint. Expect calib[0]=2.0 (rescaled from + # base 4.0 -> 2.0 so 1 weighted hh = 1), calib[1]=4.0 (untouched base). + matrix = csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[2.0], + variables=["household_count"], + initial_weights=np.array([4.0, 4.0], dtype=np.float64), + method_options={ + "ipf": {"max_iter": 100, "bound": 10.0, "epsP": 1e-9, "epsH": 1e-9} + }, + ) + + unit_metadata = pd.DataFrame( + { + "unit_index": [0, 1], + "household_id": [0, 1], + "snap": ["yes", "no"], + "base_weight": [4.0, 4.0], + } + ) + unit_metadata.to_csv(inputs / "unit_metadata.csv", index=False) + + # 1-cell authored margin: only snap=yes has a target, no complement row. + ipf_target_metadata = pd.DataFrame( + { + "scope": ["household"], + "target_type": ["categorical_margin"], + "margin_id": ["snap_yes_only"], + "variables": ["snap"], + "cell": ["snap=yes"], + "target_value": [2.0], + } + ) + ipf_target_metadata.to_csv(inputs / "ipf_target_metadata.csv", index=False) + + weights_path, _ = benchmark_cli_module._run_ipf(run_dir) + fitted_weights = np.load(weights_path) + + # Authored cell (snap=yes, unit 0): rescaled to hit target = 2.0. + np.testing.assert_allclose(fitted_weights[0], 2.0, atol=1e-8, rtol=1e-8) + # Complement unit (snap=no, unit 1): untouched, equals its base weight. + np.testing.assert_allclose(fitted_weights[1], 4.0, atol=1e-8, rtol=1e-8) + + +def test_ipf_runner_rejects_numeric_total_target_type(benchmark_cli_module, tmp_path): + """The runner supports only `categorical_margin`. A CSV with + `target_type='numeric_total'` must fail fast with a clear error so old + external pipelines cannot silently fall back to the (removed) + `benchmark_all` raking path. + """ + if not _r_package_available("surveysd"): + pytest.skip("R package 'surveysd' is required for this test") + + run_dir = tmp_path / "ipf-numeric-rejected" + matrix = csr_matrix(np.array([[1.0, 0.0]], dtype=np.float64)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[1.0], + variables=["person_count"], + method_options={ + "ipf": {"max_iter": 10, "bound": 10.0, "epsP": 1e-4, "epsH": 1e-4} + }, + ) + pd.DataFrame( + { + "unit_index": [0, 1], + "household_id": [0, 1], + "snap": ["yes", "no"], + "base_weight": [1.0, 1.0], + } + ).to_csv(inputs / "unit_metadata.csv", index=False) + pd.DataFrame( + { + "scope": ["person"], + "target_type": ["numeric_total"], + "margin_id": ["_numeric"], + "value_column": ["snap"], + "variables": ["snap"], + "cell": ["snap=yes"], + "target_value": [1.0], + } + ).to_csv(inputs / "ipf_target_metadata.csv", index=False) + + with pytest.raises(RuntimeError, match="IPF runner failed"): + benchmark_cli_module._run_ipf(run_dir) + + +def test_ipf_runner_single_call_multi_margin_exact_fit(benchmark_cli_module, tmp_path): + """Compatible closed margins should run in one `surveysd::ipf` call.""" + if not _r_package_available("surveysd"): + pytest.skip("R package 'surveysd' is required for this test") + + run_dir = tmp_path / "ipf-joint-run" + matrix = csr_matrix( + np.array( + [ + [1.0, 1.0, 0.0, 0.0], # district A count + [0.0, 0.0, 1.0, 1.0], # district B count + [1.0, 0.0, 0.0, 0.0], # district A snap=yes + [0.0, 1.0, 0.0, 0.0], # district A snap=no + [0.0, 0.0, 1.0, 0.0], # district B snap=yes + [0.0, 0.0, 0.0, 1.0], # district B snap=no + ], + dtype=np.float64, + ) + ) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[4.0, 4.0, 2.0, 2.0, 2.0, 2.0], + variables=["household_count"] * 6, + initial_weights=np.ones(4, dtype=np.float64), + method_options={ + "ipf": {"max_iter": 200, "bound": 10.0, "epsP": 1e-9, "epsH": 1e-9} + }, + ) + pd.DataFrame( + { + "unit_index": [0, 1, 2, 3], + "household_id": [0, 1, 2, 3], + "district": ["A", "A", "B", "B"], + "snap": ["yes", "no", "yes", "no"], + "base_weight": [1.0, 1.0, 1.0, 1.0], + } + ).to_csv(inputs / "unit_metadata.csv", index=False) + + pd.DataFrame( + { + "scope": ["household"] * 6, + "target_type": ["categorical_margin"] * 6, + "margin_id": [ + "district_margin", + "district_margin", + "district_snap_margin", + "district_snap_margin", + "district_snap_margin", + "district_snap_margin", + ], + "variables": [ + "district", + "district", + "district|snap", + "district|snap", + "district|snap", + "district|snap", + ], + "cell": [ + "district=A", + "district=B", + "district=A|snap=yes", + "district=A|snap=no", + "district=B|snap=yes", + "district=B|snap=no", + ], + "target_value": [4.0, 4.0, 2.0, 2.0, 2.0, 2.0], + } + ).to_csv(inputs / "ipf_target_metadata.csv", index=False) + + weights_path, _ = benchmark_cli_module._run_ipf(run_dir) + fitted_weights = np.load(weights_path) + + np.testing.assert_allclose( + matrix.dot(fitted_weights), + np.array([4.0, 4.0, 2.0, 2.0, 2.0, 2.0]), + atol=1e-6, + ) + assert not (run_dir / "outputs" / "_ipf_blocks").exists() + + +def test_cmd_run_ipf_uses_retained_authored_scoring_subset( + benchmark_cli_module, tmp_path +): + run_dir = tmp_path / "ipf-summary-run" + matrix = csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]], dtype=float)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[2.0, 3.0, 5.0], + variables=["household_count", "household_count", "household_count"], + target_names=["requested_a", "requested_b", "requested_c"], + ) + subset_matrix = csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0]], dtype=float)) + mmwrite(str(inputs / "ipf_scoring_X_targets_by_units.mtx"), subset_matrix) + pd.DataFrame( + { + "value": [2.0, 3.0], + "variable": ["household_count", "household_count"], + "geo_level": ["national", "national"], + "target_name": ["retained_a", "retained_b"], + } + ).to_csv(inputs / "ipf_scoring_target_metadata.csv", index=False) + + weights_path = run_dir / "outputs" / "fitted_weights.npy" + np.save(weights_path, np.array([2.0, 3.0], dtype=np.float64)) + + def _fake_run_ipf(_run_dir): + return weights_path, 0.0 + + benchmark_cli_module._run_ipf = _fake_run_ipf + exit_code = benchmark_cli_module.cmd_run( + SimpleNamespace(method="ipf", run_dir=str(run_dir)) + ) + + assert exit_code == 0 + summary = json.loads((run_dir / "outputs" / "ipf_summary.json").read_text()) + assert summary["n_targets"] == 2 + assert summary["scoring_target_set"] == "ipf_retained_authored" + + +def test_cmd_run_l0_can_opt_into_retained_authored_scoring_subset( + benchmark_cli_module, tmp_path +): + run_dir = tmp_path / "l0-summary-run" + matrix = csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]], dtype=float)) + inputs = _write_common_inputs( + run_dir=run_dir, + matrix=matrix, + target_values=[2.0, 3.0, 5.0], + variables=["household_count", "household_count", "household_count"], + target_names=["requested_a", "requested_b", "requested_c"], + ) + subset_matrix = csr_matrix(np.array([[1.0, 0.0], [0.0, 1.0]], dtype=float)) + mmwrite(str(inputs / "ipf_scoring_X_targets_by_units.mtx"), subset_matrix) + pd.DataFrame( + { + "value": [2.0, 3.0], + "variable": ["household_count", "household_count"], + "geo_level": ["national", "national"], + "target_name": ["retained_a", "retained_b"], + } + ).to_csv(inputs / "ipf_scoring_target_metadata.csv", index=False) + + weights_path = run_dir / "outputs" / "fitted_weights.npy" + np.save(weights_path, np.array([2.0, 3.0], dtype=np.float64)) + + def _fake_run_l0(_run_dir): + return weights_path + + benchmark_cli_module._run_l0 = _fake_run_l0 + exit_code = benchmark_cli_module.cmd_run( + SimpleNamespace( + method="l0", + run_dir=str(run_dir), + score_on="ipf_retained_authored", + ) + ) + + assert exit_code == 0 + summary = json.loads((run_dir / "outputs" / "l0_summary.json").read_text()) + assert summary["n_targets"] == 2 + assert summary["scoring_target_set"] == "ipf_retained_authored" diff --git a/tests/unit/test_ipf_conversion.py b/tests/unit/test_ipf_conversion.py new file mode 100644 index 000000000..72bebd427 --- /dev/null +++ b/tests/unit/test_ipf_conversion.py @@ -0,0 +1,350 @@ +"""Unit tests for paper-l0/benchmarking/ipf_conversion.py. + +These tests stay on the pure-Python side of the converter: target resolution, +closed-margin classification, exact complement derivation from authored parent +totals, and mixed-scope invariance guards. +""" + +from __future__ import annotations + +import sys +from pathlib import Path + +import pandas as pd +import pytest + + +REPO_ROOT = Path(__file__).resolve().parents[2] +BENCHMARK_DIR = REPO_ROOT / "paper-l0" / "benchmarking" + + +@pytest.fixture(scope="module") +def ipf_conversion(): + benchmark_dir_str = str(BENCHMARK_DIR) + if benchmark_dir_str not in sys.path: + sys.path.insert(0, benchmark_dir_str) + import ipf_conversion as module # noqa: PLC0415 + + return module + + +def _make_age_partition_targets(): + targets = pd.DataFrame( + [ + { + "target_id": 1, + "stratum_id": 1, + "variable": "person_count", + "value": 210.0, + "target_name": "pc_0_4_d601", + }, + { + "target_id": 2, + "stratum_id": 2, + "variable": "person_count", + "value": 205.0, + "target_name": "pc_5_9_d601", + }, + ] + ) + constraints = { + 1: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "601", + }, + {"variable": "age", "operation": ">", "value": "-1"}, + {"variable": "age", "operation": "<", "value": "5"}, + ], + 2: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "601", + }, + {"variable": "age", "operation": ">", "value": "4"}, + {"variable": "age", "operation": "<", "value": "10"}, + ], + } + unit_data = pd.DataFrame( + { + "unit_index": [0, 1, 2, 3], + "household_id": [0, 0, 1, 1], + "congressional_district_geoid": [601, 601, 601, 601], + "age_bracket": ["0-4", "0-4", "5-9", "5-9"], + } + ) + return targets, constraints, unit_data + + +def _make_snap_subset_and_total_targets(): + targets = pd.DataFrame( + [ + { + "target_id": 10, + "stratum_id": 10, + "variable": "household_count", + "value": 10.0, + "target_name": "hh_total_d601", + }, + { + "target_id": 11, + "stratum_id": 11, + "variable": "household_count", + "value": 8.0, + "target_name": "hh_total_d602", + }, + { + "target_id": 12, + "stratum_id": 12, + "variable": "household_count", + "value": 4.0, + "target_name": "hh_snap_pos_d601", + }, + { + "target_id": 13, + "stratum_id": 13, + "variable": "household_count", + "value": 3.0, + "target_name": "hh_snap_pos_d602", + }, + ] + ) + constraints = { + 10: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "601", + } + ], + 11: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "602", + } + ], + 12: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "601", + }, + {"variable": "snap", "operation": ">", "value": "0"}, + ], + 13: [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "602", + }, + {"variable": "snap", "operation": ">", "value": "0"}, + ], + } + unit_data = pd.DataFrame( + { + "unit_index": [0, 1, 2, 3], + "household_id": [0, 1, 2, 3], + "congressional_district_geoid": [601, 601, 602, 602], + "snap_positive": [ + "positive", + "non_positive", + "positive", + "non_positive", + ], + } + ) + return targets, constraints, unit_data + + +def test_close_margins_full_partition_keeps_authored_cells(ipf_conversion): + targets, constraints, unit_data = _make_age_partition_targets() + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + targets, constraints + ) + assert unresolved == [] + + closed_blocks, dropped = ipf_conversion.close_margins_for_testing( + resolved=resolved, + unit_data=unit_data, + ) + assert dropped == [] + assert len(closed_blocks) == 1 + block = closed_blocks[0] + assert block.closure_status == "full_partition" + assert all(cell.is_authored for cell in block.cells) + + emitted = ipf_conversion.emit_target_rows(closed_blocks) + assert len(emitted) == 2 + assert emitted["is_authored"].tolist() == [True, True] + assert set(emitted["cell"]) == { + "age_bracket=0-4|congressional_district_geoid=601", + "age_bracket=5-9|congressional_district_geoid=601", + } + + +def test_close_margins_binary_subset_derives_complement_from_parent_total( + ipf_conversion, +): + targets, constraints, unit_data = _make_snap_subset_and_total_targets() + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + targets, constraints + ) + assert unresolved == [] + + closed_blocks, dropped = ipf_conversion.close_margins_for_testing( + resolved=resolved, + unit_data=unit_data, + ) + assert dropped == [] + assert len(closed_blocks) == 2 + assert {block.closure_status for block in closed_blocks} == { + "full_partition", + "binary_subset_with_parent_total", + } + + emitted = ipf_conversion.emit_target_rows(closed_blocks) + subset_rows = emitted.loc[ + emitted["closure_status"] == "binary_subset_with_parent_total" + ].reset_index(drop=True) + derived_rows = subset_rows.loc[~subset_rows["is_authored"]].sort_values( + "cell" + ).reset_index(drop=True) + assert len(derived_rows) == 2 + assert set(derived_rows["cell"]) == { + "congressional_district_geoid=601|snap_positive=non_positive", + "congressional_district_geoid=602|snap_positive=non_positive", + } + assert derived_rows["target_value"].tolist() == [6.0, 5.0] + assert (derived_rows["derivation_reason"] == "authored_parent_total").all() + + +def test_close_margins_missing_parent_total_drops_open_subset(ipf_conversion): + targets, constraints, unit_data = _make_snap_subset_and_total_targets() + open_subset_targets = targets.loc[targets["target_id"].isin([12, 13])].reset_index( + drop=True + ) + open_subset_constraints = {12: constraints[12], 13: constraints[13]} + + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + open_subset_targets, open_subset_constraints + ) + assert unresolved == [] + + closed_blocks, dropped = ipf_conversion.close_margins_for_testing( + resolved=resolved, + unit_data=unit_data, + ) + assert closed_blocks == [] + assert len(dropped) == 1 + assert dropped[0]["reason"] == "missing_parent_total" + + +def test_close_margins_ambiguous_parent_total_drops_subset(ipf_conversion): + targets, constraints, unit_data = _make_snap_subset_and_total_targets() + ambiguous_targets = pd.concat( + [ + targets.loc[targets["target_id"].isin([10, 11, 12, 13])], + pd.DataFrame( + [ + { + "target_id": 14, + "stratum_id": 14, + "variable": "household_count", + "value": 9.0, + "target_name": "hh_total_d601_duplicate", + } + ] + ), + ], + ignore_index=True, + ) + ambiguous_constraints = dict(constraints) + ambiguous_constraints[14] = [ + { + "variable": "congressional_district_geoid", + "operation": "==", + "value": "601", + } + ] + + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + ambiguous_targets, ambiguous_constraints + ) + assert unresolved == [] + + closed_blocks, dropped = ipf_conversion.close_margins_for_testing( + resolved=resolved, + unit_data=unit_data, + ) + assert len(closed_blocks) == 1 + assert len(dropped) == 1 + assert dropped[0]["reason"] == "ambiguous_parent_total" + + +def test_margin_consistency_uses_closed_subset_totals(ipf_conversion): + targets, constraints, unit_data = _make_snap_subset_and_total_targets() + resolved, _ = ipf_conversion.resolve_targets_for_testing(targets, constraints) + closed_blocks, dropped = ipf_conversion.close_margins_for_testing( + resolved=resolved, + unit_data=unit_data, + ) + assert dropped == [] + issues = ipf_conversion.check_margin_consistency(closed_blocks) + assert issues == [] + + +def test_household_invariance_guard_drops_person_varying_household_margin( + ipf_conversion, +): + targets = pd.DataFrame( + [ + { + "target_id": 30, + "stratum_id": 30, + "variable": "household_count", + "value": 1.0, + "target_name": "hh_age_u5", + } + ] + ) + constraints = { + 30: [ + {"variable": "age", "operation": ">", "value": "-1"}, + {"variable": "age", "operation": "<", "value": "5"}, + ] + } + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + targets, constraints + ) + assert unresolved == [] + blocks = ipf_conversion.assemble_margins_for_testing(resolved) + unit_data = pd.DataFrame( + { + "household_id": [0, 0, 1, 1], + "age_bracket": ["0-4", "5-9", "0-4", "5-9"], + } + ) + + valid_blocks, dropped = ipf_conversion._validate_household_margin_invariance( + unit_data=unit_data, + blocks=blocks, + ) + assert valid_blocks == [] + assert len(dropped) == 1 + assert dropped[0]["reason"] == "non_invariant_household_constraint_variable" + assert dropped[0]["columns"] == ["age_bracket"] + + +def test_emit_target_rows_rejects_unclosed_margin_blocks(ipf_conversion): + targets, constraints, _ = _make_age_partition_targets() + resolved, unresolved = ipf_conversion.resolve_targets_for_testing( + targets, constraints + ) + assert unresolved == [] + blocks = ipf_conversion.assemble_margins_for_testing(resolved) + + with pytest.raises(TypeError, match="expects closed margin blocks"): + ipf_conversion.emit_target_rows(blocks)

nix%XzH!Hkxf^}A{mcLs+ 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ⅅ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 q>dWTkRNng}T-*z22zSFnU3 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�ps!wj_VR_e*`1oTolzm~*X^ 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