From 6c119369ae9e8ea0394d0175a927aaae73329c2e Mon Sep 17 00:00:00 2001 From: njtierney Date: Thu, 11 Jan 2024 15:01:36 +1100 Subject: [PATCH 01/39] add paper template --- .Rbuildignore | 1 + paper/paper.Rmd | 129 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 paper/paper.Rmd diff --git a/.Rbuildignore b/.Rbuildignore index 930108d..ece1a95 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -12,3 +12,4 @@ ^docs$ ^pkgdown$ ^touchstone$ +^paper$ diff --git a/paper/paper.Rmd b/paper/paper.Rmd new file mode 100644 index 0000000..6943fb5 --- /dev/null +++ b/paper/paper.Rmd @@ -0,0 +1,129 @@ +--- +title: 'conmat: generate synthetic contact matrices for a given age population' +authors: +- affiliation: 1 + name: Nicholas Tierney + orcid: 0000-0003-1460-8722 +- affiliation: 1,2 + name: Nick Golding + orcid: +- affiliation: 1,3 + name: Aarathy Babu + orcid: +- affiliation: 4 + name: Michael Lydeamore + orcid: +date: "14 April 2023" +output: + html_document: + keep_md: yes + pdf_document: default +bibliography: paper.bib +tags: +- epidemiology +- R +- infectious disease +affiliations: +- index: 1 + name: Telethon Kids Institute +- index: 2 + name: Curtin University +- index: 3 + name: +- index: 4 + name: Monash University +--- + +# Summary + +Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable and how disease spread will unfold helps to make proactive decisions that benefit the most people. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. + +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide the empirical estimates of the number of social contacts from one age group to another, as well as the setting of contact. For example, homes have higher contact with 25-50 year olds with 0-15 year olds, workplaces have high contact within 25-60 year olds. + +These surveys exist for a variety of countries, for example, Mossong et al., the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 177 countries, and provided contact matrices at "urban" and "rural" levels for each country. + +However not all countries were included in this list from Prem et al, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. We needed to make predictions at finer grained regions, were required. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. We needed to create contact matrices based on existing studies like POLYMOD but projected to the age population in a given local government area in Australia. + +Conmat was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: + +- Input: age and population data, and Output: synthetic contact matrix +- Create next generation matrices (NGMs) +- Apply vaccination reduction to NGMs +- Use NGMs in disease modelling +- Provide tidy Australian survey data from the Australian Bureau of Statistics for use. + +# Example + +As an example, let us generate a contact matrix for a local area using POLYMOD data. + +Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. + +```{r} +perth <- abs_age_lga("Perth (C)") +perth +``` + +We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: + +```{r} +perth_contact <- extrapolate_polymod(population = perth) +perth_contact +``` + +We can plot this with `autoplot` + +```{r} +autoplot(perth_contact) +``` + +# Implementation + +Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. +The model is a poisson generalised additive model (gam), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. + +The six key features of the relationship are shown in the figure below + +```{r} +# use DHARMA to show a partial dep plot of the six main terms +``` + +## Model interfaces + +We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://njtierney.github.io/conmat/dev/ + +* `fit_single_contact_model()` + * Using contact survey data to fit a GAM model, adding provided target population information to provide population size information. Recommended for when you want to fit to just a single setting, for which you might want to provide your own contact survey data. + +* `predict_contacts()` + + * This takes a fitted model from `fit_single_contact_model`, and then predicts to a provided population + +* `fit_setting_contacts()` + * Fits the `fit_single_contact_model()` to each setting. Recommended for when you have multiple settings to fit. Returns a list of fitted models. + +* `predict_setting_contacts()` + * Takes a list of fitted models from `fit_setting_contacts()` and predicts to a given population for each setting. + +* `estimate_setting_contacts()` + * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. + +* `extrapolate_polymod()` + * Takes population information and projects pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. + +# Future Work + +* Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. +* Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants +* Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset +* Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from Polymod data. If we compute a different one for each household size, in the Polymod data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. +* Add methods for including household size distributions +* Add uncertainty to estimates +* Move Australian centric data into its own package +* Add documentation on specifying your own GAM model and using this workflow + + +# References + +- Prem 2017: https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005697 +- Prem 2021: https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1009098 +- Mossonget al 2007: https://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.0050074 From 650c44f77fd1fc210e0e29c7b58b042d36bf096f Mon Sep 17 00:00:00 2001 From: njtierney Date: Fri, 3 May 2024 14:16:05 +1000 Subject: [PATCH 02/39] Another pass at the paper --- .gitignore | 2 + paper/paper.Rmd | 48 +- paper/paper.aux | 24 + paper/paper.log | 483 ++++++++++++++++++ paper/paper.md | 207 ++++++++ .../figure-html/autoplot-contacts-1.png | Bin 0 -> 344255 bytes paper/references.bib | 51 ++ 7 files changed, 801 insertions(+), 14 deletions(-) create mode 100644 paper/paper.aux create mode 100644 paper/paper.log create mode 100644 paper/paper.md create mode 100644 paper/paper_files/figure-html/autoplot-contacts-1.png create mode 100644 paper/references.bib diff --git a/.gitignore b/.gitignore index 72cd8b5..2b1b420 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ README_cache .vscode/launch.json .pre-commit-config.yaml tests/README.md +paper/*.html +paper/*.pdf \ No newline at end of file diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 6943fb5..cb2a9ee 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -13,12 +13,15 @@ authors: - affiliation: 4 name: Michael Lydeamore orcid: -date: "14 April 2023" +- affiliation: 1,3 + name: Chitra Saraswati + orcid: +date: "03 May 2024" output: html_document: keep_md: yes pdf_document: default -bibliography: paper.bib +bibliography: references.bib tags: - epidemiology - R @@ -34,17 +37,34 @@ affiliations: name: Monash University --- +```{r} +#| label: setup +#| echo: false +#| message: false +#| warning: false +#| comment: false +knitr::opts_chunk$set(comment = "#>", + echo = TRUE, + out.width = "95%", + retina = 3, + fig.height = 4, + fig.align = "center", + dpi = 300, + dev = "png") +options(tinytex.clean = FALSE) +``` + # Summary -Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable and how disease spread will unfold helps to make proactive decisions that benefit the most people. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. +Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable, and how disease spread will unfold facilitates public health decision-making. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. -We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide the empirical estimates of the number of social contacts from one age group to another, as well as the setting of contact. For example, homes have higher contact with 25-50 year olds with 0-15 year olds, workplaces have high contact within 25-60 year olds. +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another, as well as the setting of contact. For example, we might learn from a contact survey that homes have higher contact with 25-50 year olds and with 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These surveys exist for a variety of countries, for example, Mossong et al., the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 177 countries, and provided contact matrices at "urban" and "rural" levels for each country. +These surveys exist for a variety of countries, for example, @mossong2008 the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland [@mossong2008]. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -However not all countries were included in this list from Prem et al, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. We needed to make predictions at finer grained regions, were required. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. We needed to create contact matrices based on existing studies like POLYMOD but projected to the age population in a given local government area in Australia. +However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regons. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. -Conmat was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: +The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: - Input: age and population data, and Output: synthetic contact matrix - Create next generation matrices (NGMs) @@ -59,6 +79,8 @@ As an example, let us generate a contact matrix for a local area using POLYMOD d Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. ```{r} +#| label: load-conmat +library(conmat) perth <- abs_age_lga("Perth (C)") perth ``` @@ -66,6 +88,8 @@ perth We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: ```{r} +#| label: extrapolate-polymod +#| echo: true perth_contact <- extrapolate_polymod(population = perth) perth_contact ``` @@ -73,6 +97,7 @@ perth_contact We can plot this with `autoplot` ```{r} +#| label: autoplot-contacts autoplot(perth_contact) ``` @@ -89,7 +114,7 @@ The six key features of the relationship are shown in the figure below ## Model interfaces -We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://njtierney.github.io/conmat/dev/ +We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ * `fit_single_contact_model()` * Using contact survey data to fit a GAM model, adding provided target population information to provide population size information. Recommended for when you want to fit to just a single setting, for which you might want to provide your own contact survey data. @@ -115,15 +140,10 @@ We provide multiple levels for the user to interact with for model fitting, furt * Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants * Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset -* Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from Polymod data. If we compute a different one for each household size, in the Polymod data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. +* Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from POLYMOD data. If we compute a different one for each household size, in the POLYMOD data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. * Add methods for including household size distributions * Add uncertainty to estimates * Move Australian centric data into its own package * Add documentation on specifying your own GAM model and using this workflow - # References - -- Prem 2017: https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005697 -- Prem 2021: https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1009098 -- Mossonget al 2007: https://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.0050074 diff --git a/paper/paper.aux b/paper/paper.aux new file mode 100644 index 0000000..25e9219 --- /dev/null +++ b/paper/paper.aux @@ -0,0 +1,24 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand\BKM@entry[2]{} +\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={140}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} +\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={199}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } +\newlabel{summary}{{}{1}{Summary}{section*.1}{}} +\@writefile{toc}{\contentsline {section}{Example}{1}{section*.2}\protected@file@percent } +\newlabel{example}{{}{1}{Example}{section*.2}{}} +\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={308}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} +\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={327}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030695C3030306E5C303030745C303030655C303030725C303030665C303030615C303030635C303030655C30303073} +\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.3}\protected@file@percent } +\newlabel{implementation}{{}{3}{Implementation}{section*.3}{}} +\@writefile{toc}{\contentsline {subsection}{Model interfaces}{3}{section*.4}\protected@file@percent } +\newlabel{model-interfaces}{{}{3}{Model interfaces}{section*.4}{}} +\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={398}}{5C3337365C3337375C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030575C3030306F5C303030725C3030306B} +\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={434}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} +\@writefile{toc}{\contentsline {section}{Future Work}{4}{section*.5}\protected@file@percent } +\newlabel{future-work}{{}{4}{Future Work}{section*.5}{}} +\newlabel{references}{{}{4}{References}{section*.6}{}} +\@writefile{toc}{\contentsline {section}{References}{4}{section*.6}\protected@file@percent } +\gdef \@abspage@last{4} diff --git a/paper/paper.log b/paper/paper.log new file mode 100644 index 0000000..caad528 --- /dev/null +++ b/paper/paper.log @@ -0,0 +1,483 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.12.4) 3 MAY 2024 14:13 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**paper.tex +(./paper.tex +LaTeX2e <2023-11-01> +L3 programming layer <2023-11-09> +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls +Document Class: article 2023/05/17 v1.4n Standard LaTeX document class +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +) +\c@part=\count186 +\c@section=\count187 +\c@subsection=\count188 +\c@subsubsection=\count189 +\c@paragraph=\count190 +\c@subparagraph=\count191 +\c@figure=\count192 +\c@table=\count193 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2023/05/13 v2.17o AMS math features +\@mathmargin=\skip50 +For additional information on amsmath, use the `?' option. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks17 +\ex@=\dimen141 +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen142 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count194 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count195 +\leftroot@=\count196 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count197 +\DOTSCASE@=\count198 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count199 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count266 +\dotsspace@=\muskip16 +\c@parentequation=\count267 +\dspbrk@lvl=\count268 +\tag@help=\toks18 +\row@=\count269 +\column@=\count270 +\maxfields@=\count271 +\andhelp@=\toks19 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks20 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2022/02/03 v1.0f TeX engine tests +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2021/04/29 v2.0v Standard LaTeX package +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2021/02/14 v1.3d Input encoding file +\inpenc@prehook=\toks22 +\inpenc@posthook=\toks23 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2020/02/02 v2.0n Standard LaTeX package +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty +Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. +LaTeX Font Info: Overwriting symbol font `letters' in version `normal' +(Font) OML/cmm/m/it --> OML/lmm/m/it on input line 23. +LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' +(Font) OMS/cmsy/m/n --> OMS/lmsy/m/n on input line 24. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 25. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 26. +LaTeX Font Info: Overwriting symbol font `letters' in version `bold' +(Font) OML/cmm/b/it --> OML/lmm/b/it on input line 27. +LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' +(Font) OMS/cmsy/b/n --> OMS/lmsy/b/n on input line 28. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 29. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 31. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' +(Font) OT1/cmss/m/n --> OT1/lmss/m/n on input line 32. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' +(Font) OT1/cmr/m/it --> OT1/lmr/m/it on input line 33. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 34. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 35. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' +(Font) OT1/cmss/bx/n --> OT1/lmss/bx/n on input line 36. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' +(Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty +Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks24 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count272 +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 274. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. +Package xcolor Info: Model `RGB' extended on input line 1366. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2020/01/02 v5.9 Page Geometry +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. +) +\Gm@cnth=\count273 +\Gm@cntv=\count274 +\c@Gm@tempcnt=\count275 +\Gm@bindingoffset=\dimen150 +\Gm@wd@mp=\dimen151 +\Gm@odd@mp=\dimen152 +\Gm@even@mp=\dimen153 +\Gm@layoutwidth=\dimen154 +\Gm@layoutheight=\dimen155 +\Gm@layouthoffset=\dimen156 +\Gm@layoutvoffset=\dimen157 +\Gm@dimlist=\toks25 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +Package: fancyvrb 2023/11/06 4.5b verbatim text (tvz,hv) +\FV@CodeLineNo=\count276 +\FV@InFile=\read2 +\FV@TabBox=\box53 +\c@FancyVerbLine=\count277 +\FV@StepNumber=\count278 +\FV@OutFile=\write3 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty +Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks +\OuterFrameSep=\skip53 +\fb@frw=\dimen158 +\fb@frh=\dimen159 +\FrameRule=\dimen160 +\FrameSep=\dimen161 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. +) +\Gin@req@height=\dimen162 +\Gin@req@width=\dimen163 +) +\cslhangindent=\skip54 +\csllabelwidth=\skip55 +\cslentryspacingunit=\skip56 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty +Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) +\calc@Acount=\count279 +\calc@Bcount=\count280 +\calc@Adimen=\dimen164 +\calc@Bdimen=\dimen165 +\calc@Askip=\skip57 +\calc@Bskip=\skip58 +LaTeX Info: Redefining \setlength on input line 80. +LaTeX Info: Redefining \addtolength on input line 81. +\calc@Ccount=\count281 +\calc@Cskip=\skip59 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty +Package: bookmark 2020-11-06 v1.29 PDF bookmarks (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2023-11-26 v7.01g Hypertext links for LaTeX +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/auxhook/auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count282 +) +\@linkdim=\dimen166 +\Hy@linkcounter=\count283 +\Hy@pagecounter=\count284 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2023-11-26 v7.01g Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +\Hy@SavedSpaceFactor=\count285 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2023-11-26 v7.01g Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Option `unicode' set `true' on input line 4064. +Package hyperref Info: Hyper figures OFF on input line 4181. +Package hyperref Info: Link nesting OFF on input line 4186. +Package hyperref Info: Hyper index ON on input line 4189. +Package hyperref Info: Plain pages OFF on input line 4196. +Package hyperref Info: Backreferencing OFF on input line 4201. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4448. +\c@Hy@tempcnt=\count286 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip17 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 4786. +\XeTeXLinkMargin=\dimen167 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) +)) +\Fld@menulength=\count287 +\Field@Width=\dimen168 +\Fld@charsize=\dimen169 +Package hyperref Info: Hyper figures OFF on input line 6065. +Package hyperref Info: Link nesting OFF on input line 6070. +Package hyperref Info: Hyper index ON on input line 6073. +Package hyperref Info: backreferencing OFF on input line 6080. +Package hyperref Info: Link coloring OFF on input line 6085. +Package hyperref Info: Link coloring with OCG OFF on input line 6090. +Package hyperref Info: PDF/A mode OFF on input line 6095. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty +Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi +package with kernel methods +) +\Hy@abspage=\count288 +\c@Item=\count289 +\c@Hfootnote=\count290 +) +Package hyperref Info: Driver (autodetected): hpdftex. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2023-11-26 v7.01g Hyperref driver for pdfTeX +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty +Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package +with kernel methods +) +\Fld@listcount=\count291 +\c@bookmark@seq@number=\count292 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. +) +\Hy@SectionHShift=\skip60 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +File: bkm-pdftex.def 2020-11-06 v1.29 bookmark driver for pdfTeX (HO) +\BKM@id=\count293 +)) +LaTeX Font Info: Trying to load font information for T1+lmr on input line 136. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd +File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-11-09 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count294 +\l__pdf_internal_box=\box54 +) (./paper.aux) +\openout1 = `paper.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 136. +LaTeX Font Info: ... okay on input line 136. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live +)) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) +* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=469.75502pt +* \textheight=650.43001pt +* \oddsidemargin=0.0pt +* \evensidemargin=0.0pt +* \topmargin=-37.0pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=10.0pt +* \footskip=30.0pt +* \marginparwidth=65.0pt +* \marginparsep=11.0pt +* \columnsep=10.0pt +* \skip\footins=9.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +Package hyperref Info: Link coloring OFF on input line 136. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd +File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OML+lmm on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd +File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd +File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMX+lmex on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd +File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <12> on input line 138. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <8> on input line 138. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <6> on input line 138. +LaTeX Font Info: Trying to load font information for U+msa on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 138. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 178. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd +File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 186. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd +File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) [1 + +{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc}] +LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available +(Font) Font shape `T1/lmtt/b/n' tried instead on input line 210. + +File: paper_files/figure-latex/unnamed-chunk-4-1.png Graphic file (type png) + +Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-4-1.png used on input line 305. +(pdftex.def) Requested size: 446.25995pt x 274.6215pt. +[2] +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <10> on input line 331. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <7> on input line 331. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <5> on input line 331. +[3 <./paper_files/figure-latex/unnamed-chunk-4-1.png>] [4] (./paper.aux) + *********** +LaTeX2e <2023-11-01> +L3 programming layer <2023-11-09> + *********** + ) +Here is how much of TeX's memory you used: + 11665 strings out of 476227 + 180027 string characters out of 5796039 + 1943555 words of memory out of 5000000 + 33413 multiletter control sequences out of 15000+600000 + 609701 words of font info for 80 fonts, out of 8000000 for 9000 + 14 hyphenation exceptions out of 8191 + 77i,5n,81p,510b,560s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on paper.pdf (4 pages, 426980 bytes). +PDF statistics: + 123 PDF objects out of 1000 (max. 8388607) + 95 compressed objects within 1 object stream + 21 named destinations out of 1000 (max. 500000) + 54 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/paper/paper.md b/paper/paper.md new file mode 100644 index 0000000..2c970d1 --- /dev/null +++ b/paper/paper.md @@ -0,0 +1,207 @@ +--- +title: 'conmat: generate synthetic contact matrices for a given age population' +authors: +- affiliation: 1 + name: Nicholas Tierney + orcid: 0000-0003-1460-8722 +- affiliation: 1,2 + name: Nick Golding + orcid: +- affiliation: 1,3 + name: Aarathy Babu + orcid: +- affiliation: 4 + name: Michael Lydeamore + orcid: +- affiliation: 1,3 + name: Chitra Saraswati + orcid: +date: "03 May 2024" +output: + html_document: + keep_md: yes + pdf_document: default +bibliography: references.bib +tags: +- epidemiology +- R +- infectious disease +affiliations: +- index: 1 + name: Telethon Kids Institute +- index: 2 + name: Curtin University +- index: 3 + name: +- index: 4 + name: Monash University +--- + + + +# Summary + +Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable, and how disease spread will unfold facilitates public health decision-making. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. + +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another, as well as the setting of contact. For example, we might learn from a contact survey that homes have higher contact with 25-50 year olds and with 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. + +These surveys exist for a variety of countries, for example, @mossong2008 the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland [@mossong2008]. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. + +However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regons. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. + +The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: + +- Input: age and population data, and Output: synthetic contact matrix +- Create next generation matrices (NGMs) +- Apply vaccination reduction to NGMs +- Use NGMs in disease modelling +- Provide tidy Australian survey data from the Australian Bureau of Statistics for use. + +# Example + +As an example, let us generate a contact matrix for a local area using POLYMOD data. + +Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. + + +```r +library(conmat) +perth <- abs_age_lga("Perth (C)") +perth +``` + +``` +#> # A tibble: 18 × 4 (conmat_population) +#> - age: lower.age.limit +#> - population: population +#> lga lower.age.limit year population +#> +#> 1 Perth (C) 0 2020 1331 +#> 2 Perth (C) 5 2020 834 +#> 3 Perth (C) 10 2020 529 +#> 4 Perth (C) 15 2020 794 +#> 5 Perth (C) 20 2020 3615 +#> 6 Perth (C) 25 2020 5324 +#> 7 Perth (C) 30 2020 4667 +#> 8 Perth (C) 35 2020 3110 +#> 9 Perth (C) 40 2020 1650 +#> 10 Perth (C) 45 2020 1445 +#> 11 Perth (C) 50 2020 1299 +#> 12 Perth (C) 55 2020 1344 +#> 13 Perth (C) 60 2020 1359 +#> 14 Perth (C) 65 2020 1145 +#> 15 Perth (C) 70 2020 1004 +#> 16 Perth (C) 75 2020 673 +#> 17 Perth (C) 80 2020 481 +#> 18 Perth (C) 85 2020 367 +``` + +We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: + + +```r +perth_contact <- extrapolate_polymod(population = perth) +perth_contact +``` + +``` +#> +``` + +``` +#> ── Setting Prediction Matrices ───────────────────────────────────────────────── +``` + +``` +#> A list of matrices containing the model predicted contact rate between ages in +#> each setting. +``` + +``` +#> There are 16 age breaks, ranging 0-75+ years, with a regular 5 year interval +``` + +``` +#> • home: a 16x16 +``` + +``` +#> • work: a 16x16 +``` + +``` +#> • school: a 16x16 +``` + +``` +#> • other: a 16x16 +``` + +``` +#> • all: a 16x16 +``` + +``` +#> ℹ Access each with `x$name` +``` + +``` +#> ℹ e.g., `x$home` +``` + +We can plot this with `autoplot` + + +```r +autoplot(perth_contact) +``` + + + +# Implementation + +Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. +The model is a poisson generalised additive model (gam), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. + +The six key features of the relationship are shown in the figure below + + +```r +# use DHARMA to show a partial dep plot of the six main terms +``` + +## Model interfaces + +We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ + +* `fit_single_contact_model()` + * Using contact survey data to fit a GAM model, adding provided target population information to provide population size information. Recommended for when you want to fit to just a single setting, for which you might want to provide your own contact survey data. + +* `predict_contacts()` + + * This takes a fitted model from `fit_single_contact_model`, and then predicts to a provided population + +* `fit_setting_contacts()` + * Fits the `fit_single_contact_model()` to each setting. Recommended for when you have multiple settings to fit. Returns a list of fitted models. + +* `predict_setting_contacts()` + * Takes a list of fitted models from `fit_setting_contacts()` and predicts to a given population for each setting. + +* `estimate_setting_contacts()` + * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. + +* `extrapolate_polymod()` + * Takes population information and projects pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. + +# Future Work + +* Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. +* Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants +* Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset +* Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from POLYMOD data. If we compute a different one for each household size, in the POLYMOD data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. +* Add methods for including household size distributions +* Add uncertainty to estimates +* Move Australian centric data into its own package +* Add documentation on specifying your own GAM model and using this workflow + +# References diff --git a/paper/paper_files/figure-html/autoplot-contacts-1.png b/paper/paper_files/figure-html/autoplot-contacts-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc087193736377b389c14854f3435bff6b4bf2c GIT binary patch literal 344255 zcmeFZWmuGJ+cpd+s33xhD6N8uq|yx*3QG5oO6O2R48KJjVdRI~2hEwijufA+7%@?Xz-Gw*dDJpa;r{laoNcTwf1GV^NW*#2DHy8ArZ zZVgQmQpTnkfxbh)MxDz(+c#CzJon>=kbNDzn-t#7&KeZX5`Gt-X1cz1WOe;!6B@Ns zx_fH8oGbqv|NXenP_{tZ?I}aNlWUEI+MZ`09kyIRz1h3)L)aqj=G2vj56IuXUcXWS!^RF{m2tlX2$H_=W&=8HIknimYZJq$%v<2S>K=g z_sBps6Tarn_j_e?ltu*bHFjfDAyl_uiqXeMY-|40o0nD7#D1t{Bt$+w)@3iHXu2cn zs}pz8zU2Yz2z%h579V|nDopS?33b37PSuj1k6S#{O749l*G1TS1W%2%$c%n!!%wVD zq@I=k#PDfVOYFzBsK8c3iIBhz5QwC0oASK zn_>4_l?(z5dW57e@is@?wlml&@9B5OXH-n&_pkC_aD3EsVr&pKQQXxioybo<)HT#) z-WHCs(h-7Nsrgq*swP$r+AZ2M8B?3F+qaDL$J=(D*6Yrr@^$C=As0{1xu5Y^9#t*n zUFK<5C5Bf(HGe$c5|uR&OJP^BcwLnIRfAXcfPevs2QPQ3Ja0^-c{H=zDjsIux*NuD z*JBzzBR1J-muQ=4gYj(9p5U<6wbiv@uuFVy*6+N|W4@M`TtGZ$8mTar_!u(8F2Zc! zBU;~3Z}3uX;hOKe3$Hm{9Qd=Y242^$Bx=rw8f3w>QY8BGI%WD^?5ve zKU2K3;1xdjq6S}hcmzoVfBoh>PtuvcUZ2g!{Snc_YlDX;fhYC!k+Kv1%J{jl{--C+ zKNS>y=qP+lQvcq0;Vo%py5GGaS7F!n*%j@xuItrt)oSE4aR+LTl=E+&zpXAvad~uB z95ZGpGdgbZ(joD+YIS$$%=!%tPQW3SMTk;>pj0`A|BpInKve zRL4x~rw&I9+;}eDQK#?AlXJVe%|Ub>jn{Q8jM}5>3aH1=&h)>~8!NLh`tkmBG{Cp`gges)QN>)!8AmM(`+K)qyFDbISA+~kTEXYEmMoWqFe z+!sH3uD&$6U~O|k;aAaIjmK#OPkb*vJag_6k3U=C`$bG`t>AKYQM=+x_G`kH$p$Re z(_k%m;)NYK%G*+2W%;GMu9m3jQO(EMUBV~Dzf45_{(Ab%UXQZ{2ENPdh;}wMm?PHN zTSyKb^B|t6_}N6$(f#F#pem!H!Dp6`?cGQCJ|I>*>g{+Fk(yO_`hL?1k0T*yxp;F! z-0Rz+4!8H~egRE!f6GSaa+@78vycB}yMT~OrMcooHj=wq|W1efx*Kqzb)A#i!Qd(9h)!7ruNCcBKBRR!{I;qPK($^Ge ziiyq^SqEbr{lvdp5yTgdou@cpwFQDRoeK*xvpJ>c5s}lQEtL#xdo=gBDm}gP%;l{q zf6f>}O7$d`tsLwt$v|quOM)}xrHlKDkt(glDIETr=WohKdqR?&r#{@f(qRy;qAH~v z^!WVD)rs9(iLczmbbfNo4C;8o^U5AdHU=)GoE^>7L7c_@Zp~g1EFkW`952ki4w6fX zCwgocECLA;cRK3@506bq=!dKK=1%T=-r@+P73{ruy+kfUaAYREaes8h%Y7%e}Yumg|y(S~=l5G->M7?Xtt z*X0+t!Ma^Z5l2p7(+DxW*Yq%~Yk>+j$u9Tn5Sfwek3@g>x}-ZKeBJBnO0J!FwwgHLMm{r(4Qv(uN!=$!IhC!n{BKo7Q2-Y6M+fOGwrLT z7AvJgEN!T zlDYm4IVR8K|RxW=CudBq~jW%x?}nZNC4AxO&X&dY^XU_;ahYL7Pk%NM@---a#q zXMCa(vQO7=-=Afip5o#|JLxBT5bMa3|0p)?BWPT!+LE;cn->$V3b`NB<@r$4qQFPt zQ~pVRuD0;$P0VG9o52!-&A|}u?((ig`*u3VF`JX@mR;M3Yta{|z{RfO2X)2db14Bw zPO`x7L>l%zy!Crw!1Es58EN5{^t%M-d1^c%GErQH(t6M45oxu}pS*zce!IWXCnx@l5>*2~ zd_fPM{GV!xAE4SGPkT&{yM;4e!Qv+ZTqsihu?JylW=)r$)4n!J6m=3hJ>JE1fDhMP z%4QD6g$9)g@zZ@d19xEBa!kP&e-DelI}85Vsk3k8zE4Sq_~D|Ae1T_$*A0FvEdwz# zm+IbPu;nqlgX)Z2u@Ci|o^DEa>;b=MSJQ>h4#E$%7gJ=>_Or9R&YK2X`}2vh8bw9} zZpXF9JDQFfwI>JW9g!;jgsym6yXD zLrX%`q{Oj?3V z+eIp_A8z}zkzVJLax_c%vT_hHi>SQBVTV!6tB#Rh&WRbv*+}L}H~5it!FOxM;Jf2% zLQV|_%F9tD?RH|@hAFJbDCO^y{tR~2;7dwFPmT>R^_wp zcVjKy@QvFm6*W?7MhVWxaog}Vj7ncM({!GzxSYLeKOgTH14<2XM>d4nK%4zie=9CK z870DZ9*#n5;ollR{RrQ0&8&`NxN=9k^_L^Kw9J7acoeWg&$nDf1^?2ksM zC18+wW^{>fP2TDA_`9$$D~|gG(uo~hI5vIU{e+Bn)Us6DiXnHR4UdeW{!1@gqD|-&9#-XZC?H@nk2Om z?2y5);G(qzF#(_TBRO$`(@v0GGueh~=w=sm%UjV^wkzH`&0<5O{hV65r}@=&3oFHa zvO#do{Dn6v{HMiIwWG0iYc6-#*E!Qn8(PI^-}g_)*>zsHjwHnZkMY{H>)=(h8hdx) zYMdDS;B3=jB*Tf7=Crkr)1=SXc8Xg8zboBgi1^P!hjEx%Gg{B#y3I;KGf`?08CqJy zzR_@%CakmOaBX?W&)v)A9lX9_=S!vC;cBVyPO9Tqp?9U>bH)tk%lpJOTNpcU`?H0a z?DM79mjjo$%FdlDpA(!?X6WL)(^P7AvOh2UlD$OvD=a)zi|7*V!qCJOD4(E48*S{ut%bHe`ZfI{w~a#Y7!Mo_<&zCEj!xB+aI%#rpwI5ydTrqDx>DfB zKXQDL!LLNjSaoxBD$l75J;HyElzN7;piZq*_w)eOQsK9&3ss*F;m5f3i68#Jn8Q!f zBh*rw(%)Gvogm#rI_Z+EZw1Jj9JZFGeuo~Xc zaBj|oTdxgCAUD{qlBv0Zo&6c@M7T+Dah-C+i(T2x~d^d*+y!6UVt2z17 z`!!5c!mo7bgUZKI>}cZ&v^Px5yd0`*r#UP!>*+K0x!7ZP;^+6W{8EIEJO5`EQBE~i z4+mD2iCV}h+UL6VvU%>t<_*c;dJeB8l7$Y!zieg4GNnc4{vjf2>tH!AEr0vSe{a%{ zA+GG4?qsadzVB$U>GXn^%@^g?z*^~4QdCBNEPOJy0!@0FmgqiG0DbWcVJybTsY`~n zWW}E}yGE-TUy|sw_2R%3Q}3`s6E7QqPm0i3DP-VrS}vas5*9+d416m|O@&sC(ZMI3 zPjIzrb%@!S@FtU`eKo1V5vbp)sk+zaKsr6d{{sn8%gK8iZSnHbyh*j+4ncZlyZ zywm_Mo}j?8)sm&mtO$kCQ(4=7h3C(9@~lHt_XM)Bf<=&8vPqZaD0vBQOUoYxP^9Fb z<}}H1pUWtvqI99`G%k3Q!L#J8^=^E<9HcNHxazX>D9=(bX`)8Oq_&9ttH6%s+5^WG zYo|o$XZ-<9s#PTM6!T1|{TSHE)egR&#_T(RAo_ezyDe9@Q8P)%!@TzdbtI*&(urW2 zT8J5bDdae$N+TWPXL+l>fIZx)i1{G8sYap0GMqDM((}wE=B47TPT_eG7C}zb8;?#E zwz-$owT>r^sWu(6y7Zt>``2zI@!^1prttFHAPru|AC-|<3A{hfT(we&yi$FOF51+G z3i0wnv%{^+nw;ytDOMs&?1;zEA@i{THQo49zVNZVEQ1kiAL;7h>opl!G$)Ar=t6pH z=LDAtz1ZMOYU~c`WOqN7kLKQ`Es2=yz?=@(z+Id9p3&WiR3#yG=|l4Q(5WM8tq>Zo zpTkOJt_mY)0;*K`>7S3iM*y}gnia*wXr#jZ-;I-rxVqBV~5j-Y$tC6gD(+ldNcN5w&;@xs?3CSO|I z723RSLE*~A@xn*V&*wYi?V!FcvwtLufdlw?l;*N&C8O>3&5qj66gO0{i$pwA3Jm9v zVRnyduvVZ(fyq@SfR59)=U9g9Q$zFXF)`E1<+kQTB-t;IG$ZW)DqlcZxUHEs_>p2P zdY!rzYFsJbGE8x(m<3OUG#eKjT&H0`^KUzTT^V6j~Bl}q{_oKZQZ~5|JvA6MeBDJ`<;+Kw_XrMDC zz3+id@Qmmrl#7*)n6b`-(!$mP(_HSnm|BdkA8c^<&{%g3vwGbt5@CDo6mz}gaX~#X z>yJTg=ycZTCEm-cIYmnc0Q(R=KEV3NOUf*}8a5!MZI2diYy|1Tn+U@}&v;Y5i8ar1 zGKC4b+2)dH3UNZR&2x9?PbYa_`e-o^isYIZGjVLcQs{o1%Th+@{=47?2&ieXhvd1X zjz@>$uv`War+n8VP@l|Ym8|R7_dM$aIf3?PPqBGUiRusLxX`)%WQfizZ6ah{Qc$ul zH;q7d>TPf_8Fpy^S-zMWOH0^jrmIj0|6a+iPvw(^`$tv;M5a}0<$yF$Zn#YQ6cRvYoFQU|S`#I!HVNNQ${CN-; zTdrL)k?&sJL~=4bl%L4VO%_!mT;9t=wSgF8>k%~C+>ndc0YSy< z$Zxs^)ubu>E!ZS2ZN>iE-zR@um1`fT*s=;*Waq0M=GSiu7&>r`uJEGTC0F4`)qs8@ zPaQ4CE3?Ypcc`4$Bc%wMcb6hgHzib7me@eR8Yr9A+T#Sdp(SarqNldk#)S)WM{0b~ z?@*-Dq5(Ucau^u*&?%ql*xPGE6Sb363D2qVNg<`y+^fWEd!QPe&ZKSW3;da@T`4&T zkF`Wx_)J1ZF`~*P|EaeEKb{i~TCf5c_;TP-m-wj&#=y!wqB)GflP( zYC##HpH>YD`8TN2{^{r3&HypHjg+5IEl}<(>@8+iJ$0Mz6XT;ePk|QSmjBjWK(4kM z?=W(oD^X5tpGmQ}+eRH}m#P+O>%l-gpjqo51HHu^zlcuBdW!z!hi zWTBN5*}kn;tuAfHz_Gi>hPc$&bbXW`l*1=gMSB1kiGvMl+}qJ&)<0I#%de&RxY6GK zQC@4JxI+K_=fW|5mSNRNPogfVL}DJr5MQlo9@vudeAQN`UFEaQ&25cNXTgqR4cMzg z7r|9?jvU4d{}_^3lS+St@ldVQeo2{|!sgEa)WsGm?+RUPh-HVr3&?lcIB^r{0#i%uObCi0&olBWC`habUIh85isM@q-&DkZqu0_s4 zFPuHil6$%d@QR0sDy|}t2nuxyl+TZpNS&C{n#s#9=Vw-F&}j#Ef?uZ4i^n{N;FFqa z{@7<~MNSQ=gW~D-sDQ4ykj-+ET{XS6%b}kb*1<}v&5?HSAZ~FWWenrzh8?U}VxM7> z%K7vzp63{J_#uv)Y+VeQ%H=w;F98&}ub>^8-wA@M)uVs~m3)_yML*$HB{R%wXW zsJRSY^k}ezG;x!9WSW0ss>`vd4PTl|mv6Jhq#I~9YHzt(LDIfu^l#aY9NJOVI@%m6 ztxnZ%|KdWvF?Z)^^6ST5=i9kuI+Ze_iWjh2I~ZrvL}fG% zL-FpAx)p(%gXZvVNkNCt-GpGZjY1>`H$qSc+I?KyK}~Zw_v&U|w? zOi_u0PXX$2qs83x3}R7BADVOz!cHThw=%jJT8LQoevuIQ(4_n3y7}7Hw@!4BxUAxxaQzN;s7LweEQOt?3ZprtunDUvhT0?(-(TIEJXCbA(h<7l*Az1yiK!dE*u-#+A{ddtp_ z&f!7jO5w||g6t*ziUrLHmWKD&w>1*PH&rtw8F9N@lpy2*dgbBEHlw#gduk$i7Wu{3 zD(Z+nM+4YFaM5DS7VDlpa_(~|w!rIr6VaQen_GrMeoIXV3JR+Dbw@O7)LhLZdr^WI z*0DJ?)(TQAjqo7?c-QWbZG~9D`28P2TgE%<7|hTb>yd_0?>DI?g!+}1Ei!|0=-#qI z&U%H_AO>C{ZMxp2afCLs=}^g9ZFKuRR)3G0@z_ts0nj()dGQYs)ieQmhu*xRF5Aq` zHHZr`jxOU`7MPmq0w@vHVUxz!{h>9c0660V`N0~Pp@ldibmE=FmneKu5mIrsSTT4- z0rW!SXDdMsgl15fDh^x?{(K5D2%~db{xLbtsJMe(9OCCKKiVrTtb9qUVKb>V1^b`5 z#c0`*oke!X?Cx|(lR0m9tB@I3@ZXg@JZfXj)9MvbRwompNDtu|7F(CW)W8`VEsM~h zRoTHQ&GfEpiucBkE}f%#M!e5uK|&UK4zVMH3M-9-Mnt<=Quwn41&ZzrG1^`ns%c|< zM7+;82Aux#4MWX~EQ_zR?&i)4a?6*qkbORQ(2Dp*k>O>@A`+Gskln>l5T5zkD490d zbWo`lI(g2@S>7143-!#59W*ysM|DN z3$*<3wVS0eNGV@mU{NSpUfK@BtQ?%(6nql)_vJ8O>)IBY3>s7f3HOY{b(6NCgdRmvMb~ zAm)3EcMoLv$0?$=LGvgbj18tfXPv9&?w4G`O5Uz1M&m9%QdM7gfuvdw&XvxBs zsUdmRhX>kD0E4!Tl_p!;c2&wwN%}e696QoqR@ac)gre!n8)>T_GrL)4>8?9wQ@R|AufiFjjoj2Xu z!}1jX{7#8|NQm=2m{;x5ET`lt5gEOO*zvX!xBY^Aa%?y8#qQBXsjyTf{_`&HbMXA! zT6ZjIs8l*fEzz&)q4M{|t*CVNB~Mp|i;P>d$agn5F@bjLM%5m-W~~x8yh%?*%=fj& zzYf*RoPm0>Zb-_UUw#c*vJ*!@awN8BP7maMqOXeR74j~1tDenNec9jP6A8c^BlgZv7v~HR zNEdke3a?jjThp3UC|1UTO;LhnKI=uW@MbKYTKAT7au_4Cb=i~Xv})*Hq&6AmS_nkC zl%Dt-N!qvZROh}9fTN&MV`-2OmWW<7|Hpx}xS!^^M)4e z&S+bkV`sHZa#eozfje)-W#R;S+yLZsl1;f)9Y?d^@||3E-ztvv!JW7%G}Fb%4>W^_ z`z3~cW&59F(l}K5+u>ThPn3C)xp0jfS1pfYtmNTKcEz!VMkb`f@>#Qj?}_dw`^L%B zJ&A=P5mW7L!~Dm~ed!n)+&b%n#K#2?QzyNv%U+T-YvfgLiA^@{RoBs>a^BXy+H(~= zG`v6GzOk9fOS>b@r5g`Dek2!jSJzPCKzXnbrcV;K4%jcEIQ(-vFGh<0Jd80TC8cbT@?(zv zSm1aW&3utj2afn9YnSclj95-rCEAwPl|fRzbjepV^Z1DtIow&LSqz#4jTjHEbw_h3 z_s<+N28&Fc^tst@sj>&8o4S?o$OqC4hl||k^^Uj3^Y%UF$AV&T3SxDC{`KclQkwmu z9=1XOzU>fr>9_-Tq_%^Gl@e?E62Kg}{b+4paCDtMlX>cQCYvH%xlOYoMwh)S`s6_M z@DN;7YgL12E^>CCQ9hJ{=#NssrSAymdrxb_Fzg+#@JT1}eBH(q-d#thH)od8FUiV` zBNnStIHJW478o7X6Zav~KU3LvqUUN9vN<#YIE^vqQGFiA6!dD#laMus=@zl{ODP;US@GwtbuvtwaM;i^Hv-eux zyMEFjJCo>sU|KZpFd7ZWlk4$;klQ`A{u~u8CL?qXLv?Vxtlaw)Q3|pwr9MRLFYEA$ z={M7?J)b}hoyKhIVG5$y9XIY&$)c8}A^Fm)C!R#BtY#1I=t_9MovY92U%Sf#2kSX` zpki0{xdx5Yuo|<`?sWSo^J&nQcpzCJsE21cWA(}<3uPozxL8Yo`Ij&1FWJxtbD%gx z$*Ac#r_d~9SOY5IQ#OXz=~Ce&pXM>hS|l{H80%VOUMKk>kqF`Mv&b069HSC0jA zFki}M4PYHA7Bmn37A2&wCm}!dc0>_?(2-7pUtQ-8_<%|>Z8dG!z>E0);pzRR3+&7=?D$01jrkC`G zB|+W{U8|3k!?EAc17bluwPpJE*JPfZo+|+q{o= zj(sy{iA!$4rUUt@wXfqKl*YRx0djVj^K4OGVP^}6z)I=GQ{?&`3$9`+*>cO54D6Ih zfAdaA0G_sNagALRz4kPr^b$)gppc?KAr+e->N>}Mo&F0fn42`xpC-so)3)`_ znP(sr0($+6gf`Cx5b%7Sxf=b*+lZ&)Sxj?NZsnR;5GbrA471!xDTjVmsekLU;n2XBkAGU^Cl(%t54a19>$B%-p*wx|Fsvd6WAq!hJhOkeuso^;eVt&}DQLw?R-DI<-sxtkaJusv z&>P)z%wBjj$=xOLi6)Qp4AI300}D??AN1X2XxTgp<%9pxl8_ByoASk@!{v-WWegJf#6YK{Z^dsGh(|!mM2?cn zBcRS4UVSGpWu?BHGh+SG^+B#Dk>U;kvC;Wmn>>im8Tqh5W%jr2F}$n_HZaG@>K^qa z)ov(ERvp^N@n}i|xg}dkPP{Qxid#olQlp$hU~Rg(1@m+TF|sw5ww2c}}OWF7G{e>KW~fF%-7h=JxOBsNf*(Nlu) z0*>ij@XZom4BQ69_;{kq&s`kO#}#}{RsB|28vk?yjm2sZ zb%Ss?g4J>yhcSi#l=j2Soep_^Vw*ZA?FxG-A^!@Fv^AT0DfUhrGCsNTwZWz~((D$a zuCyzrMU8B8nh+p~Q|8K;a)3Z!H(VnJc-7$R7y2*#m&4+DHC+Mep#X8c+tkzlVRR zabhz70|0ME{oJytk3*#w7zyE2OPP{h*TMN}jU+ZccIPCnab3F_paQ!I605&S(M;Iz*JSwycfKOd-|S8z zxEF7)_-zg#P|?GED# z%Cg6&FTU|mBw+>7Zo{}7gTrG*`T@u#5#O)!W1`Oc41fsg$?|z+wD6w)VZdxli$m|1 z9i|GJ>ACZ&Ha}k2Wyic2m*MGMe-bfIwk{xp%mM{s@pAcqs^+uY@NM!nz(w!!DNJ?Y zgrizu|3Wu$`W2=;dakzNT~N?hz8Gkz^$sO?NL6t%2(uHoR&hzj6(c|1_K-MFspz6{ zIh1D#Aq|S0somU!-13-N0Rz$BfVA`y(9D-m8l8Zk>3L25D#kp!K=Q|9vJi^?B%`-T znLGf2t~5O7y~ThsHqBDaX%Br)Po*&?x;v)tOG-o8%K7=B+n)6nAjh75{Lz8YH38}) zELjES+SyPh6)wxLebkd^fm)yt9V5N+LQx!6V%8tt z4xxJZ=BWWSY*JBL(VQfuxYrs)keCh47?%cK+Oyw;4B%{ytM^>URonKTdfl6}ECRZ) z3V3MbR2*zrGCw^{|4Fk#86ibHvSC~%yJQfO+ON-ngntQjXDAf&FcD5!95~;c{;D_I zxYA*@9Tc-)8;N=W+M(9F9&vXNiptg~BG~E?Q_ZV0on3KVx^h1b4T8P3YTavX&Gc&z z3GsZDv=VAx#T@!ZXaAm#W14!lkkH9RshLZ!iC*la*j6Ja3Yo!m)*u z9Jmnx4&aeR(Kt>bfzvIH^KTe;#x2Hv-9VZ4rBam~-BsBQW5OB+ zK&cspKBK$S2e~N-^KFl06|X&kOYzQOL0IGoab7BaO;O?)lSpC zIBWEvc%sWm&FRVE^Oz$wR%)|^178{|W_6h8=arshzi0uQH+8lpv^W`pq>;y%O>=pU z<5S6*R)PJQPaP;-54sy!cWqyqetC3td9ntg_TJUCOWaO$X0KWNzF^d%3(;m!)s zRa4<0TW7Y#N9v$!Jsx-{*37&xntd?x|f-yz10PGRtn6!6i z9gqTf=oRrRE?>-aNlACHFHJ|~f1CZyy0HnpKA07cxt3)|{L^S3=@ zDI;KaG8jCRWVFfxfC>=UEiJ}m5i+=EQ~y_;fJcx4PC)EzHRd|8Ah^xb;Bnj#;?`89mk$0##a0#R4&qv5@1M1xM9J{ZQ&r9w7c- zloFm0a^`<0m;<4L-%J{l*l$pPmPC>6xIr@)=k{?OEKazVoJ8!=OCzwj%U1yEc@KqVD;w(MJV%m^w{!zlXu8|?Q-SR6{IzpIg#Pe8s+E_vu65O3Rd ze=_@N0{{YHXP!z1)6;3{G$$@mmaelrU|#DGhf0FZ&E=47O<>Ud3+3x#^nP#1ttVp~ ztUz?rAQ1{86Z_yT`SeTYs2jf~1d*0pn(;WF93hqZDmrYm!fZ{;korFF$gg;2iQ=jL z12D_VF8nxJ@pwy|x_$G>DWQo)+TIUBX@4v+xW`K&*a2jzx$xnN9wScd8{~ zRN&+xe^!9<-1x3r-oGYqLcV&!nU{w?xpbVwyB{omKs6yYLQ3fogy))x_yzdN>I&+J zIzh;$JA5#{*qiclg@;d|z8vV%udt7b6$iyXA8JJKkw*h+4;L0fXGdsGLJgg$Ac@xT zL_i`HD0^gzAr5G77PICMItJz4($LM&mf}gFSsDcY=Iy?bySe@xrPPEL@*lZ@9{qVl zUd4ziA?+xaXEGcM&}|!wkRW|c1M8L1H$j#Neh2Eq2$edsM$4>xe>llt0raOJz-`{! z^~vxHj+_Dqg{R5H@)aO)34zYClIebyz7!1UDBJU}9H|YQ_ey^js{)AnN$Q}syeHOk?MS~ZFQTdSV?D~bwH}N-00&F zeQ%93hk=f?OMMOub3=O1=0St(XyJdh6aO6T#7V?#r5LjV2kJn@JdtzvAT{Y>sKAW~?fjX;}a7oqJiEK%dmZOKYHbw8?i z#1Hw9Mg8YH#;gM9P|~Pp4&qZTR$7WLiH9o~bZKG^lp5K9VRwrp{-!O7l} z>Z~+#jxJBRzxpm*2gWQX0ksSHRf{N6=Ckt(R7|dnzt3q(qi-829eJs9b#%QjIkqf( za1vDI?54wr)19x#;^P<1oke4&FRO>u0%I#6UbfIZbI9n~DsGJ1*0mC1sQ4(|`z@Tf zI#ttUF@<+jxfdwl7l#J#-iDn=l?>$*nA;as$bTGFMJ!)3ZoH<(X1rKIQzW z3zDk(nDnM62Z{vL#SpO8vsPfOO^;axInzqSvl66DPtgNNUX%wa;qf~7cGeDm1_k?U#ZPKRU)yhhX@9sA$k&&ll%{wOm^SEAhGI?T z(vyQ&OkECr-Fj-`0jx_S+$EhF82_5icnxTD!KBVZN$pT3DL(n8Rrh+tn%;_cNeh$N z8@`-=pu*Qb!xdn8Cn@_`W-gFKXX2(iZjVEmqQAhoN2*Q^mL;(-V)`S?E2^A;?(a;; z&wJ5gIJXi86heo#F2{Tm9llU%@JMk3frHE0wxn6A>y-e^=U zyTDb1=BIYnOeqm}t$aOF>xi}On9UJS{Hp=}#f~O`0&lkb;WZpvQ{YK2vNTshKQhX% z-T^9t8;5v8n70(3NjKjDJOxnVIR)B}W>_IS9za|2Fwt%ELpd1s=rGI5Q7x__W)68o zCXdaBgJ+lJ39RjwX3a6MDEcl*wlbjRs&#;qrxeQE>1*oD@8mAY83;xodcJ#|38a@m z>K^xW0%X9bd^W<4K@xaKhtbjA&n5@bH`~??HG)(c+@qvVnerm2Kn9E72O7w+r0dvg z2~6zeGht198LLE#>15WU2QR`}-ymCFI2b25r}i`ixJd;8COfJ}EbXMl5_x6+BV~Kn zl=>!1F|K*EnQn^a?i6USUmF`nb{>`kRcaZT@3!^5MMSG`kq}MKc}fiinh^sbxfPH{ zLvxHPzdj&dGyT!uQcI>0CtkRT^Oi%85o|v!-o4qfXr;-4S7DpHSew1f5C*sI;6+98 zcvJeT=DzT<-L1xf7H+_7tgPRKV3iw<7K7yU zG0Z6D9^&Hfk2Th40&8-5hZ2t~wQ$>K4OEXFHH`ntV4f0-1VtI9e!chfiE%N@3vwPL zVKPZ53RHh;bD$OAMaZe{+6`uFNb=_Zb@}`WAai4T0*4?ez;$A9;%*=X8q+=jgE0a0 zT&yOKPwnm0`A3lO1)AK_K}|0@2y}F%P#7xu19d>DDS4;Qce$t6_nusWg^0-H*8&Bx@;4@)E7G zZnGX{qy7_IcuZi%cQB|4 zK-J0!=C5LuCO|=QA-n7#8S~nYj==fiKi#(maeKmSy$0W(<eGuYy6Y$&u9M)5%?wj zZBYi#@M>Q};E!uO@pL_%fP=v+4m*!|3&=D;TB4JA9-VHqWbW2U2~i z)_b@|c_~qM5q`MC%Wd4*o`cg|S%Hc^YV3jT|9PE1b;e#U;?7%DeV{1gEdBsF|DZ8lODjZ>zbumSg#Ah{0s2VW|n zuEb>-ke2kvx+ot_?V=WLpzUI_y*1Esu8z$tu zaB`~b!ZwyUP+1&vZ+T$)>+1nR0FBTvqUtNRGv)>uP_)#iyXB{#Jyh8O8c@kp(}B!z zTyO2aW;KQDNq|*4>WyC;vpM?Nd~WlGL{juw_tRrXZXjcc6+hWao-oUb{QzcRQTCt^ z))SQctDtr}y6E!PSpa`k*ndSTQ<7q7S1&fQKev&Xq}XbF1pW!a&i*PvL{NUO6ywg# zS+(&P2&=w-_2)1HO=J)y9T*cmrt*{ECSi`s0NZ5sUFnt|z|XF<%b$O5^LrBe>oVs- z90Kfvfn?X)KWd5=PMp?j3(T>U=Uhrx@wM#*V45+oDY`9G?MX>oYc!aYgLryEZ0~;t zxWBsH!WTbEmU@BT>%Twu9(U_Exq*jsB^%fMad8Stb+e3=cHCHygQyJ%??6p5LXq%2 zNE=M1v;*+PT*rC#+OJVzf7!k(#JI^lBT$oFI#NIPhsWcF z7sqnV-;jiU_^%e_Ur&a6Wx)0zR$r+JruXyDrw@^k7?*h!!_x|;*KX~ugT~o0_On{i z=0WMfQr10Uw-@;WI2wk8d=HD#?HDT1@4(Gv;Xr3lt(Zpu-oFUwJ!uFDLVq)?-yRsx z%Y_nHJYZE|PyWdce|tOd-UZvQQv4!W08#&+H|Vzqk`M*crSe^xeii@883o7r1&rQf)O ze|%htPdGUJ8%@H%?~^6}5Y8l$5^$K%e9n{cf7p+|{iBH@c*q$0hN6*wyVl_T`inrN zhpmF8)BO9b!6T5t4Jd!Ia#E%F+a-V7?B7=K|F@L@GOL%g%k1~;`A;h---Vm&*c$u- zrhI=ho_}~dPX>5MnTkmb%l~BGmo&h>yP$>oafc85&yV)6KX~265x)Ox+`nzY{~Gsy zvlm`M)W0o2Yb!C;t^(H`2bB*-W>;zsz{jo{s? zxd>5E91~Cz-2Qv_;3532l1v0Nh;#i)a-?kAfNs2-bn9mQ?*{ez=_3C=Bk)pypzT}M z{#W<(-yHV0G=_h+?J9V;2!HB7^-O>JZ!c<)+U1{U8U4N3Ddxe)UabKV?&9JBmNK!9 zvQENBH~v-8$*Xu7RiQ1KV7W`O4ej6qz3$?e;tza$S-+7(;DJB0Zs2;D+T&Gds>kUG z4iTB{O#PB--UPEsCw&S|M)~8`y@;-xG%a@+Y0VR1WHQ7+at|q&$Z9v2ApG0i;-6iD zOn?&@_;F&NXkK$wZB$WAIQX#KREDj8Jufp`cK|9D+_cXwLDR3&p6POuk1vz-=SP2A zsTg%VFb?je=R0f^o6~5{Gc8oQ7uZJpS2I8WWBT)RV8uv5>LMs4zZm$bbmC&?mkgP${6YwlK+c;ank1Iw%#P9$R`Du%zrFqd{`k$pxQG5xQe;$>nOEHzOL-sE$%g}{8 z9=xjqU=>!lqd59%Jv?w{e?XO|x)hQnqt7w8Jy5FwXTQvC_sMmUE)%VT({!L#KwHNR z+$ou+_V07`4j8y20MoXdk_i%tS)AsgjmMk=Zal1a1H)fyd#X8*Xv0YD!T4qXAy|S_ z4H%S6uP)=xPH_gxu?{6UQA6L0RBvjIHeXKHO66cRfg6=ss2?d zrN?^`c!60lt1ZCNmf@!n3mtrP1xO2*16{x}EZuQ~+G_82kPAMHv#U+m+;iOz9<_{MAv5RusGU9@oik4N4_(ZCka zmf;fs9ODPAvAv#K4gUChl?RWz5=6JI-H$p240V)#u;`#=Ym(k0%nL%oIG|ZF0%!aD zoTWUW)-fi$j|0}$o>mN30(n^(Kb)kiF$zfN`qMkXDI*ss=(vpnhHaYZ#ytbRzmM_) z?G}dAWnrYmynU!%qhhSLC6FBfDZorB+3lBygA!V1>&#@yDdm*_eoq}M( z^w{4a?-Ve-s9%XhZ%m>p-w+!0Byxn%&`tn!GxeLx&^g~A(!Cb;Q6hVRox9djTlvryLBz9=i0x8O8R6rQ}*3(k3v4HFjElm}<>lg@0SL?r^RGd<_;P zc3@%*&|Z6cu`Pz>11s-~w4*})TVN3MGY@q1|6}hh!?N1D?oqmt1_c#Rq{A&GAV^Cp zAl)J$(v5V93W$OdQUW5~-Jyt-gmi~Wr*w1X0)5{7{LeYpbv~XC?>DzwxYxbbZ_OBU zj4}6L6#;ryd1^2*TAcY)`Oc;3K}t8YwnC!5OEiNsgNZCnr3-J_Xph%HF+V+Hq4N^= zn}pL=WJV{TAtiS;NQU^dYtLzZ`d|mf0{W8+owgdXZ<)(4wbKkDEh^CC> zX)jvFrn+zfCH#){{_PjdQt<_EuC%*A zQ+j%zdT&hD8fms)n!y%J+Ij{S!kJDr(fwN`3%YQ&z6v^c=5U+>k1-ncJgb>SGiPrl zPo(ImVhcFYu&?^R@!-FGwCC3RA=Xp28wen}j#_TJm%VIf4Bqb?y}0^Hrcj2dy2GuD z*K+WBlQT9+#e=!_s;)H8t1#{)yNQ5BLmPuYfF$eF3)s9(`22|H~&rxt|w zD-ccZR_j7Sf+A#_gSN@}@!Q=|!`SmKh?`dvAFjURgKa|HSqR^b2;^Md{J!;JR5_72jMa{pwD0KR_r5(g52Bj)CH88KBL zMIL5YbO2fTW+@H#quRZhHl4dY%Rv4KWV5MKa{z>0)7Gm}T6Hb@x?Wbv z5v$&#+`JOr)2W&RV(K+Il2C#$mx;~je9L3sOvT2OR@gW3=`2p% z6G9!UChG3jw#fN_hv$~x?%Oo(xZIZ&bvkT@81*VS_Oo2+W2-VXUl2ldeUGi5ax>or z?3kr;bWLzEReYB|%xZho^X-5$?Nn~ju~NVPEv+vcJK*l{;+q6Nvt?2Bir}181x)&y z1?Cd{*K4KXJ~m=#Wy1?l;MC<`1HzjgPtExn-|X1$T(!F&l4FzX_`gx~CW;b(HHWIf zB!~~ndh!hF27mId-1^aZKN!98dlc7voC%kA4IE|{VW0xJ#tx>h~Y*Ybiprl+>j zH@_w;^s?Sd^5Hny|LUnhHw*&>((pk@`LgNiAbfLLk~_AY>k>*JCvQ#^T3OK1 zCf^752}|ql5Fp%$MExmWbL%>}el5ki=l&;dJ1fiSEq3t(eRyAiIUA2a+k~44vWu2# zAL2le$JGF%(Mzb9Z=Y3Jfm2*#94LLu=g`P+UUc!y-cT+e7fEoN?T6C3&MfOTNVXh) zRVU4_g3(#C5x(A?fprL>3|V!wh1$9O(LPu#p~N_NsvFepw`X~B3yua_`>JdE-Bj(* z!lzdIvc}5)giqp7fU}mc|3uFhqDirD7A$VbcGLRfVXRrlxg~(NlEiq64Gd0YTopB# z-_hOT7RGtG_*$RiJh|LnzZU<4ExLS7mHMY;ucq$Rh{gVTwuQ*Zqn}@Pq?7~FeX!@% zJ)j1$@n{*wU0!e8%JP6@gV~ChU`F7cYGNK%L-SFfcil|Zyb&p%UMrBfh$yr1PC0Y} zOYX-Uqh+llIEUTwBjiy``c*fzz;SQ39LCr6@RtTgOnm~nvnqMjh|5LRU}3AO#qHxl z^Gj)(c-Y?Q__)GdT;b$~Wj})0up(0?ar1a%*NRIz@vIl2 zDm07%Go{_&HJAmNGZVXnxBx4HLH`F+f(I!MUC-}4Iv!!w&M5Lxa+i+U&2IS(Mbehr z+k+3$X9+o6K;QQ&yv^lO&U(q=h!{o7!s_$v$SfzuL@_)DjAQcjXcAnfkwLER>I+gzDMGGs!Qx6~?;NTnHJ}Z6`#W2>#!bf2MCa3KW1)7LG+2*SE ziTl#6-hGgg5z3B>;CCvG-Q1A6F_WQr)&t3Is+w|J9C1r{scUnhi62oqp49*aQc+!!be?oh0QV|Db@v~Ev7m^r(e|>b1H^JH7>J?x zu47o1VVi=ouOiSXdw9j&zG1I+@Oj5qXKs@7Ruj&I1S4fuA%q^y(?ey>?Vu@&rs3Rd zbQXR9-Cdh#m;{k<@7(BH1`q?Z#Cfc@NCgjD`@gKwie*dN8%gvZwY_El#O{LnU!|{I zdQ#-0MD=S=`w2+OjMs;;v@xFXDzz^h|GedtVHA$k z5!$(;S&>!d*%!_lFb;!65cpu)#C*ja?8mw?RBEs)^Zv#uB^a8Lv3B5wkhk1>^Uq(g za?r5I7b$BO$kgW_62Zx&JUlYXH7d?~tb7})QyG+0pa*fQ&8#p-yJw)JhB3n?C)kkSy~ zrb4#k_K8PwVvP|It5xvDipRTtC}{JzUof@c$DK@bO8Re<;y;(9&;pU$%j0XZrBaj+ zt1@uN`&OGkPfy+~f5R5Ij6;*vS zL~P`uyLF{Xoh2e%&bc}`Q|$0|!KxIrD)pY}k!|d2QvA_9U7HtMz=A(?c zjZ`Obd4oz#LP;@bSu(6C(Dyp-p0PV zBt*$ZdY*R2)N+)@)i+Qa9eP_0W~P%#sIY)hFDvSgb_0>MyqiV*Ct+SrbIJ^mqgty| z%**Htx8zmX9nEmC*0uPjF_J<=V}5y@frZnSW5N;d#s-r&|Apg2Z7&TrF+rDc+Xg~w z?gcmhCqRqvm2%@y+vT<>IXY}(o<4wlM!Dzd39>Q-^LeSguUtl>p=&3_Fqjf_Qme*?6`#_>o^HYm1MyG}@UQEd_0lh>2vem3MeB^&1P7r+Gb|Ya=rJN&kA@OpU;nkZex=YhHpy#_O)&*aD!j0o<$kJU&??*%>66T8@~%Xh z-vA>p-!lY2Fw8L5Tv&4-fMm1?ZK&y5-O%|jqNGw%zxk-r(UVgA(xSD5LLNfa+w zyQUm4mS2uZt+;e0;wri?BV{?Lp4y?SU3wq<HPVaVZ7Rj7Vi8!BGO2RNzUQnBxs^=^n}O-ojp0-Nj4tHf>i3LG)Z@>*4o)1Wz?7*MuS8CPETNB6$r%60EdDa<)ha&R^QSUG` zs<3T%pX_*>u1$WL0n085bxlotx>OziWBRG#lTCOb>v7GkttN zm>kdT{s8$x>r-G@&*RRao&YJu3ZNVzZkQ{4z`qRm=f7puOYpy}2gr-s`E)+b*8zW_ z`3YuqN_3{(CB5`ot)rvRK6`wv>*oNuMeEv(6p!I0QbblCJA)I>%Q*kdy%(;usP z?*lLF$Um^|c^X^V>c$uREU{1i=LDM(26mW0+2fwCn@dAIb5>aZjDD*IIf1pj@IoF! zy}L_}fmA9PwihlS9Y!)MF`C2rsH+-nHdy#Zl1ve&@2 z+z(zFYJ=7h+o`?2k^E8M43nfs#!%inAgmU}L~6emKGrYh%X=HxxIBM1QmF~hasYTf z&OX*zzM-Ee`rdcVF~l*q8XAyx#C}Gzh(bg6JF|Ck2p{Xd5UF(lJ#Itdx&uM}@ixvX0kd|m5WU4k zi)C!+vie3l%WHE}8BeD_)Dk|F)YK1!l;zJ(iVD>`FzdbAZk)C1aMDm`&&mr{WX;AQ z+x>RNm>w7G_*L(OP*1ac(tvYJ<-4Y%@0PDB*DW!NK=-;JYFyE&z}r_@7_D%a^gV)d zO;vr7DCA;S;tJ*A;|4;09uSUI4gt{@o$vU@@#@q}Ljx)yt4`MPY~CG?T7=Gh5s9v# za-M;V=`!(jgNrFw4gcf`LZ1^vGgp34v(?WH)lwu-*Pbe~JzNlZ1XkSK^6UkYme+cR zUsr|(%G+^>sJiK0DvM*^DBMT#km=+0LXz}HzS?@pya&9_)Brf=nU@@yS9IEY>dEWP zAcMT#=Lk)v;8OaZQGyc-@c@sruBbRm1kvrpp5l2q(EgI8tN;mhx62? ze_nA^r5gxdKb^yDp@)t})X6U|aDR>0CHmB>n{`_l{3(twd8}RCE-d|Ze=T>eFcn<-YS^F zRMrHs1jcU7j7Ttd@+N)v4~%G)!s>y(X@Jo$mk4c$g_p`g0-Pb<#hA1)) z^HFy8IU-LcG*;OdJ^n~(LjI28E(|-IZ??Upy)E)4ia~D048paq{p;&-;U#Ttkaiy>#1@HE3`#X0?<{@T#`HK)I@Tg zg!{VnX!+pG@J}>q^NJ(Y5|w^e#9Y#`XEV?Hs13Zt`Ai9uwWicPdY!%leUq9)2Iixx zilQ9P5HLFx3_hjDDAEIRpz|&MwU<}9kjcoYB$l)E^uBKWCwK#_f#6NbsqMInD3NvX z7xvv?qQWkyM~!**-ljfiy+LfoOv8o0k-sXDQOrqBSAcwp4)!moh!Eg~h z_z)x!V-6~G8{X&(()5QjYHvit5CCY-g^5#Be743mb9%d{P)_R+CY@Q8t1O4=9ODuo zlr`CdozdKnVv=78vR=RYi4AJq^qhJ?+#i!GBs%1}c)0?{^cx`By6b*@;`eSoKA!qm z-)kGpzQAe(CEU~pspl}Hn3uT_@326B*5T)1J1l@(2X5~=b&ghEK~H6Ef30fUa@rnK z%~t@OwUMbD3hF%{AFO+Rf5lNRaMA-eAoE;%;|=kwQN%WgeA6TjdMw|W9$vXI#oo4d z4Fff{{Y)o8Fe<;gQ4V%I-|`OACk>i}|K<_|$haZKCkhEDAvs>dGyJb;9 zg+Dh_8T1{^Oz)oQuCx| z$BbYz`tA)f4s3MH!Zh4r2F|3YYhQ!N6MIXt1=q9<>A~l|9WY>=9pry^bt9k1s@kX^ zp-=PCfx4}6#rBlS()zjyGUN?&MbN&zAffFL-6p;Zm!rQPPpu3lKCAB8yHgFqqgS46 zLN{K6_I=FYE-M~Pv2hg}RkORLmqjaqs5T)AWbP{s>TR_SBL45Izo9d`2eG&&xO z3MJQgi#d9)Pj$yzd432#pdjQZ1ldJ_FOC+NUYVr3rQZ`U9=x%C&7osK^W^v_dH+&N zI*5xf!B0^~jJddGbv4tA$-s3wLVUIf3r95Z2@Z^~i@PSWYTLxo0-h2v8}O~K>b52I zlKO5*80Dkw`4>2eKW4)d|4>oyHvTH~W~L$Jc`nsDNSXR!YwnDPW_bmJ6VXq0&Sk#M zIe2b)Nn`dR=?+CDr$<^afqEn^dD?6BQ4!~*9eumKfqf5#1)Io^-Z@?rvs?0;aeYLG z7RvQ>D5yB1qOJ!2;E1B25&NKEtow-aVPBJ=AH*l@dQ7KIG>R;O5p_$_D#J{=P+jXJ zk#PY}T;MzUqWK-h4gnfJtSvqNUtU+vS>dN7Fn9TsCd~UHqz;`#Y=Z*-F}Ga-Ag0ur zTl%A5bTbggMC%aa9jzX?&>WPdI|UMoD__KmWY<#p6$Un3+FjsmDDK_kwd^*sd1>u; z6D`$HDPDN5&mu%ZCE^&&i%%~1q$&n4EISGkoRchm#6Rq+^127^&yCDp+3-ah_hh@YKyY2SKhgM^0HoP5XKz(^Yx*Qo9eVBb+_xR;DL z$h?XNOqW&_l>M;!+WL#JLhYL);OI!&)hiwu*qw+aYG`xvpkXR!l(QN z#-FE8pq64_OMd2GPaxb14TrjQduw)y9(f*guW^hWlx~pUEu$m1&+kIXQWlB#ZCpM_?rEGDgbzHu) zf$CV57?0P$7Mc{Qr=NQc`oGtgJuxKq5&cbyGp)om2oD%PQ!Q%-o=M$=lJ*NfTrx(6 zK9ax)ar)2r;w(65BWfe0BDZ!Y{V|is@o~!x-k|5gZW=D7kMEjS9c=`{ucRp@%yuTM zdXX6=Uw`7Xd08$^+4d7A6**#$lUaL(S29xmm#?>-Zk=(b7SnHNuqbuG*Z@;4OFcyJ zdGp41d$7906Q`fU7oVC*?ue&=m%|tbVJZ23W|LC631t-?vR=mzsv%0|&l=2)N@C2H z;GH@tTb*!*p(feFE?B_)&@njH2jK;tct+r;jqfX%Hg@_c3F1zy|Mpl=*!@1<^5wXL z;fh)FzaJK=H(KLV^1MvrH1e=0(h|jH!(P^Dbsv}PYg`=Qigr+^UCWa~h4V|N3#XhbcghhskyPPVQ1PhbG-qp9f(*^`%yU()%u&yaq)c(|Bj`3@|MC+DF zo~IdhAWoFdPToBV&i5l%+Dw1M(Yi1FgHMQY=aT&1H;Es<=~lnh!#j1euX6CncR-1{ z)~s0DmSp=I+ylyFB^Ro0e-A-)&jF^dnY82V;R(iIh(BgvXQ(a&CC?D_7zz~?5=Q9w zDXIBgOJl{_L;(~o0s|8MVWm%g8{J>oKqPveT+h07KK41ws(~q1=@DepQu}E+eBto2 zQ07nK8N6sjw4`Q((5L-+_pF;j%Z#ybUe^UyLX~f!(XbocIeUnD1nn_=@it~C{WUWk z@rxZUuwKtLf$50x*=0jYJHDl7C>TL+MVUYN1(^0|&xt+JevXT)whWfUJbOcdnlj7} z!29Ix$8?+MP^E9;+)fc|@f+s_Z&xZA0Q`(TpyX6_wD~ z+>j^yWCYpurBiCDrJ^|R+YaTm5g6XK$|k6ed2n8g@twWwBlj{9Tf0RYd|EH9Djn|{ zXQ^C9BbM>^xlBI4dM{5whdDE3`e4ElyiFAHBo#jp)&MKxomoV2D@D_m{C1oZT9Vf2 z-D3JFEG$%lW9ps~<@=5}2oHQGlo}w7H45Uj5#-o zKxTu8ZDXwg8vbxAdYO=1Ev3uB@W5DpT{KmJXr4znFA zhZG!F!e<9ZF7D_NDI>OX_|uW!4zLsK?uExA8Q}Cc(Y0aR6__T6wkboEcJh6pDKE-CQ`x1?)0a($ zR6zji?=>PH(n^Y|ayL9BtG(jSlM3>!2P@QN;JuZ(Zp>&gW0%XDBz677OUM-)P~vpM zpH5(Zc6HX~Egts?K>EXR0uGi_p94ybTS$8nclkyvf9lIM(HF?-uuus?_W{ z$nmp&Ty7eN{_krpltmGf;G1`_{QJBA-1Gn3v_EGK3E^jd^uWEo+)0H`a~jqEZ~yoI z;m4a9Q85UIK6V!TfBuQJYd(pe{`VvP-=D$XyZpa5>OaTw?=AWJvj6wV{NEe(|EC+J z^xcK+|BN5uDri3$Ppmu7MJvg5avt>zyGPA9i$w|d*u0?p*RyRU@D;jDW8y%S&CER; zyA(L?w3k$B@>9D-J^9w(xCYBAsdoX)KCS)#{H#e(eV#+quth^^c!tB>8DoBHR?)6d zg6pk+lPUzb!Tf)24{d7U(~*cy#yAMko8cHXn4X0_QDqEb9&)J{NB{Lsin3f);&c>o zd+^_XJA*U%5WDE9;&qzsKNsa*}-M0u9}b#!s) z=uW6uRsdnWv^?{kb1XF2Fi zrStbXd_-Xy%<~cTb>_eR5masONhhN{*8=?i^{tUxze^_CIoTPI^Y;y>Ic)Bf$Yg+QA@ZSuET-V3DC?|qW&b?3n z=Z5{c{l;(MMq75z4kDNAf%B4@x3$t`bw!duqzd24e7HCRagc)5b^}^%ksSETkN%TR z1E7*7xbZCt#nPi7|DV^mlLoWD8#xIEs3g7B0K8f^soK*1v zC>V0wzIz+9BLFX0fs2;5N}7Pp_$_x(s4s)fSOF?J)=fJJ6+)$(dARHbwWB;gyNX!V zGBr!g`>Ok%jz@9mm||jLP8CL*C7btUrfS@v9C@uetXb*!xR<_BeD-a6p#MI}Q}PD*W#mI8gFykoVwdnt4OatK)&yHL2DYOMv%rVJ_pN!ebtg^LBTKOyoiA5|~k6u_w)RuTGA%ET68I`vZy`tgR z>3dBKg;oexlN|2k>FZ8+0WI)#En^R>$?0*TV?je`%T6n!6aY za=B6T>c}hWtyM!FZ3`amW}?8hE?gh^o!crTQZgvSuACXgByCqI=*28=|MI@Z7W88I z4y)CdZHXP>7Ch=3ebOH%r9`|6k3yRnRLnl`!H<3^O*%+b9VRC0{8a`QYsRq6NlSYB z#y{%eet&PC0NS)T`j-=h7KL2Sl(QR%j)A;oUa|=e=GqbFF;1YHO1cB zOGA8*Ixg-YVB!bUHnTb`6X}=dfo|daPQ5@yd@{}TgdqE)o7^J5wOomLxjy6Qv-Jz- zr_wb=j+A~!u!a*QXk_B=3n>opnbuS2lt+$D@kvs+=bnjN2MNWN*lOV2~{`ToXx}|jPUgAlosD{WCzuUzD^s$bUBA9jpEDs zysYTa>MapNu2}le1B|sihZE{)aUv>7>}k0Sc^ZBbBbns{GYb}{E2lfBM zRhGRU=V*i;r<5pODA#EIlE!mX^`1a)n!u5PZ08N(TYQx_NpCxkOav(@y~6WrXDfLJA|wl)Eo`i$BIQQxNBYZb3@iXE9OXWQ z2|+fD-1%%L>uulNX}@w4W9oT=;fUhIYAy{;7 zg9T4{`c;^+mw*`QO8g91o}Y$0W;?Wb`EvQ{wu{8@6Qc9?I2{?W~S;M)3<$?C6i{zUHFs4 zhOSOZYfGH4SP|rXCWsqNUh-tW`LkOLZjYnxoes3q4_FUH@p5`lC-_DdS6@ZZei*pV z%YYJdOSy!UAn_LFG3GEBdCs9N85620k}ZK`CD9cUs0`c(o?aG%Ui4`_$m^EDybL!X z=P7}(`!+!yQ&nOtaZ19P0t*x3+>^6@?#~kveTO3cY*+l%b!JMsPz^Y08w>W|way-c z6~-0X@giN#Q6=$#D!@9OL2WV&`l&Gzm%#_vRWSCng5d>c%`)sxpjv5xnSk!Fc1m93 zpYo+b0n#R?!KHm@!^6!_mw|H_)ZX%V#S~{N{zRZJV2}@FX3^&NdxPofL-a5RD3KR8 zoD_{yMq*C)$<8AsIZp00<*&#y>%`<@W^PXC=)Qk?X)-TRyh`c}mhEJ5jA8=FYqkKS zBr3B9y;W7qT_BX#IKjBuy85>?4e*D+Hr#XS##QN;`GDNrsO~`f6L6_;Rlhaf{mz8^ zMibw9P~K2D#lZ0Ch4wv@6fo;khmk5lNI+i(h7-ZT!172Le~sLaGP%9aR9yO&>J`dfD9KUqggZz= zU+X1H6J~*bQ^yuZ)}=Q@fwa*j^7*Fi)K#EzX=p-hotJ&FFXQC7~mwOkCpjWrmd zI9Y{abD4za{s2@G_^YPQfLx9sD@))TIqYGxsisd#5&}=6xJ_2G!07i;oO!+4)Z0@C zJA-)g;HpmyjipI3ug_gGZcD$Re5NR*zF6y#SXOBtIh?&VSHZO@Y+)0pMPKjO{YE1pXv<6_=2=Exjd>01t zXek0dtyrCmt%MXXupW8Yq{-n}EFKg?D|z$+YS)9N|BivoOdN>AM;4y}wuy z(_M&V$J^7wJyvg+K@!T0Y>O)d2jW4*5FcDy>IgyBmN7;VKjnRLkPtj-3lp^=7@6M} z!YMgR*ufZane>hx<3|^ae|OuO;e3>V@=VJ18dzwf(0Z(iRn5d$SiTnC&S%Rl|2)0n z1+vejdUT><_G@4OAw(-0S)YB)sUX2!fHM{#s9}+WDXE(kKt`d%j(6NM&L4T>dXy8S?Jr zJ48C=wn+#@W(v!(hQazgm>tphSal`(w!ar13A_l@yoXTz;76IDp58h8Ska2Ec;Y-m ztP0Pqxl0&_@bnHGS|W1Rqb9(v=KxqB95;C1cUL}6_(A}B+d3BU=tC=98b*b8p=@Jm zv}Z9E1C=Tfl~!o&a`H|8#Q8D@#G0JV5tiNtMEO&adv3zCDZe9LsA|GMB^@KoNa*Zz zf&ms`g)PM#6sk(5xMph|MW9X@SI^d*%1PZko=bi$-M0uZRj(jhAc+zW*7WumC}?%P zCI+=ta@Z7BwC-$B^Wcyg4pCU&Au%R|JhY|%Ghc=AOqfag` zCYb7DuQgVku-~|CYUwX}`eL>(Zh}~17^L*NvxuzE0;mN^ugqh&p@`N~FELlsfr3mA zJ|mTQIGQJA{%6@gZzUh&qnW(+sg(%g-ZDNWZ7kc~$r0vkbTI+i&Z7+#o4$0+9n)nNs&Wzc0<{}9a!{7Os(z&LlqfqHNhLy!^9w6L2q_Qp_e+(4` z?s9o?dED@Xckh5`(Q|Tn;^y0Ey8{)j?YB@g^{C3QB-c7dr8LnXlUd`hE=$0=nH ziY&9_{A>omZT!1Dn7F0R5du#$_z0r&lpy<`zS2HkbnSkO?yA7iDVC3iGYTK14(8x% z(TJxbXWyp}Qo)}`g0z8YD;)+&#QVgJP<7>FhbtPF7tL?c{cz)vI zc!4E(O;Y)tu9S5b;S^MPlo9(^110X0pPphlKOY)3f}`0VKi2hMNZ5UC;0Ro7`=^x$ z^>A^t`tZH?5lBXn_gatX_TDctWNo0Haq*zO4Uir=^UA0Qm*L{eKw8#B`S8-&YY_-7 z-r+&8(Pn`+kl)vslDv-gtrg@R-Ur%E7E4SPqcV$MgC8co0*N#QiLA0L;udc!{1*_Y zP)Ph7Pv16uuA3i8JSovW>pgwY&%pfsvWOyKuP}&nS7s#8U4zgj`HR%~=_`LLE%+mx zJmDuh)XM34?dCyLdi88=?hnv7bV`eXzc3g`=5@5C(WGVW(*Ai3OYNZrbXl#AJ-eX! zfR1xR;mQjjGk>L&clG?;s>m|1#cDmQJIP_XHMY7DXZgJKkzuK8z&f>+Z08L-&e)zs zzpNT-iT#AveT)35V{Zv#dv3=<8JkJLmg>n#abxX*POY_s_K{|RNX@?BlP2}8o&|}= zIk%Rhr1&;BqJLvwY|9@^8sj5e-bKfI?$4EzfZdVh2n|<9`y$JU8%Q+xTvl|E#7y?j zEl>k-7DivW(F-F-rKSkCWzZnzLstD32@N8!X?P?0j+7ZKw<y_J8_fD z%W7XzUJHNTK)X$p?1FF1ar}Mh%HKPiJ3O(iUnb<8{J3}Z14s;xjMP{)il1#|GHqol zCB@}v(^S&7qn}i1_sR8FN*#Ud==^Ed?K`67U)lIpWfMeL_H}uc*Qv{>!Jk2wJ}vX zd@7Wb$BG&$XCad?zd-ynQhp+jBLQ`S>7DA(=>31SEX6#y)Hm$7hVt(Y9V$>c_17I1 z^p;wym!%s8Y~SA4c5!w%`6r-s_Q$gtXG?Qh5jS%=y#o{L7oCwU8?wI)!2>*k?0UK- z>?YJ@fHhF(nIHIn_=lM=0D};8LhpmcGbc>68oQpNNZnJp@VA`L!st$@jm&x^U3Xd* z;i8TyF;mw=`A>GPj(W(6a1;`1Tg{cS0}i$i4KQT%dH0Fv?wgTUx7KB7Ac4k8rDn3J zXWJ@YufFwEtX&WGtbyYkPwZ{)+Tb^KAgsZpFgeR<#&1PCUVeK-CSG6gfDGkX`<^(I z3;cQE7zD^bS(B$4!iZ>?^REk*umQ|@J|#-{bK*0L|= zSMoQ-grb{Qzw^uaea;SLo(l3x_~@A4R<#nQQX|Qlqg!!9SAj&&WPe$;HMMyzC+LME zaLQt@+(2w;A;xl1(W_^uQsA-_T9%9b4NL-}P_CcT#eiLbkeMKQbA~T~&#DD1k8&(} z{U+%{S0(?L2O@ zq7qOXo1t8xGHj(vFg>p@&~HlD`1uFLe43kPso+sKLmzj2v6}y;gZ4oBn_BnETLD^P z1qlJGC%U9nEc06lR2=sz?-~bq>hJ{Vnh5k@geOyNFrm>d2 zGS!0JePF{$C$wH)ZQX)sy>>ql^L&x|diOL`Hed1Gyz{bX(DfW4a>RH@Lxc7aGI`oI zRFAQyyIk7E%{AmA8bm`B&Q4I51ktc0@)WYPIH;&%aute4aq1};p-k^8s`e&+(oQ+q zWhbZ9;D6I9`{K0J7hNGX%;w$Iu0MsP-U2LTt;;{wCR05b{ehR^s(C2R4{)3=0-9fw zbO^NxqBFdZuYXpEs&5PXA_K)B=<{dPcptC$H$xxb`Fq#M-L2K)6F zJ-Qdm{phavJQEUin9R-#yYcuvds7pBkr4TKG>o+ZG9OiTDe_Oe-P*-wBo)-v zWi|n)pi*!^PA}CwoeKD}lhyyJqMx`TgrD?&ie+9B=wlv~YeEy+(Dt9IGQ`L0?iqQi znba4g4Fe#}TGdDTu;Ch5##N@4r#}YR#Vi&PV9$}xu_-mEffqouXBw8Y)t_fzgY0%0 z1JYdpmfTws-X$Oraz0AJ(*5%*dC|rRZj7IFpkHdEAIPOT@)b3L???7ibu<>madz)~Sf*PmuAJUqbp-lDhEN{9dQ zT*)!?8E(OL6UaKBwPVR-!KZBbNC-yyRWXV5zlwld)wlfGvhiN8l9CcJxIAd& zX!o6i0!F96NGi$G@^paUyF_BB$?K-c8+m6tm*CDb(S7)GJ&)d5<3ke=BAY!{Zuf8z z43hu@ytCaUK@_c0$b#2^BnQAmoO&M|N)m?o{cQe>xb5nw3F4pSR{LPlY=aiJ;t4%n zjVzTEInLqqf!eP{K{xgkz}=UCN(f4wWkD+$J1) z`P7f;6Ps}%p~l0)#|O?JSa|BfyetVPG25Wdiw}G`dJ^Y>2W}y>l<)7p4Bwqm*HPQCpT?h*5}VT>(06yF;PlYki7Kbn9(uYNV-MljQ)d)2q~ z7q{#NCA$qPUXs<<-91LX{$$Ot$DacCc|@#EDR7L2!6QBXomi1rUd0S`mU8kl7Rgc% zOD^+x4~vv1I#td&eOVfvJCle8&7ul+cGMmO52w$atIVCwqz&Ht}COw`iS)5a61k{guw-3HoIT>PU|&{g38Ld#Tp z8;$d}e-5hQAOR|lBx!x!tB=Z?>uCvI=1?R#D4&OF{&oJlPgyKst3WZb1es#MWA*e8 zyfTLDs0Gq8_f*!0J_WBiy79fJ046h)&Q`Gu0abEZc;_ zGNhJb+acJpN zFSafZm#{gGtE97ivjU7@v=&ijuqG3NZCv&Ur?UT*Yce^tfO(F9`oQ$$VB%y{-bxop zq^V*$e`?9o!f6-aN-EkBNp1CA^XXse#zpJX$=vT)L*5_SNa>~PRul#|PY#&EXD!2C zCcERJ6@%~?#oA2>8Wtxwipt0PrHGc>|)UBwuyYprL*mL8?EspQ)PhW8@soX=O&&g!9xZtpEir z9~Y%z#uDDAj&X`mL$M+OUN)^fuy_-Y>&=IqM#F&cBXzrdeB4dD5Av~$b`sgLy@@h} z>q*zlp@?Bxf}`qWWSo-HB|({zgKW@g$R@cSm7TGA?D?MVI}Vq!TDw0FD{P3py3T(9`v~+<{(@TS~cR z3B4!bkJNU|$2&}9gsPdu!pU3_d~DC(eYBWvOFOyl@DS_s%Utccf5z??l+f^{j7bN) zi;m3T(M*=xPv~i-=sEGo9(m`rJ5Z-Cb*EZ3py>ziqDls3ZqJ9iA#3)T_#8B^sSpm}mmBP=yOcN$pU{ks$<8 z!8(`mYS+>UuY&+@9rA()fbj6|wFW7ry?7i<#pP_$`!L1kzVY*T=iwIeONw>!q@v8` zG24m>B4bjHg=`rJ`yAU$bbI+crkr{zW-V%)VNa(`a$U*FK51 zXwINWcj=lZl37EWFvw>Vxg(8w#K@ai=1tu|xljUAq)(0xDv^p0EFeX=HPygK8EHi* z3&p++A+CCofa2-9*TIBn963S0DtD0lK?=Qm3sv%d!M#1*+wt1Da#J6-6UWSLqixfPzS7$EiYRj0uA(WdQBQ_YO}XKow{i~JOKdxT7gqYU+L3^ zLg1}d&bdsXUC`9bXFrnWvsN%rHJ`8gs9vDE@1={yLo$y}SP~j0)=Ge*c%%FEOJdo& zFoH>$I?G&dLXa^x!}=k%*QL{T?F4v+9E4nJR&8&gGcovKHzdab9#Dr zEeqNgfYE7RB~s?;e>i}jdMn;V+>Q>P@me99;=JE81>0}aeCNt9ib+&2a?ku;0v60x zpy!`9#DhNcn7qY9;Ql@`aHR{zAlL5eyz=Nb+sn+)#YWLr6N^cA##|DDdlN%Tg1!>d zWQYw&kMJzEk#WNgQC=XTx_Ll5TzRWr@O}8|(ZNm`Oe(H8FiFUt1xf+57}Y3W+lJ^x zrQDJ)*$qg;lXe||)6WWWM!{D;%YIpuGCvPuPa#X=k60=4P&AAn>x?-~V!sdsy^DPL zPAmk0si9-|d1#+f2s&+{B~a0F2bTXStHscE2c>k$J(jMZ6wsW7XJQ$;BL;V0#Uk|6 z|F)0tDI|2w(_Ma;x<4IA9WK#D#;Xv^$C0^*Fs+{vo;*!I0a>%<_YYFaCZt*dVEL)X zX&B)NhBdQK>xFL2~5hYn-Dd&6#x)G_@Jgb4T&V5K&v&c$W*!D*vF_m*-4k~fghA(Vqy z(WNXQO9Ax0VBPCY?5ac@Kv|Zol$}8;r}LIkG0u?T#%){WtwEx*Q-7MwMBs63USRAN zhhGMmb2f}=5qLE!%NO^^x1S$srZDEOlsJwgor9NfwRz3HArA`C?LdWLSTW-ytDPSywac2&99xIA;Ct~Eeq=etFPGQAYZ?b@ zGNx?AT2t{ecJznqj!T2zb1N5EVJ-K2o7;DVw^V1}zP=>Xk412PQswI&rSZRh``H%^ z7eu-J#O0he)$VFvJjY%hVPp`G&wpj@=V-XgDx!EJhu6*0Z%E1PPn%V~&sUH`=sHao6#>VBU z<%W9sq&v~{+>V;I;7fI9Ej64TE*{Y=XFcL$J@7d9c3Ja?TJ3F)O1eixP{7G$JPKB$ zhBtkS!OY5=D=iyu?_D4pS?Jx9x?>!eLsnI*mmE_N`$oI-3$N^gk4a{}{F+W`$Gf)( zfkWvc26SUc^yal1?u8n67J~r6c0f zgihG1Cp4iWFhF1aLL5TPyY8H_S!;J+Om6E6n^m(YO;V!kyw2YL#nyYrbJ@4?!P=5V_W02^j>n{d>BFTNxA_n!F=;7nuXetnjDR%)=&Q$M@FJ5h(i&A&WJB5)6; zRB0O@}R)_2AVr%a&MW@o?scNzo1%WVK~a}1?{maqXBaDM|~ z;EX0#_=4N+cmC@Sox=P+>2`%4|CsObyWDhR>p>1U7%0)@Kkh*H`^Nd2$^dQ7T=auM;f|I9vf)U3CIcJB`~*WK+7btQREBjsO$6s;IE+Orc9-P_0BkKyhnr)pNp|hX)A}X0Ff!FQG|LkN&Q|aCSfkX9&9+>9&EH5Id zkzHR3>g!^&LSS0f`*0H4bXnLT1Hqw`n;ky0B$JASs4MEj&a5ifD?bJ=@@mt`k$oob zB({C?b|{_ChT!l2G%U!m_J7GR9Zorri6B47TC41R*6WgxBs`%IO9t}3dB&IdMByPI z+gJ^10WvLzWFN8}Mgf~CmuN>^p$L_0cL3{HY$rrcoUMteIQKt-k4HbKQUbs9j1NDp z7XOMPB;MiYti?G=AithGoxk?=k6=aoxw*;uIG31Dwu2tww>+as1uV>;n}exFf#!c?Z5mjm_a6xTwzsMF=2 z;rPd~5^|ag16m#bE8vQ`sx!8 zBlDii@fY$tipTb$bC#W5rxD5L8eRPCk4|=J+7!}ZL9#h5I)V*C_UOsD(Z}}@m zQew_Q+l%`+Hg5(LM`a+1dM+`p3_+H`t@k5vdPu`Fz4k2dGt6T@Gi#%Gb4rDwLsC*> zIlBxyuA|>9CupR9hhzSc7E$!1kn*|9-lQ8N5#TbY9iS4lu|R+haKmRAPlxC$6ZggC7jqY|=PnG8H${$5!y2+h5PTkMzsVPPJT z`TYnkh0|-e6tg~50cs`3)-+p{O^Pl7e#NJoGMpN3j0QgQUNj(O*pZ}f!eM4KAE|bH z9jVJI9&klsyxxe9w~Pv<&k~OoJE_S4OBBj@^Zv6nCfss{qal;n10; zejY4+C{y?AZNW=n2F>n_QGNUR-yxic>O&7qqT^0;zUMDH_$|$+I2|G@(|14!JPKa& z6~xl~jf&J;9A@~N$hbVa%Hx!dt-sxZ9H49ozx8P00Sa6E5R6mtw^$lU3`+aBT(Qx? zCKV@~jMjY`4O)i)+mUx460IleYe0tk1xbmBB;#Wv8wUn%x|6*xC0%a37XoJU3}8Ea zDKI#raC9dWM9CPGvVH&oCv0^4tweW(*RgZ=(QRJFq>B>2Br+69KnuZm!{j< zSq~MK0w-IiV+?pu2|mTO=0P>n5J-6MFRtH|M-c6?9biIhce9Q)c#QE6k#G?~=S5Ya zMZHXkUIj_;qsL=Y&k3ZM&KBxS`PP%6Dg=9D}$SX<~2OF^0Kh*4 z7D-Plf*AcB6um`9^s>}dei@vJQ1QF9+M4&md!>+i75DzU= zNTwO0J@bT4ZDQJHzB5tDk_x%9wKPqzzueT23Wl$;w=#!@`1awe&JSdNj#Shx@9(T4 zd}9UVD0C`ACVX;PTi7}HQCyi)>9@U+`J!?4-C4Wp6y?V%^BdPZ=3#Q=8uYD8 zM5-0RvdfU4w+ds1as|DS7CMIX-D)tJy$mykm-{_J)0^Z|)1bGH@h}fWqpPJ-3l7 z3|C)w8{nDPz=v~Yr)TzZ2T87hPINaQr{v05S|G8HUljj#$rR#YT<F^YshL7Rcj{c{|PD?}2e_H~=}4V?F(=95dPI{jRttt3u~4dn#4 zAHI2nItoo+?P|I_pD6@7xU}aFKp<~Nf8UapQ7M*8H@Fpt%Je=z zW{zKsLnbsyv2EjJtpuHaI9~|a8)oL=APE4~lXIWr4Q@1@@M|c|V$rBz)KlTn@>|5b z$j?2tz)rz-U@6;>BBdf6Qsmpds*&q&K2P%Lta6D>(LGt3!M`M#LGR4j%K2Ozk4KZ? zoc|#c{mCE+FI%ldwt(IE$X?C&Tnkgkr7J#YsGf^cV2rFW!wH`!={iaLyzrENuQjd1 z4TO*W=tk0yRJVeGLjDei*#>gEm4%6e7$p$;zgQ=niTP$y$<=iIV^`DtnvREW%Jdt( zJPw!dHLJnXK#|1w7OmgqN&?Cdq)6I^XEI=<8DoRaBs?zb>?$X{;4gbU(9N#{h5tR* zKL87{Lh=MUES2ZXE(ark3FFQ zF?Mkjw!O@=%S%%D2+4^A%;zM=$cmTPH|~7`zq~7w;*I-7D$+)!i>h_7TOj4v_WINm z_aC~mev1|jtB{SnmSlFmhn~D;h9fwhHX{x4@OD7wcxfzDc2?%-*t+To)PNNTw{e@< zV0mfNmmO|dwcnY@8M*qGAJ2c5o{-&K7(!(YvIC*H87njE!lhAOV)`{yv|L3_MrH$n z6>jr~ht@bTFz2r95P-Nf+!NeK56M5nO?0ZMa7C~wX~jQA7`zx6Op`V|5WhYr z!CEA3JURB9;)~6A0OYqT0d0MKT_ctxb)ua_?s?ME+z;PCdiC8_^B(p*RvNEa#L`R~ z3@fWJbht1$^a%gJyAq~4fRz(Raofw?Mni2mVhu@Nt+R!#8c81Cn6q$8&&bsq67<AGM9dv3;S{(k;-|z-13^818mzIx3yl2^HfZ3?t)P zw9kj>ve??^wkxQ)6|=CzJ+^3jX7`5QzG1V7u&HvGk?@2ExO(SgFPa3WU;^&`F<=bG zt6=c^0I;{uE^xSOoE01U48L0;K6c(|P(eR?@#6mu!=aUL)At{71;bB$PA9-~m`>^7 z*cxxTyLD=D$Y+|qVr~IW1G(&sQG+`thmVEHq~<4`vU^~(AN01b>+K(OW!h3V^uR4AsT$LIX z>2JB*Yr7Gxt=$fg((d%!Fa5dr#5N{AEJ)c|ZBQ3y<47@@!zu~r%WnWhyPXR}Mf?$z zX%Mm+VB=c5Pl_!q8J{s5M564_f=#wIkRSgi7RJGwTCm_EKUdZgD9JD@PA4;{B#(V+ zs*o70M)rBeu5ut7;gsqy`WdaR!`kXHXB}a#v%VyQAL(bQiWwJ>4j1A&FvBUGapnK? z*1A~te~bc%kjz69y0z=!c%%m6=;-(r92Kk3!P?_mdiE;`VO5n5YUBY~u<2uH%dP zJXRQ8RBVXePXal&Pyo_2FygNO5LyKs@86`sPp~y;aA(5J=)G^VAKL#EAUe$dJwta( zVg7%;-4ysBc1bc$&Ib28n9Rbxf#_cx#vvwC(UO%kg`tms`fVsSNGbfW@crJ_W8%Rf zDMQFg9clt)*SjCN1A1Xkv#q#M( zeZ33Z1_g2c%jzY%^Uie-207oH>}i*Yc;{*y>&ETWD88UO6l4DOX-x2Kip95PCsBc8 z(JLOt{*11Lqwn&=h*y+D#cI%>a+&yG%BMc{>EHHKf3TGJGqc(j8WH8fMH-p*+mM`4 zKe$n6UZgOPG3B}K*b&3P6A7sAVF9SkW9~*tw;_ z425_;zy>82Pgn1}q^_lZyI5VSl`l~(Lb#_L3HFeaU3o+-)A6QpCWKmXe$JYc>}Akr zA6Lki9fJ{J?a)!$Syd{`87R3e-$%oCBhQt|c{Sgww*^#;y#+DnRGSk|qQ(=0(TW>K zk4Fh>uPP3AKAP6&xZi!QKVa+58=wPwoF8HrE6n3A^%QU#@f->AI&duc)XUo*Ib}xc z${ob+VeuWU2OYw~hJXI5j?4aA4b9!#!AYl(Mg}QKuUKBo4Qs#qmNbX0cp~2GGbf1K zisFeT0oj%az-b?|u%xY3we|3`I0iq$#+>`iN;C={rDmxf2-bo%q{a~in*c_DnOP1Z zK|rl>ukXKJFeld13jGX>bPJUeaZy1oV5fP>QOTR;-aF0Y{X`dn}Jg?%|kQT4l_xIrh zRPP&8y6lXkH^f=#8lkCHE<6BeFZ6X%^((X!1lyS*C5d>M>l&yydmdWEh+bAA=@>+h ze^GSh+Iv0rpZ|ahZuGxHXpP$^Q*LuZgIQ--7Ib)s?X{_xya7R2W0EnqRGR=vLMGmt z&`XG1DzgJ`GTc&3Gcb|r?`09^y!WHhF1^!vn5fk2`Tj%D6b}Itd7GS7*OGyBP<*|! zoZ8gT-O|2^@rJAggC|HYY++uXES6Y@yW6eZdgNWECt+3|zIg7aIT(^02p+L2zoY;u z+Sw7sLVsdtq@0Cq*oen_ja?wKfWvY2tLVB7?D4pmoE(GD@~!}%1id$VG6T0Lz7V^w z1bVCcPaLXyceCWAgIefgY|%G$=BYWY{9Dg&Dm-N3liK;69k1+E5Fs+VSGP~?1+W|yFvh9!OnV3gX)6x<@jiCNV5y^{@LMLS(xAiYvZlm9|J$J0$ixeG8l{_ zBf^MzNJ|k($rwz&3stAO{s^howY)aSSLrK~@v)a8GsZe?9Lny35BB&-T5fMd=ir=! z@o9(VCw84U?2eO0)cIV?(;u)=V=|jpgYLs10UbZJGoYozDxHymt=3;L0I)Ds+9}Zc zj0G1D*8Z|~*n;oHrJO@xBcC!U_12{xezt-Hazk0e#6;Ol&)v1+RC7bC4Z$>|R}cPp zpAtWt!~1TG2S%}c=05;;jj*?b2y8Db9y#^r3y8@LVfbU6$&|VntEt=>kC);_gu{AM z6k?bf+M3SVtWKWAAnMLs7C%oiKOz-GL&kk`b2(!;044VZ0YcS|zL|_ugFMrK?TINZ` zn@RWP<8fxRg<|1qsk5!GGyVHh_NJy=FIG7Lb} zlF$N)0-=5aG}>LHIO4f^cnBe*1Q_Jb_+ym?1x}~W046_t^wKfpK=cs$m6shBFsb`1 zc>)6BMb52j8p~+7w+ROC$G7V{C!G70cy8$%Kg^^-u*b0?&oFmO4rZz$pPa%Er;m_6 z6m&-mQPHm?({XG669S{)AyR&jWjZ~1(=uXw_534wz1^Sjj-jjRsHcpNXaQLoZYDM5 zrCM;z@vM}Sr)jQQCyfFbhwH+k4rozqd3${e!Xes1XQND?8Agn#*xqyA{KH+(P~iZn zL)G{3d$Ci@KUiumM38X?M7%revdhH8{v5e5wRWY8|D0uLZK_V)F0wce*kqwCxKn;# zcw}L3s_pgVuKj44nFO~?Qal@aAi(_{!^n^&S|5Z76oqm%r{R7Al1-_u!X~YYASe)& z>TEkuVl>4Al?&M*hFJT)MmHf8=(k=IZuRcz)yVDAu}bSlLX+;V$GCq>fyTK-jjX=I z*3h5p_F&sGu& zz@;3&UO{OU55SrlCf2Iu`5455y%vz&JF9;b+H&&<5p&nr$<)d5aE@=hZ%K!BtqN>* zpk4_kH*_#D3C~~&Ng9!B^p279bA-P`FZ3c!Kt$_A@xy7OcIj4-QD>mg_b=)I8A+7W zIc@jeDjSdYqtnF;0ct-`ge8q919bOiSF z8bc~0dxY2=QP6ln#{#aDSVusaSfk}5$^X-N%q zrmbndx4@O&JPR0dr3|e{>)s&o-`jv8e4QF9Wop9{DaOR%m42{Mj@%x5gVOM6;_6NJ%jtz2bSkQt!A9)yWS#nsDI2<88(Lse2M z0Wm)`OW5*c`Qq!m_~XdxrV<2 z{qo*f zt8yFrBuD2u+jAklIQ}Xb<7-Ypc#{i~=#IGLPIRTz$pqLqK4yl}S|O@D%Ms=wng|q!%%$Yqn%4-!AHsn_8@QS}@&uN2vVN)0bUqnW^&c({4 zsyE2V9)c!)3~G*kL%Q$rD6Q|IqlVQDX|=QGMz4Z$C!*TSu5&)4DBuAfGC=p`TTFHf zy01G;R%Q@ zzV~KI8bqLi8$o#BIi1guT_mw~k&2&9zI$3a2-ynpYFeC+y;Tz(6;5QL#E>Tt_SO}u z(0!prpv9;1Oj6a5V7}y^66HVm=?i*m_8e|yDF;C|BG|@bn&T3e3)}mRa-DxJ3)=0A zCfLYVDpd6`t)Cd)<6@C~m#a(7I=ajY0o=lA?AMeYZ z1r`BB78tA6Rt!orjr~waf~j3Jg|bs!f)a0!5uRy0SmWFKhA_?yL$|I6GD@(ae+OOc zD+=*%WUxc!2D!hu%fnUZc;7?sdm}aolURN}H~CRSP+ysu!T~rKU*)-j@zxbO6`Ab` z&aQthTY9+MZnʳ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
j#kElO~PsJz!k?`f<=BXrU zV4`L+0iHMiOw)YW7d!A!_UEL&m0%DHbVO}_1!dvGav4{SRmXZT9F;P--K=k!7bTeG zqXCw!$KekF_`HXZ4aNSjn^^>l2%yaHE&G*l=09_68${HxNY2@KgXf$+V%Sw#^mV^t z@^hMOa(uWV#8Y$6vRW%=c6h2{C$COJ{YU4kIG8QLG->y4tt1C zCqY5yQ2V%!3jp;P-d;$!R1Y*^5E4B9=H_)oMs(_qNdV4e56{g#{+K$0%!-zh4%Nwt zMAqCCU{QXHx2y(n*lzA~6YwkrRxrq#bUEbEWnc`rh-8DU1LK+pK)s}6o?1qPzDk$R zY5|J`FMIEx&$lDJttSBD%AM!L%q!1er9=Pf)Zy%5uK`sH$>xVtCRcF6mYK_qlqUH?|<|Gz*%7lH9*`1S1Dq$St#-v8ti+ zH2}ScgoHFT3nPekRlx{!Yncz-53lBbCnE9^;27zFbxqqeuvOYB$yZY{YO6bOre;H=Gn`Twb5K-?>k-n$sI6un?4G*fza;AwfUGYC z>4nl)#6PG_2be+G5}KE^9~I@+EYUj%7#|-?ejp^HEIo|4#;L_TVCtM78ULmu^et?} zx;dLMEXWv$8@gvwL+h!$emm65(JJ^CgAVE|X&>)ODcUD2wvq0(s@pkt*P?r}j+bKN z;>wEGYN%c%&{3sFAtRrO+#mMb@5H&-xXv|31nXh$qg6vBjSQoidq!y?Z60sexh6_ILOF zec8Lsmm*)=C%%05`W^nkdeY-aT;bdxMyd4+Rq!0-UKA{&G3tBh1mF`Akj@f_^F zau!`!q3-}B&0^u5y$|9Z%6*sSrCf;a6A_7OHM1dHZ2_)b7?9aSM4-Eh&qt@$#4-p{ zM6`N`D%*bV%{6>wqh0&a15$aIm|JD36#}5#IDaLnrJqZc>&0>99 zK_bh2w}$kYN|s~Y*i+d~ZV)H&4vTmeHD+WPjB7M7sRq%g47IU4x=QC)|S1 z;(evSZ8=+HS(5wx8=&=Ocl$Un2MNS`YVf;P{9AW}nrpD!+E>_guq71~h4A~=Jg0wz zqSgX-yJbS>P`g~VTj#7kJ>&D3ZLvML74s_PR!WC>`se3&Ulq*G9Ci+gI0xiBWV^fg z*WDAw8xpFLY*u>X1H@*@>`9G|tRh$koMRQmuP?tRZEif+_iqZ9smzRY5J2lm>HOft zc;YpUr9vLJh?dml5s{S3*ich_z>S8ele@LVmq7m!p;byatKz@WPiX#&JeriM(i+1; z%my^heK;2^-Z5BF+-m_r*KcVlgRelI|J3W-9AYkJ+rn{e(i5K<Ru1|SN(iTvYj4=ZezC;^7nh8p&ri1 z?Gi(UXk4<@g0HOGy1I{tkx=&66u~JeG76iqA4TUAD#)sqhbw8o^LFv?TG;wmP?ldY zohS7h1a0A5P(x@O$7nB*cPd_{t!28%yi*vz9@2#Pb^Y`)DlO_Ce`spOG{AZs266FC zKylE1WcHU3#0G({|&1?FPG-qPg++YLI-Gw$5s^;L_l>%m6Iy^(JCo8$DI z4?zR%Vxa#r=WH#MdE_p5_6ItK3_39?x8q*ZS6_)?#SdWeFTPZGHYWO( zs`TC4MX74ZMeyJE5SMk-+1E{Sg-DJ}aRJ@iX*5JqOd=pdaYXF<(0dm(5Je#$y}AKq z73sh7i)8Sp-|pCCs$963`-`Wz69-)_78AAa#!mwW4T=@`R01Cpt9S)n07#2w2N~x~ zdBgxnYNsWPBQuz0jwTvCPG%7Md9No3kPQkJ2uNT0D#%&+F$*Ir2Dujo^i(tJ1_P8d z_U*sxiRYq~C(5H`GBaCQ3-{c+ee^@(9vW@S{oLO^tiAXhh9R%TbFqzU%8(0q9qJ0|jzUk7#uH-p#7!lHod7MtbA#+TcuC^$5PGO8rROOj}yTK}GEpkEF6biE7)UQqv=%lMfIO=Q-) z($zi2n7L9>NvXK%xj`8AKh-fO;~fxGJ|sk)EbvF4KtdpvYoq(#DYf(B(47++rCa_KWEKf*FLmB{3ml@ ztWuO$4BijOJRP|aYBCJmW800haeHvEJ@10{#&8ZLZXYoQNT?`;eBKYFKD;j7c1}R;ElF#uXrj>{MtDIVS3`C$DpJBDouwujvI}arjMj#-Wd71UZker4G4XIdP{QQ z`eNum8Dmmhi15`Ei?%uU|B()PsW=hi%j@c&{C(@B58>2l{tysldTd5g{3GZBqX}8 z%l!9*5QoYzOLXNLG2fqTzvtdA_QObT-{}Y6w`;yB{FrbQHbvX_c#PXUdn5-3xV5>@ zdrejvzPF)Ey*~T~+Jn;|rL+Z@LBuIUvju|mDi$AoaVO-B0YKk@wHjhVDMr#m2z+6D zdl;^%Yyo6tS;yY(4Y!LzVD|CP93zTg0{3;Vp&!gjIhPqW6)m@`YU!8{n|T+Z(6P2| zz1^8cm+!~;epqRHzB~PZ5jb+p#hLChpwt`pg^Zh$5ns&2eH!QM5 z-i)Yu4S{y;ND`ZyQi%34EF+Qtj5j%5#@_G4ua;xTu?SbUc=+NN7VF(qC@a%T@n{5e z8kBZH)|Va{A&Wfwz`#*8<^ntcDvVMKMg=eIfH9}l^Prl;iUP4W9Lm1u2bS%Yyq?!4 zs+lXkxWFIx*$$Bukns^==yG;Z5o7@To;3&}aWq3ff!F#w=q%^@J_UXwzlr-dT<||u3=S_Q zKju8@doSjERh*z6(#PG?!ybE%j$uXDyu?~3mO+=G__fQz8HmO&0)%C)VB-^p{SrwK zMPR5+@r)XBztSjAkvLj$C#P)zAweP_22m_U;ZLCnuT2RBw6aWE{hV1l@pFgEuwo*aS37sOPL+jS4_Y%C4LNUXRgwn5f77pKL z-jJs8ZxYc_qQQdg;_0rIfwMvxGQ=RH$Iqob*E#HWvykhSwHaxzjeLDxuc`Y*E`-gw z93w`bcl`450eG|~-zednKC4=Tf7XbbzkP)G{a{D!d+U`nt z)5wt-0a$@53Jdg7i(9Qk-qOdC*u`_oyWtYXo=h$Od6wUsP%6V z(@--}e9mo-r5(JFlc!(tzQF?W7Q|-sjsmli_cr`uzEv@y3pqv>`_j0i_)nTM=xP!X z9N+NS8DT^`6TsGe9nxQn+oHk$cHIcJ@hC%nh&>chn^5~O0Qs&9Q-TKA;lGAu7!@?6 z8;!QSRjMznczkQB)%o9pgpb4NTC&&t*Fk8UB_PgBn<05*hSJpufFNj*BTb89GE(z_ z7V@HyRvM~W_>{{kof4vL3~@sSkk-iQp#2q*$-&fJ{8ZQ=n;CXugE>zQ`r+TF7r#RX68K$s{taJV5LUs0X%#y}f}$?Xh2%U?$k#q9 z1kx~dvXbDB1xoiUc5S-j@r-EUT^fM9l3{iCf_JSeP@@-DQH!@&|6R_%{3}0(90jW1 zYVIdzA6?RJf<%%_(Ioe|%}YpZd9gPfKvC3SR#gO5d4g^8c$wOoqZSaUh;Vj342fq7 zjhTXx>CMMw$QZrf|A5-|=>H%4hL;4+V^`pv_u-$+BY+pbF$4kGd64lUlJi#X!qcq-gOe@XfO-DOX_m=) z?ukR(U5keBf_K{lPtdT8TWD;?qYfFke=FET#`CR6b`AJml0o+D^UL<*D;|xItHgQ0 zCM|m-^$JNd(58m(%P^GKg0t=$9N#GjX9B+_2>jIR|G8^ph=__mByCqD*i$ic9XetV zP>Y`Y3ET8-{^hQ*f42_|-dorgVD>Uoy9F)54#jiy2cgz@sr~^7$a%eVOg~Hc#n={%yyTvDQ2rp|L4=rOZZs&gf&FjqhchtoNlMAwFz&TRtOh0S?Qkm_zj}v2n z^up*1C08yVk-Q>?c&}5@)73&sp&6{(r4<2>tiASkebrBs#nALFgUMTDO`97-)ml$Q zgigL$hVHDN`S{2fc)Vvb5(aM&@L=HRd|IX7?;Fj&PG2j}cAZV5Kf*=5{qMZBAzxJS zR+qTE{m8dsfo4R-oUuDyz31wy^xf;LaRqgc)qqjYoq z4z2=3lQKV8A_*+qE2sK5F`)wh8I#QuAe#COxZLA`TV{M|96VFZ@q2E$`PB_3{d#zc~$_vL%GlmG`(`?h!N;r2AL1T^wK{A z`FCuo%>uc?tySHd79YH-Z<{@Rt@r-si(<{5#iV~gZeBKlK`ouqVHd z)mDu{E%z%PpAm$Bem)3u>T|}(PEJq2wjyN#^(S#wCel zdTBW16LW;oR+FP{3q@5Fod*9r_j%DxUs#Q9++KL7@-BEBRopEcm-XkPC{L(~0KQ;X z3##iA*d-KZNDsDfQZyL{3~4D%nN++{aCa1Lvo=-3VNdjlcMdF zZb>vBqhD z0-H!A9|=hh`w+4Tg6u&<47>u36g>Fy5NSrJxaSAa)ygcd!Z|+!sMQHWR7IUOr0+Zd z>dX7%%^ap>jF2M|`3XN_Xo%7jyio#z7M!#8MG-7*w2ax~lXn6r=-lcM5u;wS3ar*h zlD2K}J$|(6)Wm-`m8bMzOHDv9?dn(6tBjrLSptH2b8VT%pg)B>2&5ReIKo5M-3~86 zH>ysXn#Bn*ad&fk1xY>P21hb}iAyp37m6*0eG3X2Q$INCwRRW zw~a+pb@2%#b$hcyNhXFj;J0-Z?cky0JwlF<&w=b`*_np2$2mOPL+kC3wMFI=$L2;Q ze+)Z#rP3*#A^>Wa260Tpi}Gxv>W; zZyh9l2A-AohK8-)c>Q0KAHg6M7Dd(=zu>*Yc-%s+d@=3t?Lw3BCwI0rX|L1&6Fa1a zRP1U2L|oBOEUdi>`w_@9ph>s;kO-O-e+x1T4ygjFOO-4+pnrc3by$wexzN=rI?ih8 ziYSxB-y|C+#JEL21qO$qEn)n{B-|pVG$q>s`XN{*WeRljOPeTo-Co8_u1vP}L3|$* z9k9h9-ssEKB)wb#2@XF#J&t~(Wb!r5HikFxD&O;4^eSnU|EhhA1cW_hdODW=U)CdJ zcX0lXvHzQj^8N*q6(pjc4_+pkN(33Plh6s^C=+!)ani>rsK z8&f^YdxF}L4fSirsAVX6=`QTGtcLzWXxLHvbz7+%DxRm63r5y5c@mEWigaW~3JBVK z3nng+P9bZ0k$d|7(fLyR(ukD>>s@ZOVu7Ou-b4#$n$8m{{6@f%7E<{Wz|LsCzSd#$ z@cROE1h#-s7y`2ys!9A$^XW~-A@6=3Igk}9i9^E_;EnU%ms`<2yfYeSf#EV>unj(Z zB6)a#XM_z3<&u1EAu-L|=ZVplu)0#eh$Nn#iN)tKEI-*G{WA)$d`Ao&UwH|92wga- zRo>F@)DUl@;U|m_-3HR95mWdf6vu(hW&yK^V9$uQ@c;4Vrn-`xX(Gvt$%mHZ~l09na{d;(Bs8 z2-$=apr{+q_u_rZcpR!D!_cQxM?u-6(*#!0-8ayzN<$!H=;!oUi0szW(`$M_*b;@D z#HCxX9xe%fJ>BlVSA~bD0E}tARRxB<`1`bS|E_b0BuEgp^8V}Etxq?Z_lFQ(7#inY zZafHrckh%*)-9oP6yfbGRy0TRp3?3r=ZKw_YF1VLaqrZxHH5+ld>$4>9Q zgqoyyxKFSz;}JZkc@ZI1`IB3#-^^5rY()UM;(^{aAxX5Nk!n^g%R-}>&n!z07d1Gw zy{^ucrM$H)68c4{r#H8`jaKuEP5O^sd^oM#;mMc?pYsK}rp1`}F9eC8C2o8nv?aiP ziUSF9A4K2n0B-SvXWHzN4RrO2D`tQhyD2RtX7<2*^#mS$MbTxbMX4ZMqPW4_IyE>E zlcH)ByNg)9~ zf4*0?&~U+TGiywP5yXQcP~Hr%{)(sXD^|w}4?1|p{_7-ckl4CcUX8vL$U}{hMVkK) zT!`!jaeR@`Y+13(+|Ik$AL7_Xx`DX~$&Xs3X)x&&3}&5hHiJ+atGs3EPkn8$(YAkz zWw7456+N>G>T8MyB$PI#Eta~jjJC&;a+)qn8P;+X9sCU6Hr<4K8bqqz>Q2GNLHbap z21TtP>=3hbz+bnMCSb)Rs|;Io5&VNm9{V%i?mY22cMtcr!AeZZ9ChMkh0lI~7G(m! zYvdjaR@p@=Ki+QCwlW@E}5-l?UM~^M{967;jS&gZkvR?!z~><19f7$p>sJ zUNogGo|O-YHu-!5LW*EIQ>{6-`i6^}d*reADoDm90hIl6l?jB9fR2JH@WSfC(5HS< z4n^3hOw4owKV|e(R{%lfl((nvCmp+bveBoM_S~82dv(en{t*L0HWj4M7bDHD_gQ4h za^L zTz$hF9AUOt>AgT7UfzW1nPW(jDS(O7;8-w(JPIb)$oaYc^-i0Gv25mpq;K|;wRQ%p z*_?#Q89ADoPJ7w-FG(SC&}}&89W8LwELW0cq4^L@6O-`*>?b{QLej=X*m8DR=Ep;W*h0n+yKcQskKyf?<{HQ)u>GK1Gi;*k!5( zYIXWr;rC!y7i0CsUC{I>dVYtl|lMZw~vuQmbqEa^|F6CV`7Z0AGQG{HWd3u3>4*Y?otWAoodhsKg$uYYrPpelFE ze5r?of1^qHH z7`_kd;wdYw1L67O+-yTXS4EchfYUQBe_aT`m+l*uu(ufLkdQ!E08o#(X>GN(zMz#4 z+48r{*uncoY&75xRGmtB=C@%b!xKO}{jxI~w%xmg27T;c8rU*I+;(CDPAB@7A|W zyZ}}~o8)Qi%tM;7iQX^m_u$!QlT{%0=yYqpysJX{eC`gw6MCST*?S|YADA}B73?Gb zyLo*jASM3o9PYV)Ty_GOJ}Eli0Jd}*!Zen*YTJythu-Vx;7b*cS7+r~JlcAYNJv6W z9&A^AI53Bxb_Eh!9^h-Q-TyE2IYyOei$M;gap`Ko4OckOLk2+vDKEBqW$01VCqINx zB7tjgmW}^pN7`Ce5P>0wxP2EAof0NV)jI|V29%9@E&ETov?k+iZEdv)?6Gr%N}m9A z?SSv#H}O17S1%*gP}KWtE6c4>=X%NS#ASNN+Cj5WomKAe ziT9I-z<6LzwpBMVHyXm}bjKkDmWc;hKMVVPm_k33HLM)a%UIX9`f+_H?xxZ2mKgu@ zzVFXtdx?(9*5LPj0;D&KYAkG`9<5&~dqnGCf8r?gPJTo}?gL=bWQv<|<=nT+V~Q46#0?7v`DvJZMrM)xf>?&>es=wONLj(lk^N8{6(;dzgyJzn4LXdLQ~)N)3X^z* z{t3A*CFUNM7b}q5OQNN5QS0_EdPSi;Mqj$?hFVR=x{Oy8*=}RnZyku5rUq_icrGh! zjN+!nA1Ub zisPP_&-@>iW}2`h)brw+S+;^s0`+jiJe~8(z3Rai$)r*BiN~(KH?d2o7h2Kt?hor1 zQBG?E=U!2_r*4}BbgdQ4UA~c=PVW(wH@HF7;ipZ(SXC&0_v^Dkj!W zUD*nzw9MX+FDQOL@J-2aJ5?(ZhdHPaK-qk2`u&>4M$LJ%z~#hQePz zH7La|jD@JdUTCqj)|0|M2uzeh_@H82FOuwp=jHZ>t7XX{2IqeWdnamZCf-*Fb>qgX zAMro0TwFbMd;Xc6V*C8nvg-KuyJqDN-x25afzJF60si5ziLi_Wtg$+H!~rYrF1{xE zBA3PueTQ5Nvol9xv8-S?Y`wAPEB71WT9L@4&Pir}Rk1M;f$&WIN!|B{WmZ@f! ze87MI&6u5AG8}r2hMYb3H4)S6&O*5+V$LnME80uUja!k<@|ss9=DRv*vVWZJOC1Ou z{X!vHn5eut>bbEFUBOYM#nSK!hut={ee3nB1x1y*4M@xd5w5e$pw04NXRvQ!it$0< za*^@GevZZ&!>-su+4pnW4&OaJugLKqUhJ{x5Hjkq=!)WhUuV-3>EFn)Jj&jya+!=P zGjL323fkN*r^O*nhR^cr248xr)L1R%rLXOiqyfFqsTp9|h^ zy8|ZekQk}xm3aH~qIb1wL)A4w8&bl- zvnPi6eL)_ubhVxOgSkld^yz%Q_k2I=ytfzkXw~$`BYF*DPs~4;L9hQZj*Rl&h9s0o zoD5m%q%!mte`<%~vzF!M_RXm~6pDy&uB)tmw}1BODy=v}m=RaOOH465LfUPS8vz)W zfR8N;u0iXMPQ1IlPcqF<-uUzQX4Hx!@fm zzLAKldbD=460CmZ>@~YE^tk{aBmU!7E0 zXHU3B_Le4^>6fn?Yi&xPDEJ5nOXPHRtKK|*{P?|-+3nv)vvZ$sNfcEQ_sKF%2Ye(V zto=~E2%P6^SES-fYUhr}lG7qJInGd8qI`nVkPG8v1xFs zo?FkwFGuu;=`N;}xn*Xt5S9BC1%+_)X;B(+x+KtQA7t2TRe+ zexpuc<%XU3a@$tJS)~2Kh;wb^7OW0bpDus6rZZy z+iFwOhn?_!S7u~>F-|=F;_X!S@x+(kXr?bNje8q?-@+2+9FJITN)6Zs)Oc4CCmGgp zEqz?Ty;n_kyL?82;Nr>rDYSKs5Zryb?pG^{OFO$?4g%5wE|6brZ_~HD8sHMT-(j(r zgV8&zF32r;O%~H@aO4=Lvd{8; z@3(hCTH^I%@2r$};hk(K6CNQXJoA!ugq5uGg`r>3X`W4lr2N1*o~a!5(Bl)`oskSa zjmQZettSTN_Y;_s<+VZ|k(zjqv_`-=$l&%7_D?-?u%7Jv>j5)I0Z=pE(p!uw78l61s4mo%wst-5oFX$8%4c)6rl}wa3d2p z0=|J@eJJ27EM1(~jU1o)d&@)@Lvqeu6dyTR`l>rEnKQNAi&myCUUIP8JK*60Zs2J- zD#GNGh|<)-SU?cY+wSrQv%~}9&O|l~(pbWV%DW|>@0M8pxdpY6f;xR6?j02WwvxzY zQ=~(~qRb+oAc+$h-uUnKl~WMDW)%_)21O?8b_n%p5%OICF3+8q2w0y6O={I0({W3i zSOI!6GAF;+ue$BTFLE}lL`w2sIFG%bK|$jbM$hOs6)PyVe(lReW< zuDvKbUppDa&ZfXy8UB(kc;|EW;w9l8THm~?5%r@q5158VH^$%Cu42hHrthC)vyP}l zUt36i_qbrmiUxPd+G&0ER2JulSRm!!jC_`N3<_ZLF|Z9icFl$1!rY%GlK@D=?f?j& z$eFU)t)2FRe`$_L2Y@1$nF|=xv;)L~_c3rp>DnZr^%Sh$mF1o9R}rpEejwH>U<2+fMNvuTy%wuHP_39o3=y zvbXoHCFNKd=KDI?lf9y657<3GanFAG*e}+;{Y$C8S$oe$9^chI(QXbeo~=^lxSu1R zwPwz%62~zdI8Xt?b#iogCfzjNL@}r#VqdDnoySJ9M;vw0i?S70&Yv78?Fi5A$&d?3JzA&Y%)Hm>s zQoKCzj$Gqt+p{qC1$z;$`J46VLI&Gv8V`K9G%tGjN4RXgagokbf38PA`0JfQiydbxrTqJZB{%~ zZR8vl_BuaO+25#YJX>71rt7bNQc)v>)}7NLVZWTLNTmI^df%dzCX+j-vS3V`SIQN? z>s?loj?oKNnto$mgEO|8-fmaUE0dYsd;0GEu}2fRjPJtF`1%#nb9i#1+V9Fwk$qi} zke0aaT}?yer~Mv|%jLNwJ&DuZux+02t$``l)uM0Fjq{qM1_5qu_EZWdin0V|1-=ms zfy-N(n^ILgn77`GpsG84>eQ(R6vh zrb|+_G>YG`1rbS+q>6|k#ON4o>ZYu&ZOHR>Q`RDRc?#=7T5YiQaGo2EkA#bANaMWd z&(dvlLQ`LD@7J|q+f>;k@^!IY)rWm}0nB zXsbT!D+%aH)Li?$&lApjJ-8rlhpPBn?ZjSjMNNzSbHj&vPNyFJ45MwGT_L7bwsL+Y zKNuL52UlYE*77SlrO{ct6*o@pRjaEU)^{dbX4RGmZ;#NG`1gKOeE2F{#A@Qt_-6cK zEi5d5=Uzt8f>?^{w7=>o~iD0PqDj>#3RUO2aexl`$0*o8|XnLJxocBW40`(Hhz5)bHaLfg})%4 zfaU4$jw>2i6703md#4k27wy&b5Np@xQ@!yYKbf?_k~8N)yw8cE%Qi|w9A2D5-Xqta z3;aqKz_-rUkaGP53#rlhp1US()N-TvRDD=5{(630SxNpo1f%LyP6YWoeo{|2lzx(^ ztW2g6noU}+!Rh3rH16wzI2yxTi^Jy$uKi*7&TnFR&B8`WgY(*jSHpLcUlB{U4%=rt z&n>;~lIQ?~{Gu}^^W6XCh)0ucbUZz{8{iR0x4b8sUQ!%Fs!&3w$F3983 z4x+jI@=14Q;gYomfat{|# zPL&rKzEkC=@k_NGF8rB3zQXJGy1K8TR$L7G&x!tr3j+3#8~2X~pffHo`)BN9`6;HVt(r;!x8-|?QePf+vEt|*x8fitD}7@k_u|v z=c+Go^jUdS#XJ!rTrSgEZqlQdw@21`s1w}xFc&-=`XU>FLb(g*W}YU9)L)R@D6ct} z)MMWKXLLQAUtfFBn{vyG2V$YdeAZAGF6?OU7{J9<8f7yo>Co z{L`x6jfNZ|^VV7%^2~SW37Q9KJPw1XxVI-7{9#2zv+0B1IcOIsE6hSVF z4#na$q}eaaAjBVlJykjo?v*5ooQoc~k4_z+6>>m19-;HfH04QjXq4^;E-v^xu37l> zN$Ed~C--!mq-Uh}|K?}jscmWaNZ%r$+nNy~fDK6{&UdxoXks==($ zL-nca{2U<1C0TERS{BScVbnbfN~08vs7sbKBI8dOUIGkF{pT$o;jK*npcKPPROr)U z2b7$;dpTQEsa2~}Et6{s}d5{lH$racLRDh4Wz zm^b}QTVFBxPBaVT9)hnjr8Bav?lkEQPzHO}bOrrJ!5_^h-rn-|JP_6ea`eRg2(GI;)s_l&yEMDE`C3jjyrD?FjQtwmB(Z92+Aj}Yg6 z^DOT*d|!^Aa11H~_B)VB(jBKsRc1^!ZKPW2c68#LTqU?4BMlu{RbLg{Y6G4@r$cIH zXfl|tf{SkRH%w0xRuKOtqcr9{Zu8Kxl1cIQJc(i<(oriWfF63-O{xGh*p~3Lo}sOt z#ah5jVXPYjInE4cn8wpeaWY2=sC;Sm%{JP|F*mtYson|Zswi1XbWArl$b751F1MZX zDeaHwy?s5e{Gna71n{Uua3Ci%Xc%@ z3XabM28@OtY|*{LLGtG8zT48LXxfUZ4))~)!pHjf{_t7khDFH1=rbT@o5TzuAI@AE zcL~P_;K*4rl|%LiwK=LHXofF;oT*+vUTh^Ca(;2m-ckD@ITbViEKZKliV9rdP(SfQ z&IHH9l+L?DroI=F*&bH5(&|+rZOOtAX!&o~K7qqQEn(xw+T1PlpkyssGX|h-{bkU) zhgJ)P3O6x8CZi7^XU5;_>~>PZP8@jSOV+#=e83+&0mb)>$TgUCCG-X3sZHF}XENTn zz}(M!?5@+ki`up84J>zojUKX6jh!=zYpH0bWN?GD#Hp0NnJYkrLr z$zGpvL8*SIGer$@Aqg3-Uh<0K^p%z4pj7b1;!jT`>jX%3>Yg;AuM;vp(1=WE{9>BCt zUE#}-i$p!#d#bq_CUfgSx~fh|`N}Nst|8U;Nfv7I6X6EDJYph%3VxZZYnZMgKQ5?~ z;T&h%N=eeF1v4c>=t{)N1&G#?DbOmPc(p$7ed`q(@OvU?FV#E3x}~mN4)d;a@BE8? zFikg6R={K|{t+C5_)0F`s74yr@n=Q(@27*e&ciJdlYnz}-0+h;uP>C+6!TXwo#=33U|~D+FX{Bk^Z!%1 z^*yu5C|4ENR(>b{pxJ4xB*>Ns?+1>Fdq3`B>#PlnbQ}o0--x3*9 z9Tmnrmqfbx&mF5ehd)pBx^8h1^1yA?s?A?TTz{CJK>{tHa@Xt87U3|kO?x5x2#e)t zAybz2v?h>$f?))uXB?1oH~Ta6-n^c3q&WPM$qkRTkUrU!Qdg)X`*JxzhP1_R#((ncj_wwxB2o-t8Ud{GgCTrh{(S?S*;)j zj+jGxjU^%y`5d|>QX3zT0z=NP7O$ByRo#ZFPrL*F>kJo(n|?3YbD-d^PC z!H5wciLFDL_}lS@fYYhAfamb>?G6+;`orxwrf{;3-%Hji6Uduo4l|lhUQYH>Tva8A ztx_$2mzXd}*qUP%ui*-qBOO)`CW*v|czo@YJCR7{Z=gbBb$?K{?b=zhRsd(=$Snzv z>MnsU@bp~{H~kGCOvKn--MiREcG42*{pz!NX>0%DlW?U&gYYa80fs4D$5}<_!6o_p zvw>QRf^(76^Q!8Re;vnezUBQu=JCna1MWA`F4X)*nvru45R2oG=ZTD}UeVzm*_(}f zUzs=gW!4=jbjOX7pq!K~MuTLORxZVBkrSkAvAT37Id*6CuIN^r;lCO}E!ZnT<7mV{m&G@vRxL8Un}c-+Z}#gE4aU z0Z3Y8&!U%d{IbZ{5O!@eO42)@ltCbrA(S)cE4)cK^x1}2n7lsS&Ks)C z0D?P?=9C77tK5ROZ`qN}Sg9FKu2qDcx{p4T{gGE1V>0ZoI?aD@7-p_So*1C^t(y-Hkud)O{g5wE+&sa?BrjIayBnelO?r z)3%!*9^27iU$y!T-A?KAS(2aqo&4KsyXT6?YM~Jhn3e7?_RGQl(uGZIwUjJzLh~8a zB92oNsRD?Y(tl{v7K=o9USyrZeO|~|V3Fu3FPoTHX_)u-q8`^OJ!49t@~@`Q8OF)p zNq|>IU-%M4s+`|V-^&!e(Y6q(RLmVMg_^io79ra+6BoWChr!q@Hadsic#T~z!$hW} zi11l^60+CX`ub89tU@YAilY5*%~TZH`LvJiB= zR>_2!m=R3q>e*BKHMbYEsOF5=yI=tGADF^Ltv1r`qEyzF7?r4E05?@J&s=SJ!);8G za_7?7jGq@ZPBXGYq!5WUfroZNI*6@Qjm#9^dU`i)0Z^%^?#ifwG0~UuiZM`=m1>!>Tmd5&GlTl zQEB1H-nN}cte!iC5XVvM!zc2pETM+0#<5KhIRY{XF;rPZ{ zI4jBg1pmIx1WKTWtNMbHbhLT(u){nTA!QgE;=#I@@nfyU({BM9WG~;sW_0E3;+d2Z zP3SV12VAbnB|RiUmCvs~5SL2O{6M)?eGjv52n(=-X+ZgE$^LR!%{0>- z40kNX^Cnlyl5rhPyEVyVK1dQqBC^Z=kgB3m2m0d*B124!3W9D6ufBSq$*h{Qh_+Lo z=^w&fS-lgg2uyvAl6R7}+Sr!`77dP7G?YHz1}-<}1+JYgHK&c;f9eZO=a5AG?w#ot z)z{YEIY&hB0Hffw3v6QscSjA?rp=hxMK{Q~iC?mx^a@lU#L6g;vMA+0tHps@@uMs*nk>SVg_B(<}N{>f$d*dMvE5S)(`NU!OC9;fGZ# z85m$8ZdvB=pgQhlmikOa=qB3N@LYO2tK%*D#O3-4k}DA?$sLKS_<9~*T53v*@nM|x zLiX+T(JhiNA!=+$N2YOAc-5<0Wd2yB_8a=`!lI(q$dT`~(RZnz_n#E}fiC8iH~{^x z7SA0FWq^2xf_NU{KFUf3Kc83US(y~Gsk|&W%Ou{(N*7wEBtu{D>Zclb4w2lX0b-i) z%DqK@Y**J|TJS=HK0@Yx=N&<_&?{Vyi9Zzu2YUXJA&M4uK5;E>n>G>CX~2L`&)X14R|-NzZOqX9WUIGOJ>7iTvco>(F_ss=}@gSNeHRk|ruX zvsr{+K56qKVgHl!Cq^fn7_7wvzI}%S2v>f?PTtyrUPU=SnFjP^G)RtMBU-=u;x#wh zACaSHCYTn3aGA&434gh%nl=ILxnaS^A`vO+}Pa>61%;P(DnJ=T<)wSk=BP$;7baRp#cSQe|0sM)Ti>gI< zOUjuc!Sa*K*mZ;Ouj#r)ihTmcBkGk^*yrD0 z6PJq4<*PRNz4hD*5LWQoc6=9FBQ)Z>(Xwj)-`($d}nkyl0?MP0XnU4Bz@;g^ho$V7{=_L74GC`csI=-0lm3)tlRPn zP>hu*c}vqm1grBlJ*&%o2J6^H#CrG%iJ3_{3T15qt5b*DZBlwMRPwdx#GW4~C1ZhP zA)u&W1l0LH!}W*A=X5uqj)Au|VD~ID>3VNM+MnySq=#Qpc7H{4yN(4NzgDcuve$naZvf0TQ+4=O3x7uD-A}xogK2MHfwZEf88dAhva2 zdGBs_{MK*R*$eETj zepY*OJnt#lM7vV$mf{&dr#;tNbth#OYhFe=ONu9M`&({7{z3#BL~IT699-j8#jt0H?rVcJ=@;{NVa$B8SR2J5ifV*@jt zM6K4R4&r1BMLRPWdSutq`iU(lvp1#$wonGgry#)Tn>0aIAeAT}SdL2{jZp66Y;7*q zBv%smiIu*KxT9Xk09mqG<~c(8jokcIwNYR{L!NfP>HbMvjv$zOq#w#2?L6iKB8ETz z?oKqnfc?NG_zstyB$dBmClW;(Dm8lWc-<~^k-O-bA6;m91z8~7Q+QiJz>IpsPt4{E zxdB)i*}}(Uj16ZeC6|33ZH2Th%1jl15W*s11!UiE@6mXtfcfA_#w zg%*_)C#(o*cI+&S>w6%cf;Y5R{}$B+eT5FH^uAt@)GJo~YGPjyzY^j8&PFTF<>=Yx z7+NkgCE~=!{q1{0m*NCqVj0KNeiw;AEdy@eKEJaWzAyD6O1ACDFecJYXo*$~T}mCu zdpY`kv_E2h@}g)t$Nd@(f$3sH?Kh(N5?wLC013 zA(eZHUwGsO9?|++VrPzY9SeH`p|iFugY%u$yD9@&y*DGL73{g8 z>>Uw1%`Q)FMnvpfnO%{bSIX=}U*y}8`J9o|Qhttxn?IWIV3;k6G|i~)^#E2e?4Q~% zp9^x7ZgQzbJ3JH5`(;^pv;^>W_nGnudyPCSN}lxIv!ph6-t(Qn_l>eB|6Z*yB5NXR zx;)xY+4-`R7Q-h*s^Z#yl`@3IR}~x68)2)O_R7M-+^f0#3W{lNnz*4&-xKI91*4VD zN0WYy)0hjDIP8_$)hqp=`9oBQX|6MzykGrdQB)N?L>52PudtW+1LRxe!F zicw7LcGlzi$NyH)`>Igqn`XyzNo(oh_7)jBM{6PTAQm!jd}Y6*3N=IQtozrSl3KZtP|z5#*)V@rnHF2yMrNJgd%Q8cU{!vn9a9+7S1=Sj@a~ZGlTuGk28lP_9|Ad!NqwHhC|UU&F1`s+Z}HQ zp7>w>PDa;1#TQjgfAI}jHJs^6o%u59Y@m(-sMacXNp6xB@@SbYzeE<;>Z9#Q$GR(Y z%dM0zvRXjvFGl-S|0B(FM-a>$Jg7_PBhb%?Ed{W7i(%sZd(g-?RM8MTzG}|r*)H8R z7JHts){D4&fxgv(DQMQQiMh@*g}>QJ{;w5ol0QBN>09?Qy6+0kyi)NNiXdUDd+$xt zmcmo|J{RBnl`%+fOZGQ&_r-cPRqtaP9zggB2C;{ z&7&RX&u(Ax9r%jX55qIm_Ngd4^ihOntBAyQ&ad9`v8G@M_AU5H3u5t_V#;GBp~j?s66lQ{OUJOSz#1)Bq30Ez=z(uB(m zQ4%L7E6N{}?r+N)JYMxOQY#m%Fjdjkjziv{xS1#UI%<^_&`5-4#X^e)nX3l4!f&^nf(zj%}YeSXe(rp%PT$ zGf%7|GUp)F63HXwh@L#%F_)WOx21)AQ|76E@z3HZK{QX?Pq>BP0Ws0}Crg5(Pxp73 zCXVvKbR|=o1my(V4760+%AXA$IdI?$&$9kKm;ZFrH}ofF=7pT=H>`l=*%gj;lM1z; z@A_Ag*5fIgv23N)6gYHwq;?M?{<7OpBCXDs@-DC5IFx2-ku+!65iGOheJxl$n#`kiQ0rIbL!VGlEFEz%9GU-I-&@tlZ4|!N z&ByDw|EX3jZsRc+m$rARenaWEV~_FRTg?Z^H-- zv@}+QqCVkxJawbwi)A{NG7QwXd_*_(^(_!J!GRN3$m<&;3OC0n9zS;0}?vBA9$4mczmpi*UXkK=B4O{+qx!*+`0llf`Tdq}(jW1f_ z4_0y?-Z~%;Q{H+qbm&3g-52B6Sy2o80~GV$s>9(o7@i;W-BA|UxFWzepjTHe`68-C z0w>khL)z&`aqIrlwM)LmYx%$iw7~bQ+#lt(60^euR?$ctIys_^k{D2DL8EqxV~Kd^ z!Bp6ta!}w9;SMd@4v7)@k#H|Ij_y6M9o_bgz9r|Dzf#`cVJs zw-J*Cb7MC?kM{ZT$P@J*swoG|nx5^?k6Tqta(B;v4Xpy!e)DUswJN{Io6pkxEw+P` zRxjw?#ir!SLzBWTC|ia4FV<+g{2#HPQDECXpPTx-OzA(>JPNwbLy{GtTmluR%pPoD zvAkRM@+pW(?Vmb_(21NQkwxp{vm@{-lSbWp>J|j00!{-xlH0(>{p$mp!J}bQa~mmr z(~?6t1r4XnKoDiHfI&%=b8`gJBmqTWHZ!|WL}u#o)EL4v=~j{}e4HfB2+tWkz*A3n z52(T{5m+DgL0q7tlOh;z$b9r_T=X&*s2wRCjtKLn43wR(DE;k3Q|t`2V2kjGw&@$u zjug$zIVV`l>UgHN1M}kxyF}UR!Su^s;g_M5)sZmOJ5%}CvNXZDt~#J_`g^^5wZKC- zBpR0+9JKUAyL?}QgQhkERkR6^hXGK&uQ>w6pXrdctKKEw=szd2qz_-eQ2;IJU+P+g zVR5IK<=TYsf~ra99I4_c8dy^&bY~JV@7*Uge!b4T`}|(+N=UUb3y2sKme>y^gJZ;s zhG>7QtKZ-*Bgmf~*-ZDA6>!#XOF%c28iUu|!;5QJlq4_ zIax32eTVeQ8r;uFbE){*4e_5Mq5J`2%4o$(=fx}5<}oWjpZihxoC52C6pzkLAmYslwAV75D;u`# z5GvZujQt$OjyR3~UF_kA3kfZpY3*9F?17V)Rs;Tn03oaq*j_I{0Y99|d^PliNG(KM zmKHIP->SW#=s-DzNOXLbS-=^=BEC*J_LAIWGW_;~E`H;yi@$5W8a%PPsUTd4gtGL@ zt~@`&eyKo9R$kE`1Id=)3LO1V6t2Y|m*z|Eu z)rnfUq&%5$0;C-Bli){hPC11ZI)I54<<2XNhy!Lyr+qKsA6Q&kl`6_OAm_X^1m3nh zuS%k@tqGn)#LaEoN)#KziM>Pk_1?w;QBzKMq{}sWWT*(KOOt~~HV`M;3Eq>2pH+8Z z1<_nHjI%q{a@K!=5ZQzODdmxxlKp*YsL4;{+i&aMVqBI8n7WI$D!hX6?_B| zL}lC;D?@G$Yx&RIMY3 z|LdZa-yB%85XbM14rDEBH}nszwLv_i{UsNByvuA)7Ff)(BKz!5G%y+Bj1iX1c!^$nCcMu zxK^~^I1a|`;RyZeLIcw}YD5USM&RTG^jKR1z8Rar>Ua6kV=6lFpu_Hs)Beh^2}}%% zi6^=K*TECIUB~r#IosVM@yG+rR2P5H#GUbrbzy#E5Ii7JcdoO1!nv3t?UWC9McrmS zm9K7oUQtfP187<8)bfBFLG=a#(W|a=xf2aBP_v*?ngj zrJtI2O74nX4C#p0rw}ju33)q_guLNA0S0s>VF+=`C%7g9EM|Qzert}4*rMm4K*W^3 zz_A9}eXDxRt*-FJ`;K~y-936_;SEn^)q!9Tf7=D3I6TwD@XTqxNXR*UXNOB3)m4Ln z;F$DPgdE**oZ~(6^K9JJD(NOW8qW(!nmxC62RINa*jfI*b$)hKUh}m&9X=WrDR?x7 z#fH>K^t+(k75Y8Tjb!gE@I?-|z*D+{^PFLw@`VNT;$)_arBkL_+O9CAmsA=Q7@OCM z15I{7bxBAu;$~wJ)K}*T0l67{r7jdLG{wPa5@V! z%;)(H(akt~3p=d>ib}owHW&;eZh9O(%NLZ8rr3 zhED-6S)*G}N%z9mn^3CrX-Y@)9g-8N3g5w#HNR zFhUv}RaNa&>s+LP(VWMlk63ZzAw@v#&kf}*0-XCv5J33jI4T6xdJpe zgzDV9@tUG|gRBqV<5x^esI)yttUOhOW`QqMuOiq2rk3Zdq^=bn@LcdGx+R%Cxq%rJ=}>veWInAJ;WJLx)}dZJjYI1RYt6R6mXoDufSni}Q;7zf97!CrEQ)U_XoV zkc#AVn{{AAW^-i(;Z_vN;ibc!In?Uc#(7jO&KwFAQ}pu;FP3}Abnp`!G#sfk@w_1@B|62{hA@Hl`U*-E{sVKkxJJsgX zHsv@6h&44)-{8XBU6#!G<(-hm`uv^sVcU3juuU87Yu2B}{z%r_8GgQsU-SYnN6)2L zO=q-{*qvt62oj2(ijcp7hl`HRF`YX~FS*>Sjy4-lpN9HGKK_4k2oNGW(GTzbS5xso zA3tTk5T$2nEd86ZltH7|T8M2DOM{XyJeTpBuJ$FW^050-g@yl(saIE+xGywcBd5@v z2~L0s!3WGpBkWWO$-iLGh*lLt&JloGhK$_EPO* zEwIdlR3!S=qrTZZF_HIX{ATk!T+@}g*D;N^Khl!IX?D&&4$ZQtC5Ou083@~!)pT|J z=KD+ltQxyU0lbVfk}Q;Gi;-{-eZX^+Li7j|2X4M`rq~V0^&7k9KjW?KZaSE&bl$YX z-nOY+G|nKA7Nd(#!7A3Rh$}g{c4oW3bK__%*Y7?`Ekq{$`A~>dlFG&v#Upp?=HIwe*;{l!{50SgKFv72Q&xLnu=;Kpjw#E@sSpT-eOR05Vy5*EVZQW zj+!sZ@YCP3W5HBEKceB6F({QMRrBSPdTG?AbWpmqLnp9*YW76CchHIlWxtOK-lSFF z0+t>Tr+b=sh9cO#_=`Ur)`~XoaiJ6gn9(aw?sd+n!rLUw)sQBK;UtSYok59m!w?^&#e8|kr zk{?L4%Z%MQnrxi4Q9A$fr=aP%qUt*-k_$aH0rN3Zawz3@K&1E*(>*~OKU(tqf$qh8 z@efhQ7dNIm{A(d8JpR!ed4Sar1e#78npaNair`IuM?ctF)t)TAK{NS;?=3q^8lKv+3)EOb^12JeNC(zf6IY_j;j$j$daHLKJM1*K?42qz znu#MFc<*{PUra$%?|v`J7hCM$l?(VgpiZZMVM}-H2^Ak)S6KZ<;ifp7PIZyX!o0&T z0AmCJ#?xLuAvo+$yoY0SdLHS9ENPMr?}L{KejTAdk1+wo4wbhAKg89qUT`5`(pjsQ{?-NL1zL%lpOj9i2gzD!+|B*X!$aIixtHf-`D-Vxs1>WkdI5P&Ionh^++VADBNi5hRRv9>U-)2C{j)_Dj z-FvMPa7_75TP0&Cw^jy4wO*8>qzmk7Z`tJ)+!GxDuIpG@E6Gns)>K_e=p;5CIYv#! z16B*;j5=ee)gm_%1=Bd;)y9vaj7otI&;BQX()=LrLJu!f{JNt+HA;9w*NkK3=BNWG zLB={Fg*7`4fUKY)%`65RNqi$<4y{M(x9y`MmA<>pS|vXN7!$$%{WLtCG0lCogpuNO zzrr?jMSm!pNKppyAuydSSXWmd?@P3=jSmHe_zP5MW+Ek%uoV@-jd<#@z9VnPj@dj$jR9*Lg8W8+8CzCT^u)}P;hu)RUWvx$m3fu z@1FXNQ*$|PR6UxT{b&Z7`CnofraW97`+!F~1@Loe%`T>{nMDllqs^=lpUMWnRvo{t z!f5O=P}X>$P#8`|+;_pbe4sd)Ncx z3DDWtt#^q?Fl{&J0bqgHv*wA$auBLw4h;AU#@)#@?qiB}{zQR4j?@0?QU=(P4TSo* z#~kI&gkf}6agyGX19Q)sR?6So+{Z!t!yT=EjU$d)gC76FSS~Jfu2;DOsQSHEm!I?3 z?tv%`DLs3=^Y?3S{(Y@#VG!L0w-oO&n}1n2m8-leDhJ_Yv|?%`86cAmfc;U6D!{l2 zBGVEt!6|`L)mCjIJlB7!OFZ^2ZF!^J9%Bf63w?Gx`xjVLLD^C{^oc0#{5c=TeX9Z9 zJy}AjXyaz78WRg%mKQL{8cz512*H$$vTSrHmfqA&%299U-h!{lab9ngpQY@c}o}Gd;qJ6On*NmE=vD zQZ>b%9?mL*;1sV`a1qeGPQ%`dQ%qXGJtVna51})bJ7(Dv^bC#eTn|j3FQxW;$@3|+ zS}arQ)QY-(gpw3sg>3Ec=3FqrrSUYk^YCR1%ho4r;QV zjoy?g<9lN~VkMZ(nFGz374-i@ife#siyeBS4@wkRk( zi_DQBa4vO@ALl7fg>C?8zI=eqym!~vF#8~Q_BapO*&(BPe~DxED3;tgVPalx6@6WR zcPXdZUrcb#GGyoT;Vo?LFBYdQFXVHoDhF^izuZDud4LEAeb?6c*@kN13w(XMF0~!# zavRzkUARz*dfAm%==)P@7x!;(AdUz{;5xi@L&u07$TWb975g~pJMcuz4QrBw&4Y7Y zih(RldDn`dTpAP|_NYy1NG_8}ps?|?yHp@0?!W&p?1VCpb?;9-W=zCf_@5tZ< zE@zb==8d$}<4vK|?h!y{EBdIjU3uJL97XtgoOX`pL6rm!S(?t6HL*%YEP05a=m23D z6B`6y^ZD-s8lIL{%9DclpFN_UDYf1O#bs1kQnSGEy2U@K$`$`33DAyGzkyfHNrU`0 zqXHP#r)EckwmUB3KE>y$yB1tm;)7*az%J9m(-|yy5gQEC^Tkw3ad;9Ou^UF2hJy1P zcgU)$f=aC_xkt2l=4&ghcqH%w+qLFDXn-DH;O$;kx+ji(5zr<_?0-?YX5h$v;{RXo z9k{KpM1-rLk{l>s(O-Y~$d5R?O^FAE?4}DlYF$_K_w^lF1%^D;Yt>j+*+>~?g$ft# zatELbd+vOXd9!QNHqc+iaRQux&(vvU+q$>Z_Eq4S4I?$YW2$0Yg|Pb<0{vy^ac``T z0-Xr>p_|UuC-rCehh&sng#ME!)YV?0N5?^6GyRkPgM!|rZ+Tew{(K~N{7&zz8$54Y znP9mpG4Q1?M#zPzk9{BHqpY~)>6f?j^i@&3XeUJj6~{;|eQUlGV;G3m>H-N+p4>H- zn+#K`3DK2rt+SKCjJC-#lXr0bHs0DO2jb}Qy#utC4>yQtNy%mZBN7MpmvRss9)-|E+3N;QKU0w7{`g+VF2{CxR=!1%Nfi>YXP<7dtz3!ZjKMJHGob z(Hm*Jo$A33xv6}FqkCOUK{sM#HWouIA|#J8iJ7avVHWRKiMv5aSFx~u$1LCUXS8B$ zf>ag4L-rCwDfcu&L*NtDTZDD>W@*VHFkhyB zvBkhhANs2%-&C(9)?#V$$*ZWvColXB14$ZO&DGwY3$i%=SUZolS+F@@SpH;>a3zmp-X-X44K1eqW9US=G~bt6s09-gRdfk(+$iV+ zL;C|>h=ph2HcI_m|F z!w=o=Go3^rQ{J#$uT}kH49zP;58Oz?$nAck1Ds!hMBhVPiE}RLZ{~dV{LI&IlLVF0 z?&YUW+Uc|vV?X#@$DcXJg=v{mM*q5lWzWO>ycTRTlCd~v5yx1v=zYz~(+l)_C%|23 zyrMl;FQ^aO;_5DMcFodyqdG>LaQQ>#+vd_+^9&z4@zq6n$sl*6UM{%z3ojp!$~J-d z;q&v!dg(~cj90)8kY7=An_p``WxVLj@+9-u=cJUu4Fl4M$5a>p%6)5=wjS|WFwRV^ zFa8&$>@z_}9=xbXEZ$cCw~G?Q2@$p^i&v>k`{|kI6Dr8>4^esB%I*n?*a{^%mJQ=2Q6^_7}fU^wBr4xW)a(lu)}z+XruN*@bBeIeW?&A==LXNy0%yJ^exGuLx3>} zFu3NBAqgs-U^W{#34&*Ulrn0aUUPFUkMe_BeMF*qOUChMP+cX>RgT{d9(^ArOM{D} zerpKxiG9#zl3N-Fn;3MC?4}MC1ufy~yh%GlDBZjMLu`v{b}~B|laSZQm zYujnP3;;JmI-{0HsrBuY_pBB@kIo8s{(&F+3Q$*Vl?2hLhx5mCIcl+vd+cCCB_F29 zZ_B)SDh0xd_CD7!CO0fRzT~mUrHs8xhtNy-V|etyM7#ksh24GUJQqP}!d5D*;wLml zNjw7H7f*pwGN~?sR=NnyS}CnEgpvK)sh#XMx1%N=?^huB>tY!-=`N`_IUhadYF<&) zUYXF`(x$L{OS1HXs${GCpW1!rnq%dLHs=(f`9qgNc4x-*G%>P=Rl93yNaBQ`x1Scg zukG!Det0?Bm5%lJ_XJ19Rg3AljD=~Q1`{~RQRl~R{yBZ4JR7249qxYv-$uH#Z05?{ zky0oGvWG+h(&$I!>*7h=L(;J9okttt1(8W6dv89{Y6M=_n7fUNuVIcbq5o)bt%hut zT`_(UccgMlwG&(*F8RMJYQ1;+zjPAO9P!!CebeoEbk6g7lOOq?+Jkls*>d@b;`*8Q zAk)9)FE}vCq5FchqKPlIRsXl;g&`iHHESCYjdez?ATjqDz*4=s%OX{64F25Eg)bjy z8@qy24f)~0zztIJU6lXY;}6R(nK9)s8RMUNX^Yy2#p}v7iITZLL594 ze3EccFspE}Mhf6zhTE&YK)s1iyjcC77?Tq{R6e1KN)Y~Nq3y~Mar>SAF%2XLj#~%A zJqy^MHvtl<)p#?|6~-hmp-@sR1T>Zv#Gnaxw-#2ko7`s9WHZJZB^IzjxBto4*Y{|6 zo!3D(hc+?=-ye47!@(kCB@+>Kmqx@pfjn%Mn-axvy|@p$L=_K*dJ*d-jt{BlVmZ|e z^Md(UliK{nC|2jDdf5nt)v!HhK-pF0)m71c#BpcAQs00dXJv;mfNXK`v0b<%Vn3EH~ zDc;#6+q0h;qyEClFdrqV6iLOPiX22KX6yI*h9FtgeRc{PE#hhnT!5rb_rDn-nH=nD zyZyWCubDA_3ptMfQy*TeGww0}FSeNssy8eJWDv+o*pExLk4#4zU(s;noMOcYxB%aL zQlv?v8bJ?TP!CLjLd#7khDzB@rSoTr$0b$3&&KOWx=BHWZ$ijbMfC-|mYm~O$NSq3 z^(Sq$>^RtvJc2SnfV*&^!DY?M=4^FwA?=gJ)dI#@;gmCBiWb-H=IENjrSkE+BoTn5koF z6Hnnt>C^?7ANS7zpGVv=*7Qgy-_`E{4mELmWu@UX2u^r8eI4&!T)98wBXr#!ZAJA( zE4v_t;UhGA&)1MVoTR4VQWbJShk~)bR74f9L7(qbI6^udpTDI1gAaAE{^<*xP!!PM zCtjF;m<4xwj6+QhGm}C}OkY4GUMHPaiT7EuuqaEAwlNsiH=L`4^Z2UHpi-wCPl|=Y zEqv}p7TG-&fDTe7GGcm%aDmSa498ZSJUT%nor}L%Ct9l<?~nfpVGh*#2)7N#h(xIoRai-nMjBrGMs3 zB~kHWBKMDlH=IwkxS=yaaxyGD3ZqKc3EEpFb2Vxj5p}qkh`Jt(ceT`P+_f}j9z>3V zD)&9YQRvbd{E|eQ|54`LwER4}iM9ewq0VK%IQF79AxN%;*P5j>ppwh!@`W`^c;hes zm;j@)Xn||mc7y$2pY*1kxd@y>KmV6upaM6cH|%*NbUujZzumflK*?l`g+}&y2}*eR zB^MQ6V7mz&M?}hk={*`Nic>P>fR~oqqTg(pY`)N{XL#T1W#kudq_9kn@Nb-3AjR=Y zw`{DT8aBWP@OPBA7?vD-(%0!73+VY?I$ntA06N|nfeD}LZn)zUOU+NlkZ`CPWi7*| z4e;P^tfS^SC=}~ZP(F2eyh@}DsfeRQ73tSq$1_9P%odi2tKWGG9(}7qa#|6sW?Y2m zcolNWj##B;Xa+hYz@IDUw@19htC_1y)V>ikzrxX@qNNvFJ}<8o%!p-OPyKvgClpjF zL~^Fky#D&l^^yoF4pB&+BShTau|_q>Ze~VgnPQKMhrIZ4kQ_d*2ztc_|A^#1jMNlQ z2IZzKHImMfg?Wby18N5&W(gW{z0L%?(4aT)<;(ttP0Ut%zG4qi1qeGB%Q9*fn6Z}G zonqPO{V5(NdNOL7C!2q@i1N%uxVN>V{Wqyz!!?v@ahknZk=4T5y@tsCU0KJW9K zbKdcd@s06~asF}0hI`*D=9+89HLp2Hl$wEZj5E{R@%*WLRV>z~HRg+AHlDR0N{cn( z!L{A=-OXUqfrqKwm+TL>a@~sAF`}1nIE8sALp#1uf!fI3vNG&CXY_gD#$*H1TPEZ` zqlj5ihKZdiJUbfd8|suBl=ZPXGQeMQOcYLUP)#~bgAA&@4FsYZ`*C7>m7js*@z1ND z*7Eb;C{d2E&XB0RV0xCuA~uXxe@_-|=cVNvtXoA;$sZFhmCbbSw6@+w1QA`0#|dB* z!MsivXMN+C)_!*%0c8c!DnYdy{NjwG*FkL%*2-sr)Z3SjS#MF+Qxf!%>G*VTV0ZCv zSCAF4=`#TG1q~~GnY{|GqObjlH$ZR&y;7M9b3;4p5Mg(9?x^KP*h#5VU*va^^8i2< zs)uBnM#_2h2x;>g}$%O z$nWVE3~tG!!ht1#z=kGA?AR6O@X9cPZYewYeB{vwFg0fSpH#1t5Vkh(+Ky zw>GVjgkSpVqvrpViQfb9$?8R~tFQ}1R1Ojn$}i`F$p_ecc_$3CF2@M*P98^+ir85l zU#5-GQ6%VSeo%x`zB}cApXtp9KyddwtP&Zki0-Kd02JlXk+-1HvE#7aF1t*lAT_a@ zz>Ti^Le zS+uBU`gI}1qUFZ*k*(f%~x_PA?J=2ueRV6w#bC zB7^jO3y^SzCmR;>=c(dX_LrG)IR*z7u7f>sB1ax`eOXhtYkb(6YD37MR_e1>(+k*x z`}p5H(pI}V!3y*9)_DN{T?4I?tdnT+iRXMBjAj3G_jf*~(V=y|q{w*_^kx;MBn!hK zFb;zN-IXG&@pBg_>YyOp`Pd=6BhNG#{?oNuhuOWPhe%tWp+mr(cA z`dEYYMbbh^!p#u%vhScLj6tXCCJZ;De)(F<>D}_}9MUEC863&SWUg2hlr-*`WpBym zkjr(V%}eqlf=MVdVf;^TJYXa!I3evsV*W<23)82R3f8$@YtON}_*e=S`kDHhI|PMh z!1VaiK-Giv)aSFEDw)hxsrhA+BaZ=^Fbn+HDDQXL5gjK9iy%pK9<8EX!H80JJSVOVh^4J|F z6yB+f2Gx*xB42V24HhxTWDfRq4<*?h#tsR2qrkFB#qKrLn{0$X0kkiE^elSPCAwFS zA7I3h37KbIjJskj;4?1*x5Dao0ZfMG7x|z{H<$w82TQ+zKRn5u_5y?;o)6~#%yr_1 z5D)zx;#Z=2S9IhlYA(n5Ag0teNRZP)Z&9W^3HbugTg06FoE(59(BN|C(CM4Ya$ulp z(xpSg91m@bC?xAIzE$Y1-YbL-pZu`uQO5BT_H6NAUQooQ%(k-38csw1%g|2wqXk6fEe1`d?9=n?Un^)e+^lOf2q(uPqDeE$GCV8##PXAHBEo|F8`x{s&e6SspQDyVe}rZ+%~7CW`QgcwS*hoFx>j1C zeZw%b0Cfx@_o$d;M6kSIytb_7vFm)_-?EXZHY^>Dc>_%B1lpS`B zQ(Iptj`Kpv6u3;4&|GnoPk`r5r=;IjC|Y~c5cK5|N9N$d9B$1k+w`k2_7X$*x1Cje z6g8)^ym0p(%)!r>?-s#qZ{}0X2fbN}-v`BtLZ+88cwq!Y0TJc5bcI(REK(wNF|kF!fvHyggv_NDR4Y6AkQ{o|Ly$VJN=cUM=ii@ih9E zUOK+}Scg^MzCHMiVt9cc(9*r{o16*iz-nr|rg6LD^{yeiJxpsY>n=-58KGod{S#5K z7Ywye@@R!yy#uPso`~+2pRR>Y;)e?~NY2>1^+etdObq(tf`*i3L16w-LHgKl$nN#t(LXHRRf zw2C=>AFJ4u7^MxRw2M=INvo8UHQb}Q_8R+b;s}}ZlWiw}yqKB#qf}V=JWtS}gbwx2 zAxN4^;p0MebhkMW@uJKsO_*?ytm$%12*B$UWa5(I9cZHA@X+Jf8BFqNfx*#UHXJ&H ztGA{*8{bKrWRlQ65(?iz?7(0aIu`-Q`K=<4R&O z6qR&dkKmuzE~z^*e)HtOcD-M)ukpUOc4X@_hv4(3i>${Vz3iC;lr*eG4kF(mC*gBT zKW<`V!Q!Kooec!@yAivul;&ynP+}aWlhfp8zM))wWnZE}2WCI{wwf8q4!SHiB~S(? zTtUgy%9xR_wznQVqUB|n7&`LJN!6)zBf z0<{_yQw^YR!hkwXsY}+2*!l*;Dtoe+6M)P#Bum+GCPv;+JU)2m_Tf!!3=`?C-+>BY zKys&_@yKLB`ok{{d+^&Jqn1La=x#I*j&R z`faO+IDU^_3@HU?i>zg)u_aDJVKE^~Wfs4Iq&cm;xY$Az&BYDLAa(4#{daT6W>Y_u6<+QYpB`wih)1x<99XHb@P$XT{W1Zs_Lm3Us@QZ;~BGR*?5 zr0MPAX&<4pvC3$KwlGV|rnoF-!F}EOKQ-1eWCWDI40Qi_&B50 zDm%kwGpdd;^a(})W*<^2#$Z7v9aebzh4bTkyoVRZgmiOb)Uj{<>(K+Sm)R5#8 z&=8fDS~Q?BD-9>MeFK!PZe596`gUDb8lq!Yr-s@s^wQ}lpsqDt_*r}e2O6b{DgokpT) zt}H9dl(DcYYbI6$!Ei=U6`%6-3$u73cUrv%_9J|O7b;!{kF2o#?6F>^eD&~qIrAKv_Mq%^`xm-aqbL*J_kp^6+s4eS3zmhe$Tb#Y6$1jlGno0 zO!P``bD^_0e>P!4(D5mD!Y8WMCCbPH;ILM8kHFl9s&K4E3?eiS*S80*ki9FuEx#P~ zES6aaOOZH|@SREE3gw;V%1EZCLT|{jJ02%mZDXMGlUsQ^AR+lWs`>N)iUluWrU&HB zMWzV8bAM1M-WfOkrMujp}7~U@fBYQqO11@(=>}Hp-G^|Es1#@Ae z2oEyQFv)Zs6yyv#51SP}DgbAAa3f1Qy90O0UK+F|Z2Oj(VqU#B*PEd}nXlU3ybwP{ z7&dQ2Y!7Jqqb2Jxt^tmmP!c1TyxL2ob`@q|12=uff?FmCB|b%DmyT6jpDb1-%hIDP zhuT4iDy=P1<0M5DTA;0rRZVt?YnBIP2sSB43p!?&x!$^* zom#6@zeiADY!Sh0cG?B+vosViM<@YOZulm^`wU}MS!kSH*8JuuQ*X48VNa8N1dbME zFM9~937Y{5=?jPc9B;GPS_ELm&8_A-ZB)ZCO!UG*4H1zkXkyXEZ5(XC}8Z!EPGsA>)( zkTsL15Ljn)+w)hf_!5580hA#->t7$w{2*wkbKlEL50nCXi_zN+pgucEfD@B$W%Z^l zBh^n#np3XPBi=|+bE}L8kgzwYu~^CO=49CdVo0rxTq?ZooLcn&*wmX9Bkw>Q47WD5 zubD-UlP#bmXo=f^>N_B&pKE;B9v1VQ^V6Mfo;!{oE&y&x#}e11_y1PpJ5-_Br&6_N%k<>0-(u`E+CX9goe&R(IIz?)SB>071;^6xw17FmPVb`*si4}5F zD$0`~dstn0<^IS7LJ_n4Oz#PPCdSIGqAd6Hjj50RC03p7T&KtqAzy852WENQqV!z3u$&T_;3R11Hp&v(SVn6EuP1({aw7l3Lx}{4r6}4q1K@@1n{!|0$)Lpf ztm!x#7777{Q8EyNoxrJ+19b?W{qRwm^zObirnj@w%n`xBu%aD!G)LrhX^jhjEZ&mY z4}8QS2MV=O_JO|Bu28U!G-MxTPB0mF-NI<>Cyh{A@N0M(0MJfm`Vcg=FC#IQ%#piM zNPhSg5mgld@|oCm*y5lU?tPWSoUVUE|IlzkMu=<|Q-rl$7_VvJ^GOY0>@f?CdF1S+ zgt5yoX7MqW3@R=r7q}L8O(1Ydvy#((d0?iII;g1RLeYc9!bD;+1;<40dP2~DKp$XO zsNVI?Z!wvBW7QB<^GE-{xwK{uvZoRe8K8-j^+PJKF-Q*_L0d6ds3{I9#-VDT7C<0Y zv|=|_6j?SybFh*=3^B3IG63cR$Hs~ACuO@>!^Oso_frjs$G@DEvldExxBwiqedGCP z@vme(379|UN2rgwS z=gspR60k9)QNEbDX2d;;V!6H8M2Dez$IJd(wXH)Npeg^*k%Q#XvIYniOZTmxFS)n4 z3tTSuFwy@AUW?ED1ySGbKZF}cSj~{(c?C^jcPcim(EBl9 zoi{py`wQx@)j%iVBuIFzs?&hqqk$k5%$(v7me$5 zlWPbq%8*UMr{_gh{Ms?JITJjUZc$Ap<8uo|Z~nT1z;G5E(Y*!_p|Z3HWz|L@$|CCA z3MBrOH=JXU5S=8u{-sU(R4h6^xi?FNaYtsU>U1VR?b=m1tcgD6c`47$cOP1SBE<=Z z7maci@?s97yN-`}rZ&Fxzga-P+_PZf9oRv`_nU6#bOmm*8DX6*0T_TFI$J?4N%Z&! z?mi9MR((KUmab|c0x4)B&o%gCo-ejj^Iebq{npazgmeE{K#$lrFly4QpJea|ERI&F zeNe!S2P_=5T7>yvf1WUsSE_ysoLK8g?Rt#i|M#P38XW+|J*hv6om(P&C>~=)s?s7} z0DfY4Q+Y;9?IU%!`yd5gzA(3w1$%I1{^DJ|=x2%iXFYSE@8EYqaq2c?E}4@EaW?i2 zoF z1y{^`C@P@_(}rtOA^{2b;)?x)C;oX_=Xg&XWIjv}r|2TU*84;VHNSlBJ$<*`Vw$(8 z1A0)-adpqltbcip5A+(2sS531uTeywG5;(JPR#>IwShY8yQ%LK+JA@^1k~2P+nvnMQrkdZL9*^FKU932Y`FDyD{(*G1i! z2(5FqzA1{bYwNQ99h7MRo~WoAfD56O<^B1vU_jUZw!pz)yUk@x*P5Qt%TNAqs>NUQDA_dh(4X`E>U`^Ce zKsQQV*B+Ce-`fMxW7xx>vc;$G;J<1?IuN*inO7=7bxd;O)eDql#oe&~@N|4C6^=5# z128)zLx{^L7SqTSPxn8~rT6vT{0o%%-;7iURAYe$Dacet!~Zz~|Ly#scYBOMO+Km|H}yaLUp~nH8a(J? zrvq32dk+8Yh@DtLW46t?&d`2Lb@Hh(H(fB`hr~(fvkHFKq``10Ua35U*kN|uK*}-7mo7-!bpnq#K|5aOCAPsIM~ zK!bvdLLkN&~!xr&5a7QhX30gpv;2F7FzYBEF*1%&5 zy|IQNFf8ydLA&GgS)&fC`}f3QoXIH-bh$xsmMpgr2(YUZix zc!uHw2w}WuKvNAV(1Seq9zgkR%P-8lMS~jteh0T_`^-twD7;HIz5W-X-86 z<@*oh>8<)zAwIkwE!=U6J$@+bHdX7mEwIhA)utu4>=5IJDw2%uXNUFhHQr+I$%|=5 zDVpff)^M|Gy^$7nUG1gdXm>R6&5*ro)K z@$~VHL;ZD3!_B=@A4Ssuit6X>=FuGHNuXDJpXat&Grht7-o||MySwruh*b08lCET_ zi1!OWNtKIbp4iHO26rV>39;mIby>31uC{;199QV00R^p*aak% zD>vl=wu{Nrb`I|U;NVz6EHnDQ7*;CEE#zcuxDjSU)=|&Ukm;)@1pXBKy+;NvlN%)q zmHP!`bV_#^7BanZj$N$d9Pzx@br~zQQj3+ydclPt$BFsP<-u-<5$DGBh2Y-UzAV*g zP)$hM2I5>Rk@0>>>#Y|>=5s#%unA|-Tnaw`^=#aHPMhL~m785sAv@1r62?G%HWvG` z)w^7aEYyM^a(AdXFLi|KYcK1_#q#Y>$EzpDx$4EJ7zA9P?)A0a*ph7IqGJ~v1W?7* zj~>|0aY1bv3IR5>tfUr^s#<8+X5BzGUkU0wjGKRQFldx@aMy#*SslZ8iyI*FTDl&6 z;my0fZIB#(I0W@^46*2l7iPYZnzJM)VYp9%!1YW zN2T6Yoau)efHoc#&h|pUuzTEGEA{%f#@$Y;Y(ath0~#W#^tP3uVq4H$(Y^sC(ddaO z3--kr;AajQ4;C00RYTFTwgQ9ZEZ%#Rr;8ix4`UwcchayfBK*1}b+BJrBlYCy(UXM| z#gD`NPBQ+z_1mT6Ch0EO^=H#7z9;*F!McmNcSo7)f9_*zOMId2DZ1`(U$VFAinLqzJn^jo#NM#5nXzLjE@l* zovuxl$2N9a6d9=)OdVvc(VXpcxsMY?KOV>y+W-h%@j5mIKd<7GhRvQ3ac9s#g-0zF zbUVA1&){%)Y|wq+wE>E0(I(ggC%=Ob0lJNDR_*K#iM$(`)|40LG>rV70D-2pDS zl|KIX*ln0ZPS5H6_efdKOb~ndq#MJ(?E%TCTrzTUF)@93?eJN>VGP>^WfDg1X%Tjr20nuS3Fp`ZTXc#hf9{`Oo@PYoN8x>&0{! z=$H~Ik~97`kep8qN+vQ}vZl83fVN!B*!gw5l+w{{!(0|4T+Eg;{)_mZ)$td*D>11- zEno`p2H6XYIupbl**ZaJn-)}^eOj;%Z&tX+np-`WZAZ*u7Fim(nVwTC;kz~f0*NyK zL5L4JUoWxQEyyv~US9`Y3PoC<6xpQ=($T}?BX?LOGMvr+ z=9s1&_u2Ek)N3Hv@MN;zre1KkSq=M+;*Tyb+Nj61au>Crvz z*c3M>u=}%z8|^!}k}U{N3$kb}%eK8#y}$>en_?F)Lp1@Ndd!v;&DUjlL%3qO;Y+vX z*mE68n_LE#85;ynK;z}d($Axg6%)3~e^elnoOgcc`o!UM!!uuiz9lRUYdWUd?~Osu z8Qd4My z*+ttIO-}M{^Ja)j8(ZT15JkMMlaW=fN8SsQk2Kuu79#^g?EsRqsAWqMoH)!jP=8ha zCMTe12y46AI(f;kuNZ(|d<=lQ&Yh-vpe8f| z_?V+rZKEhBI|4`i>(2Y7%t2@BJQ7kl72{>Y{#v6(+WrrZqHm3tD2}X{u2$R?B^@4j z%}m}dCV}4HuqYr_l&|P@`Sex*|J+G%zr@CLelM_jfSyHzOHP`fo@wXl2oAN(JxwTt zz`c7dUmrH`iet7u2hksO<6_fhh0!7tq>E@+c4|dNPiL7QU4H&RlfV0`mmYbU`W`@4 zus!=RQvR_anZ8xnKGkt!PAL}D^MK1w*W7RT-T-FCd}f@ohPC$wpb{xlWapfY0bIbt zj-W*SZH6o8exhRWeg~9t!KK@YB#f)@!3`4ETbv%zF#O}>p3?KO3R$=3nXVYu(We6? zRsQSvshA?5-l7$T+nf!qe1CEtN0fH=50O>JV^BVLnn12&-d~f`_(l7T~78cKU!~=^pizqdHy>LW(V zZHLD25ApjaP-`NHxxX+AJMM-ieOMhVObv4bH>LE_WTFbE`WDQSbK^aSIY~Kx&B5qu zR)x{1wN1Q?E>oaBDwvo9K$WlUuTo}_<*9ZDI!EW*)p%#l!^9z zb0#Sc&_#u)e%+~+)!gD-t&`3%nJ#L_dh~%ClID-yAg8! z^G$TVJIXMd_jjPV zm#7yP=N8)oBe0{sBv&~6)ToCnbuQGUI#n)%UlY$n-UpRLyFb@~bz6>YDsa537sYNG zUiXw+uOOVg%FU!dN3*^(@n{jQMS%yJ)88uNHh$pnwOGWT0Ag56vRhO#t5{57dH!SM z;kEm$CNPnk^0BOSY#8Jji-7`VbatxFTWhi@nO#Ys7<^d1_4#6#2(Tp)-wZKbztc?I z4$1$_y6@xK5J*-?r`RnU!^IrZ5a1CLnOhVECeJo-w@D#4_9)du%l2`KPM*>`-Xy_O zkAqU(Lj&ANLAu3+#@e}jiH}ccRHOA)G~SiquON!G#x&T$>}5`8zn#O+j|;gp(Cl|n zmp_I7Tn*y;WymQalO#b_$@hiM#L?24O`r5*;KR})oGx7?2L{DEIPv4LG_5=xkCs@z zVY&k-n-p%VdPf8%oZs?=H=&X}Y41>wq9Tj4`cRl*q2iAG+DNz*HYSO~^%pp?>HM`9 z{3aY*-qpmEfZMU7(s3iEaj3{RRG$CW{sjlYsDRmiqt;&ZhPl~L|28ppiTXTekAkd8ALGqKc`iIKNx8h_)NtEhOfAD^Em`-Rzug-s=}5+A+IO$_X|kqvs?3L?;X%JMvw#Y93TURE z_=#2G2Se4@5)L2f&Z~UFOEy<*vhN+Deq))_H{4IBemeTyV@x@gbMqMoFO5{A_WZ{r z0+lMK;uyOwi60$TpfG*C&ZR11c&7;AcR&@R4_tyrnt6j=@q!mk559O~WY6Bgkcwbv zjl35zM$JNCat+1up6K^b%lEob-ejp*WVi-hRK$n!IinkBzIQH%BgVy;=WWYFN=yI@OQ6oJY}u5Ud+Nsh}Z{@9PUu3J7%BagQUASqkTgco`+TNWi+pb{OwLJl^06Yh`lhaG^ zlPjk7hydtHPynV50fwK#pIs>(PE+$;21Hx2KzZW$fxO;9kgD z0YSyW@Wgv46i&Xgoj-WC-Z-q@C+Eun1T9jZ>{q_Ljo7NtjhgkuseDB~d&7H$F*5g2 zG{@8L*APlsDj|_UEY~af6K6Wv%183Bw1$guI^;4CluM4c$j*kAjN|voB^&;0CR-@O z+5dx?5ZNTiy?y6->a1-cp8(GHZ0;Yx1YC#C`bS^#_so%ktZl&eY@)bo)WP}ba8!vw zB@Z^&9%niGy@(04fs~dQ(eas3*N1Rdk-0an<2B!lt3VKaIo65Lb~{pp;Cfm9SI3C3 zF0rBbns@w&?$1)aZY=O#DYsOErb?8MQ7cBVZ{pF=#8#x@Q~bAOD*b}qR#uT`N4N~x zx-=I~3tTA^o_hnaA6>}CMYLM%74HrW6y+vr^3+vgC6M8!pDS%7l&Nc!@l*_|O(KvU zOQZ7u`u97qwhVd~eMl{W4O`!YQrak`J}US z`>-3F!b5-J`DZPWRO2r;-h^2I;95cW*LtkLA;cHpG<;ad|4PR;^#znDlQ1VYMl$PV zX_38WGrmc3Lt#ZeKgZMLd6Mhtyn9crUK9LGpfUDKOS+sfbKJSMl7?v8nCQySS z;|oD7##VxP{k{r&P%~uHZa}=j+37p?ICW>tSr&w!$jbrhV-{c!!Y^WRQDz=K-no8T zGruL_hExU{u-Ch>8oMpd1wT()CqnP zp)?XbW1MVvCSTFUiqG^$fykQ{TN(`)s`E<+AXlCeZ^NIp#oQ&~3T@v64a&v%LG!c# zkryXNJL`b5O=Zz_=hL`qb8n?w79##VW;!Xf#jq`OyiAvD-Sd#b+ZQ==x+R&Co%Ja$ zWGhQ|=HNIhe&XJz*A4U!jxTKe!y4DNP}JEmQYeD~4Lkb71I3Tciusxt>Q2P?K&q=f6^OdSsw!k-|F_$V8`m|RAq$2y) ze*7L_Fbn}dFIb|lm1CwX#a&p_7fHyWLaLxbPm;oM}Vo-38Q0OyF6ryerqTN~Lp z{!wO+OM&J2#>qSLoJgn=dv@NJNvv9|2qgA^c`|(ifS}rdLAb)ZJK-s_I#xx-s+1d+ zBLh$i>p(y#DzGhQ`45)$lKZDw`R;RpBtjsoUiF=*R(+oUD{#}jRcHg?tfi{}OsHC6m#!WYZi@W$25XY9o{z4$uw=@+T+2p`aRSO?vhWe*| z#XumpRLj4!9;;;BB-tgq8U)5spolA<^DjRi$hb915r!$vFW1A5k_ixcB9QW)ho*zb zb0B{QtK|=_IZQiF%FmUkhI|vlAhtJh0gW-pHP)u-?%kaX!E1mX&|lF?V!&PUSvAd1z=xSWeshwMwR%#^q%2`(PCTA?K?K1L{Bvucu9o032DDO? z6dt-Ixm#S*W{gf);4(XT^u&+Deq@DiwX%NnUls}pbF2pIPvacj$ZtII%r;jD`3x?n zA5c+5Tv_| z)w>CqW`MS z2;M#OuXDxE0|Bk>IQ`9)d5~#bx?$HL7}Crs%wNX2!@gTrvucJ+Qbgzz%jc}NcVw_P z4`O@KB|E-FVg66`?t)*DSZkq;n7x@4`Y3+tZw#Qk9<1(@{MM_rd9kxPaGO)&)mXAds}LzS6TbfJ+x;n>dU%5 z$yUv~fOqpA=sFN#RGyOQ%8dQ3?&<@o6nZye0P2o>N-?rLH<_gv5FTO-agEH5pB$G) za?T}-1%X0A17zY67Z<>92WfQick8SxHNnIF2I1|@h;k5IU)BHYj+CG$mKx2Ltt9~E zI3g*%?If-bOUDOP0u8$k0&cH}-`>jS=SnmHp5`=kAH7<{zghMm(}2~^8=$o1EUNbm zJAWpAO~E4LhCG_OtEp6@pPpk&J&{LDRb!c432nLwDLI8A81r!d6-CHkM=YPve4oF` zAo?j|0CJ)RwQ=jpunGj|Y>t)hi-k(kGAJwtH&^*n>O}upu`dOiw!cTa$UMMirmk zmC#yv6Hvx~>_~X$dwQe7E~5^WTCVb!ZDT>K)4KKATLgPoaRK%0?XMYjoEoh92CV0X zn4C3o5n&;ZfrG((a=NkhGfPpdUm6WK)kC;Cjjx6t^!MOF3LqXC#qN$j=y?Amkat}i z;?Fez>|7y1YM<8oOV_F-oL?=Bloyt&6vss>uB0dHo(~Tuh+@QO*x;vZuazWv=B}S= zUJnNlu~6qtK8skm!#I#hT9|Y`Umym>X3^%rr3wZq!3R%pj}CT9yB6iH!Gx&-XuAYt!{By_e!b;sT(a)wf|DN-yoZ2e67mzT2 z?mzjJ{7}8T3<{mQax_0Zj3s6@^xH041E!m%Qnp%{%4#blg~x!2zY(}6_XDRLGG{@e zI~Uk*Elwu1E=JrCoPUu$xr_AzVckNp+Ntl@uUKa9d63{aRHnU9+)BOqVU#sHZh?0b_%-FWfoO&lf zAewN~X0~NoF9y>@7blC7l1&8Kp1gMeIhO^o$oJ+yU6u%Idqj!^zBb`iKqG~ z50U~Ia;-tf5R!AzfK<&CZoIFLgT`I_(+@pfUcRSMCI{dllb5)Rf<3X=JBy6vjr(&x z929~Ak8Z6L^wmeZv2;c;u<*(e_RRrvLG;!$~IUimu z!L)vz!n7M6k|vDd!aV73E9vIxG@O&Hi*k!MZOZKX`riH%_XOjyxegpjPEMQOuElR9 z`G5Qm7Jz*90WLLz$e(g{Ds2DmAD9L3)n?{I8UE1>e=fuy+kUEo{T_p0J(2a@zgFvC z|L9lP?*D$+z-jc8>O4O(|8BJZd=?xHgs{9k2{ilZd_kRiI z;xPh3DvhmgH2y~e!AS%IVV-)zcCK_G!TLY;6-Hei^4DIGVKlKkoFO zzn~Na1JV7KZ1g{psK!S?qDDpxvU)%{>O1%0Jijsn}!)0)1@4<==z!>vCEr*aZ>S8Gwf^YFg}0#YVym zN5}Ym=BzKbM03g#+*iBxfg3LQ$zPU#?;%K-nkNJI)*0O>@8MtH?_mOY9VQP#doKQ) zyDxqU>odG7KY<@Afa=-3}%nj)$^e9bI6Tq+!)3hJ-*6~^A zzJCJ~+^llfJk-oA`*c4@*;wbxgOSBw0oFp=%TRIrzfPS;87c@e-+|~`q3|G!aaU5= zb7g{A@a@gWv7WGaQIyS3c3Vrm>`&A)UO|^I4vn1uN~>Cy?Lhgn(R*O^ubNhX|+x@@dg20C>y>=zz>q{jv!8+eTz`jE~LnEd`yi{qvK~E`~(8_ z1Q4@|0v=K49np-48~}(Y0IrA>$Sj4}~XUp2P6>311x@@c0 z*9mg2KyC#}M~t+m83bbij4C~jGO3d1WssNZduYH9TJn9XJH^jJAu2H$e)I7?Djp~f_ z`b`ehWX(qA8CU8y+(LM`R~G)U81w|L&A*Un?8odwX#CJ=nnAF}ZzJpt4;ss~Ki zuSagtMAkBMN@bhZ9+?AG9JnVu@W>LG@om@kVmEEsrw)VbEfbNxArgD7Umwf^`uD4? zU%~0VBa5_gp}rgdj>)c925(xb)d)k?tEtad#{w6PX%JVSuoW|sOdBX6o`OQF=`W5f zdRManP@grkpjG&8DhTxbXg4n%4R6eBaHzvq=At3`IuzlU_QMRc;b@bf{V)^htNCiP zHVP0i-fm*Yj?H4(RH<@Vng{#{#4Q&05zp5_xx;jf)tAdMh`#LXg2VCFrGy$=X?HMp zJavPIs*O8`_!({fgpBqOdxh9&i*RMf{?aOC6}e4$c!EkWh_~BZ_bbHwWVhJWv3l`j zM`z#=r23vI&Vi(XBptX5epq)$PTZY`dcY2mE9K;LkE87sDHq>|+8~ZHBlU;uq}TWY z&ik3H>XR$IbETB3z!gilJTojR^*r9XD1X{S+m!E0@7O)11GS(B;~UC;+}+iEthHX? z@b=`m_gM6%KR9!JW*K$H9!gd)r(ruK$jr5lCmlLXcWq|j6r(ph9Os!^d762n3MtBj zrAm+s$^eD&_hRz7EVvBq-ELLKm?aXsiiUmF#^)>ZQxK+ zq?_H>_C%=U8&pUO0aZ@pU?(H&J&T$wfI?*M;;VRkR4TptQ1*I3N>u51#cZ!9&wlrbaam6 zK28xT-b-BeX9L$9mxoYs=a;}cZ5;L*E2i0ER724aqAef1a#sBrNT6_lSAZZQ6q_t* z7bq5k?94m1NJrDmyN2e8qHk_=V_GCp_kX^y>hp9>o_Z!x8ma+$LcG5wV73po{KNVq z1oSH`F6Y@CKRwQVs!CTcQ)4% z0+A}5U69?o(T!@~Rb#OF>E>waHdp+3Z#oUDYnfifKwG*Qru!}sGu$deEF;)ls!tknj5 zx~~u|FdZlkY%tX8cl1f`JIGm=o(b=|xg`MzsWqsAcgcP*){1EHN{KG}tiYb48Xz~0D(cEifOH`8&UnY9*KTb z4#Mc!dfhfv=KI7P(mvZPc!#e2?j=y?U*_rhPnvHKZ=S3y&aIS=+xs@4lg3U0H2ouG zm(<{S#yD=-58UjFI}@N7Vh$>$wFr*he)+LRpcvs$g$sds)Ki?uzuf3niUo+x;8Kv6 z$m4$31`O$I0`oDpGF?0FuCfQ+3zgfEb8%mMV%DmgtJ>Q>@bI`CY{RSfm*}4zAMOR( zf6p-(1zCo>&R2&Z+L})i4{}%b0PzF$;sAVnh&l*M@MG0gM`1K$S*)?ucwkuEn(dDF zkw$vqZL*P?g+~fb=>)R3S>hgc4w3nC*-*b)&%h+UzJ4 zoDiF=Ae~4St#Xm@@Sw{PK<1KX>t{_hSOrQgrl8b+(Z(R zdTjyJ;Ze-;OUiq2TU00MTx<=sSRc3A+D@%~2KYuI3SaE4cVv-F;9TVZWhT@@-Aj@# z=yPG&aUjK|+*CB?qqF9VMTJX%GoRewepfz)3+#DuF(YQ|8u{zJ?xhzo^NhpXrgE>x z#ho?8`<;CQFIEB}Q*qn|6-heysz7*&P$dU_dQG+#yBqegI#zLxw3^wHF^oD^?eBB; z?xckC+0IFGmbIRIm~BPuSfwli9WBdkF`B!bmojd?NV8HWUDIE6XV5m0_KE1VAg2#c6&r z-LlwTd{&X)RJF7)oO{e$y9d$;$u1oUvtDovqQ1hfVDE4%7+rJ-;9aG0#Zp5P)=R_M ziz#-Toa~WQOL*+@PrH&NWB}+gG*CW>uL*M^twER@IQQBx3jJbWf9~&O)n1LF!6fQN zYd>D4Ux9xXFt(Ck6J59+p)n=<)<(-&axEfzW6^2u@(;0Y)1WKhZ-1<>ij4>Nl2d<4 zF|*(`IR+i(`{>j!_9R?-VO&~pJl*AZM1~tP#p_m)Yle8yB|)p&KxW@k%e_F_a$J!i zU*R61;~I_&qZIIXQu1`GaT?vo0pN6Qeq2z`#Ux?NtM=SHSU5SVIf>w?agFfBr21GR zpCB{D(+{ zb|2CvyWcU&=vLDv!1U1Hg|e%sisya_4-e-YJg_>{8hH?%s%4__ejViaqGT9@q}x>+u>D@lx2x!Mah5Df#M|$YQ>(2EUWi9PeA!Z+<;*ogiWv zJr9G+U`u-~VMWBE)j{d zjRo_C&R6zUyt~wEO9Wk+PrbvZoj1BvWa9o*erq;7v$i><^*D|d)O?x`Lun!uZswZW z0pp9k*C?9PAx5U_p#L=%>Mat>!aoG+axa)mRoceaw%!Yh^W7+3sHa4*juvPQb*~Jh zEgnGvr!VM#x9NGEdNkiwa$&J*c109g3IOA6&xwwNx@OYq&z7PeuI8dZ`2R{l2d_p9VL3!zBrwR?{z zR1}Ob^B?*jD6;e<`g35Ds&%?N1=-ZjNY-xo!;eJfm;3NYBc?$uup6pGgH(~>yz^zg z2T#SldtVo7_9JEeXw1(0eEgStGb-L8pe0rHb!<*H2|4eBCP7X1Bb$a+KW(&f;AWhJ z^Q{}w)+1FZjw3{*sBP#vLWO$=XIwasKT;8AbPtgX!wxN*G_+UVjgf?H!UOej zc9`Y7Hj?!JX~BA)mqicbo8ZyjP|pB%?_>*;y^>?C02p z1?kZ}c8xhdK~Evg!?SBD;$eO=ao$4^#^Thy`Wut;V(RM+IQJ%vqx+Z{K*VCk8Uw0i zgvy6t7(ho->a~8J%C!VU!(6&n@_B#V%_K+mDCThbISLMMjDGO#B>zB~OJ-qrT^V|l zAkXQo;2^GNriGe?jx}bQTv{z{Y%|+C>Q%bYM9eM5cvI@%#y^}&GaWoRL;-Wl?9Ur@ zwvCf9|E$G>472PdKNo%1oqo0_GtvUw?2;R;q6Ei6eRT`^@f0c0i9W|q)NNqx$@l{M z{HA`&W{s3Rrl{nqx^79ZHvchh*!XEl>~*G~jgcn?B+g%SnQ}z5IfwcUMk6zx zaFqkW_{H2_>dKAM_zg#Kh7trDDrQBWBrSHV$>2qvBpQ!+I*$ryd#1_wJHdy*Ij|ia zQ_k9}rCF%1moZ%;5y!)!1@e-(dW$9A$12~k&(Cz5dIJ8(g>3eBy>X&ru_G$uZ%h0W!IQY~4zyWbCF9VaHkZ@1w+O zzW$KfY;Lr{!kgeHe|)?|q0$=&THTwpbNpWOO+FBouMgUh$k6*i~=xjJ6nB3J24 zojcGd-DUTrDj^Sj{WWG5`rB#=QOzj;Ka#8N*{sj&W()KnFOH0&Tq|*(6|E!xpo|T(DGJ} zlRch&BkR8JI)*th0easEpeU6!-pB`3v``djOUUN9tIGrDz}T~8i$>R+PE(8Bwh(f z)+{mswU9*_;X;T=KWW+Gh0&Oo^#Lw!O!YC;z4dr!R))P3%R1z_|hGU!r&rmFQ*l|FYx66VIJB3Q}p35jnE= zMl@hBa6vW4vfsn34^%N81=pKnti)a@;K|)Qr_8ZwB%( zWo!c2!cKld!c0rR)e9%)D?*>> z*|DaxN1X!T7DHM@Dz^o?(d-I5cgtn}m}N=`WMIF*)#y*UDpHvMBHW?~$65nX#m13m znq@Xg;i8dG^Q?^Tmsq@2Qp5ZDPS@8w5#j2EHoJot{cwP-BAq4>V~ltcMVpE;y$^-q zj6Hn#ZMA;H!52fQMoczk4vLZPELN31pk=$x=YP%`?+2%tNe~Cy25{{FEolVRWoZA!eS@5w^n>bp&@2U&i6b-wtGru^4~Bv+o9bbRX1e>9AK4Xk9D42Np`B{;ZK z*0TUkY9Q*qL06Jz_A}Mg+UDs2;cn#xkEJYmEDVAz25QVfjSRvo-jA*aM6TJLHGC;- zMo7#LXNJdP6wCga^0?J=FA)GyN{_rls6N>oigxSA$SL88Etn<&k?Ogm_;~xfliGW- z8q*tjKiM2SHAQp9$*l4|pHPlzJLT~#%~ffgX$eGQVF0jpElmCbm$^_V@B2Qy5M68f z_3>r)I9dy}dck~;|?mj>6Od5a8I@7>^IZdE?C>d<>lwEa$M9faEGNus8nYnkiElG~n- zjt9T0l1(3cK9*phT?s&*bM80h-EjwqDa7YB%>eW=xU*#v4Z!$&F(y|J6{tN5(+41r zu?HEYvKzAMoDq|#`m6zk(-_% z&Hw2BQf2fEoq)cNiSx{X;%FHdC7bVOMjd6^1S46*8ycY*L?@-zf+ge{V2bVqfPG@& z032*f9_<;_&Ge=fHVO6?9N&Z9$pl2r{7wKj^m^^e`H)T!g1O8sTR~4F#lSrax8^C> zv?=73GVTvk#{LrbuHTo_>WzOYy)}k|MEW00k-)T-z9E9BLnZgux-_&&gIid!K5;z( z0jdJG>Vjo|QF!~KN1EuyXA~D!INoGISPDeh7JoM@57f=tDAo(IjjOfDbp(#)i#O+B zS*2S+N&jJY@3sVj!C<&f5s*m;dhNOVL1Fnesz9GZS`qui4N7{aU!W1D&JDm`2&|J? zpC1rf7%DOt$GCqU=Vy=E9=rcFy7ZJan|aV#TC86QMKLWPM{TQZjzbEbNw843sof6g zAjbpD;&A2t6KU8)^+{xKyLi?08<1tP_ZFFaZ(tCwzmJTrb}w8^^Rmv;DM$3WNgxnF z7WQw_Jjz=;y~qH?c(F2ToQXR#Dx;hN~Ec#%8VM+E$w^c9zXf1ry zzSsN|j8?P(JZGOHuS#NHYa@haPC5w&-oX96M}N$6v5?us=Na~Z%zFO7fEc6a>rd#Q4hll*G$pHs2FAbb2X;kC?x3+JTlA~aREPhNL88>oH2`t)CqojTJ&{(HM?|M8vQkAkFniI}=aQ-Op|sByvJ@|J+=s1F$#|LN#A z;jm33(Yz%Ft0gv z)_U@Ur)VUcvP|?9H1nSHy$tsDwvCq=RuOUR#lrO_PufsT5;dUa(HxVRNZE#L_si*f zItJN&W2fQuK6?O7?Y!*|{&>PBXh(swmuI~kOj1GGQr=jOz}XAWr(X$u`?9_CEPa<1 zj?*S?B$L$`>PMi|a0+;DEAL7`q?LK*h+6E!jz;^j*Z-}xPP35HJ6-joaF};KluaZR z{haVSP3aE zOF)O#>IRW;SM{9plUnDupkr!zO0CC{7UvXgQkp*!OgY%qSY|t(Vm(^3*cdyOCpB2; zH&Vqr*`1>+!Tn4rNSDz9ar?D{X!@*%_qXzn#1(Jvtu%P!?WD^cdIG+o_}5HwNf0@T ziK=WrLQ>7^p#)6r{WmuoL|tT*a)r@tRm<FK5g=j#Nl%CwP45Ne+sTyK$h6#4q)HrFch`02Z!ubNoA@5@vF41~uzH7WQD4hz z#~A~KgR1sXxaj}HXS}PO8w;t82txNy-FI#s0SX7EfKouT{aPR)&dUnjTWmyEgs@`fy57!c=+q9A@@++pa%k2F; zsW=(+lZ{?T!?SsBDtk0Va_XmA^IC?8hpMoB!!Et|JYQ4?8J{8h_WnlG;}h9kBHcBro&ROT5LGsz)?uT7#uu69(t?#(|dTd4Zo0B%Kzs zS)bRTe9`{AAZi9J{KE0q65_@rJ1OGk;`>s2aQxtBegc7Ii09{r#J`Eka2PEfnF`_gRRdpY;mFbx_&LR z0;|A(()2>|zCBc`MWfk51B$AZ{2C4Sxrkg%Y*J$mhR29be8)=E`iD59=bGB5M}4>; z-_28u*qg52oQ%eg(HJCCKv2KzqL z9W}K}uw-vVNhtmmrKu;QZTg?mK=uneg1r5XC)k^x4 zw;p(Hr$&idPC|!>!0HCioB-9}rS0m?kxWd)^L6oepT`{K%`G|JJ%zs-TDU6hqA)1G z2R$rmoiEeq!P#iH&@oEcJlc(H>(6siYX_Bm> z*w^b|Cg@a-E`f9Ap)XEWl0fGqXRk1}E9M9NpOxt6}Y%*7(mQl_GfFfIj+CK7H(Sco_E|OY!YjuOk#5XknZ; z82-8&q+4lK3la$VfHW~k>-J-i^zuAGSOsaOY!e=P*UM-fIJzFXaRnpUb7R9klqL0s ztoKEv7QO&B%FDJjAdYX@H8;x0rl95UEHzItU`X&v-{O)e6}btkVD*`=prEwOegxz< zt_R3#YVLkWR~ZGCVz1$XhCtz({n!sVrqeAk;1ql|N0mH^E> ztT@rCDd^e%uwsc=*%^e7<>QzDD-x{?)gA%&x!~;c?_XLvdpL9zK8X_bn1q~$ zlGH`O`cwI%=O=__WE(&o`LdUF*a7gn7MN*a%=-OLGk@6_%3SyTQ=~|L=s%MeGQ-$5 zrHo~++wbdY-tVbk>Q`qX#?AHj%3QXK}%D<=ry4Tj_>x-JdcU1NKC|f&dIh|#k z7j;C-u6T>Sjd%aygO{Btee-4{zY&H;q{;T6AiMC~FGPFS3&l@Hvdm7M%3S72!F9LJ z#M&|0dXl@3gaF&oOjNhj%=V|zXxo==Rc9rg7N3fGMEO-XF%e+g=SFdYQo_$(b0;jM zTrqrKS|leTH1UMaFkJJ^!zmCi-lXx-ceAna>l7AH#@Q~4-`TfzI~M|Z99ww$s2}YY z1Ai>V!KrKx^_WraAQecW1JU%B!nth4y`T7;cD3Wi#k>cQB*6WiWC8-uSQ2(;X3yTf zkGwu?+z;3FA)%u3#4`S*cJqV!`w^Ndk`oLLs?9$5hst;OJu6hIDYhX?eokX{3L??DxKJ1Y+Pa<5?r(R`MABp@sBAR|IKa&`q;H7(#sZ@}Q&yZIqA$8PjjiAWyA zMkD@2DIybokr}swuf@>&c4+2In~1LFS#bnT)*Ab43dUlm5YF!FZ6Wt6#J)W!aqJ}$ z28S`y!HzmoNQ5|4kVf16Vl!66xdybjJiM=GG=_;x6k^I0=q_!QLxBr(WlCAr3*Ohe zF?ww!?NUwJ6gkH`)RU++GXXB8?tk=DrvCS*A}}Fm8E0*FELt~0W%$Q+pr3MtlC39t z2jiz@mki!mV;@o+UG5b9R5Y}qGg8(=*X+I3$T$HTEIUdczdik4uAUv(s=B^>uCk!9 z2>^j2kI<2;!*NZZheXiXW%(UduHh7H(n+yl*bpnQQ!A_2ChR+1@>sOqv}FE&4=s{d8{x88s~KKOXPz344R)90W$d zcW_GJMSw;L4cD`uVLExEM&!o|qyVsNoC_u&^wSAb#GwIGTJJAF%;T>4oXoM#dW8P{ zJq!sZ*i}EjIz2sc54Zdu#wunFwWBcro0t(1aqYp)E{au)k5rJo&Hu_4^92%nwz-^2 ztDUR;FaG%ySgsU!FNXbf0m+$`2CEl#L>NYQHp_AfqW_KIitsMV zdi=UILFNHMBbx!W<8C3OnHB3F!gfymv3qpy=$QWdBls%teNPEw{r{83bP}pxb8(*W z=!f0>pKs>h*ZE)n6^4cnr%WtVI^JW){qX;$q5j9;Dewb~Yyc*h1v_TMgB3CLnz zmb{>YwYDkf_Ic#|M$)Mpk0YOWMy3w7+(YH_CIz{Iw1xq2w%2;C-4J{!)bn97hGKdOJmDV z037pb;an0c6^v&o1!JT+hVSWh0iq3#H6rURMKi+W%$Pv{{)S8dv&;Ne1&sYR(f5}}2hwMpTVm<|2 zAz|noBc+$Zw!O0O!=`6)y>U*1&-MME;0yg9&mMk7yMiQ5RqwaoyMN0K1B>m4f z3v4fYs#cqgw%o97wTQ*#Tap$-$#}w9V4Z0PQ-HnzbDTxD!h!QfYVqS|@ajeK`EvvC zNpsEu*z$@_^cG+Z7r?^A4+QNO-@K;z*PUUyQQlQcI5ZM}es>d^d9*B3AL^rMwfo9Y zJx6R#^#7)*iXEwiQHMsP}vLJsDe~SMgcsrevQ7hJ{iiU90DHBW#+J$*`Nve zI@YmQYvo8YovXK?#907H;*m%f=|DAozw@M6=*&M)8uQ{zVqo0C+UYd-dG_zwhc*Jm zpX%G+f$#qFfWqkDwN}fm^2BjIMGKlH;|iGs5j~CFYgEqC%)g4*LTHuS8BO!O2ea)+ z9lPhqz>5`_yr%%%)0aRoR=laT&|gMm$D3zBvrs5xTKrwCNo z&awO>WDi+T>B<=KhXmAY(`3bs$}Q{sK55 zC$Dx<9+?%S}l{H!Y+JEF=|IRN? z=|LLN5Oe$df4!CbI)38Fua`D!B6le?6rA%<9?rGI&bl-t=}yLuJ2!J$vl;>#`e355 z+bR@ZiNOFOkeX}`hb}0s=$9)2X~*o_qkX@%*D$W$^NBj;<$i4*l*-;QS7fq{(}?6>O<}mgF*9XK{rFSC zEq^*@^X5-fKT9Rz8S@KI7&Iwdm$A*8^?WuQ2NKSckt1&}u>r4$R8gX!LFIhFUnk(V z$QF9f?hi71%;0H+7(EF=(aG;@GDnf+kOqQ)mqV{c{f2jgDsj+Zx<3Z5v_hHA@K}O9sanR zrp?#5R40idFg(+-5h1z{)XEW_gwyBIyA@Y&slTP40#1lg&xgCc-@9`k$YcgMOzM1s zM&jch-ma^fx&^$lQpNPvohRbWqTA$XN;K%t?Ib@b2`YSB^)sqUvRKdmcims$7C8nC z@Cw|2sr7r_p+(k)kBUCfGVFTp-unt&n5FwMu1>(JSb-r7U!Xm}je}2O<41S#_j&nZ z0!WWX8QO<3RltHJ6&lAQ4^!HKeXn(e;wi^FsG>RnB2w7hq-=|m=!Et&*qx7_BL!rt0*ZOURtw(fdFPWX%7FfgfS{4I>0yB8l@|e-Mt%|$Q1C_r9 z4mPG0+orpp@aZg=27Uzh(S5G3K%#Lb-O5uAS!?qih0$ayazzNMTDdvrh`4%6%&p^f5_g;#DAn`S3*gEUwdj4mBD!QDuWKV-osg)eo+x)aM{;fi2P207ejJRSUMw$KK@sv1of&nnZBCoObZfLY!?W(KYv z$G9jizAfc&WDhg5320x0#aLBv#$=^rV_`0DNcA*P2vT8LuJgt$&QbHnte0O555OJqh{=_@ z-d}y)1ut8R%F6QAtH_Dc_HwsIy9H&X!%ufPTL`KQ)(dOy(jOTA;bITJK9;d$QJrr! zsr8|#9Po^PZWY`*`=YN4}DW0g@{1Lv3s6PJ=qBMuFPuZ7H7yo0s}n`wULCP+?L(Fu*UDo zaSR8$LzaHok4i1m+P{m~*h#qjESMM_HJ>vsrJ1^Q(z;J1D`B=b*7QVo{tyY3H<2|? znw6hv%oo1#fVV$CSDo+R{y6AnBJnM!rOMQtaXMF-olRk|b|RtADO~qcY{pNctUIDT zOH7v3#mm%Ot7!qHf!T7sR})FP_TnOwUxjCewr^U?&ukaqe0i))X#Id+_w5H@a24Ua zXUFrsSJimnsI_(Z(9%7zZ8wyGX)!$CMZV(V-pG_oTH8v2Rzl{T1Rd_UX9Imp3qVW1JwV71aYsWG6jr22(r;hP6&^Z?ZnrQd=OM|P(}H75)3VF59Q$< zoyiyyC}0h-9wK!&d1)QeNrDcg_bfPA|A0;mqA%RN$KEz~|0ytb5DD#hL6Isap~K42 z{ac6-vEuqo%18e=Gehi@|B95Ii z%G-#gUJ;$)!pHg;KeMjv<+-)M7&$ytreBW|?f(hUd{sjc=qqhT@2JV|loNH-@bw8b+8&iv>eX15 zbIT>gzi+QoW1T*}Y9?t!HryT&g7lnTp+Kda5-$v}#iuT?t5a0T+A3GONI2 z+fK9vDG-~vb6H|HD=!nZZdY3WG$oT{#E_mrTRY(Gk zU-~|3s$R-+zB{e_YD|9ychi~U?BfMu)j^Rzfbj0ds5Oht!a-+r;`v?LFE#^4k*pDg zaR}i^Vy_9-!EfUpX7+2Z>1Rfw+Dmvkhfw0Lt`Ao@m>Fi~Aumb21WWYPorGHLJcK1- z__N`u6*~RK&9@ijt3=dQ-veg8xU45GjCTiW%o@I>)o~edhHp;;^t>phkmuG+-63Mg zTXcc@@TS^dDGHa0PnuA;^Ea`FklRvX;NUD5?W~@qckEUhvG|rye-YH@pJQ9jk6WXV z#>9}hzti<>DU)d%CTQI7)3(C_mo=ASB4K`Q^69JYj72(o+L@ms5AtUptz6@9Bn9jbwEdw>|Hrc zE+DQxf>ggnqjzbuvTEtxLa_nG!xDes+$C460 zCHvMBdF#xm!pH3;y^A1T?X}}0MyB{6w#v4Cw?;(_n|0BjyR5)uPsgSn&+1+`knbX@ zz$UxkoA}%pB=?na-w1=5GIwTsUM}?k4yPnowLh ziJrQ@sK{+McPeLKW=}BU8YR8Ic4zZ?p;giMYgW73L;WyLC{R;-jAjHFul3krwKe+Nlmp?a9fN2#J_my-~_9vt8; z5xj-Xi~afUiep=RorVUJWKRI{@G8a=WZLDYWY1kl^oM6&C_(ZCstx{~LYF@ek!e4Z zjE7qR5M|gGRepbqn|#5YL(Z^r)J#DqUd8fR6(Rg>iiJ@z-HxgLi@X=sJHIM zi+10tg*Hdp$1gb>e_N3nU6mdmd0g{*bzjmnNclDWW%VqA`tuhiDfPV=2K&fZuRs>g z4F+Q25aE@=x$Yt}M|^L)0&6$}sV5O#InX8YiOwOjk-o-Wwl_&Q<$fK-f=02}#QB)t zY`&{9z2jbU9-ETs@1FpIyoo2WOaml@!B~VWVOT#-Nj`$77H>_pPU}|&SV5Zm15H*T z%3D|@Afe_uJlM?zMr!jgI)X<_yo107d+F%nPh+k= zB_ag*oMx?8wd>pI$KCNCTiL1dER9%V>wr5|)GAwUH;MQa2KJy~=(l5UKSJPw(Au+Z zV}&3wv0}F8dpDfU)P15niGTE&{#f1tTkrheKJwUlJQhS38HzTcf_G8T2UMR+NcdeC zgBforE`NUIi@!9|6ovfxYn0%-2;Z6E%2FQ9Jf_|fCu)J(5~bkXQ1l?1&nUCa7sD-h zoeMIxQ@=lMb~S7wF9-evlcTC+L&&v%MBpm;;L@}C3@EUHPC@pv`$m>)O!{NZGPi4B z!XP!e;wVWNMe~S5h{7a~>e39em&tHNamlNTr@_@C1ZJE!tt!}B;}g%rkxE4TeEa$S1R6f( z<7I`}qD)L=u1P6lIC_fM*qR@r(Qo~L(HvDu=yi=@5ZKEVo80$Hvh*WpFZ{%P<)aS~ zUi_Kc!Jez*gFL(MK4aK@q$1@uR$>4KB9Th(77gJN_U7@jRd7RbncFbDbQdla9uUls&vX8y=K<)fz^K- zupUDgiQrW_Np!RgF-%k)f8_d3Y71)$jjiP~d81ujB;bCAk|G^;p-8-Q)(GsmwQSI0Ssr|R{kQ}Ir6u38Nh8V2Znt~Dc#(ky+Yv^A{1bDU+y6EMGWvnYq}}ne(x(y-UEH?dwIJA7|M^Gp@4LdIf_H`YK+-7= zzRi(*8X|re_q}g(h5&D0fMY5W7#DY8pajRq7pFtr)@Q#0&cnjNiqQ@PC-yhcmud#b z)vArQ2;P`6V>cIS#j_a5f)#-9H!Kk+<*w19QbxVy`UjeSN+VUSlK>59@AkDD z>)brrzT_6D+0L<9+=Ofz+})k!Ef#%0tW|Tm zE&0h<^m)YZW+4AjKmu=h)bW!_$Bnvo|96kSk}5yh$y-OCj7D+BVBwK+?(XCx>ovm% z%a|K6NxhwP6|bf6isExve8jORh{wrR*ik)(r)``Nf__~R#vll>xXpTY}$jP(MJC`qMT~8@&|20Kko>TMt4CRu+)0R9ov`DW`nXo((Fx?`F zFWUjnxHybXXHxZ-C74)qnVkhmlK6ML*>#{uaPi(R30t4*BW_+odd3)$Ap7CTv%7@d zrz5%VbI6rZ)s{9c{8sV$z{*CT7KYO|sgqJoPr^`hiY6}6>%L{|H_RL*#W~|12j2)I zyD@t==4R<2A+w)1w~$tAo%SWw6qN+M8{u53M(p~PFJk6T3E`fP z$a5rTMz{L7KsuZXi(^N;<`(JMEal%78AM4p9E$eq8KuO$kHg9F&!!lx)j5}UHzG)X z#$sRh2fLRWuN!;2H4}Rd-T&+#fOZvz7~HT z8(D)c6zG9xAUjcsWPtoY=?uhLo#i?vCLJ6mCk~x58+0UA?zL^UTc~?FUC%d`MuDq; zu4lji5ry|j=atLD7)y;`X!{esF-<{)SnQ_3^j+D*1$d-dkm- zJG3ZcGeXjRdjzzq)KR|pvTxdtJ_dy=(AoUGm%NM| zVmXTpgwU^z^bdc6Rdowcc3Cg3M7K%C(!g-YT$E)O@iSVcv#)d0v6BgO8o>!!wq;FT z?#Z>UJoeHa$faY1m3=NdMc3>}y8cZB6>gw-F24zL7!X0;K+}~(&|clH@o@D7Mmxvr z>~TFQsAu5(3#!I&*5z>3WIb9` zz}a8cs_M@*2Ag#Yzue;p08M-vo5|HnwgLPB$0rkuKP;anReP@liVN4iz;wtT5Ao>@ zz=Ei=-2U-Em1|)ic3?U-nFBSSj%pe{f$u(^TqDG>0{2ZT?--lQ$OQ+Z1qjZ*#2>8+ zSvsV;)0ND8mQm?k=y6DOM9y(Xo$K+C389HtvDlx&)|?)n_!?T${tLe^vMD{C!&#zC ztDWE`mR~k3(g+|}e+BJY#+ef3XyNa1NR*!G%T37HwD@?V+h%?CZoBfDBgDZ}kj2|= z%nxYJmHj=3T)=Ih$I(Ulz7WAk_|G^0oOOei1`sPy`A+eYu7;puSV6kQfT`fI4lrp> zL#CMZpmt(!TVl+5i7+7M=EejGX8bHV6l=DH9n z&fnVkX-5l$9Rt!lcT4-}4raukr#j+Knkz?w#6({McKt;d zNGqEmRI9h^vk8&_$G9Bh23Xde<8PzB+%Ws93~284HgN= zdk=Yz)kJJ_cKH>LR)I^+B|LdD5~;Zbrd{Xz1>;ON zpf*s{)Qm!RcjOt!A_mZ8O*@O$Bas|x4OKV0h4AgwP!}XG;E_H@eTh?G3Z$yLsfmkA zO7Z|zWxk{|vEyD){>?YH^CIj{!pa?l#CeKC6|H-gOFez;j8K#Y(+Y@loKvA_L$Q*Wa3h-7j&%ETYWYUk|7!&XnZWE|7O;AAbq=ooSnxCZcbkjt5#Nk4}Hat z{~Q;s$Ma>Wqh${(-$w{;+s6OGeI)K0QJZq9Ou%c)?^3?64Ux1oW*ju8Q=IP=*eqvK_nLXNWO`7@psdi9&nFbhUl z(P!JyhF_vNKU=HtT3lOa>S~Vui;HewYJXM)OMALuF8JL=>x&wKdYRx9}|Pzua?f9LW&5b3+122#d}8nxO;ze%;Meo)k$kVE$1vIB>6r z2?*>0(5V$4pO$U_h0yHaGEkns0Q!U5Zi3^N2WAoEVIRgwNR?jcC?J=UbiFRsRDX*Z zE#g&YW19!L64}UUAAN(dIt(Qh)w>{|iQbizCpBt`K$MzaAek->r4zMMj}&}H=Yf-q zFLsG3z(3uf;R)dij2z84OJl?dk(B+)zzg_a2v^*^e-Vs2ZO0!6voE;8vKNC$R^-Qi z{*zESQWDsEGBZSps{}rlM=q$IUG;-HXT5%W=+&oNv3GNH${onbBXUgz5%YUQj6MMg z)egxfE|1U~c9nC8wLV@++4t|?xjfRf3f~*H$Lor2gCm_0bRcKH_}~F`APm8e8EDAp z#S%Bl!AjuFGX?Fc z9bfq?0;>+192aAq3wid3gj!W@K?T^<(p5BJe6dQjcWX5^;}d8o2`)jr@w1m--bWdo zhio9%b?ME8>l0wx(KVVdP0>UOa~#Mgn!y_7dk7i(t=JCBymOO7Q2t*4%s8Nqf%LpS z0aI`8gWNf%#UB~3Ns!4Dr#NrRd2LTpJ0`)iS;9@_vKfvenkd|gx7q%%A1gJ8sS@!l z+ppcs0kY&D9g1DTRH~U`s>^OEIDH?Vo6pHDPRh{<^4+^$Nim70i_C56U+|9&Dj5C5 z`*!|twB0#W0S*t=^XD5jE~mc7m)5D$y%k%&vG2EC?CeE)u3eamyS!lFa4+?JJ4yS~ zqxbHE`%4L+j;)Yi$ElnGDt&1OqWWCms+19f>GL)PL^*0dw~JWict8lMVT5mJDpXNeNM^RjiPQ9Ab)w~ zUaNXz)+Lhehu5?a4=#H%AF=a5c($vrj8;hId%JJILqSAK`BZwwxj^P1cFptEZwd|* zn0Q8bMYjHa!R!(_JAPyCCeLK;VEIxCk6z)X_5fkuSn}L!dd71kH>kgI27WlLyiFbb zIM@t!%dGB;!A00;@rG8!PlF zUTyWKCG37b>G zE<%o1J5*~l&%L0j%Ac*Ad9V~b{+LfFcjHT@RPAHQRT~;2S{`Xp9l4|Uf=2yew(*<$ zB*#UI3To%Hr$Y`O1uqnbwGAiCz7w5!TGh6 zE`g>GAlvRq|F{d)Vhc=2cj&N#TCx;-W9W8g7DluXrl4o|usXm{}zjs|?nO)`+M(Ywa-}TRnI;hClpduM8hDplg zep2?3^h~l=e=7EFE++%AB5#+deH#CtGxO~Z4!;Hmr9$W5J{)pjKV|>sJ|I6Y2KK_e zl|H{2y`TN-A~nYN(#x++BaUBvaj!;09yX?Pt}G^r1Xr$#AWV0aR|Y$O3Fc=GPqL4F z!7@P6w*y)xh1n95w%wT5!enqX*Iapm_?VXZX?tu0naAi}KR-Um@@<{^!n;H2$|?5%TJ_aVnMpE3%vQL=}pFO zhV38PA4)7$Xjus@w#GFY6Q5sinJgK;W@eFS{JVVRH}(m97)(IlcR8E>uq=$n@NhNq z#-HV)e~tns%(9R9U*MsR0+pvxOe921IH&)PC`QBI9#>W47wGFW)EWU!vpk+4NGtV!C5swibt~D0v7!O<-Y_$a`~J}JH8>7 zX2oWFRzKq7Z<@(I$PiL`7fl`k8uMo$aOn8B$MwTn6c(u6Xs^Q-jnmiB_?vV4;9kW5 zWRYZZy8i@HZ73lsGVvHjp&eki{4^Z*F_WEoV{wA?7Y6m57U=@K6*djoScE1?X9&aY z=F+{-_!rE4iWdQt!7VAZ#k-*c6Ho7L--?&KoYPkR_b4>MO*9*8l<`Z{J$o(+*8*OH zCGmqQXEGKu=s-j{K=dGEl;%P39e~|TD{V{=uJ-U}v|k4|g|QUr zN=T0X=QO*!MRVlwgSx_6_hZo8id2N;Z-vB!X`%!`q$y+^$$(kLurQDkh&nlsqMBtpW+^fNFePwG`VwlB_jx6fb=Lb8fi1nf2y>Pb}OQ@v_8LOD{vyuu*w zXn`?~Kgh@+aEEOy47Grl3#58Z73u3kQ2YSdBQUY1P)5nH1;6YV*85v%d`Iw3T3ugf z;bi>L6)J%7LZEsyb+@tN(5otATG9i~HF$Ae2V{;N(Qu=;e0+#yk&XdaIfYyZaJ2k` zWJvZaaB?H9;v&P?#a70@%j-CwKKhvv5AQMKfN~Z0INcz@exQb9wku-Zd(#-Ev4I0; zC~y=%Z0SRID}e3^GTarag^~H3c5X8al883oXU#r0I`2}Bp zlgLc};b$*i=MOz;a?vDYFUfBayhmA?>0bNtO`p<}GHSNvkARp+<_yZ5F8@_mTzojA zz*NQZL-Ks2E!!G)M1pfZUIM zkWYAe5R?IxZPokdQPFO^V%WNdE$XSa&X?awcHBr!4stsGPr-gQ(eBN|avMSBfTABF_x(vCTBwRT z4*CLd8Tc$MTj?b%b%7o7H??PB#NHi^4#~}xr2P9g(_=;;2kgGWEGYIWof$N}v)x$K zkVPqF;xvMHE$b)8&`Q;$tFt*+f;eV4?^r$p6l1tH{T->aq~;5ZS`gCx%Ft6lpl9cW z`hO)G;`trtl}!Xue>9};ON{&XPd;=;>Zb^-<~+#s_|#4aCgV@E5r_%a^^oL4aMOae z?hBuvHCTcT2%i&a;zKO`a0jPZ5kZqc>YCaRK*fG*x~4`3zLE`a;#$5>f@hBx7xOhA z*J4LKz}o+Q5fZnVSScWXXVvB12uCibQw;k~&?ZdN3!fHa!b#7cHV;>)9sN)Nq76x$>Hh|zKbJ=4nuOf;@4d)3l zv_*PLV4_OWL%fLr8lA#SwTsEnenzw_>A_{dhPvpwV#q6HyE37O^bYqolE4kLg6uWf zapb_LUa0#azU=&ROox9jP!C$Z&=x{Nt~tY(K^r@=oc?#y1&aY{#PXVM^SC*uV2rxf z>f=^*c8?xh5PjX3p+RYGsYjCR_JWpAr;O>|Vc|aF8Rh|g23-0sFc$V90}d-2VB4(V zwj9o#vqHRedz!!1XAY9QJ_1L zM-c@6JXnT`ZQ1`7EA!Fw#*86nqf9M+%mhi8y8PSsP>WBG4i6Ta6UWN^RE>r-k9P_8 z^X;Qn8yqMpr;z4E823jn1dK-0vW;;Yy8u!#+NF0be95euNTRk0orRvcNVTY-pX|+M=9-m1N9vm)|M9oA=*xs* z?|h;RKEGx-5TSbJug3N*;ZF1@L%Hwq{xK!oYT+*5)BYA$v^Jc5@~i;b3YhJVO!Ay} zN6}i{fHVwf=C1vK8_>u&>-nSM_^HRImj8KR5U%QK`JWcUw|ICSb zvH{$t#&DKkS^_anV*$yVuPx<}lrsbd%qxMFjv-V)eEZ#`R`miuzAujm1zV3g4O#lG z*kSDEAwIU8VDw0QeKLM`^{BTRj1DFo>#Nwz-C%O&SYYr1rtWNn;Wxx^vJ-|1JBs<5 zko#T5kAw1eZ`{LSK>P(81fl96hhP5Hvh_^7F7iubD6J z5S^5aqtSm?2}Hx}Kkhqgro7x39NAVM;3@|okQL&MJ}VTFbg*QeTm9a$F*+BBAh(On z?m|2#&`<(YZEavQ2>MP+fIIJJzqY^Jy{6j!(lF5eJ_4SgQ8l>Bm1Nj0)}wUSYlhxu zZ05w6O#D22VNX9OLzlyh=|(e2Kg6F%u;KM%!WKnKHg>(m<|9Gs+#hJn9Y4Znw0Zm} zUw`DdM%c;xKGlKvo?%lgYT)$|5Dd3Negk)Ffj2A%fA{K9xiTiN4;Ye_vmZpuPh3LSceeqs z;UJf05(v!%GzoFvI?cZIf<_=_4ydMmmZet1TyX67^~KAW^=5IpM4Z}ZF;UuSon+RXh!DekbZ}YPOPZ$3RPGcmN z_0TS5`9ZuzPT?3grGhRl6YAQ*D>UEyePh%^ydT|QAMYn8FF)h-A88I#%|rY!-(8qP z<{%*!r-j!NB7dg?SnU3bhy< z3FX& zqY$BpvbF@KUt);uLv0{?{{QHD^KhvDHU8f$82i`>HI#^K$*vkg3q@MUp0%r7o_LD%XEGi|6z8CNi|pFs4;ogmNrt=6iIYry1I&uv7KroP!bhA@L=-Ww#ymuj z_I1q0K68T_iFFKJd9V}X6({BiKU`k~RGKB$#KxJfx4wCBp((}4A10$S`c?41bJ=H4avi)O2TJ~m z>7AQHvoe2c1SsksB1QcTyKb4kH8C;|VC1#BSn{tbFr=KC0l(Zc%N9glxi;SN5YART zdIwk~E|byq7U;`gd93Ne@Piq1z%48NGKN2_rK3aljF~qSGQ_X72Y`o};X!*Qn>YW9 zRZl1fHy<{{0DX12DOQHw>7L}j`9ToPMA3`yH8O#=d?c1=ee_!m^p*QWSV8d2x-R_j zXOXU8DvdR|xics%1%!N9XR+tw3z!f|!PRm0w4_m1N1mfja}*SV6pYDB!}RM#Vv3qs zg5rab$l6gv=lhf4f_3m8(}6&-kK|5P!_+p#oezKfjTCP6x9waqyOgEsstqmWJHVy7HDPQz0KEzXMSwT{ou z-^xp+19xL;8R6p_Iv!J&J$SX_xNL?=hJo;vFRvaJxP0w>=MO?`xzlywlYHP@$_f>~ z1RBJQ^BaqldRIs+bVQ>j-JF`Q242HD{U&6VfIjPCgp-DsXD^6dIaejxn+EA9^nboW zj-%wtqZ?-fpHtYjnKvGM-vOT|Mu%#|MUzVcgW}R&x(Vmq#X8bAH&)#~-U?+A*b55e z7Y;oBFtSr(GNeIQ=G}-it=H#MN(@?TBvT@6eBia1VXep{O+iV?xZs2p>?9nhpa15+ zeT!R*XpE9u0He~EtsQn_PguvgPIKDb+!IxVgI{dfb-@cO?-m5?L=?aCm5@#4-v|4N2Z}^q%jdFj@gQO< z(I`u%)MvRJC3An<-W=Gza*DX3v;B^|io)dO)CX${O~ZLw^{xkUE^pR_RIeW|a_Skj zm{~{5e<4_q*U?TsY`YF;=6AuMV$9QrN+Yes139sWU>3vC1<8G8-t>B9aSKYsLdRpL z&6cJ`{#@b2Cs=j=*!og8lfFR-`qWJe_q_Rt5Xs|&ban)IR>&-XEp2>xYH${_&<|(x zD*=9NHS|FbcrCoEoQC~$r0+VP`6Q*PYI5xx6kl(UKCY*Eh(Wcf z?mT|ghR(igG#sxWcH4igK(;Kdc;ZDbBmvqgDy_$7=_X*q~=-MI|T#HcDuJ; zvz}eQ>jo!aa<&hy&PQ;FPd-KbX`i_Ge!&zguJr|-P*$OW5$p$Zt2XXJ zM!C4Azh5!#Ji5REr+!QNU{)Ul^k0dl>%D*ZY>IpT%*u417$7PVtrS;*!Rj&QZMgG+ z^8=zGr!0&L=|@H2Y1xU(Q1~CyvkJC-V#kXa(-tWN;3Rb?pgbyd^pLSA@BWHiSO)15N9$bc4)@w1}B76KuL=gYC63QB|Q{Drt?m?y!{>bp` z5qlGBomEg1Qao4juvsF($l-OenwRwZ$kvb(gqO%?Br(6<*wJ+6aJ6zkRjRN-Kg68M zdL=4DXnLBNk??l-P1xyfDn(EKLLuyy@YbPQYXyuCAv2O%)Gdw~mx-EXgXJhff&|qa z08%S^{<|;fzfxQ8UyFzRz2Lobr~lJKx~lQ>imlG8kN-SRxJYgz7s+*nZr(r2stpz% ze@?nKKLgg@{UU9JRaFv?(oVgv=C7x7m`C^GFI}Ipl-)$!OBM5(EPY4xP88L#Cj` zSn*HXs1aiE@q+$+|GM28YQ8o_BXEz1h$cZg;4S7~7k-f8*}dap@drXgSECQBn}@&u zXnxI-!`Cl_;W|qyo^&8Mr%em|Na>(`k4gRS=evg?DAYE)d*7c+nQ~5_YScUjGVK-T ze#p9h=zL=;)p|r--3+|eS4vy13DfDiJs6Huo53@GGN}VT!1FZPFxI(7@Nl-!G(Azt zcS(|WIQ(G`rXLpWTN8t7&&! zZjaUKbrEkTStbD`D`92556b>q<<#7tP$+lQ5E=jwcDo-~1~-oK4A+A!{sI2#7~6ST zkK|EJhB8Alo}3+r8YaY?)sT)5d<)HNZrMFUyf>Cnc|W3NDOGKAzDAUo^ZgN@q!3-} zQ68CT$Chh6b$&h$y5UE+`zmg|wMuAzdW>ngIGjWD zEsZ_0FZ*s8j_^!=(x#LtIRD&rz^eW^F(IhAjIr)o(*}xd&#NQrTV9H1)>TSBR|V3i zLsyShI*7#vf}C4w{LtThp~NZT-wQnjcE>7djhVmCBFYMV!8!yM2Qau;Q?r)gDEo8( zAAi7(v3nU(mmYJREjYZ4m5!Lbe^nLgQ4z?IOK<(b|M+DZ#Z!Wta;;@fQsb65cO2Qm zkX^nI?$lRwO7}#HWfCSosn6m4eQi2c!3<13bmr|8n}U!34o^AsuUCuy8UeL*N@i-; ze;`P#!tDx`0y_B$C8zF`H<##?>D+~_54OV|A_$$PORIsibc`m>ZVL{Z$EQ~H(89;4 zC!5Kq!AWL#Z3J3YW5yl6`dGz|lA(4WtAD&F%%$VU!aj${EGh-FhsQRdEtAF{dKSGZ)=j;A!!{idnsTb&s|@AK4>f19M)VR?tP)o@*N`re_z!UPU8}n zO0#$O=UkjNCM}~0qsa`@(?e%@ZKsU-ILZ=S27Y|gyxrUSGSPGP+Z)lZ$oTP8+LKAh zhwjSmr@lO#BlPG02t=Iya0YYeMy~(02JZdfxkpwyP+rd@P{A&kj#EXJY zO~V!?;Un7{`HupqA8|Ml1115+Ys#Xv=O3ZviFZ>_k8W4o8)YSq*+#P z-a8D-K8#$`()4)X2Xq(tgRe1YV5~nsFL9`>u0x=i9NgUL(u|FPuxKQGeRqTQ?Jy$6 z*+8Uaq#LehZrtrR=waMQM^0(ICw})+F2SJp7v@3!I0?5C?eA3();3gCji((8n{RKd zg=0>{VSYYSo;$B0ts3Pec*LuR(IendV&omYw&e=~YV*8@b=PpOpK}&8-=1ZR6{q5`Ojfr!ax>mr3SC!Yq}=&>!U{`r({# zl!Mh^tOhz&#|rK%2}aFIk`3B!uX@c$mzvkiIkAJS9u?WbxDd{Z;6}*`h(jrM;3p#i z;h!BC;GhPId#5^I6QW5E}MVUEzhDyeb9iqpl|Ov3pS(IELaq|3BgzqZql$pyNe7jpT&B>1}>ec>PB!un4Ix zewZkb)8%ksKL6@mG_pYvuHS5VDd7M>w|4X_@zz`PW`;h%tOXOzzrlzj?tE?%IDv{v zKqBrG5GFa#@y0n{cxfp5P9+~a+WrY{|L$cxZqV9gO($1(p9!HiDC5Bx3vAI-TyvdvN>9{f8uHoSmvh|?rv}C z9LKp`0zD90eKbr^9h0SZnpTSouNQ|@O+G(Y_)BjybO?R}wZx~%fdjV#wK1UKa_0au z=`6Xevn#$T{~E$auF&S^UfgEg-c_-&pnIjiBo|PRrn|t8+$G5C42w3;HC55B9l8AB zJ=pC}4SL%TL(uH{_*i4SuoI3ePBh$i=K$*P_Qti!1nUG?efR9!sE+tAQLq z;S{>UKzQRzU7c!-C$W?c%v$1Ib8s1)1bL*8N9LQ2KXbSr(ANn5aks{bVHCCh+Oc1m|t_XBSZMFz)W}b-sIo&=zc8qd{-PI% zLLQZJsU9BNV;?m%Yi~#wiRlvO9Gflmab3EzU<}y@&+J~PQ`QwM5#u5;Y7S^!?*Y}& zue1+6+Vx|%Ag4hKZ5HdF_5h>x4t@%eTgl|J3_C%%y}z}&KH2=So2ODFBw zj;;EH5+FET*L!1D>Tb{eznW4T8OUgxOMCuFqZsm_cH5JqF2Ne60M(9phGs$y;Rk5r zlCV}IxE$&+RlabFDGp~K&)a0Bd$$N?jBj3D^OvuLx?Z_rd`j+fGE`3|a;@tM4&h|| zHkXX@KO8ccvKYK^rr5>&Rs_n#pQ2&YJaN#YY}2{n->BlfF10y&IDbhnZ=`HT+!9N1 zAX3gEs{{9kE)~=@eCz{Lzk)@>Qa@`Nj*bBv0pa2atuRJF8s%BmzMS+TMt!-!i?azfP@9`r_>6L!-?c&ZZn+rI z?!Kw9YiLxLfB=6v*1Y`}PdN3ee9lMF;E6P9Wb04|Yy%1cp&Oj-OUV#=dm= z6b{{I-o;k3{}vdNXLeU@{s3S8eV9R&#LoXoMZsC|ObZz~)xNGjj2zfRM&UM4%Y`zu zyuj>zR7miyYu6b%GzFy}bi|9kqc1pEitdnH36pR@eEX=RJ=IBC-Wy;T7o58mkAW%3 z4%`?fvAm-DWh0zmqNa+AKz)OPzX?XOw5%NR_RVePa<8Qf5YqvD1jd>3vJl+~E0$)Y zey7wT39T*G+oxD)+3>e(I?j(>82_+GZLej*%O`C+ z2ioVEN=YiJsc&iR*6&$n?tAFk`e4w;bz^b>JNv-UbMCqkoQvsZg)!}|BOkIgoUVLjibga3|j(=?7Rc%GvYoX7S7l;Qii1)VF&MT?J1h9be+p*!O5E#g%P&)#aL@@eZ4Cq607t%Tp+AG$*uy^S{rrRqu_kwP8M{~0@^RxP69i(4B z&iFtYw$PT=KDBDEOjMqrg5RZxN&cjUH2_szKeUF4xKbX(Rp1 z-}bMBU7usm;q{SE`b;-hj1iHqS3niBZ6Z;R7aXJNRBN@>#j+RJUMO%v=vlBb*w{2dhj|ih0;jAyQk*Es;UC9fWpDV*Qhl}*AMWm{ZQX_ zP)v*mG~H%osK_vX0c6t2y*Y1|xK69D4hE{y^np4dL`qcm$r~k0POxZZw599v7FHy} z5YDMPM9k_0F?gbBM1K?y7SI5$=wNV>taa zIucb(J5mg?2^S7U__lOCkm_{0M4I~X5@f9wpzv*Ek||FazBJ`J3^FY;i>%5WN?S%I z+sjCvjz&x|CY`v&CZ-_B`CA#wE50wZ{M-A%fn#D<@}xM9--OF;kGbm2;n8y^SXA5@ z-#<7junkU+^rExFzyB7!QDk0}y@iGHY6zlA1stQfkOdvv0|==wJfTykZ`oX8WJQ(q zL|zOe;c_1T9B~~Ov2f91v6tl-6+`Z4FC~~Hw$ZRP#~qjl>QZ>A8%=cRi}M9N^^3ou zpy0I;cFtT@?*bkE>x{bqTsZS)>Dj{eWDxPmCoj-n5S zZ8;^e8qch>s!3>57-io~{K8annAk=pukwkow^FxX13%h`x2k6f9F9q^X`xk|{O2>8 zI7Nk_*$4PNio)dbO9f~@`gP3R?2`m_X@eAUxOkN7ceQ(GQB|^wjxR3f32_`xfUl(X zRr%@OXG1=nTi0~6P?Tp(F?#=!5K+Xdd%^Q?wW3U23GR2UqcrmIuVCjpFrjtR*2}@_ zPzq%9j*o=)yL;v%x3pOP*nPxv2Y+ibV!;}dRP!Du=eo`_OIQ)PDDjqYC&mQu zWP;UQCINF!_y<;|&FthPjIx|A{Jy1A3E;$(&QftpH^=}{GOAzc1rO+y{4=QZFi>e9 z!`ScsX271$C}FOHl%4^jtlDf}+yW=3&gCoL7F9rfez>vY*XHdV1bbOcx{^4bdU!i$ zT0DkIa;|=nX#J9F0f*9}$#Yss!hz+xP!+%I=50De%K;xmkY96%BJGvGiv2K|I;$ft z=hCn2p&ij$(f{XVJWf#lJ8Q1myUzxqP!h^PKV);+9wi+AAX!`Vw=@2KG*m@~6hA35 zeqYz}?>Z`U3t*F$a_%i?PxyuCp)RIRbyy1RmI{??^^P_t^_I9j{b(Wjbq4ZNVf66X zhkmw^?Vv8^d7?H9?z32E)sE`w{6I(Sf)P4b$KX5f`LvX*Y*$#x*=eJ*BZz>rlnZot z$vCk2=9>+kSK$u(s)!0KOnLpWVt<9oQv7oO0ZwR$#A9NV^xnu;ykYbXGCDjO7(-{{(Chx8~tA8k6npRwx z!f$}^tbjIY?D&4TUd`Tk8kh~PGsO^TeC_%D_u_auI1`3#doZ7sUL--{Zs`WQcp~L- zXGTKA9GB7$bk{xbs=nexe|tJ6lX>k;Eu%4;f+|)-nbmuZj_z3d&S6-nQ~(3M>A;(S zBKS28-eb)&Y}ilvKV2oknPc#{qlwU!x{s#)-U{r=?&c-?CgY9j8mitGw2qI6MO|2Q zj8cSkuJzHDyMaj}C-s%a=)k}yX9x=g(T!tqPj7;`4FQDDI4srRa(0V|WL|LOS0DL? zKq(%z9gS!B-W+8h7pOvW^1X&P#b)@)-qTMmUzqG(79s} zsyOF$!bcM>w0*a!5K$|)*Zm5JHwoKSSYU#1SMM#J`w+8lH-HslAR=@U=wx5}p1RCH zLpkfWD_llamw8hWB}_+mggvS0;|+B%*Yrx=AhLXeA+HAOPW2z9w<|2luD?`OCf{>- zR8;f(TyFe&=F3H zJ^~#w`O6T^WTyKR*uI+J-bsh)<>MnY3@p}H2i*5JhQgFe;NW-Z^Qo@teksq(*;k-U ze(M&_Z?J3!j)2_A(e`H*`ys53^l+9>pY=xysrf1m-TeFb@Pt8`;*kYMtmYs`F4JGh zW>1tg_#L9GWrWlqz7Fm)P(kZ&?T8ZwQ<3Ef5K#J?hS$-e{DTL{ih3!|#`{98sn3hR zS%@Ce1_^5fW_w*OaDhA>g0Trlvq*k8_!k+qFmdU$>*MeTHc6C}&0%muV|OCBN>32M zoW2A}*L)0vpG!%X5h#m~;!vBlxxiD*wmY)(#t&hspX`^%Okk){peWm71K5s7n1-3a zg}?0xk%S{H7(Y%@Uxr4r?1)$6yJ5ywX9MeS_Fn9#tA2N1FM#jzZIj-?E1$FwGi#&6 z-Ka~T%RJ(hfmZy$rE2UxfLLTDt9rZ|>qaIn;WxmplR0y_@m;h$5@XC0+V2ZNY7e24 zZ-tSxFF4~qca1eb|ApOVYdUjP7J z58a&m`Ff;K^Szz-{wfbqYYagzw$6_5|1nBl=766$xPkf;1z=Q%K(=O97;c>b({JG& zh5Xn-vz#lR_g2bhaP(H3?Gup0d^lf-}4eqrkm87_mS3%&;{8G|C_{;bBt$^mw$$+D=UIWlYz5 zc`CPj7vdrFfv;Lh*ThP;+Ka{vNdz&Yx^`7BZF#Z( zXTROLX2OG586WU7bd8Hluk7v}t-YjVEqHmiYQ5i)G@B{^!-AJJ^K1)}lfK>msq;2g z`#?y~c4p`$Vyli>x%KwrZe`zB1Kf7E`8u(NY6&p$o*eKl**7%14YS%pvsmuChw z^q=w?eYLqEW)rvR`-#G3{$w?a^o=r05tHtzEGl&=x5(O;+og0ZXmj%Z;l#~SpCQ(Q zXk)sUw~mZNy*zYJZ@MdL{BQRM;lz_vKOVkU4)uP>WQ-Wb*$vI45u3ol%Y#dYjKRMNmLnFomRpB4DaU%bnI8;*vuZ*<#W|V^Cg>vpWN(SmQ6JC+9 zqTquZm9JE0VUvd#T)6kel6?)4$JbMNN&fz%{bJf!*OEQDM4fB&L%9HUkoR9uo9 z;{Wr|^YGM6an3lQhjE6S_Wp}^dW(Y@xj*rrHy%^Va4ce~m!}g4FGH4{5MrAWGFvK0 zR)8S*ehQ@%Ue^mqbC`IGR?;ktzsz&`)spumOEoZ@zcek*I?QqNG_33i03g#zIO=ze zD%#XDdqgPvZIm$Xm-Ti;2bRLHy|^4A&l5NbzXN1mA0bQJz!1qyqGM7p$IJA;8P=en0-~DeIs2NJ*-Wc=vSO}~3a?rn_{BdeHjnIzF3=%(5B<;aa z)O{98?zsbI)i|A{Uy^ebjd{2?&-T5w1>F+AG;NMo{Tp_>PXPd25>Ce2Dzkzrr!uTGk479-h76E#hdN!A`=V zufhBe zle|bLgAhCINyw`dstc@zf8t$j`CR7VIL{>?x0QBJc~>pyPD|U*E{^}cbDszAh7guH zxa}%^;~e__DcV-|Xs$U<_VC8Mrj}m$SjQ_J;*&uc0PbY)6dT{;cZll&xs*(;I*A|3KD9s8 zv<{9}TQDt~BzIji?f#jjNBcont8AhoV7H*WRj4C(+(r8jH~$*>OBe!BM*jwH;_TFZ z0Mp3h(j6aOzeRb?JvDpDi;bRcfVeXtAsZ&AF;Km;8~;=}Z7Ssl7I>JRDc!!5r-KZ`AI_N0;2Dp~o_J+)$O@0~7$t1>;U@ zyceP-PozOzpAHZUnw$Q`O#x%)?Zgvjr{Z}r4 z3C&7_CO~I|&71n_@L|+YS`U5eJPZuQ^x{(FJMXT}gUvPyXeb|`e>p$r4GYHWU+i266cz{bq8H6<=Geo-T9HV=^AqSqL+#w<#Y1Kd%eN%5ETZ#>U84 zT1?U>IM3hFAc1UGOO;1^b^yluaS?#&uYi7VCn@x0`_vWZOtsYw;!Bp-7n2Vs{JwQ_ zreDRQ82|o-jAC*~BPaJ&nmA`igY z^HWOlE zv!?e)*{suHSyrWi#*Wo&oIWFg86DLFm)TsHeq`bie?Nq`_}2E$?ELVJd$YK%TKtt? zvF2vv5(r2VPNN%h{quCeO2)=)YB*@n=$VHKjWmzS@*kPmg_iJI;O}@Al zCmgJyfu%#cVFWONeE2)A$VPT#Fe;~%wL{TK989?kYad_39N@?A)RAh$p_#vTwsbtn zJCO&A1I5stNyLD+1WH1Sb!l)JtSwJV#+~>L($^2>7VyozB%$)lWY2PHvUg7aNZg|7 z_=Gw`ylUrNrHEK_c4eCXX`&w9O{^`P+2n(T=CXd%hAvi;ke+bjjA%q9;6 z_jPTCg!ZWMie;TBn$wjC4{*HqWwyLT`B~@ETh`=gSN}u9J6uPPNTNj-9UiQCjqAUO zO&)*vf#KQm#ts+jMrUEFwjZMsdyI;F3q3_zW;u90o}GnYbnGIob#-8S>&1*cg5Z2~ zHShrj+l{YJ)$4=)`@Agki!dbnohW3m6YcLHTW))vhc&>aL;}Hxu+dh@2i1~D=;oYFy!Wdy=lhG#OUxgBs&)t-|HH$8 zH;O?NZVb)aZh!hjQXCQ4K@G0CXsDAfH-T*}8dhPw%0Vg3K`}Nls%pi`HiV%&Aouzz z-1{?mba5BM64rq>sJhM|pMpL_`hNJOi+k!-^ zH5?Fi`A%5-`-r4LuLTX-YZu;bo(tuCw$p8?fkpIPv>mg-mqoJ3iPHAf$ObEuBBz(~ zvTZV9%y`mGG7c?YcV9%>qC6vwm2pS;Ps6sskAVn1fa{>yc(mkq1r$3iOIQ3LHVZyO*%|-?N`i2{k3x^Fq z+;|ZXvKVdQBf99^rLZykR_C>ew8l{$m_m2Hc>GTEPpyjMMnf&q*b{p=^g~b1pYU%~ zHI8adv-~;?5>1oT$Fuv0apZ(ioqiHzPK0D@iOHOlPeU&rc$Q{lv2MI-<3JmeO$>HG3+-I}t28+zN4%WXiRemtp!W zHdDI>sLg6mTH_^EhTldEOp83tV$)myDjvxVoPoEJ;7dEj%+ZjF&f01a{gopyF7k9r zQMjG;*%>+30(K#rBZ(27)ZA*y-aWcH>n*rq+q~J!_a&chQl8&YbTHHL>DN0s6jC1bg`E>+T%-s=I5lYzLmc@15$Ad-_~d1&9GmA%<^zDNIfBH((#A3k{TBgvuJ$0#$2Bl;a45m#1{wOaR}W(=9~1@b6Ai4sLsTVUR!2Jq$g$gVRhP=?A= ztWms{IS9DO<7UT#cFNAZf&|%&@JX5(tKhXtQXOJEo(b)-jXO^l%Obc7lYg4_Ft74* z9pAc=QDRP--Ft>vNk{*ZFA6!cUv1OAwWn4I2ng-SS}YN5VwqS7JfMS|19_8SuSaTK zkD2ACn|YuPq(EGtrL_3sox7pXjyN0BTMd`b=Zg#N_%!3s zmh{gdb_%`BxZbO-?1gB^Fga7hl6JoVGNbD8@cb=U#qqU;fg(=4Lw@|0?{aVnO@5o~ z@m^>zbR8JNcu0br;u;i_^1Xw@G)BzKZJNHaAfO|pFONYkOg3!9dIWvkm3aCvUQ#(o z^B*86oSFX_JYsuV53M|DAp{!39wqi(-hz9cLwuAi6>j|1+7|~y&NlohQC>#S`1ucN z$OW!=)NP7E2Qc@%&I>M@R6Ux~S-`x$9=52qqW#4+MNf6er+w(oL;o*70FWVS# z@n)P`$Rc2#@~lF3L=FJCY#LL`7RNwWRfiC+s_C0Knh*Bk8VJl!PkAk4wOAqNx zPsq2u^a%c}VikI&WpcIW^5TK^*6Ww&ba;OfZ(&stYR;xnzR=H_=}G6GZKTZuT%|oK z4RMoio^Kd+3GFZ&ua53AWEX{z-l%Eh+PF*>0-nqXPs zJEKp#47;bk6@Fs6xtu}Z^^xmu%S4X?($N^^w^`r7Ni^14lBxtlBdIUT{@W}56GN>K0%pR4A@G&m@NgsLo%=@lzWipx z+>+LbUT8--`=`{Z1mtggg2Im;oi{yj)9cP`47E9VWn;W;@J5rM8c*OOg&%FyZHd1X z@SZ4R^m0V3=yGHKy+8T^(b@d-4mupooxo}kYp+{DtS?@*@v1S9F`dDSc|7^>JJzrw z=z7dK+UWY(H)w;f8I?>LXlpP6Nyw6GF!nwg%n11MtyhD)ARFd+QZA^lRT#{RoNvJy z)s`Kv&g*J(#7&3X8r*1mchk#1;lGGV6oaxGr$pn6DBDo6ggr-_LLN|PKJ0x~CwrO& zKdo6CQQlLmCxm5cJpVD%I*irg#!pd7AX=-GM90LXOotZTZNQ3du@|oiapy*KCYu}K z{z#C=2l~8%XF*qZ?e-pCpOV+u8URl}q8)ra&2BHSc*l3w^br6NnMk_;mS$ouQMTLP86%f{<+`w2bT)K%g??w7Lw^56&q!Be{7^TImqN^AqVzqR zo8kPBFOY&_PqP0xRc&xZ*7`k{q!63?IhRuxqu;{9!|fo7k*XR4pf)gRRXol3GKRritO z2%mITB6|hqIY#UKVAeWnadTRsFz*mZcnHR{7&u&t?1&|FCs8TgjthM z9c-g<2)$Gj@*dV{HfKF*1y6Av0?KJJOIiLG+9hBaNSP09-UzSe+QuHIGN6$%w4B># z5xS@jiW6e!G!ztPxWo;U(Q`@%TJO77^l2YE205T>*WF;k(s2>xiY#hDTIVuN@0md7 z-Me>xF;4}-&k*`$a~3b!kw(y1i(Ch!6V<#r?{k$=hv|dr8=KfkgD`Ijt-J6Ks)fG} zQ;c{U`pu(_tjIe9-n$Ek_pVd2Y4J}o7B7|qyMTmBw0_bvyNehY@h<1%v9)4IQ7(e% z9P(T- z#jmvKd(>ByrsEup=O8{};82f%2qzg5JpQ2xa6;&Mj@Z^LH>0k>{Mp^tv$$?TsvcnM zXJ4E?Zxr-rbbOrH*jMOign->+12t0=qxB(xWlosWCekoR%hoos9r_ie`n>RRyC&?C zdp`LzEo}s-g>9kIq|H?@PAnlSq?Ufe(^zwIp90Dcle)qc#QjdNXtN~ZK8Br07ED;<9DaV;o9`fM=9 z>Vu(`zp@$x)G#$Wy@1p7smR&1uu1!7PEOrc+`ACj{Q5anNL7HC$0u~%9MJlY$`OO- zxoiue*EY1ZY~uGQ6f0OfcQ)v2iJ*{8F~jZarFz|WFY|i6b(7oM>%!?iv7q1cAK~5?r}lK(Z>0J1cK*)MwOdw7)xe1~9R3cO zn8o88?WJOW&zY0E$>sb3mN7=J&pZtoX^Pbc_+;t~176{vQ?~&E`9%UPVI;WjUWj(W zc3Q=im!J`y4`JISjo(MG)Y*AwgP$VED=Gq`M_dT6j74S^9=}xGo_V=F%|c}v3?Lon zQGol?bm_T+U}Lt>aaz%%WwMj3dlx^6gB?p-HA+9pbFgfr)%~gS4Y07W z2_I7?IZxYlb;;VE+;u5|Uf}-@5upCEKwrv|d4hSc5~aT5?;qb}51C@n%q)+ZuLdO= z%TvtvD+tteVcEA#ih1xIowbK0oIjpxQIEMKQmC(qciI~Am4$*!n7ak~P{KXQ< ziAc>L+x79V%x-s8;0Wr?Thm{11g1urtUTV2o^w!=RwXfV&l*1_ zk<(%J(yAn9`H()|+gjbtj&6sZtY)gYnTwdU$a+4_!H77$y@jjWba>M%Cf0gs0hPtI ztAg32-$={d{yjcCHuBcLumdGZ%*y|n;)s5<5R!bNw26`v=K1vWUS$CM$xtCN#q-Q0 z4_t&2NPc{!Zcr5M;Wydw@@e3coFt@2I{$?1fv24ssI&~m^XX|{xeaCS6$Tu$VX734 zmta60-235ZN_uOFHm~yfivdLBYN)?jP47h!r)~?PkUV|3))>_1{cyPM;h=2b}OfPNw@$sIbxL zwKVF42ch{DqbIRhmNZCwGdkI`E5nTOa&TUMA|$TUusZ|NtDa*#0P%GB0sN5|a%Dj-x{P~vxjEyEc%C=M9Cupcso*g>aVDjLRjH$i} z`igL+qIC$&KfFu%sqZqOFP#XV>v2fF;)4tGgRH}=VY-nXVEB83JzilK0<{eHwM60% ze$bLN?!Kp<)?&Mb#g(PD-h&p)6h`V|U|x&x1-tpg4Z3!@wQ#>nw^GPC{OS9mlxjwq zM@2Ky1Du3AAtYKmIfJW_|F|k50PCeM$2aFezn^BBYQYKaQWE zlVMW$N`RhD0hn}8J^bV(nfs`BQPNDDd-b9q4SU%frl3fvfrzIj6OZX+Uo&G0|Jwni>d+hwN6=VTyCOEhIZA`lm%}XlMEKBO`I&`q+<3$nD9ANzTC$&5A`90c z_l$J{#H(KuyFR~RUI%~LiA0_p7WX+Kr6T1VR*)YOJ$qqJ+2!s|l0BNl>QEpXTeyx4 zUGR|9qo4z9uoXvBTDQv z`^>Qeu5;$NBd|x+(o4aGvts%mBbzA8Alqu6B-Grx>p%C52}90^*41};>HxB#aB0vK z+7BI!ilWl&T2}Fxh4}ZVLJ(0WLY#O z!`QRS-0MAfz5uuDSq=uA1Lo17UpGN+!-L2xg5V*4>g54A%JDX%vMR#c*XANUhB9n8 zuM`2sB!#XM8GKQ4*eQzkCoz(~%O97J2oervUNyJ(tGwUjkImXF6=s!0+uCRcHyPq6 z9Z8lz&o`zmgCHb+1U4dgo)6811EDkM&V-K5jONceA>DNlrvmyqXX zJ$BuINZ>m`yvHn>SAZnN9>jqe{d8_aOJ^i@w=kF0%i}EAWAQ7n5^BFq!~%1>-}>L9#+X*G@K47AaG5t&8Tb)K7Y1vckiNHPiv5m&xy zDQs|&9g+w>c88XJjSDdqWEK0ZNk8;)oEkUXi~S&l=KfkaR-NKYo-md$#H^siWm9qn z&oj@}opGhYpv_@63P)JlyWWNO5mp{l(to1d-q;YuP2fFyA;6Hd`a6m;pHI)S!*&GS zhUAxO3~U zOI%U1;-3d?C`{cJ4i;5<)>|x6{N1vtA*<2Iczo~QFF-S83Rd(z_%dVU8QK*cjC?1W zDJ8f$gLkm^_QH$hg3qU~%~q^u*;$;?^@NQk(sA17`)zD(jszq&Hf(`~Q0E*ug@|{1 zk?0xDrcZiElu+>Pp*s`klnrP*0Sb)*BMt{H{N zfU+<EI zG*FHAo^9dWpD7pNZ!khG&%3^4g4T{nHOk&6K5g1D&&V?%K7q^aZIwLpB+Q=4DC?nQ zZ8^3i`%$k0+-}i7@^6hILSGC6bI^R6v^^s7>OSzt}@$j;K zbH3Xt#jMh0O#L=x!+*bN1a(9uqJN!JoFBXQhNw+j)(N5F*~-U1zKdWbgwUgP$Tx0F z7e5FAjDtrKI9zVdlsY`Yk*}h+mf_5q9(pHpmcm#KKFxk$*XdO`fm$SAi0u%}Dw}wv zER0Hyb?!GBWIAh&PDA+}Y_Ju07Q}1m+s^ex+*#vy1Z*7*@^djbS+k<^mC|fqUlaPg zzYgdkm#;mB$i{S&XBcOnQ~ur8CJO7%EM}DWw(oJbZw9lx(%N=@b3gcnf77XUDXz6U z0xb5RuCI)9%zP;|gr`B8nt5ZkY0|T8-c;8b zFt+F43r6U}g~3i?Erp~%?-nzDP*~kPtD{!*EKP9WDaD@JfIvIhM0Du>I~~;JL(APY zd3m_|BB=FV$L#n6DAXx*CSDkTd3HAmp;}V5p()V(SEF;V&e0vB#~Jpa@@n?Icw%j* z+_(k~yO?M;3jjeM8{}1>kKrZkCE_ocJ=+bb5#nwm;$^ZymETmLugo5X10SNQMd#L_ zoc=#ty>~p-{r^ACad6Cz>=6f%ot+TJmQ+?DJ0n7ND0^pRi&E6=I_#Bty@o7%w zR#|yf_)*QZ3qv*8&i;V^9ZR&*>-;J;drW|3r71s6r`JJdj2=@VA&T(0g#itYaps~v zOAaWzS3sWanUWGjcLwBR+&>{NLUQ+t=20X?C6S(Qk3=bcpYNVqWAMedMnA(J#P;oi z;_n_yE5H`V<~~-ByPqR9MiW;9nR&Xi<89>r)^18p)7MBQ`?a|j=h+yt zIek)xg=6~5s43Da)}~CuB2=~2>^0kRxk}E+{Yhuawz4e<Xo#pP+JFv+^9gk=gQitZt0a6dL__abRTVJ4 zO_~kkF8G>dsKy;X=EvFc<#spypnOKLwX!v|HNq!{4+$EIi87EA_uWzwr1ux3F86Tjz1Nsr>87xcs~}w!HoXAD)~gnuIqT6Bb<& zeYE}za5uZ2214NxagL?e4h{;xt4?1E*n9zRsSraIe}Gpu&+pgKC#Smen5CHP-}%@{ z8T{+&DfiKu$dh9nuBP`1n%m=_K+fyPIDYf_)*^mLYVhm5U`P1`2+*|z5_`0Q3m z-WrWgH7+=v*eLKyu$qfvSelhb#`LGYn=s4eySv*Xc^Be3ttF%OIA{i+eN{{TZT5)x z+gGA$N4j5<0<-%rckeHk_{`rY_q{PHQ%LmEWuAnsQAIl91Cw&rIJXY_t|PwvTEo_K z%=vFlkl23{nMv#jz!_>kB{NHvH5!xP1wfp`7)Udfz2Ay;9RGRVJlg=BN9v-%<`%Z} z@#)=S<)o&k>YP+6=c(RAAV((M(CUHj0;w(|Y6HYs_In@pniU(@y9Ljyg#={06`Sy} z8dDEAFf{T={Pb*2?Sz_vnPO&RQ`muNb)Du0_0sOnhbo?5E!DQ4(x}!w2FYQE$RM6y z|55(qy1{cp;XgzJEWYo1TIOuOym&;Fb2jeT`()zH@e1>S9zD+A;6J-Nk>VR8I9qEw zlV|?@(wolP8ZUK z4TmVhJS8a06un-f`7vo3=IUyU`s%C%Q&y1C@*4G;cb~}<7azo_;GEA9q%w9>#!i%4 zC?=2cOi>tH!92T{*2g^imGZmszGSiA%iyq*ALN`~esH8M3N)1Mzme20=Xf?n6KQXy zpOHV{%dKM>^$B`Rte{d9c6Pch`bAot<9#Zrpy{_~d^uoosvKt>ws{ffSi-7v&JE4m zXZBs;p3Ja;;8vh%sVb$8{m8X3UbnhRxIGEfTyx|6pD=!@%IkyO-D*?!ON`1}v=m%j zg6`giZiO|2QTe0|u|X#vXJR*QSy?B@K6VdupZPWs;;pdQ9Bq&9@BIjT4QEZ^l)b7w7kWXMSUQ`vZzr<82nM+*wFBh-ywIaiOiYqf1F=uSTEyStxd1PjcN zlVbcbzvOY{#kArpsRMdH2NzlM8ob|mR@Mo;|KTjC*LCNzG0y5*w7>7-@7;xO@oj|L zLw6dgI&w*QPUQ9LJW}|O`5ZaR@R(UF>V5rtHd*HLYKI%^C=HG_I{nmRueo85xrg^_ z0d5&Mc5}o^num_Ivq^b$>eW(-$H0$c3VuF*uTr9Gz=Ps^Oc@ar2)7D;=5!!5Hl<_I zx!7dx^MzPYDfqi^v%&R!y^BoZp{M9rpvhb`JfCx>A*s0qxC>ijH_s75$9tqR?TLA3-2qQE<#BR3_nh`*=Y;tK{`> zH)_5_Tn;^@DV=o@8jaYfCUIkP2-}fcm&M;k9RI#h|AYyz<+(C?ZX#iOtN>^) z-g9tM6cyZreJS%9dPgZ?3rsgLvSEKH4*&0Xe$J+gdFF*;d{26^S~0;7G_vHkhl6Ur z<=@X_$slD&a)BfgXZiycHDZ?p3chmnJLFnAI?B@^Yy5SeqHe~*x~ z(oVYO+ebPnL1!%PMcnQJ!=@8)h-C*glkYh7c?!ytsw8?)!QTYQmDaG?*x{YRV0)Sb zmxrHTlE75y!%qY`Z~f4!_IwIAKj|aSDZv9H4|ykK9$F>$@0XRw8Wxn_hFA)dsTY6^ zNVC!%jhA27oQZDeyz}4hM`s?>`SQZDNz8kld5(+c|9w;4QYbFT zl%<}hU5A%G#EFcEGRkr{i}3)hsiUjZ(=-d<@xTcrFStig&S?}d4HHc@?+HrXs(*NE zv5@)$-rW2VzsLj64`&g&m0?7c<_q96ZlGFtof<0xjGu5q&n>5#|raWu=O%%TzRu^_bZXsf?HF;dHxE7A!=8=goupGFSekWsapG~ z@pmb>lM;qsp}*ey@M5lA60F8k2P{GyzOythVZQEbNWE`dDS5r(4p}`?j~N1QLzK2# z4e)-3`j@i^8-K(0dpDVyiHKtd+yIqHPKep5FgN=q2~90bo>-}wiT6N`w>VOoX?Tid zj8uH7fVB2hPq?;HQ73uzceFD`w#6Rwx#2W_E{_dksH^omA6v(tZr8m`twOK-uk)*o z4Dxf@9;y9ZI1u~q+s(n1nQN!rb{1=mc2}1@f-Gq~k5Z5}ulNHbJK@M0e+JB4`LH#r ze>u46Y6*++RfGp+m2u5V^_}{P=`y(}ZBHwxsKm<@Z1@>cN>@Z0wytsuxL&Y%q^p0b zsEFu8WxA>R9l5C>qUom>c^PNXkLhm$Br4ZQgA^u%2jMuS)wI*v_e7h`Jm0HT$0w=Y zQ*y`e5l$=LgU-M@K2`x$b+FwR*z$_5a5?5NBST@J(bvJ}xd*eQ#FLHUd++(QTVePx0Y0!FYyg@Rs8130E7v}l4uSI@wsFQ-Z z*8Y4k>!p*Qs5$FRhD=U8Jyvl#H$P(Vx$VG7v!_%W(wZ-8`<(?Zs~tG8)tKcf-_>W9 ztCQF_^d5XMBQR5V&GQ{thzBNIzi%@Cx^#k5ClSl{V_zzobnDSLsr;XX+?x)o8Ee_P z9M8>OS0^&UJP(IwRIJXGiTwH5K|x#06i;!blMxU-g1#JVlXiMqZu z5Rg+GM%)0p>KDBn9WL#st_5nD$FiLk7hQby28hj!z{jSy-u<3p!!hP&ZbHCOt$JL} zUVHuTWj{sF^2z6Kv|LoH1|4&D+yX^nR)$O7w#cs!9cerj9j&YTyRWaM)~5A{Nu@wz zf&R&UMOFoexRLrB20bw}PjaqEbM-$zh+pA2RZ?#?pzrp&vY6I4Hd+RM_qBR0{|19$ zn|@FC=`-H%*>8Mouc{DFBcb_s8t9B-qXNEO8pVFxJ_I2uq5w}{aWvjlV@@JHfNW^b zh6v|p{=OrR&XFVr;hvm&{Nzoo<-mA7WY7!WcLYIx8rA&HI`uZ;dJ8e5sU@>b0xgaT zCwJ}+S@mG4#bgzf53`>9JJ`zN>QCLM*HftXp_a=9y17DpTK&I4^5hAQo@(1?AV3{G z19{=p;;oPy{SE0rG=esPWUAO}zsvCh=*krsy}0sDW+ryZYPtt2ny_RW00&XEZ0lOw zmA^Z9aD@gw+)3Yp$SRqI)w#DeWdb1mmKOKXkpJ6C5UQp2m0=SHE) z`d~EG%cD06GQ}9eFn-ROGzf@^*jJVtLiJoh{q7dYeyd>n`@YIlDh{Wra~YL`ZV<~O zY7cUad%O>UqReDWE#f?4xXYp(DeN_jAhsY3-3fOrscoklz?mFpRV6R^0m#=lK(#Ic zG+q9cBIv^o(kz#Z{N*6p!DCVbKkef@< zuaGjGb@M5>SbZ6akn{Ozgq#>l&5@(HH<%pW;Wi%E+8&YDMp%Xr%Kx$eaCCF%kfP2{ zTo%ZL>{sAx`qV?hH+vDBiW5*{Toa%iAc)9ndQbt=|yAVwA86t)Mqn(!F*!^6`t$hd5L!8R45N`WDWApSnL< zASST)3|hbv0`*TRvg#2%;l`0&yf59m2mkqZ$*5IFPL&tEF`m;F`ulMWPz-A9wkV4? zxxD%MZXjNEk#8fCpOugwnFvMpI%n1uq-w1E8NPbrsHJjo5f0=PftqQ))PpASzGq2RM-yZqSXQWj{+-imNd*{|fV|89;)o8%88D!8rypaAf z(<#a=v-4hqgMML#)vqfC#NK~+>;E3|hfp3KlfsR5f8V%iLt@ans!v1QiLP5uLHP*@ybWI0>gB}Em_Di}M4D(s(P|rR z2Iu1qxMhajSyNH*%1$9}oj?65N8U(u7yK{*ar>50h7jHkzsazXaSg!8%$d13cRJ0_ z@9v4URMzXm_on6WiRf?Mu%{6@!!Ft1jRG>c{b++Ha%tmj{*q@=M|IpS7HHPNbaRgm{fjld~Yd{KQ5Nyk>C%W>$u~x?o>L9ui==A!rwLtrXuIgbsAcNi18qrkteFe);k~Quo6hd-q>fT z$8TT!g-kzK`}3yoPoCom73bmyB>@#5zvLkWZWuS7$}9F@GKqsN{D+|NQIM9rXN|#P zSr~+ju#F7~QM$s8ke``)JH{nSIBa_%fklrwjATBPe2n+L)AZ#M({DQJJFq{_>`Ofn z_pzO}KIJ&{b^-<}<-bZ>y!Y)Bry%JMo)5nUr4MU8Ce+pl%{OsRC=r6kBv zL;lU-UV<~hEPT_fP8g8+x6=_2vOn6sQUgp($1(2*+^-=u$ZB(n-S~>RjR$9_9AwY2 zGBTT>s?a)OsEh#Z$%recXH-~zAD?u#BA)v(K?0-KHCG~xE3|LGUB-Ee-TG<&8wNwv zfG_QhCar>NVv%g3yd7wblkP`XUT8{B_xRH#a@2JZpphWXp!GN*Vib9GJ^}BLkdvNu zuCOwW6pQDN{Xhv99Vf{#y zGD{x0X5ZHOHzEBe)n#Hjkw!Z^_ZX{<58IhwWtypj1k=ksLO;=3&q6U&JmE#{^oMH) z7VkG2pj?Q*8-CNp68w9XS26hOBXE8eYok?(um3r!I_~iF;dICG8ZFnKNVVde@@xc- zrejJ&2y(f&a8xu%mEdf!bL=nZQH;zi6|osM2+yKPrIM6&GD4vB&WT6%RiO?XU|fq+ z%A)Hsw`gd+OY3){sb~D1;(?zxBqfZo@tym^aTEk>qlx?)1U1K&(Cv?e7RhFC%|g`g=l-GP^|8mQY{`SY%T0?KHTfmp_^fXOEmy#|M4Eoku$i@^D7xt&4c z=rFWa$CuFD1tjk(@)pY?7Ax2?5R6-z?%?p53RZtLCC@ZQn=u*)n%Nsr*zqTlMvTXZ z?z{Bl>F(V0==RUANrwK+0Gq-D%58kZ3Y@`jO#HzYhzK ze+kHFpSBEqy)c=cIhZpkIMCbEw|z9r)~(ij*F9p#@mn{l;mPiD)o(TpZ~JeH!?EmR z{4tKtt^eak`5e(hF%vRsztKH^ggpHY*C??{5CPYbPrmj*p-qm-B^5zBup98j?kT6I zs^B0UQ8}0ur>Mn{DxR{jOFR~#B#udYoJFNZg35&%uF^?_=n#-jz5*{)Q18wCIu5rs znw4-y^D;}JjB98+ve=_#@SSTM=t^cimGFb~bNe17eEv1`Ajh6jKwayN#raq@zm;%| z+S>;HWCH#!Q{M${(eHB(_az;!=8>REMhHpSENungNU~cR{i70;>2bfj(r%X1urz)@ z`Egw2=SC58mTl8~5hFU^SYL|VWUjQ**!XYjyIw~qqi^e-+sKs=gm3HaE2$h(Qj=5B zB4eK_%;Tn&nI}uFel1MSQElWTN?b0A-X9%lc>n2OW=m1|1!hLZs% zUGHQ!K28LV@s=Fuj@dPY-Xafn55lYcEDb*9F04hx$Lf=$RJMz5Lv_o!S_EgaN8CN* zxu7Gs9rS}-moc>h>L?a6=BsEM%Ux?s2Qn8M849ud<3N7BlRLja-B)tp{c2*OWn_>x zYg*AGb=KeLx7R>sQFMi)gvukxrVcQtPjw?C+e{&9V4*ec&2%dz6rl~gyYkYY2Sw=q zD{~=W{4sn_Rf2Gzb-!{IW%}B~-~F!@lTDOE`YZp@UI1b@0rOgSY4RoV#9;2=m}p-}=6;m5$5lxOtRhF#5m3K`R6rfYe## zB}pi&`4lmAfbZs$OohgW_dW=k)73a;d*ox`+50d7yYLGPC8}o@e zD!i}_fDhAY&XLG0k>jK(RAqHWtMla@>>gkos|L|+;Djdax%3D{gQr5oN|!siZF0*` zioZfDh>7=7EAF~_LuoiBhL!yTXPeU)6tc@CluT2d_j=N39=z-8^VVljy|xwugvlk~ za@tgY#gea}k$*?5tg>V0_~ILjq&*IHjH5CASORVv-LMF(&VWG)O+n|r6l1=q9+3@U z)SHCct&~TRM9yQ!!&|B4-mVCS?5&1^%G~ZZ)NJkdIXBF~jnac+YNBy#6V~~F|@X}mV2^x_9(Y$R)56BxC*p_?_&jjC-Y{pTpE?&oydIQFOS3LhEDK111^9G+jKL#4BZTNSKyO2@ed<+20rpI-FvQHCVpv~tXmd; zIZOIvH$#^%w0C?8X4_=tD>%LC%mH@krJkqt*AC0aX(280}SLd-s| zp~>%c2{#Q2LG6q0i|z}~F*Zd{lBe`0?HTQwcPmeQz4bv%L1JGvY!RlVeXig9XjkyYJo-JY_zn8A3#Rit|r-b7TI)`jEK*~mTFSPL6!U8r=_olH7W;dX)EA=b*` zohL=wJmacxvVU*)tAG@(3kG?2U%xwq`Eh71W_ZO~%&x~SAjLQ~g1}faU<%9PDH`f}jUr=7T5 z*-F=6j_QV!Z>yF{w*Tu3_^1#Jo+`zQ^6(U8LF*jB8EI_l_WS5Ge7qoMj9&#b!RAr6ol+Bh?k>6toIy9u&Um#4VZ^{!0c7+K zV}cqOZfX_zqIyW|15vPz_|(Wyo8JD;^qf6r?PROpyY8Wz2Df3&tbBa>pUNnQJE4ByeRO=vyNib{tujW( zJeZ|K30Ru@XTmhZ2*?cC*SX(xFG0R|#dluzkz`%3cc;G|*F3h~j|}AU41`J2uAL7| zB1Bym3!i3=KYz@|b37A5VGSwjR4$A_IM)PZnA@#a6U(AmFlAQ@&WNsnd~*WyH`*+x zPGhu2$xzP=@UE0jW6m$VPCRf8NqvYD{9d>5?uBKkv-VnKth9}XSV*PjTKB&W=oF34 z1F4iA>|MdH^Orsrh2iZm2A2<5JaNl<`)^GEgfIS?X>lz4n6*dm>H?|w zw_wJHG*`%P@3q`eY1?i(L5tw4%yS~(vbVjjYaA-G=B-UN1#)4p6pwSfH%U9P74~4< zz2k4Wf>%^5l6*DBJ%77|1ZzxZN7~(o)*NTg|05a%Fu;!(Bv2H7M1)&@T&o~DH&JhV z><_HR8OcB(mS`*P?{3a|A2)>JmQc{GAA+2>?7Ddo7tGo(Q`0Q-A5g;CFJjOF<;b+O zGk{j}KRw4gQvCAsBE(!KR2*SVs3IoPBva5lS8pj~JQy4RO;vnqN)2!s#eV2L+!;L1 zN@1$**01Z{K+>~hge?~$%#*|%X-Fk>E0)i0{0AF|tK!-LD4CRGO8N5SeReqB1}*R+ zkje*9htcF1tA8P&4+BwVMkdPHDuP@Y)QEANtkn;t4H$4&tW&zjuEq#Yt6D~NcZFH~ zQRa&<{Qz!0!M^r}*WW8*wmbP`E%~Y*2JUai-wrhZbFbV+&uBc$MBdqCJ+Diz|CU23 zoG7v1dI~pXIaq@Zp&r7+{h%BHSB%OWP8|Mp6PuOq-0x#_@z|#vmN^~_3&~QS0vI0D zj^z*hp)EUJ7QIebg?r)%zyz1rO%Bvx4u1QiLh{xgjqbrw% zUye^h80lh3%{2K~Z!!zi%!)mDig-jwZSurUl-WrEa;ln)AV?ujQn~QRcYw(~5F$!A za*uPT2=dR;$|IuH%VO1x0;~QCL-3=xCL)=7J!>6lLp2S0)O(tOqJ61OCA*;SvAT94 zww-k;RvQ2x%t4BO<_Fd}juy&57B)^5OKec-t3?5Q4!MP_P;IfeP0vM#lsm0Z7o56% zakIQnW`=TO@VP+n1=~vUR*z!x zdBwD7be+}qGYeE|1|2VJuyd2R*_gb#b!k>Cz=F;{);O>zR{pMS4|KNC3&Xay0iN>D zF2$`dlspc{^-j;dUo%Q0mQQm@VBFp)-@o;~L3Dd`t3^#ACR#2?Il8d4xa@3PT=lFp zDs{Bc96-|Tep60AgA|%Fz#%@G!3;oVW+lHXd8oS+n!wB@CinIbUxdcEVj(Sz^(;tjqU4s6DQXP&w+d9VFOv9gWB<3L*( zcEb~Y=$}z)eq;M96GhPP94=gVL=IQ}KC(dt3vuG@=z=v|%(I(H8NZ(KrL_21En{ta zn}Y*mYs$WQ`pH%{6#@mjIi0OfzNv!DRd)!f&%><+gC1L!50%6o1ltQZt-b< zYq|C)8yoBouJ#fz8W4;3?XHn+=_TcW$AbYA5w!-)$4)Qt=L}Y<(8M>tlx9#52XKEs zynkDz6k6bZVBEpdB?hQGXixS8Sx_hufIhO<6lCVk%oe8?(ko8x3+GvNKeyT%8rRQy z5cH*0LONgzcnK4*|V95@a-u2U@E2ONt19;7_ zv`SLKe|oL|2!FT|{2YXJM0C47^h$#Zn#G|sUy>99d)qvC6|uk0Gr0bg(=Xvz7j@zp-fvC^=#PGBaVhl z$9e&#$K8h0ZyYKqZN2o&F3lyqYo{J=zm-7c1MVD8b7bMJe?ZL$GY- zagk?Kg|SW&CH#4*F!LgRG5;pA??HDci1s7T_&l8dfoDeN@~~P5J&FcfpuI0OJBdhH z{H|ZTE;Aj)Z3;c@c{9RPVoh=i1|e5uK27%GC0Zjm!u%0b?bnGL$vkQ$TfH#6e})rB>O(UBnP?>!c60vloPmo)nDPsT4)oAUXNZyl;Wc%gA$%I$M5!`=QAgFC;>^{#ti*W%~ z@9cfwAw-wa`b05!03h%kGm5&MAi-eMe^QWHYLuh(^KzD#e;A{K+Cn_OzIc{FM-|*X zZJ`2lg^?5oed-N9x09}jL=pjMKzRM`i;0T%)FXn)KcGsvS-_@q3w6NeUUD){y|5Bt z&=8({ekP|Mj&)XjAIotA^>3uzI&bfZaVwpnlES#8#6oQ|v3q@C2hdHcefi^*T76H% z{Q_3Jk-5s;H}V#r{`c1w?zK(nOX}Z!$AZTqlR~bi&zuL#W+^JGFS3u9JYRv4WVtONRS?5h%&y*Rh5c z{$9#WX-*P!$3V0!!_BYr_0&TpJAC~Yr1F9Jx&jHl>I95XVed>w(+pwPuce#abVK@H z=dBls)%XYrp8f3a|gJ=~JnfTAIVWmn8iwq*b0lTaQczOmIWk4j4FT+sI2#2e;+Ka zjBoHFpZxQ9Ctm!OkZjR^-z52=6lz+0@i?-+?qVu|Ndp#6P~jJXL!`&N#&?BTnvEk; z81I6j?;7|NOKx(E6`}3`6HWlTunQ8W<$Im8SJ4KXHrRsWIx(_D$4T#w!ZTa0{(Q@k z)EJe7%CJgcYk8Z@JaQ9sK&P+&y2{qrtC(@^0F-iOU^;S^7awZ+V4~C9{L*Xr(;x#( zL0!5}UI)R&6M%=9Uw)L+q%QSeqjb23+0X}fPg$r?uiDP(kRz{}+!BycQrV~~EJo)- zP?X8*o6bub#**Kmn(>A%qwFaCBh8>IL{C2BX5WDnMN30Rnd_~5MsNV)UEo*fKf>|( z`P1dHR_YaC!Cy|CM%d<=XXHwA(u(^qNN8pCak{Wc+E5^}=A0Qj`^Eq6NB^G@@N^ITuueT=YE}V$J{PE z0GcR$T+?D`0UGaLHt6jKQ4GRNx92miWyT8U5mBawA+zbsT^L*1;Ay)sTLxHsPVS<_ zvb0b-d`1ElP!)V;VC?Nk;lyQP>E^ebkh;3~dw3s9Pfrg8tH@_{<2X1PL>kNoh*4Em z!HYTZxyXrVZ~?t_5NbFQn%jLRO3|@PA}{^vs?0YtOo}2}076dSGw_D8D030jc7^UJ zUvrvMN**#CPfFj8%N{t97kYFFtb9w=(AbaJ?XE(m>agEUgAc3TE_G|_f@U=1iWzT% zjuPcXh$1~xXjCi$-Nx?_X<3RYc3a|o@KPvovEx_cyUq}XeKmmbY7&CR!!Tjb!0bb{ z2ix|r1Lp^Ic+liZK?f>0i>@SW)ZW3v&mBdxW64t=p8flRL9uokdJLQR)LVa*9PtDh z`k(pezl8cX6!ZO%9}k2FIsID4B2B2OLNX+=Kmc3RrkBWqlg!F=h0UiHDz)QQ-RAtw z>CaaQO=dmC7MHoK&h;ldNkt)1b`{QDHY63bGMAsNv)d#qk!OpX8{kV-%ibGM`iI6G1TGvTh}zIO z3JZN^i_g3gj$h$M=*bd-C*0)RQUk!_X%YeO_qd+46sW}+ColNHJKmJ77&V=Wt z;C#cUe?&AFS5qr8HfAIn6QtXk7R$rFGF+g`o%^2bkCGj3jNeD)y!7A&x#g7iOgy7x zdPM8x4~D_xYB_3%rU~`PeSo$h5^qjgPBk=l1B5f(S>qXl9-(^;ObGI<6I8lbaX2(w z{~|#L1mV2~B}(U?tZr8@qO*t*I((+#RyX2h2{zZnvO1M1)oqG4>xVo~V8@JH0E<#N z;=nl{!pLmec|rlxEuP_S6P+5C_^a7#&syykPn352!#K+2ktZ=u6xNSN3pU55Q*|R< zDbk9g<=cS{$h})GD_ii~IwL~YIaJ`iZ^_{E8(1%vl7L>|N^VKz+|_-7{gtYHLGmP5 zzGKB|xZ`EV<*zaBXZ~7mDksxw5*7F7@v5aEOqC7>AH6>3Br1p~XPI*8Fz-5wP}-Q# z^+21ZvhhN3f6H1>g624CDpzk`$XM42gah+OpgQgZc=7cfta5ePpplp_8_E&)U{up~ z3)EjXQ(lCQFZF0=y4sqQ&hbA_cUNxRQ2^w*0u{+^%qg*(OOw0jLtwHV&n=CTaxUleZ@ z_S#q%j?g)JpkXT${^0v&_wb8}kSE*grPhWgzO&D)KFoZ5ORD1Fby_k9$$726XJZ&X zjRu>|*%NeK2H8vTx*#3EUp6R{7FJRa&*^miRz{n3E4ZKsT@%d?Q zr3^SRbq$c3%&-t1g*wf3pI2E$CKK`Ba4D;Bv2%g(0~i4>BXoLxbU&8G=2!6WdBlHX zT50+YTOhPAmCi$}r?R^K<%hCg)+}p)a2wjsPLqQ4m}de+yv&45^p>ivO@od6#ZfB0 z^e>Fo-V2@15?EKIx*(LU15zAMTLhus5=#56sCYaPaqVpPJg72jOp_8%f0L?$%Iw#x%KOR z$v&ghVYxTeA8*^=d6C)%ebP9_y#+L@8KSg*Onv84)p3?Y%tt^&*V`T`gnww(NmBS7 z;bRb<$~IJtVe36f08_I`MVH=}NIkSaqma>*NX-@dq3rHFDoi2fBse9JM#DJRu;b-yoX9t$ zec)d#u9YH|CVaPquG~rO=Te2Z;;T=pRYC=V1I6@b#tP5RQ01B)9ee2&x?n9Cea7d` zb*c3nng{DIR>Q~Y=RTcYJL>3xuRlBrKT1rbZWEJP^ zR>eRa6GU76vK0o45;$g4vs<4=*i+Il+ungF z(2hMgai|9+2UsA4n!F840!sy{j$pj@+0zy+A`13l#0nf(iO-MN0u(Q$WDi@o)aQ5} zS!VSQySKZyxNsenoh*3OS{fC*4LmThG2iGZ7c0+$TgfEv{bxQI>rg$fR=ROqw#bNn z&m+^2=g%p-7bIRWTU{a}_0IKv`h#IbJSLG%%y;A68h6?E0s<$Z=pDb6OUTt+rn-K) zDEY(afAtw34;nlOTKFYVC@?U=1{kci{9-|__U7PlDb*%Vzh?VUa$>Zgu3gq!)q9EW zRkK{7!k`{Aop=70!Xk6Bllrbn*wo9 zkac3}Q_i)Xp!^dKthbZ$>6+P?xE!|M%+PwCqCZ_dBQZnkQqjeG^C0*GYELHvte9WN zX*AfZ_N5iX=Z@h-vz#`8L1#Uk4Wkq0HGTunGL*qFmnd4j3~Na}VJaY~f+0b8wfBXU zpTcVCiMLmnd~2L`8`J~kmma`HnQNs!0J@Ur#L=}*^{zWNdzTpbz9##mbl2LEQnVeqKtvRLe@yVO5&qzGFhO%8qCU(sCHu4ORH%JI z10PTN3oS$@Jzo(HMbt6*pZzMlXU`>UjC=HXA$B|BQ@ScRqF4ffJznj5mdzI{s`QwZ zCV)`rLsjv~zkPIO?6?zWI98jdHD-!Gn%pLo)0#q;&^87J`c6bFf3AQ1>#P^$&=abkx&U$uS3=9m6g48p+#VG)U9%ArDR!P4bPv|N&5 z*11FLp~&K_6|e%V@k&Y$-((QiILIxQ;}!RPUP2p}sYq#Tc}07h$~GK??Bkteg(a?t z(#NRj9@K>o3-9?u%Ky9yM6piZRAEMi6L)K6v5@LA2eK-%qli@};OLNha#VG7q(IvB z2;P`n%UVe$8p<{5f?S>4;)^nQ{L;C%fJN32}rG*sfO`CTkL#gW*)s#`SI%94RW?T z;`P^p34+~;!fZ+h`eDRDEQV(7Y@RV(DwT|F%~_!6R-ZrNTtBg?T@SB_OBy-H6ML(M z8#0y|gnH5gA5OE+lpVYO+G+f`-A1N^(BC5xi<%=2USFGiUYAwq`?tjiA|R)*Ib|gu zbRz2_FWt$IpaiB*RgTxXQHAUa*Q{806wqPeFl=csg)U9R%%qVaN!h*LLNO5nsEjAf zQ`i*#EN~CQaLeb#te2P4DMh=1<4HM+se@`y%sL|VuI6V_+Za&5G*PQf~;}eU)ny{RE6OE*!RMP*-xWt505OQ9?YHaN9h}y?i5l!(m9PKIVNj`W8cA-f(DMbVGs{vwA=fGm zXCB+S@$38OM> zoRf0+aQr1uui$iisqFs;ai_);XI};F(+YUY&b^GO{>Kq8a|Q(pbG(ji>RTK_5%j5HzyE+;D-6Hf0qkvz}Hf0U)F7spAUj>tnb2?pkgmCpp%R~2W{>vXw zN8J)c*^WzORkWA8)O;b?m<&~rj`sBH&^4rB7u@zB%DA88`IfedM3ctEx$2Vpsp5Yg zDr0W!M(LdO(+13wg{zSlP-?v0#qS=<4QmxarAnU6@)sn>Y0&5}ozyrPn-BI~0EG$c zB#rmvJ5R`!R~We`cmQ~Dxg&k!+BWQ)QhXS9J@czjWV_kxcm+uY?MhY*AdIxF=g|=a z2Pz(DgL&FFt}}orqG36*NF{(YHmnni8!5wB*yqF1u0o?gzG(#8vnXX_%ltanepMk`&858cy*H>PWV(-sL=n0K_+v&r6p}?`IiEgGkgQvXdZ@ zYr(n^zWhxyMKGj(mytL9Hukc#_4h^F4mOY2F#y_~B^Cw#uWQD6pmmJ7=EE=kTc_{| zv(p%z_I*$@k0?a31sKe#s~_Yp-V~7cJTV1izuKvg=V((gRKAVRnn&2IFyVzF z^*EON&z6GaiUTuh<_r%+L&`u}<8L}Y!~*U9JfpE)r!u46$@-s3uVJoIEKcb(g(C0p z7x17}7J=v!clxj%H^q$Y19M~C&Jz3ycZaLUh1dBx1^ra?wMXU>^YG&rO?oSGpvlqe;5e_lkFRn0nwMDv6SObgjj;a&6@v_~* z77gQ3uZT#gD+NRPfaqd;O-#X113iD{C+0j7N@CJogC7zfkwyLbV5jjwVmj1|e0LNS zt;M@471PF9F~WKm;y*a^oe|xHFhRSpNyND842;KRauHvSp{2p+*BWF30`Iv|n_BEE zHbuGsSz`1ucI+LitjJ75q3lp8&GO4fZmfgx3hmFN-up)opUa&T6f&dnkM)ho-Dz)p zXYyb%$#%TKVMEonG1i;XbG+t)=fSHh<~L?@iaYP_Ge6hkxfO70LuhNkM7oHvM(d5q zxJS=|HQkTS+WO(qi?LoG11(JSBwt>;BK_j_!ob4`UaIRUf0~Ee0=PA)!D;w(x?|;i zZscuPVKYnroI`+}En#LO3?D4qqfHM=8vy)4p_RUWXU~GB*BG5qaaGrz&bY z(XH|%nuB^TUqa&N&;^{Neabz{MhGPDG;?hxW=IH^#Gf~-s7iQ&$hU><$!VHN?Lw{5 z>AJ=^OA4{z%trZsoCj5EBtlBDKT9|rO(~6zMbvpwN04fZO2Ti;^*6{S(2?3kywB;r zncBGd_se95UWTQDXa{0xa0MlX*D19&*Qb83?kvW|E~!wTZYyn{gb2Rxd_3WggR-xu z#=RB4PI_CMNN<}@4OS|3cms6B7MTxB3!L_)zAjz*jIeDd)N}2{oj*ywR!4kMsSeh} zTo?OK+FEqhB}7D0GGCqSLcFS&VJO^-9LK7QQ$w2!Ben?0WR7J7Z;$)T#LZu{aC<|4 z)32d1K@g{pw`V%-o|pO*u}d%SQ2L^{#KvkZYUVQ?*^)-A+RN8ImP2&2Vo}Vef48Fj z*Mn=m)RVS3rzA#ZJA%u|uKb!c^B+;yNrE7nL~3!Ihdnw8Y9LyDy_Z$ICq=a&s$Io@ zWD+6dKC1W=dJ(Z-z|Q7HNU7sJz^0j>W=U19XycX`_bv26=X>QF_+C^C9+Za@=TA-8 z5bCl=m_o1VrWeM+y}gGxLdEH^T#)s}kp9XXhNRMPOHX*}{|55Xgqbp=0&PK-b@c6% znmcePZmLIV*I73H`sTLCy4rjJDzYk2%`l?pX_!eZ*4N`*bref;(P@>%zb> zQOlqS$E@p9jS}N7K4U=HnI;tUcqeK1f=g|D*9y~?V%Mq|*%`EW?*zlPSjdlp;$Kjq zLy=>$f=FX3oI!D1E>fVbL%ssXk@O|ZMaz(c@e12>8^1XGR+S?4C~Ter-z_2I*-~*r z_%4$eSGJiT^6|qay@}`szL*?%OzLJDMoroVjJ*UBLy+@QX2($Z-?s;rB{Wi+pr5h) z^-B|?x-v90i%3FanJINeUf~Z7RkoqT&)GP6D7pw$Ze+#^b-UpFV_Hy3`ZhL&U(XFO zWSF6K6T5SdSThV4to3XubdrAyA`ocz;>1z}XG5qOF?F*7-`UDLUFRhj>A3YWj?@6W zDRzmm>Ob#PK?=riwV8BnWBwF#(pA}wFp@v3Q^}K4e4Eh9w0Uc&TU-`91fXn4=xD)7 z_;}T<$xxj+8?3_A^hf<1J6j(WP$Uv?{LV|hAa22uBl2XjE?cx3Sb{%;T=gDKn;m`a zI*zLWa!VtM!BbB#f9kh?{N$InZty@n=q|T+ehZ{^BO;>wj6M zU_B+={FUy;3tugWbjVl(HXHYUon$l+SAIe`c|Ym-|7wppdeDA$FQtC0L*&%IF_0`N zS)wy_k>u=fw2g)TuT)~zu6JDLghnw9dR(Z%&{^CGWAg-tzg4{M@4E!T%-1^4Kc#Tz z<@gF!pO;ODc>D>e{>Yi!O1x|OOyai)JrecJ%$H?CI-AXP6`?;^{UQnbh?q_m9vjcM z{rmd)zbxaAyPPrLBMFZEPu ze^cmHzjUNAtp`Q7dd*M&pXLhK0?K`z-AThH$3>Y$#1$(n}NtjOW@1rr*Q}w$*N~OpIyCxrz@=g&QR}6+$0Qk;DuM3Xu89 zvK{2yj5|?vlk9s0$R5t=(5n!K-fB|P3w7T5dJ)RsxPdZgYDeXI3+%9T3XqjE0UEdK zRivjsLwM2k+e#Ih*HQ*+ppW|Cb@p`}URb>O@TKG3uu}&|%&m^ZM@u}~q(P11Eum{$ zv+@c0#H%{dJrnnjM3whb&gZJ5QQp5~B;wJ;r5xfyA{JN9ig__m)6=a=JmVFsjzi z8x&;SH>mZbZKn}`mzHr>O}jUF4)I3r_}jU3iyO~q3i4OaYjWy^v zKN$Ziba%;Mp}-7~LT$JUtkzOz7+!=cAwB(?n9#26?#R@S+am7_J&vOOZqNy2C{~*f zXZ`;jq&8R_77=mPLL+*`GHHsXqBuoS2AYNCFaE&4v7Jmo*YNX4r%KIa&g@*N8R!ik z2vVZPuqa&+7lr{`BVmy&h=Y`0qCY)}-e!V0^g)1j)Dfmr4w@6nc|i}RdavCozc7Vt z$Z3h{4ly=Mki`VX%_PPIZS}kC%b$H_sD5_~mKqge2N=t6oNs>6`hESRCZ=VH{Tb)B zluMcG4{NX>4^y;vkel?#kMn79Ufuvfs-*NI?Iy~t`ga434p1kWX7kIaFG`S29u+#( z>}>rgE3UK$p?F+bH44!o7D_NIY;_!m^DD*|55eb;aK)>+_~Mj&2D?| ztSEc0TV|3~*?X0lO_{eX5+x%-qEwPmcJ`*E6oqUmnUxXoo|k%l@B1D{e>_jeb3Ey~ zzSs9W&(HZ8TLLyGh@5FLq{xW2N)sWVPUqnLCPn4>v)1-#!E}ZG;65L=MKG|D^T51Ulyg?DH>=Dc{4-rg~}>NU=ZSmiq!Job33? zaPiaDYoXJzjN^a;d~J;3q-j7)G+G6C+y2!?!}ZQn9xgIkZ*;vd4gDv3ug-s&P^CGq zfAz&<^abk_RSpNRQ{=NQuyMRmKf1ZbmnU}JWTGA#8?dFYNWE6MFc&W5h$keGcN zI;7_tgr=wsfiaCN@M28CAK!t~QZYjbb-T5hxD%FBy&Be=(Q7{NlIo#8w10E;6OGEh zuEwDPVt?|`W<%Mf$>wJ2Q1F$|JtuunRi#=$s$2y$KD_%9;R?|mXXOt~$gG2>W2qu` z5i<_JM_(>?j~h}R9M1}J9VmQW-WxNJO1|Fqw#BOZU){JC z4Xh*jMT>8G$oq)L6o?@nCF$+ijGle)_@j7F>2dYwrvA7lTqY)DeO?$rr*2hGxa4>O zq^o>UI`|Pu!ng=C4VF#NUCnw0QTbO6%6z)StF0yQ>*|#w1l&EF*7a=%BDV)5`&H#ELMrSJKbN7krt5Yn7EaBT`pH z7>AvdGnsq(_4a3Rp#xd4)V+^PSIfbIA75Oa{M)!AF)9h=YCHSOch~#_k9J`ey zqT6>GXAvp41`g+zhVKnx?~EY);^;Y?A-#|d>H*WuTBopzqiW~+bPU6zxK7f%%p1mO zF}2!Ln7g{|BK*w2&;%N%7wc2e$>Ir&g0jdsY{HK=cf(*)1uLCJ*ko|>H@Qj z0vc|vn-{h_Z5kb3uqwG(YUFyHTu_ z!)>eOH7}Zd!cY7ODZlJ3|Hp=?W<$}Sw*=_E3Yf%g`fZlpIL;&YkSNzcuxqXG?5aUn zr+Tlr>zY5r;>@{Hg&uKdmn0b^-8)qY{0i2zNaNt`rdAsIR8m7xwH+jc)*oT-g$ZzR z1fL@O#s|re2zY##Ro2Uj01zMfrch8nyn0qF8pCa~{Vp`0Tg2A4m(RrQ=r7_>x6S*Z z)`zO8k8PQ=U$?|9FS)UC8_FY!Sh2}_zJ(Plr41e*d!(P%R4Xmke`w3J*>$OAHPy#Z zvUVp739Onl`cgITzbN$<8&?0f%#OrjG@&stH2Y5?&j*VW^{AUnAN`ubF9XNv1nm+m za`l<#j@jWB7%AQ+;`3{94sY z^eeB0%bg#scah1am%4|)^)ZiHoyWYJ?DwUQohrqngXVSRMzV&g5j@kw0L2mZDi}=a(boz~ zBD^d7v;pf6jdbva$ciG%;uL@fPem*@uB^YIGH!*QHW?G+W|8_P@*80hrq75iPeR^&B}ic8sxeYv1C#jn$% z*QB2kXnR_g{&{}u@1_f$%2Y0f@;4p)190`Qco<^dT&S)OfWOzL7J{}TbNF(uMWpq5 zOxC09__gR_+5lg)FQia21kZEF405UC@kfN_MZkh`25?LjUTNHe0@beQBp9D3m!VC1 z&=vXpB-v4WEnIq7&8P$UxoEC0x^?7pC26nzn>kW=3~dS@I1|{CIudffu}m$R8Z&-L zvb!<$;<*Q?x@Argc4&LF#gG;UTw;I7bSRw3x_O#%dpJEZ^3Brwp0km_Gu~j`I|h3+wIAPCmB1P*kg!u+c~$$NQrHpaXygqL;6(uajjTYnW1AM+G9_{MdM zT!KK0)5$e0pO2ijtp$wSXeKj`kLr@>5a+c_x%=$~7$kfFHCC@42mvQj^o$H#>>|p@ z9YY~=Bc=YO&Y1`>Mexvd4OxDX$*YrG!Kp#|AAyx0bu9AhZIU3~nZ$`Yy<SD|41$Z1$J3GhzF(VWM1 z+}1qz*-sH}JTKwo%E@_c=-*cZ98$;}#{D-^U1Ek;K@6%j2!Hl{dRu^^1iWXIk zb`|1V2L)^AZtRKR_axOX!I|>)ErGV*kN>j}!Q#y{(vFF}G`2Hr%XEPr?*=D6J{xTE z6Q4b_%z`NQP(QPekG8vL%n-Me(BXnf?B(GoY!5YB>CrvFqSu-EZn4a;I*@NSr5;K} zLXLW!vC-dr_A%uKTn?fZNGJz~&nxph~iP>97&tLi-Yem!VMTQpAd)@9c3`hW{Na0R(axTzX)B2!I?% zqw9Mzi|M&g1=74KKjh!tDHsfJ+UNz`!<_Gl#Vm%7@-b%Q%WElhZBm| zk9YucR^$ogqt8G#8(x1C`3{02mdcYUA7iy2+IpCN*V+%y-2cK{PJ>*RL ze+Z8%O&OkU*H(dT=Tmn2=V0qFxz29jy!`1!Ri(ej!=j%5Uo<3ya-ev4Q7`jr=TPf^ z;)is1L{T`BX>jY%6D2(Y%_Z%>`uSx`BKkBX*r1%jFH4EQ3QdQ2xRSp=3AY6O(~?)+ zJj1Q$FK4a^(`@oaQxp=;^MUt@!ZI*dO=z=3q&e5-TTg=&=)|_}SMp?Inqic_^Dxy4 zI0!v4F1`kG;lW&|N9VYU4>{X7bDr`%%hk(>5~y+{Zn6iSm`Zpm^z>bs=T4w^JsQ`$ z%3z3mRR6$JTP@M}Tq9Ha#oUJzLe+?T;zkhlJ#MO4245xuOiPIrc;~2bXAier%$K0H zk5l~vNPYK(fwg=@F~m#EiTH(PEo}Wbe(9EgL15m%5dsX4MBw~w)B5{2R6b=OfK@lS z;%u@cTa&^8=hV{H*LMQ<(76Ee%P(X(4%j~Y3jB2{kDwSoE}2q} z3FSXeU2H=2JFQDDJk|9Hdi5#Xf#V`&-x?n6EqC&H21*8@gZ$z5J2Xt;xLTRp_hr@- zoO(8rG{aXx7xGA~g0~6X{7%X2>_weLu$UMB?2OndiMn%dVN)YsuG}dYjzpn!ok7Hr zaEnE-IPP9($Mkg!UwH(ow&w`I=fNlVWLs1#|P%B*x^ivo!sud8mf=lE; z7ZW6WBfm=TD*LFuJBwH^6oSTKlO5 z9#Mlo0Y+(Cr$5_AF9d+YOQTJd#m@u(i+{3-4iw0P2ktVmzuN(Hmbrb7U1s9y?A!yM zXQDPu^*y`CR^ixZkDs6WwfBA~Kk}pv$AtD|f$q;i*QL0jRoM@g&w8*7qxME*5~lbR zH$erIRsI*w+l8Dpjo;H^2QOcdzwqi1S>^&zvYI-9L;Uq-veaL9avE-L@Up1|d!nL_ z!CGh*y+HfpkN8O`0?A5uFW8=h3ri->H4y5;h^F}FMnaF}lEaxq7O08Q(G%;Cq_P+W z7Uao@4zn1BaJ{+O%a>^uDYIj?FPArf!v%t%LHrb<21#W*oZjWU(2ZV{-&2#PcTR87 z9MLk~LUeG5g(jEBhL71rFQfzSodLj0F|U~6gQ@3#clB{r6w;^`auuP%qY?8*hw z=ZW@)#oD)GFC7`m9IO|RE+~qW_WU&56q1Tr^8q!UmKWFsd0 zZNj44v-eQ=qX$riENFLUpG?9kPwP^F9?`yh_}-(3c@{0*4?-ybs%n6E+1EOB$|0LS z+XWi^45|=f&|4P11rUMM#w=U>XBY@C<8Tj!klL;#M#|ly|55*~^zipcG1$gXpbDK` zxovlhk6!m(NkD&e5~RDtb7V*yO=agIv%31Vm_dUw@R-?d{=r^%+B%Ud!E7taJi|cw zS2~gOquze`4gG5KEEpSA^l?+u=%Zpi$A6GfBUVro#?+#iQ5uRkJ++Ty=UI)JKf37r zF|Ljp(EqRN!J_uk*Fp+S<%q@Wrf$lFM*xiTbK5>xOg?mbZM)u<%Q6(G;NquvJxe5u zjCH2&iB$gFpYPTQUz~na1M>0KyI|u623C`=758bIPQ8h^S9*I(Gb-$b)ectB{opDD zA1=t=w@7{LA0vQ-i@wDWV^K=-@xq%xlgQ#h^<#MrPenH#amAp-j@i<6uT=~xES09C zCxF`+$(>9=kWHW(3{e7A)j;0P`i&BP6#5;GZs&n26NDh$57j*Wqub$sA|xi%#?$sN z_Zw$YtWW-@B98h0an~3e0~S{aZ!{>d`GCXvxazI1f445m30(c+x2e7F!mPkM_3boe zPtOJx66|r;t#$p`z)D8zDwEWu)TioVTtE6V6LbP7x_Eo~wv`IjHdiAK#uz3;R+Y6G z%oW^$ROp=kHXip4JT1=!ZV`+W=mqq>{`Bt<6vstwQ^a;yoXH!s8@UP%j@RtGxC!N1*nw$p^$)C}X+G1O^d$$N9eHEV;m zgdgWt@Eq}XO)ltH5mcHog<<;hgQCbANt2Z834h3V*Qd_p1E+A|qPj~9r0C35!vK;4 z7}BmSFXm$$U4-DDDAl8nX6hF6&J4MGek9lZrlwUW688`2_Ql|{j(*LbSW-qOvDKfy z^FOnejkri%{q!2)2Z(K^;XN#ucgoxnY;l*%>K0g@%zrm12gt{S>K<6fGU!2^-0j;J z3K~(x)DJq{Cc;72Lb{u39suo?B`bl7&XJ#s_d-(jaICGNl}{lp>-P@b;>0axIT=0{ zW9Rb{G6W+aH10dkghUSTvKRCmVQyn3(6K;Z9%k@BU982fIo>l<_6OGd}}7V8%VJ zj8d9<7`P0II|czZY%Q;Q>eLi;!cJ=19N&2R^*k-3GL$+5$k%~FSaG$QLr3B{=I6Qi zI~45*FzhyBEN}Q|G@T5htstMyX|(W-~$(IQZmjH0)T@B_m43Im%dDwIQY^5mt; z7HeNf4%2YW6^XLNgz3{7S`;|#NS8F+^HT!`iR z_-VBP_IHX+Iq5lP7FAc95i5~7&;M>^s{bUQ<8{V&68}LC_>Fi(0=jy~wF}DSc`kHM zoC3g@XN&Rg9@{oIDeFYQP|ilM-{t`>*M5Lu`GJ%w&iVXMeyP-4Ml^BnG+ep@@?kv`9hOdAn3I!rgWAt!L#by`DPX@27XF z+b0wtS^;XlY?2>%u4~PF!m60_{s%1YWo#8t4ku!)bt^$5`W!PK;%^LVl~twN#;t(?a(Wj4n~39a_fe`YSoQWCa|Jxy6H;)98TnC z4hkfW{6li%1~}=N6xe#_3-;&IW}A$EKNpC{@f~GG#FD6XpPO*Am5}36N)+Z64Dg?DPH(#^I!I8z2jUQ)N8m^qXm@3srZ< z(GJmZMN->0IFvup@nGtsxQ~-7eX+Y6FKkr>W@4YLpb;5iC!u&%>+?)qgl3-h{@X8VrIZdwHwr%yOF!0TZ@ch_ z#ip`YkkIrAM_95#fUHO#xB9M32`&4L-_rN<&%B^)E3Q-*V1LW>$8yywXEef3sdoBc zv_RLOXZrYscgd<5b%PK0U2oP-m74Mp=XgB7w>0{oz~Yo^s7`SCH56_0s#5K*j;@<3 zGR$97PaC<9!j9rQ!R6DO=Vmi04!2{{!|H_1nFZnqd;wUk`k;e5L39y)w%g%C~x+wX~ zX_f;Wh5F{1Dh4zN+91T;KmWQfp^D6wDE8#q7^DLF<(O{Bwf=$#d$eiN^MOB@qG{8n zKUF%ru>oF&0`;7xPp(Qu;IEvpXv*+lm+96U+qY_zcvmL0d%~P1EV-E6w1`dh9px|9 z_kGXZ`@&ziYc*HDmr2Oe&WIfot?|9^bGPN!$c>fk4^OBkn!)Ko-0k9Y(?g$M7Z{$b zb(E!Z7U@>oZwHB^CN?f?JarsV{=PpG>B-Wdz^Zk?LAT|oSxI#xDtLWY^gpLB!#r%l zih1V4s`plhV1azxk&oa+3roTvsLZ?Xd75t-X|5fe<(6ZPwU66~j406*yMc2$&C*>D zR2}jQZd3PEJJ7nG!4mD@yumKO@2$_&M=5A#__%#cjf8#9tNtrLdAdFzZ-QMp9EQ*m!O?8wIagPT)|RD zEp%^s3d&QkNcBA9Z&XJ$f#J({f+@sVhnaE%b@T$Lsh61gGjBx4;3r=~7-5X~^ZzfR z;@_Wtn-<6v#}@-e5Zo!15QFWx&+%NgvY?Pj`hk)9TAZ<37WE#*O@fk_mTxnJ9uW`` zQ#cd%P?WG@?K%ygt!0!dsUgcdmS;nXKuTs5c{l_@$$m3Or3I7;T95QgTpCLc6<@+t zaAlIy!CE~5At@7SlrIMa8Dw;xRy}_bnV5oLwop8l@(+tOq{1c?>ve`x{nU+Bldp}r zQ;5Z=7f9@k^1iTcXdPgI0Q~PYeitOGmf3bnC1^BvytrK3)$XmzMv{gP-U^2i+f6F3NY6UF+UTZ3 zM*_7MaByWfM6NzkWTTVz25$n#(zBpJf9fJe+pIU&cKx)y+y2|Q_?q|5?=7K#luE^_ zUOb*xQSKyR&W+;XLiJ*&R^#{MI`~bGwPQ>UIt8#fcdDNy05v2h5VP}4|a>1h>GjW38A zXPEYZO_g4;6gqg!ctbSUv1NSSK3}?W@#YYTGwY0| zH<8I&R`Bw<7s`1h_&YC4Kk%GvTx;t&F7Y`(cqY;0S>|mEB;bI@b}oXhJ`E)v zIdyji(M_K@S=aGe68gU&!1pcBe(p(BZ<=BoK5cUN&Lz;>yRFg9=GO#KTtmDn(SlZ2 zg;6_roc+MFI?)OZN+jR}i9ne?xpEP_S6=y(Q`6AG2=B!&@Lccue(*WSxEB7}WvS6+ zgIy+~Oo;Byz6`BZ&$P{Oq#)kvj_>8#lIe{|OBNoCZr5~p+*H=amGpexQCW{svG^Z^ z^2$4bZ=Rm;y?M;mJA8iRblW?7c;Q-+&D;Y5f(}^2aCX(^589PX&0?R9Ax8mzedOg* zQ{R+(bQ^i*MY%Y{Ip~)>M8fK=-ntU)S$dS8V^;G`8rPQ(*k@tKYr1Kq4P`Uw%`3jU z0+G(`6medrsIAwnM;KZfqGBFQ42@nCO?cb;1{u36{nteMw7A?_Rswf6ePsdNg_Xhu&|&%Z!H~ zbWa$n@5$D{lW0BPgOo4He;*Z(p*Ke7jiL8SahV2MgDaofu9(jD?QSsiMSuE>^57jz zA+}aM6+bzJw+q8y>5*nVMBALk9x^bAmmh%QH{>%xu@JCuN$WoRN#>Rv6i9nJ23``p z-7ddS4<$6(G37q)?LKV{>P`Wrn~;cr{K=H~4(11&3$Lt)%r$Xn4fw@%fLwtGlj_!Z z_?A`pa4$8Rg17Jm_}kjO=v%3P-(`c>{MorR$w4K_4TWt7a1TgJ)T~~NEx`ZKN@5w+ zf}1$kr;E9ICP@Y?90O#>z18`tQDb2(gcpflPiyiHMG;SK0-QF`5v|aQVZTXg#kr?j zg9xy%tZPVweP#N4sG3u8agxz}XOG#fF&3JR@T{5A2!7v@_IO!>&;6jSWTXyZw&N{$ z!lzc~c?G1|f^*3pG0HLcd8agZeI_kzZZv^1YJNpflKMmnPA`{MJX%!^a3*9g&$g(+ zM%_R3s^)#w;kAY1pfyanyDh23G0Ab)=I}Y-&>NBjq%0dhCf<$0quEf#!^A58PFgHc z=PS{wS*q*BT-hAi%Yn#pCj^!NJSVnk4uBk-)VL)IDW1+N#QVxmN?2q(zDzFsu40td zXgCcI#tJ9`uYv1EEczlidR}sm2m)_=r>DF-sI}!x0;!d%Bt!%yg1;7LO5DyaAm)Ga zu?$29dVglzT90|Y>1@px{=Eac#fsm}T$meJGcnKsV}te zpnxgjg#@kCsZ`vWxii$P%})mfCtmwtcxW_XF~rU%h0*PMl_M)^18*6OlPfTL4m{6!OETL1+pe%2?1@%DRdRi})|rzwI)POMUHp8!Apx8MC0Y3GqgWrLOO%VS7POmAzAnNRc@NDnSPL%zr=UMm*j>CYF zmglb(bBHY}z}{=QX$lO?Kwu_3B4~?u7A?GqnDQf%%t8%q;TtkQ0C-mbWTNINcz;d0-3U13_aB}8T2r^a?=E-i2kl1@)_hl3NK-f+@= z=9Noxp8*06{JGpt&eD^!6MCwS^wUl-jN#*ejk#a$PG+7BUW523zt*pq6<(yE02z3dy2z8>?VU$-nDQU7gP=;%QIAA&02+<}Z9^qy^zgt@IqC3%eR)WPc z<6>QJzr4nMP@1#xBtz?44_00L@0dp845uNKsph?l*+k{d5$j81v3k$I&&{$yVS#t}JgR&wL-BfTgoKI_z1WGE>o=OnBTn3!v}Frq@_IFr zbZX0})c?_&u=JAh%iAitnG_S+>olFGwko!ormvh=wQGJeD_8p4>tco&`+LFW5KY%C zm3@;LgEK2mzlDrM8aKBKXQ}iShKcsG3>cmT-Dp0r#y7uq5?zal?r(Tv@aXpUX$5`s zMlSNEYmWG=j@S7u`w`@`H`Wpmh~j?`$jdZ(2eicE_vr1#pWUC$a!je%IJ&#CdvPVI zfmwbF&{Y?zqqTR|>xk?(zrBCrISD>Y(}?$N|5G0qWPMrKP`!mXugq`#S{k`gm+y|V zN|xJcKKSztj0cSe0zXa!zl*qdvBq^gkffN)c3Yb0oiFF>1ECeBs)pGguG0tBdp?_c z-}6p-HMHyRo)e?3F=9}3`yiMP#V5#g+j4tPLA`-fLB@mhV8{I#9Yv8#@mihFE3)Zb zOpdLedLJEm=KXitW6h@Xr>QlkR7D4U`XfFwytr^#8Na)KrRYhu?e^e6ldAIH5|Mzj z=fQ?A)Qb(heSv)6Ew;EL6)4*>Bo1YqFzTV5^!ttZ{$=WMj@1CjAQ^ZqE$C7J^Kf|1 z*HmCP)=#&`FFwwi1~O=%o^cmhbLA88{FGttdwhZu!-f^~K3lq7*d%(Z90?;+mx^2# z*~7||zXTqDNk&vtVS9de5_5Tbu@p(Mips&BpWoGB&}dB{;3QU>%S8@E0}}|hN2U=L zc;%-*gGX>3{GY~P<@?Gyd}n^>VZ~OhzTHUww%L%@*^7UhR9rn)aOPU=T2z{U-JSC{ z2o=bvdj`>DXTo0wESb;>rH*xz`Py!nuyuO}{wO5QrNhL$L)<7y^L=c%Zt$yuG`MO4 z@U6=`;%#X38@LXGp!Mn%e1B_amGC5XZesrjaTJlRnIS`pgxA~z+ZhgnF(lDOw-qsA zSon!MNJxNAm$Z8^7V$*94tU9J(dI?Qw-_OP*NVt^pRqz#y8kOxJS7yT9cEAqm;P*YF!VwIruJBdL?GSe%B; z4P;ltuS=q?NT%42)m*+o+Lv^Nnv#M;X>`LJ{Z3{3`;_%~PsEOrIHJC)vKz{e8M$HE}xudwU91Y+^50a(Xfyd(jj)HloDOk_1(&C1;c;!f z+8M3Zm?w{&`+4$VDiyvT%#=$GyU5%7E$AqnKc=hm#E{_SSF5BYNFe)f+aiB4#XWz zwW4SuvZ2z(0)iniKEB2hf`_q{&ixi&9wY@xC@!lVp}xTR;VH<60g{m4ox(llCfKbyC+#W9$Cbzayyw4{c_U@k+3} zzuRHU2Hn6adM@Jb4- zwDjAYh(5WXoGTB*Gph1&#Acvn$NM}Y7?=s{j9CIKWgwP7oP_p{oCG?S{AcuqW!@V~ z4h(fZif78BZ#ya#-Un=E1w1Td`^SpUWY&W~_4Rk}`(x{Qx1CFmJF+1LH%mZsEOjv{ zi}GdGtNpKKipO=DEZ4H1HrH zPRIy<&H}zXhw34%zg_LPKmnWLR`$~W#uGDSJTY5&UUm+8Z(AC>w`tmsqm4056sTXG zj!$pucFI!=?g8QJ1N}T(C5_aZRC*^2OUb>YECM6-3Wv^tZ2TX+nI>>R6`!CTbW6h0-2!i5h$6Kbw@>ZNI56gDaKUK)8e$@}n^?6=DiyE#w5Z%jk4 zC9s2{X&~nEVoieUUpnB$1R=o(^}uY+3TZ=1 zMD%@S+B?Hjl==l;a9aaes~<`1`jC=11k5RgZ$uG*8JIM0rK(d^gzdFtFc}fPrct7W zt#)<;m@_?HMfl+Cu;1k$FatsG@C?5BVUH3q`qhQu{4pgRMdXT} zI*Nj^u*%ddQai%ud1~IDR{bXkf+O&N`(ge*Zw4Ny0_WOt1lWrT1;D?ndW$l zeD>-ZEJjwiUADnZ;H%)hu4cxcvC-{NbsQZWtopGU!PHUB;lJs9$ z$uH}_+uIzCFCg%dgt2CFv)@L^DF551|fqTQ%=$-KV7AblpH2m<9 z<0{eHIpzRg#mqc$+I>CPz2ob(v%?}4`0ta(;(s24ZvN_L#_PJsv_Xa@Xj1y|!n+DU zg;UW54CRcHV%gtJZHy|T=xy{^xU>)#g&$#+#@BJ>NJMLVD$3^+SRHzz7%wJ(72*)T z0mNc@3Abe(;gE1jINSB9HDXT=V))pOa@LyK-BJYZ%@&;Z97S{?={RG8Mj7q*XVwie z2B%4AI}*es$gGb|#8UybB-n@!JoqEnIFkRRFRA2+A`;qSfRZ*A23zBZxq{bLtS6iIe1l*q zl8wPPHo_EH2IGDiEP)XG4vAh{0oIu8PzSW_OM*Y9qknKmVu(HE7Jvd$O|t8)qdsuv zin8yHhT3aR{-3LkOji|5&>Dc`e7uwNgbe6b0aCqOgxIgeVA0@g1kg%uM0 zNz9|YedR*u9%MaT21if3XW1RjZ*P+t^M{$jBuZPHKx6h)OFmIU9H;`c7Yz5KEZXJt z=uTJ+>)Lv=6=H0gc#Tv)0pbbZQmP8tn`=$D=Vzk;xvTQq#h?qk)c9a@V+o#ZL{U08 zD0)i#GtsLg=K8>8H+_od+>BZ=h5!d_{d{MD`0Cap4rpN;y#mzYgv)|PBak13u;$IF zQl=PWCDByrQ900<{EEKMf;Z$gTI1tNamA!}-{8EwBgMCfmBh+b8@)!6VE#1-``iVM zR|gvvdX628pT2(n@FBsxdjrby*B}Ea9^{A$dZR0a-7WzQz*^BE4sjnbiMH47U)O63 z2PepC&WC6#mhxsqy30Nj3#Lu=C#~zVmX|^3>*0W5Ip>&3?<98|@lyJIN=_|b?+C94 zZVmuO)hxg0yHhtfk>FYLLvgCf(b}-xP5v%BY2vVQ-{jMFF*K!4U{4aV=KYf4a2D2a zMDe@zFy-etO6ts7KD-C>*`6AgVqqKrP01QFoZ(7uH z&o)A1%#n+d@I|N{yaxiA`*7>A=~LB8a>;2OQ(L)yF6PwV!xe!wv|(3#wrRD|Z9Odb zAKIf#s`Dl_Z%gw&4Fcq$w2>cIxU9BKgEWD8uS58S{~-7i&*FIr9f(YPZ;P0}z0M@w zhD6rM;ID!mYCU2g8$*$vH(KqP!%pjOcL~G=>bX+_UOxWt$wVVz#|>W!lRSL406n`_ zu5E^|LZ?um7avd%2Sj#5u5%X*zla&`So{>~iH&NSJL|c%`x=QfX&VeeU-Ye^B+yBq zK>wErbnvg{HeTK@(rs4j?ueX;bVH6S1GE3(v6+KHGfq6x7O;Q^f)AhvP<^Rg=kTiwTJEI z$TnT3w~wq0#`Jmwu|{SX*+eDDNB#1lhEY+8rkvlkv1(H#C*? znA>J5RBz3pT@ic-yLF|z+UJO9YZFA6$XjE?gkLe)K92Hpx}Yw1VbNF>ejcJ5MAx=QAbO(JA+Y+lpU%Aq)vb1wPV} z4RF&EXggq2ZVhn8a_~5(pt5$EfxdpzGNgg|#a-#TcXlU$DeB*CNu#yA6M|K&8a6So zGjRCC^S|rT8bu@Jl$rkNFYr+mgA*|#Od-*$bTAKrR17(j0HV9}-i{CstvDcL4JOSeaPOegm7-~h?#lrOXY8)~%7O@&) z%>C$-w>pPx$t1Y10=#F@OFB*mX4)%Y0HEKk@$BD66-MeL!f~!H5l!)S>$R&BJlzTm z>{hT-GrnCoSUu zEMxW;oV3Ev=3QUQ+{@10<2=}oC(S{;A{-x?RTRoga`B|3L?2Zd9UpCE{e(=w2zC35 z%T;K#kuO0Doo*|zADX6BqpMDRcpqW$q1w2pxX_?}DLdq<>^XpYd>R2Pl6IiQD9t5I zA%ze0#Z4@-)_g$j97R7(*t)*XZ~5^?PvmLqsPOVnzgl%gJFxJ6{Smu$VVlO<_uJ0% zBj9QhDj9<4-Cs0-0^n5`_q*36vVc5aFZG?3)1W5%+wDs6rHYSP9GktB%HhK##`+Zb zA%f675kidkTcc1e^rRxqAX6Rq)YUZZHf-NTSK#(asl9FFz+<$%R}ZfXF-smCrmJWN z?z9)*$H%76ymlYx-~9&0Z>hZ}uKQePSNy;&qE*x~IzzOx54+-J!4vVL%tl?XE|`%X z`P;?dmG}$B74*ISbT6hTH7P5+Jp2X${&t50HMcbOuob~NaQl4aptab7fXwV&0@K!G zeDnOUz`w-!3m#TIOm$B6I5Z`Uw~Zli^YH`(NlIfH*M;8*UZAGvpaS=~XYQaXb@~DR z=mR{A_tarn@KB_!OnwNKmJ9Vbp+s2YOZw`SG6GtV_;VK!w)!umvu53wa{gWkE3{L) zS799P`J-4U2~bPXwHBn9>ytKBD;B>;EQLS=N=bWkDg{g7@s3(L7uXw{Y~zf7J}r)5 zSPJi}MHBNI;zaaBY#K-5L4@&3Jz&cfUB`V*1lNl;4XOloq-f71ec9g&@m*I5`<;ck z0^YqRukJP7&HGyqHu3=V+6IvQ-(U;}s~1@ZTnSV#{#!-R1SU>Kv|H6L_7)kNH7l_7^E?f1*lU?gEqRche}1co>i3)fQpUx+(B(!~lC)(@KRuw-D4ojFn= zHvd*|q=oT7?j$TiK5>6u2KQ&uM4>UP$Z}VmJ_zys_|%oKqJj@MLGL@Za!X%9$fe3I z<*em6_+Ol}pi(2kk7lubOv-}U*S*ZO_IYO#*sEFEyxvD_1QCea=A7rhy^=esuj01j z;;+?$*MGk?LoTSAhFq7QoIGra-{!OcZ)_YQn+EyzF8l- zvtdHz01cj z)Hpt~+_iw2@(Rj^A`~VaMJqbuqa1A1(m%nE&)WF%h4N(oTYVu)Fw>5m+kd_=5R0 znc2ily7wD35_8qW@L)w75szr$!M!=*Zi)3>$VC2Fv;?ofg-_JmUk*-}V_+DfMC)@D zqaGObzJ_7Fu$kEGaIzt6^_*J`k$2!&w_A<; zw`?!;<-QYHR>pB^8(RyW+5X7#3PxeqQ(7NyPCqNwt-HysJw3kf+;(taTsD`lf3laV z#DCrUQDARsw}9eGo39mF_&mAD@d}~x8WTp77E+J#+M%*HiehY6zue0>gCy`R47cc` z8`CdX*84wtp*a^RY!0L2va*9!U)Az>-8*GKIWtHAX&bD*!Inuw{V~xl<+?jspIT1) ze3_NJuiOmA_Zwo;jxZH7+-Lcz{jVlSy$;4#Swcz$`;J@+)$QXK$W~sjFTJCBdS}*g z{~BS2=O>!_v4EwZB!f2ppZ$ds&9wHv<#uKm?5S!TS=p>k`g79v#r3x`;f`-Cu`}lf zwRf$a47IVW@PAa^?hQiX)%!m=`CQv5;zS49wboy@MFf&5#zlpOl6e{7J9%Y@Ha~o8 z`+EX>@wjdCMJuKv{lnb^PwD~bcA{ZfOyW5WlF>Ia4!B?=!e1d_c4|pkcw7ri;hb{c zRw}P1ZH|sy9YXPt{&p;+XSGxnTH3u9&LQcN3<})b+wpdsn+?eB?df@UVBWgJxAj0> zH$%jgPl!r>4oj<#2+LRCvK|=b-;S%O_)TeP6+`o{EdAteadL>u)j#OuKEe*O2JSa4 z*Ma81(tX|A6H$YpA=b)eY%FO_LVH`UIS{8Q;f4BiKR2|fM^V11;q}?rOQ|f^0$&Mni;wYR2La3}7;h2xUx(2nV;JxWH z?~EM&dlEM2bZY_rRGXkP_x~%|dzw(P_X3)wEDlR{CVJZ#Su6Ubr*L6;?PAXi01TJ6 z(+W_q-TZsl!8*POpjNZHf+W%3DJk%o?OH*yBoOA)?bu+@zkSbEXh=k@qnwX%MC|!& z0S8@C!d}s_i=t|=bAsFCJ8<`?8a_j{yiPPdNmjeEvtxw}^_@u*rudav3<; zY;xEW6^qSi0zc7%vFzx7?~n&ddbk(6^!wX3vikpfe4#j`e4U0E|0=4r;)G?jUhM`&j@7q6IdXy%|9Jt>=oOWL1%XZX?`Z+6 z#er;E_nPXzt?C>%!JOaKj*F@BHChj0SnP>9;y~P24jpN~MpKh~oy0sV_Bgs<{5-V$ zF^KK{i}v{=;)I1Zz8=1|R-ITSuH%R)i%7R7lhG5C6Y=fp&!x)G?E2dI$k2o6eD0{I*)NV*%Bl#69UW@;`FHQnb(B=F+a%>~d~>+Mi@%K-0W!M% z+qA&DJA=|okoeeh%vGOXK14Rl-IWIRT( zKYSlmAnTKQ_*&n+00!1~Z=XQBD0+LM7g6S~x~@t5Za12N%=&9T>2v3Pv3`w50Kv)U z-F}aZi>;tRI~!Wjt?&8wZS|Z(F&_++%xR#AuUz%>_l23g7L6qdP7~F)2YmL%m`rW- z-kkyw7V%4OxMX1}3xes^!fT)!nliK3$y`BzS5j%mLnnI6It1-}0`Xq`RPE_rJO=|5 z8?8jDEN@8xdK^i_m6sv$D}&{@mPXIq_|Q<%X%iq zhvx5bq3gh~IbASE%~q%)M(ppc035Gu z!t!7dOKv2w+jtwn|o|q0I3J~8wtG8JGb3DifJi8vzj-SX}$PUffpxLvGCfD%)oaER6Q53G- z26q+SukRcYN1t+55#T!BC5;jncfh<(EN7nfX~d-}f!t8|KJ~M+h0D3>I{`eW5Ku0a zo?t(2%Ktt*OZjTw?`F-6pZNbx#M7`lz^3G<{DYrxk-a^j`xHtqX;tJiEQ{Kp(i`Uh z3%4>@ECsrJTiyg@gkRbGX&iPMM*4~{;07Khx!}3W#hiLl_3l4| zp)+KAI{xWN(Oq**8CbgI#B`pRf#8Cg#7`0XKk`?gKdf*xf1e>}c6Y(Fjn9qo@?@EH zgI)sl<>uaCT(W{|(^Hiv9wxF;_k-xSJ_r@_ z<@|Vp7}VYc3rNFlI@k{pmh6^6Q_W4y4GuX=hT87eL22A~HXhvDJ>-Alok-VYk7e9) zto%ctHJk1z5Ev;eCTqd?AJ|Z50Ci;iVi_`sCE)Jyq$Zcx19;#PrU)p9X{nj`tmcUc zz}_Z50}`{G&19?_6;?XuU`&T6d`*Vo!m1+uNAGp&2low7P^M)Ggi_1sU%+JY_l`H6*oY98uux zh}q6fmwN-cU1w@@rL(U&Eqc~piwl#If`GP&r6yI7WbQj}6~_R{;?G#E)T-SLpXB() z5OC!in)vc}XvVS78hRn$JIka3<=Oub*}TXHkKgVyxJDj!_XnhN8pDw-1(2>}!hi~~ z;8#inP0gLVCsK~agT)7jA-JP&>s+^iz0C&0@Tl`l`qf56y-sdv#lrLsbl^)^87^Nq zdYn8N-vNcHIz5a;uc7IZ3CJg&l-2i5|7__KHz^yUG6nMD=r4zwC;x6oPPE=|s`z>3 zZkJTml|n5cRBR4TUxN~J#m5>~dxn`5B_O3i26vcrg__hWU?*6lg!FL7XJN8JGnE=( z6fM(CV)&42)c{#1{4O{ywJDD{GyLACB)ZYh5H2PQ>|*VR^ss_-)*Y3yOTY`Q4!x_C zKS-Ex4ffTm2tR@9!rwL493gNK9T(r{ol&WcWhwlJHx!+Kd-3h&hf8+Ib22Q)IGMt8 zij<(y^QX}Z{Ehpvb|Yf1y?J6bo8=`?qnG+osf}YBBLP}E8gT7U)}uVcx_ae2*JYHDYO8oOumO&)UpPIZC{78oFI1F3$x>4NqD^{w5?{?x#0{ql;{@;d$ z7Iq?b<{4{1ZzL>$|0OcZCgYJMFWjLtb>q66(DtX7rA(~i4jN8xZ}aDJhFC?NPJk_W zeSXCL$Im1YZ>SdIHSl(*tpvm~@Q%2aN!~JGnTb^W>rGes12b!T*7114>J^NwaBzDy zJD%efI5K{lc(Qd<@#>b*IhSXYezoikAuK9ZvV3RgkB+Ey4HfIgjAUl?2-eWZZ0ZuE zR`Rvmp1JMI*KTudtXc0X5SoO|dHgwxlU7e=-}2DrQ|B1GV(_TJw(_Cqo9?hWk7(B2 zk8e?7*X>W1+5ZZgh`mll@h&!n9)C)kOZ11k-7Vo+mN;HiF(=2BIqDjiKURG>vAhU6 z(sv3GDQxogd5)A#aCkKJ zN}`zxr@Yu}ayC}%sWtP+p4UvX{`5gVip-~f^w!>8wCk=sYw7z&A@JS9NlUg6ZK~?m z;gX@uFJ}i`bE74@ygp4$`BntY*}2D7PWy`K-@dkYRl937bX2Fa$g}h9G||T46zL!5 z=P1j3=NNRY_FgoCQ#nAtD#x;uEp4e9n0;(hV|e7Fg@7( z^q|`Y6&Rfq>i_kQ>9h&+!#LM?V4N$6xDP@@Q6Fuk{89k3Ob33~ z*(+A~vtw4{b$50;dV~593}!Yf-URQrv0a3#bD_-Yqiof>6Q4_gcnXc#Jn(t1Np=N; z99WCrkC*-1zvkx?7T0`E%@Kd9(%?(Ntc7teFwb6)ehepBlZK@O_KE{%4>E;sd{tZRP@ z`btFgMMqV-sIr|JGGShel&gE=Y~gCiOLCST87cyRVrd9YR!PSj1C^fTu)OY5TtEpx zkXZZw8k<-DkFj}>=@4`O;bXS88FTP!u&UUp8Q|z5F+Y)h9pj?%r2}YbN8zqzU3S<@ z2NzM%#fWL(sTvlQi!aM9pK3Y|k!QFMeg}6kZ?6P&f^R+QBIZmx04Rkfc~uEf)FhZO zmv6tmGN>fO^RST9L1M$IwPG?YuzLcjgO@`8fRUQA2)VK~Sa}EL5dSDBLM3q~AN9VL zEgPK!T!m`JApD%^XZ!N$f|E%J?`{$138jZoaBG-s+kN@#O*O@A{WLxQPN&42VfV()?r_gnMH2DV3W5!y;r+`wIW)AIx_q9bX}M;*=!Z;O1-aVxyLT&j~q- zw-LjChBY=Fl3{YZHu0zL!`)F>#%Lf~R1rypHr2ujv@;s_6w;QR%0jvmi7M7`W5n1Q zNW@?{$}fA%z%lvTBdF#x#u2A84o8^dP{PpZ`F8LG+gTD839@uAUKKxhG6SaM^E#M6 zqx9vrVG#lUdu;vTSG~kw=&bsv{x%SwF7O-;St&kfgn4(YW3yzeyWtU0#tgVoC#|=$ zK?;kX)PD2!1L!I!s$_>Lej_**fEW)Q`RZ^w=4Zq^@?iY240XTpA>xC;X{u^sE|fhz zPP_0qi^qhDi3D3V=`t`*Z!*LK4$qU+S9{tbXpBKQUct0XtBz!Hb#+)PD2 z?(%g1UJ@xkBU~PP()%Rfp4n2dzC%rg|Lcr71;S_l`0&erx=qj;f5q{U zk(lWZe)b-sHz!(fFiImwZfi(m%6Bty#Txh!=R6tszflpeF7oGd+$UG zGgImjvR+UFciWufQd%NL9=4k|+#pK>1`&tfZcCT4--=(d=e45VQHMQ`{h7C@hBpuh zC|Ch-wtk(?@J{?H|2`yH4z=tw{j|@wPcBj+U#My&Q_dYsg90V|@xJ~w-@~>9K9}nZ zPwrKgwS#_80<$J@4V^FGq6B26h3FAthX$TQIVjaFW021n+bw!9AjsuDXqq5iBn>bB z3cLY!@a*JS!K`~9@rESIo4#;H9JGeFZidL`*-tA3xU<=BR$fdeclk@yqH zmJh_?AX?K#gmwqk?M8FrC;N%(AS8F>Cpdb;w0>nVrwZX05fpacI_<-qm~#_6^ry#g z^Fl%uCC{Gm^?RxBXjMVI1A~4SsGy!8+=v&CW(tvj5k0LTW`ya?6a?0b<5I*Xe6U8q z5wQaLw;_=Q+w}-1R6t8XO9-rxHQxrD)WenVWG%p1k{zKZ?lqd9p8_hPJyaW2aa9vn z4|h|TUG=^z(4MR~`u_WmC=|9aUWYs~g9k5zp9YuK0>4aVk^6 ztoR<7p{+~3`Ld|qFP^k_2e6d0SQ(8ZCnE6s7k1!?XZRS4(lAhOi{HQpZ^Em$GZ^Ht zKN(R%6=!_Q%EFSoBcQQ-M4sYxAjSh~oAezi%r|ww5wRwJ1x~iYmt}da68v0G!QK6` zyJnkW^~Aax!j{{_Amve_Qr3HUDsX+e$=tybwN)c8utHX8qG-pIlk{8Rf$u)HF%ccN z*MW#NmF;}a-cT9C<{TC&=rP+e5hiF*0gbGlJDALg z5|y^tvt7oicf2LeH(mwvvl0b?bi{d&gI1&1!C~EsM?83fP;%lVye`g2M+`^!OME7Tq8m6p=CyBAejBVPk#GaPRKwEN(WvD*RbG07 z&I}<=;G*HSIvc%Zrfiw0=VBdPoa$ zsQgO{#*(J-VE6?*u*C{dox&lkB#iOPM!+@+^dED2*>~=whA3NZ7;%KUVg&gkdmZSh zNk~Yn=Sk0L=&5hJzzo24AlEP=0z`>^(^#Pv&{f78NW4RD1tcyAuP zt(rpIc|mk{0&NkjMaH?XE5eHkKBp9S(bUZuqGQW#Uf5M7Z=(6!@vyd*N0J6jLmkLw zrcwWqlClZTfkSiy6v%S37O{Z|5H*AZurhhjw_jV&@{kBHFO7nO2Kv0@xTnTEv0>F8 zYMS69T|gQ*B(+!$c(E32Y7g6Bir|FZZ2z=jV^KTZ<8YM7p+1d0oqJt&UHdK`xlZ!>Id((=~ zOy-J=)URn!;Q8mVMp`QpeLaKmNG>u{SA!N_2anO?Hgi(C{VaHjds%gqnxp%tf64GG zHU|3m$~0HN?Z^F$^t{kOXBd;%&50k19uO2rO5w1cW|D56{s_K-^o2*!in*`!PK&M? zDU8|gd7GA9?Axosou~6t@Wupz8jdrs_e%-shq*A&M=;r?q`B(+(L<{Wm%3WQoC8shFU2xAzs!n?;R-CoAAoIP z60NcmQZ*)AzPh%mMsVLYT7qI2LE(-lSaJsfKz+Wxi@#(?Lrng5U`_B%D1&Xbfe~d5 z&N_@(8!e577ji(P5S^qgj&}a5Ge}@)UyWbyx=DJ~Nbp7iZGY)e=o@lMYD^sQDx&8! zc0_fCHKDjAzNpN%jt@5G;ezf*xWV*|;I*5n7L(XnGvzwi&wkyK4E33X=?DonTRQdC zr-gMbVP0! z?h{O0PP+eN9k@xV))JDD`;!?dDQ*z@BEgLHwVLN#8W+?zn9F_dTZ6J>lldJ%KnJlf zSHJrMfbcHc%icH3X@tzg&~*6O*8YBh@*KZoKFqcyxPUucN%9xw^g~(wK?>oefxJ3| z&%6TfYP*xtFN|?mMVs`%csP^Jzh|z#ICfBcGZ_DM&!2vJ z2Y-;rfr@PfII6HpjT+7tdmTPST4!_oAM^b)z1T*$`hK6F+L=>}A3b`eSs(o_Lanl94UrcYP4#{aQ4dFto$0=( zNImj@e{oi0&vdK#JpRlJQX2CiJ~%qB2;M;dehsuNW&Pai&SvX=z4)N>Rbe|-5;#s$0|Ww|nGJ|$bD&p!SqmZuji)#JpB9`+e1GR_x<*V2xs$Wi&dR;11P$VaIQ29?XMYX)sLEynf& zn{F1)tM}B}!S{t1^bL!&J;!BvXcp;0w~=f{&m~@S$Qz0XU^PWaB6P*A$Aqajp}BeS zlNy^)to7pAmR+1P+JH`EJatg!%+75Pvt5ZF>`pl~0Z$ttiJ}=dRqHqa$a| zbqKwwI{rR2%7mTD4=3P!FgX%CoMn6|Y++=3E*J|W^5X%23JVw;CCDtAtWku6~fABk3}>dtqI%BmD8p~=>OeD3IPY~N2NQX?x>Oqh9i z81KlpdsC(ubq)f+CRFPAo#s56q~P;bPV#AL;59fN+kUA{c_fn4<&cRjXv=AieVpdh|f zJ7JIl@oU8KJf|8Y$KZP=iOdnS+r-(8nysFkmfgC5*?vQb?mW0!p1p)mJe}&^c}r$* zoh!Rv9IOw~f4d^^zf!;hzNV>mKNYF85NU+_HJ~e_!{3r!Hk|4nZs~P^;adoC^Rusd zeNp7^1L0*u2I+%Jyc!0iKufkW*(gL{Kwvm3h||(*mq~`wwCvRC45IMNn8&6{5HoUt z5m6DKJ-v4(@g(7nb*48W{~#t_9|}W)#8;O*E1>*GH>MHg>W9~0uRs??x@z~=-t$*F zX2*QSUWNOfN`x7+`SV>YBc#5#%F3HmwwvEAggekc-(p~FqAo&+g2B$!65ALPR9 z6o${nGc%z7x`4(ign@NxGDb{9DXg3VzPWp#kxq0c`Wm>voI9dRdb$bh0P^r>RobgD z!jSbR9nK-8i5!0eBLDk*@WqsqAtJ}!#~Z} z9^4Z-Uq52z7>kSKwqgj>fepzz{hK7q8Y2tFR$(lN7(g_MjrC#p@x}UWHjXM13>SNE z*EjG-#8u1lM~=Rjz#>|;hz9%Qp5WjOh(9*j{)B#n=yt!_JEGfKXAvokmD=<`F95|B_|aK2kkA9 zzL9~*6uVU1NMDBnS$h(MLLyEMh^;ULW%sZIT*B>1hBbaTw$ReXCr|S><%#jSYKl47 z$k)$|i(Q)7;D^OM?gK69Ud+x5uo`b4Y}(6W8}=LC@?^h5$%oAE$Kw)Z-aX<*4YvL*bYyNhnRh2z_dF=!kvZF?n-)xM7b~DAzY%m56>(P*`02_kJuu(zr)Yr@#@__ z{)@l;!tVX~-~}J)Sz?SMuZ71qmi9ZUE`fRAAMyh=R})s4Hs7!FmP*8Aw$BcnO=SeU zCDj4vg3po&?WBzi!L(<_>tOwQngNC8vxNy@*w<)L~Y+3G~BZz-kJAD@v&}?0t-Y z7V0kE|L?rpDAP1hP+6aSZaM8Mf4Dea5cb<+j>7stp*_+tn5pV zkYpXYH&AFk5D!^cG`f@EXb^HM_fA-gHq#OZ61X=|t^dz6go1YpN23B6&mwyv@(ABN zJ7#XhUV*g{BM{FXMXWQ^O#*%`4H#K( zV0SJRS@#Wlc~r^!?>YM8FJF*v%D5uni-DpCkkdmkg3-IE*8#;zO;9^yu%gWM9Pti? zltQVaT^X)6oDdeusINL+_spBA-)1!Wo80Mr5a#2sv{Qv@&1*nQVJ!c%4b32r^FN#B zHPS5bXTO`S0&DIG5+u%=ADpv{9?6tBU$a;i`nqA7)&IpxlbgII;}_IV);abZS-Ry# z-1?Oj$d<=b`?NDdHf1Ok{FVOO>^wKH08`a{cVU~ciqcOK#&}yr%Ab)%4-t6?*PSt# z6M+TJo028A7=fRiL6D`@vJlDE#Br+E3jBNu%K6ZRyvJ|NPhLRZ-)z;aTu7fQY6oW(eF=f3}n9t6QfWGD=Cc8#sfUIePl4mZ>S4d8+-2l(@AniA{t@Rk; zGO~86C-sSk_TQLu1|G)jk99|@f&Z&uko{kev5$K#*di!?zV$vn;#Dri)VMSXTW6w= z9^7oeHkAmZ5;-_r^)8--&u0)Vd|Pr^_{6PCrPk})qRP~_)zIQQvEv%^Y3aI&4~ZXg zeoDeZilrxOc-+k%T=?0nA7~C>{QW=+KVlw2Yv-S0r6-?(+Y#47h<#Do|+f&#fh z|9zESPvf8OS5pL9^;rkxFZ`erX?V&JN_#+YFl9xke-*cf*BW;?soaILdmOnBfsQ)7 z{pdMAMh~WM$s|lC>=SexLXxFC%R)R!kD+m{LA=!TeI#7ixAf&*Zd67-qQ=9cX9C!! zDQ3um^IxC&zi$BfPSkP{A8hVw&SzD)06Oqp6EFiqMt^}}BKdc4(!Jm8=NGWKHCr!d zSQ%*UgK;3)&PU+0c5$cDjVs^}6J2j9f}2<%ChCkVR!lyM*ke?8sNt-JCn<`8grokf z(nAv1j8K+W_s0;Bh$riPTAth0mh-A9A?rE9zN?tfef(kP#Y|o95)&-kO>p{X6|($& zw36vEeS>9)@Xya3(B2b^P)B!2MnyZ0+tm>wH%!C}`q)tBgsqx+92gLX`cFNolHOU` zTmiPfJe{UwV?X4B2iApPN$jIM80kFYD#nBSC5*6=jDt znC8A*mfA>X`ST>NIFm6a)s+$YF_j`joZ)$#v~U1MKh`>9BPU?Oeg>#_v`wDg0l4}c z5qAo-l(#s4K}s00!h8fV1A2151c}-ag3hjiTs||S5+G_IE|ol0nn7n|`wo2 z7;4@B_w)PBV&GgtlN#`Rfi%XK3nF0778h8f*f5`oS1Iy@ok*v8WL!t4=_Fqs*} zj=%?lbEsXzeON70kF{b<=bS6B!5Gh^j^Ek-SZSUdVSWVd!ZSKB@^6Uo{ z?;}*yAQPXR9s+1v_JS*Oq{3};O62=LncxBhW!L8kW(VAM+CJR<+qAnQhW&l*ECQ(7 zAhVy_&>$f~jUdZCNxSODkgN$MpC0{)O%AER#KjYiHG;5!HtR6lLtT^j_8pTvuGn2>DT8zht6`u>B^F!* zw4o8>{N+7-&9Qzs(c`%8HrAg*ntOB~joBS!&u+wCC3fZov}($u9OJ`ky<(_K&Hn5I zhBA>rA=~+{aVM%6`}x6Zfyu1vI=F7`E>6y*H(tvacI2=quH2kRlUb2)U7Ju&2X6Fa zgv>6kJYj5hD8y`GD@VGtahA-Bbf9*L@og~8R97XTTN~3?~ zXKL@vz)w!(ZMs3@i+DrSEmkCT)kfjCqKLo08zIquLnAU{?hRaf}YP=O|W!J6pq+BE5V${X+}_Xtf5n6`AN3 z5C8i!d0aa7XE-OXth1-+(y+^HmS=XO!c^>;knf^nMY=Q*G=|gt_Ec0FQ;p8sB{cSsCac2K35$*K^!kk#13>D;0@egiOdAt)=05`YF&Kl$@`dRew$q6)8P~b6;blffL z_6$p^yx_z%e_4XxiRt=1eErY4CV6Y(4=y_VUM}|{=wPE@fB}M3!f<(g>ajOk@|}@F zT_oF}BVOdKhVxDX2QSxSZ`7<>G9058jDC8-uMhC%Xb}lUCt{f6%AZlzc&Clsq@snV zVVw61jwdbAd-8-pnz);BfZZ<(rE~-OjyRgS5SABxlB<@T_#uN&fPTpJC+bGK%>F{l zd3omb`g4WzVQuu$TQ2$zi}YPr@ny~ zqga(qtCWv@R?bW1h|Wn%Y^{1!-|}{{=q0~p2nTe`^!el_4uBvm30C8FflIw&(>SFf zemV|M{OB3&Yay&|Y05(uLi1?V(YjTa1m=d}+-3&HKv!nsin|O1h#*cez3%r^7w-OV zC$~OFbIzYj%1;mTErn0->D>sQBd!jYVr49F=y3*P+nt|ibNE$rw5WgFy3W2~dW>vf zf5Kr;P|#uIgd0X*`|5&>b@|JmwL z0gy}$$|<;L3(S8lnNjd>lYglR(P~x3ensPVI6>J{74#ABZZIL?mS3bOiQJFLEAH|qQbE7M&xGGh`-4b>F_W^AWpOFE58;~Qm`8O;a zx{%$%n1Y;^GG~<4DktFqbjcv(v%4u%;q$f*)`Yan5;X}pEWzscRTi&ir!}U>b}DSm zlOfPih;JBe?4}9%FCR?fu`e{&gurMl*}tBte9INwhH*B@f~KvE`~L>ekHLEz@k)EY zi@r5)b8Gvq`QHT2IJUEQZTonCS`Ts$$oR6TAuedoiyCeL3g5NN zUzvVGLuRxxF$HUS&>lEn;A2G3N6 zieMBwDPQx&eg7dgu9y%%M)IgkyBau^tr)ZW>CRuS{}s9~`xDckOpE|9lRWEF_gA+LfjE2v4HZ8^jouh4YjC z_m6;;V+W%KM`SOP3NNnJ=$`Y>t)+%@C>qY535By^~1&az^U~amIm2^)!!L4 z^&DtWWAbES;S{#(QxMM-62K<^puD38`)CA`ksS~b_bm(Wo<5QpRKD~c(g}K4UC(-g zRd{87a5=n^k!=Au2d;yb!;HaT8J%qji!b#kcF9k zebxPCTB13hTJV!PlJniKuR{l#y^NTeSI+%@CWKXb*-gyPAY~BzX`~;yhZVI#k@U0mrtYrpJ}s0>dA;@Wd76>iadvg2N8 zM~I`xb;0)`WF1F=Wu7j?`N%-K;-=D;dVfM1A^8^+&4Z91z-NU`Z_Qjm9wg`Z7MkL{}&5Em=D^O9&Q!rA>Pxh6$kcn6EWfDY+hhcamuHqkvHe; z{sGyVZ3R#4*(d!fsk>Z3^1CA2=Vh^dx#^8g!s-r7U|wnprx)+tVo5=Je+BhS<$=u2 z;DsIVvmyY!5vUtk%SqVvVJ|zvM~FBq`M|=t0!w;ceT10SXRv<8d$YMlID4g?!`R&MtxQ| zm6tqG$kB)F&F@Jkvo1oZVR|b{$*g?=+!X5#>j<`QV6XJF?lQU zOyv~>1VE%204L3Wc-CO(jY*K?_}^en8{Qv+j@$an064xZJ4pwY@*jpBX^|Eg*5PvR z``*QxSKO&~))9oA0_N942z02jZhOFgsT`~gQY#|%mEH%_Oj<)rjf*~;0$Tg~dgVD> zdgV*j$Cv!Q2L^T*Q;Ql~wkWQ;y;7F`P!fNB;)dCRcZ@ewo^9R*7nA2OA|Rk&Uj`;05xi$eU;_YxR-^)m(*3D@ z7({0t4s_%@9eGH+dr-~24xGk}ut2<3rLQ5s*EYmv!YqB%<$YxA23q|Wm1>zWWty{6 z|A5G*5gUKI=GzPHo z62v|!fu@+v2v@^{g|gbR7;Yqu*O<44e|~#k4m;#K&@%Sc27>VdSAY;IO1j^Bi?0;4 zE&@Q`?a^@-kB|Nb+d}$(;ih&eMrnbw3+AIY9N`) zx%Yc}eqm$#Ba;v|Awj>5;4K}m$A6k3kwh3*dt4q<<$X)|Dd`P;%vh6Kiha4B`_7jo z-p(Wwk9^bktdn%J-6x8wsQ`(;BS9k;+9QC^DR*nbl?Dlg@gys(6;n8e5@x@P<*{6Q zXF|8T4-%@?>?X)^Chw750i~ZO#{$b~+`yf+VLcRMT(vuw9C3vKFQkr0vK_{moy0-S+;XGfA3Z+3NiggHd(pz#Q3y=ST}3R@68l^AQ4^~%Il$2xNz}p zj9*)ai*EbFJne1>aXH#9yY=OuW#uaOGk^G;cG10oGSOkg4nJA6Rp~C!1|vVw8Agm& zX8w@GR)c3}J|@|5O@w-(_bnm&_g>#*{dNbCKu3|dz#U1ag$dY361$eqMJ@nD>>vhy zA{-PJiQ+{2M8mlnA`(G0E3it(y!#!QEC&+a2ngy+dqBeLR4a3`aMU$WppD5xVjk|= z<4mL8Aj`x7tyu1Ok)4Tr)vm(_MR5N1e(!n z+#6owmBVLKyov7!V9>`~mC;Lk|KVHdDD@u7c;8miYfAs*zk`lf_VPR4F1@o)g(GSe z(sF0|N4`HJpeh6J)|h1kGVMRzQj7T5v-bRdi+wjDcHH1=W zJ9YxzRlsfji-EME{-&F67k0AFvs~TMq_+NNE5_}=+28DoRjGUUK5>?mPFE^j5)B{z z{C^sd+Va+hug&yJocFJI@D{s-tbO+j&8(hf!AoE$wz&8%t!}RW+-Lc-UbkIrwJdA} zf&(eM$z1oovD{knjCS3oH zT~^MFce3iKi>hB>yE6Nu=JvN~Uz4j8VO+gksA`H&OSaxq`5Ud4xM8&-4-o{9=<$5h zTjXc(R*m@eiEQUZBJh!zpElg+)1i_M=GYD>Kdq#&VVWtuk&fm;d(T8c)8~N4jHVNQ zq~_!zI)-Sed!b`m|J~zqf!K3W9oBwp9JhHU7i_m0Sa|nl>{d4kT`D$VUTMJKMfm2P z!aF#pPBMP=FbSJ5WMwfk9H`v&*Z2QkvCO2tYj-B)zgnf9oR$DhGH{33JdTVox!fCw7s$`{Fy*36(PcFl!Z^f-Lz8D zRNEpX#ZI3^Bs?uK>^3A4Vvi7wjZ=vSt`mjXC3X>y&0Z4w%%8KXlkQDdN79FkIu8if zz3~*-Zpf5AIT(?kXe05<{&PD0f@uwvZ~9lEbUWSr&%k^FN>R|67&o|uJHBHWVn~9s z!v(xGb9?fPF+mWL7cj?eM5ftVHrsC_Bw9z#Kj?U-a*6zv^5?0D>Wf5{8%N+%{DGUS zgBF`s0C{c{DN#i83n#?_&Pip7x7XMC;SkW*5^2P#uO>YF8bBq)94rPt9h+XN9!%$w z676m(@){k2n9{JI5M6!a9jJKh;6L%SHHFro=8x^ruN>yx`SCkyrj}qsT-G+E61`)8 ziL07)OYn}fhim!=8l|(gpKd)1x4!smic&@PFf6xf(J*rUvj&f5>rr4vdQRU#e8zRY z2a~)H%e5Q=!-h$%hDwc+UaWL0<*TVij%$RozQ;bR?M2A6p}p}PnTBpGK@&MXGH9n+ zO}GN|Ocw;646$@%?TABxc~^u%gBFH5rrYC+w52+jPc0!XH>-Tdc~$OWMR7L26zXkU zdI}OOa*x3v&O~7EcKaRd1Cm+5SEy9V?Kkwz=Bu}X`>^Q0wNz)}-%E+Qj^GPIG~<0R5|!4uH8XSlRj7dzwf|5_K07sk|hC zEJ$yQ?UBTE4n4TDQ3a0rEz>>I1YI-z*v(n#S)xSY-y)9>?fa6i!n|>*%?*vot@+v7 z?~D=~wtt9htAGx~_e%BdzQPX%VmTl~CiL89DUu82N!FlZ(MrN=?2@-e?E5ni^ikk*@ii?-hwi!Do4*aRXM4^Yic6NRU_({O3N67fJY$3{ z^;pdT)Avm3B@$*2WZI0YIC85r$W{H*LlMache!2Dm6EFNw@k{)mcmTcD3A_ zQ5$07Rjoog)ft(;cqf1CI@okXT)5zQ8gR?YYXEOz57^HKioo4jhJ@+!_7-8@;RNZ4 zg5}^VB`fljk*KrqFU|a-A;H1>t|Sf48T3*Kyk^TOu}RDmh~Qq(sv?|c6^tyA@FguRLR^+ zs}Tr&wC5RA`(S(q`M^GU`n4$NqvRKm>Kl!Uunk*FL&#Ik%R?(*#Jy~e%V&l#w5=6{ zYONciUk!lGb#}I7$ex~kkq8EcOY|>IlX19ROa{>(afK3s_+~Gg?X7f4X}#j^IohOS zNPOf{w8fyFsZ%t>Zh0^N!45qSh4|icHF66DxY^kS~lXca|<4JBXZ6# zIxAuA)nRulV`96|$n|b4eN>yYN|Q%r-zS2u3q}7}0OMpwkFAbMr&7XyryCPH&2IBX z7x?%6yDa3ZQ2|}qIDeTs7MO^AWO=x_crVwfR_Q`3e;B>E;4L8NK{E7_qmThkybG2A zD_N7jfm(tyT(U^4Jt>7Scc$Z`fe1A(sn>`Yd+yXl&ipjJmAyZUHo@TZ4E#Pj+wm`? zGRtZdo*F{dD#IUw49?{{Nk`)y$mv|ACCABvZ^#L7J;GX># zwKc;FlYxtj2moTV{7pfK%r6u&ReO$l)#A@JsHm#ksWNs2;A4)D<(Oq&E2$|N!E|aa z#fOBNr4|^+#`{KxY5IO-*5EvTl#Px)ND(|An}m8!)4WfrHUh!Z2zwI_5-Es`GzGMm zbh2dqgMo7V{|sf(K327`!Tu9drHA)ik~xBLa~N4Y;nv_BRYx#L4$WkGuciVGqc@n- z#|DK}LFe~4M!PG!dnnI1NG0X9=hmR}Lu@MLlkpm|g#vBJB|C|A86W#>eS4D7=zUGy zSs2mHxmcG*ev5K2hH`taLrAV0Ov1FD9%FY3$UT{>{ z4jsnow5$jB&OH1msYd1hh9&;ieJ6t9S$^n@&#rZR&jhJ3LmC53;Hd+!>=gt#=AAq} z4{J&5)c4~J{=7)F3tI^eQPy{P!8a-m@8JU4d)HmV#1N;wRUm~5*}_D1USxtESZf4y zcz%&-3w}?lf^idL4`D8peF2A^Epecp*JY%{-WG_sbMiH3bLDH~|BD0!K+lr(*F@jt zzQcwh1Ri<07&m}T%<{s+(m)DZz#AH~27VXs=yYAiioOluO(6^GTa9 zEorl;Z|zHctl*ItW|yl_`ixH0_zQ*50#$W#Ys~#IISH&W>F`Snr~|#mwrP#gkk52{ z%ypVDC@Z0YApy_fas9b)T9I_EcGw|A&lC)Hx2BQaio`eI=8njBK%H+s7AKA%1}jlm z$&ZF#i4_&du8&Z`r~mjPY|y$o+b)-8j5B--{#R8WlW@j+2mTj*k{YjJm0=h_@c9nv zV4|>`c_PS{YiIgm708ZX>XI_*YnUZ+gGRlN4@UvNVx8a}VY{tasSnY-Qbq&EP<{+w z9AF_82lUXW5+aVxuc<=j5q0){v=v?(vAsk{>3}Q;RH?5v;U;E!@C}LgGd$^2_xi@z zr96?}+uno}jWLyDehDG>_h7nO@YtwJ>{_k^@W(6=LtWdw+Pcdom^7Eqji4W}Cxk5q zuC_@ZZ@JIickpsoeeH5cJ2strZ~gZT2EoeEa|}TA9~Ko?zFwZL!H52)dA97vT%kK- z3|W%Z#g+Ega&12;E3=8{^mZuTrG8B;Jxi)^*Pex?Q@@*7r6%X5ufhd{2}HR=z}>zp za=Cy0PcS8F!%LnJY<6GkKKPo~6O?d_0Oe!OOfe$7IkDHJL?WsR-ryfKWIcBL5#n>y zLBSF|RndCgGOuqls)(235Kty^V;Ked6G=1^f^T-N>PJKY;^OoA z-$i@IQu7F+p2y}3!9{_iPBoJ9O?m$!sB&E|z8%+iWRLuo7S z`n$*uWxyp(gahj+Q5dDPFF=6W}iny2q)LLN4x4YkugBW<}j`!oVT8sBoU{xvo=x=R*>LvkOD}7vt}f zT66jh=yGS9?&jc-;>c@}QYgr(b6sR+kk43@9A5x*H&s*@ghQ7;T=WlHn#7xgfHU06xAD7T00bjr6oNpE;0j^n+ zo8qNOs1F~|j=+z7w0E^P(12GYkn5^%bgwHAHMXRVG=ZwZ^A_+fNC&j@eUIm45}@`R z8^z(kmXT_Qd$u@!s^NpKxqMpGft7rfi5Q!eZ&hSk0PT@*CC4?)$Fk~mWlxgLs@PB~ z-#;dZtQ!R)6@h#Y>KQ3Xj7YdOVenH@hWCO(FO@B*y(G10`48NbZdZWNjO-7YD_{cj z4*G^-0FngR1}#9cNVmv3$uusPP|nM(N05dA0cFBhse(-9laj~Fr87SUdmsIMInu02 zCsscwpQ!$6=TYD;<1x#rNxCP%-Mb?*i2WFnmD`U)EAEKaB&W8_N}KOf2*_1=9rE1r zP0eeNB0*PAz>FetFq2BewFYY%kx+0H2F+j)MR`yGez;3lZQ2_xJY?Ft|GUpU>?iOv z85SeBL&8R7hD0OZf0?&@Nf234^-=l?h=)}c(V9$lnbv`)-w$&!O8)h(0%PY-4pRRS z32oYNREFZ2aluEszx3J6n2j-$I=u+`KGzm2xXKje!8{aCUB2zMt1KV;2tS|MgeMqC zvV|E|Z&`wgxk!bEZm@HJ$vDFU=i0bXr&yiG{>~Ap?hcs~lBBzrK{_7MYYQGhXM{m) z`XE$4r|a}%%e>AUt^Z**c|}}lwf)iGf5@t~g_yCny52;<9iJ9PmgbdB%;|u-BHvZ7 zk^Nv2oUtU!en)j-8+foFH{|nk;sZrZlgV&U4onO*;;Fd0MNByo|0t{pj**DC3RJ`W zpe^5S2fj?L4~%k%Jh+#T|K1K)P9oM{iqk3?-Qwv-O7l3kX*A94K0wQafB`~TwJ~7z>1bNxEj*RS1&s) zsJY)Z!yUK^zM46{_pIk#H#;tm!v3dU&9;<sQ@Qp}xgJ#3k>hnP9-YiFO+>?lXYYMKR+c4u6{ z@$F6{4J38p4b*sQd` z?*EoGz+gO>ajgde*bXkByhtj^x=N?G)7G~T(hBFQkO(u|N+B40E#c;1XBZEcf*v4$ zxQJ{SUypensq(HES!D>&GrXYK4fmDX@jO~D9Na}t^lw+podJ_F*?RVU|1(ElJeH(g z7he5+%7bOLfD#pT^)F<;7cDdB2c633ukm~V;?MXyNc1P41X*0)6STViYBOygczAgR zV^a;G#v0@kBd|F*y)Cgp!E*$fw`Ra7ZT+<>ntc=gpS&n(eAQEv zYC>s9=+uh*k}Ro(O1B2hnGpOxreb^m%!^;HO(U+;zB?=9RaI8t`T4Y+M7bn4(~p5i zZyw`*8dXTu~o-g;HG|a)`@qdKKU6FRf zjFx5B-{(_*g5-Q(01M2z1y^C0VrU(+RN!5eH_ zUkBPF_l@-1Z!h|QL%e4fWdSh z%uScRVK%MjcptVQ^v0eueDk;%EpUvy%8gXk;CBzxvaZt1PQ7`#Xt|8A%5s0lA)Sy^EFo#l&3Ez7cm)}1-z^)*B*$iTIcSwgU5sz@V2*1w|9s{@HK|Se z*x`!>Qu#HGbuU#0O%mBdo0W?~s$D`gO7nz7LniApIDKFJy8i_4OSY!dv-n^c8WuIw zk;wZgsC7i7WA`!nc2wd&7{Wl4ms4p%uTDA&pzm`4Gh_)x-s3)pO7}KyMFBUr_70z(xS@DbI$8XltL&KOXI7< zGgjkUF0!Scgto`M+OEx9)~szBTr>Z8zxANv-bhJvem{1D_RrVD9@fXb?;S@s^x0_8 zrf;xS2MVG;-e=!jc@NB?fnbY zHx!>4Xy8=wF8xXKC(1vEx$Z07TZ;P$>MjjS!&|{L1CMVCitLn?UI~ESa8!82t=zDb1B#8JY+h$E; z-QmilA8dOHNP$^iYOKMIW}iU5BX}~kaZ3T<7kU3pqg;=+ZE1r_B7Y6Ce0?s|vCCgy z1sw$NvmPaNq`r$d9Ce)zMhlB~=XrvK$7JeZ?O>8~NEw zC9(KXTs|~6J@MU)RII>#VrIE%wqdYlm$X#6y+0n~X zj~h%(hM;y&X+`_BIufDkgnVX`$h5HQK|~DJ4C&{4mtk8)pOpC`Rg&<% z1R-tV?~$nUj2K79-N!5nU6L&qf5#-ssvA9I#WanSVcF?Vq2RMj(?MoKh$(kwu4_E@ z6~|HblcLm{fcj{{@}ypVaP)3^7xi@SDe zQQoCZ)y*cNrmg4QnYKdR{U8_8IcaXZGZV}*Fb+JHr6Zqq;+^W9&Dfkxt+CoY?iRtu zw5o7+miIRBnO=dDQ1${kl%4rlBF~$U?(|_nTvILhv5QoBFCKrsblOGbEBMH;`d%}; z9$ggWlitNcQbdgT;>vF(eghw5d|W^!5R!jy`;c%uJ)v}aA+F{}A6tbBj! zeH_hp&lQ5>anY>TyT^kRrzfO-a$LS$(m40M=4io3gKKy~@1xgEUwezmtzvI?Xs->0O1j0n70UiujiKY(0V@wbPM$>8wF;cB>iAPKSha$ znAx#OJD@t~LTQmsLqTGH;jHD0qWE?~?0X+N_7R`J%467PB?%Mmx1-yDMn43!PF`0K zy+d$0P)nDDwAcoSqA`63Kt>$HCT_stZhl(hnq=7M3}Tgw1{VEh{Dsa7q*t?y#O5Q)WxBvVD;K?!CP6#RQz1TMhL1jGCOO;!zITra!KW zy8ig6n|?QGo32BrqBT4@Pi!@^AOo+&c=W%O>i8$O%1VpKeN)g;IY%Ph;-X4#STL(y zY{o0U#@*f=Ydcnrvk09KnP<$x z2J`!+wWI7c`IM6q?3r{Q+LAe#^r{ap3$4CYqGa4KJG~Q?)dq^Jewcf$7OFI~Gihk% zr0kwMvJSQ`NVB>uaHo+2O~7Cx*RA&H&fI*a#bJ9+B+o>1DX(4#JOWo(>EoY~?>G)G z>wdbJr0+fX)#}5)7VR?9qU|62T0l-|W^?=uR?8h2x6w-@HS;v{t4kst_(oSY+l6}W zeKEwl$^QrBlY;#72>u$O7-nnO<$fY=%@3QnSfd#>!Q+P;KuZ0^@5A_Fo54VBls<|B zsLH(B{;rs$3Ps9(fe&5`qT-dhN!t2Mx0XgF+8VK3!ILG%H#os1TgP<8f7Oil=zDlV z8cXnnxxEkpz(CpXdg z$Y$9+^z;zoPrio2Zjxndqc^bHvk-yN#DRA~S%tK_Ee*hsQ-kr+hX z59hH8jtnKghTRmi^cDOaPVm2+g?T1Vq)rkshpgO^Tg#W*IjTu~vT`qC96W{t$%HRV zzP*3idIPsqhVoi}OIg3f-x3tXA;awVvZU{FBg%>F-~hHzq|=cU{x-s;B(p}sb{+Ja zPh8%HPmk>k)x@Tj9PKTJ2GcxJC5e-$qc#cz-)K3qed;S*$18xe%@bs3=VcRl42u0I zvOdR#{E(Fn+rm*m{ycQ%y6Nv8p1M#$d&BtVWw_2SKCL7LGG#!71XevactpqoZL^3as>@~uYtN46U6Fn;sFhi);))D5f zDJLLMjoB{^#0R}aRsajXl}kUI3LS@F9$HLs0rC}5@+x0+PPL?1{N^U2?N5hSgFKe* zRLXpDKP|WfRbV79=(#8Ciu|5)7@I^yO}d{B<2E*~th&E`6L&!w=Y83|5fjB+Cz!dQ z6~-n_I|%!&*x*Vpy2Ul z(m+CLde2SBxw3Hr>psodysRwG4gIUD^q`%5tJX~w@ zO*xR%^ci%EJT@QxAD`gCW3YjGV74XSoZqj^$`&Ep+x{cdgdy@HJf4cjui7pI#b7s& z?FG~32a6-M;xsN4RoCVK^k)w%`CSFlwU8rZ2+3VppE8r;-0DK2ZTg=V#Yy?m0X9vOz%btp z1N`Fg@=p+0IR0TobY#lVx!WAsJaH^011}%^xDuvytP6S~sY|qy4nA&2e{c6G`+=VO z4GA>h3ET&CVYA@OzHUY^IcILu%#ei+oKXS1U6t3rr(t~JuTTo@&fa^iS4&Z;+%qp9 z5%a77wbT&KqQ1|G!eW9sf5v__dInY}lk>DSW871)kp2Sw?gd0hbCi%W;zopT~# z{h%C)?KgrY%=tX!k%*bWD3#L=k~8^$7OnUHrX0~CxCdf|LS#a|2Z7_OFEdC`?;xz$ zYb`WoFCo|e-s*IBhm4QWH@q!*Ub$E?J66y26eJT+Q!NG2@+ZW`v8$4cDp#XHncE#1 zB@BSw{rc=x>GWpg^W4knrE*GDbSv-u`PJ++Kb$Z4(aV_z>dKuk z#4yIS`qOTbk7}s<_Fv!_RTVCkA!{j|bX<6Ui4UH9g}uE)71BJtbPHJ9M}Ic1?Rxp>FP}=V8>r6oi$k)V^$$YBv&V?$ zc?B3bUJA%83gp#g=CaxMh(OYa0-G?x5*NIR!UF%e(-Ek1P8e!?nt&iuQ?m+uB1ZU@ zm^O%gG7AY;4l01m0trkpl8pwD&JO{`J_M1@u8IkP$?KJKg40J?8Re?LQZWXBD5JBV zM#z`iMp)0dOn0?m$O0cXB>MBNLwXf<>c_7Py`RibgAztfXLcRsM#}g8x3f)BR+Ptv z8=Rjmxbg4is(0Bpf6{j>0Bb!eg{M`dRpbnfOXp-dqR1oki!gk4#bb0RqC=sCJwo~9 zO+Ruh71loL8=ZW+cRb#H4P8GfzJ=Z_?ItBT*(IR6oRI?hh(m*w+(RsW)}$^wA2DRc ze)$Kd?*A?shz$vs9WQ>c6dn||pP5{E9FL_-^r=j*2?2f>hVyq2}RA?5?+X8SXjdqDfgWB?v1EL%1TZ?VTk(V7{v{X8rKQ6xbzrt;IW1lU5A8_iIo z&8J^rWj;~@+M#BbI}bUgy7S%;B~odi6eUej>z@Get%2)YvB~6wO~$`l@n$q!1=VF| zZT?YEa6fXPyxfNFyZgzP_3;$|d>r4*hT7&r2cT)3;V8P(EDeb4jm|>bn~KDp3JKVH zAK60uT>R+5hr)+15-6X6u<3X85fWELSTHTY4DkX`)G6Oo?;U{~xuO*tgmxkNs=ww>XZ{cyhglUT{%rkDIYJ}k+=TCGLQx$ zc6UhS*=_*_z6QH<33Bv^unyXdl*3lnsho-MlMb=zxK<2RA-S>0MS|OtQy{24n?h(+1AnHB=R8q=)l16WD)2F`DIb0I_u&P}82?p+!J`a@Z^&J2K7ot&7Sz z|64+}>e-PAj*!%)VyzU&pk$}QM{L*Lw6Y^KH3iFgp?+D$orlPN1X3~g`)&a8WC|!w zMDhzg0s^mhmr^N0)1)z)ug%kaGI+wL{yCs0U5eG5K_T?^kb;{0YF@4Va?=6opd8>G z#K2L~VJ+eN@wkgCxLn3A&Sn2ht$b# zh9q1^w`DJ&nI=CzN8KHQ2R2&_dlZF3y0r@Wgqa;feY$<<00uX_&B`4rg>^^5w%S+o z7BD+HsKoN;kRHKeu(w{{BtG1RU#To|meQV!6F;wwcgK5yrL7Kp6t)*g-*r#jc^}zr z49XpHs(J)RPuh9#1+!5%>Q+$8fs~e4CI{>@HzVR{Kk+NdUQ~vl$*CS;hkMSj7^CD+ zqZ`6=^x}UqV8#<}(%z{MzQ0{=XOKJNyR{)uIIL)Yy>TwVA(Diyt=`OrG532zEx#-o z$;2Bsdp(JQ$bioYNqw0xy-vXS&YQ=}_&irZhQO>> z33(_l7Zdh?>;rYu$Ss(pn>%aNcad(1HCNKUbzf($tk0H=L=nw? zLny}M-518JsLO8J0W188r^2NSUZ{RRP%M)?h{U(IP!!B8{Z*j9-pb6aO&Xrl$t~qt zs`Tj1zL7-}HdR&pp-SgXLB`czPwo~_Sl=pYd@aIeJf&rz^X}{GMUQud6xMNM<*RW{ z&oQTrciw!q`L#**PE4)qG^4b748Kt3dU@^>BEn~1pV+K-c295~b2qh*3EpOnd3XKW z*J6V&j*&Y_icE5=gg868EJtf``@GWw=R@RzXWkdv-173G>;#%?A93bo!cTC+J+4w# zJc%fIJucZnA&I5HZVdp=_;M)>iE&3Eh2v4=3P0OZylxWUaV(~Y$bWd1v#5VRPvPF$HBhUn<8xQR-)|Tp$FXDd*^8$ z^`PqKJ^5UA)mF)<#g9)13`hHkI`RIQb1Pyw+2pEXO*1d-fB&So_2q17Co9#odP0#y zuAGC%%3l~3!7NaM`YxoYu_rFroYsAv>JPAGx3LfjX%3!f4&~A6*3ZVp>UUL=mjNUX zXOT|eFJ%vuWg5!6y*{=ZlR-*xVOb-;{fJXMq$rsOWMfk5gLqzAekJlL>H@W#ZEeE9 z?T`O}f_*{8D|xox>fdhcF?>!4WGMBz03qE=nN&21uyK+{%6+eQMYCpt>$3otz4ba7 z{!_-XAJdI7Ab zRxNvTnAD;YNo{VJemO>-s7&k0VNPbj%g?%z@y;T;+vk&EvyObJJzQqzEwZT|TvBj= zpoULqq7l1q1H`s{KBv=Zd?KGO@O*_%U12@A8XO}Jap^1z3gd1`-C=l&O}~g#GOp3r z+ABN=>3<7}ynTTz%Ugj$X*N9&NoAhUJYUn$;~hzlF9|tCiR#clSqP(Yb!@;6hjtGj z|W?S5}KJC?`?P+1E5Zj-xLxbr2DOm5_wP|>LNHJH3@_3DIM~RD_^|96=)EkGQ zh9RoyB@rj;&?G74FiEaP)kTw*RTO7Kav*O;?{oip0&chPrk0(=oF-e3%IOZhlc%(eDG71>hwR_;{?Qe9DZfyFR0oiUV>zV*3ys~Yr% z7FHhP7G==;mJQmG^ZBK{aJAnWDDzO;mPPiC?io;%-Gh7gzS%QL5TG)1^~13td^3Qe z6h_ddO;koUC3&;_lVICGtxelC84itj%({$Uh-j`Z{$lD=n!s1D)c^OaO`<7Ni^ z{!w=V-2E@&e@9)wQdrzoicP_hKRva@4Wdyx+PViE_`oa?`;2&7oNzCnA1<^eWoK_I2Z1LCwxCA;guJy+00xV-IN<2+d3g;kyjL8X?111l>J@78)d3>uC#OFF|)n0%3#$S0Do(>Vs?-9yuCvgRH z9irYjVL_>)lBAGqL&>WE_&*H@>sq-;E^;7KRm?Th9l#t0f5V`tpk{mS>k)-o6b5N& z2^n3;2p(gzluA%tUb#hCO}ajS&Evb710v!Qn2J6@9Ocbb(cJTW5Ql{1_8l@)`#Jf# z&rK@^PG5as%=mgec&DlSDpl+=IHCNg2lpr&7Xh`eFS0BYC1?dP=rTDG%!3`3}yXqhbO9A2%nk$|_3X-mxak*OR4Uok(z8b|$ zI#U^-$Ss$4>ezpW>OQbza}NLUUqg9`+wHQibAT5Xd-oP^@7WKU^1a;>kPjMKT09=? zmbdh7fg(i|EC=IflSo<)=_-~Mxc5nrR+^6WBMH=DX_4;ZUFs+OkJG34w)$T__X!lh zuX5k@{M+;oV5I%OkJ2NYdfM-=J#0FS%^O}jUvy3ci3)AK!{AL z=y!KF{7=%_hg1FUe>+##sG7|JmY1J7@Bn;AB9ubdSlx%A;WhEw_`&ndk$r?H;^Re` zAbOih?G%F`SsfzUTrV;uK`Wziq1_c2@}53nsKM9PAJ*n4+F!3Y>ymXj^u$dJaeui#XR1F4 zCS;!EOK8f&Tiy@53X=(?NOB|*nI=BIPx8t0$o<19!vA| zU{TAf8$REnpU+=Trp3vLXjTEWFor5NNUTsu=PbNSE==N1?o^agK%R=3hIE?%X1rj) z;~pw#P)RBxv(;=@{Rsw&7$HtSySh`RX}f}Y9B+3{{kx0Q!0-4&-Grd{VaJ)1RJ<=` zQ?@!OhgrNA$$vkgIco!XaP2s<^}(co zwS0COJkcadIgQyt5DqUJoMV}w*=};W`N=+oEK={5Zv0zz-OIjWW*3h`Db%lRE?wp9 zmUeoFmlwWc-|;1Am;b#3YFTcETEf?7`l9)?`#^m&bMMm-ft&8pexXsaghuEK z;JI1lLArJdjAako1zFBHruX-_~KBTw~@b8C@Y|iuVb00JqFpFJB3JuzX1O)?q5n)%j5u-T2SeM#@{p3>N zD>91pri=cEd{PgPZ>qaS7_E1CP3L`5Q4dJB5v) z(kOCsB392^_TDSWT%vg7(?s*du;`vaB>n634rq2YNmYBo-+Gx<%3B}c0o8$Y(vKP` z7n?;qlvD@n%s=#x>NU}b^Uj|QwYD4SIs5VYAnk*7^91zT1iomnsvRhXQKmPSk?mwf zJyx;saP{~9AoKMKEb%6245aIU`RN0jCbL&j{i;1E&Yr)GZx*ZRh7Ig5QrwC|`QX0$ zd;QroIkvcgKp3JCzn`Ahh6zcm2!M0HEJFx03JL~(e{y~ZP|IUIr++>UN%A;CM$qT- z%Bp+9cZ*U`bzy6ag(v3zV6XP;!?)#Bik20{HjPM^M?y`NRyqEa#v~HN{Dn`ZbCEIR*GH_sI74NK7kPYXsHm=B<74 zKiDio7F^QHu*fU^drPGbNfmo(x$Q(D35E5UxANFm$cQt>*fXb!|Hd>O>(ZREKN!3f z*d)eXR7gU8s?;rKs{{PJ)u&dk{`rc`0S?A>}q`ywaHyiDvj! zNQh!7(?i6onWP>(#-l&FyAbXbFN<@&ogrsL;BZ)uNLfpR&gb)&Zc3YqZ4iOxc?)<@ zXK?ZQD*1TVf}L<~7Yaz9x#GVLq(wb`lBD~lMJum z!CFkHv=1I{Sl)?|E+&r(pPY2lg%PD9if@WSl(l8Q>R54du9WGje^O+R|9r3|dxF}~ zpcHNH&L^8t4B3^_-n9j%RK7>}h3mwSA*qyhBd+|-!f+{Cc}0p)u!dg=!c;@v z;w3Q{KAy$`^C2Q!1v%<7)v#0xT~l~5tG5T&Lh710^3S+|+)eGf>_ds!>nQ8W#JqL^ zl@-DB&|K>`vCyDIP@q6TMdeWroT`rgY`eC)nu{)9f#Ua|co9n>6-A|pCXZ@E!O9U* zHwuz49?RnIgnxXOqQYueRZ`Y)c1*N&aej*KtlLR`;V;6*v{@&aT%-$`MQwB7hq*cp zzenZ$ALic_CM$yfuBqwiN~+VrF-T7}@$*eMDyU|XQ?zT2e^P`-;#`VqK?={yXXc?I zZ8SRG*ycnqemBJ~D1-?DtmITIx`oEYYT@yp1gqB)#Gu8iw%+3alVy z(|wx3?@NMrY42%PJWkFmjRN>O{V0cZ+Z}7MO{E*nhtMB9yT^J<+wYtQscZy#p$x~eP^=Kl9^*8ap(e+PeK)=*S_`^l-S>=5Gx6IH{{#&9?0X>Y%g z*=Zo77di2anTQJ4YIWHH9IF#ld;@f`R9PoFiS+2^_k=fjPBC62+1=F=8ICs%%h`$n zgs{>HG@5>mW|1b-pc6LyYOuNG2VxU(qD@*Zr z#m^@G*`|EU(v&QiR@*DC)oYRP!!1Rrd!%pmYaB4$`#Uxzt{od4EJgV@PG7s=ppc*| z5yP7#n}8Leiy&AAur#dtmxNDPCDf($^GCiX|;=U+zQ!(LYL z#{HlrQvCjd5myEwLrp#(q_*p@bWulfv;|=3FPwS1p;C(pgI2q4h97D%f7j?&pTy(x zT2+!jnPpTw&loe{{1Ys2;zHwbed4n3J+= zuo1*-Z;o1X>~$`=D9S95TG?p-wlzGpk}Gs`y85mnM+7&{edQySsKyV{@}o)X5PTQf z@Vx*W()vW1(5l6!pGBM$<4CjK-mJwlc42pVqAe}-qzRg)dDOl(Jm<7J4j~n3CytLT z@lIXx7j@rpHFaO#D7%m_`L#MTef3UrA5X+30fRQnZO;|GgK5qUGtR&JD|2A|`SuiM z?O4myb%&TnYtOr@SrRKi|G{{tp@g~Sm>Th|FboDjwmGauaC8Qt*fQcuGD4x%;@V?c%}IFQ7iy|M8k52mOk#i%vt3nR`AY0`Id> zQB)Bpgy@+w(NKwF;*s6y25qK(tnV!vQSVs@($AqL$MEp|i3p4APlkjY;T8RNG^&(h zzw4txl#m#|nY3W5wb869-e_oKR;gr>K3k&{`n(=EwP|vxd0CQ1ZmYEaCLDRAQ*XQ) zu+iW2+HPM;UM3p-?DfU6jbq7;{nF*US1NI@kC3sSS^4Yh@7hH|zU`PR(fsV}DN`A` zN<1GT(mj^4pb%9{u)d~cUL7}Og%PjA|Hr+5A8sFeL~~L5=Vj$%W8d_C{g+e5CXS76 z4K=p>7eTq9GzftU1%nfiFK)|yv@ZVY$zCwFG-&s>!HLCgbUA|30?R-tu6;QbR$F7W)F!Qk9DwTFnpB5WIxdNKFdqDN zwYa<~_+)agspFgvJhxp@(F;$D=b-TQ_tzSr zn6{;{1K|NkaBvU!JZ>A=2z!7#^}59|#J?%!LKwxrHC8x*ku1>O7nxY^+m#FawU?_S$hG>4^%(B_X+DE*Iif!v?2e*YAg0ltq9j$D)P71^)1+ z)o*xuI%mGD{mz2EjhaPPFaaD1q9-)JfJ&rsw^#4CYbq8)cvwM~bo&9H4DPq>T<53B z?5QQe>9U>bQoes=TQ%4OP9WJo2(;O!E*-s8p>@B zZWOagL<63K^DcnGO60OdoJDmHpi(c(%cVjz>jPP{YijOuq>5j{{@tH zsQe{zCWO=~kRDa@?JViv+9*=+ur5A$@FuC^^UMlvmM@5JbP~-9Ql7aMot(0KT4Uzm zlulNq={hN*y}Bmifng{;_+Jv(Dv}s|o<;{%06?P&d9-=W_sVyiT_6%$cM|JmL?OMN zj208-ZgQo_EhJRWG$`q~01Aam7LPn&%E$sAMVRcQ93k`Qy)P>|1EFrzo*V48F|(|-@1Dkjh(0@6VjsHQ_Gp;`Xl<8(Md6O|mXfo7 zp_=sx{Y-SCol`h85Vr`GGvLH4;TYqox46uA7E`s}ZDv_PIjKdA&o1=!h+j2@)Vw!< zAU7j_Sg*GrF$2+)hQfJ(J&I*^Ce=GyA>KvpR!DgBaY_cxO*OMV8n)PYNSr*IV#Z`b z;_g;!4;r;%&M*m%w()=8RYVo0*6U0A4t0YcHwllu><3$efHSR@$ zKpW4>&74pzh=9uBok(-sgVO#I7Z=XUA=&gsW^PJm7*8Vn)_CEnP3|UnFzRRQ&H>89 z+OivA=_c^ci>!uUp3yx)m!W&?-NFYiV@&<`@5vpn16~$CBshB#jxKdJz1J{vvE}Ka z2qge37+QX46j)uq0ZZM|3qAEhf^Db9_Yd2A2MEj7KzU;e>arp#B2K?#Ka5923@(bg zloikc&JlSC5ZxXZ{y6O$bu2nf{*WA>I8w4u-Fh(HCH(q}^Z_Cm&5S?rG{v}TZZVsN z((*kinfV`+4yAvbLYTM6nbAJJHg9w-vXv82VnSQnvw;D)R6~lzxa{htd2UP}u#QC_CK(|jC4lwQs}&!G@q0vIcxh6 zk4@_G8U6#P2t<>=ljQvUL(R9?#6~98tgra{+gA=)^ksgA;A8Zd;7Zvdw#h{W$u$Z8 zrGBblu zJ2E%+S|O@M*P^v6UGNvU!`+Q^GjqXPm*$Hgm@!sA&g1{pS+d1pHSmXlguj2*y5me_ z1q3UN1L$QguV4vH5-7M!w&?t>DxKu^!? zwk`;WVtkEaI{@0T8NU(V<-JI0=&=&RDLW-9Af#k<=xJ&pG|%6gAFNzewl&lmqITU6 zw(#29G9<|tIh+YZx=wEqp!G!Ik@}T2E&M8GG~d|px%aMq2E7xppR5p6ISoO)#kmd#g{C-yxJE~ovU*= zezP2Sq$21tysgUU@$dBQ#qi5lwN5pz%GuPm-O%>;Z&A8o5L_|NqYjjd*KG4q&L$%=y zC585`+QHEuVTke6&8^MseT&YPzvOVNU_)aMiWvfBa}Y^M7s+t&INDsre;3HW%Qa-Z zwV6XH^s2cU#Q>QQ#ByFkRi|f*|GxjA8Zy|sr0gHCvoGz&l4h2F-nX(YZ) zfk7^|fpnmg(PZeI_8a{|f7mp;s!22CGrX}WaJ^?rKqack}7o^FsHV8BP2^Px;*m)R2Nt z9=9Ya&nIg^v|8y`@O%oyT){cE0A8_s!aEbb2O~>2mv^!;u){>YEm(%X zogp4Zdd{tdmrvtAR$)tcJA@L#%oI?dJrn&mz~XPXjK$n|mW*4x2Wt4xt(`R)i*9Go zYM`>#(`EdR-%QmIEuVuzCPh8s)j3E*losFmaI+|j5iUGQSR%L>R=t<^U*LzbgNl%6 zx!H+jh)!XrIPJ*nbMPI#qw4zHzM8@O-y`6CC>4k9D=PjPR0p3|>$(S*s$MPTH>bq} zB(nTkFt_N2ki`*{Pv-(=x!j&=va;VF1+W{}0b2a9)^xH_Iii~#0tirm^9*PU!$fHR zZD8B%lp9Y+3d6R4s7oCF%ZkqUMc+fxGayC2Ltjsce6T6+q2V7boEzH+Nu@ubLmK3eL}jR(W&BE(lS{__&@+dr9m& z{=uy!@?Stj^t-3;D*w~Eg;8nv`!h+hGlZeffmQ^!u1ba_LNd?c#~{JK$qc1{o;?=9 zNWGE;yFFb5#6b`ov07Xd1wjR}D|JF>zMn+HDj>Y968I&})V=Uy$oEoPaz*q4^Ynd1 z|DcdmV-=gBU&1FZ-_5uYOYd;D>AQwQ)3mA^P(@wSm|@Yg+43UXgVx$vp-ITq>Q{;e zz|1t-BfUeMdmzCRZW9{gg)`;ZnGg8A`y@Q9FR?SEIEB*4jTB&KvtX%T_^|wMP$s2` zFL|Kd5G3M`eeN_7I(5zYXw$Ksl23Xr@4x+r(5fRhIS-Fk!2UhHagmMJN*7wA-Qd;j z2NQii;E}c_NAQ!k*_66~eKjF30ZqX@=uixsL0WjcF0+e%sME`8L+j@;2Zea{CrTZP zU1I;_$q`_`IK#hdZlFMW?48|*Bo5N|w%WgceE`49J;NG?7ua+~_<|D9oYaSEs}fr0 zpHr=ytan8}W_#)*jwa=qJ`{ZgJIn-J=ccc^sm*Uxe1r(^KWh9AKy1WIbgzvWQfVUx z>~7lagP&^AucCB}O0LST{MdrPn4R6{KbHBK7_x_s@1}$fj&^07_X*sqLk1-WHeIEw z6>&+3_A&q-#8g>xT>$muA+m8Je6>;aBknMv{`VOAJ1|8gFkX1{K=t_`;g2B`P>W$t zcO0N`VDy!}a%4wEm9161oLn749D8Vt2eGZ4A8rU9(Rd}E8O@2Y(}3U zIddR3vSkQ>1}C^MLhg>pd_N{Fw!=kzVZHFt(fw(wUJyU%i%KTW`~OHtM$zefPSTcd zAC$_bhw;<=^6~K_}jFzaOHnyed#+QRHXBKoQ z)gNAuPOV`r&#%2OJMmvQJ;tMiy9pf-BrjPU>)H47MA3|bB*F;N>a}=o%e3MR4v`sH zM6aGQ%>l*MCy)@tTYg=8cOWRoZF6T^8KjR^H##+>g&tuF&D4LFsC;#F?S`x(556XT zr53H3MAe_y{3y35GaoYtH>job1Mt%!BSIg%!F|yG*!SUMnN>FvB`xx&k_%Twu*)}# zmruTa&Tp;%K=B`T8L@`;yr~YmZ3Ag%pRK^l1*b}g$Ih0YnJdShmpwRYS}q!WP&!`` z7ze!N!Jp*HdCT04jyZnL(X81U?7Aaxs19we&CT@`+1X9if1QU`92D65Z9)1sN<4Fc z4YUL}``V8`{J*!@rgAJ9vArRrV*$cXVGp9JNLG;Ea z!_IprXA%Y!^>fp#i%ivSaDkuie}i$lIyjG(6Yl;im(t>nP-@qJzR5Kp@k;>js|ksC zQ~^t$J-BP&ddke}HbJcvs0zKw#)817>89O_gj^ZJ&A~@TV#eIBrA;P-6n7T`FXVpR zG4t_%SWb7^+a#BMhe_@PA3cpbW+Jkm= zI$8v)SnWUrG}Tk^0bS+>;8*WMF&kx{?6hNVkL^{z%(R)WkJ}=vpU^e=NU;z&mZI)O z8DH-HqL-5I96PII>EGJbf>ZBCt6AfMfB*Nx>%%FcL=wkv@M4Y<VJ#gMXa_mXQ{#yS|0C#yjEw#6)3w|2r4gRs55)Zd)iIDY&i!SyPs1j z+5UksjUgO%+o}cmmOB<$9cUosb6%keR+MslN?6da@%xTrW*v*3u~$?wyHx#O-&X1~ zw5x0KiiTYnpHzQ&iVN)mw?2J${|3!6$EePZ((rA_pF93xW8q7UCAp2JDDDq3v0MO-%1L7~FAS?We{#?;Nz2iszZRc6V*C4A z`lv#UV*}&egSu2CsO1HW2V0Z+_~5fKe|#uUp0}W43TfFz>+7${Zs6Qo+bhnQ6rz{5 z-*9*F7>yIFGYTi1zrP|qCUr9L^kz93Z?;=Aelw)7x7iz`-;65 z1n)pv6wTw6SKr&7$THzhUKa~`=0nd&d2ZD0H9NUVf3=t_QOy}DEk5+XOWz8FySP32| zcJeTbdhN0uc=+`InqbG&x$*tTAkQ;@Yy7!gALPg(T>cNF%uK^iCPU-lckj4vyfUk~ zITL1p0;2B}3!m%(pDlKO0{onX0hNGu5HmRq7rk57WD38wsU+p2X00_TKe9g3cNzi= z3?RSv9@>H72_vm}PWd%YpDiqCy7(7J29hu zMVRSs`U*{}cN7ivnTcK?)dz{@iwIZ&waR&T-IIgS>%)aKvyU}9nWxho(jChWzP_`x zZk#eJgW~iTGlw^Af&xOh6)|1{Ecx?zPUc-U)rvb9MrL7N zD_BaLxRJYb(f^p|glNL!mB>s7jjI9HMZhX&L6J>^|IpW3s?v_9_ilNgqB_Gb51tU` z9a?i(#crBg@>baSlj~uqX<*@#^%t@bKNd&Nzra#B&EP&7eEKu5ojZYh8`0;55>~bwW2-XPL)Vq6~|mg;DbEaV_R$_|W@cft*Gy#Fb;P`?f5| zd(XlZ?E<1WuN=8Mn`~n{z%itj2n2)c-V*Zm&;T@z=LG6WfyXjF{?{H>uMHWzeE`gJ zii6o&>3Z;)euja{rHiamA?)>6{0VbkGJ)B#CiYa&oUf+{J>l0h6j^|hhPW@Hg2sKV zQ~jB*6ay+OOf@&{nU>`&0u&MqhKmH!TS3p_GH`mmAcFi{rfDW4mFV`}61B{aZ))zKTvEB{aI4v^>x%Gh_ffNnHkeSouE5~Y7tX5A`OttMr<0XpfKN*>$|KT@Hg zJK%Dx#Ra5Bze_H&w7I# z_r27F@8^1Q=TPu%|Bx_YHxDN4TtL*|gwxf(U33Ea)wBE!JheFQA;4ma zbleSrZ5u=wf;hm^G;)X)L(6#E6nB~AW__*1r&^^+waZj23*mGs?*L^*Hja^>8fY|HMPf7HwuCw9*bNcvY z^;t}+1n@ogZ!5$F#p7X$M@2`U%tcK~d>W{jOTEToG6G3;x(%7vE^#Lw+gyj}^gbxq zQl-QR2F!~x8(tmp9%Ut<$bA{JvLzc9Xgaia+TA0!VH&o<**aFQe34LSNBXj{xxQ`Y zpn3umHs|Z+3xUo$xq1k&O)nkUk4UhOR4n6eOz)Ajtc~F7J;Cc)v!4zb&4e zR89I|KY0blT(8ZaNvL@7j#t`S`EVHpofNplxq36&JIzm841yQqPJNNXdd4H6+CM`) z%)WJ?jy$TZZwKk*ceflF>R8*CCZ!|NQfZk}PuW0yuQNsc7IGj00@t#$(du=&u=-{; z#jN;`FM<|c8}}AJ(rk6^k;sp3aV3xZw*a+V1~65OQQzqxzchjbFVT8wjrPpwa8gyu|6D)yt`yHPHsZAIRP2!XPPdZ zmpVg!CxLL=NuQc!fr9($`N$~+FRnrQ!3lI+R30b5(fNv~(CPHm?i*4zO z2+1my*9-36ERBvxVi&y=@`o3>;oi}Bl`3+Ew$Vkdjt`%Ui?X@BVqn0XN;LXt68jDJ zIGeD;0|c7fCjNsv1f7=e|2(GlH8WgV<98otKNI_2@Qs563_&>O#l5xQ5D)O9=S)=% z$UkkNwC?+qv$4M3)4<=Qxb5`JrsSet5iE|8q-5nyC`{|WL0K`RNs9y3_1?}eUrK9e4$XkX#$U=e8O^y|7X8TOgRUY^(9t{BM+ zqo1I=vGr$i3jPvl@v@m%%0^~9-t-puq4{YJ^PPQoT>bnmn&~|NvRRE-MK?O=2b>Tk zbb7c>POZ&|wYiy5%GExBscv9*RUA2ddwor`eu8~rs8*1f1(F5=C({7ex|?(?w5oUz z{l-w-MVdLsEO=~bdN8d5XXA^VS;0nfO8jE%5v@OtW!QMP5&iLJcSy0xJ|6ZS8dj;m zvLMuoPD9bs`)wWJ#k{lRGAy?@$~GL>EZB~m##@D2q+V4Kt2H_vE9~mf$CW{8;*FhW zfyu_j7_tR#1#uSRO-HsW43#_MPK`Q@_Ieo22VbS9_EJ}AfXq;E%>@uy z)-P6y?8>Nc?|<>1!|scN#}{{YhT-d{0Y>aGy@`sFZ^+j1{D=4`eb1&JdT)L3`|D%( ze#^doNYv#rog_6&gbt`5a(U(tEkY7;K4C)sCZc7@xGU-YetpC_;pd7A!Hd>pJ0x#E z2D5EJGalv{QEoPw=u@S4;kv1yo?X?5O_*#p<1m6SY6Nc5xM?uTkauiI*RNMdH~y8N zblM)++ew0=%h;A4lR}TrQk3=U(z{DZd%A{`i{B+oKK^|0F#leE56dh~h(f7-1s-9% zQ9uB-8JDaOm8xEdM&KBxn8<=ds{*BmmW(yUNq*xSh{<+f!|wq;&qn819)^mZ&1YyU z8eXiqd@pk*rY4wI_{~KUwANonQTZ%?0zTqvSk0PY{YNuP-QB6nO(cm%!%p1XIs@jgEiX?(9gdO9|xP^uw5G_}bn7)`CIqg)oS&7k*SOclm6i zQu!rtfH-a4RUOM5Xvo?F?;=d0F=6*32j0rLxn92SqFD6$l<&3tkjP!VasUCq+9`P><>KRv z5YF9lx>~u7{h5DvIq96S~7|*DaG`QrM-)veZLM$mkgW$;|)wIP3;y@tJJb zfR+0Qv|-n}_rkjPyj(+P|Mw(TCqZfX^m=eEm6YzE#B{gYUuWGuRs38SBYw!V;mmq` zFX?%?G^ONy!{#q+dxYs=+VT(*t{AvkH}{58MsW8Whb18Ve)J4~uYA`CG$dipJ6K&} z5%$d$@%QpSZCmc8Lz?)a9}V4R&eE{X%SNf1Z2lo+Ge<9v{12#ZAd<@H@MWYu1 z1!hiNzz8tw(Z*l7N7uT6E;O-e0M=7hoPzW1^BF z&%KNSKgeU2w*z_LO^Oeaw>ZLbZ>#6?BUGHYAny)fBhZunv^6*`ehfRJry$tqG!aSssm&Cm0BQh(c_565V|Iu^!4I zNEnD0y0p((5HV<_ zq>I5eVjhZq8_LDTaF2cpq8;(@UoZbvJS;l8B(b{~S00aL#5>D%f;TB{_Tdl<-*j2P z{TJ^AZ`6;x1@tI#t8IAp@Io3D_Ku^BGG7g_l?oms*;~V~&w3f62!pF732QkGn{tvO zBI{cwB5v?IQ+i-Gvv&RM$6yX0e=?xv_!B`aHFPU~zw8!ZdoA{Cr<0-W|NXKQKy)=& zDM3#!gr9+uOD;rkF~L1N z*$CUG`bYfTE1LRJNL$&-uSMbph}h~Exr_>VcR$&MKaZgY#lFH-{T;CaIlAHITEVJm zifcEMat-v3Ou=RF{Qf~tc=1TCqLC+)yVsS6YOCR>vuyP#NI!emgj`>6Bp(N*Gvc;h z8INzV?s+Vm4xjDL!So*O*it&}6X>cc6Lg%m<5zMTa0B4=Uhw*`FocZEov`$9P=4Lj zc{3%tJl*|sm;6reo%%HgHilYCkJ_8>|8TW=Q0%;VbelTVSJen~$VpReX#r%dTaL!? zuOuc$K)WftVCB%MnCg(d)KUZclB`0Z8STjKoAk9bWVR#vd+xQ_8e`wFH*PWv04Q5j z_((5b;dwE78j`whe!H*?!HyQYWx)Q$O!WDm5lFri{_kgO98lMiIW^46!k=vC#MuOf53*rJ1HUIk8CVtpwS(E=5SL$e)e5h#HTF-czsn*E!0J2y=9-)-IgF;IjhyJvlm6l+dg%%4mqXnBGhfE9{#i#1~9VkW%k2Y^TYH?m#fwL8D#NJ^vu zHkqy>u??0KT#))?m`vJ(Iwb>+Cx4pav|*~0-o9|lp6T6h$hJr(OR8Y1r?9l%GP&ze=Azu0X-QnNeC@Y4}W3ng6HoLD- z6r;hRC8?4A`vtzGFH~nt3B>O@dJG13pNmh*`ML#EP0vjJ&#QE!e}Ro|NgR?Byy%}T z{rSP%lpqe0=5_M|DK zm#=y(?i>{-9|*gla5OrgQt4;#pl|nnrZ2*1`_Y1`v@w;Zs`^r@yJyo72%ttIzi#6I zW{cnp;n`x33;9LV`4=S&(FxMCk_@V!e_zPS1;o_3j@c!# zDz4(sn={8^Plm5cBZ+6722(ghohy3qH&WUQR#k1mnwtLLHcD%xxqpAaw`MK!??a-n zDiW%BxuV{Cl8jH+#;6wpS;3_;uQaxa4fD;ge3R(-1RBPsR7d5w@mx*bg>jZqo6TcA$>hpyoL+k#Jd*JD zTorF4N(z^R8F`_17atQB9%jjZ>iDv|7oid;FaSCIrrCFq*AM&MSn3S7_F++5>~Q4y zB}jO71gIvfD+;Qu^j*!Cjvtc$9%z&@=bPgf>N_%&a*kr)p)Sd(YKD-*oXKON*Q>*Qm$NaM z54+SGLf56Yr$0lqmu`0B`H*emFke}dh+_#D>CFkwQ%5Q?GQrVI|I_SGO}MX-Fx>#5 z9)(f>Lm$NqbtvcUKzj(Y(pA2xzycq021QoRa27?YZ}KT~ZSJdymZVCRO~ng%4?1{0 zU%fzqp>5c-1RAy32|7-E(xZ)%_dvheyO|u1vksHZ^~zSiODAE{er;T`R+vMGtydn^ zK}phf1W-ggeg91F{%`8gs*e<99Jf;x2vU#Ku7FVZGg6zD{eMJ#dpy(a|35R^WKJn8 z=8%wDP78A;73G*pmS|2xk@G2sY;y`ZL?UvCqEZbd<+LG(A#%u2j>#c~9COI;+I`=j z@9&?Ihewaub?th;uII5jEH5~i7ChFxo`#gitT!|N@X}CqeWAR%nM*%yzK3kML~p+* z?s(n!@G2Fl9{(~%h52OS^Goag-_c>WXP7J`F-L#VOZApSEvsxRqjQhXkq8*yi=ENA z3t*bjezhfU~5Xh^U`{LW-?nha@Y^7&Xr(WGHn9#yyM67B9EOOT4~%fheknKyPl!U(VHBP^Cy zml8xQ%9qJr{(u9?Mu0ur9CNEv$EbXHqJ>_^j|o-gKrJqQI{!|08%GcsH3F=?)qC(Y z|1()MTK@`OL6o!BEz| zq{`cgS&l5xC#T_=3JY4Sq)5fL9pp`jSI1e_Go4HYLMO9S-PYHUCF}_cjX>rBe)u%^ ziBCyRhw@Jo;VL%#$62|^g)XpdwWUcn@wW0v+@U%?aiX88L-u(Od7o07c{$b$>b${=I+Xuyd!B=L>_ zlE+@+X(C4|vI5M4ivvbSCP9LmH-@Ex;G_yXqa7V#$vf78cV@_O$lGoMe`-{;g!<+;YAbE z!yhLiI2S?}^WNEGm&ycco32j#RQI*8kx+gERd4=5;`Q54-?MwX$2Rs=pVfa92|uX_ zx*~jBUi`)XV)wsD>+3Ira2)TVp_S&+y-i4GY@9H*JBDotfKmH+nir{R5wd&3B~KDU z#ogqvM3}(7DXDo-59soWTUg;W%5sHXDwY_#)gk`ReA#_h?LNGjMGT{SSXW}sO5JN5hN_)2@Qh{LN&y!CB8$KJ$Dxqs0*LzFx*hxc)#ALPr74CQxg0{Rkk|*4R zMA+ce#T2oRYCa@4CZIBRjD{S7z3ut2k}6E#oJm+2-}?QEMK_m8AGS~$O{V;y0Q&FY zK_V?vs;%RQ9xo&>v9RjLKcPbLcz&nF#*l-?$;!(|JKS0Vc>IzE6Hu%|w)Pkr(%_|C z$JJto9cto_+mgCF%7y&Lln3_ztLv%)_0IMi z;V;$;ja{kyxa4vOs7Ezjv_`w_y(g{_F?gNWbo5>O4HFx0t?e=AnBd4B31{NsR9!1AMlqI+jSd@t zL)ep)gGa|(=&Diq2c*~{mRJzwvVevnOUCXpII)QUBb?gC_<3oM4}5C_@agtsY34}% z`sCPwM~B2u*!((Lb$?Qvj_*ffVvk_@RmqZlL})F)p*DEsLTudE8x3~= z#INcg;n9dWNE8ey%=iV=mWK+T6T-TTMWEaI)Z1+zjIpMmz|^h z%#=|B>+dGKG^u~cK>t3<2-+5G@!*2QNf)uA@aXHA%Dm)=woO9y#`1~X9M=w4H_3cc zT5{x#n*Blc2y%}sUZP`S7a)ZmPOCfckk^2563>)|EDi8Eu|%9Kg^TA2?=&{etvy(B zS{zmv3`0@jR5VsFWaif~94}GO3KqSW3!!dfRDVTL*Ru1kKzgExazl{7@>#~Ek38hq zli^S-ma0s5f^-xeUYjne>JWuqGk%H)*n+cZ-t;1Mo+e=A=gg@6o`eVW?a%{F zYo&JWav)I2#8XmLyCo2XX4W_pu%arjQ6h1~Zed%V;RkdNSc8*;nnqShIW(Lpg+t?}RGj(( z{?w}Dnq)Ml$3W<|QsJd5iqJ6rB7-rGh7gDs7p#)apDf?{C`IOq1q=y^Pw=NvJS0}! zQ>w(EDE`;&d?W#831*?$*Lm%0B%Hpl(!_4~%|IUh$1<@CxZPnh7qxnRmz;sxxV6zJv3>br2h-Ks zRQkkw)0~ISXeBx6ip!bqAN?}-H(~aX_m-1oan1Tl=4U^1f0(`2;(b%uFAr~eO7pPd zb&h2WH&T+DV~Sw;AmAFleP6MXxdx*dS!Nk5o1|BMR%uJTr61V%cgB9Pq~{d$+^oJt z7ft#8MP9LN=nd~A)P;@%j@}2R<#}I$3~^??R{MEcnnA#vGzMPr&YK`Kn=fXqh}$i- z$9>$vVb2uDb3CwsEjvV81`==L(UywZ+_|_kpPum<8J%BW+b~53(a-~9Gd!-pY->w_ z!Ytx8Cv4ZSMdG6=qbU)~IHhB$2H`v`$j*l=M)?<;DJLl8h6w!_)6L0oUQ{ac<;T!F zJ|+e4&lT(Xazm=08NQ7W8h+=VaGN zPm`3)e&ISbCAb58si}HUy}DOI{Eb0zkvxn`MU?EUcc(QSVV6^=Vz{^N(qW?;zm~o} zNqU-qDM&JmU1w<#07azps`N(yCXZ&6cj3#{8B5BcY}(i?tSZY@EHm87h^5=j7v`sp zyaxb%xX_`$_JULsnv5EX{+zkjg>#r&izAeOOT<8LjjwWl3rhopy1W zetht-nTt$>_VE}LK#iS#;J+)tmdgrfO`=v$=qSbUN^i15k63oC`YYj*9-e&|qm4@n zH?BlxKA>^i?z7!norb);*dqSzk8=?1`(yjD=ofb$UbTR0cRLvHIn;)24Uev6?V+ZY zy$HFq8N>Vqsya%#X7oj4;Wbnp_tC!OH++zbGm2BQ`9HfArSc(_uMIY`9$M(}+cAs# zS^xluJhPgn(reThA=?^h>OG^Zl@}oy9(fRb7=+&rZm-{?`K3|CR*XI!6CIxMU+|kK zviQ2I+dKC;q{%hgJzo^}b9(pfce}#L|DGk1kU{9T$Bgff3jg~?w-6-5TD*8~(nX@{ z__kC2!@gYHLC^3Z6+UP0j5qp5hh{IH(MgczaTViL0IkzT!oEP`Z0$PP^xlVB?!h+5 z<6VTmX_0foS)intlC^@2nq)fC#Etq+a38x65cXSJ%q~ttV#j=uJ64$7xO~5DuK?c4 zBGyGqk^pJh-&O8Q4Lq83EW%rVs1!|noaz8+QE~ToAXysW8aqSU%gQyuChi{BKFMd| zQ2KV{X5CBg_jgkv)98xZgboab_!%hF>~#e>y9zNy=BG+VS!R6fle+d9$wJPXT-WlG z2;|t(3$Gi|Nmm3+4b%AS{9M7`$m6i#}++Q7tt)H7E zbc;TLO7TM(d-q%O!YYo1?kBM^2as0hiStI}6VxAuXy{eP;jHw268hRI#L(l?y!_@- z<^$&g`Y-D?uZ_NS6dlf;Oy?TTGVpsYJQqWNLo9+NAUupYNe=Nq;h)Ii@J1f>6}3b3 z(p}UA|5M_<&|ao22S>y)Z#x$bWtg3D7~S;6C*lYI6L>MXe(pRB4~9ye8PcC z@?QrLi}yPZWyF@MKeku@??FZDGl?W!&bf$7iU6VRTkJPr7>yXp{#cRODHN@8kl^Bu zk2mjmGei@l3*g%La~m-jG1CyTAs-hy(Ivo}uPYn~pm#cii5hr~`H=6X4ddxDPbhf9 z4Bq2)FLQaVYJ7RjaXGiGd5M!Ld+raq<7#{o%eqvc-@i1cHkStXk_yu!Inqx1Gj+6+ z-`qhpoz5JOO58XoNkSQEJArtt=TEqvggf6pR^J`RI~S=M*7jO|OS*~_H2u|kWMZQ+ zq|H1isFHEQG0HKs?;J3FREi5VH}VuLGfQeTPASr2QHrvnHk_9anU{gB{t^Ai<~?HN zqMcyi0@43O`bh%&veUzTlS}iCr?7vPooAjHw@e>B(kFviyN0?-`PrnxkHAYe_@;RB znlsg)U7oVItalU(M3Q)lc!@e5x$7WrM%TG9vVzqzlYOD!4&ETA=?d; zGU2wc=ssSK#|wA<3N zy7c@s-~UuPx)%B-<|}`W^l|^|3Rtm*ATzOUXJ9a^pV{YmVrQB~z2*~kfLUQ<@MwoV z9o4AspF1W}PWK|lC|A1!$9*aB#F(yF5)!Jn(rq}B)snA$^Jkr9&{0hhNn&L7Ja1|H zwFRNMma@e2Y3zO@8bYwttaE+wyg5-tCLgkHQ+lGtU_H$83=B3CqeQ;${Rm*f{9L?> z<%h@kJx;-s8ZEtvX%B>opL900gv3i{l%j=F8am!RygSc@?% zZzpL>aYM4CM5^-t;(cX=uB$Kk3@a8kzWlJ%UaF}Q)V=nnC``@o&ik?IYfpXt@Gjd` z()oJ}yVm$OaCqMdJ&C`H?$>Ykp3_rBK9M+1dyTBBtMv2JW`((E24DvlH&C8EPN)+LV=IdAXy_sSD6>mT?e((lS=l=(gBc`A#BpSj2fTT2Wo$yFAowMZQ7%~1AF#M6l) zpYHN*M)>44j64iFR7IY;Iz!?2xZBTnth}s!ZY*m?mW`b6QC`x$HrDXlv-yNtWxsil z?(Pn|iFs??#~)Y2+)FZYX3S0c&i{+FZ%UKq707nqua}$t zu;UTEU>Rh|ZIJ9gmv-)jY1D6hUD#y5_Hi;(%JZp)Ph%*9hzIYPiJ8(Cj}G2(p&{P` z1>CiK_j>2Sv$s$lRlTzj7J_NXPB=IlZz#KIQo zBW-avAeQA(bdDaVv~!03P(kBS#>T1af)N3$Nj2#^a|oB(Rz6jsC`$n=9qq$?*x(3J7}f)KxPH;0MwR2zU97n06c%?dgv z@LTFD`C^z~T(GLIA5mnaTb)0Yu4ClOU$r@(dIHT@oT$Cr?_luGLBr<8FW`7z<(L`w zsl>l*B#TkYLWJi(*&O&JFq#l<%C-kDVv1n6P)DGrF@~vfopUrIaTd0DgE;A`Tt0o5 zlh-y?lDlGksDSdgM`T6LhCI(d!&h;Lx%@M2%s1njbbiMCbz?36%)c9HY(gTb_mU*@ ziA4fvD(g3`KREOB@Og^IJn`D&FFNHf6S&d~OP>F`&fw2-gmbdKv)xmt{}x&j!XrR? zM~>oPmO;c!S-elsrqb|jHaM)n&;j-bG%`)Yqwu^|?upvQ%f3 zW3Oj^&zpo|Q?6x@Zj8J$X3S9Yqini>3velDVFR@<4O5ummO4d4!!4EtMuU1B!gj@c27z*t+c(rpoR7D*T+L#=C997s32@I zqVxW)6eoGOm8Cqr?Xsu!L6eo|YEf!_jJBPN|Gq(HNTu@HeznJ)UlhxI+UJ5n>L>Q9 zbeAsiwD#chlt_tUqub5!%EeNf%byHVlne$D3kkKka!{M$ ziW8#M7tv6-Z8wjJIu&Y^8gBNdqnX%-C_-!2JW9OkEK!l~Tj$hiT&TIPuNyh_@oQSS zyo=ue^UFhN#m@hI-s-sy=NH@>cs25`lP^C3+F{_FEVlF^{|^f(jaAXhivEZUj56pq zQFwPK0F500e$`70$E5>i0gPuUxRUaIJmKL@b}sySQ_JN~4j+5GmA;Zu!MyU9gBbW5 zbjBxM^pm68O@j%TvZlS`<1v*#W@)4|mz_tXkVHbbZMl^aO#-IstZ~Qo6X^z-9kdmp zckwH}YYI?_DDa6R;}H{My^w%-;+ea$D2LN|XTbh@xgl7rHLCXwNZ!`5UnZ{4{Zub3 z{FD#-%jaPI5VTqR!z@2hg8+k?`A)dn)`Rq2XI#4=vB3$e_`3T<#FI4u8_#fH8h-%6 zsa@WOJzEd5zG3cMw3vv565q4huUBuFJoGwcl;J4`!!9ax=uTrTh64n^Nae8ZLG_q`S4H5$EtY1L<^n)P$_|oZs4Nau{?s{BXQrXKbdIui5l+##^9ALpev2sz(Lru<6_H!>!srZy*#ebAG#2u(W^u!_lt0jzff+QN<`0OPexm} zz#ex8#p-#LTdj56fput2(@Wd#2C893XH34vjUAHv>5J85z*HA^3LjE0#21A_pPacc zE0<@mWo(khIs=beL=tq%(^y3t{rNGRLN+wGeEz-1sQ9S*hoF+-S=WOPlDca6!yPYO zLtuaZE&!GIU$6Iruf_wG0!32vQDuHd?wt+8k4IE!VnpckKS~KPEn!N3LhM%hYKjk2+>OH20Ph~;C)2Bs`tsA%Gic=-6{-Mqi!stw{eA zOVpD0@xF^JKkWGrPON1Ts}@0v{arB%{iP*x8K^{RCqv)QK3NW+d+4Y*B#LR2A2`|Y z27f~1uwtH)+e!GUG2889S^_XEvqI#XT&9d7^$}Wg9v{XE@m%@w^DZ&tLcMcJB;4E~ zL(k!fbt*0G<_^eYnmXT~(Qhzh^I0GUB>b`l%)TzR+f?wFLOrHIx*!pKIf_i!26f zSWAF04Al0_mk|S~&Ie4scLM3y2+=_aEgCZ>uxS`}+1p^%rSJ}rV=!HD8*`WHhf;Vw ze2ClU^O#=F#s~@u$e&-;luL8O4qgb%>9T=$AgMpiSsbw3moS1rZ_EGB{%-n+Z21R~i+ zg{9BKN`tSSR0}+J>~-L;+P3}ccp1-24R(5Y*i4t!*EfdPS9hCVTXVm+{qJPnlq0#{ z{dn5R;oD9cW#sIC-+ge9ABN2VpG{ScUgygjz;3sIwnbja1t178NI#g2F>uWB#o1?` zORiA3&SRHjhqDJ>{lNz+%dQXeZhn09Ks1fRLBm_&F3%&pR6dF1PW(EFs{?@?HP6cF zNL=}tLr)3suSR*J0|Y3154#l3OW<>=%=Hs9-D`5>tBZuEeAUJ0(BnH8<+4t-Vdzl1 z=OZVemVKq59%+c#(!IpN#HPF)Rr%7{PkhHBPh{8upBcs@2t-;tw=$J>@6Rw1F!tC1G<3acKK3l z+&tbMlwCP^_StvKx0MxK+pfP|f9?L=`4c3y75{W=#uSV6zM4C=Olo|Z9W`PPa8x-& z6deg&bS&f#<_B{O@{v=XvSszqwdc{rJAoVP5A-L2wyBCGu>gv_K-Gcrl>spJE>PUA zo6EvGh^?BJ7Hn*itUWYxmlLjTH@H3_P(`!^h99RAU}R;p2cJlu$vS89xg6K_2ArmG z1?IT$P^X*nSOM10@;;UDl8f55PuJfb+=a3oKjQqO3bX+3ctSTD-k=Ib17-?hHwn;R z#e8sS4||B54TKV5nrj*BQxD$WndXc`)R@R98|w3?!XDqW3&fn|rEFwOzzDb1@OOsg z()tnS2iS|^VSu*(EPv3Ia*Fvx^pn7m$6bxPf*A$gK<2SLX#ZeVF81adJ5$28ZC+Kf zUcaTG_~Sp{Ge7biD2a^G*46x9=HV#-ZXS75==a~aV;Rf#gFG>IGB@OV)`Q3x7GCeF zz0qb7F~Q>bS^J11;>@=+x-#EQ<9S>3-{h{BrAI?zW+pkiQ$n{!F@e(yhq^yPGqM$G-z;n4F~F= zM@F8VV8j8wU-Y&;mvS6k0v5F)7RI)Tg*$*iS#D4L7amrR&qZedH{q`m7*@%9#7&7~ zil&jACS;_;Yb{7d#qfxJKP(t<{=$=Pfi8WmtbK0lE&)+f)Z;B3F_XA}21yR=(|EBL z>Dj(EN{t{@;X8$orRLpO=mo92=Pwyu;T>^!H zluxdx%uTYC7_QugnlFHe$#)#QIGSq%0rsrO5V|PMxX+ZTvic_#>V*J}*9oRewo~_+ zIGOiYs_*P+y$-wGrMDYaf9S;OBLYWuTp~gClo|)VFMeLO zm+pFnwE;a2{|K_tH^425>Z*_Mwi|rLl?SRmlKw_Ab3Y-;QK>K}Zc|4n`yf>)xKz#^h2T3Ikw_959zxAZQQFNUzZ=zYo~;CqL94I$UE_?>ZQA<{*+bB zHqt2s2gq|_ymRW6{?DV5aiXCjwtH*u%*3^mcsIJ?Qj;R>*ZFB2KePdT(xLB-2nVkJ z@V<3Ab)X&mjKG=^*G!}!s`GafgDs)T%xSs8`LqtY>_%PTO6{?daiAApXa5C#V4`WP zuNDX&Kl|n%<#{B+^eZ&Iz+vv?t=iguwde^@?`Hy0`q#`4iH#vIrajpOIU&DeTT5v) zxr#E+(@7dPjK7{Ga=^MkfXDX+)bim*)EOcI_Qj`Yyvjk8p4B{*59Ys6)yRgtxQP84 zDUVG2f)W^XGu$dra^=Ld(+S#17DcA|C(mhI9w+%FtCF4y6Dj+-lI(~E0yMIc7WZ@o zr=ZeelG7cG$f>=WxywTrKkckC=vw37j-KsJ{9Ed)^aI%t{dtA7lD9Dg7n_6Dk&(pflCj_I5k&^eDV-LymByG0cRS7t;o1s5PEcdZ_ z0)v##CaY~m;9Y<>8S<*`1(N5Ff6f+Tp3!aDWHkNnw0$x^j`sRY@nq&BZvX!!5paE=K)YdAZ?h;LZak82og{CU3MPEGNmChj!*v{FTr9?({aP_(i#3M4X%doIg}5 z+A)6|f?6BBb<0Qy0jtYGeIQ^z7J$07P1TD7HcmY1!HZ)D0$jw5Rn3Q&g{-)# ztDSx}!*4$MQZs&95o?RZg4)4v}5GK)2mUc(fI7(=>67<^43|a$xec3 z+;o;ptM5Tv$}-XOLy~L8akmR|_bBXSV!Oc@5?gE2Oj*!R?K^7ZHEy6`GpzZ_p3%p} zd!BfpLC*Y+T~q7Fae_;&D^cXErb*<5sx-Y#jC(!w)~p;+X~(~}N(yj#|J<%_#(DRbBh&gv;8h_m2s}?$-HyD z+`Jb^a(($Uf=^A=^MS$E%|K_lEuDA!Q+ytoYP34GT3G8*Jsx(CxW9si^!*5J`cTAo zTDHn7VmbS7_1?UJh)^zSsjbSi;aY(CuH$!9aX>Hc;a_@h-<~cq``<*u$GU0dz3APT_fUgSQE)sQxl*o6#c(Fos*i?Y2Yd{h;XPh=Nu+)2 zl}#KdsEswd6b)h|&@M3s<#pBlz*|)DQS)doJt3_;%a?kby{k#;tA~cjao5{C<<`e- zlWzQu6eP*uh%Jez$=;TUlZCmLuK1i%SIOGh1-`D0O;?>uIT=L*JTigWf<@#cOYe@f zcnz^7+&On1C+n>Qr3!4xzv#8spXfoYnRunM|VEzfV`fF5L6v^$cZ(9 zUb-rCex>@*L%GGj-_BaaY8$Nu2vHocyq5Zg)7b^N|G|kCTt&5$J1a7)m;VQNxI=KJ zHbg?2nc7nFCg?VrMJq1(aUG{|xi=hmicD8=3kTJoe;PqzK`x)0zOebF&uEw15HXJe z{zH*t8xAkd+rkH4I=~L_N_G`%Iui0((HY=Xz5 zcTB6S8T7vpk09<{}GL8V~vc*ZAt@ebH9(1Gbp#ERc+g+I2brJ6!fCo_+=-TWYn(J@Hj zc$&|3B`!KE^@+4@@eZIQ5>(qiXinKoU)Q%_#SVhCrOI%MgW~G7nYQ zTSRD(l)vR#=2MmhG;i(_nQ;$0mu?JN7BTc>&m=M;b$Swy1pyB5u|NOz2H-hsrLt8N z;G}-n9G}yMYA#@uC_Xo=reLHMoGx#~T+mo*5(Ir9cK02J-0EHLU9?^z%{Y9uN;-lz2u)$qgkf0VX-gjou=p0xF9~YOpWls z+(?gk`89u`gpUJ}|1GE_WamCeWnCG4-~V4;qkk5g0Z&M~MG9;nBaCpmFK>6-RUKru z<&}}LTyPxtClJ?TPo416pP}%>7461T46A*mui~%V+F6Y_#%f0{dY{PoKFi&u;V#Vi z>{tl&WJ=6^|7@rR_2W+fkk3-YYz~tA>u_=2DHFIlaP7O01Pe(7eq}81_hRERWe~ko zdpCILf@vVn$FwqsPp5=evDL8Xc>nnqJNM1_8xYO@(*{)9(JQM?rhH|arsMheF$9CX`fFS{%7pg=MTx#?1 zgz%RYP@}&;46^sS%g-NxuBFhX!NoZT-%RXHGBP ze17J5^!oW{V#|*=bvhPXG79afSzO2)uSXlp(U(#{lMnBGL?+IfL z^>KUVMsjYpVP3TIp}6o#l!bll8c;#O{C&i0lHOAwu<~Q+{W)PHQMAlr9-p3Ho;=s( zJD#39cO0;X4GoP%^V9!ziL6|QfHP?T^f&)YSk0)BO7mlG0q?1X;sVYuVK5+1;cJc57n7D{8}@ zr@qWm<(IV}?h6d>I>o+W^q1$v|IrZXs}8EN`Yk(d(wCC_&_-feV&3Ixw<#A&#%UT@ zUKB<`H>@hCQpNV^JnbDLmG_Wa41Bc$h*`F7j#ry?e`2L^u!Q%!SGh+olJBW~@ixr6 z$SHS}!rgJaP#3?+;i{T+>GQA0x&m`~V=_5!N+%z#)~*WAU1~unoeT6W|JHPT^Zprd zB0HnKIFI|6?wlzD$nqp~A|D2c{Ik_I+LPLL*M8emRWx4G!sBvJpP+}SEF^VWy@=wnr^K1c?dg@I7fNYL6L9FRpoWb4+9ONITJAb#8pYjpki@ zy?bg=C4hUk^rn38u9b%MVrM2HyiOSSAy>m~hH#!jmCi2laIf|JCe* zg~XMR@;Qi?Qc>)3+wLiPupFI& z%*nL$YRovzG$QA@gGQ!mAP8xy9^L+~&ZCiXAxWNBHKUo(tXr{;s*$yE0r_X0rNR(f z@AC7p$oOnS1u>i)leC(5A5TOr1(9(v8zd;1;Q>q9wS9$Pf2A;CHW;YmJX_wiHz;7$?-DeUwk9e*7qwO$JQQzH~R z1ag*f+5$O0Uvou0J|%Lc<&y|+oL^Fw-4!GBB(3n6lC6NeEwBIBp|==xXF7+G;!hGA zDklYei3TZ#r9rai{}LIb3Y0kRr@)YJp>{Vr-w3;u38kNV3mGvM87*AV(jn0P&Za~V zrocaR0`oerW=-Jg^Bpxo?3>^x%>{we6`)?_c2bnwcg9v9|#AzQ$6 zDn+SM2wRQc%ZQr4#4JFjv&NDeBu*hWW}q@!`&I6-*so?v9D6e;;q$y6r^&gfqR#RH zDhgHeVa-)GRGXH-JD+&b8qay}o!W(S8da~vlW$Jx8y(fAasqvto1U@V1;tZSN@(a~ zVt>MFs2f%;H~7)puGv@M$P3$7e*_xL%8a2l$r>OT3@O* zSAa>RLXW9Nw*hQVoqA`+BxrN;1Io@j0-EG83cw}ZI1(O@bMdY$S2*dK_ zpNikOf@9=U)`tdUK93rccGWd$#0E}zg)>9Nxe##`trZNqM$g*8j{HFo7gpPQI}!$a zC?MvTekc9eDnsB0jVrMx$N3e(nuoHw%3v>KA+iqv()0@?f36N9yf-IWkF-mFCY{gR zk~7U5V@01@X%p^XA8dZJC$>eeHq0xGB;>IMyjR>NUs*!1i}0`#%Ag_6PF{4_*-2ky zzWGmQ#|g5X&}BENw?K1pA%H(_ks`588<6=)32@=kG_a9nZ}F)0ZPM&E^gby)MR;*- z2>w$f_UKPRx`9b^yvh_JAm#2L6rFLpQk*a6Pr5WxS4qbu-T2Q4pvWz{jN?X}7gZ#f5lcb;bv$!NrOPG1tV2X;GVJU?G zg*`~{&`{BIz&d#yWJXNq_$Bc@D%xi0B5w(QTrw{-N`6^ZkYVG<<#oyNmUJ0!Iaem3 z*f!FzRayZ)07#l!Ym_!;`HlWp5mOY^GI|O|+()BIp^x;{(E2Dtc*t^9YULai0Q2+xVAUQ2&F z{bRMh!FRC+^bxh~tQ705n)KrJk*jB~lGKFP>nFflT@o6#USMIsZ-5eq9=rm|LI2us zoznQdc@?}6ITNE+%5}G+D?ewPmcGhveE@ofj;9C4wGCRBzd)wsyL$DyxCr&1N~QNV z4uDi38eBpab->winv8xXBj-Cf6ZIdO)F+*f*Bd1a@++igr~Xuo$y~5k1}m1I6244cv;QPle~A*q~zWEnPydLcU;TMoK-#$eEZ%Bvg@7)Cm1P#+7-e`KY?!JDkq zU<+KjO4YIS>%D?QmQ1nA(kr>V*`Fc+Qe_>m*iq_BIN#evvv%R)ocASbVXFGdFZ$fF z*ZA$9X@`d4zuluu#tkN6WKM)%t_5dX>!csg8%?T(z+_wCmr+UF;34EmCdfpqF~h&w zJw*lPMla7JR&?Y{q*vD8`}a70Ie#zYJM|qqZ)U5T5^FOm`Ri6RYoRoTYR?EHEAf+p zxUd`e+I{yZuHR8ApeOjqx`!#*`NmCx2Y}Q~>VM>;oEY21+ z|KVL+@4YFQx4Fvo1a@1$gX3cj?2HZtEB{A%_-h^SZwDwDMo)2jH-XNUwZ8{K#iv-I z@)orw8ddjI1dI*NUWABxSKZ}`%<{o$x3NX`a=F@CYj|s>=^p<~M;^+tP3I_nI-8I2 z(eREE_wP2aZvm#~@2oEItAS#bHAfq^RDSTZ9f8l@1}3S+6X*_=JrDhTG-`f-6JFf} zcbZQ4e(yy6y*ZVO)SC{Lw?LF&P*IbN8=0_&p`XIB_lG0_>d?F&V_M=gk`VMkz)Z)L z^B__}_e-(&<14ru?m@=(8s3Z1gJ>|3!?oRwTo?vgO@oYiMPl+#@GxUp&UMEqsPi>O zwZ19+k|yvZYeqwL-z14Lq=E%hZZ$0tDQ}DtFTD@gy6+_WA+=GsXxNwyCM*bu1Dx|# z$(0VC$Lq|uzRE4SPqgeRwRMkih~91af$gNZx``C!$NYM0s&fw9>yYd!NvQ(dS_!1^ z`6IB;jX=z6+41qapjHnM)E{>b#8mzQ;m6_nOF*z_%OKJ++JQ|(Yj(vcTdF<7Niui- z0`m;3*QJY0%U4}f2^3jVW`~KjS4_3?W<2J|X5~yqJgJ_Ibhp+p$Bjcf1}p=ADn;pZ_4;4lwGV8$(+#N!&#i+a*YsktLk{PU2Mf? z=yX5dtqsFxxq@$wFb2$vMTg{dyo+xz!n|#?^2O`wq!T%-JZ;d5XnKc}A zC1jc+kSh}+*mppfUelPGbsG2m*Sl$PttnS})YMoAUNh6DDL)`1sY(pwE578LBj`)C zC`|i=MQ0skaaPw*%(xIsI8vcS6QQCcr6iSJB{r^+{q$5fguI-NcX6ntCZ|0x@F1fz zIgJlo9T8PVJH*?P_d80Vf3qSF&@`aH1*%(%D3vk~DE*lB(dS~geP@=hv9m$3`ILQh zgaNdGHz|6GAYpX$XR4})Pu0O0+F-nhXnoo?;|P4=-eV3qnY}RV21nZ~su&*pXWXld zAU-Kene0m{&n|D#gKGVDN1Pf7Zme-*GaFFJA!n4o3dG7X%H5`Q{YUMZ!N+8KWy-Rcf>;DTnn zI2gB<>HNKJaFS_B+|8c`ar`Un>>jRz3L!w4tHc%HjlsZ4h0GOZ;XhL<*SnY$T=K;9NR0$5Wvj!#^M>KOLj#E1`iTSaM zo0xA7Xe2uUsMDa_#9x@n+Mv~bwcxI0)-iT%Hz6{~67Xp+S!2jAitP-=N9Tlw4J?X% zn_5qQS0%Q>fj>wdi?oDKc|A4tcK*H2et=DlxqrP{oxipGXn;rj*RP^;#xDO}p7=?+X9)y} zV{hX@RLDPoXLw8`r>Z4^*q+JXw+MQPx9}I7aa4MMn0gWN&EOFrgv`j}F?<4#Qnjdv zQnmMa>8ogdg~*2AW0&*X`8L6wEo#*}Axb4hm0XUMOy;=VSA;v3btjp_z1K`Vpo6ie z!Xm$y;nR$Ay?`$3XmWrFtfvM*;8;BTFdRGUgtk`8N%_+LrbzHkJKcxzA=K}f{Ix8p z77H6*@)7>vWnBl2V51e{EY)|>eYN30$9K#J)E())(+9dhf9vwjyjpd#rp`jma!tjZ zL0{ZqA6YB)426t0`DSCHKd63TDx%5y(5Mb!-> zpTu(efTb|GN2!doyow8Q&$H&uAP~Oqr|gGbiqb4uSIQ)zGHZfbDVnDy43J6qTK<_6 zFn+P#nW8W$zFzvfgAU&0fF!Of1>1cu!Ur<0_@2r8S~L^!@CORAVJ$NVZIaDSNCK*! z6$NnL*JnG1Dx=O)`C3mzd&c}sd~y3lj1vFZ&yWhARx$lb7+Ii9%G$;u`hoEAY!c~w z#T0^VN&~T37D6>d<-d`kUE3G#6N#}#RMzvX#H#hZty?{o=MD+S=#V^Po2JG@*0?LB zP4H1_`vUby@5^|9DN8Zg>3?OoA!~QfbtOh1gjEvVhMUq!ZBGd9mNaobYjZ_xGt!ok&9`7=XG!yyS(Xw z$P%qvuU+`F=CmWu?2c&_i+mBAAN!->Z_HrC3Z5ET*7;(TgJVR?1kOGzyTToO%ccw5 z7FDMtog~`tfqT*!+DK82^CzmWjUIovvvVO&(^P(LxxdY>ERvZ2ivPEyXwK}K=qJUa zaD(5KuO&u%Q{X6lewCvAT!A?DaqYAP5zo5|$Q{kOsE(sbcUf<5b$9jI$36ctI4o%` z9MXFTHZeUi@^?|~Cj37;?aT-0Mp}ZO9P(Oz74CRj3~dZIKrJO}B;dR_zI#aH{18G) z@abuz;_c=?XZGN8E|oFI!gbKllO8}w(LY=vW{kXnl}xNiS$S5r$Qx2Y>~48bi<^k| z=Rc%B7Io$dZ%#ALIm^9iYhtXyp;c0AP~@=m(@-COSFTO(8=rdx2DsS;aDf71*E+_4 zG{PZJNIp~`rv!RsF&FBi6v_t=#T4~?P&WC@amWOYEf5d+CLobRSdZnH#zlHIXFhyu z@v_iNsVV~C%zyOvX$eQfY&J}KWb=wKkYkewRjf)4A6${wXHsyEK6?|iU4+K!X=8qR z2J;LM1{BHXLAL^ZLQkcOZ%gJf-VphS{41O-a} z-p@T~!lmMKqv!e5QXB_GGE-_=phQmx=4Vl)YT!((G-E|g4PVI&MD2R7|HYV8fo2ubaSWg z8kNd}E!0AkC2zDZ!B#2%p$sz}bRm~Y%y;(E!)JK6L>)AQY(11;Nrc{~hx|CtPo>Y_ zA}btjVO{9&C$%4euc@+w$j>Upm%>aZEoo#_udt*gn-();|D;&J$3Hh$Pe_m?Ne9ud zg)@gjFI#Ht>|s#QuJljZTKgdTW~v1;6Fkp`IFZRC;~R)=F`H-4d2@t-aj# zQ#~lZ+oD~mqH16L8~`mL3^%V~r&Q6}X^Dt}rm0AchINu=T=W>l#weI)N-|QUt=C~d zP~WV!SN+tO@xz|vLpJt3TZo!v`@3f*mtT1=9KE7=_>%|LViG3Q!dNF;JwyC^d;^mU zmuaZ!!P*M9BlrHh_pK;GaD>c<4H(&WV;b_H*nKtWnCqD@8bY%B8%+0!<>1h4UUEMkw2a z0VBso)}_k28#cVK8IW4!t2bk|$hpw$AuaX-2$O2~ASJ~d@B zuf6Y%$GUC*&&VjG6bVHVvdP}5Br_zERYqnu*`sI~$=0Jg5SCG=3=%{rV)0|k1-b_ADb`d z!#~bYwwS#o$UZMOino>%j_G#3(dCiPBi710ttZ@PAIN$f*FDcp?K{oEBRi4rvSqN^q^|a7i#TQd(MQX$~o4I)A zefd!C;6)0a3f!Ax_UPQrxBbdLrmHGjJ3ve@+P9wdtj_Ef#o@;=`r+p4lTex+7MH-8&Iv&mO7g)>Pr zX>g?KA~iEf!n`U*oBiu=UdKl5sMQBf@L@GRG&dNVkw9yLLN^+Zoq< zB^KRB-=(%OwTUTXNp~{c>aJ13Y3F{|4i)as~ zitmjRRjr8^KJ7k`C1dJvrI3`vnw;9|GJ^{nCK8L4jFo8_K3w#l{w%bW?z@ZUv7@~A zn$pl{mysf&NeI{fCibH1&(oq`kfh29?|dkbmEaIw4R;98(a`JbUE|jcb_)HvEU}!- z5%7y&aQhe%;xcf?n;*2@u92bh%vD2VTWU(cMrly(!sAVbHAy=iS#!*&7zUF@?@KO+#v|pVjOj$4iUj8S1;v2yU4?LlH9IYo}Hq(yt+sq z+Q*h+md5HUcfiM8XwovgY!OLA%&2;F-TjeIh+JHej*==PqlV}a(OA9(-sS{q2tZ%t zlJ=aq+$m0nl<2ICAOH9);|pc3-rXgeitm#L_3l`&8O@Mm0~cEz23XLJ^`w(F7f_Ng z94Ey~#ot-+6kd}|3?@*nI+Dn+E>8Rowrv!EtV29M&4h@8UEKp7@d%jJdaR!>P#D1D z%f2Kl-jm1IQ-CvO3CBBmWGCq=E;WD~;7EM-w%Foy4gtaf#aD@YxC`AH{-I5#J zMCEWCNf!8mqurg3kyd6tJ?VB0Ag7;**;KtJX>pP-$C9|ue`=E8ItJtKj^cy{U)A>$ zmN69#zSDX^$|)(#(#}My(aVZ#WSNjF@7Pq^{5>)lqQ?9Z}bR=eyYfD#Zy(S>fR*}Dn zJwH2f>mw;ip!?>-gp=L|Zlr{|s4<+p%`#|G+6*R-%>TPTE~AF-NYu4FJu?cYW6pc}2uTsY=-<-`x=r)efQ z?Uka#9|+JT&eDkh-N7>vGV;hS6*_ABe;fM5a=Gi=%8Wxf`~_q zqMxl?7)SDHJ6Fzt{@a{0WmyCnauwSGX!miAZ|tZ19Lv4ek?2U_0@}h6H{~qu;Fvbb z9cY1mi|#7@$q%9XHaS@(dUpKUYFEUEfllh`(!<0lL;!t;xiQ zVS3R=mLLxTBLRpb8NFsQv%{Fgtr=?roi*)iUz{x86Pv<0u1m=QnS7(F*>hRVHePd- zk{H&U*EEl8FkztjhGQySHA&oXajsT5(b!{N+rUtrYYn7EG)>TL_%;^S@d2HeJ`kdq z`?|Uz&E=!7HOZd2oO&i=h^~3=v#2IP^=8espq8+2v!1{SR75%P7;&dyB(e}lk#9_;dXYYdu0Zl=%nM^f;(%1^f8E^iNCnI7bo&zmvpwIh_u#tV z9h<3Jm9Qo_L_#r^piyTBvs$zdc;JqGvj37na6iM@2%Bk zq-tWyyv?e1yV^&q`5bMBQU3yJEB9;o06Gtr!z6qlP+~F=sH9Q6gzUJgkh7mCwr6dYjR;HrL-V zLQlh<$1&gFuIaDn#|*u{Eb%-`;IV@SDd?vOJ2KxgVRWOJ_r}T*debHx8RecQoK%a8 zFzds(Bwna#rjj(AcFIVHFw92FG)fdsfAF}+_u#1Zt+Vr2Qr!D@R8F=2WJ~aO7exVP zadcFE&4Kx`lK286O|UB-eq1R2b5eC}iBEn?mSdWAFSG=AwVqjd#qPwW+D`sWdkJSy|KntcCuDYS`mdcp z@4QSjq)`&N?js1=1;6Qo!x2J9|9h#AM3F&PXC!}FGuUx z6`pNy_7)_&qj1ru1RGjCmF+e8nXyS32(vkZbHzMoUkR)9;8U3n&NU9`I~b3Y&yG0- z_W8o1+_7{A1G9^Sr>{vJG+H8=_-I~OEJwGu{*ux#&0(JBVmqTNaEABuf4GJAD)yDA znvlx8zZ5q3^AGNFdaGC@-#u}eEH1dt>>1GuQHQ`Z&3xk4jO>nA-q7$=E4V!q>x6aE zy{q*2WW{8lYH4RcZdxj-AwhmBdmel|{1ABp@}lOEhaXRIv^U~_!mHkqN>ZF6^^*xERS zFA!3&6>CQ)qbVj#r+3Y6QbQKsg(JlXn(VA|Pad99p3o%P$cAP%d09QjHg=P=^XwEE zv}k-lhHmqkG5gkfIM?=NS8c}YRd`3yC@_fha`#(Nx6h$1Oa>_3Z_x9+c-Ga`m|a3E z%vbuA2!=P+j>Rm54=1NfwNS#<&*4A$L8 zSD|o#QN)n*_*oS+Mh=l3qroSh1okA4rltJ2jvV3Vk+?3Zcw6JS6ecD|4c(KX;|%VO z9_w&Bs$glhW>c;)C|^5KWgRD^Z2l%1%jkCYh;e2W7N^Qpz-^kM118`0nw*P{do145 zmQZ>UTb}M9N09OHOOi5q+k7@^BcRHlCl>!G1&=O->+%y{7QQ?n)xS{>6@z)~IkPdg;5IyZ zUAwpM1CF3)-(>xv3Xnmq?MDfi9Ak8Y(A~G_R~+RvbC%EYgGM5;-X_xb+;cx8v^bZ3{b)H0CO>Zx>c^=rQ~=t)}{C|$g1>AU*6*@BVO z8ivQ%2Xv8$k}DMucU5*^!{x5q@<_E?G=Y1~1CrLhsW$zP)ipp@ho1?1P;LT>r5>9> zdE+E{oPG{u6>V~w_Xk0!LQXRELpe)VvUhU!WA{niS&Wm{%K^Ky<$|@HZ?+<5scO(` zsTmtfYlvIdg+Fjmeml6HgAD+$tCgH)S5|m{DUc<4fo*4YE=|qh~N&U*T-qe@L7spTcfqLz=xcaGz>nySgZdKK_hNAu;W`*TTwDTGt{pKm z|MAmerXpEJV&M^0QFu;ue8JBvU}zNPy{=Is#rpUl^*Lm0R=o&I>s9&93IB&tYaedG zvfpFWUoo7Xkh*TVK!rE(?qXp4Y13^g01Mp3oP{P|sIeuU}t)}30TF;D`3Cw5K z5Lh?^8`VxHY2oxP4jrWLECHWT|CC8R+l$0`J5$Q)b}wgDA_&QAX|(Q zGyK%`N=iy90J%e+8mV4GlOT6>MC5}N^r*A|ypQt>4 zEI+t|!db87ONTCZg9_$SnZd)P+`gxzzzwN_;Np3WCkGP++mGYa=4_dbu+20rEVDx$ z>{@E<+mLCG=sOfV&zB3o5D0U;B;DjmLq_XX{G?y5ls~uL`1ut>Ds)i3wmMDST%$>%D6eYQ3rLN$T^5%q49A#=fnCraTq>fjn)7vWcvp4QawH z*qRFSq)Qn**c?37C{Y`9tW4tuJW*d}6>4v2la&{^-z{qT4e19$F#j4PeK~7o02|BL z+7QiTZYns_Ey-_rmI!reklZl@RA+c_kFn%le#F%5r>0OyMk^dH0&$Tv=Pp5WjDlX- zeA>aevZF#H*VanF3fFGFZE*b|g^pgNXB%A#M*VsHP137AdSjLf*gEw|o4|9!)1y`A zsxO~UzSyDF<|Rx4cptmc>L+g$%= zR)ozif)b_}k}1!Tw{1TOz&B=9Z-n3?m4Kbxcl@=@MGlOr+RMXTT5ZkSjH=$L_KV6K zd@zf93~Aw37$1mrN|Kh~ksTjdSF%i0sNJodD_5AQEj&~RR-mRqC0;A!s zFuRSiD1e>#DaGs7#K9d;?R7(-Lm>BHG}Eux>81!8{>^Jqha1r@iL(}8^^pA{ z9tGdkpa&r~`kvlH=ne=-DK2(X7lS@IY(&1`hE5mn@3)VnZ4bhFO>g+t|7no*4BZus z=|+DszMoNTmUn#IBS;jeV`P8*?fyc8ufaPiC_k3`b%OC-N7!$rn8$@Zvwa~R>auar zx&vRgPod!xCmKo$)KW`Rmi4L*h!-mk9JWUuJn9_cNf@MBl^ssXiK3L#UD<)C!Yrqm zU2+L^OZ=P{JT$R_MZfy5SI!t?&f#~IL#Edo?;!>@K{HdaW!&c%p0<|TD8I|8za6fyY>8*)>iHnwv#=&IJ@A^+O`6)Po;nUHje zowF=+mFnY2$=?E|1xKPFKfWNeyQZ)SGhzx6Jk%n<5aVAlQ0PldP@UID zpDnY_^~t^Y_s@lopg|2j=#<4Ccy3X&gnDOeAp|;iO!tV3Wn7pmvV|gc85E1uX?N^@ zpYAd*k?^~k-@Z2BL-&AC$J_L~AgZgbYwG+1;`d|!+Hu%)05%?b9DL3|Wtnb2P;6%b z7b=yAR)#Smgv#ORERKGhyFjg?Ku21vpuoe3KW=L^%xbhANZDsw>Uyj&#Zkw-CHO|D zuzIV&dt>E=mBFtY15vMNXQFmLqTLdwb?bxAxa)f)X+>p}q+UPgB89&B|15zuE_6mt zwn3wuJVnOYTVIGytllEJwVW607{_TK`-dryt~dnQxjqxH)~{PUl#PPgGS?dCrG4G#Ntu7At^fB2?72w}`&>5Xjs)im@!{L#NW zXxAT(!nS_hT;A^!`oDh@%|ZmS&`1{y06-5&{{Qy>Ha&u6?0nU2_~)_s55hx!C8BW| zvVP?c?61H)wf%GSfBCwmfJB;!XHt5h*!55G{=1*JmP>)y9g8*;t^d!j0sEeadAhw_ zmO&}wcMjxVg#51?;TTd`S^mKGAMzWJ9)q~khUl`CDIl#A5aQG!fX078E?4eODULkU zosQpDX#ZVyBV88eoiys~MF0B8Gjt$l%hMT$prr$Ot(`#!l7u2;F6~d6B2i!( z0AoX@E#>~cg_P1F8&;v7e>=gU)U47pZ>LPU)&91ac3~WH0Ff;L+?de;VS}k};hRr= z-a8ZbkKMA!&gee&r=kqp0AVj)q!;}2d5(US;4DuosT${1XPNMEGT7$>gJM#~H5@AB?@6D64{6*A+ zeB9`#ph=G-BbE-y{r8n;1{)KZ5ZR@=0JEu<-f*N>d!&9|14Pn04Js~iDHu=eQ(;8&j_*^;HpF0WPHxl_esznB*|0yIoaZSyl zroYxIauQ89Mk<)Kstjfj{`5rqtfCuIhiD6e2QdXmg7N3Y_}1~W=Y*X~?IEWzJXYmC ze6Rf5nLUNMDJ&K{xR8b_ey+11t&PQ`y1`YBTTL1p%O?qTxIScyGcOb8^lCT{dy#Rs z_HF`y!CVOEb~Q4a4fK54VHmkiO`x=q*%)cT$Gb{QDb3*YOJ z6+}V$<}S1a<}`Y7k0^hrmnny6EQ#G4<`&BYY!5-}v-~D4+PR|5G++qtHiQxNzH?Sc z@=_BCD?J_j`Orlei}{%(k0lr5 z*ts5`fQT=9Fxuk^bp068;NJZ3bQ-X_CFa06aMw@sG_$k>`&qfI&pu9yAz&@pm-**D z#9q1J^h0az{4bps;lM1`(ojg3>3glR%z)bd?j)fe6*ruJw`9?9E?1Sy`f-J{^ake} z)HVL-a4m|4j~*}numHv4l~&7l?EDTleC+}{g2}wnkorBeN|21O1@!>DHU^f`m232b zdoUW7p@}g^DoKwqzwcoH(kNsO6d;M|!T=w+EjSPDwr%8!ZT3EptSs=;j-!h&2_vz3 z)ek)_;S-I~E5NQGr=k;ZSH50Moy<7*&QuC*&Jl*Lrl9h*_#t~SK_iY2>Zdg;-C+TObM$-kp^# zDlRd5Z={ko#J`yPjzvl1G4|=JsTUYf8hhKl$3)pTWS&OtTsY%Yfcrs$y``(nXDpdE z$|0MqJ5le@7$~3*XJ&}@(%ZA86ZiKjxRrh1zO(?KxjxF;>^<2mM#mIt=W za7``xi5dmr5fZEG(SoO~64d<3MndTbzv3K62>ut~oe;Ny(R{^-*yESR-}5gO)}%p_ z#M^v>c$S#MepFkj7@6#0TrfqHo|XBm9w-B*odA}^6R1PS02-em=|(#QU}}|(z;v~s z;524jLQ{#2=Up7w1mrV8W49=ztTi(s`&A4$3ofB<+D%ZALdbFqfiar)BlWN%{qEd# zIn3x7)Xu%OWsmm@h{KlAtJb^y4(vl`g^@LC8{^tKN!=X ziud|^b3M!33A7)1jy^E{%kGNk;Yx`uT-UomwRkANc4r)cl}Zd|i95^KsD-rhok^Aw zghh!aX+zB~fB3{icB>vcs_Dc|l=IIm@Aa!2p9M45QGSXj$qlQiJaeMR}!{w&yg_o#3Bm)VP z&WC}`8b;1}1%ZX1W7TJ@Ys~L1OPf=Rds`y#z4h~4#A=pzf|^&%W~A873t@_i{YZm6 zH36*(T?3wdedX%Pcufruq+&HlZO^S<5_6Z#zNNT1Z!FiV<#O9ErmDa-6{U$r1UDR2 z(zH?O>c{eylfE^)ZpMB(w-H+uSj?;vT7&&;Wn`FmfP?(xoUf}bQMp*fc6WwRuX9K1 z*2v~_YZ2F)ZHd5bQ=~R0saw8f6QhokA2UqTz7BMj+g(a+Y_g1TM5rU%%4)eMlOcPL4EtrBhnjr7CNX)X#+|T z`59@$mNg#<77LOZ%00~B1p0HNQup@}?vF}8@JB>Qa0%Nfe<#=B9t9$mTk-0&f+&EM z-?Oz~4^~!r_>x9`lg9mJfHo!P_i`}b{8mg!Oy4_l-;X7PnIt!}H!&vJpHiq^CK(RW z4*qZnV<`!hKWshN$iH0rPKBA^vim{+gt)v`ZE%11+dCG>Sca;EV|D-dRs^}xyGYJ{ zFZm@$Ivkk-MTjO#L+`=$GORFEXajC((xnhKgY-NMVN`#ce3JCydHxGd)(jNPZFrq& z9*lk>XDcpSDKihsWP2*YZC!pEBXB_ze?Ic`9HWCL8V1%^;zY!{N8J^EiIM+paP%kF z_hIFS55W((WyX4$QOz81aoQu|jZ3^!!PHh4_QY==`Ww+Fk#j^Zo49x*k_uIvB_xrO ze>d^aj0f&|2=j^Tc0QuRrC=X2qT$r)f}JS4QcNiPtns zsftSwE_apjB&s`YO@`XPBmEYjJ!LmH0BP>jsp21%3bKNCEiSat9edno*(t5irUG3+ zkMcrL5;r}Ld6SW?kn>qSo&>6}rqX;e?2;Y{`5k=+BZJvCq8vwSS^bfcp@$$_QU|&v@tnKlBFz{ zP|I(wBq8EX2Gln0k2^|icy&2SSo>AaTm9nYytZ#*)WO6=Qtyj~fy)|HaQ}u2+~wlz z>t$U!zUX4E+x^za=+mvgJhOdu$D*H zF0kQfw(K@nW{DaKy`#ao-KIGT_vW^N?c)EhcZ258g!toT(g0{5G+)gEBnmEMiVst(uHGbr|&Afy@XLL+Ko_p#x{rA03Ai#iRl7V?Z@jZ|TY@$z%loj61y+-Vr z=}1doc6|A>#9<)Bx-Sl;eTy5_Ye4Pjr)0EX($`yhr@&|-sr%RAONYZJ_vhiW!NI!~ z?sMu_IOTc@lR#iaB&d1m+x*9zDP(e;`b2sgixx%yrFi?fZS82*yf&HaII+3D)%pv| zz0uMX&HcPk$X3gKcD=QKZ5)z*0#=ly+ScIpKABVg+zKid#^(rFyo8OCqE05=Req!% z%iJJy@kvSoLBAMwIkDjUjHHP@>MUppe>k+zUMGk3`lR9JdG!wV{c4FghGnG{+P|Te5bNw zf|S`E=q#M8pW!l3l|iVWqaJ2s3hXadi07h^h-)yzdT^m}$f8Zn#@fJYFDL)(awp!A9)H5yAd z*)r?3qJio|;lV-S&8 z%+Rcir#A}_&qTo>*C*GBXK1=?WeZJcNvi3r;qtPiGSpLX9Qexd$Yf{ zbrStD%^D{uZ;iWRpEpH#I&vyt*ur-pJmKDnG^?xu`q$A+Z+4F4QTt^gn5b| zlXi8j?Jh>gs5WQY`iF4VI%>6Jqj<`zX-IgKZcY?0GLfFcDSe4uJzpkEe&l5DqcW6z z=N2qS7a(T|zAX^aNe?H6{rUiB&=+$v=*5lnEUP~TI!2_g_L)dWF^w=h0%cCu>5E!0 z97%_3r@t?6QBM31^QVBAKl<#BeeS@E?HRZNFgjofX8Z0l0YJ*2ZQxsaR!-i+8=sYN z9rE0`;l*dQIURhfZG!lKdzYAs6tnd9? z-s4ki_MY{br&$&i>?Z)0#K3#0)n6c=BR&2!;@8kX>r*q&fGE3Ii>0w#rr;U7qu&~Z z!UpVvp#D8+dj0AA1Z&i}?ERfs8nO`y{avTMPI;M?QYhN-x5aWm-$RY=4M8M08Ki_T zV9sN4jJ+8EA9e^LygBH3Nph%b2&r<%PHctz1uAKmogWCP)9qC_`l;uxNHf2nc&)Rf zzaDDB)^r76;{GQCwQ=J6*LGG<(PWLRkPZ)-e0;kJQ>GJM^*#3R>}nA#?IalxeWK4G z_~5SH0SsJ(g{EBs6?$*Uql^y4H(c1bCedLd)en17m+!S;IKBPOQQC0k_#&l=r^5ZL z{J(ZX1am-Ig!J5iwBq)`54Sm85kFTA;zQ15o*F!kLZD>nV1iP>Pd#J?Ocb<18LlIf z6?2Ot@=hjplM6dJ^yoaVZyd@Qb32}3iMT@Eq-JTy?24I&ANDlb*UeXy17DbQ((C20 zN8Y^0)@#uSpOetihFJ;72D8RQ&V_zAhxb{F==>-tkX`rQU+ z?%^&q_4P`qw(dAV8TcZtcY{TlriahX0C#C@T zn%ZQ)o@K&jc=X!BbruD2l{Q$BMJsO(bIN%X#P2DCI$RSQDpTjv^*?G+6f7oDMaLu# zi1yoc?UQvNDIX$CK4UoG!cQ>c$`db!j z@nSR$?Z6FryTc6Lr%AOc|!Mv-djN+ShQN6_ad=;t-`R}dahb4vkAiBG3eJx^SJxbdz>el zN6?a^Kj7-wJ4FBTQ`Zqt>ubGO5uTw3TL$e#b)f|{h zYrN2)03;ZXfU(|7g3X)Z3 zEq){pQwxkO%&iu()Z!ixy-*$V{;*AW60=xG!@cOh!6CCm9Kmw*;p`N%$o`{EG7H)nO_dmrKtA;)!&SN9VI5a4w0zQ@O!pjV(nV6Uonv+*@z zYJ*F}IZEm;Dt!PFoRvHQWO0cMVUF(6&yYq8I~FnoJVO29av%>;Eil5I)R52F+n&$h zN7uXm7D?m}L(0MGE(~|tGlh72S)mtUS5DgfS=yOq-5y0cH+*=&_Y%${R=Idp zNP^)&D-MnYq80ygEGXsXahGcq;(m2CZ1cDx_BSyFU&B2WYh4=%&`p5;sj)emRlg%H zbWkD;nIDkg9R;9p69k+KbxHL(9)3)vvD$vkp>_}4(20X&TMY@a3@y2 zpB(aHEZxoQxhSN!tS@1&6iogQM8jcx#7m{X^|+)ux~@Z;AfBb$>4= zRI$_XSzZ1Q8t49=I%h+dXw>-KQYC_m-Y{lJv*jMX4GB=OD-zM7EyGaN`Ebb-(v4@MUtc`*p+a%D`Ok#$dKbS0G2HK%Rv@QNjN7n|204nFOU2jY>zXA7h=I#V+KHBT#*p3~%X- zRk|kGKX#Xx8@+w1bZnj;S2;-l#!m!5I_Lvjs5y!m((KlX1^U=Nz;v->;g|P8q4$1C zLaD?N8J(RUtKIfsy}BErnx#R?u6=7RQv2zf#^Wrda%Jg>Tz+q;lgw#CSj=B{+#3*m zAS{6uIAn87mJw_#J#p?kcE7l7>EWQ%tp`(FYSf1XiU82t=%w7U$KCX(fxC?x68H1c zkgRUTaAwvcNIPa_j1M9Y6VJ{{68yapE;yE+N9a?3dHR&-G&l%VXcC&H1v@?&S8BD3 zI=e-pU$e+28d?KmX4jEXBt?ipzHnX$lGgJ>iKi}Q0kvX+<+Dv)V_HLudwx>*N%nrE z+eK|-wE$nbC!w1cw}fj2;mb|{#2%%7sT5&Pk)nozmP;x3E!vR0Ic*LhiMhT;u-7|# zgC${dA=N@h#@Zb1a|j#nO>Doq^pHwtoSK;HG;y|~pFh*_pv8!-`N18VJrs6adNAK7^k)St3&2q{IPNnNd{dRGM$ zre2@H-m)6qyR3i1JAyAG`9W_NuXWpw@rSRyp9>T|inbZXMaO)rsNqLL$3$L8S?1#A zvG&nh#N`MYy8ErM<`9l}m_W6$O>I0`KR&SeBVL><%4AD?ui(jO&v4pRhaW5Qu`Ht5 z^z^s+trzIl8NEMvT?qO@@q<=2l955LQ?)B%5MKW?X>Y0}O#X?D-@1UzqFw2{L5&A~ zysbCJY(Qh`8IA0_;Y-6M_d+@JWQMJh^A?SHg(ALGKR+Hoh(B84w0r-4k-1LP7d-_b z|B4}>I+ncpR)u!LsOn6E?&RW)yexwtq;F_t_5?nEkme)j(^qRv;$V2QkuxcrG)y_Q}TDY@Ig%TCe zR*-qNaOdZEYXm=4*hb8d0Lm<%S?bMdM(;CRqUyTWBx2U}4$9fu5;aab&+#T74HsK6 zg!7nPT%-9};XT^8xX5le75*i!#1Uo91BJ>L7UJA?b&g+t6glrXeR_5J+~WP=z%z}{ zzE8J#0wtD*(QUuEX+e^Q3(z0$*_kNoxsXIC$US|(Eg>Cex;5f>iS^JV}e z*l#Z3_gkLR8n1p{w#XhQBq>PXaXO*(6bM5^{CF-$g}2<|Cz8qDEzmMu!UF0H0~>Fq zidNx^18fA}q5_Eb6${a)G{TuzR)lFdm$3E)d)5Gbd9;Fsgj>LAheyD1JNH2*tMktt z)+ZySzS0csEaWgvo#0;jgQWAQj(AC}{%oD@^>RjsogZx4J|_4q8s&I!au`S+H3zd% z*E+*^Wjt8gl4P)Vf8rV47E7)Y)RhP24!qhn-=0I2`WX;rdl)7AWLuHTwv;c8l#!*Y zl@MnaIe&Rqbd8bmg;^N=l@~|(^6EJHhb6kNc`PjDnTy`o5q>+2rgEM;N4Moze=Y-6 zNlH@x65hZ@QhinQ^G-J8(4197$6%}Qu56il{cV27`Q25H%)z(!^7!flHMlM6?4JyJ zo3*3fI^ISkfQX{q0PQG#8u1yQ{eQ2;irCoLYLCLgQ zLOHeSy(z}GzE3*}&Htd=vn6qwJQH<_&2f9JaW2|XkLxi@n)gXWui=G2bF9%^|A`?g zs0?>s*Y`j1ErylR-0>T<2Y>Sor}m+Tm?yz=&l48{!@Nj2E-%1DZdt00D(e|K}-<|yF` zlRe0Zd2l}&>2mBDY=li~d`_4*$YngBSi<)>CRF}laM<{9|*Kl~?}%*UVKBW{mD*u4z(=Re|}f2sHJ)TnT}E1bcIXr9qvK9kW% zDX;(S_{MrII9OV{+w0xyRi%|itQu;L)Q2m$$^x>{`&Zet2kib>o$mF?tv?lUuun7Y zmE9@#YG7D;jn4()xsCH|53dJv8Q%{UcxwJ*ZC1f{b>fEY?zWX0m6#E$)m)e9myceo zCPRhA8;i>Q<&O4+wyO{M3C^TzRH#SD$G&SBaO<9M$0Orn+}YX6Ik(;v#6soWrmMco zX&uU|XMC_xuB|6$zB*(He~XjZmdo*SN>hTnI)c@#cM z4CP$-dSp0w;&|^*a()c|e*Ht$VIrRCa>%NHw_i6{&D57HJiTQlu=?{Hzp~T3sLR;LDb!q%fo^XT5*$$#iL`$caJsv8|tR z-=|dkPXwZetC-P5+j?03y8fS9N5-r?ch-h>G4jb0hNG5iemvSj`e9^yw@ z(i|DC?AD>P?)e8gCo+v=DPPV*2n+oNa{h53=WUU*{LXgzFAvWt*hMxt<8?#1ztsP) z!}OQ(AL!MoW5MPZsnXjIReFD4{`oii_s;*%BSHUPFkJoj&pP~^a#A9qVr<-L2lv{4 z_;c51pf;x_j!FMkq<{C#X(G9Hxn^mGUt9ifA4(Ymj>faXYkydS!-MuuS=C{lzIxiC z^VM(R{=08((M3m7{a2L#L6iO~%Kt^x|Erb%?r{CGN&h|Iza;TbJ9T*O{%b4$H{1XJ dbM5S5q#mp7ReofQu{{c;H@-6@X literal 0 HcmV?d00001 diff --git a/paper/references.bib b/paper/references.bib new file mode 100644 index 0000000..423b8e7 --- /dev/null +++ b/paper/references.bib @@ -0,0 +1,51 @@ +@article{prem2017, + title = {Projecting social contact matrices in 152 countries using contact surveys and demographic data}, + volume = {13}, + issn = {1553-7358}, + url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005697}, + doi = {10.1371/journal.pcbi.1005697}, + language = {en}, + number = {9}, + urldate = {2024-05-03}, + journal = {PLOS Computational Biology}, + author = {Prem, Kiesha and Cook, Alex R. and Jit, Mark}, + month = sep, + year = {2017}, + keywords = {Infectious disease epidemiology, Schools, South Africa, Age groups, Asia, Bolivia, Germany, Home education}, + pages = {e1005697}, +} + +@article{prem2021, + title = {Projecting contact matrices in 177 geographical regions: {An} update and comparison with empirical data for the {COVID}-19 era}, + volume = {17}, + issn = {1553-7358}, + shorttitle = {Projecting contact matrices in 177 geographical regions}, + url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1009098}, + doi = {10.1371/journal.pcbi.1009098}, + language = {en}, + number = {7}, + urldate = {2024-05-03}, + journal = {PLOS Computational Biology}, + author = {Prem, Kiesha and Zandvoort, Kevin van and Klepac, Petra and Eggo, Rosalind M. and Davies, Nicholas G. and Group, Centre for the Mathematical Modelling of Infectious Diseases COVID-19 Working and Cook, Alex R. and Jit, Mark}, + month = jul, + year = {2021}, + keywords = {Infectious disease epidemiology, COVID 19, Geographical regions, Age groups, Pandemics, Schools, Urban geography, Surveys}, + pages = {e1009098}, +} + +@article{mossong2008, + title = {Social contacts and mixing patterns relevant to the spread of infectious diseases}, + volume = {5}, + issn = {1549-1676}, + url = {https://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.0050074}, + doi = {10.1371/journal.pmed.0050074}, + language = {en}, + number = {3}, + urldate = {2024-05-03}, + journal = {PLOS Medicine}, + author = {Mossong, Joël and Hens, Niel and Jit, Mark and Beutels, Philippe and Auranen, Kari and Mikolajczyk, Rafael and Massari, Marco and Salmaso, Stefania and Tomba, Gianpaolo Scalia and Wallinga, Jacco and Heijne, Janneke and Sadkowska-Todys, Malgorzata and Rosinska, Magdalena and Edmunds, W. John}, + month = mar, + year = {2008}, + keywords = {Infectious disease epidemiology, Respiratory infections, Age groups, Epidemiology, Europe, Mathematical models, Surveys, Infectious diseases}, + pages = {e74}, +} From 3211e093528eb3171542faed607fddce0a4b58ec Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 30 May 2024 12:01:21 +0800 Subject: [PATCH 03/39] Added ORCID numbers --- paper/paper.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index cb2a9ee..2f4d0a3 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -6,16 +6,16 @@ authors: orcid: 0000-0003-1460-8722 - affiliation: 1,2 name: Nick Golding - orcid: + orcid: 0000-0001-8916-5570 - affiliation: 1,3 name: Aarathy Babu orcid: - affiliation: 4 name: Michael Lydeamore - orcid: + orcid: 0000-0001-6515-827X - affiliation: 1,3 name: Chitra Saraswati - orcid: + orcid: 0000-0002-8159-0414 date: "03 May 2024" output: html_document: From 3be686918e7afc01c70418c898d2befa9cae6e94 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Mon, 10 Jun 2024 14:39:39 +0800 Subject: [PATCH 04/39] Partial dependency plots, test --- .gitignore | 3 ++- paper/paper.Rmd | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 2b1b420..30d3997 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ README_cache .pre-commit-config.yaml tests/README.md paper/*.html -paper/*.pdf \ No newline at end of file +paper/*.pdf +chitra/ \ No newline at end of file diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 2f4d0a3..d928958 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -37,7 +37,7 @@ affiliations: name: Monash University --- -```{r} +```{r Document Setup} #| label: setup #| echo: false #| message: false @@ -78,7 +78,7 @@ As an example, let us generate a contact matrix for a local area using POLYMOD d Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. -```{r} +```{r load conmat} #| label: load-conmat library(conmat) perth <- abs_age_lga("Perth (C)") @@ -87,7 +87,7 @@ perth We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: -```{r} +```{r extrapolate polymod} #| label: extrapolate-polymod #| echo: true perth_contact <- extrapolate_polymod(population = perth) @@ -96,7 +96,7 @@ perth_contact We can plot this with `autoplot` -```{r} +```{r autoplot contacts} #| label: autoplot-contacts autoplot(perth_contact) ``` @@ -106,12 +106,16 @@ autoplot(perth_contact) Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. The model is a poisson generalised additive model (gam), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. -The six key features of the relationship are shown in the figure below +The six terms are + +The six key features of the relationship are shown in the figure below. ```{r} # use DHARMA to show a partial dep plot of the six main terms ``` +[#TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] + ## Model interfaces We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ From 1b468435ab66389ae54e1080cf09c8f2db42ae50 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 13 Jun 2024 08:57:26 +0800 Subject: [PATCH 05/39] Improved draft --- paper/paper.Rmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index d928958..9dd23de 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -74,9 +74,9 @@ The `conmat` package was created to fill a specific need for creating synthetic # Example -As an example, let us generate a contact matrix for a local area using POLYMOD data. +As an example, let us generate a contact matrix for a local area using a model fitted from the POLYMOD data. -Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. +Suppose we want to generate a contact matrix for the City of Perth in Australia. We can get the population data for Perth from the helper function `abs_age_lga`: ```{r load conmat} #| label: load-conmat @@ -85,7 +85,7 @@ perth <- abs_age_lga("Perth (C)") perth ``` -We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: +We can generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. ```{r extrapolate polymod} #| label: extrapolate-polymod @@ -94,7 +94,7 @@ perth_contact <- extrapolate_polymod(population = perth) perth_contact ``` -We can plot this with `autoplot` +We can plot the resulting contact matrix with `autoplot`: ```{r autoplot contacts} #| label: autoplot-contacts @@ -104,7 +104,7 @@ autoplot(perth_contact) # Implementation Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. -The model is a poisson generalised additive model (gam), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. +The model is a Poisson generalised additive model (GAM), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. The six terms are From faa17446bf5a0645943b8085fa0ae8f8603410c0 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 13 Jun 2024 09:11:06 +0800 Subject: [PATCH 06/39] Improved example section --- paper/paper.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 9dd23de..77f8875 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -1,5 +1,5 @@ --- -title: 'conmat: generate synthetic contact matrices for a given age population' +title: 'conmat: generate synthetic contact matrices for a given age-stratified population' authors: - affiliation: 1 name: Nicholas Tierney @@ -74,9 +74,9 @@ The `conmat` package was created to fill a specific need for creating synthetic # Example -As an example, let us generate a contact matrix for a local area using a model fitted from the POLYMOD data. +As an example, let us generate a contact matrix for a local government area within Australia, using a model fitted from the POLYMOD data. -Suppose we want to generate a contact matrix for the City of Perth in Australia. We can get the population data for Perth from the helper function `abs_age_lga`: +Suppose we want to generate a contact matrix for the City of Perth. We can get the age-stratified population data for Perth from the helper function `abs_age_lga`: ```{r load conmat} #| label: load-conmat @@ -94,7 +94,7 @@ perth_contact <- extrapolate_polymod(population = perth) perth_contact ``` -We can plot the resulting contact matrix with `autoplot`: +We can plot the resulting contact matrix for Perth with `autoplot`: ```{r autoplot contacts} #| label: autoplot-contacts From b6c25337ff559ace193886107c615933c77ad8b1 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 13 Jun 2024 09:28:30 +0800 Subject: [PATCH 07/39] Updated implementation section --- paper/paper.Rmd | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 77f8875..4779dc6 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -103,7 +103,8 @@ autoplot(perth_contact) # Implementation -Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. +`conmat` was built to predict at four settings: work, school, home, and other. +The model is built to predict four separate models, one for each setting. [ #TODO a better way of saying the sentence prior? Predict four separate matrices?] The model is a Poisson generalised additive model (GAM), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. The six terms are @@ -114,7 +115,9 @@ The six key features of the relationship are shown in the figure below. # use DHARMA to show a partial dep plot of the six main terms ``` -[#TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] +Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average?] + +[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ## Model interfaces From d1dd0d4f8e9a26a8c64e403f40b47dba2a18aa18 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 13 Jun 2024 17:00:36 +0800 Subject: [PATCH 08/39] Updated paper --- paper/paper.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 4779dc6..89355cd 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -56,9 +56,9 @@ options(tinytex.clean = FALSE) # Summary -Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable, and how disease spread will unfold facilitates public health decision-making. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. +Epidemiologists and public policy makers need to understand the dynamics of infectious disease transmission in a population. Identifying vulnerable groups and predicting disease transmission dynamics are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how diseases spread. -We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another, as well as the setting of contact. For example, we might learn from a contact survey that homes have higher contact with 25-50 year olds and with 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. These surveys exist for a variety of countries, for example, @mossong2008 the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland [@mossong2008]. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. From fb5153e277f1bd5ebf0fb83d7b6a70fffb2c617c Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 20 Jun 2024 08:53:08 +0800 Subject: [PATCH 09/39] Updated paper introduction --- paper/paper.Rmd | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 89355cd..c9b47ff 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -37,7 +37,7 @@ affiliations: name: Monash University --- -```{r Document Setup} +```{r setup} #| label: setup #| echo: false #| message: false @@ -56,11 +56,13 @@ options(tinytex.clean = FALSE) # Summary -Epidemiologists and public policy makers need to understand the dynamics of infectious disease transmission in a population. Identifying vulnerable groups and predicting disease transmission dynamics are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how diseases spread. +#TODO - A better first sentence that encapsulates conmat use? +Understanding the dynamics of infectious disease transmission in a population is an important task (?) for epidemiologists and public policy makers. +Identifying vulnerable groups and predicting disease transmission (?)dynamics are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how diseases spread. -We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These surveys exist for a variety of countries, for example, @mossong2008 the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland [@mossong2008]. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +These social contact surveys exist for a few countries. As an example, @mossong2008 the "POLYMOD" study covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in different countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regons. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. @@ -78,7 +80,7 @@ As an example, let us generate a contact matrix for a local government area with Suppose we want to generate a contact matrix for the City of Perth. We can get the age-stratified population data for Perth from the helper function `abs_age_lga`: -```{r load conmat} +```{r} #| label: load-conmat library(conmat) perth <- abs_age_lga("Perth (C)") @@ -87,7 +89,7 @@ perth We can generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. -```{r extrapolate polymod} +```{r} #| label: extrapolate-polymod #| echo: true perth_contact <- extrapolate_polymod(population = perth) @@ -96,7 +98,7 @@ perth_contact We can plot the resulting contact matrix for Perth with `autoplot`: -```{r autoplot contacts} +```{r} #| label: autoplot-contacts autoplot(perth_contact) ``` @@ -119,6 +121,8 @@ Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted nu [ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. +The results are surveys that can be found in the syncomat package, which can be seen at: https://idem-lab + ## Model interfaces We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ From f5e4fedbcedf8d3cdbfb837f5e85e4a4bba52822 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Thu, 20 Jun 2024 09:23:57 +0800 Subject: [PATCH 10/39] Updated paper intro --- paper/paper.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index c9b47ff..486d136 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -62,9 +62,9 @@ Identifying vulnerable groups and predicting disease transmission (?)dynamics ar We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These social contact surveys exist for a few countries. As an example, @mossong2008 the "POLYMOD" study covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in different countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in other countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A popular approach by @prem2017 projected from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regons. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. +However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regions. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: From d024b0df6e3e50ce0f51e77ccfe76c0fb7a6105b Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Mon, 1 Jul 2024 09:32:03 +0800 Subject: [PATCH 11/39] Updated introduction --- paper/paper.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 486d136..fc7a2b4 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -62,9 +62,9 @@ Identifying vulnerable groups and predicting disease transmission (?)dynamics ar We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in other countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A popular approach by @prem2017 projected from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in other countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical contact survey data. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regions. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; they covered a large area, such as "urban" or "rural" for a given country. This is disadvantegous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and user-defined inputs. The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: From b5f3937475a1cf2116a97aadcc8bfd2ff5be0e29 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Mon, 1 Jul 2024 10:33:28 +0800 Subject: [PATCH 12/39] Updated implementation section --- paper/paper.Rmd | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index fc7a2b4..3585cfb 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -54,6 +54,8 @@ knitr::opts_chunk$set(comment = "#>", options(tinytex.clean = FALSE) ``` +[comment]: Revised, edited text below the original text. + # Summary #TODO - A better first sentence that encapsulates conmat use? @@ -105,11 +107,11 @@ autoplot(perth_contact) # Implementation +[ #NOTE revised text of above paragraph ] `conmat` was built to predict at four settings: work, school, home, and other. -The model is built to predict four separate models, one for each setting. [ #TODO a better way of saying the sentence prior? Predict four separate matrices?] -The model is a Poisson generalised additive model (GAM), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. +The model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. The model has six (?)covariates/terms to explain six key features of the relationship between ages, and two optional terms for attendance at school or work. The two optional terms are included depending on which setting the model is fitted for. There are four resulting models, with one model fitted for each setting. -The six terms are +The six terms are the `|i-j|`, The six key features of the relationship are shown in the figure below. From 98b66c0fc6e6b2aaa63a628f9a58fc383f002166 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:05:43 +0800 Subject: [PATCH 13/39] Updated "model interface" section --- paper/paper.Rmd | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 3585cfb..8d9c170 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -70,11 +70,14 @@ However, there were major limitations with the methods in @prem2021. First, not The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: -- Input: age and population data, and Output: synthetic contact matrix -- Create next generation matrices (NGMs) -- Apply vaccination reduction to NGMs -- Use NGMs in disease modelling -- Provide tidy Australian survey data from the Australian Bureau of Statistics for use. +The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? ] work commissioned by the Australian government. +We developed methods and software to facilitate the following tasks. + +- Generate, as output, synthetic contact matrices from age-stratfied population data. +- Create next generation matrices (NGMs). +- Apply vaccination reduction to NGMs. +- Use NGMs in disease modelling. +- Provide tidied population data from the Australian Bureau of Statistics. # Example @@ -107,40 +110,39 @@ autoplot(perth_contact) # Implementation -[ #NOTE revised text of above paragraph ] `conmat` was built to predict at four settings: work, school, home, and other. The model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. The model has six (?)covariates/terms to explain six key features of the relationship between ages, and two optional terms for attendance at school or work. The two optional terms are included depending on which setting the model is fitted for. There are four resulting models, with one model fitted for each setting. The six terms are the `|i-j|`, -The six key features of the relationship are shown in the figure below. +The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. ```{r} # use DHARMA to show a partial dep plot of the six main terms ``` -Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average?] +Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? ] -[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. +[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] The results are surveys that can be found in the syncomat package, which can be seen at: https://idem-lab ## Model interfaces -We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ +We provide functions for model fitting at various use cases. Further detail for each of the following functions can be seen at: https://idem-lab.github.io/conmat/dev/ * `fit_single_contact_model()` - * Using contact survey data to fit a GAM model, adding provided target population information to provide population size information. Recommended for when you want to fit to just a single setting, for which you might want to provide your own contact survey data. + * Fits a generalised additive model (GAM) using contact survey data and population size information. This function is recommended for when you want to fit a model to only one setting, for which you might want to provide your own contact survey data. * `predict_contacts()` - * This takes a fitted model from `fit_single_contact_model`, and then predicts to a provided population + * This takes a fitted model from `fit_single_contact_model()` and predicts [ #TODO what is predicted? ] to a provided (?) population structure. * `fit_setting_contacts()` - * Fits the `fit_single_contact_model()` to each setting. Recommended for when you have multiple settings to fit. Returns a list of fitted models. + * Fits the `fit_single_contact_model()` to each setting. This function is useful for when you have multiple settings to fit. Returns a list of fitted models. * `predict_setting_contacts()` - * Takes a list of fitted models from `fit_setting_contacts()` and predicts to a given population for each setting. + * Takes a list of fitted models from `fit_setting_contacts()` and predicts [ #TODO what is predicted? ] to a given population for each setting. * `estimate_setting_contacts()` * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. @@ -148,6 +150,8 @@ We provide multiple levels for the user to interact with for model fitting, furt * `extrapolate_polymod()` * Takes population information and projects pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. +[ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] + # Future Work * Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. From 5d9633039af5464050e4d77dbb375528a4b7aa79 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:09:19 +0800 Subject: [PATCH 14/39] Updated conclusion section --- paper/paper.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 8d9c170..55d10d3 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -152,7 +152,7 @@ We provide functions for model fitting at various use cases. Further detail for [ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] -# Future Work +# Conclusions and Future Direction * Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants From 5425c356565510afc122d6ee258af80f11337b38 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:19:27 +0800 Subject: [PATCH 15/39] Added an abstract --- paper/paper.Rmd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 55d10d3..25b7324 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -56,7 +56,13 @@ options(tinytex.clean = FALSE) [comment]: Revised, edited text below the original text. -# Summary +# Abstract + +A common issue + +This article introduces `conmat`, an R package which generates synthetic contact matrices. + +# Motivation / Introduction #TODO - A better first sentence that encapsulates conmat use? Understanding the dynamics of infectious disease transmission in a population is an important task (?) for epidemiologists and public policy makers. From 161a633317b1a43de131fbcff3dbb45b10fd1a6a Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:26:34 +0800 Subject: [PATCH 16/39] Updated abstract --- paper/paper.Rmd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 25b7324..625ffff 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -58,10 +58,18 @@ options(tinytex.clean = FALSE) # Abstract -A common issue - This article introduces `conmat`, an R package which generates synthetic contact matrices. +There are currently few options to generate synthetic contact matrices with existing contact surveys. +Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (some countries are not included). + +A higher level of granularity however is sometimes required to make public health decisions for a given population. + +[ What's different and useful about conmat? ] + +[ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. sub-national level) in Australia. + + # Motivation / Introduction #TODO - A better first sentence that encapsulates conmat use? @@ -72,9 +80,9 @@ We can measure social contact through social contact surveys, where people descr These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in other countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical contact survey data. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; they covered a large area, such as "urban" or "rural" for a given country. This is disadvantegous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and user-defined inputs. +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; they covered a large area, such as "urban" or "rural" for a given country. This is disadvantegous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and use with user-defined inputs. -The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: +[REVISED PARAGRAPH BELOW] The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? ] work commissioned by the Australian government. We developed methods and software to facilitate the following tasks. From 026d43b2bedbb79416fcc2942e0ea60f2be5b005 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:30:15 +0800 Subject: [PATCH 17/39] Updated abstract --- paper/paper.Rmd | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 625ffff..8670c09 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -54,8 +54,6 @@ knitr::opts_chunk$set(comment = "#>", options(tinytex.clean = FALSE) ``` -[comment]: Revised, edited text below the original text. - # Abstract This article introduces `conmat`, an R package which generates synthetic contact matrices. @@ -63,9 +61,10 @@ This article introduces `conmat`, an R package which generates synthetic contact There are currently few options to generate synthetic contact matrices with existing contact surveys. Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (some countries are not included). +[ What's different and useful about conmat? ] A higher level of granularity however is sometimes required to make public health decisions for a given population. -[ What's different and useful about conmat? ] +`conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. [ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. sub-national level) in Australia. From 9192d81536e365b252b896dd8161ea5f2f72d25d Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:32:55 +0800 Subject: [PATCH 18/39] Updated conlcusion --- paper/paper.Rmd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 8670c09..fd72150 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -165,8 +165,9 @@ We provide functions for model fitting at various use cases. Further detail for [ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] -# Conclusions and Future Direction +# Conclusions and future directions +Our future direction for `conmat` includes adding the following functionalities: * Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants * Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset @@ -176,4 +177,6 @@ We provide functions for model fitting at various use cases. Further detail for * Move Australian centric data into its own package * Add documentation on specifying your own GAM model and using this workflow +[ #TODO Change the following sentence, copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. + # References From f35cb4a0db72c6c36a9188f27aea4d685707c0b4 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:41:58 +0800 Subject: [PATCH 19/39] Updated syncomat implementation example --- paper/paper.Rmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index fd72150..ec3d31e 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -138,7 +138,9 @@ Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted nu [ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] -The results are surveys that can be found in the syncomat package, which can be seen at: https://idem-lab +One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. +We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. +The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). ## Model interfaces From 4f8e707ef0bca6a288d2166c27b682be6e12019d Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 16 Jul 2024 15:47:44 +0800 Subject: [PATCH 20/39] Updated implementation section --- paper/paper.Rmd | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index ec3d31e..8449b7d 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -121,23 +121,24 @@ We can plot the resulting contact matrix for Perth with `autoplot`: autoplot(perth_contact) ``` +[ #TODO Is this also a heat map? ] + # Implementation `conmat` was built to predict at four settings: work, school, home, and other. The model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. The model has six (?)covariates/terms to explain six key features of the relationship between ages, and two optional terms for attendance at school or work. The two optional terms are included depending on which setting the model is fitted for. There are four resulting models, with one model fitted for each setting. -The six terms are the `|i-j|`, +Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? ] + +The six terms are $|i-j|$, ${|i-j|}^{2}$, $i + j$, $i \times j$, $\text{max}(i, j)$ and $\text{min}(i, j)$. -The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. +The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. +[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] ```{r} -# use DHARMA to show a partial dep plot of the six main terms +# Show partial dep plot of the six main terms ``` -Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? ] - -[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] - One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). From 3137c161780b9975c0e6232db45e8e2998e5954a Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Wed, 17 Jul 2024 16:28:18 +0800 Subject: [PATCH 21/39] Updated abstract --- paper/paper.Rmd | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 8449b7d..86de022 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -58,16 +58,17 @@ options(tinytex.clean = FALSE) This article introduces `conmat`, an R package which generates synthetic contact matrices. -There are currently few options to generate synthetic contact matrices with existing contact surveys. -Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (some countries are not included). +There are currently few options for a user to generate their own synthetic contact matrices. +Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (in other words, some countries are not included). [ What's different and useful about conmat? ] +Users might have their own contact survey data that they would like to generate synthetic contact matrices from. +Perhaps the population demography is different, or the contact rates varying. A higher level of granularity however is sometimes required to make public health decisions for a given population. `conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. -[ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. sub-national level) in Australia. - +[ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. at the sub-national level) in Australia. # Motivation / Introduction From e8e71792385557dc105593e9fa93ecf291d76f8b Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Wed, 17 Jul 2024 16:34:24 +0800 Subject: [PATCH 22/39] Updated motivation / introduction --- paper/paper.Rmd | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 86de022..cc030dd 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -73,14 +73,16 @@ A higher level of granularity however is sometimes required to make public healt # Motivation / Introduction #TODO - A better first sentence that encapsulates conmat use? -Understanding the dynamics of infectious disease transmission in a population is an important task (?) for epidemiologists and public policy makers. -Identifying vulnerable groups and predicting disease transmission (?)dynamics are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how diseases spread. +Understanding the dynamics of infectious disease transmission is an important task (?) for epidemiologists and public policy makers. +Identifying vulnerable groups and predicting disease transmission (?)dynamics / how diseases spread are essential for informed public health decision-making. +Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to (?)look at/estimate contact rates in other countries that have not been measured? We can use this existing data to help us project to countries or places that do not have empirical contact survey data. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us project / predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +[ #TODO is project or predict a better word? Does it matter? ] -However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; they covered a large area, such as "urban" or "rural" for a given country. This is disadvantegous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and use with user-defined inputs. +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; in other words, they covered areas that are too large, such as the "urban" or "rural" parts of a country. This is disadvantageous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and easy modification with user-defined inputs. [REVISED PARAGRAPH BELOW] The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: @@ -106,7 +108,7 @@ perth <- abs_age_lga("Perth (C)") perth ``` -We can generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. +We can then generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. ```{r} #| label: extrapolate-polymod @@ -122,7 +124,6 @@ We can plot the resulting contact matrix for Perth with `autoplot`: autoplot(perth_contact) ``` -[ #TODO Is this also a heat map? ] # Implementation From f7ef7917377ed2ede61055818108273d1c52aa5e Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Fri, 19 Jul 2024 16:08:44 +0800 Subject: [PATCH 23/39] Updated for JOSS format --- paper/paper.Rmd | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index cc030dd..09d22e8 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -54,7 +54,9 @@ knitr::opts_chunk$set(comment = "#>", options(tinytex.clean = FALSE) ``` -# Abstract +# Summary + +A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. This article introduces `conmat`, an R package which generates synthetic contact matrices. @@ -70,7 +72,9 @@ A higher level of granularity however is sometimes required to make public healt [ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. at the sub-national level) in Australia. -# Motivation / Introduction +# Statement of need + +A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. #TODO - A better first sentence that encapsulates conmat use? Understanding the dynamics of infectious disease transmission is an important task (?) for epidemiologists and public policy makers. From dd4afe9b829776b80b6c4248fece7c20abf52c03 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 23 Jul 2024 15:09:09 +0800 Subject: [PATCH 24/39] Updated explanation on partial dependency plots, and how exponentiating them after adding them up together provides more 'realistic' numbers --- paper/paper.Rmd | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 09d22e8..2eda719 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -145,6 +145,21 @@ The six key features of the relationship between the age groups, represented by # Show partial dep plot of the six main terms ``` +Note that these partial dependency plots are on the log scale. +When the six terms are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: + +```{r} +# Show combined partial dep plot (i.e. sum of the partial dependencies for all six terms) in each setting: home, school, work and other +``` + +In other words, the six terms above provide patterns that are useful in modelling the different settings, +and correspond with real-life situations of how contact would look like. +In the home setting for example, [ #TODO describe how children interact with parents and elderly generation, grandparents ]. +When the terms for school and work are added, these terms also provide patterns that correspond with real-life situations. +https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html +In the school setting, children tend to contact other children in the same age groups as them. +In the work setting, there are no contacts with children under the age of ten and minimal contact with adults beyond retirement age. + One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). From ec1f502e9e3218b9f217bf85cd68dfed1a81e7c5 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 23 Jul 2024 15:23:52 +0800 Subject: [PATCH 25/39] Improved explanation for model fitting --- paper/paper.Rmd | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 2eda719..34d18fb 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -132,11 +132,21 @@ autoplot(perth_contact) # Implementation `conmat` was built to predict at four settings: work, school, home, and other. -The model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. The model has six (?)covariates/terms to explain six key features of the relationship between ages, and two optional terms for attendance at school or work. The two optional terms are included depending on which setting the model is fitted for. There are four resulting models, with one model fitted for each setting. +One model is fitted for each setting. +Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +The model has six (?)covariates/terms to explain six key features of the relationship between ages, +and two optional terms for attendance at school or work. +The two optional terms are included depending on which setting the model is fitted for. Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? ] -The six terms are $|i-j|$, ${|i-j|}^{2}$, $i + j$, $i \times j$, $\text{max}(i, j)$ and $\text{min}(i, j)$. +The six terms are +$|i-j|$, +${|i-j|}^{2}$, +$i + j$, +$i \times j$, +$\text{max}(i, j)$ and +$\text{min}(i, j)$. The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. [ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] From 09d2c5dccd3012edacd2706088d41e5d8ff7f936 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Tue, 23 Jul 2024 15:24:57 +0800 Subject: [PATCH 26/39] improved wording --- paper/paper.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 34d18fb..94b23e7 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -176,10 +176,10 @@ The resulting synthetic contact matrices, and a replicable / extensible (?) anal ## Model interfaces -We provide functions for model fitting at various use cases. Further detail for each of the following functions can be seen at: https://idem-lab.github.io/conmat/dev/ +We provide functions for model fitting at various use cases. Further detail for each of the following functions are available at: https://idem-lab.github.io/conmat/dev/ * `fit_single_contact_model()` - * Fits a generalised additive model (GAM) using contact survey data and population size information. This function is recommended for when you want to fit a model to only one setting, for which you might want to provide your own contact survey data. + * Fits a generalised additive model (GAM) using contact survey data and population size information. This function is recommended when you want to fit a model to only one setting, for which you might want to provide your own contact survey data. * `predict_contacts()` From cf0b8dcffdedc995878453c88cc0fd03304ed2e6 Mon Sep 17 00:00:00 2001 From: "chitra.m.saraswati@gmail.com" Date: Wed, 24 Jul 2024 11:49:55 +0800 Subject: [PATCH 27/39] Updated intro and conclusion; improved wording --- paper/paper.Rmd | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 94b23e7..2067f51 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -56,7 +56,7 @@ options(tinytex.clean = FALSE) # Summary -A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. +[ A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. ] This article introduces `conmat`, an R package which generates synthetic contact matrices. @@ -70,11 +70,12 @@ A higher level of granularity however is sometimes required to make public healt `conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. -[ What else is covered in this paper? ] The implemented methods are tested and an example of its use is provided for a local government area (i.e. at the sub-national level) in Australia. +[ What else is covered in this paper? ] An example use-case for `conmat` is provided for a local government area (i.e. at the sub-national level) in Australia. +Also provided is an analysis pipeline to support conmat, [`syncomat`](https://github.com/idem-lab/syncomat), which generates synthetic contact matrices for 200 countries. # Statement of need -A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. +[ A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. ] #TODO - A better first sentence that encapsulates conmat use? Understanding the dynamics of infectious disease transmission is an important task (?) for epidemiologists and public policy makers. @@ -211,6 +212,6 @@ Our future direction for `conmat` includes adding the following functionalities: * Move Australian centric data into its own package * Add documentation on specifying your own GAM model and using this workflow -[ #TODO Change the following sentence, copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. +[ #TODO Change concluding sentence. The following is copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. # References From 216d9dc7c7913f14b3c59efec6545342d3326f0e Mon Sep 17 00:00:00 2001 From: njtierney Date: Thu, 8 Aug 2024 09:38:20 +1000 Subject: [PATCH 28/39] adding some notes from review --- paper/paper.Rmd | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 2067f51..dbcb3bf 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -60,38 +60,38 @@ options(tinytex.clean = FALSE) This article introduces `conmat`, an R package which generates synthetic contact matrices. -There are currently few options for a user to generate their own synthetic contact matrices. -Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (in other words, some countries are not included). +There are currently few options for a user to generate their own synthetic contact matrices. [TODO add references/examples - e.g., socialmixr]. +Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and not all areas of interest (countries) are included. [ What's different and useful about conmat? ] -Users might have their own contact survey data that they would like to generate synthetic contact matrices from. -Perhaps the population demography is different, or the contact rates varying. -A higher level of granularity however is sometimes required to make public health decisions for a given population. -`conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. +Current interfaces to contact matrices are typically fixed to a given country. This means there aren't clear options for retrieving contact matrices for areas of different sizes. This is important as not all public health decisions are made at country levels - they might need to be made for specific smaller areas, such as cities and suburbs. Perhaps a smaller suburb within a country, or perhaps several countries all together. The conmat software allows users to provide their own age population data and combine this with information from an existing contact survey, such as POLYMOD (cite polymod). The software exposes model fitting and prediction separately to the user. This means users can generate synthetic contact matrices for any region they have age population information for. + +[ What else is covered in this paper? ] -[ What else is covered in this paper? ] An example use-case for `conmat` is provided for a local government area (i.e. at the sub-national level) in Australia. -Also provided is an analysis pipeline to support conmat, [`syncomat`](https://github.com/idem-lab/syncomat), which generates synthetic contact matrices for 200 countries. +We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. # Statement of need [ A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. ] #TODO - A better first sentence that encapsulates conmat use? -Understanding the dynamics of infectious disease transmission is an important task (?) for epidemiologists and public policy makers. + +Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can uses these models to make decisions to keep a population safe and healthy. + Identifying vulnerable groups and predicting disease transmission (?)dynamics / how diseases spread are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us project / predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -[ #TODO is project or predict a better word? Does it matter? ] +[ #TODO is project or predict a better word? Does it matter? ] (decision - use *predict*) However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; in other words, they covered areas that are too large, such as the "urban" or "rural" parts of a country. This is disadvantageous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and easy modification with user-defined inputs. [REVISED PARAGRAPH BELOW] The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: -The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? ] work commissioned by the Australian government. +The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? note: @MikeLydeamore will reference the official government report] work commissioned by the Australian government. We developed methods and software to facilitate the following tasks. - Generate, as output, synthetic contact matrices from age-stratfied population data. @@ -135,13 +135,13 @@ autoplot(perth_contact) `conmat` was built to predict at four settings: work, school, home, and other. One model is fitted for each setting. Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. -The model has six (?)covariates/terms to explain six key features of the relationship between ages, -and two optional terms for attendance at school or work. -The two optional terms are included depending on which setting the model is fitted for. +The model has six covariates to explain six key features of the relationship between ages, +and two optional covariates for attendance at school or work. +The two optional covariates are included depending on which setting the model is fitted for. -Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? ] +Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? note: currently going with predicted] -The six terms are +The six covariates are $|i-j|$, ${|i-j|}^{2}$, $i + j$, @@ -149,24 +149,24 @@ $i \times j$, $\text{max}(i, j)$ and $\text{min}(i, j)$. -The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. +The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. [ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] ```{r} -# Show partial dep plot of the six main terms +# Show partial dep plot of the six main covariates ``` Note that these partial dependency plots are on the log scale. -When the six terms are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: +When the six covariates are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: ```{r} -# Show combined partial dep plot (i.e. sum of the partial dependencies for all six terms) in each setting: home, school, work and other +# Show combined partial dep plot (i.e. sum of the partial dependencies for all six covariates) in each setting: home, school, work and other ``` -In other words, the six terms above provide patterns that are useful in modelling the different settings, +In other words, the six covariates above provide patterns that are useful in modelling the different settings, and correspond with real-life situations of how contact would look like. In the home setting for example, [ #TODO describe how children interact with parents and elderly generation, grandparents ]. -When the terms for school and work are added, these terms also provide patterns that correspond with real-life situations. +When the covariates for school and work are added, these covariates also provide patterns that correspond with real-life situations. https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html In the school setting, children tend to contact other children in the same age groups as them. In the work setting, there are no contacts with children under the age of ten and minimal contact with adults beyond retirement age. @@ -215,3 +215,7 @@ Our future direction for `conmat` includes adding the following functionalities: [ #TODO Change concluding sentence. The following is copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. # References + +# Cutting Room Floor + +`conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. From 0e87018db5f9dde424764db1839ad1dbfab64bc6 Mon Sep 17 00:00:00 2001 From: njtierney Date: Thu, 8 Aug 2024 10:11:22 +1000 Subject: [PATCH 29/39] more minor touches --- paper/paper.Rmd | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index dbcb3bf..80733a4 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -58,18 +58,23 @@ options(tinytex.clean = FALSE) [ A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. ] -This article introduces `conmat`, an R package which generates synthetic contact matrices. +This article introduces `conmat`, an R package which generates synthetic contact matrices. Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. -There are currently few options for a user to generate their own synthetic contact matrices. [TODO add references/examples - e.g., socialmixr]. -Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and not all areas of interest (countries) are included. +There are currently only a few options for a user to access synthetic contact matrices [@socialmixr; @prem]. Existing methods describing how to generate synthetic contact matrices from @prem are not designed for replicability, and not all areas of interest (countries) are included. [ What's different and useful about conmat? ] -Current interfaces to contact matrices are typically fixed to a given country. This means there aren't clear options for retrieving contact matrices for areas of different sizes. This is important as not all public health decisions are made at country levels - they might need to be made for specific smaller areas, such as cities and suburbs. Perhaps a smaller suburb within a country, or perhaps several countries all together. The conmat software allows users to provide their own age population data and combine this with information from an existing contact survey, such as POLYMOD (cite polymod). The software exposes model fitting and prediction separately to the user. This means users can generate synthetic contact matrices for any region they have age population information for. +Current interfaces to contact matrices are typically fixed to a given country. There is not a designed interface for someone to access a contact matrix for a sub-region of a country, such as a state, city, or suburb. These sub-region areas are important, as many public health decisions are made at that level. + +The conmat software allows users to generate their own contact matrix, by providing their own age population data and combining this with information from an existing contact survey, such as POLYMOD [@polymod]. The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD, then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. [ What else is covered in this paper? ] -We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. +We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. + +[Need to work out where to fit in `syncomat`] + +It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. # Statement of need @@ -77,15 +82,13 @@ We demonstrate a use-case for `conmat` by creating contact matrices for a state #TODO - A better first sentence that encapsulates conmat use? -Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can uses these models to make decisions to keep a population safe and healthy. +Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can use these models to make decisions to keep a population safe and healthy. -Identifying vulnerable groups and predicting disease transmission (?)dynamics / how diseases spread are essential for informed public health decision-making. -Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. +Identifying vulnerable groups and predicting how diseases spread are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. -We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. +Social contact surveys quantify social contact by asking people to describe the frequency and type of social contact across different settings (home, work, school, other). These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us project / predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. -[ #TODO is project or predict a better word? Does it matter? ] (decision - use *predict*) +These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 predicted contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; in other words, they covered areas that are too large, such as the "urban" or "rural" parts of a country. This is disadvantageous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and easy modification with user-defined inputs. @@ -196,7 +199,7 @@ We provide functions for model fitting at various use cases. Further detail for * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. * `extrapolate_polymod()` - * Takes population information and projects pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. + * Takes population information and predicts pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. [ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] From eba2797b8c0ba19ac98effdaaa58bcb256cb40e1 Mon Sep 17 00:00:00 2001 From: njtierney Date: Thu, 8 Aug 2024 11:14:46 +1000 Subject: [PATCH 30/39] updates from meeting with Mike --- paper/paper.Rmd | 29 ++++++++++++++++++++++++++--- paper/references.bib | 20 ++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 80733a4..05361af 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -205,8 +205,29 @@ We provide functions for model fitting at various use cases. Further detail for # Conclusions and future directions -Our future direction for `conmat` includes adding the following functionalities: -* Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. +The `conmat` software provides a flexible interface to generating synthetic contact matrices using population data and contact surveys. These contact matrices can then be used in infectious disease modelling and surveillance. + +## Strengths + Weaknesses + +The main strength of `conmat` is its interface requiring only age population data to create a synthetic contact matrix. Current approaches provide only a selection of country level contact matrices. This software can predict to arbitrary demography, such as sub-national, or simulated populations. + +We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. + +The model structure (covariates?) provided in conmat was designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as ..., may improve model performance. + +The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. + +## Meaning of the work + +Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. + +This work was used as a key input into several models for COVID19 in Australia and contributed directly to decisions around vaccination policy. + +## Unanswered questions / Future Directions + +Future directions for this software could include: + +* Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants * Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset * Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from POLYMOD data. If we compute a different one for each household size, in the POLYMOD data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. @@ -215,10 +236,12 @@ Our future direction for `conmat` includes adding the following functionalities: * Move Australian centric data into its own package * Add documentation on specifying your own GAM model and using this workflow -[ #TODO Change concluding sentence. The following is copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. +Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. # References +https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling + # Cutting Room Floor `conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. diff --git a/paper/references.bib b/paper/references.bib index 423b8e7..fb6bb90 100644 --- a/paper/references.bib +++ b/paper/references.bib @@ -49,3 +49,23 @@ @article{mossong2008 keywords = {Infectious disease epidemiology, Respiratory infections, Age groups, Epidemiology, Europe, Mathematical models, Surveys, Infectious diseases}, pages = {e74}, } + +@dataset{comix, + author = {Jarvis, Christopher and + Coletti, Pietro and + Backer, Jantien and + Munday, James and + Faes, Christel and + Beutels, Philippe and + Althaus, Christian and + Low, Nicola and + Wallinga, Jacco and + Hens, Niel and + Edmunds, John}, + title = {CoMix data (last round in BE, CH, NL and UK)}, + month = may, + year = 2024, + publisher = {Zenodo}, + doi = {10.5281/zenodo.11154066}, + url = {https://doi.org/10.5281/zenodo.11154066} +} \ No newline at end of file From b46d21ca8decc31a8f03368c37fbb94cfe79c48f Mon Sep 17 00:00:00 2001 From: njtierney Date: Fri, 9 Aug 2024 12:16:18 +1000 Subject: [PATCH 31/39] various word cutting down from meeting --- paper/paper.Rmd | 120 ++++------ paper/paper.aux | 55 +++-- paper/paper.log | 519 +++++++++++++++++++++++++------------------ paper/paper.md | 133 ++++++++--- paper/references.bib | 14 ++ 5 files changed, 488 insertions(+), 353 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 05361af..490e104 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -18,9 +18,9 @@ authors: orcid: 0000-0002-8159-0414 date: "03 May 2024" output: + pdf_document: default html_document: keep_md: yes - pdf_document: default bibliography: references.bib tags: - epidemiology @@ -56,85 +56,70 @@ options(tinytex.clean = FALSE) # Summary -[ A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. ] - This article introduces `conmat`, an R package which generates synthetic contact matrices. Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. -There are currently only a few options for a user to access synthetic contact matrices [@socialmixr; @prem]. Existing methods describing how to generate synthetic contact matrices from @prem are not designed for replicability, and not all areas of interest (countries) are included. - -[ What's different and useful about conmat? ] - -Current interfaces to contact matrices are typically fixed to a given country. There is not a designed interface for someone to access a contact matrix for a sub-region of a country, such as a state, city, or suburb. These sub-region areas are important, as many public health decisions are made at that level. +There are currently only a few options for a user to access synthetic contact matrices [@socialmixr; @prem]. Existing methods describing how to generate synthetic contact matrices from @prem are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. -The conmat software allows users to generate their own contact matrix, by providing their own age population data and combining this with information from an existing contact survey, such as POLYMOD [@polymod]. The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD, then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. - -[ What else is covered in this paper? ] +The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD, then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. -[Need to work out where to fit in `syncomat`] -It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. +One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. +We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. +The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). # Statement of need -[ A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. ] - -#TODO - A better first sentence that encapsulates conmat use? - Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can use these models to make decisions to keep a population safe and healthy. -Identifying vulnerable groups and predicting how diseases spread are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. - -Social contact surveys quantify social contact by asking people to describe the frequency and type of social contact across different settings (home, work, school, other). These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. +Empirical estimates of social contact are provided by social contact surveys. These provide the frequency and type of social contact across different settings (home, work, school, other). -These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 predicted contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +An prominent contact survey is the "POLYMOD" study by @mossong2008, which covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. -However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; in other words, they covered areas that are too large, such as the "urban" or "rural" parts of a country. This is disadvantageous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and easy modification with user-defined inputs. +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2017 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. -[REVISED PARAGRAPH BELOW] The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. -The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? note: @MikeLydeamore will reference the official government report] work commissioned by the Australian government. -We developed methods and software to facilitate the following tasks. - -- Generate, as output, synthetic contact matrices from age-stratfied population data. -- Create next generation matrices (NGMs). -- Apply vaccination reduction to NGMs. -- Use NGMs in disease modelling. -- Provide tidied population data from the Australian Bureau of Statistics. +The `conmat` package was developed to fill the specific need of creating contact matrices for arbitrary demographic structures. We developed the method primarily to output contact matrices. We also provided methods to create next generation matrices. # Example -As an example, let us generate a contact matrix for a local government area within Australia, using a model fitted from the POLYMOD data. - -Suppose we want to generate a contact matrix for the City of Perth. We can get the age-stratified population data for Perth from the helper function `abs_age_lga`: +We will generate a contact matrix for Tasmania area within Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: ```{r} #| label: load-conmat library(conmat) -perth <- abs_age_lga("Perth (C)") -perth +tasmania <- abs_age_state("TAS") +tasmania ``` -We can then generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. +We can then generate a contact matrix for Tasmania using `extrapolate_polymod()`. ```{r} #| label: extrapolate-polymod -#| echo: true -perth_contact <- extrapolate_polymod(population = perth) -perth_contact +tasmania_contact <- extrapolate_polymod(population = tasmania) +tasmania_contact ``` -We can plot the resulting contact matrix for Perth with `autoplot`: +We can plot the resulting contact matrix for Tasmania with `autoplot`: ```{r} #| label: autoplot-contacts -autoplot(perth_contact) +#| fig.width: 8 +#| fig.height: 8 +autoplot(tasmania_contact) ``` - # Implementation +The overall approach of `conmat` has two parts: + +1) Fit a model to predict individual contact rate, using an existing contact survey +2) Predict a contact matrix using age population data + +## Model fitting + `conmat` was built to predict at four settings: work, school, home, and other. One model is fitted for each setting. Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. @@ -153,6 +138,7 @@ $\text{max}(i, j)$ and $\text{min}(i, j)$. The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. + [ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] ```{r} @@ -160,6 +146,7 @@ The six key features of the relationship between the age groups, represented by ``` Note that these partial dependency plots are on the log scale. + When the six covariates are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: ```{r} @@ -174,35 +161,6 @@ https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html In the school setting, children tend to contact other children in the same age groups as them. In the work setting, there are no contacts with children under the age of ten and minimal contact with adults beyond retirement age. -One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. -We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. -The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). - -## Model interfaces - -We provide functions for model fitting at various use cases. Further detail for each of the following functions are available at: https://idem-lab.github.io/conmat/dev/ - -* `fit_single_contact_model()` - * Fits a generalised additive model (GAM) using contact survey data and population size information. This function is recommended when you want to fit a model to only one setting, for which you might want to provide your own contact survey data. - -* `predict_contacts()` - - * This takes a fitted model from `fit_single_contact_model()` and predicts [ #TODO what is predicted? ] to a provided (?) population structure. - -* `fit_setting_contacts()` - * Fits the `fit_single_contact_model()` to each setting. This function is useful for when you have multiple settings to fit. Returns a list of fitted models. - -* `predict_setting_contacts()` - * Takes a list of fitted models from `fit_setting_contacts()` and predicts [ #TODO what is predicted? ] to a given population for each setting. - -* `estimate_setting_contacts()` - * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. - -* `extrapolate_polymod()` - * Takes population information and predicts pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. - -[ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] - # Conclusions and future directions The `conmat` software provides a flexible interface to generating synthetic contact matrices using population data and contact surveys. These contact matrices can then be used in infectious disease modelling and surveillance. @@ -225,23 +183,21 @@ This work was used as a key input into several models for COVID19 in Australia a ## Unanswered questions / Future Directions -Future directions for this software could include: +Some future directions for this software include: -* Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. +* Demonstrate fitting a model to other contact surveys from sources such as the `socialmixr` R package [@socialmixr]. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants -* Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset -* Add ability to include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. So compute household age matrices (like age-structured contact matrices, but for household members instead of contacts) from POLYMOD data. If we compute a different one for each household size, in the POLYMOD data (probably estimated with another GAM, to make best use of the limited data) we might be able to extrapolate household age matrices to new countries based on the distribution of household sizes. -* Add methods for including household size distributions +* Fitting to multiple contact surveys simultaneously, e.g., POLYMOD and CoMix * Add uncertainty to estimates -* Move Australian centric data into its own package -* Add documentation on specifying your own GAM model and using this workflow +* Add methods for including household size distributions +* Include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. +NOTE: It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. + # References https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling -# Cutting Room Floor - -`conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. +Identifying vulnerable groups and predicting how diseases spread are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. diff --git a/paper/paper.aux b/paper/paper.aux index 25e9219..767ab4b 100644 --- a/paper/paper.aux +++ b/paper/paper.aux @@ -3,22 +3,43 @@ \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \providecommand\BKM@entry[2]{} -\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={140}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} -\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={199}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={148}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} +\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={193}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} \@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } \newlabel{summary}{{}{1}{Summary}{section*.1}{}} -\@writefile{toc}{\contentsline {section}{Example}{1}{section*.2}\protected@file@percent } -\newlabel{example}{{}{1}{Example}{section*.2}{}} -\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={308}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} -\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={327}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030695C3030306E5C303030745C303030655C303030725C303030665C303030615C303030635C303030655C30303073} -\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.3}\protected@file@percent } -\newlabel{implementation}{{}{3}{Implementation}{section*.3}{}} -\@writefile{toc}{\contentsline {subsection}{Model interfaces}{3}{section*.4}\protected@file@percent } -\newlabel{model-interfaces}{{}{3}{Model interfaces}{section*.4}{}} -\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={398}}{5C3337365C3337375C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030575C3030306F5C303030725C3030306B} -\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={434}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} -\@writefile{toc}{\contentsline {section}{Future Work}{4}{section*.5}\protected@file@percent } -\newlabel{future-work}{{}{4}{Future Work}{section*.5}{}} -\newlabel{references}{{}{4}{References}{section*.6}{}} -\@writefile{toc}{\contentsline {section}{References}{4}{section*.6}\protected@file@percent } -\gdef \@abspage@last{4} +\@writefile{toc}{\contentsline {section}{Statement of need}{1}{section*.2}\protected@file@percent } +\newlabel{statement-of-need}{{}{1}{Statement of need}{section*.2}{}} +\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={281}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\@writefile{toc}{\contentsline {section}{Example}{2}{section*.3}\protected@file@percent } +\newlabel{example}{{}{2}{Example}{section*.3}{}} +\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={391}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} +\@writefile{toc}{\contentsline {section}{Implementation}{4}{section*.4}\protected@file@percent } +\newlabel{implementation}{{}{4}{Implementation}{section*.4}{}} +\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={470}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030695C3030306E5C303030745C303030655C303030725C303030665C303030615C303030635C303030655C30303073} +\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={547}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\@writefile{toc}{\contentsline {subsection}{Model interfaces}{5}{section*.5}\protected@file@percent } +\newlabel{model-interfaces}{{}{5}{Model interfaces}{section*.5}{}} +\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={554}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} +\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={581}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} +\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={594}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={623}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} +\BKM@entry{id=11,dest={73656374696F6E2A2E3131},srcline={627}}{5C3337365C3337375C303030435C303030755C303030745C303030745C303030695C3030306E5C303030675C3030305C3034305C303030525C3030306F5C3030306F5C3030306D5C3030305C3034305C303030465C3030306C5C3030306F5C3030306F5C30303072} +\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{6}{section*.6}\protected@file@percent } +\newlabel{conclusions-and-future-directions}{{}{6}{Conclusions and future directions}{section*.6}{}} +\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{6}{section*.7}\protected@file@percent } +\newlabel{strengths-weaknesses}{{}{6}{Strengths + Weaknesses}{section*.7}{}} +\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{6}{section*.8}\protected@file@percent } +\newlabel{meaning-of-the-work}{{}{6}{Meaning of the work}{section*.8}{}} +\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{6}{section*.9}\protected@file@percent } +\newlabel{unanswered-questions-future-directions}{{}{6}{Unanswered questions / Future Directions}{section*.9}{}} +\@writefile{toc}{\contentsline {section}{References}{6}{section*.10}\protected@file@percent } +\newlabel{references}{{}{6}{References}{section*.10}{}} +\bibcite{ref-socialmixr}{\citeproctext } +\bibcite{ref-comix}{\citeproctext } +\bibcite{ref-mossong2008}{\citeproctext } +\bibcite{ref-prem2017}{\citeproctext } +\bibcite{ref-prem2021}{\citeproctext } +\@writefile{toc}{\contentsline {section}{Cutting Room Floor}{7}{section*.11}\protected@file@percent } +\newlabel{cutting-room-floor}{{}{7}{Cutting Room Floor}{section*.11}{}} +\newlabel{refs}{{}{7}{Cutting Room Floor}{section*.12}{}} +\gdef \@abspage@last{7} diff --git a/paper/paper.log b/paper/paper.log index caad528..37d646a 100644 --- a/paper/paper.log +++ b/paper/paper.log @@ -1,87 +1,87 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.12.4) 3 MAY 2024 14:13 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.28) 9 AUG 2024 11:26 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **paper.tex (./paper.tex -LaTeX2e <2023-11-01> -L3 programming layer <2023-11-09> +LaTeX2e <2024-06-01> patch level 2 +L3 programming layer <2024-05-27> (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls -Document Class: article 2023/05/17 v1.4n Standard LaTeX document class +Document Class: article 2024/02/08 v1.4n Standard LaTeX document class (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) ) -\c@part=\count186 -\c@section=\count187 -\c@subsection=\count188 -\c@subsubsection=\count189 -\c@paragraph=\count190 -\c@subparagraph=\count191 -\c@figure=\count192 -\c@table=\count193 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 +\c@part=\count194 +\c@section=\count195 +\c@subsection=\count196 +\c@subsubsection=\count197 +\c@paragraph=\count198 +\c@subparagraph=\count199 +\c@figure=\count266 +\c@table=\count267 +\abovecaptionskip=\skip49 +\belowcaptionskip=\skip50 +\bibindent=\dimen141 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2023/05/13 v2.17o AMS math features -\@mathmargin=\skip50 +Package: amsmath 2024/05/23 v2.17q AMS math features +\@mathmargin=\skip51 For additional information on amsmath, use the `?' option. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty Package: amstext 2021/08/26 v2.01 AMS text (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks17 -\ex@=\dimen141 +\ex@=\dimen142 )) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen142 +\pmbraise@=\dimen143 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2022/04/08 v2.04 operator names ) -\inf@bad=\count194 -LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count195 -\leftroot@=\count196 -LaTeX Info: Redefining \overline on input line 399. -LaTeX Info: Redefining \colon on input line 410. -\classnum@=\count197 -\DOTSCASE@=\count198 -LaTeX Info: Redefining \ldots on input line 496. -LaTeX Info: Redefining \dots on input line 499. -LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box51 -\strutbox@=\box52 -LaTeX Info: Redefining \big on input line 722. -LaTeX Info: Redefining \Big on input line 723. -LaTeX Info: Redefining \bigg on input line 724. -LaTeX Info: Redefining \Bigg on input line 725. -\big@size=\dimen143 -LaTeX Font Info: Redeclaring font encoding OML on input line 743. -LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count199 -LaTeX Info: Redefining \bmod on input line 905. -LaTeX Info: Redefining \pmod on input line 910. -LaTeX Info: Redefining \smash on input line 940. -LaTeX Info: Redefining \relbar on input line 970. -LaTeX Info: Redefining \Relbar on input line 971. -\c@MaxMatrixCols=\count266 -\dotsspace@=\muskip16 -\c@parentequation=\count267 -\dspbrk@lvl=\count268 +\inf@bad=\count268 +LaTeX Info: Redefining \frac on input line 233. +\uproot@=\count269 +\leftroot@=\count270 +LaTeX Info: Redefining \overline on input line 398. +LaTeX Info: Redefining \colon on input line 409. +\classnum@=\count271 +\DOTSCASE@=\count272 +LaTeX Info: Redefining \ldots on input line 495. +LaTeX Info: Redefining \dots on input line 498. +LaTeX Info: Redefining \cdots on input line 619. +\Mathstrutbox@=\box52 +\strutbox@=\box53 +LaTeX Info: Redefining \big on input line 721. +LaTeX Info: Redefining \Big on input line 722. +LaTeX Info: Redefining \bigg on input line 723. +LaTeX Info: Redefining \Bigg on input line 724. +\big@size=\dimen144 +LaTeX Font Info: Redeclaring font encoding OML on input line 742. +LaTeX Font Info: Redeclaring font encoding OMS on input line 743. +\macc@depth=\count273 +LaTeX Info: Redefining \bmod on input line 904. +LaTeX Info: Redefining \pmod on input line 909. +LaTeX Info: Redefining \smash on input line 939. +LaTeX Info: Redefining \relbar on input line 969. +LaTeX Info: Redefining \Relbar on input line 970. +\c@MaxMatrixCols=\count274 +\dotsspace@=\muskip17 +\c@parentequation=\count275 +\dspbrk@lvl=\count276 \tag@help=\toks18 -\row@=\count269 -\column@=\count270 -\maxfields@=\count271 +\row@=\count277 +\column@=\count278 +\maxfields@=\count279 \andhelp@=\toks19 -\eqnshift@=\dimen144 -\alignsep@=\dimen145 -\tagshift@=\dimen146 -\tagwidth@=\dimen147 -\totwidth@=\dimen148 -\lineht@=\dimen149 +\eqnshift@=\dimen145 +\alignsep@=\dimen146 +\tagshift@=\dimen147 +\tagwidth@=\dimen148 +\totwidth@=\dimen149 +\lineht@=\dimen150 \@envbody=\toks20 -\multlinegap=\skip51 -\multlinetaggap=\skip52 +\multlinegap=\skip52 +\multlinetaggap=\skip53 \mathdisplay@stack=\toks21 LaTeX Info: Redefining \[ on input line 2953. LaTeX Info: Redefining \] on input line 2954. @@ -99,11 +99,11 @@ Package: iftex 2022/02/03 v1.0f TeX engine tests ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty Package: fontenc 2021/04/29 v2.0v Standard LaTeX package ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2021/02/14 v1.3d Input encoding file +Package: inputenc 2024/02/08 v1.3d Input encoding file \inpenc@prehook=\toks22 \inpenc@posthook=\toks23 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty -Package: textcomp 2020/02/02 v2.0n Standard LaTeX package +Package: textcomp 2024/04/24 v2.1b Standard LaTeX package ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts LaTeX Font Info: Overwriting symbol font `operators' in version `normal' @@ -138,28 +138,53 @@ LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' (Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' (Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty -Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty -Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verbatim +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty +Package: microtype 2024/03/29 v3.1b Micro-typographical refinements (RS) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2022/05/29 v1.15 key=value parser (DPC) \KV@toks@=\toks24 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count280 +) +\MT@toks=\toks25 +\MT@tempbox=\box54 +\MT@count=\count281 +LaTeX Info: Redefining \noprotrusionifhmode on input line 1061. +LaTeX Info: Redefining \leftprotrusion on input line 1062. +\MT@prot@toks=\toks26 +LaTeX Info: Redefining \rightprotrusion on input line 1081. +LaTeX Info: Redefining \textls on input line 1392. +\MT@outer@kern=\dimen151 +LaTeX Info: Redefining \textmicrotypecontext on input line 2013. +\MT@listname@count=\count282 +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def +File: microtype-pdftex.def 2024/03/29 v3.1b Definitions specific to pdftex (RS) +LaTeX Info: Redefining \lsstyle on input line 902. +LaTeX Info: Redefining \lslig on input line 902. +\MT@outer@space=\skip54 +) +Package microtype Info: Loading configuration file microtype.cfg. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg +File: microtype.cfg 2024/03/29 v3.1b microtype main configuration file (RS) +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty +Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count272 -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty +))) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg File: color.cfg 2016/01/02 v1.6 sample color configuration ) Package xcolor Info: Driver file: pdftex.def on input line 274. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. @@ -175,83 +200,80 @@ Package: geometry 2020/01/02 v5.9 Page Geometry (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. ) -\Gm@cnth=\count273 -\Gm@cntv=\count274 -\c@Gm@tempcnt=\count275 -\Gm@bindingoffset=\dimen150 -\Gm@wd@mp=\dimen151 -\Gm@odd@mp=\dimen152 -\Gm@even@mp=\dimen153 -\Gm@layoutwidth=\dimen154 -\Gm@layoutheight=\dimen155 -\Gm@layouthoffset=\dimen156 -\Gm@layoutvoffset=\dimen157 -\Gm@dimlist=\toks25 +\Gm@cnth=\count283 +\Gm@cntv=\count284 +\c@Gm@tempcnt=\count285 +\Gm@bindingoffset=\dimen152 +\Gm@wd@mp=\dimen153 +\Gm@odd@mp=\dimen154 +\Gm@even@mp=\dimen155 +\Gm@layoutwidth=\dimen156 +\Gm@layoutheight=\dimen157 +\Gm@layouthoffset=\dimen158 +\Gm@layoutvoffset=\dimen159 +\Gm@dimlist=\toks27 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -Package: fancyvrb 2023/11/06 4.5b verbatim text (tvz,hv) -\FV@CodeLineNo=\count276 +Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) +\FV@CodeLineNo=\count286 \FV@InFile=\read2 -\FV@TabBox=\box53 -\c@FancyVerbLine=\count277 -\FV@StepNumber=\count278 +\FV@TabBox=\box55 +\c@FancyVerbLine=\count287 +\FV@StepNumber=\count288 \FV@OutFile=\write3 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks -\OuterFrameSep=\skip53 -\fb@frw=\dimen158 -\fb@frh=\dimen159 -\FrameRule=\dimen160 -\FrameSep=\dimen161 +\OuterFrameSep=\skip55 +\fb@frw=\dimen160 +\fb@frh=\dimen161 +\FrameRule=\dimen162 +\FrameSep=\dimen163 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) +Package: graphics 2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +Package: trig 2023/12/02 v1.11 sin cos tan (DPC) ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) -Package graphics Info: Driver file: pdftex.def on input line 107. +Package graphics Info: Driver file: pdftex.def on input line 106. ) -\Gin@req@height=\dimen162 -\Gin@req@width=\dimen163 +\Gin@req@height=\dimen164 +\Gin@req@width=\dimen165 ) -\cslhangindent=\skip54 -\csllabelwidth=\skip55 -\cslentryspacingunit=\skip56 +\pandoc@box=\box56 +\cslhangindent=\skip56 +\csllabelwidth=\skip57 (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) -\calc@Acount=\count279 -\calc@Bcount=\count280 -\calc@Adimen=\dimen164 -\calc@Bdimen=\dimen165 -\calc@Askip=\skip57 -\calc@Bskip=\skip58 +\calc@Acount=\count289 +\calc@Bcount=\count290 +\calc@Adimen=\dimen166 +\calc@Bdimen=\dimen167 +\calc@Askip=\skip58 +\calc@Bskip=\skip59 LaTeX Info: Redefining \setlength on input line 80. LaTeX Info: Redefining \addtolength on input line 81. -\calc@Ccount=\count281 -\calc@Cskip=\skip59 +\calc@Ccount=\count291 +\calc@Cskip=\skip60 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty -Package: bookmark 2020-11-06 v1.29 PDF bookmarks (HO) +Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2023-11-26 v7.01g Hypertext links for LaTeX -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty -Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: hyperref 2024-05-23 v7.01i Hypertext links for LaTeX +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. )) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/auxhook/auxhook.sty -Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty @@ -259,71 +281,73 @@ Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) -\c@section@level=\count282 +\c@section@level=\count292 +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty +Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO) ) -\@linkdim=\dimen166 -\Hy@linkcounter=\count283 -\Hy@pagecounter=\count284 +\@linkdim=\dimen168 +\Hy@linkcounter=\count293 +\Hy@pagecounter=\count294 (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2023-11-26 v7.01g Hyperref: PDFDocEncoding definition (HO) +File: pd1enc.def 2024-05-23 v7.01i Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) ) -\Hy@SavedSpaceFactor=\count285 +\Hy@SavedSpaceFactor=\count295 (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2023-11-26 v7.01g Hyperref: PDF Unicode definition (HO) +File: puenc.def 2024-05-23 v7.01i Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU ) -Package hyperref Info: Option `unicode' set `true' on input line 4064. -Package hyperref Info: Hyper figures OFF on input line 4181. -Package hyperref Info: Link nesting OFF on input line 4186. -Package hyperref Info: Hyper index ON on input line 4189. -Package hyperref Info: Plain pages OFF on input line 4196. -Package hyperref Info: Backreferencing OFF on input line 4201. +Package hyperref Info: Option `unicode' set `true' on input line 4040. +Package hyperref Info: Hyper figures OFF on input line 4157. +Package hyperref Info: Link nesting OFF on input line 4162. +Package hyperref Info: Hyper index ON on input line 4165. +Package hyperref Info: Plain pages OFF on input line 4172. +Package hyperref Info: Backreferencing OFF on input line 4177. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4448. -\c@Hy@tempcnt=\count286 +Package hyperref Info: Bookmarks ON on input line 4424. +\c@Hy@tempcnt=\count296 (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip17 +\Urlmuskip=\muskip18 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) -LaTeX Info: Redefining \url on input line 4786. -\XeTeXLinkMargin=\dimen167 +LaTeX Info: Redefining \url on input line 4763. +\XeTeXLinkMargin=\dimen169 (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) )) -\Fld@menulength=\count287 -\Field@Width=\dimen168 -\Fld@charsize=\dimen169 -Package hyperref Info: Hyper figures OFF on input line 6065. -Package hyperref Info: Link nesting OFF on input line 6070. -Package hyperref Info: Hyper index ON on input line 6073. -Package hyperref Info: backreferencing OFF on input line 6080. -Package hyperref Info: Link coloring OFF on input line 6085. -Package hyperref Info: Link coloring with OCG OFF on input line 6090. -Package hyperref Info: PDF/A mode OFF on input line 6095. +\Fld@menulength=\count297 +\Field@Width=\dimen170 +\Fld@charsize=\dimen171 +Package hyperref Info: Hyper figures OFF on input line 6042. +Package hyperref Info: Link nesting OFF on input line 6047. +Package hyperref Info: Hyper index ON on input line 6050. +Package hyperref Info: backreferencing OFF on input line 6057. +Package hyperref Info: Link coloring OFF on input line 6062. +Package hyperref Info: Link coloring with OCG OFF on input line 6067. +Package hyperref Info: PDF/A mode OFF on input line 6072. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi package with kernel methods ) -\Hy@abspage=\count288 -\c@Item=\count289 -\c@Hfootnote=\count290 +\Hy@abspage=\count298 +\c@Item=\count299 +\c@Hfootnote=\count300 ) Package hyperref Info: Driver (autodetected): hpdftex. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2023-11-26 v7.01g Hyperref driver for pdfTeX +File: hpdftex.def 2024-05-23 v7.01i Hyperref driver for pdfTeX (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package with kernel methods ) -\Fld@listcount=\count291 -\c@bookmark@seq@number=\count292 +\Fld@listcount=\count301 +\c@bookmark@seq@number=\count302 (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty @@ -331,40 +355,58 @@ Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) ) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. ) -\Hy@SectionHShift=\skip60 +\Hy@SectionHShift=\skip61 ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def -File: bkm-pdftex.def 2020-11-06 v1.29 bookmark driver for pdfTeX (HO) -\BKM@id=\count293 +File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO) +\BKM@id=\count303 )) -LaTeX Font Info: Trying to load font information for T1+lmr on input line 136. +LaTeX Font Info: Trying to load font information for T1+lmr on input line 145. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2023-11-09 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count294 -\l__pdf_internal_box=\box54 +File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count304 +\l__pdf_internal_box=\box57 ) (./paper.aux) \openout1 = `paper.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 136. -LaTeX Font Info: ... okay on input line 136. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Info: Redefining \microtypecontext on input line 145. +Package microtype Info: Applying patch `item' on input line 145. +Package microtype Info: Applying patch `toc' on input line 145. +Package microtype Info: Applying patch `eqnum' on input line 145. +Package microtype Info: Applying patch `footnote' on input line 145. +Package microtype Info: Applying patch `verbatim' on input line 145. +Package microtype Info: Generating PDF output. +Package microtype Info: Character protrusion enabled (level 2). +Package microtype Info: Using protrusion set `basicmath'. +Package microtype Info: Automatic font expansion enabled (level 2), +(microtype) stretch: 20, shrink: 20, step: 1, non-selected. +Package microtype Info: Using default expansion set `alltext-nott'. +LaTeX Info: Redefining \showhyphens on input line 145. +Package microtype Info: No adjustment of tracking. +Package microtype Info: No adjustment of interword spacing. +Package microtype Info: No adjustment of character kerning. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg +File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg @@ -404,80 +446,113 @@ File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live * \@reversemarginfalse * (1in=72.27pt=25.4mm, 1cm=28.453pt) -Package hyperref Info: Link coloring OFF on input line 136. -LaTeX Font Info: Trying to load font information for OT1+lmr on input line 138. +Package hyperref Info: Link coloring OFF on input line 145. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OML+lmm on input line 138. +LaTeX Font Info: Trying to load font information for OML+lmm on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 138. +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMX+lmex on input line 138. +LaTeX Font Info: Trying to load font information for OMX+lmex on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 138. +(Font) <12> on input line 147. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 138. +(Font) <8> on input line 147. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 138. -LaTeX Font Info: Trying to load font information for U+msa on input line 138. +(Font) <6> on input line 147. +LaTeX Font Info: Trying to load font information for U+msa on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg +File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) ) -LaTeX Font Info: Trying to load font information for U+msb on input line 138. +LaTeX Font Info: Trying to load font information for U+msb on input line 147. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg +File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) ) -LaTeX Font Info: Trying to load font information for T1+lmtt on input line 178. +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 153. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for TS1+lmr on input line 186. + +[1 + +{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 268. (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) [1 - -{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc}] +) LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available -(Font) Font shape `T1/lmtt/b/n' tried instead on input line 210. - -File: paper_files/figure-latex/unnamed-chunk-4-1.png Graphic file (type png) - -Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-4-1.png used on input line 305. -(pdftex.def) Requested size: 446.25995pt x 274.6215pt. -[2] +(Font) Font shape `T1/lmtt/b/n' tried instead on input line 292. + + +[2{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc}] +LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 374. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd +File: ts1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) + +File: paper_files/figure-latex/autoplot-contacts-1.png Graphic file (type png) + +Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 389. +(pdftex.def) Requested size: 446.26582pt x 446.24617pt. + + +[3] LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10> on input line 331. +(Font) <10> on input line 421. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <7> on input line 331. +(Font) <7> on input line 421. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <5> on input line 331. -[3 <./paper_files/figure-latex/unnamed-chunk-4-1.png>] [4] (./paper.aux) +(Font) <5> on input line 421. + + +[4 <./paper_files/figure-latex/autoplot-contacts-1.png>] +Overfull \hbox (10.50429pt too wide) in paragraph at lines 495--498 +[]\T1/lmr/m/n/10 (-20) Runs \T1/lmtt/m/n/10 fit_single_contact_model() \T1/lmr/m/n/10 (-20) on each set-ting, to save run-ning \T1/lmtt/m/n/10 fit_single_contact_model() + [] + + + +[5{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] +Underfull \hbox (badness 10000) in paragraph at lines 625--626 +[]$\T1/lmr/m/n/10 (+20) https : / / www . doherty . edu . au / our -[] work / institute -[] themes / viral -[] infectious -[] diseases / covid -[] 19 / covid -[] 19 -[] + [] + + + +[6] + +[7] (./paper.aux) *********** -LaTeX2e <2023-11-01> -L3 programming layer <2023-11-09> +LaTeX2e <2024-06-01> patch level 2 +L3 programming layer <2024-05-27> *********** ) Here is how much of TeX's memory you used: - 11665 strings out of 476227 - 180027 string characters out of 5796039 - 1943555 words of memory out of 5000000 - 33413 multiletter control sequences out of 15000+600000 - 609701 words of font info for 80 fonts, out of 8000000 for 9000 - 14 hyphenation exceptions out of 8191 - 77i,5n,81p,510b,560s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on paper.pdf (4 pages, 426980 bytes). + 13887 strings out of 475483 + 218951 string characters out of 5774990 + 1944905 words of memory out of 5000000 + 36168 multiletter control sequences out of 15000+600000 + 621639 words of font info for 149 fonts, out of 8000000 for 9000 + 36 hyphenation exceptions out of 8191 + 83i,6n,93p,1002b,631s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on paper.pdf (7 pages, 533111 bytes). PDF statistics: - 123 PDF objects out of 1000 (max. 8388607) - 95 compressed objects within 1 object stream - 21 named destinations out of 1000 (max. 500000) - 54 words of extra memory for PDF output out of 10000 (max. 10000000) + 190 PDF objects out of 1000 (max. 8388607) + 150 compressed objects within 2 object streams + 27 named destinations out of 1000 (max. 500000) + 34910 words of extra memory for PDF output out of 35830 (max. 10000000) diff --git a/paper/paper.md b/paper/paper.md index 2c970d1..f0a2b85 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -1,21 +1,21 @@ --- -title: 'conmat: generate synthetic contact matrices for a given age population' +title: 'conmat: generate synthetic contact matrices for a given age-stratified population' authors: - affiliation: 1 name: Nicholas Tierney orcid: 0000-0003-1460-8722 - affiliation: 1,2 name: Nick Golding - orcid: + orcid: 0000-0001-8916-5570 - affiliation: 1,3 name: Aarathy Babu orcid: - affiliation: 4 name: Michael Lydeamore - orcid: + orcid: 0000-0001-6515-827X - affiliation: 1,3 name: Chitra Saraswati - orcid: + orcid: 0000-0002-8159-0414 date: "03 May 2024" output: html_document: @@ -41,30 +41,58 @@ affiliations: # Summary -Epidemiologists and public policy makers need to understand the spread of infectious diseases in a population. Knowing which groups are most vulnerable, and how disease spread will unfold facilitates public health decision-making. Diseases like influenza and coronavirus spread via human-to-human, "social contact". If we can measure the amount of social contact, we can use this to understand how diseases spread. +[ A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience. ] + +This article introduces `conmat`, an R package which generates synthetic contact matrices. + +There are currently few options for a user to generate their own synthetic contact matrices. +Existing methods to generate synthetic contact matrices are not designed for replicability, do not have enough granularity, and does not cover enough administrative areas (in other words, some countries are not included). + +[ What's different and useful about conmat? ] +Users might have their own contact survey data that they would like to generate synthetic contact matrices from. +Perhaps the population demography is different, or the contact rates varying. +A higher level of granularity however is sometimes required to make public health decisions for a given population. + +`conmat` also provides flexibility, in that it allows users to specify the area in which they would like the contact matrices to be generated; it allows users to specify their own age groups and population structures; it allows users to upload their own contact surveys to fit the model on; and it allows users to generate the contact matrices at different settings. + +[ What else is covered in this paper? ] An example use-case for `conmat` is provided for a local government area (i.e. at the sub-national level) in Australia. +Also provided is an analysis pipeline to support conmat, [`syncomat`](https://github.com/idem-lab/syncomat), which generates synthetic contact matrices for 200 countries. + +# Statement of need + +[ A Statement of need section that clearly illustrates the research purpose of the software and places it in the context of related work. ] + +#TODO - A better first sentence that encapsulates conmat use? +Understanding the dynamics of infectious disease transmission is an important task (?) for epidemiologists and public policy makers. +Identifying vulnerable groups and predicting disease transmission (?)dynamics / how diseases spread are essential for informed public health decision-making. +Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. + +We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide (?) a measure of contact rates: an empirical estimate of the number of social contacts from one age group to another and the setting of contact. For example, we might learn from a contact survey that homes have higher contact between 25-50 year olds and 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. -We can measure social contact through social contact surveys, where people describe the number and type of social contact they have. These surveys provide an empirical estimate of the number of social contacts from one age group to another, as well as the setting of contact. For example, we might learn from a contact survey that homes have higher contact with 25-50 year olds and with 0-15 year olds, whereas workplaces might have high contact within 25-60 year olds. +These social contact surveys exist for a few countries. As an example, the "POLYMOD" study by @mossong2008 covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. However, what do we do when we want to estimate contact rates in other countries where this is not yet measured? We can use existing data--the contact rates obtained from contact surveys--to help us project / predict these estimates to countries or places that do not have them. These are called "synthetic contact matrices". A popular approach by @prem2017 projected contact rates from the POLYMOD study to 152 countries. This was later updated to include synthetic contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +[ #TODO is project or predict a better word? Does it matter? ] -These surveys exist for a variety of countries, for example, @mossong2008 the "POLYMOD" study, covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands and Poland [@mossong2008]. However, what do we do when we want to look at contact rates in different countries that haven’t been measured? We can use this existing data to help us project to countries or places that do not have empirical survey data. These are called "synthetic contact matrices". A very popular approach by Prem et al projected from the POLYMOD study to 152 countries [@prem2017]. This which was later updated to include contact matrices for 177 countries at "urban" and "rural" levels for each country [@prem2021]. +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, some of the synthetic contact matrices did not have enough granularity; in other words, they covered areas that are too large, such as the "urban" or "rural" parts of a country. This is disadvantageous as public health groups might need to make predictions for more fine-grained areas within a country, such as a district or municipality. Third, the methodology used by Prem et al. was challenging to reuse in other contexts. Prem et al. provided the code used for their analysis, but that code was not designed for replicability and easy modification with user-defined inputs. -However not all countries were included in this list from @prem2021, and for some analyses these synthetic contact matrices were at a large area, such as "urban" or "rural" for a given country. One limitation of this is that the predictions were not provided at smaller grained regons. This might be important, if for example, a public health group needed to make predictions for specific areas. It was challenging to apply the methodology used by Prem et al, as while their analysis code was provided, it was not designed for reuse. +[REVISED PARAGRAPH BELOW] The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: -The `conmat` package was created to fill a specific need for creating synthetic contact matrices for specific local government areas for Australia, for work commissioned by the Australian government. We created methods and software to facilitate the following: +The `conmat` package was developed to fill the specific need of creating synthetic contact matrices for local government areas in Australia. This package is used for [ #TODO what work, specifically? Health? Provide example. Or is *this* package commissioned by the Aus govt? ] work commissioned by the Australian government. +We developed methods and software to facilitate the following tasks. -- Input: age and population data, and Output: synthetic contact matrix -- Create next generation matrices (NGMs) -- Apply vaccination reduction to NGMs -- Use NGMs in disease modelling -- Provide tidy Australian survey data from the Australian Bureau of Statistics for use. +- Generate, as output, synthetic contact matrices from age-stratfied population data. +- Create next generation matrices (NGMs). +- Apply vaccination reduction to NGMs. +- Use NGMs in disease modelling. +- Provide tidied population data from the Australian Bureau of Statistics. # Example -As an example, let us generate a contact matrix for a local area using POLYMOD data. +As an example, let us generate a contact matrix for a local government area within Australia, using a model fitted from the POLYMOD data. -Suppose we want to get a contact matrix for a given region in Australia, let's say the city of Perth. We can get that from a helper function, `abs_age_lga`. +Suppose we want to generate a contact matrix for the City of Perth. We can get the age-stratified population data for Perth from the helper function `abs_age_lga`: -```r +``` r library(conmat) perth <- abs_age_lga("Perth (C)") perth @@ -96,10 +124,10 @@ perth #> 18 Perth (C) 85 2020 367 ``` -We can get a contact matrix made for `perth` using the `extrapolate_polymod` function: +We can then generate a contact matrix for `perth` using the `extrapolate_polymod` function, where the contact matrix is generated using a model fitted from the POLYMOD data. -```r +``` r perth_contact <- extrapolate_polymod(population = perth) perth_contact ``` @@ -149,43 +177,79 @@ perth_contact #> ℹ e.g., `x$home` ``` -We can plot this with `autoplot` +We can plot the resulting contact matrix for Perth with `autoplot`: -```r +``` r autoplot(perth_contact) ``` + # Implementation -Conmat was built to predict at four settings: work, school, home, and other. The model is built to predict four separate models, one for each setting. -The model is a poisson generalised additive model (gam), predicting the count of contacts, with an offset of the log of participants. There are six terms to explain six key features of the relationship between ages, and optional terms for attendance at school or work, depending on which setting the model is predicting to. +`conmat` was built to predict at four settings: work, school, home, and other. +One model is fitted for each setting. +Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +The model has six (?)covariates/terms to explain six key features of the relationship between ages, +and two optional terms for attendance at school or work. +The two optional terms are included depending on which setting the model is fitted for. + +Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? ] + +The six terms are +$|i-j|$, +${|i-j|}^{2}$, +$i + j$, +$i \times j$, +$\text{max}(i, j)$ and +$\text{min}(i, j)$. -The six key features of the relationship are shown in the figure below +The six key features of the relationship between the age groups, represented by the six terms, are displayed in the figure below. +[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] -```r -# use DHARMA to show a partial dep plot of the six main terms +``` r +# Show partial dep plot of the six main terms ``` +Note that these partial dependency plots are on the log scale. +When the six terms are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: + + +``` r +# Show combined partial dep plot (i.e. sum of the partial dependencies for all six terms) in each setting: home, school, work and other +``` + +In other words, the six terms above provide patterns that are useful in modelling the different settings, +and correspond with real-life situations of how contact would look like. +In the home setting for example, [ #TODO describe how children interact with parents and elderly generation, grandparents ]. +When the terms for school and work are added, these terms also provide patterns that correspond with real-life situations. +https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html +In the school setting, children tend to contact other children in the same age groups as them. +In the work setting, there are no contacts with children under the age of ten and minimal contact with adults beyond retirement age. + +One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. +We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. +The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). + ## Model interfaces -We provide multiple levels for the user to interact with for model fitting, further detail can be seen at: https://idem-lab.github.io/conmat/dev/ +We provide functions for model fitting at various use cases. Further detail for each of the following functions are available at: https://idem-lab.github.io/conmat/dev/ * `fit_single_contact_model()` - * Using contact survey data to fit a GAM model, adding provided target population information to provide population size information. Recommended for when you want to fit to just a single setting, for which you might want to provide your own contact survey data. + * Fits a generalised additive model (GAM) using contact survey data and population size information. This function is recommended when you want to fit a model to only one setting, for which you might want to provide your own contact survey data. * `predict_contacts()` - * This takes a fitted model from `fit_single_contact_model`, and then predicts to a provided population + * This takes a fitted model from `fit_single_contact_model()` and predicts [ #TODO what is predicted? ] to a provided (?) population structure. * `fit_setting_contacts()` - * Fits the `fit_single_contact_model()` to each setting. Recommended for when you have multiple settings to fit. Returns a list of fitted models. + * Fits the `fit_single_contact_model()` to each setting. This function is useful for when you have multiple settings to fit. Returns a list of fitted models. * `predict_setting_contacts()` - * Takes a list of fitted models from `fit_setting_contacts()` and predicts to a given population for each setting. + * Takes a list of fitted models from `fit_setting_contacts()` and predicts [ #TODO what is predicted? ] to a given population for each setting. * `estimate_setting_contacts()` * A convenience function that fits multiple models, one for each setting. This means fitting `fit_setting_contacts()` and then `predict_setting_contacts()`. Recommended for when you have multiple settings to fit and want to predict to a given population as well. @@ -193,8 +257,11 @@ We provide multiple levels for the user to interact with for model fitting, furt * `extrapolate_polymod()` * Takes population information and projects pre-fit model from POLYMOD - used for speed when you know you want to take an already fit model from POLYMOD and just fit it to your provided population. -# Future Work +[ #TODO for the above it's good to explain what exactly is predicted. Otherwise it's confusing for the user to understand what each of the model outputs? ] +# Conclusions and future directions + +Our future direction for `conmat` includes adding the following functionalities: * Create a contact matrix using a custom contact survey from another source, such as the `socialmixr` R package. * Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants * Add ability to fit multiple contact surveys at once, e.g., POLYMOD and another dataset @@ -204,4 +271,6 @@ We provide multiple levels for the user to interact with for model fitting, furt * Move Australian centric data into its own package * Add documentation on specifying your own GAM model and using this workflow +[ #TODO Change concluding sentence. The following is copied ad verbatim from JSS bizicount because I like it ] For now, however, we feel that our base `bizicount` package is sufficiently general to assist in estimating the models most often encountered by applied researchers. + # References diff --git a/paper/references.bib b/paper/references.bib index fb6bb90..0215cb5 100644 --- a/paper/references.bib +++ b/paper/references.bib @@ -68,4 +68,18 @@ @dataset{comix publisher = {Zenodo}, doi = {10.5281/zenodo.11154066}, url = {https://doi.org/10.5281/zenodo.11154066} +} + + +@misc{socialmixr, + title = {Socialmixr: social mixing matrices for infectious disease modelling}, + shorttitle = {Socialmixr}, + url = {https://CRAN.R-project.org/package=socialmixr}, + doi = {10.32614/CRAN.package.socialmixr}, + abstract = {Provides methods for sampling contact matrices from diary data for use in infectious disease modelling, as discussed in Mossong et al. (2008) {\textless}doi:10.1371/journal.pmed.0050074{\textgreater}.}, + language = {en}, + urldate = {2024-08-09}, + author = {Funk, Sebastian and Willem, Lander and Gruson, Hugo}, + month = jan, + year = {2018}, } \ No newline at end of file From 99ac709269583c546ed19c83c2c9138a501114d8 Mon Sep 17 00:00:00 2001 From: Michael Lydeamore Date: Wed, 14 Aug 2024 11:33:58 +1000 Subject: [PATCH 32/39] Fit more word cleanup --- paper/paper.Rmd | 27 ++--- paper/paper.aux | 55 +++++---- paper/paper.log | 300 +++++++++++++++++++++++------------------------- 3 files changed, 182 insertions(+), 200 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 490e104..e9ed020 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -58,34 +58,31 @@ options(tinytex.clean = FALSE) This article introduces `conmat`, an R package which generates synthetic contact matrices. Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. -There are currently only a few options for a user to access synthetic contact matrices [@socialmixr; @prem]. Existing methods describing how to generate synthetic contact matrices from @prem are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. +There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. -The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD, then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. +The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. - -One of the issues with the contact matrices generated by @prem2017 is that some countries are missing. To remedy this we generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, fitted on the POLYMOD contact surveys. -We also ensured that the analysis pipeline is reproducible and transparent by utilising a targets workflow, which allows ease of editing for users. -The resulting synthetic contact matrices, and a replicable / extensible (?) analysis pipeline, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). +For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). # Statement of need Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can use these models to make decisions to keep a population safe and healthy. -Empirical estimates of social contact are provided by social contact surveys. These provide the frequency and type of social contact across different settings (home, work, school, other). +Empirical estimates of social contact are provided by social contact surveys. These provide samples of the frequency and type of social contact across different settings (home, work, school, other). An prominent contact survey is the "POLYMOD" study by @mossong2008, which covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. -These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2017 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. -The `conmat` package was developed to fill the specific need of creating contact matrices for arbitrary demographic structures. We developed the method primarily to output contact matrices. We also provided methods to create next generation matrices. +The `conmat` package was developed to fill the specific need of creating contact matrices for arbitrary demographic structures. We developed the method primarily to output synthetic contact matrices. We also provided methods to create next generation matrices. # Example -We will generate a contact matrix for Tasmania area within Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: +We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: ```{r} #| label: load-conmat @@ -127,7 +124,7 @@ The model has six covariates to explain six key features of the relationship bet and two optional covariates for attendance at school or work. The two optional covariates are included depending on which setting the model is fitted for. -Each cell in the resulting contact matrix, indexed *i*, *j*, is the predicted number of people in age group *j* that a single individual in age group *i* will have contact with per day. If you sum across all the *j* age groups for each *i* age group, you get the predicted total number of contacts per day for each individual of age group *i*. [ #TODO expected, predicted, or average? Does it matter? note: currently going with predicted] +Each cell in the resulting contact matrix, indexed $i$, $j$, is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. The six covariates are $|i-j|$, @@ -137,9 +134,7 @@ $i \times j$, $\text{max}(i, j)$ and $\text{min}(i, j)$. -The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. - -[ #TODO notes-to-self: the model structure wasn't generated through any particularly robust process, it was just coming up with structures that looked mildly appropriate for our use case. ] +The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix). ```{r} # Show partial dep plot of the six main covariates @@ -171,7 +166,7 @@ The main strength of `conmat` is its interface requiring only age population dat We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. -The model structure (covariates?) provided in conmat was designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as ..., may improve model performance. +The model structure (covariates?) provided in conmat was designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. @@ -194,8 +189,6 @@ Some future directions for this software include: Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. -NOTE: It is also worth noting that there is an updated analysis pipeline that uses conmat, [`syncomat`](https://github.com/idem-lab/syncomat), to generate synthetic contact matrices for 200 countries. - # References https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling diff --git a/paper/paper.aux b/paper/paper.aux index 767ab4b..8ee7b56 100644 --- a/paper/paper.aux +++ b/paper/paper.aux @@ -3,43 +3,40 @@ \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \providecommand\BKM@entry[2]{} -\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={148}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} -\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={193}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} +\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={149}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} +\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={180}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} \@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } \newlabel{summary}{{}{1}{Summary}{section*.1}{}} \@writefile{toc}{\contentsline {section}{Statement of need}{1}{section*.2}\protected@file@percent } \newlabel{statement-of-need}{{}{1}{Statement of need}{section*.2}{}} -\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={281}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={218}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} \@writefile{toc}{\contentsline {section}{Example}{2}{section*.3}\protected@file@percent } \newlabel{example}{{}{2}{Example}{section*.3}{}} -\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={391}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} -\@writefile{toc}{\contentsline {section}{Implementation}{4}{section*.4}\protected@file@percent } -\newlabel{implementation}{{}{4}{Implementation}{section*.4}{}} -\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={470}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030695C3030306E5C303030745C303030655C303030725C303030665C303030615C303030635C303030655C30303073} -\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={547}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\@writefile{toc}{\contentsline {subsection}{Model interfaces}{5}{section*.5}\protected@file@percent } -\newlabel{model-interfaces}{{}{5}{Model interfaces}{section*.5}{}} -\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={554}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} -\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={581}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} -\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={594}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={623}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} -\BKM@entry{id=11,dest={73656374696F6E2A2E3131},srcline={627}}{5C3337365C3337375C303030435C303030755C303030745C303030745C303030695C3030306E5C303030675C3030305C3034305C303030525C3030306F5C3030306F5C3030306D5C3030305C3034305C303030465C3030306C5C3030306F5C3030306F5C30303072} -\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{6}{section*.6}\protected@file@percent } -\newlabel{conclusions-and-future-directions}{{}{6}{Conclusions and future directions}{section*.6}{}} -\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{6}{section*.7}\protected@file@percent } -\newlabel{strengths-weaknesses}{{}{6}{Strengths + Weaknesses}{section*.7}{}} -\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{6}{section*.8}\protected@file@percent } -\newlabel{meaning-of-the-work}{{}{6}{Meaning of the work}{section*.8}{}} -\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{6}{section*.9}\protected@file@percent } -\newlabel{unanswered-questions-future-directions}{{}{6}{Unanswered questions / Future Directions}{section*.9}{}} -\@writefile{toc}{\contentsline {section}{References}{6}{section*.10}\protected@file@percent } -\newlabel{references}{{}{6}{References}{section*.10}{}} +\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={326}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} +\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.4}\protected@file@percent } +\newlabel{implementation}{{}{3}{Implementation}{section*.4}{}} +\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={340}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} +\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={398}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={405}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} +\@writefile{toc}{\contentsline {subsection}{Model fitting}{4}{section*.5}\protected@file@percent } +\newlabel{model-fitting}{{}{4}{Model fitting}{section*.5}{}} +\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{4}{section*.6}\protected@file@percent } +\newlabel{conclusions-and-future-directions}{{}{4}{Conclusions and future directions}{section*.6}{}} +\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{4}{section*.7}\protected@file@percent } +\newlabel{strengths-weaknesses}{{}{4}{Strengths + Weaknesses}{section*.7}{}} +\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={433}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} +\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={446}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={475}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} \bibcite{ref-socialmixr}{\citeproctext } \bibcite{ref-comix}{\citeproctext } \bibcite{ref-mossong2008}{\citeproctext } \bibcite{ref-prem2017}{\citeproctext } \bibcite{ref-prem2021}{\citeproctext } -\@writefile{toc}{\contentsline {section}{Cutting Room Floor}{7}{section*.11}\protected@file@percent } -\newlabel{cutting-room-floor}{{}{7}{Cutting Room Floor}{section*.11}{}} -\newlabel{refs}{{}{7}{Cutting Room Floor}{section*.12}{}} -\gdef \@abspage@last{7} +\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{5}{section*.8}\protected@file@percent } +\newlabel{meaning-of-the-work}{{}{5}{Meaning of the work}{section*.8}{}} +\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{5}{section*.9}\protected@file@percent } +\newlabel{unanswered-questions-future-directions}{{}{5}{Unanswered questions / Future Directions}{section*.9}{}} +\@writefile{toc}{\contentsline {section}{References}{5}{section*.10}\protected@file@percent } +\newlabel{references}{{}{5}{References}{section*.10}{}} +\newlabel{refs}{{}{5}{References}{section*.11}{}} +\gdef \@abspage@last{6} diff --git a/paper/paper.log b/paper/paper.log index 37d646a..06c012b 100644 --- a/paper/paper.log +++ b/paper/paper.log @@ -1,14 +1,14 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.28) 9 AUG 2024 11:26 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.26) 14 AUG 2024 11:31 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **paper.tex (./paper.tex -LaTeX2e <2024-06-01> patch level 2 +LaTeX2e <2024-06-01> patch level 1 L3 programming layer <2024-05-27> -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls Document Class: article 2024/02/08 v1.4n Standard LaTeX document class -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) ) \c@part=\count194 @@ -22,20 +22,20 @@ File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) \abovecaptionskip=\skip49 \belowcaptionskip=\skip50 \bibindent=\dimen141 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty Package: amsmath 2024/05/23 v2.17q AMS math features \@mathmargin=\skip51 For additional information on amsmath, use the `?' option. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty Package: amstext 2021/08/26 v2.01 AMS text -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks17 \ex@=\dimen142 -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols \pmbraise@=\dimen143 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2022/04/08 v2.04 operator names ) \inf@bad=\count268 @@ -85,26 +85,26 @@ LaTeX Info: Redefining \Relbar on input line 970. \mathdisplay@stack=\toks21 LaTeX Info: Redefining \[ on input line 2953. LaTeX Info: Redefining \] on input line 2954. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty Package: amssymb 2013/01/14 v3.01 AMS font symbols -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support \symAMSa=\mathgroup4 \symAMSb=\mathgroup5 LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty Package: iftex 2022/02/03 v1.0f TeX engine tests -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty Package: fontenc 2021/04/29 v2.0v Standard LaTeX package -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2024/02/08 v1.3d Input encoding file \inpenc@prehook=\toks22 \inpenc@posthook=\toks23 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty Package: textcomp 2024/04/24 v2.1b Standard LaTeX package -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts LaTeX Font Info: Overwriting symbol font `operators' in version `normal' (Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. @@ -138,14 +138,14 @@ LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' (Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' (Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verbatim -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty Package: microtype 2024/03/29 v3.1b Micro-typographical refinements (RS) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2022/05/29 v1.15 key=value parser (DPC) \KV@toks@=\toks24 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) \etb@tempcnta=\count280 ) @@ -160,32 +160,32 @@ LaTeX Info: Redefining \textls on input line 1392. \MT@outer@kern=\dimen151 LaTeX Info: Redefining \textmicrotypecontext on input line 2013. \MT@listname@count=\count282 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def File: microtype-pdftex.def 2024/03/29 v3.1b Definitions specific to pdftex (RS) LaTeX Info: Redefining \lsstyle on input line 902. LaTeX Info: Redefining \lslig on input line 902. \MT@outer@space=\skip54 ) Package microtype Info: Loading configuration file microtype.cfg. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg File: microtype.cfg 2024/03/29 v3.1b microtype main configuration file (RS) -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -))) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty +))) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg File: color.cfg 2016/01/02 v1.6 sample color configuration ) Package xcolor Info: Driver file: pdftex.def on input line 274. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. Package xcolor Info: Model `RGB' extended on input line 1366. @@ -195,9 +195,9 @@ Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty Package: geometry 2020/01/02 v5.9 Page Geometry -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. ) \Gm@cnth=\count283 @@ -212,7 +212,7 @@ Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. \Gm@layouthoffset=\dimen158 \Gm@layoutvoffset=\dimen159 \Gm@dimlist=\toks27 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \FV@CodeLineNo=\count286 \FV@InFile=\read2 @@ -220,20 +220,20 @@ Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \c@FancyVerbLine=\count287 \FV@StepNumber=\count288 \FV@OutFile=\write3 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks \OuterFrameSep=\skip55 \fb@frw=\dimen160 \fb@frh=\dimen161 \FrameRule=\dimen162 \FrameSep=\dimen163 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty Package: graphics 2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty Package: trig 2023/12/02 v1.11 sin cos tan (DPC) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) Package graphics Info: Driver file: pdftex.def on input line 106. @@ -241,10 +241,9 @@ Package graphics Info: Driver file: pdftex.def on input line 106. \Gin@req@height=\dimen164 \Gin@req@width=\dimen165 ) -\pandoc@box=\box56 \cslhangindent=\skip56 \csllabelwidth=\skip57 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) \calc@Acount=\count289 \calc@Bcount=\count290 @@ -256,47 +255,47 @@ LaTeX Info: Redefining \setlength on input line 80. LaTeX Info: Redefining \addtolength on input line 81. \calc@Ccount=\count291 \calc@Cskip=\skip60 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty Package: hyperref 2024-05-23 v7.01i Hypertext links for LaTeX -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) ) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) \c@section@level=\count292 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO) ) \@linkdim=\dimen168 \Hy@linkcounter=\count293 \Hy@pagecounter=\count294 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def File: pd1enc.def 2024-05-23 v7.01i Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) ) \Hy@SavedSpaceFactor=\count295 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def File: puenc.def 2024-05-23 v7.01i Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU @@ -310,15 +309,15 @@ Package hyperref Info: Backreferencing OFF on input line 4177. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. Package hyperref Info: Bookmarks ON on input line 4424. \c@Hy@tempcnt=\count296 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip18 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) LaTeX Info: Redefining \url on input line 4763. \XeTeXLinkMargin=\dimen169 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) )) \Fld@menulength=\count297 @@ -331,7 +330,7 @@ Package hyperref Info: backreferencing OFF on input line 6057. Package hyperref Info: Link coloring OFF on input line 6062. Package hyperref Info: Link coloring with OCG OFF on input line 6067. Package hyperref Info: PDF/A mode OFF on input line 6072. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi package with kernel methods ) @@ -340,76 +339,76 @@ package with kernel methods \c@Hfootnote=\count300 ) Package hyperref Info: Driver (autodetected): hpdftex. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def File: hpdftex.def 2024-05-23 v7.01i Hyperref driver for pdfTeX -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package with kernel methods ) \Fld@listcount=\count301 \c@bookmark@seq@number=\count302 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) ) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. ) \Hy@SectionHShift=\skip61 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO) \BKM@id=\count303 )) -LaTeX Font Info: Trying to load font information for T1+lmr on input line 145. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd +LaTeX Font Info: Trying to load font information for T1+lmr on input line 146. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX) \l__color_backend_stack_int=\count304 -\l__pdf_internal_box=\box57 +\l__pdf_internal_box=\box56 ) (./paper.aux) \openout1 = `paper.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Info: Redefining \microtypecontext on input line 145. -Package microtype Info: Applying patch `item' on input line 145. -Package microtype Info: Applying patch `toc' on input line 145. -Package microtype Info: Applying patch `eqnum' on input line 145. -Package microtype Info: Applying patch `footnote' on input line 145. -Package microtype Info: Applying patch `verbatim' on input line 145. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Info: Redefining \microtypecontext on input line 146. +Package microtype Info: Applying patch `item' on input line 146. +Package microtype Info: Applying patch `toc' on input line 146. +Package microtype Info: Applying patch `eqnum' on input line 146. +Package microtype Info: Applying patch `footnote' on input line 146. +Package microtype Info: Applying patch `verbatim' on input line 146. Package microtype Info: Generating PDF output. Package microtype Info: Character protrusion enabled (level 2). Package microtype Info: Using protrusion set `basicmath'. Package microtype Info: Automatic font expansion enabled (level 2), (microtype) stretch: 20, shrink: 20, step: 1, non-selected. Package microtype Info: Using default expansion set `alltext-nott'. -LaTeX Info: Redefining \showhyphens on input line 145. +LaTeX Info: Redefining \showhyphens on input line 146. Package microtype Info: No adjustment of tracking. Package microtype Info: No adjustment of interword spacing. Package microtype Info: No adjustment of character kerning. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live )) *geometry* driver: auto-detecting @@ -446,113 +445,106 @@ File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live * \@reversemarginfalse * (1in=72.27pt=25.4mm, 1cm=28.453pt) -Package hyperref Info: Link coloring OFF on input line 145. -LaTeX Font Info: Trying to load font information for OT1+lmr on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd +Package hyperref Info: Link coloring OFF on input line 146. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OML+lmm on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd +LaTeX Font Info: Trying to load font information for OML+lmm on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMX+lmex on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd +LaTeX Font Info: Trying to load font information for OMX+lmex on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 147. +(Font) <12> on input line 148. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 147. +(Font) <8> on input line 148. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 147. -LaTeX Font Info: Trying to load font information for U+msa on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd +(Font) <6> on input line 148. +LaTeX Font Info: Trying to load font information for U+msa on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) ) -LaTeX Font Info: Trying to load font information for U+msb on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd +LaTeX Font Info: Trying to load font information for U+msb on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) ) -LaTeX Font Info: Trying to load font information for T1+lmtt on input line 153. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 151. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) [1 -{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] -LaTeX Font Info: Trying to load font information for TS1+lmr on input line 268. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd -File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) +{/Users/mlyd0001/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available -(Font) Font shape `T1/lmtt/b/n' tried instead on input line 292. +(Font) Font shape `T1/lmtt/b/n' tried instead on input line 227. -[2{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc}] -LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 374. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd +[2] +LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 309. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd File: ts1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) - + File: paper_files/figure-latex/autoplot-contacts-1.png Graphic file (type png) -Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 389. -(pdftex.def) Requested size: 446.26582pt x 446.24617pt. +Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 324. +(pdftex.def) Requested size: 446.24617pt x 446.24617pt. -[3] +[3{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10> on input line 421. +(Font) <10> on input line 351. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <7> on input line 421. +(Font) <7> on input line 351. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <5> on input line 421. - - -[4 <./paper_files/figure-latex/autoplot-contacts-1.png>] -Overfull \hbox (10.50429pt too wide) in paragraph at lines 495--498 -[]\T1/lmr/m/n/10 (-20) Runs \T1/lmtt/m/n/10 fit_single_contact_model() \T1/lmr/m/n/10 (-20) on each set-ting, to save run-ning \T1/lmtt/m/n/10 fit_single_contact_model() - [] - +(Font) <5> on input line 351. -[5{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] -Underfull \hbox (badness 10000) in paragraph at lines 625--626 +[4{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 453. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd +File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +Underfull \hbox (badness 10000) in paragraph at lines 477--478 []$\T1/lmr/m/n/10 (+20) https : / / www . doherty . edu . au / our -[] work / institute -[] themes / viral -[] infectious -[] diseases / covid -[] 19 / covid -[] 19 -[] [] -[6] +[5] -[7] (./paper.aux) +[6] (./paper.aux) *********** -LaTeX2e <2024-06-01> patch level 2 +LaTeX2e <2024-06-01> patch level 1 L3 programming layer <2024-05-27> *********** ) Here is how much of TeX's memory you used: - 13887 strings out of 475483 - 218951 string characters out of 5774990 + 13867 strings out of 475499 + 219460 string characters out of 5774952 1944905 words of memory out of 5000000 - 36168 multiletter control sequences out of 15000+600000 - 621639 words of font info for 149 fonts, out of 8000000 for 9000 + 36147 multiletter control sequences out of 15000+600000 + 618113 words of font info for 142 fonts, out of 8000000 for 9000 36 hyphenation exceptions out of 8191 - 83i,6n,93p,1002b,631s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on paper.pdf (7 pages, 533111 bytes). + 83i,6n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on paper.pdf (6 pages, 506897 bytes). PDF statistics: - 190 PDF objects out of 1000 (max. 8388607) - 150 compressed objects within 2 object streams - 27 named destinations out of 1000 (max. 500000) - 34910 words of extra memory for PDF output out of 35830 (max. 10000000) + 173 PDF objects out of 1000 (max. 8388607) + 136 compressed objects within 2 object streams + 25 named destinations out of 1000 (max. 500000) + 32854 words of extra memory for PDF output out of 35830 (max. 10000000) From 6159f1dfa5d14feb1d6538e1e4d4573810732588 Mon Sep 17 00:00:00 2001 From: njtierney Date: Wed, 14 Aug 2024 14:16:05 +1000 Subject: [PATCH 33/39] update checking function + plot snapshots --- R/checkers.R | 13 +- .../autoplot/autoplot-all-settinge.new.svg | 307 +++++++++++++++++ .../_snaps/autoplot/autoplot-ngm.new.svg | 302 +++++++++++++++++ .../autoplot/autoplot-single-setting.new.svg | 92 +++++ .../autoplot/autoplot-vaccination.new.svg | 305 +++++++++++++++++ .../testthat/_snaps/autoplot/autoplot.new.svg | 317 ++++++++++++++++++ tests/testthat/_snaps/check-if-data-frame.md | 6 +- 7 files changed, 1334 insertions(+), 8 deletions(-) create mode 100644 tests/testthat/_snaps/autoplot/autoplot-all-settinge.new.svg create mode 100644 tests/testthat/_snaps/autoplot/autoplot-ngm.new.svg create mode 100644 tests/testthat/_snaps/autoplot/autoplot-single-setting.new.svg create mode 100644 tests/testthat/_snaps/autoplot/autoplot-vaccination.new.svg create mode 100644 tests/testthat/_snaps/autoplot/autoplot.new.svg diff --git a/R/checkers.R b/R/checkers.R index 8935c93..4f92cb2 100644 --- a/R/checkers.R +++ b/R/checkers.R @@ -142,13 +142,16 @@ check_if_var_numeric <- function(data, var, attribute) { } } -check_if_data_frame <- function(x) { +check_if_data_frame <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()) { if (!is.data.frame(x)) { cli::cli_abort( - c( - "x must be a {.cls data.frame}", - "i" = "x is {.cls {class(x)}}" - ) + message = c( + "{.arg {arg}} must be a {.cls data.frame}", + "i" = "{.arg {arg}} is {.cls {class(x)}}" + ), + call = call ) } } diff --git a/tests/testthat/_snaps/autoplot/autoplot-all-settinge.new.svg b/tests/testthat/_snaps/autoplot/autoplot-all-settinge.new.svg new file mode 100644 index 0000000..481d5bd --- /dev/null +++ b/tests/testthat/_snaps/autoplot/autoplot-all-settinge.new.svg @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +1 +2 +3 +home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +2 +4 +6 +school + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + + + +0.5 +1.0 +1.5 +2.0 +2.5 +work + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + +1 +2 +3 +4 +other +Setting-specific synthetic contact matrices + + diff --git a/tests/testthat/_snaps/autoplot/autoplot-ngm.new.svg b/tests/testthat/_snaps/autoplot/autoplot-ngm.new.svg new file mode 100644 index 0000000..6da1398 --- /dev/null +++ b/tests/testthat/_snaps/autoplot/autoplot-ngm.new.svg @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +0.2 +0.4 +0.6 +home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + +0.1 +0.2 +school + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + +0.05 +0.10 +0.15 +0.20 +work + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + +0.1 +0.2 +0.3 +0.4 +The number of newly infected individuals for a specified age group in each setting +other +Setting-specific NGM matrices + + diff --git a/tests/testthat/_snaps/autoplot/autoplot-single-setting.new.svg b/tests/testthat/_snaps/autoplot/autoplot-single-setting.new.svg new file mode 100644 index 0000000..822c695 --- /dev/null +++ b/tests/testthat/_snaps/autoplot/autoplot-single-setting.new.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +age_group_to +contacts + + + + + + + + + + + +0.5 +1.0 +1.5 +2.0 +2.5 +Work + + diff --git a/tests/testthat/_snaps/autoplot/autoplot-vaccination.new.svg b/tests/testthat/_snaps/autoplot/autoplot-vaccination.new.svg new file mode 100644 index 0000000..985dfe3 --- /dev/null +++ b/tests/testthat/_snaps/autoplot/autoplot-vaccination.new.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + +0.025 +0.050 +0.075 +0.100 +home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +0.02 +0.04 +0.06 +school + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + +0.004 +0.008 +0.012 +0.016 +work + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +0.01 +0.02 +0.03 +Number of newly infected individuals for age groups, adjusted based on proposed age group vaccination rates +other +Setting-specific vaccination matrices + + diff --git a/tests/testthat/_snaps/autoplot/autoplot.new.svg b/tests/testthat/_snaps/autoplot/autoplot.new.svg new file mode 100644 index 0000000..e654bd0 --- /dev/null +++ b/tests/testthat/_snaps/autoplot/autoplot.new.svg @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + +0.2 +0.3 +0.4 +home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + + + +0.050 +0.075 +0.100 +0.125 +0.150 +school + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + + + +0.050 +0.075 +0.100 +0.125 +0.150 +work + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_to +[0,5) +[5,10) +[10,15) +[15,Inf) +age_group_from +contacts + + + + + + + + + + + +0.050 +0.075 +0.100 +0.125 +0.150 +Relative probability of individuals in an age group infecting an individual in another age group +other +Setting-specific transmission probability matrices + + diff --git a/tests/testthat/_snaps/check-if-data-frame.md b/tests/testthat/_snaps/check-if-data-frame.md index bf7f00d..ee9a05f 100644 --- a/tests/testthat/_snaps/check-if-data-frame.md +++ b/tests/testthat/_snaps/check-if-data-frame.md @@ -8,7 +8,7 @@ Code check_if_data_frame(volcano) Condition - Error in `check_if_data_frame()`: - ! x must be a - i x is + Error: + ! `volcano` must be a + i `volcano` is From 988abd769dbb61f7e8a1f4069dca5b644262af70 Mon Sep 17 00:00:00 2001 From: njtierney Date: Fri, 16 Aug 2024 15:41:22 +1000 Subject: [PATCH 34/39] pushing partial prediction helpers --- DESCRIPTION | 8 +- NAMESPACE | 17 ++ R/partial-prediction-helpers.R | 270 +++++++++++++++++++++++++++++ paper/paper.Rmd | 78 ++++++++- paper/paper.aux | 48 +++--- paper/paper.log | 299 +++++++++++++++++---------------- 6 files changed, 544 insertions(+), 176 deletions(-) create mode 100644 R/partial-prediction-helpers.R diff --git a/DESCRIPTION b/DESCRIPTION index 0c543a3..0efad24 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,14 +30,13 @@ Description: Builds contact matrices using GAMs and population data. This packag Electoral Commission and Australian Bureau of Statistics) 2020. License: MIT + file LICENSE Depends: - R (>= 2.10) + R (>= 4.1.0) Suggests: covr, knitr, vdiffr, testthat (>= 3.0.0), rmarkdown, - stringr, future, spelling, deSolve @@ -49,7 +48,7 @@ Language: en-US LazyData: true LazyDataCompression: xz Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.0 +RoxygenNote: 7.3.2 Imports: mgcv, dplyr (>= 1.0.9), @@ -70,4 +69,5 @@ Imports: vctrs, scales, english, - waldo + waldo, + stringr diff --git a/NAMESPACE b/NAMESPACE index 69c76b9..42ed990 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -50,6 +50,7 @@ export(abs_age_state) export(abs_age_work_lga) export(abs_age_work_state) export(abs_unabbreviate_states) +export(add_age_partial_sum) export(add_intergenerational) export(add_modelling_features) export(add_offset) @@ -65,8 +66,11 @@ export(apply_vaccination) export(as_conmat_population) export(as_setting_prediction_matrix) export(autoplot) +export(clean_term_names) export(conmat_population) +export(create_age_grid) export(estimate_setting_contacts) +export(extract_term_names) export(extrapolate_polymod) export(fit_setting_contacts) export(fit_single_contact_model) @@ -83,14 +87,19 @@ export(get_polymod_per_capita_household_size) export(get_polymod_population) export(get_polymod_setting_data) export(get_setting_transmission_matrices) +export(gg_age_partial_pred_long) +export(gg_age_partial_sum) +export(gg_age_terms_settings) export(matrix_to_predictions) export(new_age_matrix) export(per_capita_household_size) +export(pivot_longer_age_preds) export(polymod) export(population) export(population_label) export(predict_contacts) export(predict_contacts_1y) +export(predict_individual_terms) export(predict_setting_contacts) export(predictions_to_matrix) export(prepare_population_for_modelling) @@ -99,6 +108,14 @@ export(scaling) export(setting_prediction_matrix) export(transmission_probability_matrix) import(rlang) +importFrom(ggplot2,aes) importFrom(ggplot2,autoplot) +importFrom(ggplot2,coord_fixed) +importFrom(ggplot2,facet_grid) +importFrom(ggplot2,facet_wrap) +importFrom(ggplot2,geom_tile) +importFrom(ggplot2,ggplot) +importFrom(ggplot2,scale_fill_viridis_c) +importFrom(ggplot2,theme_minimal) importFrom(magrittr,"%>%") importFrom(stats,predict) diff --git a/R/partial-prediction-helpers.R b/R/partial-prediction-helpers.R new file mode 100644 index 0000000..6f254bf --- /dev/null +++ b/R/partial-prediction-helpers.R @@ -0,0 +1,270 @@ +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param ages +#' @return +#' @author njtierney +#' @export +create_age_grid <- function(ages) { + ## TODO + ## Wrap this up into a function that generates an age grid data frame + ## with all the terms needed to fit a conmat model + ## (from `fit_single_contact_model.R`) + age_grid <- expand.grid( + age_from = ages, + age_to = ages + ) |> + tibble::as_tibble() |> + # prepare the age data so it has all the right column names + # that are used inside of `fit_single_contact_model()` + # conmat::add_symmetrical_features() |> + add_symmetrical_features() |> + # this ^^^ does the same as the commented part below: + # dplyr::mutate( + # gam_age_offdiag = abs(age_from - age_to), + # gam_age_offdiag_2 = abs(age_from - age_to)^2, + # gam_age_diag_prod = abs(age_from * age_to), + # gam_age_diag_sum = abs(age_from + age_to), + # gam_age_pmax = pmax(age_from, age_to), + # gam_age_pmin = pmin(age_from, age_to) + # ) |> + # This is to add the school_probability and work_probability columns + # that are used inside fit_single_contact_model() when fitting the model. + # conmat::add_modelling_features() + add_modelling_features() + + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param fit_home +#' @return +#' @author njtierney +#' @export +extract_term_names <- function(fit_home) { + + coef_names <- names(fit_home$coefficients) |> + stringr::str_remove_all("\\.[^.]*$") |> + unique() |> + stringr::str_subset("^s\\(") + + coef_names + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param term_names +#' @return +#' @author njtierney +#' @export +clean_term_names <- function(term_names) { + + term_names |> + stringr::str_remove_all("^s\\(gam_age_") |> + stringr::str_remove_all("\\)") + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_grid +#' @param term_names +#' @param term_var_names +#' @return +#' @author njtierney +#' @export +predict_individual_terms <- function(age_grid, fit, term_names, term_var_names) { + + predicted_term <- function(age_grid, fit, term_name, term_var_name){ + predict(object = fit, + newdata = age_grid, + type = "terms", + terms = term_name) |> + tibble::as_tibble() |> + setNames(glue::glue("pred_{term_var_name}")) + } + + all_predicted_terms <- purrr::map2_dfc( + .x = term_names, + .y = term_var_names, + .f = function(.x, .y){ + predicted_term(age_grid = age_grid, + fit = fit, + term_name = .x, + term_var_name = .y) + } + ) + + dplyr::bind_cols(age_grid, all_predicted_terms) + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_predictions_all_settings +#' @return +#' @author njtierney +#' @importFrom ggplot2 ggplot aes geom_tile facet_grid coord_fixed scale_fill_viridis_c theme_minimal facet_wrap +#' @export +gg_age_terms_settings <- function(age_predictions_all_settings) { + + pred_all_setting_longer <- age_predictions_all_settings |> + tidyr::pivot_longer( + dplyr::starts_with("pred"), + names_to = "pred", + values_to = "value", + names_prefix = "pred_" + ) |> + dplyr::select(age_from, + age_to, + value, + pred, + setting) + + facet_age_plot <- function(data, place){ + data |> + dplyr::filter(setting == place) |> + ggplot(aes(x = age_from, + y = age_to, + fill = value)) + + geom_tile() + + facet_grid(setting~pred, + switch = "y") + + coord_fixed() + + } + + p_home <- facet_age_plot(pred_all_setting_longer, "home") + + scale_fill_viridis_c() + p_work <- facet_age_plot(pred_all_setting_longer, "work") + + scale_fill_viridis_c(option = "rocket") + p_school <- facet_age_plot(pred_all_setting_longer, "school") + + scale_fill_viridis_c(option = "plasma") + p_other <- facet_age_plot(pred_all_setting_longer, "other") + + scale_fill_viridis_c(option = "mako") + + patchwork::wrap_plots( + p_home, + p_work, + p_school, + p_other, + nrow = 4 + ) + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_predictions +#' @return +#' @author njtierney +#' @export +pivot_longer_age_preds <- function(age_predictions) { + age_predictions |> + tidyr::pivot_longer( + dplyr::starts_with("pred"), + names_to = "pred", + values_to = "value", + names_prefix = "pred_" + ) +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_predictions_long +#' @return +#' @author njtierney +#' @export +gg_age_partial_pred_long <- function(age_predictions_long) { + + age_predictions_long %>% + ggplot( + aes( + x = age_from, + y = age_to, + group = pred, + fill = value + ) + ) + + facet_wrap(~pred, ncol = 1) + + geom_tile() + + scale_fill_viridis_c( + name = "log(contacts)" + ) + + theme_minimal() + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_predictions_long +#' @return +#' @author njtierney +#' @export +add_age_partial_sum <- function(age_predictions_long) { + + age_partial_sum <- age_predictions_long |> + dplyr::group_by(age_from, + age_to) |> + dplyr::summarise( + gam_total_term = exp(sum(value)), + .groups = "drop" + ) + + age_partial_sum + +} + +#' .. content for \description{} (no empty lines) .. +#' +#' .. content for \details{} .. +#' +#' @title +#' @param age_predictions_long_sum +#' @return +#' @author njtierney +#' @export +gg_age_partial_sum <- function(age_predictions_long_sum) { + + ggplot( + data = age_predictions_long_sum, + aes( + x = age_from, + y = age_to, + fill = gam_total_term + ) + ) + + geom_tile() + + scale_fill_viridis_c( + name = "Num.\ncontacts", + limits = c(0, 12) + ) + + theme_minimal() + +} + diff --git a/paper/paper.Rmd b/paper/paper.Rmd index e9ed020..7a6e754 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -54,6 +54,14 @@ knitr::opts_chunk$set(comment = "#>", options(tinytex.clean = FALSE) ``` +```{r} +#| label: libraries +library(purrr) +library(patchwork) +library(conmat) +library(ggplot2) +``` + # Summary This article introduces `conmat`, an R package which generates synthetic contact matrices. Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. @@ -85,8 +93,7 @@ The `conmat` package was developed to fill the specific need of creating contact We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: ```{r} -#| label: load-conmat -library(conmat) +#| label: abs-age tasmania <- abs_age_state("TAS") tasmania ``` @@ -137,12 +144,75 @@ $\text{min}(i, j)$. The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix). ```{r} -# Show partial dep plot of the six main covariates +#| label: partial-plots +#| echo: FALSE +fit_home <- polymod_setting_models$home +age_grid <- create_age_grid(ages = 1:99) +term_names <- extract_term_names(fit_home) +term_var_names <- clean_term_names(term_names) +age_predictions <- predict_individual_terms( + age_grid = age_grid, + fit = fit_home, + term_names = term_names, + term_var_names = term_var_names +) + +age_predictions_all_settings <- map_dfr( + .x = polymod_setting_models, + .f = function(x) { + predict_individual_terms( + age_grid = age_grid, + fit = x, + term_names = term_names, + term_var_names = term_var_names + ) + }, + .id = "setting" +) + +plot_age_term_settings <- gg_age_terms_settings(age_predictions_all_settings) +age_predictions_long <- pivot_longer_age_preds(age_predictions) +# this is a figure we want +plot_age_predictions_long <- gg_age_partial_pred_long(age_predictions_long) + + coord_equal() + + labs(x = "Age from", + y = "Age to") + +age_predictions_long_sum <- add_age_partial_sum(age_predictions_long) +# this is a figure we want +plot_age_predictions_sum <- gg_age_partial_sum(age_predictions_long_sum) + coord_equal() + + labs(x = "Age from", + y = "Age to") +# this is a figure we want +``` + + +```{r} +#| echo: FALSE +#| fig.height: 8 +plot_all_terms_sum <- plot_age_predictions_long + + plot_age_predictions_sum + + plot_layout(design = " + A + A + A + A + A + A + A + B + ") + + plot_annotation( + tag_levels = "A" + ) + + +plot_all_terms_sum ``` Note that these partial dependency plots are on the log scale. -When the six covariates are added up together for each setting (in other words, each model) and exponentiated, they show the following patterns: +When the six covariates are added up together for each setting (in other words, each model), then exponentiated, they show the following patterns: ```{r} # Show combined partial dep plot (i.e. sum of the partial dependencies for all six covariates) in each setting: home, school, work and other diff --git a/paper/paper.aux b/paper/paper.aux index 8ee7b56..29624cf 100644 --- a/paper/paper.aux +++ b/paper/paper.aux @@ -3,40 +3,40 @@ \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \providecommand\BKM@entry[2]{} -\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={149}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} -\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={180}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} +\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={157}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} +\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={188}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} \@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } \newlabel{summary}{{}{1}{Summary}{section*.1}{}} \@writefile{toc}{\contentsline {section}{Statement of need}{1}{section*.2}\protected@file@percent } \newlabel{statement-of-need}{{}{1}{Statement of need}{section*.2}{}} -\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={218}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={226}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} \@writefile{toc}{\contentsline {section}{Example}{2}{section*.3}\protected@file@percent } \newlabel{example}{{}{2}{Example}{section*.3}{}} -\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={326}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} -\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.4}\protected@file@percent } -\newlabel{implementation}{{}{3}{Implementation}{section*.4}{}} -\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={340}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} -\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={398}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={405}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} +\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={332}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} +\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={346}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} +\@writefile{toc}{\contentsline {section}{Implementation}{4}{section*.4}\protected@file@percent } +\newlabel{implementation}{{}{4}{Implementation}{section*.4}{}} \@writefile{toc}{\contentsline {subsection}{Model fitting}{4}{section*.5}\protected@file@percent } \newlabel{model-fitting}{{}{4}{Model fitting}{section*.5}{}} -\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{4}{section*.6}\protected@file@percent } -\newlabel{conclusions-and-future-directions}{{}{4}{Conclusions and future directions}{section*.6}{}} -\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{4}{section*.7}\protected@file@percent } -\newlabel{strengths-weaknesses}{{}{4}{Strengths + Weaknesses}{section*.7}{}} -\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={433}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} -\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={446}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={475}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} +\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={401}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={408}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} +\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={436}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} +\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={449}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} +\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{6}{section*.6}\protected@file@percent } +\newlabel{conclusions-and-future-directions}{{}{6}{Conclusions and future directions}{section*.6}{}} +\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{6}{section*.7}\protected@file@percent } +\newlabel{strengths-weaknesses}{{}{6}{Strengths + Weaknesses}{section*.7}{}} +\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{6}{section*.8}\protected@file@percent } +\newlabel{meaning-of-the-work}{{}{6}{Meaning of the work}{section*.8}{}} +\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{6}{section*.9}\protected@file@percent } +\newlabel{unanswered-questions-future-directions}{{}{6}{Unanswered questions / Future Directions}{section*.9}{}} +\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={478}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} \bibcite{ref-socialmixr}{\citeproctext } \bibcite{ref-comix}{\citeproctext } \bibcite{ref-mossong2008}{\citeproctext } \bibcite{ref-prem2017}{\citeproctext } \bibcite{ref-prem2021}{\citeproctext } -\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{5}{section*.8}\protected@file@percent } -\newlabel{meaning-of-the-work}{{}{5}{Meaning of the work}{section*.8}{}} -\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{5}{section*.9}\protected@file@percent } -\newlabel{unanswered-questions-future-directions}{{}{5}{Unanswered questions / Future Directions}{section*.9}{}} -\@writefile{toc}{\contentsline {section}{References}{5}{section*.10}\protected@file@percent } -\newlabel{references}{{}{5}{References}{section*.10}{}} -\newlabel{refs}{{}{5}{References}{section*.11}{}} -\gdef \@abspage@last{6} +\@writefile{toc}{\contentsline {section}{References}{7}{section*.10}\protected@file@percent } +\newlabel{references}{{}{7}{References}{section*.10}{}} +\newlabel{refs}{{}{7}{References}{section*.11}{}} +\gdef \@abspage@last{7} diff --git a/paper/paper.log b/paper/paper.log index 06c012b..9af8d6f 100644 --- a/paper/paper.log +++ b/paper/paper.log @@ -1,14 +1,14 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.26) 14 AUG 2024 11:31 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.28) 16 AUG 2024 15:38 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **paper.tex (./paper.tex -LaTeX2e <2024-06-01> patch level 1 +LaTeX2e <2024-06-01> patch level 2 L3 programming layer <2024-05-27> -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls Document Class: article 2024/02/08 v1.4n Standard LaTeX document class -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) ) \c@part=\count194 @@ -22,20 +22,20 @@ File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) \abovecaptionskip=\skip49 \belowcaptionskip=\skip50 \bibindent=\dimen141 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty Package: amsmath 2024/05/23 v2.17q AMS math features \@mathmargin=\skip51 For additional information on amsmath, use the `?' option. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty Package: amstext 2021/08/26 v2.01 AMS text -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks17 \ex@=\dimen142 -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols \pmbraise@=\dimen143 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2022/04/08 v2.04 operator names ) \inf@bad=\count268 @@ -85,26 +85,26 @@ LaTeX Info: Redefining \Relbar on input line 970. \mathdisplay@stack=\toks21 LaTeX Info: Redefining \[ on input line 2953. LaTeX Info: Redefining \] on input line 2954. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty Package: amssymb 2013/01/14 v3.01 AMS font symbols -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support \symAMSa=\mathgroup4 \symAMSb=\mathgroup5 LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty Package: iftex 2022/02/03 v1.0f TeX engine tests -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty Package: fontenc 2021/04/29 v2.0v Standard LaTeX package -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2024/02/08 v1.3d Input encoding file \inpenc@prehook=\toks22 \inpenc@posthook=\toks23 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty Package: textcomp 2024/04/24 v2.1b Standard LaTeX package -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts LaTeX Font Info: Overwriting symbol font `operators' in version `normal' (Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. @@ -138,14 +138,14 @@ LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' (Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' (Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verbatim -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty Package: microtype 2024/03/29 v3.1b Micro-typographical refinements (RS) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2022/05/29 v1.15 key=value parser (DPC) \KV@toks@=\toks24 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) \etb@tempcnta=\count280 ) @@ -160,32 +160,32 @@ LaTeX Info: Redefining \textls on input line 1392. \MT@outer@kern=\dimen151 LaTeX Info: Redefining \textmicrotypecontext on input line 2013. \MT@listname@count=\count282 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def File: microtype-pdftex.def 2024/03/29 v3.1b Definitions specific to pdftex (RS) LaTeX Info: Redefining \lsstyle on input line 902. LaTeX Info: Redefining \lslig on input line 902. \MT@outer@space=\skip54 ) Package microtype Info: Loading configuration file microtype.cfg. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg File: microtype.cfg 2024/03/29 v3.1b microtype main configuration file (RS) -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -))) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty +))) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg File: color.cfg 2016/01/02 v1.6 sample color configuration ) Package xcolor Info: Driver file: pdftex.def on input line 274. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. Package xcolor Info: Model `RGB' extended on input line 1366. @@ -195,9 +195,9 @@ Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty Package: geometry 2020/01/02 v5.9 Page Geometry -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. ) \Gm@cnth=\count283 @@ -212,7 +212,7 @@ Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. \Gm@layouthoffset=\dimen158 \Gm@layoutvoffset=\dimen159 \Gm@dimlist=\toks27 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \FV@CodeLineNo=\count286 \FV@InFile=\read2 @@ -220,20 +220,20 @@ Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \c@FancyVerbLine=\count287 \FV@StepNumber=\count288 \FV@OutFile=\write3 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks \OuterFrameSep=\skip55 \fb@frw=\dimen160 \fb@frh=\dimen161 \FrameRule=\dimen162 \FrameSep=\dimen163 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty Package: graphics 2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty Package: trig 2023/12/02 v1.11 sin cos tan (DPC) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) Package graphics Info: Driver file: pdftex.def on input line 106. @@ -241,9 +241,10 @@ Package graphics Info: Driver file: pdftex.def on input line 106. \Gin@req@height=\dimen164 \Gin@req@width=\dimen165 ) +\pandoc@box=\box56 \cslhangindent=\skip56 \csllabelwidth=\skip57 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) \calc@Acount=\count289 \calc@Bcount=\count290 @@ -255,47 +256,47 @@ LaTeX Info: Redefining \setlength on input line 80. LaTeX Info: Redefining \addtolength on input line 81. \calc@Ccount=\count291 \calc@Cskip=\skip60 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty Package: hyperref 2024-05-23 v7.01i Hypertext links for LaTeX -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) ) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty +)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) \c@section@level=\count292 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO) ) \@linkdim=\dimen168 \Hy@linkcounter=\count293 \Hy@pagecounter=\count294 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def File: pd1enc.def 2024-05-23 v7.01i Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) ) \Hy@SavedSpaceFactor=\count295 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def File: puenc.def 2024-05-23 v7.01i Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU @@ -309,15 +310,15 @@ Package hyperref Info: Backreferencing OFF on input line 4177. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. Package hyperref Info: Bookmarks ON on input line 4424. \c@Hy@tempcnt=\count296 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip18 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) LaTeX Info: Redefining \url on input line 4763. \XeTeXLinkMargin=\dimen169 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) )) \Fld@menulength=\count297 @@ -330,7 +331,7 @@ Package hyperref Info: backreferencing OFF on input line 6057. Package hyperref Info: Link coloring OFF on input line 6062. Package hyperref Info: Link coloring with OCG OFF on input line 6067. Package hyperref Info: PDF/A mode OFF on input line 6072. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi package with kernel methods ) @@ -339,76 +340,76 @@ package with kernel methods \c@Hfootnote=\count300 ) Package hyperref Info: Driver (autodetected): hpdftex. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def File: hpdftex.def 2024-05-23 v7.01i Hyperref driver for pdfTeX -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package with kernel methods ) \Fld@listcount=\count301 \c@bookmark@seq@number=\count302 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) ) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. ) \Hy@SectionHShift=\skip61 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO) \BKM@id=\count303 )) -LaTeX Font Info: Trying to load font information for T1+lmr on input line 146. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd +LaTeX Font Info: Trying to load font information for T1+lmr on input line 145. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX) \l__color_backend_stack_int=\count304 -\l__pdf_internal_box=\box56 +\l__pdf_internal_box=\box57 ) (./paper.aux) \openout1 = `paper.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Info: Redefining \microtypecontext on input line 146. -Package microtype Info: Applying patch `item' on input line 146. -Package microtype Info: Applying patch `toc' on input line 146. -Package microtype Info: Applying patch `eqnum' on input line 146. -Package microtype Info: Applying patch `footnote' on input line 146. -Package microtype Info: Applying patch `verbatim' on input line 146. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 145. +LaTeX Font Info: ... okay on input line 145. +LaTeX Info: Redefining \microtypecontext on input line 145. +Package microtype Info: Applying patch `item' on input line 145. +Package microtype Info: Applying patch `toc' on input line 145. +Package microtype Info: Applying patch `eqnum' on input line 145. +Package microtype Info: Applying patch `footnote' on input line 145. +Package microtype Info: Applying patch `verbatim' on input line 145. Package microtype Info: Generating PDF output. Package microtype Info: Character protrusion enabled (level 2). Package microtype Info: Using protrusion set `basicmath'. Package microtype Info: Automatic font expansion enabled (level 2), (microtype) stretch: 20, shrink: 20, step: 1, non-selected. Package microtype Info: Using default expansion set `alltext-nott'. -LaTeX Info: Redefining \showhyphens on input line 146. +LaTeX Info: Redefining \showhyphens on input line 145. Package microtype Info: No adjustment of tracking. Package microtype Info: No adjustment of interword spacing. Package microtype Info: No adjustment of character kerning. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live )) *geometry* driver: auto-detecting @@ -445,106 +446,116 @@ File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live * \@reversemarginfalse * (1in=72.27pt=25.4mm, 1cm=28.453pt) -Package hyperref Info: Link coloring OFF on input line 146. -LaTeX Font Info: Trying to load font information for OT1+lmr on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd +Package hyperref Info: Link coloring OFF on input line 145. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OML+lmm on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd +LaTeX Font Info: Trying to load font information for OML+lmm on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMX+lmex on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd +LaTeX Font Info: Trying to load font information for OMX+lmex on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 148. +(Font) <12> on input line 147. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 148. +(Font) <8> on input line 147. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 148. -LaTeX Font Info: Trying to load font information for U+msa on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd +(Font) <6> on input line 147. +LaTeX Font Info: Trying to load font information for U+msa on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) ) -LaTeX Font Info: Trying to load font information for U+msb on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd +LaTeX Font Info: Trying to load font information for U+msb on input line 147. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg +) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) ) -LaTeX Font Info: Trying to load font information for T1+lmtt on input line 151. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 149. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) +LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available +(Font) Font shape `T1/lmtt/b/n' tried instead on input line 150. -[1 -{/Users/mlyd0001/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] -LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available -(Font) Font shape `T1/lmtt/b/n' tried instead on input line 227. +[1 +{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] [2] -LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 309. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd +LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 315. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd File: ts1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) File: paper_files/figure-latex/autoplot-contacts-1.png Graphic file (type png) -Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 324. -(pdftex.def) Requested size: 446.24617pt x 446.24617pt. +Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 330. +(pdftex.def) Requested size: 446.26582pt x 446.24617pt. -[3{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] +[3{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10> on input line 351. +(Font) <10> on input line 357. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <7> on input line 351. +(Font) <7> on input line 357. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <5> on input line 351. +(Font) <5> on input line 357. + +File: paper_files/figure-latex/unnamed-chunk-6-1.png Graphic file (type png) + +Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-6-1.png used on input line 373. +(pdftex.def) Requested size: 446.26582pt x 686.55377pt. + +[4{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] +Overfull \vbox (36.12376pt too high) has occurred while \output is active [] -[4{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] -LaTeX Font Info: Trying to load font information for TS1+lmr on input line 453. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd + + +[5 <./paper_files/figure-latex/unnamed-chunk-6-1.png>] +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 456. +(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -Underfull \hbox (badness 10000) in paragraph at lines 477--478 + +[6] +Underfull \hbox (badness 10000) in paragraph at lines 480--481 []$\T1/lmr/m/n/10 (+20) https : / / www . doherty . edu . au / our -[] work / institute -[] themes / viral -[] infectious -[] diseases / covid -[] 19 / covid -[] 19 -[] [] -[5] - -[6] (./paper.aux) +[7] (./paper.aux) *********** -LaTeX2e <2024-06-01> patch level 1 +LaTeX2e <2024-06-01> patch level 2 L3 programming layer <2024-05-27> *********** ) Here is how much of TeX's memory you used: - 13867 strings out of 475499 - 219460 string characters out of 5774952 + 13879 strings out of 475483 + 219282 string characters out of 5774990 1944905 words of memory out of 5000000 - 36147 multiletter control sequences out of 15000+600000 + 36174 multiletter control sequences out of 15000+600000 618113 words of font info for 142 fonts, out of 8000000 for 9000 36 hyphenation exceptions out of 8191 - 83i,6n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on paper.pdf (6 pages, 506897 bytes). + 83i,5n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on paper.pdf (7 pages, 688141 bytes). PDF statistics: - 173 PDF objects out of 1000 (max. 8388607) - 136 compressed objects within 2 object streams - 25 named destinations out of 1000 (max. 500000) - 32854 words of extra memory for PDF output out of 35830 (max. 10000000) + 181 PDF objects out of 1000 (max. 8388607) + 141 compressed objects within 2 object streams + 26 named destinations out of 1000 (max. 500000) + 32859 words of extra memory for PDF output out of 35830 (max. 10000000) From df2b90f1882ea598da618e49d4fa18f89b4aa10b Mon Sep 17 00:00:00 2001 From: Michael Lydeamore Date: Mon, 19 Aug 2024 10:14:41 +1000 Subject: [PATCH 35/39] Tweak plot layout --- R/partial-prediction-helpers.R | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/R/partial-prediction-helpers.R b/R/partial-prediction-helpers.R index 6f254bf..d8346bd 100644 --- a/R/partial-prediction-helpers.R +++ b/R/partial-prediction-helpers.R @@ -198,17 +198,23 @@ pivot_longer_age_preds <- function(age_predictions) { #' @author njtierney #' @export gg_age_partial_pred_long <- function(age_predictions_long) { + + facet_names <- data.frame( + pred = c("diag_prod", "diag_sum", "offdiag", "offdiag_2", "pmax", "pmin"), + math_name = c("i x j", "i + j", "|i - j|", "|i - j|^2", "max(i, j)", "min(i, j)") + ) age_predictions_long %>% + dplyr::left_join(facet_names, by = dplyr::join_by("pred")) %>% ggplot( aes( x = age_from, y = age_to, - group = pred, + group = math_name, fill = value ) ) + - facet_wrap(~pred, ncol = 1) + + facet_wrap(~math_name, ncol = 3) + geom_tile() + scale_fill_viridis_c( name = "log(contacts)" @@ -262,6 +268,7 @@ gg_age_partial_sum <- function(age_predictions_long_sum) { geom_tile() + scale_fill_viridis_c( name = "Num.\ncontacts", + option = "magma", limits = c(0, 12) ) + theme_minimal() From ac32d5f8dc5396e603d7d39c9e3ddd2d91e77699 Mon Sep 17 00:00:00 2001 From: Michael Lydeamore Date: Mon, 19 Aug 2024 10:14:55 +1000 Subject: [PATCH 36/39] Finish up text around partial predictives, clean up --- paper/paper.Rmd | 83 +++++------- paper/paper.aux | 40 +++--- paper/paper.log | 313 +++++++++++++++++++++---------------------- paper/references.bib | 24 +++- 4 files changed, 229 insertions(+), 231 deletions(-) diff --git a/paper/paper.Rmd b/paper/paper.Rmd index 7a6e754..0391360 100644 --- a/paper/paper.Rmd +++ b/paper/paper.Rmd @@ -56,6 +56,8 @@ options(tinytex.clean = FALSE) ```{r} #| label: libraries +#| echo: FALSE + library(purrr) library(patchwork) library(conmat) @@ -64,15 +66,15 @@ library(ggplot2) # Summary -This article introduces `conmat`, an R package which generates synthetic contact matrices. Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. +Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. `conmat` is an R package which generates synthetic contact matrices for arbitrary input demography, ready for use in infectious diseases modelling. There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. -The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own data. This means users can generate synthetic contact matrices for any region, with any contact survey, provided they have the relevant data. +The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own demographic data. This means users can generate synthetic contact matrices for any region, with any contact survey. -We demonstrate a use-case for `conmat` by creating contact matrices for a state (i.e. at the sub-national level) in Australia. +We demonstrate a use-case for `conmat` by creating contact matrices for sub-national level (in this case, a state) in Australia. -For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of country names by the UN, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). +For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of countries from the United Nations, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). # Statement of need @@ -80,7 +82,7 @@ Infectious diseases like influenza and COVID19 spread via social contact. If we Empirical estimates of social contact are provided by social contact surveys. These provide samples of the frequency and type of social contact across different settings (home, work, school, other). -An prominent contact survey is the "POLYMOD" study by @mossong2008, which covered 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. +An prominent contact survey is the "POLYMOD" study by @mossong2008, which surveyed 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. @@ -120,7 +122,7 @@ autoplot(tasmania_contact) The overall approach of `conmat` has two parts: 1) Fit a model to predict individual contact rate, using an existing contact survey -2) Predict a contact matrix using age population data +2) Predict a synthetic contact matrix using age population data ## Model fitting @@ -131,7 +133,7 @@ The model has six covariates to explain six key features of the relationship bet and two optional covariates for attendance at school or work. The two optional covariates are included depending on which setting the model is fitted for. -Each cell in the resulting contact matrix, indexed $i$, $j$, is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. +Each cell in the resulting contact matrix, indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. The six covariates are $|i-j|$, @@ -141,11 +143,13 @@ $i \times j$, $\text{max}(i, j)$ and $\text{min}(i, j)$. -The six key features of the relationship between the age groups, represented by the six covariates, are displayed in the figure below. These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix). +These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix).The key features of the relationship between the age groups, represented by the six covariates, are displayed in \@ref(fig:partial-plots) for the home setting. The $|i-j|$ term gives the strong diagonal, modelling people generally living with similar age people, and the $\max(i,j)$ and $\min(i,j)$ terms give the intergenerational effect of parents and grandparents with children. ```{r} #| label: partial-plots #| echo: FALSE +#| fig.cap: "Partial predictive plot (A) and overall synthetic contact matrix (B) for the Poisson GAM fitted to the POLYMOD contact survey in the home setting. The strong diagonal elements, and parents/grandparents interacting with children result in the classic 'diagonal with wings' shape." + fit_home <- polymod_setting_models$home age_grid <- create_age_grid(ages = 1:99) term_names <- extract_term_names(fit_home) @@ -172,35 +176,40 @@ age_predictions_all_settings <- map_dfr( plot_age_term_settings <- gg_age_terms_settings(age_predictions_all_settings) age_predictions_long <- pivot_longer_age_preds(age_predictions) -# this is a figure we want plot_age_predictions_long <- gg_age_partial_pred_long(age_predictions_long) + coord_equal() + labs(x = "Age from", - y = "Age to") + y = "Age to") + + theme( + legend.position = "bottom" + ) + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + + expand_limits(x = c(0, 100), y = c(0, 100)) age_predictions_long_sum <- add_age_partial_sum(age_predictions_long) -# this is a figure we want plot_age_predictions_sum <- gg_age_partial_sum(age_predictions_long_sum) + coord_equal() + labs(x = "Age from", - y = "Age to") -# this is a figure we want + y = "Age to") + + theme( + legend.position = "bottom" + ) + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + + expand_limits(x = c(0, 100), y = c(0, 100)) ``` ```{r} #| echo: FALSE -#| fig.height: 8 + plot_all_terms_sum <- plot_age_predictions_long + plot_age_predictions_sum + plot_layout(design = " - A - A - A - A - A - A - A - B + AAAABBBB + AAAABBBB + AAAABBBB + AAAABBBB ") + plot_annotation( tag_levels = "A" @@ -210,43 +219,23 @@ plot_all_terms_sum <- plot_age_predictions_long + plot_all_terms_sum ``` -Note that these partial dependency plots are on the log scale. - -When the six covariates are added up together for each setting (in other words, each model), then exponentiated, they show the following patterns: - -```{r} -# Show combined partial dep plot (i.e. sum of the partial dependencies for all six covariates) in each setting: home, school, work and other -``` - -In other words, the six covariates above provide patterns that are useful in modelling the different settings, -and correspond with real-life situations of how contact would look like. -In the home setting for example, [ #TODO describe how children interact with parents and elderly generation, grandparents ]. -When the covariates for school and work are added, these covariates also provide patterns that correspond with real-life situations. -https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html -In the school setting, children tend to contact other children in the same age groups as them. -In the work setting, there are no contacts with children under the age of ten and minimal contact with adults beyond retirement age. +Visualising the partial predictive plots for other settings (school, work and other), shows patterns that correspond with real-life situations are observed. A full visualisation pipeline is available at https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html # Conclusions and future directions The `conmat` software provides a flexible interface to generating synthetic contact matrices using population data and contact surveys. These contact matrices can then be used in infectious disease modelling and surveillance. -## Strengths + Weaknesses - The main strength of `conmat` is its interface requiring only age population data to create a synthetic contact matrix. Current approaches provide only a selection of country level contact matrices. This software can predict to arbitrary demography, such as sub-national, or simulated populations. We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. -The model structure (covariates?) provided in conmat was designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. +The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. -## Meaning of the work - Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. -This work was used as a key input into several models for COVID19 in Australia and contributed directly to decisions around vaccination policy. - -## Unanswered questions / Future Directions +This work was used as a key input into several models for COVID-19 transmission and control in Australia and contributed to decisions around vaccination policy [@DohertyModelling]. Some future directions for this software include: @@ -260,7 +249,3 @@ Some future directions for this software include: Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. # References - -https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling - -Identifying vulnerable groups and predicting how diseases spread are essential for informed public health decision-making. Infectious diseases such as influenza and coronavirus spread through human-to-human interactions, or in other words, "social contact". Quantifying social contact and its patterns can provide critical insights into how these diseases spread. [ Is this circular? ] / and how best to mitigate the spread of these diseases. diff --git a/paper/paper.aux b/paper/paper.aux index 29624cf..f5e369f 100644 --- a/paper/paper.aux +++ b/paper/paper.aux @@ -3,40 +3,32 @@ \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \providecommand\BKM@entry[2]{} -\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={157}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} -\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={188}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} +\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={149}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} +\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={181}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} \@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } \newlabel{summary}{{}{1}{Summary}{section*.1}{}} \@writefile{toc}{\contentsline {section}{Statement of need}{1}{section*.2}\protected@file@percent } \newlabel{statement-of-need}{{}{1}{Statement of need}{section*.2}{}} -\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={226}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} +\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={219}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} \@writefile{toc}{\contentsline {section}{Example}{2}{section*.3}\protected@file@percent } \newlabel{example}{{}{2}{Example}{section*.3}{}} -\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={332}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} -\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={346}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} -\@writefile{toc}{\contentsline {section}{Implementation}{4}{section*.4}\protected@file@percent } -\newlabel{implementation}{{}{4}{Implementation}{section*.4}{}} +\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={324}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} +\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={338}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} +\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.4}\protected@file@percent } +\newlabel{implementation}{{}{3}{Implementation}{section*.4}{}} +\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={377}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} \@writefile{toc}{\contentsline {subsection}{Model fitting}{4}{section*.5}\protected@file@percent } \newlabel{model-fitting}{{}{4}{Model fitting}{section*.5}{}} -\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={401}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={408}}{5C3337365C3337375C303030535C303030745C303030725C303030655C3030306E5C303030675C303030745C303030685C303030735C3030305C3034305C3030302B5C3030305C3034305C303030575C303030655C303030615C3030306B5C3030306E5C303030655C303030735C303030735C303030655C30303073} -\BKM@entry{id=8,dest={73656374696F6E2A2E38},srcline={436}}{5C3337365C3337375C3030304D5C303030655C303030615C3030306E5C303030695C3030306E5C303030675C3030305C3034305C3030306F5C303030665C3030305C3034305C303030745C303030685C303030655C3030305C3034305C303030775C3030306F5C303030725C3030306B} -\BKM@entry{id=9,dest={73656374696F6E2A2E39},srcline={449}}{5C3337365C3337375C303030555C3030306E5C303030615C3030306E5C303030735C303030775C303030655C303030725C303030655C303030645C3030305C3034305C303030715C303030755C303030655C303030735C303030745C303030695C3030306F5C3030306E5C303030735C3030305C3034305C3030302F5C3030305C3034305C303030465C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030445C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{6}{section*.6}\protected@file@percent } -\newlabel{conclusions-and-future-directions}{{}{6}{Conclusions and future directions}{section*.6}{}} -\@writefile{toc}{\contentsline {subsection}{Strengths + Weaknesses}{6}{section*.7}\protected@file@percent } -\newlabel{strengths-weaknesses}{{}{6}{Strengths + Weaknesses}{section*.7}{}} -\@writefile{toc}{\contentsline {subsection}{Meaning of the work}{6}{section*.8}\protected@file@percent } -\newlabel{meaning-of-the-work}{{}{6}{Meaning of the work}{section*.8}{}} -\@writefile{toc}{\contentsline {subsection}{Unanswered questions / Future Directions}{6}{section*.9}\protected@file@percent } -\newlabel{unanswered-questions-future-directions}{{}{6}{Unanswered questions / Future Directions}{section*.9}{}} -\BKM@entry{id=10,dest={73656374696F6E2A2E3130},srcline={478}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} +\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{4}{section*.6}\protected@file@percent } +\newlabel{conclusions-and-future-directions}{{}{4}{Conclusions and future directions}{section*.6}{}} +\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={448}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} \bibcite{ref-socialmixr}{\citeproctext } \bibcite{ref-comix}{\citeproctext } +\bibcite{ref-DohertyModelling}{\citeproctext } \bibcite{ref-mossong2008}{\citeproctext } \bibcite{ref-prem2017}{\citeproctext } \bibcite{ref-prem2021}{\citeproctext } -\@writefile{toc}{\contentsline {section}{References}{7}{section*.10}\protected@file@percent } -\newlabel{references}{{}{7}{References}{section*.10}{}} -\newlabel{refs}{{}{7}{References}{section*.11}{}} -\gdef \@abspage@last{7} +\newlabel{references}{{}{5}{References}{section*.7}{}} +\@writefile{toc}{\contentsline {section}{References}{5}{section*.7}\protected@file@percent } +\newlabel{refs}{{}{5}{References}{section*.8}{}} +\gdef \@abspage@last{6} diff --git a/paper/paper.log b/paper/paper.log index 9af8d6f..422735f 100644 --- a/paper/paper.log +++ b/paper/paper.log @@ -1,14 +1,14 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.28) 16 AUG 2024 15:38 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.26) 19 AUG 2024 10:13 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **paper.tex (./paper.tex -LaTeX2e <2024-06-01> patch level 2 +LaTeX2e <2024-06-01> patch level 1 L3 programming layer <2024-05-27> -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls Document Class: article 2024/02/08 v1.4n Standard LaTeX document class -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) ) \c@part=\count194 @@ -22,20 +22,20 @@ File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) \abovecaptionskip=\skip49 \belowcaptionskip=\skip50 \bibindent=\dimen141 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty Package: amsmath 2024/05/23 v2.17q AMS math features \@mathmargin=\skip51 For additional information on amsmath, use the `?' option. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty Package: amstext 2021/08/26 v2.01 AMS text -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks17 \ex@=\dimen142 -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols \pmbraise@=\dimen143 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2022/04/08 v2.04 operator names ) \inf@bad=\count268 @@ -85,26 +85,26 @@ LaTeX Info: Redefining \Relbar on input line 970. \mathdisplay@stack=\toks21 LaTeX Info: Redefining \[ on input line 2953. LaTeX Info: Redefining \] on input line 2954. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty Package: amssymb 2013/01/14 v3.01 AMS font symbols -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support \symAMSa=\mathgroup4 \symAMSb=\mathgroup5 LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty Package: iftex 2022/02/03 v1.0f TeX engine tests -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty Package: fontenc 2021/04/29 v2.0v Standard LaTeX package -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2024/02/08 v1.3d Input encoding file \inpenc@prehook=\toks22 \inpenc@posthook=\toks23 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty Package: textcomp 2024/04/24 v2.1b Standard LaTeX package -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts LaTeX Font Info: Overwriting symbol font `operators' in version `normal' (Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. @@ -138,14 +138,14 @@ LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' (Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' (Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verbatim -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty Package: microtype 2024/03/29 v3.1b Micro-typographical refinements (RS) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2022/05/29 v1.15 key=value parser (DPC) \KV@toks@=\toks24 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) \etb@tempcnta=\count280 ) @@ -160,32 +160,32 @@ LaTeX Info: Redefining \textls on input line 1392. \MT@outer@kern=\dimen151 LaTeX Info: Redefining \textmicrotypecontext on input line 2013. \MT@listname@count=\count282 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def File: microtype-pdftex.def 2024/03/29 v3.1b Definitions specific to pdftex (RS) LaTeX Info: Redefining \lsstyle on input line 902. LaTeX Info: Redefining \lslig on input line 902. \MT@outer@space=\skip54 ) Package microtype Info: Loading configuration file microtype.cfg. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg File: microtype.cfg 2024/03/29 v3.1b microtype main configuration file (RS) -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -))) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty +))) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg File: color.cfg 2016/01/02 v1.6 sample color configuration ) Package xcolor Info: Driver file: pdftex.def on input line 274. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. Package xcolor Info: Model `RGB' extended on input line 1366. @@ -195,9 +195,9 @@ Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty Package: geometry 2020/01/02 v5.9 Page Geometry -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. ) \Gm@cnth=\count283 @@ -212,7 +212,7 @@ Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. \Gm@layouthoffset=\dimen158 \Gm@layoutvoffset=\dimen159 \Gm@dimlist=\toks27 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \FV@CodeLineNo=\count286 \FV@InFile=\read2 @@ -220,20 +220,20 @@ Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) \c@FancyVerbLine=\count287 \FV@StepNumber=\count288 \FV@OutFile=\write3 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks \OuterFrameSep=\skip55 \fb@frw=\dimen160 \fb@frh=\dimen161 \FrameRule=\dimen162 \FrameSep=\dimen163 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty Package: graphics 2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty Package: trig 2023/12/02 v1.11 sin cos tan (DPC) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) Package graphics Info: Driver file: pdftex.def on input line 106. @@ -241,10 +241,9 @@ Package graphics Info: Driver file: pdftex.def on input line 106. \Gin@req@height=\dimen164 \Gin@req@width=\dimen165 ) -\pandoc@box=\box56 \cslhangindent=\skip56 \csllabelwidth=\skip57 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) \calc@Acount=\count289 \calc@Bcount=\count290 @@ -256,47 +255,47 @@ LaTeX Info: Redefining \setlength on input line 80. LaTeX Info: Redefining \addtolength on input line 81. \calc@Ccount=\count291 \calc@Cskip=\skip60 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty Package: hyperref 2024-05-23 v7.01i Hypertext links for LaTeX -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) ) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -)) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty +)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) \c@section@level=\count292 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO) ) \@linkdim=\dimen168 \Hy@linkcounter=\count293 \Hy@pagecounter=\count294 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def File: pd1enc.def 2024-05-23 v7.01i Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) ) \Hy@SavedSpaceFactor=\count295 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def File: puenc.def 2024-05-23 v7.01i Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU @@ -310,15 +309,15 @@ Package hyperref Info: Backreferencing OFF on input line 4177. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. Package hyperref Info: Bookmarks ON on input line 4424. \c@Hy@tempcnt=\count296 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip18 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) LaTeX Info: Redefining \url on input line 4763. \XeTeXLinkMargin=\dimen169 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) )) \Fld@menulength=\count297 @@ -331,7 +330,7 @@ Package hyperref Info: backreferencing OFF on input line 6057. Package hyperref Info: Link coloring OFF on input line 6062. Package hyperref Info: Link coloring with OCG OFF on input line 6067. Package hyperref Info: PDF/A mode OFF on input line 6072. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi package with kernel methods ) @@ -340,76 +339,76 @@ package with kernel methods \c@Hfootnote=\count300 ) Package hyperref Info: Driver (autodetected): hpdftex. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def File: hpdftex.def 2024-05-23 v7.01i Hyperref driver for pdfTeX -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package with kernel methods ) \Fld@listcount=\count301 \c@bookmark@seq@number=\count302 -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) -(/Users/nick/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) ) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. ) \Hy@SectionHShift=\skip61 -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO) \BKM@id=\count303 )) -LaTeX Font Info: Trying to load font information for T1+lmr on input line 145. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd +LaTeX Font Info: Trying to load font information for T1+lmr on input line 146. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX) \l__color_backend_stack_int=\count304 -\l__pdf_internal_box=\box57 +\l__pdf_internal_box=\box56 ) (./paper.aux) \openout1 = `paper.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 145. -LaTeX Font Info: ... okay on input line 145. -LaTeX Info: Redefining \microtypecontext on input line 145. -Package microtype Info: Applying patch `item' on input line 145. -Package microtype Info: Applying patch `toc' on input line 145. -Package microtype Info: Applying patch `eqnum' on input line 145. -Package microtype Info: Applying patch `footnote' on input line 145. -Package microtype Info: Applying patch `verbatim' on input line 145. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 146. +LaTeX Font Info: ... okay on input line 146. +LaTeX Info: Redefining \microtypecontext on input line 146. +Package microtype Info: Applying patch `item' on input line 146. +Package microtype Info: Applying patch `toc' on input line 146. +Package microtype Info: Applying patch `eqnum' on input line 146. +Package microtype Info: Applying patch `footnote' on input line 146. +Package microtype Info: Applying patch `verbatim' on input line 146. Package microtype Info: Generating PDF output. Package microtype Info: Character protrusion enabled (level 2). Package microtype Info: Using protrusion set `basicmath'. Package microtype Info: Automatic font expansion enabled (level 2), (microtype) stretch: 20, shrink: 20, step: 1, non-selected. Package microtype Info: Using default expansion set `alltext-nott'. -LaTeX Info: Redefining \showhyphens on input line 145. +LaTeX Info: Redefining \showhyphens on input line 146. Package microtype Info: No adjustment of tracking. Package microtype Info: No adjustment of interword spacing. Package microtype Info: No adjustment of character kerning. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS) -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live )) *geometry* driver: auto-detecting @@ -446,116 +445,116 @@ File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live * \@reversemarginfalse * (1in=72.27pt=25.4mm, 1cm=28.453pt) -Package hyperref Info: Link coloring OFF on input line 145. -LaTeX Font Info: Trying to load font information for OT1+lmr on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd +Package hyperref Info: Link coloring OFF on input line 146. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OML+lmm on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd +LaTeX Font Info: Trying to load font information for OML+lmm on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -LaTeX Font Info: Trying to load font information for OMX+lmex on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd +LaTeX Font Info: Trying to load font information for OMX+lmex on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 147. +(Font) <12> on input line 148. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 147. +(Font) <8> on input line 148. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 147. -LaTeX Font Info: Trying to load font information for U+msa on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd +(Font) <6> on input line 148. +LaTeX Font Info: Trying to load font information for U+msa on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) ) -LaTeX Font Info: Trying to load font information for U+msb on input line 147. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd +LaTeX Font Info: Trying to load font information for U+msb on input line 148. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) (/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg +) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) ) -LaTeX Font Info: Trying to load font information for T1+lmtt on input line 149. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd +LaTeX Font Info: Trying to load font information for T1+lmtt on input line 153. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) + +[1 + +{/Users/mlyd0001/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available -(Font) Font shape `T1/lmtt/b/n' tried instead on input line 150. +(Font) Font shape `T1/lmtt/b/n' tried instead on input line 228. +Overfull \hbox (144.4932pt too wide) in paragraph at lines 275--275 +[]\T1/lmtt/m/n/10 #> -- Setting Prediction Matrices -----------------------------------------------------------------------------------[] + [] + + +Overfull \hbox (28.99353pt too wide) in paragraph at lines 279--279 +[]\T1/lmtt/m/n/10 #> A list of matrices containing the model predicted contact rate between ages in each setting.[] + [] -[1 -{/Users/nick/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] [2] -LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 315. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd +LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 307. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd File: ts1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) File: paper_files/figure-latex/autoplot-contacts-1.png Graphic file (type png) -Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 330. -(pdftex.def) Requested size: 446.26582pt x 446.24617pt. +Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 322. +(pdftex.def) Requested size: 446.24617pt x 446.24617pt. -[3{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] +[3{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10> on input line 357. +(Font) <10> on input line 349. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <7> on input line 357. +(Font) <7> on input line 349. LaTeX Font Info: External font `lmex10' loaded for size -(Font) <5> on input line 357. - +(Font) <5> on input line 349. + File: paper_files/figure-latex/unnamed-chunk-6-1.png Graphic file (type png) -Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-6-1.png used on input line 373. -(pdftex.def) Requested size: 446.26582pt x 686.55377pt. - - -[4{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/nick/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc}] -Overfull \vbox (36.12376pt too high) has occurred while \output is active [] - +Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-6-1.png used on input line 369. +(pdftex.def) Requested size: 446.25995pt x 274.6215pt. -[5 <./paper_files/figure-latex/unnamed-chunk-6-1.png>] -LaTeX Font Info: Trying to load font information for TS1+lmr on input line 456. -(/Users/nick/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd +[4{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc} <./paper_files/figure-latex/unnamed-chunk-6-1.png>] +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 425. +(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern ) -[6] -Underfull \hbox (badness 10000) in paragraph at lines 480--481 -[]$\T1/lmr/m/n/10 (+20) https : / / www . doherty . edu . au / our -[] work / institute -[] themes / viral -[] infectious -[] diseases / covid -[] 19 / covid -[] 19 -[] - [] - - +[5] -[7] (./paper.aux) +[6] (./paper.aux) *********** -LaTeX2e <2024-06-01> patch level 2 +LaTeX2e <2024-06-01> patch level 1 L3 programming layer <2024-05-27> *********** ) Here is how much of TeX's memory you used: - 13879 strings out of 475483 - 219282 string characters out of 5774990 - 1944905 words of memory out of 5000000 - 36174 multiletter control sequences out of 15000+600000 - 618113 words of font info for 142 fonts, out of 8000000 for 9000 + 13856 strings out of 475499 + 219769 string characters out of 5774952 + 1945905 words of memory out of 5000000 + 36151 multiletter control sequences out of 15000+600000 + 617296 words of font info for 135 fonts, out of 8000000 for 9000 36 hyphenation exceptions out of 8191 - 83i,5n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on paper.pdf (7 pages, 688141 bytes). + 83i,6n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on paper.pdf (6 pages, 615979 bytes). PDF statistics: - 181 PDF objects out of 1000 (max. 8388607) - 141 compressed objects within 2 object streams - 26 named destinations out of 1000 (max. 500000) - 32859 words of extra memory for PDF output out of 35830 (max. 10000000) + 159 PDF objects out of 1000 (max. 8388607) + 122 compressed objects within 2 object streams + 23 named destinations out of 1000 (max. 500000) + 32835 words of extra memory for PDF output out of 35830 (max. 10000000) diff --git a/paper/references.bib b/paper/references.bib index 0215cb5..4a2fc2e 100644 --- a/paper/references.bib +++ b/paper/references.bib @@ -82,4 +82,26 @@ @misc{socialmixr author = {Funk, Sebastian and Willem, Lander and Gruson, Hugo}, month = jan, year = {2018}, -} \ No newline at end of file +} + + @misc{DohertyModelling, + title = {Doherty Institute - Modelling}, + author = {McVernon, Jodie and + McCaw, James and + Tierney, Nicholas and + Miller, Joel and + Lydeamore, Michael and + Golding, Nick and + Shearer, Freya and + Geard, Nic and + Zachreson Cameron and + Baker, Chris and + Walker, Camelia and + Ross, Joshua and + Wood, James and + Conway, Eamon and + Mueller, Ivo}, + urldate = {2024-08-19}, + month = aug, + url={https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling} +} From 4318b4a1a36d68fc08aae0da014ce9bf8dec975b Mon Sep 17 00:00:00 2001 From: njtierney Date: Mon, 19 Aug 2024 13:54:35 +1000 Subject: [PATCH 37/39] use quarto --- .gitignore | 2 + paper/paper.aux | 34 --- paper/paper.log | 560 ------------------------------------------- paper/paper.pdf.md | 339 ++++++++++++++++++++++++++ paper/paper.qmd | 263 ++++++++++++++++++++ paper/references.bib | 16 ++ 6 files changed, 620 insertions(+), 594 deletions(-) delete mode 100644 paper/paper.aux delete mode 100644 paper/paper.log create mode 100644 paper/paper.pdf.md create mode 100644 paper/paper.qmd diff --git a/.gitignore b/.gitignore index 30d3997..fad5789 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ README_cache tests/README.md paper/*.html paper/*.pdf +paper/paper_cache/ +paper/paper_files/ chitra/ \ No newline at end of file diff --git a/paper/paper.aux b/paper/paper.aux deleted file mode 100644 index f5e369f..0000000 --- a/paper/paper.aux +++ /dev/null @@ -1,34 +0,0 @@ -\relax -\providecommand\hyper@newdestlabel[2]{} -\providecommand\HyField@AuxAddToFields[1]{} -\providecommand\HyField@AuxAddToCoFields[2]{} -\providecommand\BKM@entry[2]{} -\BKM@entry{id=1,dest={73656374696F6E2A2E31},srcline={149}}{5C3337365C3337375C303030535C303030755C3030306D5C3030306D5C303030615C303030725C30303079} -\BKM@entry{id=2,dest={73656374696F6E2A2E32},srcline={181}}{5C3337365C3337375C303030535C303030745C303030615C303030745C303030655C3030306D5C303030655C3030306E5C303030745C3030305C3034305C3030306F5C303030665C3030305C3034305C3030306E5C303030655C303030655C30303064} -\@writefile{toc}{\contentsline {section}{Summary}{1}{section*.1}\protected@file@percent } -\newlabel{summary}{{}{1}{Summary}{section*.1}{}} -\@writefile{toc}{\contentsline {section}{Statement of need}{1}{section*.2}\protected@file@percent } -\newlabel{statement-of-need}{{}{1}{Statement of need}{section*.2}{}} -\BKM@entry{id=3,dest={73656374696F6E2A2E33},srcline={219}}{5C3337365C3337375C303030455C303030785C303030615C3030306D5C303030705C3030306C5C30303065} -\@writefile{toc}{\contentsline {section}{Example}{2}{section*.3}\protected@file@percent } -\newlabel{example}{{}{2}{Example}{section*.3}{}} -\BKM@entry{id=4,dest={73656374696F6E2A2E34},srcline={324}}{5C3337365C3337375C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030745C303030695C3030306F5C3030306E} -\BKM@entry{id=5,dest={73656374696F6E2A2E35},srcline={338}}{5C3337365C3337375C3030304D5C3030306F5C303030645C303030655C3030306C5C3030305C3034305C303030665C303030695C303030745C303030745C303030695C3030306E5C30303067} -\@writefile{toc}{\contentsline {section}{Implementation}{3}{section*.4}\protected@file@percent } -\newlabel{implementation}{{}{3}{Implementation}{section*.4}{}} -\BKM@entry{id=6,dest={73656374696F6E2A2E36},srcline={377}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C303030735C3030305C3034305C303030615C3030306E5C303030645C3030305C3034305C303030665C303030755C303030745C303030755C303030725C303030655C3030305C3034305C303030645C303030695C303030725C303030655C303030635C303030745C303030695C3030306F5C3030306E5C30303073} -\@writefile{toc}{\contentsline {subsection}{Model fitting}{4}{section*.5}\protected@file@percent } -\newlabel{model-fitting}{{}{4}{Model fitting}{section*.5}{}} -\@writefile{toc}{\contentsline {section}{Conclusions and future directions}{4}{section*.6}\protected@file@percent } -\newlabel{conclusions-and-future-directions}{{}{4}{Conclusions and future directions}{section*.6}{}} -\BKM@entry{id=7,dest={73656374696F6E2A2E37},srcline={448}}{5C3337365C3337375C303030525C303030655C303030665C303030655C303030725C303030655C3030306E5C303030635C303030655C30303073} -\bibcite{ref-socialmixr}{\citeproctext } -\bibcite{ref-comix}{\citeproctext } -\bibcite{ref-DohertyModelling}{\citeproctext } -\bibcite{ref-mossong2008}{\citeproctext } -\bibcite{ref-prem2017}{\citeproctext } -\bibcite{ref-prem2021}{\citeproctext } -\newlabel{references}{{}{5}{References}{section*.7}{}} -\@writefile{toc}{\contentsline {section}{References}{5}{section*.7}\protected@file@percent } -\newlabel{refs}{{}{5}{References}{section*.8}{}} -\gdef \@abspage@last{6} diff --git a/paper/paper.log b/paper/paper.log deleted file mode 100644 index 422735f..0000000 --- a/paper/paper.log +++ /dev/null @@ -1,560 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=pdflatex 2024.6.26) 19 AUG 2024 10:13 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**paper.tex -(./paper.tex -LaTeX2e <2024-06-01> patch level 1 -L3 programming layer <2024-05-27> -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/article.cls -Document Class: article 2024/02/08 v1.4n Standard LaTeX document class -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2024/02/08 v1.4n Standard LaTeX file (size option) -) -\c@part=\count194 -\c@section=\count195 -\c@subsection=\count196 -\c@subsubsection=\count197 -\c@paragraph=\count198 -\c@subparagraph=\count199 -\c@figure=\count266 -\c@table=\count267 -\abovecaptionskip=\skip49 -\belowcaptionskip=\skip50 -\bibindent=\dimen141 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2024/05/23 v2.17q AMS math features -\@mathmargin=\skip51 -For additional information on amsmath, use the `?' option. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2021/08/26 v2.01 AMS text -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks17 -\ex@=\dimen142 -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen143 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count268 -LaTeX Info: Redefining \frac on input line 233. -\uproot@=\count269 -\leftroot@=\count270 -LaTeX Info: Redefining \overline on input line 398. -LaTeX Info: Redefining \colon on input line 409. -\classnum@=\count271 -\DOTSCASE@=\count272 -LaTeX Info: Redefining \ldots on input line 495. -LaTeX Info: Redefining \dots on input line 498. -LaTeX Info: Redefining \cdots on input line 619. -\Mathstrutbox@=\box52 -\strutbox@=\box53 -LaTeX Info: Redefining \big on input line 721. -LaTeX Info: Redefining \Big on input line 722. -LaTeX Info: Redefining \bigg on input line 723. -LaTeX Info: Redefining \Bigg on input line 724. -\big@size=\dimen144 -LaTeX Font Info: Redeclaring font encoding OML on input line 742. -LaTeX Font Info: Redeclaring font encoding OMS on input line 743. -\macc@depth=\count273 -LaTeX Info: Redefining \bmod on input line 904. -LaTeX Info: Redefining \pmod on input line 909. -LaTeX Info: Redefining \smash on input line 939. -LaTeX Info: Redefining \relbar on input line 969. -LaTeX Info: Redefining \Relbar on input line 970. -\c@MaxMatrixCols=\count274 -\dotsspace@=\muskip17 -\c@parentequation=\count275 -\dspbrk@lvl=\count276 -\tag@help=\toks18 -\row@=\count277 -\column@=\count278 -\maxfields@=\count279 -\andhelp@=\toks19 -\eqnshift@=\dimen145 -\alignsep@=\dimen146 -\tagshift@=\dimen147 -\tagwidth@=\dimen148 -\totwidth@=\dimen149 -\lineht@=\dimen150 -\@envbody=\toks20 -\multlinegap=\skip52 -\multlinetaggap=\skip53 -\mathdisplay@stack=\toks21 -LaTeX Info: Redefining \[ on input line 2953. -LaTeX Info: Redefining \] on input line 2954. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/iftex.sty -Package: iftex 2022/02/03 v1.0f TeX engine tests -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2021/04/29 v2.0v Standard LaTeX package -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2024/02/08 v1.3d Input encoding file -\inpenc@prehook=\toks22 -\inpenc@posthook=\toks23 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/textcomp.sty -Package: textcomp 2024/04/24 v2.1b Standard LaTeX package -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/lmodern.sty -Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts -LaTeX Font Info: Overwriting symbol font `operators' in version `normal' -(Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. -LaTeX Font Info: Overwriting symbol font `letters' in version `normal' -(Font) OML/cmm/m/it --> OML/lmm/m/it on input line 23. -LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' -(Font) OMS/cmsy/m/n --> OMS/lmsy/m/n on input line 24. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' -(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 25. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 26. -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) OML/cmm/b/it --> OML/lmm/b/it on input line 27. -LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' -(Font) OMS/cmsy/b/n --> OMS/lmsy/b/n on input line 28. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' -(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 29. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 31. -LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' -(Font) OT1/cmss/m/n --> OT1/lmss/m/n on input line 32. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' -(Font) OT1/cmr/m/it --> OT1/lmr/m/it on input line 33. -LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' -(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 34. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 35. -LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' -(Font) OT1/cmss/bx/n --> OT1/lmss/bx/n on input line 36. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' -(Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. -LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' -(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/upquote/upquote.sty -Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verbatim -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.sty -Package: microtype 2024/03/29 v3.1b Micro-typographical refinements (RS) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks24 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count280 -) -\MT@toks=\toks25 -\MT@tempbox=\box54 -\MT@count=\count281 -LaTeX Info: Redefining \noprotrusionifhmode on input line 1061. -LaTeX Info: Redefining \leftprotrusion on input line 1062. -\MT@prot@toks=\toks26 -LaTeX Info: Redefining \rightprotrusion on input line 1081. -LaTeX Info: Redefining \textls on input line 1392. -\MT@outer@kern=\dimen151 -LaTeX Info: Redefining \textmicrotypecontext on input line 2013. -\MT@listname@count=\count282 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype-pdftex.def -File: microtype-pdftex.def 2024/03/29 v3.1b Definitions specific to pdftex (RS) -LaTeX Info: Redefining \lsstyle on input line 902. -LaTeX Info: Redefining \lslig on input line 902. -\MT@outer@space=\skip54 -) -Package microtype Info: Loading configuration file microtype.cfg. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/microtype.cfg -File: microtype.cfg 2024/03/29 v3.1b microtype main configuration file (RS) -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/parskip/parskip.sty -Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvoptions/kvoptions.sty -Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty -Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -))) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 274. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. -Package xcolor Info: Model `RGB' extended on input line 1366. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/geometry/geometry.sty -Package: geometry 2020/01/02 v5.9 Page Geometry -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/iftex/ifvtex.sty -Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. -) -\Gm@cnth=\count283 -\Gm@cntv=\count284 -\c@Gm@tempcnt=\count285 -\Gm@bindingoffset=\dimen152 -\Gm@wd@mp=\dimen153 -\Gm@odd@mp=\dimen154 -\Gm@even@mp=\dimen155 -\Gm@layoutwidth=\dimen156 -\Gm@layoutheight=\dimen157 -\Gm@layouthoffset=\dimen158 -\Gm@layoutvoffset=\dimen159 -\Gm@dimlist=\toks27 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) -\FV@CodeLineNo=\count286 -\FV@InFile=\read2 -\FV@TabBox=\box55 -\c@FancyVerbLine=\count287 -\FV@StepNumber=\count288 -\FV@OutFile=\write3 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/framed/framed.sty -Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks -\OuterFrameSep=\skip55 -\fb@frw=\dimen160 -\fb@frh=\dimen161 -\FrameRule=\dimen162 -\FrameSep=\dimen163 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2023/12/02 v1.11 sin cos tan (DPC) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 106. -) -\Gin@req@height=\dimen164 -\Gin@req@width=\dimen165 -) -\cslhangindent=\skip56 -\csllabelwidth=\skip57 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/tools/calc.sty -Package: calc 2023/07/08 v4.3 Infix arithmetic (KKT,FJ) -\calc@Acount=\count289 -\calc@Bcount=\count290 -\calc@Adimen=\dimen166 -\calc@Bdimen=\dimen167 -\calc@Askip=\skip58 -\calc@Bskip=\skip59 -LaTeX Info: Redefining \setlength on input line 80. -LaTeX Info: Redefining \addtolength on input line 81. -\calc@Ccount=\count291 -\calc@Cskip=\skip60 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bookmark.sty -Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2024-05-23 v7.01i Hypertext links for LaTeX -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdfescape/pdfescape.sty -Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/infwarerr/infwarerr.sty -Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) -) -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -)) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hycolor/hycolor.sty -Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/refcount/refcount.sty -Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) -) -\c@section@level=\count292 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/stringenc/stringenc.sty -Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO) -) -\@linkdim=\dimen168 -\Hy@linkcounter=\count293 -\Hy@pagecounter=\count294 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2024-05-23 v7.01i Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/intcalc/intcalc.sty -Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) -) -\Hy@SavedSpaceFactor=\count295 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2024-05-23 v7.01i Hyperref: PDF Unicode definition (HO) -Now handling font encoding PU ... -... no UTF-8 mapping file for font encoding PU -) -Package hyperref Info: Option `unicode' set `true' on input line 4040. -Package hyperref Info: Hyper figures OFF on input line 4157. -Package hyperref Info: Link nesting OFF on input line 4162. -Package hyperref Info: Hyper index ON on input line 4165. -Package hyperref Info: Plain pages OFF on input line 4172. -Package hyperref Info: Backreferencing OFF on input line 4177. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4424. -\c@Hy@tempcnt=\count296 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip18 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 4763. -\XeTeXLinkMargin=\dimen169 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bitset/bitset.sty -Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO) -)) -\Fld@menulength=\count297 -\Field@Width=\dimen170 -\Fld@charsize=\dimen171 -Package hyperref Info: Hyper figures OFF on input line 6042. -Package hyperref Info: Link nesting OFF on input line 6047. -Package hyperref Info: Hyper index ON on input line 6050. -Package hyperref Info: backreferencing OFF on input line 6057. -Package hyperref Info: Link coloring OFF on input line 6062. -Package hyperref Info: Link coloring with OCG OFF on input line 6067. -Package hyperref Info: PDF/A mode OFF on input line 6072. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atbegshi-ltx.sty -Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi -package with kernel methods -) -\Hy@abspage=\count298 -\c@Item=\count299 -\c@Hfootnote=\count300 -) -Package hyperref Info: Driver (autodetected): hpdftex. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2024-05-23 v7.01i Hyperref driver for pdfTeX -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/base/atveryend-ltx.sty -Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package -with kernel methods -) -\Fld@listcount=\count301 -\c@bookmark@seq@number=\count302 -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) -) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285. -) -\Hy@SectionHShift=\skip61 -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/bookmark/bkm-pdftex.def -File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO) -\BKM@id=\count303 -)) -LaTeX Font Info: Trying to load font information for T1+lmr on input line 146. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmr.fd -File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count304 -\l__pdf_internal_box=\box56 -) (./paper.aux) -\openout1 = `paper.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 146. -LaTeX Font Info: ... okay on input line 146. -LaTeX Info: Redefining \microtypecontext on input line 146. -Package microtype Info: Applying patch `item' on input line 146. -Package microtype Info: Applying patch `toc' on input line 146. -Package microtype Info: Applying patch `eqnum' on input line 146. -Package microtype Info: Applying patch `footnote' on input line 146. -Package microtype Info: Applying patch `verbatim' on input line 146. -Package microtype Info: Generating PDF output. -Package microtype Info: Character protrusion enabled (level 2). -Package microtype Info: Using protrusion set `basicmath'. -Package microtype Info: Automatic font expansion enabled (level 2), -(microtype) stretch: 20, shrink: 20, step: 1, non-selected. -Package microtype Info: Using default expansion set `alltext-nott'. -LaTeX Info: Redefining \showhyphens on input line 146. -Package microtype Info: No adjustment of tracking. -Package microtype Info: No adjustment of interword spacing. -Package microtype Info: No adjustment of character kerning. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-cmr.cfg -File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS) -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live -)) -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) -* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) -* \paperwidth=614.295pt -* \paperheight=794.96999pt -* \textwidth=469.75502pt -* \textheight=650.43001pt -* \oddsidemargin=0.0pt -* \evensidemargin=0.0pt -* \topmargin=-37.0pt -* \headheight=12.0pt -* \headsep=25.0pt -* \topskip=10.0pt -* \footskip=30.0pt -* \marginparwidth=65.0pt -* \marginparsep=11.0pt -* \columnsep=10.0pt -* \skip\footins=9.0pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -Package hyperref Info: Link coloring OFF on input line 146. -LaTeX Font Info: Trying to load font information for OT1+lmr on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ot1lmr.fd -File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) -LaTeX Font Info: Trying to load font information for OML+lmm on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omllmm.fd -File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) -LaTeX Font Info: Trying to load font information for OMS+lmsy on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omslmsy.fd -File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) -LaTeX Font Info: Trying to load font information for OMX+lmex on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/omxlmex.fd -File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 148. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 148. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 148. -LaTeX Font Info: Trying to load font information for U+msa on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msa.cfg -File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) -) -LaTeX Font Info: Trying to load font information for U+msb on input line 148. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) (/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/microtype/mt-msb.cfg -File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) -) -LaTeX Font Info: Trying to load font information for T1+lmtt on input line 153. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/t1lmtt.fd -File: t1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) - -[1 - -{/Users/mlyd0001/Library/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}] -LaTeX Font Info: Font shape `T1/lmtt/bx/n' in size <10> not available -(Font) Font shape `T1/lmtt/b/n' tried instead on input line 228. - -Overfull \hbox (144.4932pt too wide) in paragraph at lines 275--275 -[]\T1/lmtt/m/n/10 #> -- Setting Prediction Matrices -----------------------------------------------------------------------------------[] - [] - - -Overfull \hbox (28.99353pt too wide) in paragraph at lines 279--279 -[]\T1/lmtt/m/n/10 #> A list of matrices containing the model predicted contact rate between ages in each setting.[] - [] - - - -[2] -LaTeX Font Info: Trying to load font information for TS1+lmtt on input line 307. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmtt.fd -File: ts1lmtt.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) - -File: paper_files/figure-latex/autoplot-contacts-1.png Graphic file (type png) - -Package pdftex.def Info: paper_files/figure-latex/autoplot-contacts-1.png used on input line 322. -(pdftex.def) Requested size: 446.24617pt x 446.24617pt. - - -[3{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc} <./paper_files/figure-latex/autoplot-contacts-1.png>] -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10> on input line 349. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <7> on input line 349. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <5> on input line 349. - -File: paper_files/figure-latex/unnamed-chunk-6-1.png Graphic file (type png) - -Package pdftex.def Info: paper_files/figure-latex/unnamed-chunk-6-1.png used on input line 369. -(pdftex.def) Requested size: 446.25995pt x 274.6215pt. - - -[4{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/Users/mlyd0001/Library/TinyTeX/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc} <./paper_files/figure-latex/unnamed-chunk-6-1.png>] -LaTeX Font Info: Trying to load font information for TS1+lmr on input line 425. -(/Users/mlyd0001/Library/TinyTeX/texmf-dist/tex/latex/lm/ts1lmr.fd -File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern -) - -[5] - -[6] (./paper.aux) - *********** -LaTeX2e <2024-06-01> patch level 1 -L3 programming layer <2024-05-27> - *********** - ) -Here is how much of TeX's memory you used: - 13856 strings out of 475499 - 219769 string characters out of 5774952 - 1945905 words of memory out of 5000000 - 36151 multiletter control sequences out of 15000+600000 - 617296 words of font info for 135 fonts, out of 8000000 for 9000 - 36 hyphenation exceptions out of 8191 - 83i,6n,93p,1002b,628s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on paper.pdf (6 pages, 615979 bytes). -PDF statistics: - 159 PDF objects out of 1000 (max. 8388607) - 122 compressed objects within 2 object streams - 23 named destinations out of 1000 (max. 500000) - 32835 words of extra memory for PDF output out of 35830 (max. 10000000) - diff --git a/paper/paper.pdf.md b/paper/paper.pdf.md new file mode 100644 index 0000000..f1a8aab --- /dev/null +++ b/paper/paper.pdf.md @@ -0,0 +1,339 @@ +--- +title: 'conmat: generate synthetic contact matrices for a given age-stratified population' +authors: +- affiliation: 1 + name: Nicholas Tierney + orcid: 0000-0003-1460-8722 +- affiliation: 1,2 + name: Nick Golding + orcid: 0000-0001-8916-5570 +- affiliation: 1,3 + name: Aarathy Babu + orcid: +- affiliation: 4 + name: Michael Lydeamore + orcid: 0000-0001-6515-827X +- affiliation: 1,3 + name: Chitra Saraswati + orcid: 0000-0002-8159-0414 +date: today +bibliography: references.bib +tags: +- epidemiology +- R +- infectious disease +affiliations: +- index: 1 + name: Telethon Kids Institute +- index: 2 + name: Curtin University +- index: 3 + name: +- index: 4 + name: Monash University +execute: + echo: true + cache: true +format: + pdf: + keep-md: true + fig-height: 4 + fig-align: center + fig-format: png + dpi: 300 + html: + keep-md: true + fig-height: 4 + fig-align: center + fig-format: png + dpi: 300 +--- + + +::: {.cell} + +::: + +::: {.cell} + +::: + + + + +# Summary + +Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. `conmat` is an R package which generates synthetic contact matrices for arbitrary input demography, ready for use in infectious diseases modelling. + +There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. + +The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own demographic data. This means users can generate synthetic contact matrices for any region, with any contact survey. + +We demonstrate a use-case for `conmat` by creating contact matrices for sub-national level (in this case, a state) in Australia. + +For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of countries from the United Nations, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). + +# Statement of need + +Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can use these models to make decisions to keep a population safe and healthy. + +Empirical estimates of social contact are provided by social contact surveys. These provide samples of the frequency and type of social contact across different settings (home, work, school, other). + +An prominent contact survey is the "POLYMOD" study by @mossong2008, which surveyed 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. + +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. + +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. + +The `conmat` package was developed to fill the specific need of creating contact matrices for arbitrary demographic structures. We developed the method primarily to output synthetic contact matrices. We also provided methods to create next generation matrices. + +# Example + +We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: + + + + +::: {.cell} + +```{.r .cell-code} +tasmania <- abs_age_state("TAS") +head(tasmania) +``` + +::: {.cell-output .cell-output-stdout} + +``` +# A tibble: 6 x 4 (conmat_population) + - age: lower.age.limit + - population: population + year state lower.age.limit population + +1 2020 TAS 0 29267 +2 2020 TAS 5 31717 +3 2020 TAS 10 33318 +4 2020 TAS 15 31019 +5 2020 TAS 20 31641 +6 2020 TAS 25 34115 +``` + + +::: +::: + + + + +We can then generate a contact matrix for Tasmania using `extrapolate_polymod()`. + + + + +::: {.cell} + +```{.r .cell-code} +tasmania_contact <- extrapolate_polymod(population = tasmania) +tasmania_contact +``` + +::: {.cell-output .cell-output-stderr} + +``` + +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +-- Setting Prediction Matrices ------------------------------------------------- +``` + + +::: + + +::: {.cell-output .cell-output-stderr} + +``` +A list of matrices containing the model predicted contact rate between ages in +each setting. +``` + + +::: + + +::: {.cell-output .cell-output-stderr} + +``` +There are 16 age breaks, ranging 0-75+ years, with a regular 5 year interval +``` + + +::: + + +::: {.cell-output .cell-output-stderr} + +``` +* home: a 16x16 +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +* work: a 16x16 +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +* school: a 16x16 +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +* other: a 16x16 +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +* all: a 16x16 +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +i Access each with `x$name` +``` + + +::: + +::: {.cell-output .cell-output-stderr} + +``` +i e.g., `x$home` +``` + + +::: +::: + + + + +We can plot the resulting contact matrix for Tasmania with `autoplot`: + + + + +::: {.cell} + +```{.r .cell-code} +autoplot(tasmania_contact) +``` + +::: {.cell-output-display} +![](paper_files/figure-pdf/autoplot-contacts-1.png){fig-pos='H'} +::: +::: + + + + +# Implementation + +The overall approach of `conmat` has two parts: + +1) Fit a model to predict individual contact rate, using an existing contact survey +2) Predict a synthetic contact matrix using age population data + +## Model fitting + +`conmat` was built to predict at four settings: work, school, home, and other. +One model is fitted for each setting. +Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +The model has six covariates to explain six key features of the relationship between ages, +and two optional covariates for attendance at school or work. +The two optional covariates are included depending on which setting the model is fitted for. + +Each cell in the resulting contact matrix, indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. + +The six covariates are: + +- $|i-j|$, +- ${|i-j|}^{2}$, +- $i + j$, +- $i \times j$, +- $\text{max}(i, j)$ and +- $\text{min}(i, j)$. + +These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix).The key features of the relationship between the age groups, represented by the six covariates, are displayed in \@ref(fig:partial-plots) for the home setting. The $|i-j|$ term gives the strong diagonal, modelling people generally living with similar age people, and the $\max(i,j)$ and $\min(i,j)$ terms give the intergenerational effect of parents and grandparents with children. + + + + +::: {.cell} + +::: + +::: {.cell} +::: {.cell-output-display} +![](paper_files/figure-pdf/unnamed-chunk-7-1.png) +::: +::: + + + + +Visualising the partial predictive plots for other settings (school, work and other), shows patterns that correspond with real-life situations are observed. A full visualisation pipeline is available at https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html + +# Conclusions and future directions + +The `conmat` software provides a flexible interface to generating synthetic contact matrices using population data and contact surveys. These contact matrices can then be used in infectious disease modelling and surveillance. + +The main strength of `conmat` is its interface requiring only age population data to create a synthetic contact matrix. Current approaches provide only a selection of country level contact matrices. This software can predict to arbitrary demography, such as sub-national, or simulated populations. + +We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. + +The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. + +The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. + +Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. + +This work was used as a key input into several models for COVID-19 transmission and control in Australia and contributed to decisions around vaccination policy [@DohertyModelling]. + +Some future directions for this software include: + +* Demonstrate fitting a model to other contact surveys from sources such as the `socialmixr` R package [@socialmixr]. +* Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants +* Fitting to multiple contact surveys simultaneously, e.g., POLYMOD and CoMix +* Add uncertainty to estimates +* Add methods for including household size distributions +* Include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. + +Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. + +# References diff --git a/paper/paper.qmd b/paper/paper.qmd new file mode 100644 index 0000000..bfde477 --- /dev/null +++ b/paper/paper.qmd @@ -0,0 +1,263 @@ +--- +title: 'conmat: generate synthetic contact matrices for a given age-stratified population' +authors: +- affiliation: 1 + name: Nicholas Tierney + orcid: 0000-0003-1460-8722 +- affiliation: 1,2 + name: Nick Golding + orcid: 0000-0001-8916-5570 +- affiliation: 1,3 + name: Aarathy Babu + orcid: +- affiliation: 4 + name: Michael Lydeamore + orcid: 0000-0001-6515-827X +- affiliation: 1,3 + name: Chitra Saraswati + orcid: 0000-0002-8159-0414 +date: today +bibliography: references.bib +tags: +- epidemiology +- R +- infectious disease +affiliations: +- index: 1 + name: Telethon Kids Institute +- index: 2 + name: Curtin University +- index: 3 + name: +- index: 4 + name: Monash University +execute: + echo: true + cache: true +format: + pdf: + keep-md: true + fig-height: 4 + fig-align: center + fig-format: png + dpi: 300 + html: + keep-md: true + fig-height: 4 + fig-align: center + fig-format: png + dpi: 300 +--- + +```{r} +#| label: setup +#| echo: false +#| message: false +#| warning: false +options(tinytex.clean = FALSE) +``` + +```{r} +#| label: libraries +#| echo: false +#| output: false + +library(purrr) +library(patchwork) +library(conmat) +library(ggplot2) +``` + +# Summary + +Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. `conmat` is an R package which generates synthetic contact matrices for arbitrary input demography, ready for use in infectious diseases modelling. + +There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, are restricted to only selected countries, and provide no sub-national demographic estimates. + +The `conmat` package exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own demographic data. This means users can generate synthetic contact matrices for any region, with any contact survey. + +We demonstrate a use-case for `conmat` by creating contact matrices for sub-national level (in this case, a state) in Australia. + +For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of countries from the United Nations, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)) [@syncomat]. + +# Statement of need + +Infectious diseases like influenza and COVID19 spread via social contact. If we can understand patterns of contact - which people are more likely be in contact with each other - then we will be able to create models of how disease spreads. Epidemiologists and public policy makers can use these models to make decisions to keep a population safe and healthy. + +Empirical estimates of social contact are provided by social contact surveys. These provide samples of the frequency and type of social contact across different settings (home, work, school, other). + +An prominent contact survey is the "POLYMOD" study by @mossong2008, which surveyed 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. + +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as "contact matrices" or "synthetic contact matrices". A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. + +However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. + +The `conmat` package was developed to fill the specific need of creating contact matrices for arbitrary demographic structures. We developed the method primarily to output synthetic contact matrices. We also provided methods to create next generation matrices. + +# Example + +We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the Australian Bureau of Statistics (ABS) with the helper function, `abs_age_state()`: + +```{r} +#| label: abs-age +tasmania <- abs_age_state("TAS") +head(tasmania) +``` + +We can then generate a contact matrix for Tasmania, from the POLYMOD study with `extrapolate_polymod()`. + +```{r} +#| label: extrapolate-polymod +tasmania_contact <- extrapolate_polymod(population = tasmania) +tasmania_contact +``` + +We can plot the resulting contact matrix for Tasmania with `autoplot`: + +```{r} +#| label: autoplot-contacts +#| fig-width: 8 +#| fig-height: 8 +autoplot(tasmania_contact) +``` + +# Implementation + +The overall approach of `conmat` has two parts: + +1) Fit a model to predict individual contact rate, using an existing contact survey +2) Predict a synthetic contact matrix using age population data + +## Model fitting + +`conmat` was built to predict at four settings: work, school, home, and other. +One model is fitted for each setting. +Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +The model has six covariates to explain six key features of the relationship between ages, +and two optional covariates for attendance at school or work. +The two optional covariates are included depending on which setting the model is fitted for. + +[njt: should we mention the link/family?] + +Each cell in the resulting contact matrix, indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. + +[njt: do we need to mention that we need to do the exponentiated sum, since these are on the log scale?] + +The six covariates are: + +- $|i-j|$, +- ${|i-j|}^{2}$, +- $i + j$, +- $i \times j$, +- $\text{max}(i, j)$ and +- $\text{min}(i, j)$. + +[njt: OK with putting these as dot points?] + +These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix).The key features of the relationship between the age groups, represented by the six covariates, are displayed in \@ref(fig:partial-plots) for the home setting. The $|i-j|$ term gives the strong diagonal, modelling people generally living with similar age people, and the $\max(i,j)$ and $\min(i,j)$ terms give the intergenerational effect of parents and grandparents with children. + +```{r} +#| label: partial-plots-create +#| echo: false + +fit_home <- polymod_setting_models$home +age_grid <- create_age_grid(ages = 1:99) +term_names <- extract_term_names(fit_home) +term_var_names <- clean_term_names(term_names) +age_predictions <- predict_individual_terms( + age_grid = age_grid, + fit = fit_home, + term_names = term_names, + term_var_names = term_var_names +) + +age_predictions_all_settings <- map_dfr( + .x = polymod_setting_models, + .f = function(x) { + predict_individual_terms( + age_grid = age_grid, + fit = x, + term_names = term_names, + term_var_names = term_var_names + ) + }, + .id = "setting" +) + +plot_age_term_settings <- gg_age_terms_settings(age_predictions_all_settings) +age_predictions_long <- pivot_longer_age_preds(age_predictions) +plot_age_predictions_long <- gg_age_partial_pred_long(age_predictions_long) + + coord_equal() + + labs(x = "Age from", + y = "Age to") + + theme( + legend.position = "bottom" + ) + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + + expand_limits(x = c(0, 100), y = c(0, 100)) + +age_predictions_long_sum <- add_age_partial_sum(age_predictions_long) +plot_age_predictions_sum <- gg_age_partial_sum(age_predictions_long_sum) + coord_equal() + + labs(x = "Age from", + y = "Age to") + + theme( + legend.position = "bottom" + ) + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + + expand_limits(x = c(0, 100), y = c(0, 100)) +``` + + +```{r} +#| label: show-partial-plots +#| echo: false +#| fig-height: 8 +#| fig-cap: "Partial predictive plot (A) and overall synthetic contact matrix (B) for the Poisson GAM fitted to the POLYMOD contact survey in the home setting. The strong diagonal elements, and parents/grandparents interacting with children result in the classic 'diagonal with wings' shape." +plot_all_terms_sum <- plot_age_predictions_long + + plot_age_predictions_sum + + plot_layout(design = " + AAAABBBB + AAAABBBB + AAAABBBB + AAAABBBB + ") + + plot_annotation( + tag_levels = "A" + ) + + +plot_all_terms_sum +``` + +Visualising the partial predictive plots for other settings (school, work and other), shows patterns that correspond with real-life situations are observed. A full visualisation pipeline is available at https://idem-lab.github.io/conmat/dev/articles/visualising-conmat.html + +# Conclusions and future directions + +The `conmat` software provides a flexible interface to generating synthetic contact matrices using population data and contact surveys. These contact matrices can then be used in infectious disease modelling and surveillance. + +The main strength of `conmat` is its interface requiring only age population data to create a synthetic contact matrix. Current approaches provide only a selection of country level contact matrices. This software can predict to arbitrary demography, such as sub-national, or simulated populations. + +We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. + +The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. + +The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. + +Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. + +This work was used as a key input into several models for COVID-19 transmission and control in Australia and contributed to decisions around vaccination policy [@DohertyModelling]. + +Some future directions for this software include: + +* Demonstrate fitting a model to other contact surveys from sources such as the `socialmixr` R package [@socialmixr]. +* Predict to any age brackets - such as monthly ages, for example, 1, 3, 6, month year old infants +* Fitting to multiple contact surveys simultaneously, e.g., POLYMOD and CoMix +* Add uncertainty to estimates +* Add methods for including household size distributions +* Include known household age distributions as offsets in the 'home' setting model, in place of the whole population distribution. + +Software is never finished, and the software in its current format has proven useful for infectious disease modelling. In time we hope it can become more widely used and be useful for more applications in epidemiology and public health. + +# References diff --git a/paper/references.bib b/paper/references.bib index 4a2fc2e..83d827a 100644 --- a/paper/references.bib +++ b/paper/references.bib @@ -105,3 +105,19 @@ @misc{DohertyModelling month = aug, url={https://www.doherty.edu.au/our-work/institute-themes/viral-infectious-diseases/covid-19/covid-19-modelling/modelling} } + +@dataset{syncomat, + author = {Saraswati, Chitra M and + Lydeamore, Michael and + Golding, Nick and + Babu, Aarathy and + Tierney, Nicholas}, + title = {{syncomat: Synthetic Contact Matrices for 200 UN + Countries}}, + month = may, + year = 2024, + publisher = {Zenodo}, + version = {v1.0.0}, + doi = {10.5281/zenodo.11365943}, + url = {https://doi.org/10.5281/zenodo.11365943} +} \ No newline at end of file From 9153481d259a67b580c53f6119e217b52ab3497a Mon Sep 17 00:00:00 2001 From: njtierney Date: Mon, 19 Aug 2024 13:59:27 +1000 Subject: [PATCH 38/39] added a couple of small TODO notes and some small wording changes --- paper/paper.qmd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/paper/paper.qmd b/paper/paper.qmd index bfde477..245d6fe 100644 --- a/paper/paper.qmd +++ b/paper/paper.qmd @@ -241,9 +241,13 @@ The main strength of `conmat` is its interface requiring only age population dat We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. +[njt: should we reference that contact patterns are known to differ?] + The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. -The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. +The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means if there is an unusual structure in their contact data it might not be accurately captured by conmat. This fixed formula was a design decision made to focus on the key feature of conmat: using just age population data to predict a contact matrix. + +[njt: should we have conmat as `conmat`] Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. From 80b59ee23ed39ab1d91f9e1694f9ef83fc7a46da Mon Sep 17 00:00:00 2001 From: njtierney Date: Mon, 19 Aug 2024 14:47:39 +1000 Subject: [PATCH 39/39] changes from meeting with Michael --- R/partial-prediction-helpers.R | 4 ++-- paper/paper.pdf.md | 27 +++++++++++---------- paper/paper.qmd | 44 +++++++++++++++------------------- 3 files changed, 35 insertions(+), 40 deletions(-) diff --git a/R/partial-prediction-helpers.R b/R/partial-prediction-helpers.R index d8346bd..da7cbcb 100644 --- a/R/partial-prediction-helpers.R +++ b/R/partial-prediction-helpers.R @@ -201,7 +201,7 @@ gg_age_partial_pred_long <- function(age_predictions_long) { facet_names <- data.frame( pred = c("diag_prod", "diag_sum", "offdiag", "offdiag_2", "pmax", "pmin"), - math_name = c("i x j", "i + j", "|i - j|", "|i - j|^2", "max(i, j)", "min(i, j)") + math_name = c("i x j", "i + j", "|i - j|", "|i - j|²", "max(i, j)", "min(i, j)") ) age_predictions_long %>% @@ -217,7 +217,7 @@ gg_age_partial_pred_long <- function(age_predictions_long) { facet_wrap(~math_name, ncol = 3) + geom_tile() + scale_fill_viridis_c( - name = "log(contacts)" + name = "log\ncontacts" ) + theme_minimal() diff --git a/paper/paper.pdf.md b/paper/paper.pdf.md index f1a8aab..bb1573b 100644 --- a/paper/paper.pdf.md +++ b/paper/paper.pdf.md @@ -1,5 +1,5 @@ --- -title: 'conmat: generate synthetic contact matrices for a given age-stratified population' +title: '`conmat`: generate synthetic contact matrices for a given age-stratified population' authors: - affiliation: 1 name: Nicholas Tierney @@ -18,6 +18,7 @@ authors: orcid: 0000-0002-8159-0414 date: today bibliography: references.bib +cite-method: biblatex tags: - epidemiology - R @@ -33,7 +34,7 @@ affiliations: name: Monash University execute: echo: true - cache: true + cache: false format: pdf: keep-md: true @@ -65,13 +66,13 @@ format: Contact matrices describe the number of contacts between individuals, typically age groups. They are used to create models of infectious disease spread. `conmat` is an R package which generates synthetic contact matrices for arbitrary input demography, ready for use in infectious diseases modelling. -There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, and are restricted to only selected countries with no sub-national demographic estimates available. +There are currently few options for a user to access synthetic contact matrices [@socialmixr; @prem2017]. Existing code to generate synthetic contact matrices from @prem2017 are not designed for replicability, are restricted to only selected countries, and provide no sub-national demographic estimates. -The software exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own demographic data. This means users can generate synthetic contact matrices for any region, with any contact survey. +The `conmat` package exposes model fitting and prediction separately to the user. Users can fit a model based on a contact survey such as POLYMOD [@mossong2008], then predict from this model to their own demographic data. This means users can generate synthetic contact matrices for any region, with any contact survey. We demonstrate a use-case for `conmat` by creating contact matrices for sub-national level (in this case, a state) in Australia. -For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of countries from the United Nations, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)). +For users who do not wish to run the entire `conmat` pipeline, we have pre-generated synthetic contact matrices for 200 countries, based on a list of countries from the United Nations, using a model fit to the POLYMOD contact survey. These resulting synthetic contact matrices, and the associated code, can be found in the syncomat analysis pipeline ([GitHub](https://github.com/idem-lab/syncomat), [Zenodo](https://zenodo.org/records/11365943)) [@syncomat]. # Statement of need @@ -81,7 +82,7 @@ Empirical estimates of social contact are provided by social contact surveys. Th An prominent contact survey is the "POLYMOD" study by @mossong2008, which surveyed 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. -These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as contact matrices or synthetic contact matrices. A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as "contact matrices" or "synthetic contact matrices". A widely used approach by @prem2017 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. @@ -89,7 +90,7 @@ The `conmat` package was developed to fill the specific need of creating contact # Example -We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the helper function `abs_age_state()`: +We will generate a contact matrix for Tasmania, a state in Australia, using a model fitted from the POLYMOD contact survey. We can get the age-stratified population data for Tasmania from the Australian Bureau of Statistics (ABS) with the helper function, `abs_age_state()`: @@ -124,7 +125,7 @@ head(tasmania) -We can then generate a contact matrix for Tasmania using `extrapolate_polymod()`. +We can then generate a contact matrix for Tasmania, from the POLYMOD study with `extrapolate_polymod()`. @@ -273,12 +274,12 @@ The overall approach of `conmat` has two parts: `conmat` was built to predict at four settings: work, school, home, and other. One model is fitted for each setting. -Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +Each model fitted is a Poisson generalised additive model (GAM) with a log link function, which predicts the count of contacts, with an offset for the log of participants. The model has six covariates to explain six key features of the relationship between ages, and two optional covariates for attendance at school or work. The two optional covariates are included depending on which setting the model is fitted for. -Each cell in the resulting contact matrix, indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. +Each cell in the resulting contact matrix (after back-transformation of the link function), indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. The six covariates are: @@ -300,7 +301,7 @@ These covariates capture typical features of inter-person contact, where individ ::: {.cell} ::: {.cell-output-display} -![](paper_files/figure-pdf/unnamed-chunk-7-1.png) +![Partial predictive plot (A) and overall synthetic contact matrix (B) for the Poisson GAM fitted to the POLYMOD contact survey in the home setting. The strong diagonal elements, and parents/grandparents interacting with children result in the classic 'diagonal with wings' shape.](paper_files/figure-pdf/show-partial-plots-1.png) ::: ::: @@ -317,9 +318,9 @@ The main strength of `conmat` is its interface requiring only age population dat We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. -The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. +The covariates used by `conmat` were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. -The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means that if there is an unusual structure in their contact data it might not be accurately captured by conmat. It was a design decision that was made to focus on the key feature of conmat: using just age population data to predict a contact matrix. +The interface to the model formula in `conmat` is fixed; users cannot change the covariates of the model. This means if there is an unusual structure in their contact data it might not be accurately captured by `conmat`. This fixed formula was a design decision made to focus on the key feature of `conmat`: using just age population data to predict a contact matrix. Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease. diff --git a/paper/paper.qmd b/paper/paper.qmd index 245d6fe..b9aa026 100644 --- a/paper/paper.qmd +++ b/paper/paper.qmd @@ -1,5 +1,5 @@ --- -title: 'conmat: generate synthetic contact matrices for a given age-stratified population' +title: '`conmat`: generate synthetic contact matrices for a given age-stratified population' authors: - affiliation: 1 name: Nicholas Tierney @@ -18,6 +18,7 @@ authors: orcid: 0000-0002-8159-0414 date: today bibliography: references.bib +cite-method: biblatex tags: - epidemiology - R @@ -33,7 +34,7 @@ affiliations: name: Monash University execute: echo: true - cache: true + cache: false format: pdf: keep-md: true @@ -88,7 +89,7 @@ Empirical estimates of social contact are provided by social contact surveys. Th An prominent contact survey is the "POLYMOD" study by @mossong2008, which surveyed 8 European countries: Belgium, Germany, Finland, Great Britain, Italy, Luxembourg, The Netherlands, and Poland [@mossong2008]. -These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as "contact matrices" or "synthetic contact matrices". A widely used approach by @prem2021 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. +These social contact surveys can be projected on to a given demographic structure to produce estimated daily contact rates between age groups. These are known as "contact matrices" or "synthetic contact matrices". A widely used approach by @prem2017 [@prem2021] produced contact matrices for 177 countries at "urban" and "rural" levels for each country. However, there were major limitations with the methods in @prem2021. First, not all countries were included in their analyses. Second, the contact matrices only covered broad scale areas. This presents challenges for decision makers who are often working at a sub-national geographical scale. Third, the code provided by Prem et al., was not designed for replicability and easy modification with user-defined inputs. @@ -132,16 +133,12 @@ The overall approach of `conmat` has two parts: `conmat` was built to predict at four settings: work, school, home, and other. One model is fitted for each setting. -Each model fitted is a Poisson generalised additive model (GAM) which predicts the count of contacts, with an offset for the log of participants. +Each model fitted is a Poisson generalised additive model (GAM) with a log link function, which predicts the count of contacts, with an offset for the log of participants. The model has six covariates to explain six key features of the relationship between ages, and two optional covariates for attendance at school or work. The two optional covariates are included depending on which setting the model is fitted for. -[njt: should we mention the link/family?] - -Each cell in the resulting contact matrix, indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. - -[njt: do we need to mention that we need to do the exponentiated sum, since these are on the log scale?] +Each cell in the resulting contact matrix (after back-transformation of the link function), indexed ($i$, $j$), is the predicted number of people in age group $j$ that a single individual in age group $i$ will have contact with per day. The sum over all of the $j$ age groups for a particular age group $i$ is the predicted total number of contacts per day for each individual of age group $i$. The six covariates are: @@ -152,8 +149,6 @@ The six covariates are: - $\text{max}(i, j)$ and - $\text{min}(i, j)$. -[njt: OK with putting these as dot points?] - These covariates capture typical features of inter-person contact, where individuals primarily interact with people of similar age (the diagonals of the matrix), and with grandparents and/or children (the so-called 'wings' of the matrix).The key features of the relationship between the age groups, represented by the six covariates, are displayed in \@ref(fig:partial-plots) for the home setting. The $|i-j|$ term gives the strong diagonal, modelling people generally living with similar age people, and the $\max(i,j)$ and $\min(i,j)$ terms give the intergenerational effect of parents and grandparents with children. ```{r} @@ -188,10 +183,14 @@ plot_age_term_settings <- gg_age_terms_settings(age_predictions_all_settings) age_predictions_long <- pivot_longer_age_preds(age_predictions) plot_age_predictions_long <- gg_age_partial_pred_long(age_predictions_long) + coord_equal() + - labs(x = "Age from", - y = "Age to") + + labs( + x = "Age from", + y = "Age to" + ) + theme( - legend.position = "bottom" + legend.position = "bottom", + axis.text = element_text(size = 6), + panel.spacing = unit(x = 1, units = "lines") ) + scale_x_continuous(expand = c(0,0)) + scale_y_continuous(expand = c(0,0)) + @@ -213,15 +212,14 @@ plot_age_predictions_sum <- gg_age_partial_sum(age_predictions_long_sum) + coord ```{r} #| label: show-partial-plots #| echo: false -#| fig-height: 8 #| fig-cap: "Partial predictive plot (A) and overall synthetic contact matrix (B) for the Poisson GAM fitted to the POLYMOD contact survey in the home setting. The strong diagonal elements, and parents/grandparents interacting with children result in the classic 'diagonal with wings' shape." plot_all_terms_sum <- plot_age_predictions_long + plot_age_predictions_sum + plot_layout(design = " - AAAABBBB - AAAABBBB - AAAABBBB - AAAABBBB + AAAAABBBB + AAAAABBBB + AAAAABBBB + AAAAABBBB ") + plot_annotation( tag_levels = "A" @@ -241,13 +239,9 @@ The main strength of `conmat` is its interface requiring only age population dat We provide a trained model of contact rate that is fit to the POLYMOD survey for ease of use. The software also has an interface to use other contact surveys, such as @comix. This is important as POLYMOD represents contact patterns in 8 countries in Europe, and contact patterns are known to differ across nations and cultures. -[njt: should we reference that contact patterns are known to differ?] - -The covariates used by conmat were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. - -The interface to the model formula in conmat is fixed; users cannot change the covariates of the model. This means if there is an unusual structure in their contact data it might not be accurately captured by conmat. This fixed formula was a design decision made to focus on the key feature of conmat: using just age population data to predict a contact matrix. +The covariates used by `conmat` were designed to represent the key features that are typically present in a contact matrix for different settings (work, school, home, other). Including other sources of information that may better describe these contact patterns, such as inter-generational mixing, or differences in school ages of a local demographic, may improve model performance. -[njt: should we have conmat as `conmat`] +The interface to the model formula in `conmat` is fixed; users cannot change the covariates of the model. This means if there is an unusual structure in their contact data it might not be accurately captured by `conmat`. This fixed formula was a design decision made to focus on the key feature of `conmat`: using just age population data to predict a contact matrix. Public health decisions are often based on age specific information, which means the more accurate your age specific models are, the better those decisions are likely to be. This is the first piece of software that will provide appropriate contact matrices for a population, which means more accurate models of disease.