From 5f5ec03174c94f2bca0f89396f275ce0ff9f91ea Mon Sep 17 00:00:00 2001 From: trbKnl Date: Fri, 8 Nov 2024 15:57:23 +0000 Subject: [PATCH] deploy: b22abf8d7fff7e68ccfca4c3070eb52a9705ea7a --- .buildinfo | 4 + .doctrees/api/api.doctree | Bin 0 -> 508848 bytes .doctrees/api/index.doctree | Bin 0 -> 2826 bytes ...eating-your-own-data-donation-task.doctree | Bin 0 -> 63400 bytes .../articles/data-donation-checklist.doctree | Bin 0 -> 21770 bytes .doctrees/articles/deployment.doctree | Bin 0 -> 15557 bytes .doctrees/articles/index.doctree | Bin 0 -> 3044 bytes .doctrees/articles/installation.doctree | Bin 0 -> 23744 bytes .../introduction-to-data-donation.doctree | Bin 0 -> 4089 bytes .doctrees/articles/next-in-docker.doctree | Bin 0 -> 20640 bytes .doctrees/articles/visualizations.doctree | Bin 0 -> 50773 bytes .doctrees/environment.pickle | Bin 0 -> 133457 bytes .doctrees/index.doctree | Bin 0 -> 5395 bytes .nojekyll | 0 _sources/api/api.md.txt | 38 + _sources/api/index.rst.txt | 7 + ...reating-your-own-data-donation-task.md.txt | 413 ++++ .../articles/data-donation-checklist.md.txt | 59 + _sources/articles/deployment.md.txt | 57 + _sources/articles/index.rst.txt | 13 + _sources/articles/installation.md.txt | 89 + .../introduction-to-data-donation.md.txt | 5 + _sources/articles/next-in-docker.md.txt | 198 ++ _sources/articles/visualizations.md.txt | 195 ++ _sources/index.rst.txt | 28 + _static/basic.css | 914 ++++++++ _static/basic_mod.css | 1194 ++++++++++ _static/basic_mod.css.map | 1 + _static/doctools.js | 149 ++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/fonts/roboto-mono/LICENSE.txt | 202 ++ .../roboto-mono/roboto-mono-bold-italic.woff2 | Bin 0 -> 41628 bytes .../fonts/roboto-mono/roboto-mono-bold.woff2 | Bin 0 -> 37732 bytes .../roboto-mono/roboto-mono-italic.woff2 | Bin 0 -> 41252 bytes _static/fonts/roboto-mono/roboto-mono.woff2 | Bin 0 -> 97472 bytes _static/fonts/roboto/LICENSE.txt | 202 ++ _static/fonts/roboto/roboto-bold.woff2 | Bin 0 -> 50452 bytes _static/fonts/roboto/roboto-italic.woff2 | Bin 0 -> 54380 bytes _static/fonts/roboto/roboto.woff2 | Bin 0 -> 50640 bytes _static/js/petite-vue.js | 1 + _static/js/theme.js | 108 + _static/language_data.js | 192 ++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 75 + _static/searchtools.js | 632 ++++++ _static/sphinx_highlight.js | 154 ++ api/api.html | 1956 +++++++++++++++++ api/index.html | 247 +++ .../creating-your-own-data-donation-task.html | 570 +++++ articles/data-donation-checklist.html | 217 ++ articles/deployment.html | 259 +++ articles/index.html | 221 ++ articles/installation.html | 297 +++ articles/introduction-to-data-donation.html | 186 ++ articles/next-in-docker.html | 383 ++++ articles/visualizations.html | 416 ++++ genindex.html | 597 +++++ index.html | 229 ++ objects.inv | Bin 0 -> 1382 bytes py-modindex.html | 210 ++ search.html | 179 ++ searchindex.js | 1 + 64 files changed, 10911 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/api/api.doctree create mode 100644 .doctrees/api/index.doctree create mode 100644 .doctrees/articles/creating-your-own-data-donation-task.doctree create mode 100644 .doctrees/articles/data-donation-checklist.doctree create mode 100644 .doctrees/articles/deployment.doctree create mode 100644 .doctrees/articles/index.doctree create mode 100644 .doctrees/articles/installation.doctree create mode 100644 .doctrees/articles/introduction-to-data-donation.doctree create mode 100644 .doctrees/articles/next-in-docker.doctree create mode 100644 .doctrees/articles/visualizations.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .nojekyll create mode 100644 _sources/api/api.md.txt create mode 100644 _sources/api/index.rst.txt create mode 100644 _sources/articles/creating-your-own-data-donation-task.md.txt create mode 100644 _sources/articles/data-donation-checklist.md.txt create mode 100644 _sources/articles/deployment.md.txt create mode 100644 _sources/articles/index.rst.txt create mode 100644 _sources/articles/installation.md.txt create mode 100644 _sources/articles/introduction-to-data-donation.md.txt create mode 100644 _sources/articles/next-in-docker.md.txt create mode 100644 _sources/articles/visualizations.md.txt create mode 100644 _sources/index.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/basic_mod.css create mode 100644 _static/basic_mod.css.map create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/fonts/roboto-mono/LICENSE.txt create mode 100644 _static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono-bold.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono-italic.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono.woff2 create mode 100644 _static/fonts/roboto/LICENSE.txt create mode 100644 _static/fonts/roboto/roboto-bold.woff2 create mode 100644 _static/fonts/roboto/roboto-italic.woff2 create mode 100644 _static/fonts/roboto/roboto.woff2 create mode 100644 _static/js/petite-vue.js create mode 100644 _static/js/theme.js create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 api/api.html create mode 100644 api/index.html create mode 100644 articles/creating-your-own-data-donation-task.html create mode 100644 articles/data-donation-checklist.html create mode 100644 articles/deployment.html create mode 100644 articles/index.html create mode 100644 articles/installation.html create mode 100644 articles/introduction-to-data-donation.html create mode 100644 articles/next-in-docker.html create mode 100644 articles/visualizations.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..05d39026 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ed711ace982b0937d13113d62a8e8ab5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/api.doctree b/.doctrees/api/api.doctree new file mode 100644 index 0000000000000000000000000000000000000000..761bff917b3451a0301cb470d60ec766387a3d91 GIT binary patch literal 508848 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 kEk&Cs5P6$i)INXd$(50v18BhX4Qo literal 0 HcmV?d00001 diff --git a/.doctrees/api/index.doctree b/.doctrees/api/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..139f485a5a679dca9a4443b0e5e348f81acd7618 GIT binary patch literal 2826 zcmZuz&ubhv6n0|oPp{WrCn<%*Z9++t(AZl_52dG;_EJnuC?$|X5ZaM;C9ILAk|tgs z0_`Co2Hm3mz3r!&+3|XbVesnd>HYk^C;i>|_rKv*^%wSCA*5cOP{y=j+{MsmCM$EU zef$`o{S)8Dr(s~}g)^nicnn+6$b?kPavfjCFiz@TDtFSH?>U}%X>@yBbVOJ5UdN|m z5ISCZ#n-mN8KUfYtnltV95)Hw+8yQ67d|LU`{xL(X?c5eAR>6D@8=^|}K zu`lk6k$51s#Zh=M6(;9XTWZbi^upNlDWjeqGo!1-jy-js7MW~X$2+BkoJ!63^29o% z^~LG!a)w&;Gm{sl)NHMEbydX{qA{7be7&sA-j~QyJVG_U!uJ^86MWC`-4BD-6Y@t1 zt*o*>3%#^~FTRg7jHJ#~$@pBVYFqq7LqDfW#tSdv={8D7i>hfT^g@|gyb4_*83Q=3 z!d`Q_74&tP&$#6*o^FLnEw zEedWUT~9EbKfZ2FvI7M0)fLo}vFdJQ|es#3N2aC5UMU9voc8>e#QTli$_Rqp#!2wz7jg43UwA^``7g+3CV?06y z0+un{n#QnOhd|)>916o`Sz3kF9=bvjRnjg(>7tZhS$lMirr9In5y%pk*0PDW&+NM$HJM8#GZH&J{R5>?#JmAVs}zp zdSUd5u?x`YUec@rfF|)gM|(Wl(TDu_@weZjo?|=DHq0l z`M@-o3ZE-D8+bYcg;<*1{cr?8=A>n2n*eb|LdaD(aF^QCB@uEV6h44=N125Ck;^Gq z_E!l?I~3|pwXT;$nT*!gML5a?MLcMHO*T}yDj`mvmjzs;=RFA3}4;+1&m!XOF!Wq}CaM)B&(iAVVVQjA>KTklnMdM}gccybSm zwIoq;rB{c!E~)hpJbIhYjB49osovcXw%UUm76&V@)uF>1_Ay$mkKoF^Ool7AQf0Qm931C8(|bLe;Nu$>z>#JjDyYT0h{_y9x} Ssar#qMq4ul(&b&wPW}g5J7;PD literal 0 HcmV?d00001 diff --git a/.doctrees/articles/creating-your-own-data-donation-task.doctree b/.doctrees/articles/creating-your-own-data-donation-task.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d35c84e6d6dfed194a81256adea35d5a5e25fb2e GIT binary patch literal 63400 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 GTl{}X9Kt*R literal 0 HcmV?d00001 diff --git a/.doctrees/articles/deployment.doctree b/.doctrees/articles/deployment.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ad18dfb70122953f9d297b3c42f45a7098428cf GIT binary patch literal 15557 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 Hi^=7GSTn#7 literal 0 HcmV?d00001 diff --git a/.doctrees/articles/installation.doctree b/.doctrees/articles/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b37f5c276521484eadf08068f746e4a7cf6c334 GIT binary patch literal 23744 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 literal 0 HcmV?d00001 diff --git a/.doctrees/articles/introduction-to-data-donation.doctree b/.doctrees/articles/introduction-to-data-donation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dc91f02396f7d8e9f1e003566aaa62d227c76df8 GIT binary patch literal 4089 zcmcIn%Wot{8DFn=Y>%I7C%cK1b?77t*%j-VfFcp#gouRD3JU>(!)n#4>8hD3xx1_B zs+~CabtA5OkV`n)KOCxuE{nhvUeUE-I_`|;rZpA-; zU@ED~%Ms(e)LfY0x46z+Axay*2#k4B+^%zdAJ!v=>IGl<=oVkeJJ z<-33dMG%P?PN(>hqF=BBM_HA{+M$`Ma%Mh z{y5^|X$y=S)BcEHNbobs%qh+gYQmJ%7t{)ju!*Y@U~d_KiLs8)f0P(iRQWuKIU;TX z?fbu|1(iPTM6UM}%O(pf9evfrrAYj0ITP~J-m%Tri!QbOd6C4Y%U5qsqWr0U>xS(0 z=^C`@iq^z*ssD43zI^egD`EQb#h;r%Ej(HY#_M6xS>3{7als#dZPyB{1Ntf>C3Ge0 zU~DUakhtBn*NE$Niapx+jnM6zzI^Q8v^6VD9*0W`?9FPlve@(oR$G>bC%61|$0In7 zj`Xeh{mj)gQqq2a>~@r9koYaY)uMZ1h934qaa!xrijt##f5UQz3DR{EzoDJ2oDHY) z;M5Oi0t13sT?ZWCxiFR$6%ISK))uCUsk#h)Z5;egV?qkOXJFWFkFL&f+Os-KX(-WK zm@bL(iQ3DRM$m#>GusLVU=dOpcTMC;5!XPt~bmmC1_j6{5LI28O|&dQl%Gl6h(oNr^J z@^924(=|`Ir~n(NQNYZp-@rJY!bgNd@eU1g!|yX^b-Ez=+X`6QA>B%l&S zjrL3e4ZLc+AhduRL!l_@t;VCUg7%-aEM_-0zwKdtv%Jhmtl3)En{K9MfE9tPSmPCb0%) zNPJUlh;j@eZlAddDrkX^TY1|9UI9HiQ{@yGXq&Q806b1#Q3gR0IHN1|mN$E1B;X|TP zImJZhJ$@qVn^%ZE_i#nxu+thZ9j(a6-~!griSAvM)xN?0fOZ_QL_=pM(|HaM!Us&_ z&7Tm)K>q^He;$5`)`E2vO$y(Z2G!Ik?7Q*`d8a2wc<-n(%N?fzoDs6OISr1s$I?pV Qw_}l*++iho9^7Q~U+O777ytkO literal 0 HcmV?d00001 diff --git a/.doctrees/articles/next-in-docker.doctree b/.doctrees/articles/next-in-docker.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ff4d174e473e6d90b90e27a21cdd4707ba8ef3e GIT binary patch literal 20640 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 literal 0 HcmV?d00001 diff --git a/.doctrees/articles/visualizations.doctree b/.doctrees/articles/visualizations.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5f3c53c786d4274146d4d6bcf0d1be4cabb3e4d1 GIT binary patch literal 50773 zcmeHwd$1%|d7t)mckkVocJ)A(R#NNo(7ogPu$Co)8_RgLdargPv@2MMvY8q46>0S3E?3iU{WbNP&haSDhU-;upNg~5~_krf5b&4c2c

4k-}jyK^*P-h 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

P7c-e-x*#_y|7h4Pb^V^?mO`KNeG^zHjnJ4^k|c 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 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..f40258b777ea333003174d8cbf3965583863cf43 GIT binary patch literal 133457 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 literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_sources/api/api.md.txt b/_sources/api/api.md.txt new file mode 100644 index 00000000..d8e5808e --- /dev/null +++ b/_sources/api/api.md.txt @@ -0,0 +1,38 @@ +# API reference + +## Props + +```{eval-rst} +.. automodule:: port.api.props + :members: +``` + +## Extraction helpers + +```{eval-rst} +.. automodule:: port.helpers.extraction_helpers + :members: +``` + +## Port helpers + +```{eval-rst} +.. automodule:: port.helpers.port_helpers + :members: +``` + +## Validation + +```{eval-rst} +.. automodule:: port.helpers.validate + :members: +``` + +## Platforms + +### ChatGPT + +```{eval-rst} +.. automodule:: port.platforms.chatgpt + :members: +``` diff --git a/_sources/api/index.rst.txt b/_sources/api/index.rst.txt new file mode 100644 index 00000000..574ca121 --- /dev/null +++ b/_sources/api/index.rst.txt @@ -0,0 +1,7 @@ +API Documentation +============================= + +.. toctree:: + :maxdepth: 3 + + api.md diff --git a/_sources/articles/creating-your-own-data-donation-task.md.txt b/_sources/articles/creating-your-own-data-donation-task.md.txt new file mode 100644 index 00000000..ed54f970 --- /dev/null +++ b/_sources/articles/creating-your-own-data-donation-task.md.txt @@ -0,0 +1,413 @@ +# Creating your own donation task + +The donation task is at the core of a data donation study. +It is the step where the participant is actually going to donate their data. + +The data donation task goes as follows: + +1. The participant goes to your data donation task app in a browser +2. The participant is prompted to submit their data download package (DDP) +3. A Python script you wrote, extracts the data you need for your research +4. That data gets presented to the participant on screen +5. The participants decides to donate and you receive the data + +## Using the data donation task in a data donation study + +The data donation task needs to be used in together with Next. Next is the backend for the data donation task. With Next you can configure a data donation study: i.e. configure: + +* Your data donation task +* An information page +* An informed consent page +* A privacy policy +* Instruction manuals for participants +* Configure where the data should go +* and more + +You can find more information on how to deploy a study in the wiki + + +## How does the data donation task work? + +**The idea behind the data donation task** +The data donation task repository is in essence a toolkit with which you can build your own custom data donation task. +It is designed as a toolkit because researchers need to tailor the data donation task to their own interests; they interested in different DDPs and are interested in different data within those DDPs. + +This toolkit approach has several benefits: + +1. It allows for a bespoke experience for the participant +2. You can only extract (and possibly aggregate) the data you need for you study, which we think is important in order to preserve the privacy of the participant and is often a requirement from your data steward/ethical review board + +These benefits come at the cost of added complexity compared to a one size fits all approach that extracts most or all data from the participant. + +**The design of the data donation task** +The data donation task contains reusable components (such as: a screen that prompts the participant to submit their DDP and a screen with tables that the participants need to review prior to donation) that you can use and combine in creative ways to make your own study. +These components are combined in a Python script that is created by the researcher. + +On a high level the script works as follows: + +1. The Python script determines which user interface (UI) component needs to be shown to the participant +2. Whenever the participant is done interacting with the UI component, the result of that interaction is returned to the script +3. The script handles the return result en determine the next UI component that the participant needs to see or interact with, go back to step 1 until the end of the donation task + +**The architecture of the data donation task** +The data donation task is a web application (build with [React](https://react.dev/) and [Pyodide](https://pyodide.org/en/stable/)) that completely runs in the browser of the participant. +The Python script and the UI components will run completely in the browser of the participant. +Data is only sent to the server upon the participant clicking a consent button. + + +## Start writing your first data donation task script + +After you have forked or cloned and installed this repository (see [instruction](https://github.com/d3i-infra/feldspar/wiki/Installation)) you can start creating your own donation task. + +You can create your own study by changing and/or adapting the code in the following directory `port/src/framework/processing/py/port/` +This directory contains the following files: + +* `script.py`: Contains your donation task logic; which screen the participants will see and in what order +* `api/props.py`: Contains all the UI elements you can use; you can use this file for reference +* `api/commands.py`: Contains the Render and the Donate commands +* `main.py`: The main driver of you donation task, you don't need to touch this file + +### `script.py` + +`script.py` is the most important file and the one we will be working with the most + +Lets look at a full example of a `script.py`. In this example we will be extracting data from a fictional DDP. +Participants are asked to submit a zip file (any zip file will do in this case), and we will extract the file names and some meta data from this zip file. +In a real study you would extract something substantial from the data. + +`script.py` must contain a function called `process` this function determines the whole data donation task from start to finish (Which screens the participant will see and in what order, and what kind of data extraction will take place). +At the time of writing this example is also the default `script.py`. + +In this example process defines the following data donation task: + +1. Ask the participant to submit a zip file +2. Perform validation on the submitted zip file, if not valid return to step 1 +3. Extract the data from the submitted zip file +4. Render the extract data on screen in a table +5. Send the data to the data storage upon consent + +Although these can vary per data donation task, they will be more or less similar. + +Below you can find the annotated example `process` function: + +```python +# script.py +import port.api.props as props +from port.api.commands import (CommandSystemDonate, CommandUIRender, CommandSystemExit) + +import pandas as pd +import zipfile + +def process(session_id: str): + platform = "Platform of interest" + + # Start of the data donation task + while True: + # Ask the participant to submit a file + file_prompt = generate_file_prompt(platform, "application/zip, text/plain") + file_prompt_result = yield render_page(platform, file_prompt) + + # If the participant submitted a file: continue + if file_prompt_result.__type__ == 'PayloadString': + + # Validate the file the participant submitted + # In general this is wise to do + is_data_valid = validate_the_participants_input(file_prompt_result.value) + + # Happy flow (all is well): + # The file the participant submitted is valid + if is_data_valid == True: + + # Extract the data you as a researcher are interested in, and put it in a pandas DataFrame + # Show this data to the participant in a table on screen + # The participant can now decide to donate + extracted_data = extract_the_data_you_are_interested_in(file_prompt_result.value) + consent_prompt = generate_consent_prompt(extracted_data) + consent_prompt_result = yield render_page(platform, consent_prompt) + + # If the participant wants to donate the data gets donated + if consent_prompt_result.__type__ == "PayloadJSON": + yield donate(f"{session_id}-{platform}", consent_prompt_result.value) + + break + + # Sad flow + # The data was not valid, ask the participant to retry + if is_data_valid == False: + retry_prompt = generate_retry_prompt(platform) + retry_prompt_result = yield render_page(platform, retry_prompt) + + # The participant wants to retry: start from the beginning + if retry_prompt_result.__type__ == 'PayloadTrue': + continue + # The participant does not want to retry or pressed skip + else: + break + + # The participant did not submit a file and pressed skip + else: + break + + yield exit_port(0, "Success") + yield render_end_page() + +``` + +**The functions used in `process`** + +These are all the functions used in `process` together they make up `script.py`. + +

+extract_the_data_you_are_interested_in + +```python +def extract_the_data_you_are_interested_in(zip_file: str) -> pd.DataFrame: + """ + This function extracts the data the researcher is interested in + + In this case we extract from the zipfile: + * The filesnames + * The compressed file size + * The file size + + You could extract anything here + """ + names = [] + out = pd.DataFrame() + + try: + file = zipfile.ZipFile(zip_file) + data = [] + for name in file.namelist(): + names.append(name) + info = file.getinfo(name) + data.append((name, info.compress_size, info.file_size)) + + out = pd.DataFrame(data, columns=["File name", "Compressed file size", "File size"]) + + except Exception as e: + print(f"Something went wrong: {e}") + + return out +``` + +
+ +
+validate_the_participants_input + +```python +def validate_the_participants_input(zip_file: str) -> bool: + """ + Check if the participant actually submitted a zipfile + Returns True if participant submitted a zipfile, otherwise False + + In reality you need to do a lot more validation. + Some things you could check: + - Check if the the file(s) are the correct format (json, html, binary, etc.) + - If the files are in the correct language + """ + + try: + with zipfile.ZipFile(zip_file) as zf: + return True + except zipfile.BadZipFile: + return False +``` + +
+ +
+render_end_page + +```python +def render_end_page(): + """ + Renders a thank you page + """ + page = props.PropsUIPageEnd() + return CommandUIRender(page) + +``` + +
+ +
+render_page + +```python +def render_page(platform: str, body, progress: int): + """ + Renders the UI components + """ + header = props.PropsUIHeader(props.Translatable({"en": platform, "nl": platform })) + footer = props.PropsUIFooter(progress) + page = props.PropsUIPageDonation(platform, header, body, footer) + return CommandUIRender(page) +``` + +
+ +
+generate_retry_prompt + +```python +def generate_retry_prompt(platform: str) -> props.PropsUIPromptConfirm: + """ + Generates a retry screen, this can be used if validation failed for example. + You can aks the participant to try again, and go back to the submit file prompt + """ + text = props.Translatable({ + "en": f"Unfortunately, we cannot process your {platform} file. Continue, if you are sure that you selected the right file. Try again to select a different file.", + "nl": f"Helaas, kunnen we uw {platform} bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen." + }) + ok = props.Translatable({ + "en": "Try again", + "nl": "Probeer opnieuw" + }) + cancel = props.Translatable({ + "en": "Continue", + "nl": "Verder" + }) + return props.PropsUIPromptConfirm(text, ok, cancel) +``` + +
+ + +
+generate_file_prompt + +```python +def generate_file_prompt(platform: str) -> props.PropsUIPromptFileInput: + """ + Generates a prompt that asks the participant to input a file + """ + description = props.Translatable({ + "en": f"Please follow the download instructions and choose the file that you stored on your device. Click “Skip” at the right bottom, if you do not have a {platform} file. ", + "nl": f"Volg de download instructies en kies het bestand dat u opgeslagen heeft op uw apparaat. Als u geen {platform} bestand heeft klik dan op “Overslaan” rechts onder." + }) + + return props.PropsUIPromptFileInput(description, "application/zip, text/plain") +``` + +
+ +
+generate_consent_prompt + +```python +def generate_consent_prompt(df: pd.DataFrame) -> props.PropsUIPromptConsentForm: + """ + Generates a prompt screen with table(s) with the extract data for the participant to review + """ + table_title = props.Translatable({ + "en": "Zip file contents", + "nl": "Inhoud zip bestand" + }) + table = props.PropsUIPromptConsentFormTable("zip_contents", table_title, df) + return props.PropsUIPromptConsentForm([table], []) +``` + +
+ +
+donate + +```python +def donate(key, json_string): + """ + Sends data to the backend + """ + return CommandSystemDonate(key, json_string) +``` + +
+ + +
+exit_port + +```python +def exit_port(code, info): + """ + When in Next this function exits the data donation task, and lets the participant return to Next + """ + return CommandSystemExit(code, info) +``` + +
+ + +### Start writing your own `script.py` using the api + +Now that you have seen a full example, you can start to try and create your own data donation task. With the elements from the example you can already build some pretty intricate data donation tasks. +Start creating your own by `script.py` by adapting this example to your own needs, for example, instead of file names you could extract data you would actually like to extract yourself. + +If you want to see which up what UI elements are available to you checkout `api/props.py`. In general you need to construct your own pages (prompts) and render them with `render_page` (dont forget `yield`). + +### The usage of `yield` in `script.py` + +Did you notice `yield` instead of return? `yield` makes sure that whenever the code resumes after a page render, it starts where it left off. +If you render a page you need to use yield instead of return, just like in the example. + +### Install Python packages + +The data donation task runs in the browser of the participant, it is important to understand that when Python is running in your browser it is not using the Python version you have installed on your system. +The data donation task is using [Pyodide](https://pyodide.org/en/stable/) this is Python compiled to web assembly that runs in the browser. +This means that packages you have available on your system install of Python, won't be available in the browser. + +If you want to use external packages they should be available for Pyodide, you can check the list of available packages [here](https://pyodide.org/en/stable/usage/packages-in-pyodide.html). +If you have found a package you want to use you can installed it by adding it to the array in the `loadPackages` function in `src/framework/processing/py_worker.js` as shown below: + +```javascript +// src/framework/processing/py_worker.js +function loadPackages() { + console.log('[ProcessingWorker] loading packages') + // These packages are now installed and usable: micropip, numpy, pandas, and lxml + return self.pyodide.loadPackage(['micropip', 'numpy', 'pandas', 'lxml']) +} +``` + +You can now import the packages as you would normally do in Python. + +### Try the donation task from the perspective of the participant + +If you want to try out the above example, follow the installation instructions and start the server with `npm run start`. + +### Tips when writing your own `script.py` + +**Split the extraction logic from the data donation task logic** +You can define your own modules where you create your data extraction, you can `import` those modules in `script.py` + +**Develop in separate script** +You are better off engineering your extraction logic in different scripts and put them in `script.py` whenever you are finished developing. Only do small tweaks in `script.py` + +**Use the console in your browser** +In case of errors they will show up in the browser console. You can use `print` in the Python script and it will show up in the browser console. + +**Keep the diverse nature of DDPs into account** +At least check a couple of DDPs to make sure its reflective of the population you are interesed in. Thinks you can check are: data formats (html, json, plain text, csv, etc.), language settings (they somethines lead to json keys being in a different language or file names other than English). + +**Keep your code efficient** +If your code is not efficient the extraction will take longer, which can result in a bad experience for the participant. In practice I have found that in most cases it's not really an issue, and don't have to pay that much attention to efficiency of your code. +Where efficiency really matters is when you have parse huge html files, beautifulsoup4 is a library that is commonly used to do this, this library is too slow however. As an alternative you can use lxml which is fast enough. + + +**Don't let your code crash** +You cannot have your script crash, if your Python script crashes the task stops as well. This is not a good experience for your participant. +For example in the code you do the following: `value_i_want_to_extract = extracted_data_in_a_dictionary["interesting key"]` if the key `"interesting key"` does not exists, because it does not occur in the data of the participant, the script crashes and the participant cannot continue the data donation task. + +**Data donation checklist** +Creating a good data donation task can be hard due to the variety of DDPs you will encounted. +Check out the following [wiki article](https://github.com/d3i-infra/data-donation-task/wiki/Data-donation-checklist) + + +## Limits of the data donation task + +Currently the data donation task has the following limitations: + +* The data donation task is a frontend, you need to package this together with Next to deploy it. If you want to use it with your own backend you have to make the data donation task compatible with it yourself. A tutorial on how to do this might be added in the future. +* The data donation task is running in the browser of the participant that brings in limitations, such as constraints on the files participant can submit. The limits are around 2GiB thats what Pyodide can handle. But less is better. So keep that in mind whenever you, for example, want to collect data from YouTube: your participants should exclude their own personal videos from their DDP (including these would result in a huge number of separate DDPs of around 2GiB). +* The data donation currently works with text data, nothing keeps us from using other formats in the future (but the constraints on file sizes are still there) +* The data donation task should run fine on mobile, however its not optimized for it, you might need to do some tweaking to the UI yourself diff --git a/_sources/articles/data-donation-checklist.md.txt b/_sources/articles/data-donation-checklist.md.txt new file mode 100644 index 00000000..efc5088e --- /dev/null +++ b/_sources/articles/data-donation-checklist.md.txt @@ -0,0 +1,59 @@ +# Data donation checklist + +Writing data donation scripts can be challenging due to the diverse nature of data download packages (DDPs) your participants will try to submit. +If your participants try to submit a DDP that you did not anticipate your extraction might fail, or your script might crash, in that case you will end up with a non-response and a frustrated participant. + +In order to minimize the number of problems you encounter. We developed a list of points you can pay attention to when developing scripts or performing your own study. + + +**Inspect at least 5 DDPs from persons in the population you are going to sample from** + +Because DDPs will be different for different people, you need to inspect a couple of them (preferably from people from your target population) to learn what those differences are. +You need to verify that the extraction you have in mind works for all DDPs you might encounter. + + +**DDP formats will change over time** + +DDP formats will change over time. Organization providing you with a DDP are under no obligation to keep the format of their DDP the same. The formats could change during data collection, be mindful of this fact. +Before going live with a study request a fresh package of your own and check whether your extraction still works as expected, and in the worst case scenario be ready to change your script during your data donation study. + + +**Validate the DDPs your participant submit and log the results** + +This is crucial to do for two reasons: + +1. If there are multiple versions of a DDP, you need to know which version the participant submitted so you can handle it appropriately. As an example consider the Youtube DDP: depending on the language setting files in the DDP are named differently. Another example is for the Instagram DDPs, keys in json files can be different depending on the language. +2. You probably want to give participants an incentive whenever they did a serious attempt of donating their data. In order to know whether they did a serious attempt you need to validate their DDP to see whether they submitted a package you expect. Example: a participant wants to participate in your study, but finds out its way too much work to request and download a DDP. They submit a random zipfile containing garbage, and they claim they completed the process succesfully. The only way for you to verify whether the participant gave it a fair shot is, to check what they submitted and why that did not result in you receiving data from that participant (If you would have received data its easy to verify they participated). + + +**Write your extraction so it matches the DDP request defaults** + +Often when requesting a DDP participants have a choice, for example you can request a portion of the DDP in html format or json format. The most human readible format (html) is often the default. It will be worth while to tailor your extraction script to the request defaults because participants will not read your instructions where you tell them to get the DDP in json format instead of html. This goes wrong quite often. + +Our way of dealing with this is to bite the bullet and deal with the default DDP formats. This prevents mistakes and keeps the requests instruction for the participant as simple as possible. +Another way of dealing with it is to provide feedback to the participant whenever you detected they submitted the DDP in a format you did not anticipate. + + +**Make sure your code will not crash** + +A crash in your code causes the data donation task to be stuck. The participant will see an error screen with the stacktrace displayed. You don't want this to happen. Carefull programming can prevent your code from crashing. +A common cause for crashes is trying to access a key value pair in a dict that does not exist or sorting a `pd.DataFrame` column that does not exist. Most crashes will be caused by your expectation that the extraction is in a certain format, while in some cases it won't be. + + +**Make the least amount of assumptions possible about the data in a DDP** + +The more assumptions you make about the data the more opportunities your code has to fail. Some examples: + +* Date parsing: Only parse date when its absolutely required. Date formats can be wildly different between participants, anticipating them all or writing code that can parse all dates you might encounter is less trivial than you might think. +* Files in a zip: You can look for file paths you are interested in, or only file names you are interested in. If the file name is unique, there is no need to check for the full file path. Example: if the folder structure in a zip changes but files remain the same, the code that looks only at file names will still work. +* Nested dictionaries: Sometimes you are interested in a value in a dict that is heavily nested. An approach you can take, instead of doing `dict["key1"]["key2"]["key3"]["key_that_sometimes_is_called_something_different"]["key_which_value_you_want"]`, you can to first denest or flatten the dictionary start looking directly for "key_which_value_you_want". You can find an example [here](https://github.com/d3i-infra/port-vu-pilot/blob/master/src/framework/processing/py/port/helpers.py), look for `dict_denester` and `find_items`. + + +**The researcher is responsible for providing you with DDPs and should be knowledgeable about the data** + +If you are reading this checklist chances are you are going to create a data donation task. It could be the case that you are not the principal investigator of the project but just an engineer or person with some coding experience helping the researcher out. Some researchers expect you to be the one to have knowledge about a certain DDP they are interested in. Some researchers believe that because you are working with data, you also have that data available to you, know what it all means or whether data is present in a DDP. This is of course not always the case. Communicate clearly to the researcher that they responsible for the contents of their study, they should know what the data means and that they should tell you what to extract. In some cases the researcher might not even use the platform they are interested in, if that is the case, tell the researcher to start using the platform they are interested in so they can start instructing you on what to extract. + + +**Test a study carefully before you go live** + +All researchers involved in the research group should test the study before you go live. A data donation study has more points of failure compared to traditional survey research, therefore its crucial that every researcher that is involved will test the complete data donation flow and shares their findings with you. diff --git a/_sources/articles/deployment.md.txt b/_sources/articles/deployment.md.txt new file mode 100644 index 00000000..38472356 --- /dev/null +++ b/_sources/articles/deployment.md.txt @@ -0,0 +1,57 @@ +# Deployment of the data donation task + +This article will discuss the option you have when using the data donation task in a data donation study. +The data donation task is designed to be used with Next. + +## The data donation task with Next + +Next is a software as a service platform developed by [Eyra](https://eyra.co/). +As a researcher you can log in to Next and configure data donation study, this means: + +1. Configuring a landing zone for your participants: I.e. a Consent form page, an information page, a privacy policy +2. Configure a task list for your participants to complete: After the landing zone participants see a list of task they have to complete, typically these tasks are: viewing instruction on how to request and download data from a specific platform and administering the data donation task that you developed using this repository +3. Configuring where the donated data should be stored. Next has solutions for: AWS, Azure and Yoda. + +After configuration participants can be sent to Next with a unique id in the url. This unique key id be used when storing the data, so you know who donated their data + + +### Next as a paid service + +You can use Next as a paid service provided by [Eyra](https://eyra.co/). +Please contact Eyra if this is something you are interested in. + + +### Self service Next (community version) on Surf Research Cloud + +Next is available as an offering on Surf Research Cloud available for Researchers at Dutch universities and universities of applied sciences. +Dutch researchers can apply for an EINFRA grant and get access to Research cloud this way. You can apply for an EINFRA grant [here](https://www.surf.nl/en/small-compute-applications-nwo) and click "Straight to the request portal". + +This offering comes with no service or warranties. Contact [datadonation.eu](https://datadonation.eu/) if you are interested in setting this up. + + +### Self service Next (community version) + +Next is a free and open source tool and you could host it yourself. You can find Next [here](https://github.com/eyra/mono/blob/master/SELFHOSTING.md) + + +### Which option should I choose? + +* Next as a paid service: If you have research budget; want to be unburdened and get your data donation study done, this is the best option. +* Self service community Next on Surf Research Cloud: You are a researcher at a Dutch university with no budget this is the best option. When choosing this option you have to realize that it comes with no service or warranties, you have to know what you are doing. +* Self service community Next: If you want to provide Next as a service to your organization. + + +### Add data donation task to your data donation study on Next + +After you have created your data donation task with this repository, you can use this task directly in Next. You can do this as follows: + +1. In the data donation task run the command `npm run release`, this creates a zip file named `release.zip` +2. In Next when configuring your data donation study, go to work flow and create a new item task list item called data donation task +3. In the newly created task list item select the `release.zip` you have just created + +Your data donation task list item is configured! + + +## Use the data donation task without Next + +The data donation task can be adapted so it works with your own bespoke back end. A tutorial on how to do this is might be added in the future. diff --git a/_sources/articles/index.rst.txt b/_sources/articles/index.rst.txt new file mode 100644 index 00000000..f32bbe6e --- /dev/null +++ b/_sources/articles/index.rst.txt @@ -0,0 +1,13 @@ +Articles +======== + +.. toctree:: + :maxdepth: 2 + + introduction-to-data-donation.md + installation.md + creating-your-own-data-donation-task.md + data-donation-checklist.md + deployment.md + next-in-docker.md + visualizations.md diff --git a/_sources/articles/installation.md.txt b/_sources/articles/installation.md.txt new file mode 100644 index 00000000..8137653f --- /dev/null +++ b/_sources/articles/installation.md.txt @@ -0,0 +1,89 @@ +# Installation + +This guide covers the installation of the data donation task locally, so you can start creating your own data donation study! + +## Installation Guide for the Pre-requisites + +You need to install the following software: + +- Python: Make sure it is at least version 3.10 +- Node.js: Make sure it is at least version 16 +- [Poetry](https://python-poetry.org/): It is a build system for Python packages that the data donation task uses. + +Below you can find more detailed instructions on how to install the required software depending on your operating system. +These instructions are just suggestions, always prefer the official instructions that suite your situation best. + +### Linux + +You can install Python and Node.js from the official repositories of your distribution. Here are the general steps: + +1. Open your terminal +2. Use your package manager to install Python and Node.js +3. Install Poetry using pipx, see the instruction [manual](https://python-poetry.org/docs/) + +### Mac OSX + +If you are using a Mac OSX, you can install Python and Node.js using the [HomeBrew](https://brew.sh/) package manager. Follow these steps: + +1. Open your terminal +2. Install HomeBrew following [instructions](https://brew.sh/) if you haven't already +3. Install Python and Node.js by runnning: `brew install python node` +4. Install Poetry using pipx, see the instruction [manual](https://python-poetry.org/docs/) + + +### Windows + +In order to develop on Windows we recommend using Windows Subsystem for Linux (WSL) in combination with VSCode. +Windows subsystem for Linux is a convenient way of running Linux on Windows. +This section will contain a bit more context because the steps might be less familiar to Windows only users. + +If you are already familiar with WSL/Linux, VSCode or both, the installation won't give you too much trouble. +If you are completely new to WSL (or Linux) expect a certain amount of problem solving you have to do. +Key topics to understand are: WSL, and the Ubuntu basics; knowledge on these topics will help you a lot. + +1. Install WSL, see the official installation [instructions](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Install the default Linux distro (Ubuntu 22.04 at the time of writing) and choose a username and password +3. Download and install VSCode +4. Connect VSCode to WSL, see [instructions](https://code.visualstudio.com/docs/remote/wsl-tutorial) +5. Now you can follow the instructions for Linux, Note that Python will be already installed for you + +In theory these steps should cause no problems but in reality you have a couple of issues you could run into. I will discuss some of them I encountered here: + +* You have the be an administrator of your own device. If you are not an administrator you cannot continue the installation +* In order to install WSL, kernel virtualization needs to be on. You can go into the Windows Task Manager and check whether it is on. If its not on, you have to turn it on in the bios of your motherboard. Check what CPU you have (AMD or Intel) and check what the settings is called. If the setting is not present in the bios your CPU might not support virtualization, this means you cannot run WSL +* If you have WSL 1 installed make sure you continue with WSL 2 +* Make sure you don't forget the username and password you chose during the installation +* If you have VSCode open make sure you are connected to WSL, you can check this by looking at the "><" icon in the lower left corner of VSCode +* Remember that if you are connected to WSL with VSCode you are working in Ubuntu. Programs and files are not shared between Windows and Ubuntu, meaning if you have installed a program on Windows is not available for Ubuntu and vice versa. +* Remember to not use Powershell when connected to WSL use bash +* If you see error messages related to Windows in the terminal (something with cmd.exe for example), you know that Ubuntu is trying to open a program on Windows. This will never work. This is happening because Windows manipulates the PATH variable on Ubuntu that contains information about where the programs Ubuntu can open are. Example: you want to check which version of node you have `node -v` and you get an error with cmd.exe in the error message. Solutions: uninstall the windows version of the Node.js or manipulate the PATH variable so it does not try to open the Windows version of Nodejs. How to do that is outside the scope of this manual. +* To run port you need version Nodejs version 18 this version is not in the official Ubuntu 22.04 repositories. See for example this [guide](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04) on how to get nodejs version 18. If you run into errors you are expected to search for them and to solve them + +#### Don't want to use WSL? + +That's completely fine too, you can change the commands in `package.json` so they work on Windows instead. + +## Installation of the data donation task + +If you have the Pre-requisites installed the installation of the data donation task should be straightforward. + +1. Clone the repository: + +``` +git clone https://github.com/d3i-infra/data-donation-task.git +``` + +2. Install the dependencies by running the following commands: + +``` +cd ./data-donation-task +npm install +``` + +3. Start a local web server to server the data donation app: + +``` +npm run start +``` + +You can now go to the browser: [`http://localhost:3000`](http://localhost:3000) and you should be greeted by a mock data donation task diff --git a/_sources/articles/introduction-to-data-donation.md.txt b/_sources/articles/introduction-to-data-donation.md.txt new file mode 100644 index 00000000..e4b24f63 --- /dev/null +++ b/_sources/articles/introduction-to-data-donation.md.txt @@ -0,0 +1,5 @@ +# Introduction to Data Donation + +We have produced 2 videos detailing the concept of data donation, accessible on our website at [datadonation.eu/data-donation](https://datadonation.eu/data-donation/). + +Additionally, our [website](https://datadonation.eu) provides guidance on how to set up a data donation study; simply refer to the "Prepare a study" tab. diff --git a/_sources/articles/next-in-docker.md.txt b/_sources/articles/next-in-docker.md.txt new file mode 100644 index 00000000..ed0beaff --- /dev/null +++ b/_sources/articles/next-in-docker.md.txt @@ -0,0 +1,198 @@ +# Try out Next with Docker + +This tutorial outlines how you can run Next in a docker container. + +This is great for trying out the Next platform and will show you the necessary settings so you could use it in production. + +## Prerequisites + +In order for you to try out Next you need to set up some prerequisites. + +### Unsplash + +Configure a developer account at [unsplash](https://unsplash.com/) and get an API key. You can do this for free. + +Unsplash is used as the source for banner images used to customize studies. + + +### Google OIDC + +Configure a google OIDC connect application in the [google cloud console](https://console.cloud.google.com/welcome?project=stalwart-yen-241815). For the details check the [official instructions](https://developers.google.com/identity/openid-connect/openid-connect). + +Google OIDC (OpenID Connect) is used to manage user authentication and account sign-ins. + + +## Run Next in a Docker container + +In this step, we will create and run the necessary containers using Docker Compose. + +We are going to create a folder with the following structure: + +``` +. +├── docker-compose.yaml +├── proxy +│   ├── certs +│   │   ├── nginx-selfsigned.crt +│   │   └── nginx-selfsigned.key +│   └── conf +│   └── nginx.conf +``` + +In the next step we are going to create the files. + + +### Build the Next Docker image + +Clone or fork [Next](https://github.com/eyra/mono) + +`cd` into `/core` + +and build the image with: + +``` +docker build --build-arg VERSION=1.0.0 --build-arg BUNDLE=self . -t self-d3i:latest +``` + +### Setup certificates for TLS + +Create certificates and put them in `proxy/certs` + +``` +openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt +``` + +### Nginx configuration + +We are going to use Nginx as [reverse proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/). + +Nginx will be used to provide TLS for our HTTP connections. + +Paste the following nginx configuration in `proxy/conf`: + +``` +# nginx.conf +events {} +http { + server { + listen 80; + listen [::]:80; + server_name localhost; + + # Redirect all HTTP requests to HTTPS + return 301 https://$server_name$request_uri; + } + + server { + server_name localhost; + + if ($scheme != "https") { + return 301 https://$host$request_uri; + } + + location / { + allow all; + proxy_pass http://app:8000; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_max_temp_file_size 1m; + } + + listen 443 ssl; + ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt; + ssl_certificate_key /etc/nginx/certs/nginx-selfsigned.key; + } +} +``` + +This Nginx configuration works with websocket connections which Next (Phoenix web application) uses. + + +### Docker compose yaml + +Now create the docker-compose.yaml: + +``` +#docker-compose.yaml +services: + app: + image: self-d3i:latest + container_name: self-d3i + restart: always + environment: + APP_NAME: next + APP_DOMAIN: localhost + APP_MAIL_DOMAIN: "@gmail" + APP_ADMINS: youremail@gmail.com + DB_USER: user + DB_PASS: password + DB_HOST: db + DB_NAME: test_database + SECRET_KEY_BASE: "aUMZobj7oJn58XIlMGVcwTYrCsAllwDCGlwDCGlwDCGwDChdhsjahdghaggdgdGt7MoQYJtJbA=" + STATIC_PATH: "/tmp" + UNSPLASH_ACCESS_KEY: "" + UNSPLASH_APP_NAME: "" + GOOGLE_SIGN_IN_CLIENT_ID: "" + GOOGLE_SIGN_IN_CLIENT_SECRET: "" + STORAGE_SERVICES: "builtin, yoda, azure" + volumes: + - app_data:/tmp + depends_on: + - db + + db: + image: postgres:latest + container_name: db-next + restart: always + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: password + POSTGRES_DB: test_database + volumes: + - postgres_data:/var/lib/postgresql/data + + proxy: + image: nginx:latest + container_name: nginx + ports: + - 443:443 + volumes: + - ./proxy/conf/nginx.conf:/etc/nginx/nginx.conf + - ./proxy/certs:/etc/nginx/certs + depends_on: + - app + +volumes: + postgres_data: + app_data: +``` + +and replace the following variables with the values you obtained in the previous steps: + +``` +UNSPLASH_ACCESS_KEY: "" +UNSPLASH_APP_NAME: "" +GOOGLE_SIGN_IN_CLIENT_ID: "" +GOOGLE_SIGN_IN_CLIENT_SECRET: "" +``` + +If you want to learn more about the variables you can read the [documentation](https://github.com/eyra/mono/blob/master/SELFHOSTING.md). + +Now you are ready to start the containers with: + +``` +docker compose up +``` + +Go to `https://localhost:80` and if everything went well you should see Next. + +Note: because you self-signed your TLS certificates your browser will complain: accept all the risks and continue. + +## Next steps in Next + +Now you can play around in Next. If you want to login as admin go to `/admin/login`. diff --git a/_sources/articles/visualizations.md.txt b/_sources/articles/visualizations.md.txt new file mode 100644 index 00000000..e6012616 --- /dev/null +++ b/_sources/articles/visualizations.md.txt @@ -0,0 +1,195 @@ +# Adding data visualizations + +You can add data visualizations to the consent form page, that will be shown below a data table. These visualizations will dynamically aggregate and visualize the data, responding to search queries and deleted items. + +Good visualizations can help participants to see and explore what data they are about to donate, and thereby support informed consent. Furthermore, it can make the data donation process more educational and enjoyable. + +## Adding visualizations to tables + +Visualizations are always directly connected to a **consent form table**. When in script.py you create a consent form table, you can implement visualizations as follows: + +```python +table_title = props.Translatable({ + "en": "Table title", + "nl": "Tabel titel" +}) + +table = props.PropsUIPromptConsentFormTable( + id = "tableId", + title = table_title, + data_frame = df, + visualizations = []) +``` + +You can now add one or multiple **visualization specifications** to the `visualizations` list. + +## Visualization Specification + +A visualization specification provides instructions for creating a visualization based on the data in the table. This visualization will then be created dynamically, so that when the table is updated (e.g., when participants search the data or remove rows) the visualization is updated as well. + +A specification covers three main components: + +- **Aggregation**: How should the table data be aggregated. e.g., count the number of rows per day +- **Display**: How should the aggregated data be displayed? e.g., line chart, bar chart, wordcloud +- **Labels**: Any labels to help along interpretation, optionally with translations (as seen above in the table_title) + +A detailed explanation of the visualizatoin specification is shown below in the **Specification Guide**. But we recommend first having a look at the following examples. + +## Examples + +Say we have data about every time a participant viewed a certain channel, and we also also know the channel category (e.g., sports, entertainment) and the exact timestampe. We have put this in a `data_frame` with the columns: **channel**, **category** and **timestamp**. We can then make a number of different visualizations. + +### Categorical variables | Bar chart of views per category + +```python +vis1 = dict( + title = dict(en= "views per category", ...), + type = "bar", + group = dict(column = "category", label = "Category") + values = [dict(aggregate = "count", label = dict(en = "number of views", ...))] +) +``` + +The **type** determines the chart type, and can in this case be "bar","line" or "area". The **group** determines how the data should be grouped and aggregated, which in this case is per category. The **values** determines the values to calculate per group, which here is just the count of the rows. + +**!!!** Notice that `values` is a list, and not a single dictionary. Adding multiple value dictionaries will create multiple y-values, for grouped barcharts or multiple lines or areas. + +The **label**'s can be either a single _string_ (as in the `group`) or a dictionary with different languages, where keys are country codes, and values are labels (as in the `values`). + +### Date variables | Area chart of views per month + +```python +vis2 = dict( + title = dict(en= "views over time", ...), + type = "area", + group = dict(column = "timestamp", dateFormat = "month", label = "Month") + values = [dict(aggregate = "count", label = dict(en = "number of views", ...))] +) +``` + +In this area chart (i.e. a line chart where the area below the line is coloured) we group the data by month, and use the same aggregation values as in the previous example to count the number of views per group. + +The **dateFormat** grouping variable can be set if the column is a date string in ISO format: `YYYY-MM-DD` for date or `YYYY-MM-DD HH:MM:SS` for datetime (You can also use `YYYY-MM-DDTHH:SS:MM)`, but that doesn't look niced in the table). + +The following formats are supported: + +- **Fixed interval**: "year", "quarter", "month", "day", "hour" +- **Automatic interval**: "auto" will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with "hour" interval) +- **cycles / season**: "month_cycle" (January - December), "weekday_cycle" (Monday - Sunday) and "hour_cycle" (1 - 24). + +### Second-level aggregation | Line chart of views over time per category + +Above we mentioned that you can add multiple values to create multiple y-values. But this only works if your data is _wide_. Alternatively, you can also perform a second-level aggregation on _long_ data. + +```python +vis3 = dict( + title = dict(en= "views per category over time", ...), + type = "line", + group = dict(column = "timestamp", dateFormat = "auto", label = "Month") + values = [dict( + aggregate = "count", + label = dict(en = "number of views", ...), + group_by = "category" + )] +) +``` + +Here we changed three things. First, we changed the type to "line", because that's a bit easier on the eye with multiple y-values. Second, we added `group_by` to the aggregation value, setting it to "category". This will break the values data into groups for categories, and calculate the aggregation statistic per category. This will be visualized as a line chart where the frequency of each category (e.g., sport, entertainment) will be displayed on separate lines. + +A third change is that we set the dateFormat to "auto" instead of fixing it to "month". This will automatically pick a suitable time interval based on the range of column (last date - first date). This could mean that different participants see different intervals, depending on what works best for their own data. + +### Text variables | A wordcloud + +As a final example, we'll look at a different sub-specification for visualizing textual data. We'll make a wordcloud of channels, based on their frequency in the data. + +```python +vis4 = dict( + title = dict(en= "Most viewed channels", ...), + type = "wordcloud", + textColumn = 'channel', + tokenize = False, +) +``` + +This creates a wordcloud of the full channel names. Note that we could also have tokenized the texts, but for channels (e.g., YouTube channels) the full names are probably most informative. + +## Example wrap-up + +Now that we have created visualizations, we can add them to the consent form table. Note that above we assigned our specifications to **vis1** to **vis4**. We can now simply add them to the visualiations list. + +```python +table = props.PropsUIPromptConsentFormTable( + id = "tableId", + title = table_title, + data_frame = df, + visualizations = [vis1, vis2, vis3, vis4]) +``` + +## Specification guide + +This is an overview of the visualiation specification. First, there are some **general visualization arguments** that every visualization has. Second, there are specific arguments depending on the visualization **type** + +### General visualization arguments + +Every visualization has the following arguments + +- **title**: A title for the visualization. This has to be a translation dictionary (see **translation** spec below) +- **type**: The type of the visualization. The type determines what specification you need to follow + - **Chart visualiation**: "line", "bar" or "area" + - **Text visualization**: "wordcloud" +- **height (optional)**: The height of the chart in pixels + +### Chart visualization arguments + +Chart visualizations work by aggregating the data into X, Y and optionally Z axes. It's the basis for most common charts. + +- **type**: "line", "bar" or "area" +- **group**: specifies the column to group and aggregate the data by. The group is visualized on the x-axis. + - **label**: x-axis label. Either a string or translation dictionary (see **translation** spec below) + - **column**: the name of the column + - **dateFormat (optional)**: if column is a date, select how it should be grouped. (see **dateFormat** spec below) + - **levels (optional)**. A list of strings with the specific column values to use. This also makes sure these values are displayed if they are missing in a participants data (also see **values** -> **addZeroes**) +- **values**: A list (**!!**) of objects. Each object specifies an (aggregate) value to calculate per group. A value is visualized on the y-axis. Multiple values can be given for multiple y-values + - **label**: y-axis label. Either a string or translation dictionary (see **translation** spec below) + - **column (optional)**: the column based on which the value is calculated. Can be empty if just counting rows. + - **aggregate**: The aggregation function. (see **aggregate** spec below) + - **addZeroes**: Boolean. If true, add zeroes for empty groups. If **levels** are specified, participants will explicitly see that they occured zero times in their data. If **dateFormat** is used, this fills possible gaps (note that this mostly makes sense for row "count" aggregations where absense implies zero) + - **group_by (optional)**: the name of a column to do a second-level aggregation. This will create multiple y-values where the value in the column becomes the label. + +### Text visualization arguments + +Text visualizations take a text column as input. + +- **type**: "wordcloud" +- **textColumn**: A text (string) column in the data +- **tokenize (optional)**: Boolean. If true, the text will be tokenized +- **valueColumn (optional)**: By default, every text or token will be given a value based on the number of rows in which it occurs. Alternatively, you can specify a numeric column, in which case (the sum of) the values in this column will be used. +- **extract (optional)**: Normally, all preprocessing of the data should be handled in the import scripts, but for convenience we will provide some common methods for extracting parts of a string. Currently supports: + - "url_domain": If the column contains URLs, extract only the domain. + +### Spec details + +Here are some details for the more complicated spec components. + +#### - translation + +A translation dictionary has country codes as keys and the translations as values: `dict(en = "english label", nl = "dutch label")`. (This is identical to the dictionary used in the `props.Translatable`) + +#### - dateFormat + +If column is a date (`YYYY-MM-DD`, `YYYY-MM-DD HH:MM` or `YYYY-MM-DD HH:MM:SS`), select how the date is grouped. options are: + +- **Fixed interval**: "year", "quarter", "month", "day", "hour" +- **Automatic interval**: "auto" will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with "hour" interval) +- **cycles / season**: "month_cycle" (January - December), "weekday_cycle" (Monday - Sunday) and "hour_cycle" (1 - 24). + +#### - aggregate + +The function by which to aggregate the column in `values`. The following functions are currently supported + +- "count" just counts the rows +- "mean" and "sum" require the value column to be numeric. +- "count_pct" gives the count as a percentage of the total number of rows.\* +- "pct" sums the values of a numeric column and divides by the total sum.\* + +**\*** _If a secondary aggregation is used, percentages are calculated within the primary aggregation group_ diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..3436c4b6 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,28 @@ +The Data Donation Task Documentation +==================================== + +Welcome to the Data Donation Task Documentation! + +This is the place to learn about the data donation task. +Checkout the following wiki articles to get started: + +.. toctree:: + :maxdepth: 2 + + articles/index + + +You can find the API documentation here: + +.. toctree:: + :maxdepth: 3 + + api/index + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..7ebbd6d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/basic_mod.css b/_static/basic_mod.css new file mode 100644 index 00000000..0df77588 --- /dev/null +++ b/_static/basic_mod.css @@ -0,0 +1,1194 @@ +@font-face { + font-family: Roboto; + font-style: normal; + font-weight: 400; + src: local("Roboto"), local("Roboto-Regular"), url(fonts/roboto/roboto.woff2) format("woff2"); +} +@font-face { + font-family: Roboto; + font-style: italic; + font-weight: 400; + src: local("Roboto Italic"), local("Roboto-Italic"), url(fonts/roboto/roboto-italic.woff2) format("woff2"); +} +@font-face { + font-family: Roboto; + font-style: normal; + font-weight: 700; + src: local("Roboto Bold"), local("Roboto-Bold"), url(fonts/roboto/roboto-bold.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 400; + src: local("Roboto Mono Regular"), local("RobotoMono-Regular"), url(fonts/roboto-mono/roboto-mono.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: italic; + font-weight: 400; + src: local("Roboto Mono Italic"), local("RobotoMono-Italic"), url(fonts/roboto-mono/roboto-mono-italic.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 700; + src: local("Roboto Mono Bold"), local("RobotoMono-Bold"), url(fonts/roboto-mono/roboto-mono-bold.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: italic; + font-weight: 700; + src: local("Roboto Mono Bold Italic"), local("RobotoMono-BoldItalic"), url(fonts/roboto-mono/roboto-mono-bold-italic.woff2) format("woff2"); +} +/*****************************************************************************/ +/* Typography */ +:root { + --codeBackgroundColor: #f8f8f8; + --inlineCodeBackgroundColor: #f8f8f8; + --codeBlue: #0000ff; + --codeGreen: #008000; + --dividerColor: rgba(0, 0, 0, 0.08); + --faintFontColor: rgba(0, 0, 0, 0.6); + --fontColor: #252630; + --linkColor: #2980b9; + --mainBackgroundColor: white; + --mainNavColor: #3889ce; + --notificationBannerColor: #176bb0; + --searchHighlightColor: #fff150; + --sidebarColor: white; + --navbarHeight: 4rem; +} +:root[data-mode=darkest] { + --mainBackgroundColor: black; + --sidebarColor: black; + --codeBackgroundColor: rgba(255, 255, 255, 0.1); + --inlineCodeBackgroundColor: rgba(255, 255, 255, 0.1); +} +:root[data-mode=dark] { + --mainBackgroundColor: #242429; + --sidebarColor: #242429; + --codeBackgroundColor: rgba(0, 0, 0, 0.1); + --inlineCodeBackgroundColor: rgba(255, 255, 255, 0.06); +} +:root[data-mode=dark], :root[data-mode=darkest] { + --codeBlue: #77baff; + --codeGreen: #38c038; + --dividerColor: rgba(255, 255, 255, 0.1); + --faintFontColor: rgba(255, 255, 255, 0.6); + --fontColor: white; + --linkColor: #319be0; + --searchHighlightColor: #fe8e04; +} + +body { + font-family: Roboto, "OpenSans", sans-serif; + background-color: var(--mainBackgroundColor); + color: var(--fontColor); +} + +h1 { + font-size: 2rem; +} + +h2 { + font-size: 1.5rem; +} + +h3 { + font-size: 1.17rem; +} + +a { + color: var(--linkColor); + text-decoration: none; +} + +/*****************************************************************************/ +html { + height: 100%; + scroll-padding-top: var(--navbarHeight); +} + +html, +body { + padding: 0; + margin: 0; + min-height: 100%; +} + +body { + display: flex; + flex-direction: column; +} + +/*****************************************************************************/ +/* Top nav */ +#searchbox h3#searchlabel { + display: none; +} +#searchbox form.search { + display: flex; + flex-direction: row; +} +#searchbox form.search input { + display: block; + box-sizing: border-box; + padding: 0.3rem; + color: rgba(0, 0, 0, 0.7); + border-radius: 0.2rem; +} +#searchbox form.search input[type=text] { + border: none; + background-color: rgba(255, 255, 255, 0.6); + flex-grow: 1; + margin-right: 0.2rem; +} +#searchbox form.search input[type=text]::placeholder { + color: rgba(0, 0, 0, 0.6); +} +#searchbox form.search input[type=submit] { + cursor: pointer; + color: var(--mainNavColor); + flex-grow: 0; + border: none; + background-color: white; +} + +div#top_nav { + position: fixed; + top: 0; + left: 0; + right: 0; + color: white; + z-index: 100; +} +div#top_nav div#notification_banner { + background-color: var(--notificationBannerColor); + box-sizing: border-box; + padding: 0.1rem 1rem; + display: flex; + flex-direction: row; + align-items: center; + justify-content: right; +} +div#top_nav div#notification_banner a.close { + flex-grow: 0; + flex-shrink: 0; + color: rgba(255, 255, 255, 0.85); + text-align: right; + font-size: 0.6rem; + text-transform: uppercase; + display: block; + text-decoration: none; + margin-left: 0.5rem; +} +div#top_nav div#notification_banner a.close:hover { + color: white; +} +div#top_nav div#notification_banner p { + flex-grow: 1; + margin: 0; + text-align: center; + font-size: 0.9rem; + line-height: 1.2; + padding: 0.4rem 0; +} +div#top_nav div#notification_banner p a { + color: white; + text-decoration: underline; +} +div#top_nav nav { + background-color: var(--mainNavColor); + box-sizing: border-box; + padding: 1rem; + display: flex; + flex-direction: row; + align-items: center; +} +div#top_nav nav h1 { + flex-grow: 1; + font-size: 1.2rem; + margin: 0; + padding: 0 0 0 0.8rem; + line-height: 1; +} +div#top_nav nav h1 a { + color: white; +} +div#top_nav nav h1 img { + height: 1.3rem; + width: auto; +} +div#top_nav nav p#toggle_sidebar { + transform: rotate(90deg); + letter-spacing: 0.1rem; + flex-grow: 0; + margin: 0; + padding: 0; +} +div#top_nav nav p#toggle_sidebar a { + color: white; + font-weight: bold; +} +div#top_nav nav a#mode_toggle, div#top_nav nav a#source_link { + margin-right: 1rem; + display: block; + flex-grow: 0; +} +div#top_nav nav a#mode_toggle svg, div#top_nav nav a#source_link svg { + height: 1.3rem; + width: 1.3rem; + vertical-align: middle; +} +div#top_nav nav p.mobile_search_link { + margin: 0; +} +@media (min-width: 50rem) { + div#top_nav nav p.mobile_search_link { + display: none; + } +} +div#top_nav nav p.mobile_search_link a { + color: white; +} +div#top_nav nav p.mobile_search_link a svg { + height: 1rem; + vertical-align: middle; +} +@media (max-width: 50rem) { + div#top_nav nav div.searchbox_wrapper { + display: none; + } +} +div#top_nav nav div.searchbox_wrapper #searchbox { + align-items: center; + display: flex !important; + flex-direction: row-reverse; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link { + margin: 0 0.5rem 0 0; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link a { + color: rgba(255, 255, 255, 0.8); + font-size: 0.8em; + padding-right: 0.5rem; + text-decoration: underline; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link a:hover { + color: white; +} + +/*****************************************************************************/ +/* Main content */ +div.document { + flex-grow: 1; + margin-top: 2rem; + margin-bottom: 5rem; + margin-left: 15rem; + margin-right: 15rem; + padding-top: var(--navbarHeight); + /***************************************************************************/ + /***************************************************************************/ +} +@media (max-width: 50rem) { + div.document { + margin-left: 0px; + margin-right: 0px; + } +} +div.document section, +div.document div.section { + margin: 4rem 0; +} +div.document section:first-child, +div.document div.section:first-child { + margin-top: 0; +} +div.document section > section, +div.document div.section > div.section { + margin: 4rem 0; +} +div.document section > section > section, +div.document div.section > div.section > div.section { + margin: 2rem 0 0 0; +} +div.document section > section > section > section, +div.document div.section > div.section > div.section > div.section { + margin: 1.5rem 0 0 0; +} +div.document h1 + section, +div.document h1 + div.section { + margin-top: 2.5rem !important; +} +div.document h2 + section, +div.document h2 + div.section { + margin-top: 1.5rem !important; +} +div.document img { + max-width: 100%; +} +div.document code { + padding: 2px 4px; + background-color: var(--inlineCodeBackgroundColor); + border-radius: 0.2rem; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9em; +} +div.document div.documentwrapper { + max-width: 45rem; + margin: 0 auto; + flex-grow: 1; + box-sizing: border-box; + padding: 1rem; +} +div.document div.highlight { + color: #252630; + box-sizing: border-box; + padding: 0.2rem 1rem; + margin: 0.5rem 0; + border-radius: 0.2rem; + font-size: 0.9rem; +} +div.document div.highlight pre { + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; +} +div.document div[class*=highlight] { + overflow-x: auto; +} +div.document a.headerlink { + font-size: 0.6em; + display: none; + padding-left: 0.5rem; + vertical-align: middle; +} +div.document h1, +div.document h2, +div.document h3, +div.document h4, +div.document h5, +div.document h6, +div.document str, +div.document b { + font-weight: 700; +} +div.document h1 { + margin: 0.8rem 0 0.5rem 0; +} +div.document h2 { + margin: 0.8rem 0 0.5rem 0; +} +div.document h3, div.document h4 { + margin: 1rem 0 0.5rem 0; +} +div.document h1:hover a.headerlink, +div.document h2:hover a.headerlink, +div.document h3:hover a.headerlink, +div.document h4:hover a.headerlink { + display: inline-block; +} +div.document p, +div.document li { + font-size: 1rem; + line-height: 1.5; +} +div.document li p { + margin: 0 0 0.5rem 0; +} +div.document ul, div.document ol { + padding-left: 2rem; +} +div.document ol.loweralpha { + list-style: lower-alpha; +} +div.document ol.arabic { + list-style: decimal; +} +div.document ol.lowerroman { + list-style: lower-roman; +} +div.document ol.upperalpha { + list-style: upper-alpha; +} +div.document ol.upperroman { + list-style: upper-roman; +} +div.document dd { + margin-left: 1.5rem; +} +div.document hr { + border: none; + height: 1px; + background-color: var(--dividerColor); + margin: 2rem 0; +} +div.document table.docutils { + border-collapse: collapse; +} +div.document table.docutils th, div.document table.docutils td { + border: 1px solid var(--dividerColor); + box-sizing: border-box; + padding: 0.5rem 1rem; +} +div.document table.docutils th p, div.document table.docutils th ul, div.document table.docutils td p, div.document table.docutils td ul { + margin: 0.3rem 0; +} +div.document table.docutils th ul, div.document table.docutils td ul { + padding-left: 1rem; +} +div.document form input { + padding: 0.5rem; +} +div.document form input[type=submit], div.document form button { + border: none; + background-color: var(--mainNavColor); + color: white; + padding: 0.5rem 1rem; + border-radius: 0.2rem; +} +div.document span.highlighted { + background-color: var(--searchHighlightColor); + padding: 0 0.1em; +} +div.document div#search-results { + padding-top: 2rem; +} +div.document div#search-results p.search-summary { + font-size: 0.8em; +} +div.document div#search-results ul.search { + list-style: none; + padding-left: 0; +} +div.document div#search-results ul.search li { + border-bottom: 1px solid var(--dividerColor); + margin: 0; + padding: 2rem 0; +} +div.document div#search-results ul.search li > a:first-child { + font-size: 1.2rem; +} +div.document dd ul, div.document dd ol { + padding-left: 1rem; +} +div.document dl.py { + margin-bottom: 2rem; +} +div.document dl.py dt.sig { + background-color: var(--codeBackgroundColor); + color: var(--fontColor); + box-sizing: border-box; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9rem; + padding: 1rem; + border-left: 5px solid rgba(0, 0, 0, 0.1); + border-radius: 0.2rem; +} +div.document dl.py em.property { + color: var(--sidebarColor); + font-weight: bold; +} +div.document dl.py span.sig-name { + color: var(--codeBlue); + font-weight: bold; +} +div.document dl.py em.property { + color: var(--codeGreen); +} +div.document dl.py em.sig-param { + margin-left: 2rem; +} +div.document dl.py em.sig-param span.default_value { + color: var(--codeGreen); +} +div.document dl.py span.sig-return span.sig-return-typehint { + color: var(--fontColor); +} +div.document dl.py span.sig-return span.sig-return-typehint pre { + color: var(--fontColor); +} +div.document dl.py em.sig-param > span:first-child { + font-weight: bold; +} +div.document dl.cpp, div.document dl.c { + margin-bottom: 1rem; +} +div.document dl.cpp dt.sig, div.document dl.c dt.sig { + background-color: var(--codeBackgroundColor); + color: var(--fontColor); + box-sizing: border-box; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9rem; + padding: 1rem; + border-left: 5px solid rgba(0, 0, 0, 0.1); + border-radius: 0.2rem; + line-height: 1.4; +} +div.document dl.cpp span.sig-name, div.document dl.c span.sig-name { + color: var(--codeBlue); + font-weight: bold; +} +div.document dl.cpp span.sig-indent, div.document dl.c span.sig-indent { + margin-left: 2rem; +} +div.document dl.cpp span.target + span, div.document dl.c span.target + span { + color: var(--codeGreen); +} +div.document dl.cpp span.sig-param > span:first-child, div.document dl.c span.sig-param > span:first-child { + font-weight: bold; +} +div.document div.admonition { + box-shadow: 0px 0px 0px 1px var(--dividerColor); + border-radius: 0.2rem; + margin: 1rem 0; + overflow: hidden; +} +div.document div.admonition p { + box-sizing: border-box; + font-size: 0.9rem; + padding: 0.5rem; + margin: 0; +} +div.document div.admonition p:first-child { + padding-bottom: 0; + margin-bottom: 0; +} +div.document div.admonition p + p { + padding-top: 0.2rem; +} +div.document div.admonition p.admonition-title { + font-weight: bolder; + letter-spacing: 0.01rem; +} +div.document div.admonition.hint, div.document div.admonition.important, div.document div.admonition.tip { + border-left: 5px solid #56b79c; +} +div.document div.admonition.hint p.admonition-title, div.document div.admonition.important p.admonition-title, div.document div.admonition.tip p.admonition-title { + color: #56b79c; +} +div.document div.admonition.note { + border-left: 5px solid #587f9f; +} +div.document div.admonition.note p.admonition-title { + color: #587f9f; +} +div.document div.admonition.danger, div.document div.admonition.error { + border-left: 5px solid #e6a39a; +} +div.document div.admonition.danger p.admonition-title, div.document div.admonition.error p.admonition-title { + color: #e6a39a; +} +div.document div.admonition.attention, div.document div.admonition.caution, div.document div.admonition.warning { + border-left: 5px solid #e7b486; +} +div.document div.admonition.attention p.admonition-title, div.document div.admonition.caution p.admonition-title, div.document div.admonition.warning p.admonition-title { + color: #e7b486; +} + +/*****************************************************************************/ +/* Sidebar */ +div.sphinxsidebar { + background-color: var(--sidebarColor); + border-right: 1px solid var(--dividerColor); + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: 15rem; + box-sizing: border-box; + padding: var(--navbarHeight) 1rem 1rem; + z-index: 50; +} +@media (max-width: 50rem) { + div.sphinxsidebar { + display: none; + } +} +div.sphinxsidebar div.sphinxsidebarwrapper { + height: 100%; + overflow-y: auto; +} +div.sphinxsidebar ul { + padding-left: 0rem; + list-style: none; +} +div.sphinxsidebar ul li { + font-size: 0.9rem; + line-height: 1.2; +} +div.sphinxsidebar ul li a { + display: block; + box-sizing: border-box; + padding: 0 0.2rem 0.6rem; + color: var(--fontColor); + text-decoration: none; +} +div.sphinxsidebar ul li a.current { + color: var(--linkColor); +} +div.sphinxsidebar ul li a:hover { + color: var(--linkColor); +} +div.sphinxsidebar ul li > ul { + padding-left: 1rem; +} +div.sphinxsidebar p { + color: var(--faintFontColor); +} + +/*****************************************************************************/ +/* The right sidebar, showing the table of contents for the current page. */ +div#show_right_sidebar { + position: fixed; + right: 0; + top: 0; + z-index: 20; + background-color: var(--sidebarColor); + border-left: 1px solid var(--dividerColor); + border-bottom: 1px solid var(--dividerColor); + padding: var(--navbarHeight) 1rem 0rem; +} +div#show_right_sidebar p { + font-size: 0.9em; +} +div#show_right_sidebar p span { + color: var(--faintFontColor); + vertical-align: middle; +} +div#show_right_sidebar p span.icon { + color: var(--linkColor); + font-size: 0.9em; + padding-right: 0.2rem; +} + +div#right_sidebar { + position: fixed; + right: 0; + top: 0; + z-index: 50; + background-color: var(--sidebarColor); + width: 15rem; + border-left: 1px solid var(--dividerColor); + box-sizing: border-box; + padding: var(--navbarHeight) 1rem 1rem; + height: 100%; + overflow-y: auto; +} +div#right_sidebar p span { + color: var(--faintFontColor); + vertical-align: middle; +} +div#right_sidebar p span.icon { + color: var(--linkColor); + font-size: 0.9em; + padding-right: 0.2rem; +} +div#right_sidebar ul { + padding-left: 0rem; + list-style: none; +} +div#right_sidebar ul li { + font-size: 0.9rem; + line-height: 1.2; +} +div#right_sidebar ul li a { + display: block; + box-sizing: border-box; + padding: 0 0.2rem 0.6rem; + color: var(--fontColor); + text-decoration: none; +} +div#right_sidebar ul li a.current { + color: var(--linkColor); +} +div#right_sidebar ul li a:hover { + color: var(--linkColor); +} +div#right_sidebar ul li > ul { + padding-left: 1rem; +} +div#right_sidebar p { + color: var(--faintFontColor); +} +@media (max-width: 50rem) { + div#right_sidebar { + display: none; + } +} + +/*****************************************************************************/ +/* Footer */ +div.footer { + box-sizing: border-box; + padding-top: 2rem; + font-size: 0.7rem; + text-align: center; + text-transform: uppercase; + color: var(--faintFontColor); +} + +p#theme_credit { + font-size: 0.6rem; + text-transform: uppercase; + text-align: center; + color: var(--faintFontColor); +} + +/*****************************************************************************/ +/* Buttons */ +div.button_nav_wrapper { + margin-left: 15rem; + margin-right: 15rem; +} +@media (max-width: 50rem) { + div.button_nav_wrapper { + margin-left: 0px; + margin-right: 0px; + } +} +div.button_nav_wrapper div.button_nav { + max-width: 45rem; + margin: 0 auto; + display: flex; + flex-direction: row; + width: 100%; +} +div.button_nav_wrapper div.button_nav div { + box-sizing: border-box; + padding: 1rem; + flex: 50%; +} +div.button_nav_wrapper div.button_nav div a { + display: block; +} +div.button_nav_wrapper div.button_nav div a span { + vertical-align: middle; +} +div.button_nav_wrapper div.button_nav div a span.icon { + font-weight: bold; + font-size: 0.8em; +} +div.button_nav_wrapper div.button_nav div.left a { + text-align: left; +} +div.button_nav_wrapper div.button_nav div.left a span.icon { + padding-right: 0.4rem; +} +div.button_nav_wrapper div.button_nav div.right a { + text-align: right; +} +div.button_nav_wrapper div.button_nav div.right a span.icon { + padding-left: 0.4rem; +} + +/*****************************************************************************/ +/* Pygments overrides in dark mode */ +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight { + --black: #000000; + --red: #ff9393; + --darkBlue: #6b83fe; + --grey: #a8a8a8; + --pink: #ff99d8; + --torquoise: #68e9e9; + --brown: #d48a00; + --purple: #ce04e9; + --paleYellow: #454534; + background: var(--codeBackgroundColor); + color: var(--fontColor); + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Hashbang */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.PreprocFile */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Namespace */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Decorator */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Label */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Bin */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Affix */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Delimiter */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Function.Magic */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Name.Variable.Magic */ + /* Literal.Number.Integer.Long */ +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight pre, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight pre { + line-height: 125%; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight td.linenos .normal, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight td.linenos .normal { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight span.linenos, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight span.linenos { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight td.linenos .special, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight td.linenos .special { + color: var(--black); + background-color: var(--paleYellow); + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight span.linenos.special, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight span.linenos.special { + color: var(--black); + background-color: var(--paleYellow); + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .hll, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .hll { + background-color: var(--paleYellow); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .c, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .c { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .err, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .err { + border: 1px solid var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .k, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .k { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .o, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .o { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ch, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ch { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cm { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cp { + color: var(--brown); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cpf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cpf { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .c1, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .c1 { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cs, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cs { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gd { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ge, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ge { + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gr { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gh { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gi { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .go, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .go { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gp { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gs, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gs { + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gu, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gu { + color: var(--purple); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gt { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kc { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kd { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kn, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kn { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kp { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kr { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kt { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .m, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .m { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .na, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .na { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nb { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nc { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .no, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .no { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nd { + color: var(--purple); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ni, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ni { + color: var(--grey); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ne, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ne { + color: var(--red); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nf { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nl, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nl { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nn, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nn { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nt { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nv, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nv { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ow, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ow { + color: var(--pink); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .w, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .w { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mb { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mf { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mh { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mi { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mo, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mo { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sa, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sa { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sb { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sc { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .dl, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .dl { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sd { + color: var(--red); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s2, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s2 { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .se, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .se { + color: var(--brown); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sh { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .si, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .si { + color: var(--pink); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sx, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sx { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sr { + color: var(--pink); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s1, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s1 { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ss, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ss { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .bp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .bp { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .fm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .fm { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vc { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vg, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vg { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vi { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vm { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .il, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .il { + color: var(--grey); +} + +/*# sourceMappingURL=basic_mod.css.map */ diff --git a/_static/basic_mod.css.map b/_static/basic_mod.css.map new file mode 100644 index 00000000..332d772f --- /dev/null +++ b/_static/basic_mod.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../src/sass/basic_mod.scss"],"names":[],"mappings":"AAGA;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAaD;AACA;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;EAEA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AACA;AAKE;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA,eAhHS;;AAmHX;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE,OA9Na;EA+Nb;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAKJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EACE;;AAEA;EACE;EACA;;AAOJ;EADF;IAEI;;;AAKF;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AASd;AACA;AAEA;EACE;EACA;EACA;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;AAGA;AAIA;AAIA;AAGA;AAGA;AAIA;AAIA;AAGA;AAIA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAIA;AAGA;AAIA;AAGA;AAIA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;;AA9PF;AAAA;EACE;;AAGF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE","file":"basic_mod.css"} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..89435bb4 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto-mono/LICENSE.txt b/_static/fonts/roboto-mono/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/_static/fonts/roboto-mono/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 b/_static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..595f902d68935d83d57867dd7db0cb06c6caddfa GIT binary patch literal 41628 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 literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto-mono/roboto-mono.woff2 b/_static/fonts/roboto-mono/roboto-mono.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9e69f6d1a0ba027ab480c536dd4d7887d5735a58 GIT binary patch literal 97472 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 z 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 z z$1|1SCJ71sGfVXr!KbrWSnODejSYmv^7ugL)dAP9>zPM_Q@$-?$8Eq!*me(ihIQ_;Khh`MLkZU2>s{nWD`_Hg

{((>2{#~@dzWO)WUb%8VSZJQ&u&7dR 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 H3Qq$7iB`6k literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto/LICENSE.txt b/_static/fonts/roboto/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/_static/fonts/roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_static/fonts/roboto/roboto-bold.woff2 b/_static/fonts/roboto/roboto-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ed8b5520cabda5a8856fd0cf64afa7d72be193f3 GIT binary patch literal 50452 zcmZU)Q>-vN+l9IPY}>YN+qP}nwr$(CZQHhO?|Hv}k~x`m()6ggnsnXGy;?UpQAPkj zfd4dt41oCG0Qiv%05Dtw07Ue^+5b4e${03PN_S$iA;NE$ni z$X7hFa&trRt3z#u1})}s0>*^&IL!Y3Pm{-C?^$=W_q1uv7EnJD3xS+2ke8)S`OL%U zAzX^G5V@6{W^*Nt*-l6ckZ-g%^>vPVlk|m|rZv$mt9$*&!hF=+yPr5b1{z*+&q}yT zh(8{JNuSaUqS>Yg-E;OYucf1r?I>^qQVW%}mK5gVM$=46gBskL#FPkPZpne1CCz-r z)7dh2iH-Snn1oSZdYAkxS8~b|_h%4P5iXt!k9I%0WvSMy*cyH-U!ZoRjx2Zl%(~1) zo%B`9hSBE8UBS?xG1K_4YS6fz`elk%qUq-Mo*7?dbL3&2-ppjwH!Yhc8LWMwT%3~#7HB6KlW6S$3%x7t4K7xHHiu#P`Lpqv zSeglXbRya#a@%b-G>VelTR(I6qS>^<#r6zYhYB@Z?aXRuwl|#kxLHIg=0#JrWQ4OE zM^XycV`g)`e{t)C6-mMoK#I_qF3T#DNSDgko8U+Xw6G)#@O?9VUUCZs>oOGj_$4v< zhRERxO^Bz$X|fDvG&|AT&I#=;4b(?n;f@P?GG_xeKcO#ji|+|H9w?FD%y+Zx<&1vX zt!OEza+NC)LiM6D=nV|!F5f@CdLFccM4xcH@=E}8&Hw{|FW_n5Y)Zat5%v-GNsr{( zP#NH9fZ1EP%DItu`T%5#>^X`gISvAyHnib|%HfjW>FNN0-+YZ{vp#{iHBr%zLHJ+{ z5*zB@zH@f2uBLN74^{cMF|`Sb<+v7yD$RmR;=^~j0O@Bt%wR}HJOa$(FkG}^PT0oL zrWTSykW9EPUV2BgVMUyG9q5k48m<~jv99ArK^6~V8Werz

3~j7indmdALuwtkd|9SGqqkLpYe3_e>$h65$)7jB+K4itc@Q(9a5 z0($kK48=n`=Wm6woDJ|cGb(E=3b0u=U}h`d0kryAf@S$#fUd}p0?*_9%DW;M1camQ=E&h5hI(O<-wloj( z!i0R^?gadRed|l@Q%T_COhOcJOB1Ab+IIm{Xjd2dY5v=XW8mk9xj(gj@?KaT686@-oNi(%)aEeCdjVa!vSc3bz6+VmYxRhe?56sbtuoVJS8H>vtnQnK3|Fk@7~v zg(}U}@_291+PVE^6p^y7WgCxudv+&(WTMa9P{nf-_N zoWmIaC|R3+$IHKFZUP3bVACHz@JasBn(GQ&E*)_MqfR(3s%8Zb(CN1qCodn;jPrC%3w^-#!(WFMf%M z;++Z7MY6Oqu9e>G3zB@KWyh&rpEq|~Ki_|MdmC|pIjLGn*}Gpq$K)l+Ll3FhjvS%>n|CX{c=}@Wyo#b7US7zBgfVi)Drb@A z$}z(aIC^Jae^r-iUUc}9tR&UY?_-7Awvmqk$vlsAW>Kb@iJc(7CHDZ5q~&VKCnAE zQIj%vi*XEJe96>y)Ph$PC>bAb+b~3F?t4pwik*anvrYoSg5Za_XCZ!d`+IJ;C4NgX zBS?+#qbb_g5Yoog>SJ(^sGfME;KZP@`NbPS8+0| z7q5n#rS$syEyXeOe}5*GJl9w`Z8=Xa?I((erGP>Ff>&15N#9XH_{;$3OyIoSbntqN z<`pIRk}3I=D*2i%`75eHm^MHy7ho{x05|n$mgDf|>)_|bN%>2`{ALjWw28nvC19Ph z|CkGa&-rrr-=2YaOu#%RV4pLQ&U*;*{Y3pwk^1Gsfzm0p0rbH#{4-3zOjBUeb==Kg zIs6x#K#fL0oaTV1*>KhQ1M~+%0!2_ENGVaND~#)#7yB6}0j4PaQP%<07e@9MOALf! zg|aTP7o&0bUrcN@ctP)Aj|_<%mc&g0|=cpOpruq9JNd#^zvfX(MCm&TR-9KByWu5MI@J(>6$v+QC|0mx+LX=+2(hH zrY(Q*3QG|_==Ij~xa)F4zlHw}Q^f)}^g0}ehc!b;=ckO9&9KhyHrlQGj6_Eo@XRmEK2tK|) zBT^$ex^&pT&Z`W4K_u{|Ou8#H!;v_#Ip`7o+SRQpM8a}o=p=jdn zbzJV+C9h6Ke|qcboMZ^y$VAP&ehPOBLAbIWgv)5R&Rus}GmWojnv(rA+kUvWmDJHatx}#Z0Ta7Pv}z>bO5iRhu(@(4&fJsv zZdY|ih`?Mbu@Qr_9EP~Dkr<#XfOZ<)+1RvloOKi^@-Q94?vj9e77YZFX*;ZJr}!0g zd;8OS72<)g^F6#Qc*qwjsHx3V= z4eaONPJH2RT~CwL-mK=hWO!K5UY*|DXKnZwx6sw^H^}VV-)u5EeW_k6E~;PU;@m>` zI|5@RZ?&z#hdDac>X*=X%?_0xIIP;22d!e)Nk6iBeTG+iCZJRMCAjEi3vb|2%bp@| zaBX2MY)^66GntX^u`uYL6#?dK%+V(I6n4oc8|X&l)HKz8ab-J9k!E|Ll~`;wYKZEy zI!RVNc^=zK3Fbt}DRnbwA@_Q5ZMR@_-FT(Zn&OG@bRO)no6{=xQ@KlXrh?Cn#QQW7 zxaN*5uqm}CtLj6sy*BBX#30WA;>nNp+W+HtJ$ggu#w$tv6N;fVDYsp#?X&8H(b=K$ zbnhYAo;ul``)0MvbsNpN$adZRZW^51 z#i7+^Y13fpHy;L2yT*=5{$&QTDh*vO7do%SO5Wd4 z5)~*JML>eZ%Hn0)g}(n_B7z?l42M@83~54@7!FNG7pPVjen^Zj78h8^2V5b|ns>fB zH6J&Sjpd9r7zS@;Fk+WQnAB|(G|Dl%bf8_tu)F*#@$R(vapVq|dJCE3<`bD_vsx!~ z0^HA#FNb~{5~L=F{O7=*s6bl0VQl2koSiHjS3s>wJ#{$T!2PyeGftPA5`n0Z!rl-m z9i@_CGI30jTwZ#txbnhM$CDGMua`y>O~J3BNM0D(4B}#3V!aP+$EG~b6@#q0pssMo z`my3ABPNvfV9xfJWLwq8W2@7jFN09j+LYc#Wwg;7=n}?Z%{gndW&xNtd-d+JfuDax zDzI}IeezrP!2QdXaHjC&fzuZJW-;}i*8;@qyK!Ri>e6O5e%CT>9z0%wzzoU3RH&E$ zMHCgQjjIBEylHMkaI}PCW*gU_cJ_GkA@?L*HL^fuwW&^C9P_3OjS7kwR- zQDggrg(Q-1Wu<^JZq8H*t6?JmVM|19f>o%2v^^ zF=J`#Fr}%r*ZJBXz{#~;a%<~m)jY<7*;XglJ)&o1UY#r+vONByEEo_0Bnf0B5+6gG zU`~Hw%7ACpfG74~@v`&d`UeqNi0PP=H>fQAPl8MWttvZ+@pTCP%<6M3?oDt@j+MvT z?^wM9b?s0CR5d~6dP#cE)Pw5Hb-J=`_WgBzihzy?buVjBQPXlSpK*tBscvTTdTkKZ ze(^=~MfJt?#nc2JXz4z3=Ae>ss7GQRGTDiQi((#lOU|J` z6z)4bfIqY&dA@K11w%>cbTSvE7!9)|mGdP{ff_!vzkV=&@_eBxTHmrA-nGW}2(a zxaLi~Y>&|Ga@Vo#O<~rHwJ{UVbE2`oKq!VuwuEbAR?oFrqy=ts*o}hJ1_77h*mW@1 z$!xn54}shz_1r_^48t5PqB!TR%dQd7p5UGSzr#VVk2`a=(O4Y_g+@x%naqCa=_r;4 zy4c~L)w6q;zI!?WT1iI|J;;(_)#U!xq1vU|seI5q{yU=C?y$e;*Rk{lq5(ceV)`r>1S|fAqTlj^P8yhw))KnDaq#&IbTQ?O6{cguejkxfD$C8PbDL zq7P2_NTt$AW)saQnwB2`@fyRIxcAw1?_Iw+elx&@2>>A^gfk{pYg?OvClCYv1q&b_ zCd45=8?rV|g2(Kp$E>WwFnc&P=>;Rmavvu7e z)HGsMOP}Lr1t=O&?$B}qzig?-TSi>^T;@a@C|?7$8!%ladkn(|(dX_RrL929}eI1|(z4v1Hfe50+h78EcjE574naJgYNc<$0 zB?_9wDuw5XwiZ~X%oa$Ycns#P3DmlB>johQYtI*Y6BMO^UNg~w4EArqO40obP`~e^`TbH zqgIWstG2I=c@>$b1HSEeH_CXIL_XDW(-j;{eA7o6Cmo&@XX$5lA7ZrAB?BRo^j`CC z;|1D>h;fnTrA$zh2k0wH7-bpn_>XzStQmHYiiwl|T8bV>tW!n6>k}1T872&PUyE~v z<_^d-#c;6~B4wWq;m0UAO3JR2g+S#65fjpfLlTmWiOE1IBt$G17hg)Ht z>xFPG&b{7odzNuJiQKMb?IW3{Js(fI_i11mr0^Ug(H9wx{k8i+x#dA(1$dZ)h*?49 z1L=(n0F)S$KhP%zt?Rdo9Oou^=}3k!wExKhZFjl>=B^c zgVN1;42c*dAn;)_CPZv2%S0_n;XERWZ7)lFC6!Q5$l)fGd)>bwdh&gPw3zv;5C{Pj zUvh6qjPi}D`TI~MbVsT{=|wVFO1X90U_?G(fq{=g zF<|_8G~$)yS0B&iUTUl5X@I;Kh-FO*>y$g3wI{q^uT)YM%BdFiVBVg_Zy5Bu$rN(y zR%@KD(4SMNM0|HPRaEMigwp`O(1D&?)fzxvAtcq6wH42GR^pvoFMNYTj_i^kup=NMWHg>^ zHZr;N+v!dy6^yl+z$EhYG(hEFyi%7lwm(Aap#TLKWzxPr*{9`ixu5yr6$)RN1KY@n z=YeNtw?qn*-cRT2CstCDtki^Zcnuq^KJ3|Rjr;k%C&>@mNJ*#J1PbF+Us)ZzVdOLr0w~4gsxVGL?<;D;1A+-rmdN~@2 zp|^4Uf=$4M1P5$C2kMV8m)%Lf4W(}s1aAj}^ZEh~pcbMesE3j-bBD6Xi07uN28dI) z&CG%>855|MRYpDTSgto&Z5ib21Y$fp6zNKFXW4LdZtCA;WrjV8SRIy;zzc^E44D`o z+LYdLQ=GSi`RB{`NW&v3s6#tRuZyroojaUbD^X~&ZsYWx;(TEH4)d~=HPLFXVEsju zne3Gu;#r98A?>0JLB@7x9JG2}gGq)Zm8+tbIGu|@1G~&+ zY0jZnGRV?|N@PswOnL}n3hL2GP1$Dan7STg?*TSGV!pZT;T;W`C%NxLk6Jo6x07LlfZAVB2U^i-tvv&#lD}vm7Fybp<==l*K!P(2W(X%pfZy0f9||Q z=aFI_n4hBJ^fPHE(mRideagMd0iDnwTaZFF)&!ZRP}E{i*bdl*{lF&(QM^g2=#`m|u!QOER zT9F={9PPaT(@Z+%5#O9C0J$`&SRfh036)x{EKCMj1y)nKtjQRO_g_6*e6HXKkGM6)&)JM%XJb5*a|`A7g?ngX6RVY8Mck+=@4ySV z#56A+dg%q4v>u>}mflrJsJtE^60$scBsGG;Bx5v|J_jodC#F<~W+A;MToYffP>8%< zKHAqmdo|{m3v!F|pb>(A-K^%oTDNRp?ir@uvz;q7tM3Ngnup9Ypvf6?BjIjX^jeK( zOrQ0kPCYySxADi)9x2Aj$O;=s4k02&^M?U9{R#x^TZTVqJQl<2}`G0#Fbp_E0XzK_jxOoL*4WV@F;_4JXZaFb@Br3Az zY23K+pnL*z-{%;VZ(%_zOki`pQVPtVF8I0V}@>ac%HZ&N$g zoC7W9Hk%!8V?J-A+oJ$Bt@+$zDW_{8ET}Cfd-navxDv zOImGm3T3Ej32Q0zk*&J|6B{CY!YpniHOeR2U;|R!f2te zx!UPJig*)S0ULF(;RoU36uX-fGf6~mngP6qsfeenHoJr}+E7)M37UqI)NfJiV1C}t zyIcTn!xu^DCb0~)qvT`jpH5M!$j!qbBLo6P6^sV!6d%>=H0))BRggyxl5d4B{GyJh z4XTn7PPbpYsXeHI=zSx?OP9+D8-{{K&VZ2as0MbDTf~d*B(7=n4kB}u`UGE?iYjnKcS#Z7 zgX6+nSOnJ|MZg~|t&ge-jywt`)_oh1_|ls>gbVTVm-E#&x*(!O2(*%We zoHh=|il2u7^~R;(l1D-c)yK-IpI*N9J58}_^F@bW zeE6+I@w`OOfa9PC(f3nL$uezxS*Duoy)wa3B+A=V(MOFEh%o>Q(VdKODSeW3i+t+s z>jBQN0HODbUq?+?q!MwT7fhAY8!ym;2<{rvs^B~JU(c}B9ieSF|2DDViL5?7Iy6|& z0O+mZz|llPI7W7chswPkW~<23v#^1;Ip`(s4zKsK&#y7>_A3+G+=yDQhF#V5J;mS zBFo`Sw4`z$T`vPd;fRU*>%rE*Kmuw?+6tzf^A)<3<|LI_3Jwyw>vug};6`l*1gCNdpwmI8O;s1xd88ki)MQam z4_HH;LX)y16Kb4MiedO^_yVSX>|_=&U{7P!G@=Uj48-&hdCsD51tm@b?%P2@G3e$f zFfFm7iSs3EXyb_xh(Hnh(-X;Pefa@|B?S-$Iq>AS4a5+SBMOEESU?qfj<};sRWQz))J{>`JI}hZ{p-UGfizG9G5zBPf}2NC6au>g zOP62RGqmI_;u0c0X=$`};yIv7q^q0KlsdT54Yo}Br>O=dUz8Rr9p?WEc0e$jtpY4a zh{7d?C7?-<@YjS#B!pz9gvEA)W$WJU;imnmSoWFgz+7WEi3w1!a;vaNPznVt;8fFg z2EqT%>dDJ`G2=Hpl(AG0+Uiks9gQwQdVB~zhKO6yVjWC#z0DupQwF0wGXdGar%;jB z%{p&^L>*B=+IV%d!(m}3`$TaYZT2Qac(zn62V|JRgku1PoX<%lyR5JOI1Y5 z5*L8Yt6$ppD%%OCW|T8li*8N zWldnqoHP}Hnd?qkI2F6RKyBy{yUK?=*^u%Y;>svY6N;omeJFxFaJ)1@@NuODXojq( z`)id`K}xPMgVlFQMREY=-h24txgm-AYzyKEb?68x$dd%5^ z_O*|jh{HX9OCpo+`|P*r#?VFjMr2*k8zRj>I!mGuFzJVaYUt;~9uDx2W<)@zAsbjQ z0*^wGGR|f%ET?Uk6eKicFcjOi$Q;(3Otn2w|9;8L29IUYqpksMju{jP!~XR(E=9T` z2f}gMu16>u{VynDS=#}(zk7GB^+DR&Ve9DeQQF#j+k<_Txw{{hff=mnT(p5aMEa<_ zFjH!$SVXo7U(pFA8prpD{&XC6%~$I_b+KC?vfb~4CZdJM0S@DW^Mypt9SYJsk@_ew zjG$0V28l>45l^BOs^tcaKs?*2wjojHf%{@@uvACSMar z!#-=wsK!TS{^R8XtLvfTc{W(V1}p_+Sjs=!rw2s(8?wz1Nq0l_Q%unmzFeyu4R}Kl zI>fU(j4E2Ipz^IgY2*DjuQPphp2H6P6T422VnUOz42(LoOaF~Pel2sqC2t)0yG62Z$TB?~ufS=u4~WWE`EOdKphbWb!z`b) z?#}#@0vArbEZ;S0CV4~690U5Mg{@p%ej?`MC1TKz@+k>&Iv3ao>V2G(CCWl_Gwvd= z>BU-y603ifG}d9M6-S6BByq!%T0$D;!GG4_n^5`OlZ8DhAWKWvk+YKb{G3BMJn%M7_k7_mdommPX%5K$zKu8HC_(HF_gioTyDa;B!@e@LmgB^!i zGlnzO1YzSsXo}~8S-70+w0?r64#x)v0Dyi8Mg9DC&UOaZ<^EKOT6wGfqnOH4*1 zJPx-{25@A2t9?jBhU`}WY9^Ga+Ld`BwqVXv)+0NV6%@c4qO+k+TcSM77u|qtbuw!s ze3fz%l|N|dEfV@-uQei!lJ$XE^@scxf!^MaLKN#yaFdV&b>d=|o%7iPH!Aek4=VP& zZ`4VsK$gZXpMmV>4v^j~FDx0}?%T3N!`JL09&ecJmS8T-c5bP95nbKf&D-yG%k_UI(~vLsKVSc2@|M@oSs1>h zzifa_K@cHX=3lV{jE?lPQa4AX$t#?6XYS2MMEmgmcaF*@ezO|{2exu%OpoK@Z%}Q( z;~o$2?Kh*SxP`fe7J{Rp#(PJutSNlrO$C*y9I+-J(+VAFv1C&M2s=EducaLz^MG3& z&SoHCw(+MTE~W38QZsKe&@E@c!Y$wq`0Vv%NjYVvZ=Noq6;-D zUyy0ELAT0xaRGKPE62T1f-K8BlAswVKPC5WRyh7FkQ;9hiU}h$%}n&P zgjvc7bX<#n7wi$1+^MxbiUNY7pxIGh10|oTT-uFgC13#Zg?Zh*DPLikmrUgbC5soX z((9&nCCY+HDz+OmGJrO!-&d69zqC8wUXYz5+q5to5w%I5HDEe6IMeb|AZV#Qhd?Pq z)st%}@1lBXD`RN;G^sZOl*Z7ZA0z*u^-)sSGbJ7X6*np*4AP65A25dXA2Q`&zE}!- zv6f{h6BRYYFd!g}VMvl%ec-s=>vuj7DM9pliT37F!?NUT4pH)_$ zUHgXqt=zMWZ(7R1^m@Ph=Za!af8ihYcFKMmDFKpKA>Vjt4b|eS{N+3h{P+-6rmzAiL;K*?>S)sGVSP_& z8kXq=lM+8v-C@f6;i_*Y52s;db4%;Ro;3hSgjw&9Qk?k8kXfb692)k=qUo> zWVl1irh@F{LWl4aLq;y)4a<>|9!|USAbwNZNUAP_jt)tj;>w6+_7zKpkOu14lnZoO zeg_d|YH}R{B-B*?>Tw7tRLuh<)U@Vc5DCR$sWfs8OPL=?j3{n-0YR()ds%m?!i6&M z$X73(KPdJH$qXX3%JglE`(qKfJpTaw0_l*xyQhSHS;XPrFZKNVLLYWZ-|L*_i(_lU zALw5a@XkgbQ3~KHyBbK~n;l=;J4o31@i2)K5Z@5Wy{e~x~ovsl3D z{x?9?*=kDlhCokt-NUZ@d<$hwrR47@O>~lpyL&TiaVI|u_)x!1FH>+w?Uyq}8kBM%O{W93~+Zw}PH zL8=S1_G^^lnL zz@7CdR1kh<=6##)sJMEF4{8W*LlJ4Cl9HyUFdh9UM7hCm7%ud z(Cthij%+o@NBbAxl3_>6zsU0E#MQ>iy53Edf0o6gSF$`+c`z!(K0iRaA56!gw4vf` z_T+%wZ@`XtPYvjIg+R9R(K=bHM=sq?T`}v720bT$uKoC65A>B^pYlU1h$<4`>hD4K zckgW9RKK8q@4bC}AX%cxm3O^eI`cGoWaKYJklA52^@ z_jf!8Ztpa{L3%}LE>3FOkmtK`!g^z`XFZJrkaen=dcPic`%6LFPBX7_8D_r?&p>@g zz`Va;{&9Qo$PGkiGb~#mkkBewt!n}(DaZ+OjJN2I@4hqd+&2uS=#egzvpryxzM#)x zY=q8J10Gtr0N-1YkJIfPq!FuNhYI10J%v>;^NQyi!@M)>{o$bG`z||H5Lixg0L5$wRxK z(rUH4C?b$%Q0N2-i`{tl2u;rwYD8vp54C{@)8b%RD18F4sWQm#U4?v>?Ab}8p7 zUoPqxUux1=I!vQ)o!`tyAKeiKQf)0kc~~KhIP?BnRjtx-qQO2 zMMq&d6c8uRKl3Vl!cz_kxj()r8C**7NO6)NEi7AY|TbBxqLTa3Y`{ARr_lpbWx` zIJcgb!iz}{mwIHDh-j9oXqL$gi+J14wi=UgArdkq5_0@=q*qK#+7d)uEQj{E9lvSd zSQBIO>Spohz=wt!+Q7|bvjHs!Sl?yM!{yQ_VPWCO%+0jW5U7hjA7kBgi448<2LQMW zbVLdv$2Caok zCLe<%=5%lL;)g)VYGj`-K!y>oAD8oZAel9nf5+p33pr<{IIvJAi;ocoy}uqS&fhV6f;KGO|e6p+^&0bf^Wu?38<4gm;l{fi1Ff7_eFR{F#Y{!hy)H&$*+x#1u*UgK#vL73mW?er2WZRf9F(x@?Sg!M&3u` zhc=5F162Do9x5KX*vD=(j$D4`58J2`4$ie3vzReOye=Hx&Q8f;2Mga;9Ko|pa9J+Q zpd~cXdVSck6h8;~d_NB|&3m?AGeOPYWoKJk7{)JRf7VICVP73iC=G{Jmq4jZ^Ubhy z<|DL<9F0zRQKLaU-wl~5zSKkmR*+!BdTyX@TvJS$0}`?b(^uCIkaWi&m?^yBi`Oqp z9%W6wKmefBmA)UJxy+yK^?%Ki}$TxLQmdg|74cGaOMmEaf^xI}{-!t!5ss}~5 z`Vz~>riP7uRVzg)pC0zYbeKysjY$T@PySe^Oj0N$aw4&ynN;j@vVi0#k0q@Ej_glm z%9AL~eA^(x%#fX9m5TghGyUl&M+G_s;=ApY8^D*+?y*@S!OKuco~rh&z@3gZn?gG+ ztEZO$8*(Y0Y?2B{zh;x}=!Y(Ju;8L$b?^0+V&k+g!DPTgIURTG~5{R>A z7_k_gjEL{EjyUA-?-htB5(?*~RnxR?EX}#K_;?R6Me--fRud&eScWq&DteH0&O@h^ zVpNAg?afKHRYTM<8C&-HoShRrEJ=a7T0$v~aq@`0LP2u9-6;1FX&TceBG~YR5J%}L zqeG9{Y>6nEcbSD73Buex-*$5cC*7^UHk|z2n)|_Iy0M}XNcX|fb~Ww{moml>kOhMd zb#~q7%Nf(3jdBD79^rW!r6!(J*Ru(L_C$Yk-KV&+Frg==OCrT1wE-id%oP+%Z_s&k zatYZ2LkH^*+|xSf7kiv81wp$xOX#KH%&hfBb)5dX_o`FA&_oOr_C;flp2OHwx7HiE zADvAlH;nc5GKq4UgxYX)Fqi zP{oyVL(-4pTyZx%*r{{uYxRs<-xxV9lM4HkXet*}K9jZg7`$VcvryHTC4ZS@Ri!jv zn(M#D6#sAUp#`2RF@T(4e?i8s_(U30;+C)c3zEnrnj_Pz;h0+nkA;aGwshkw=d#4C z@vNH@XQ*A%G0VA0DF&*VTA`pwo$T0UQ!)i@V1V?6CJb>6Hez3G4IOW0Ft^f2#0WX} zCvbSnXvJuihZ%neVt{~{rL9Pg!yVyGuo%Or!@PfJv1^H1>qF@o?^}K><6Rz1LN5U#*D0ai?(o8z7VY|&X>IiLK`J%fWB>j7-JfdnkhFqk@g1Dw3{+MyU|}* z8aa5mC4rR!j;EBpkcVxs6||lm+ZJ&u z!lz5M>4E}l;bGO|WE&sO$Vu0VxLu6XIBG3N*eeT>X3nq%4vbZP-y=Ej6|K3Ov-6`f z_k;y>^ka^L22U+XE&j6a)n&K9OE(TD1q~-A7bMpW3N+-jf6lxsM9em$KRnylm&>(F zpA+D>CtV##fBZPMC_a_#MXJR>?LXSZlr@$LXjGQYzQo&<>x&eTG16R=G~^ZW7v%LU z^$PdnrUh`KyeLX_j3rij@3<-#q#<*h;JDKQ)HG3deT z`sif)6~QVM2=haxG5&Sr4*~f4l9|gCbky+l&5|c5REn+>N4#&J$Bo|H`Uy{TR_v(x zx?PU`(6)>*U)`1`0$8aDUjCYvDH9|rMC?WrLEDe>D%lj+Y92LgCZDpZG;AXpZh||D z(Mowe{qzkIN7`YFBsd#vgDw6sN+lvk75bXgdxg<>%j;*Ty?c5|ZHX?BedP(F+7+Pa zBTByD1+&MgF1es;#ag?{1t!&P;dMMLe|}9(4}6eRa8n%MD|&;)dj4*dJDoU%e_ZGx za^ma_rGCHd3}AJ4zmH(Co7r+6rKk@!UM%G(Yt1hbtLLGY>zm&v;-Rg?lOc6z&SU>9 zn8l6MEybe^Ge$vg6Gawz`lQU7PP1jt>}ZOiwBE*EN^=Nc zln!ISMXsf(hplUPe4Rg+V{~0I8CTsDBW=-|(G9o9;j1m*=8RLijpSVxnD30othPI; zNmS_xuBAr4^&SYPH)W&m8@RH`R0k!Yg8;H1tRbnUU(E36zt3v2z52K^9>%xz;h#crRtGQlnvhP{q zET6#lw*TQ0y~z)1g|gv81V0_F(*+~rg?jQ%6c+tT0B{`!sd;NK2kYNWN<=XYT2=tv z%bI8jxTS&@Z*KZ?VJdj5>1jJ+xs^U%I}f-5LSKp13&@n-n1#MrD(2a_J{1cWqt1YH zn`rsKt4vNAg0Cp%)Kshq`z>GrLp@pDje#wpp%Da(!rt>O`^?q|t_LihluIC|+-Tmn zlPc906CwxL%~RnoYx1<`WzboNIYTwr>AtAjGwCcimx4Z1BpxlNha{0c)92nsk&fW_ z#TfY=#}6wZj_5M|V`i3FEg?Ev=)3?N2&p(@Qa$sLF{V?*XrN;`sasdwKoj9pJ51Ks)?2SIbD`Nhbcj5aYQl+Dw60dNKd6Tc!eIMs3-d zSc$owEfpA*-Ujf{IY-!MZq7A4H?5$^@oPrZ6qN{hOv=K~b#!xHxD)UE)4^LAsZQbD zFruR1f4W_5u>xAI+LpNcq~NN4#xz#}-N&zmJCOKnP5@K7+M>jB5BnzK8@tFHXHra6 z6WH1q9`I!##^h8%5}yRA;kJ79N>u zT>fz=9h4ei_8N`gfb43D6q)EAf*YR1NTd8ub+pr^{sqr9qTVUaFuWe#+zhgG%qs)& zBnrBSf4}ih=QF5sN}&2oB<)ZM<9VVPI5J5*MPk&P$A^K&6K1O>W3}!H zN!D!UJClRbklw+&ZYa6A%^H=CmRBfd21Q5jSfr+_Bb7Oqg)sriX8{sz>LX;LpzRcj zHH0w0U1YV{E^SJrwu|)r0`O$4&5#VNuJElZn0vE`DQqbxuj_uBliehNMeS5BOI-vEizp;r<$?U zoFz5Nt^~A9_-+D1u7rt~$>6SdVn8j2a4Ba=D!K5tT&%59p{2U40(VLzfp0PxHYn0Q zT5C(8FMB~G_l!Do=8S$0`<14kc22zuBy&+vN_rQzdKoi3w@BjiO-KOpW5qUDsUYZK z|3>cPOq3Ou*pL)?^FE!ogtx0$^bvz2O|5of1sGJq*hihG4K(}T0yg-?F|n4iGWAY# zI=DH|orzpJKivxnH0t5Ee;olaN5X**A(*8MG{qB2{xV|BSE*Q^*>S?M!*GIC?Fc$^ zR^uG^36bRwXty~beQr0H-!*ky!cYFNZ~ z2md*5{ROB&jfmL1kJSA^?;;? zrK1!OCw?43QMWUyH&2D36xGpiR$1PLoR~f=vZ+lnf9MIJ z$}eO#iS8JV=puEbb0O+T)QZmKq+Xp4Qy7UH<|$}oU*(+$PX*Blq8)f~)Nt9k5C9=&*l!pY-R007qr_2!g(RCaLwo`G~=*a6DDP0D=X6 z_I}#@EWzi$y+F>wySphs7g@S-fR;v-2w#YnN#-R;gwpw4#h*bj>4t?wU0Ha!4~)tL(7_X^%8oL;XE1C=P`}^p54RM9F#$3{i)_R29sAL|0>+abMyTL+K=`(uj;E2hCy* z_Jv-eLEu*|Ux(mCn~DVlThpvF5F8ZMZ1|K#7Q{i-{@hkbQ^c?-(H4a3ic%SOrXAWg zXcKz(mf(>qoVHVbA52Hl zSvnjG#x0)q@FCb!LA)?dP;o-aPa>KUM4#c$7Py>`#_1G|JtbGP>NV|_+9Q{Lsr#sb z{pP0Q`@bb8v9~Z^2`GX~Q;bieCFILXZJA((0rHPsSxWq|@$1=iwn`;!R!ddzsC;HD zSP*5E)rDce(9IfEMoK8B0C*pB^M|?|nfIHVCsw^UO&KWsyEC=f zZY#k5St~6<)84Y$;-k$&P&%Z0IkmtQDSv$f&_-30^h_#44Eode_v|}S#;#+`hO6K{ z!u5larYzOR!{Y-CH3jrN`c9s*hZLTIe?cMY*j+(O;zu^Z;xA&&Z!}V3NBSOO8=}}l zjKA;^!Rv*N?Ey~g)AlI-^Y0=<;IUU1m`OR4-W~D*=pb5^nYHgLj=NHZBAi()ZPk4| zC70(KzG)dmc3@qnm$qeQ<`lIBQpOcHvL^)T55p3kVPy>o*vyD zkcd4;!~p4*1-7{LYSsM*G>ry=AG>}} zL)#s9xuAL8S@TQvbd{j2i6M~Qdt9lfS7mLq8(&}Vp}JkOfn~V-V+IT_RR}0Sl_7ODMS?x?@E$7n=-RI8#2{8JL@yEx*9Sj z@T8RRdJG|pn1LanQWWu+;5Pow?uLx4uDWbBOM63hPG@841niM2CAqd!D5R=U}6o|U;lb4x2rqBoAy5k#(%>NOI-KHUo{POzv~b0 zVY?@A7t6FDO)8J1<-vWxogD3kTx|a)SRdJ)qI^DqyE$U z+O>_VXpgE)RwgXcTf9O$qV69>CSsNg2+)e! zLz|9?M|hjl4xyuVu-Y}|*^qNgCnq0h4#q%6tx}*gl?r}5FU^%4kQ5|H}R2TNIzO!d`AiXB{%hlDK^Baid<^1f1_xeDRZ}TYU$e z#TDIw)yA#Xxt=Z@qU3@cN|$h_aAEm&UX6Ol60T0DI}mz~V0)fuXDT%OpbJ6-R}Hxx zzukO?`}u)VSXrVoh($WRRID{f3pKjH`$lFZ3_8D<$K|VSrs`&aihO<9wy7h+o$QD| zwh}UOwz9*Wfll{Q^*&AKeBgozp&S@jk>k39t=@C0B13LL*&e~UYL zK4L`bvli0GB>ZxjRDh78fV0V*W6-=Ce+`oA7(UDYe>7%{BM8B{#p`SHs;?1CR1I;! zLTbQf2h5_7{4%N-GecB&8?Td6gsMWG<(=ttS^kQ`Rr44|`^R;yH(R#Fe|ei?mllG{4xq){_24o#o{y4jLA%)VWP=A-x=>oIER@aT z2ol!{;9>8GsFr8lJqK+g%Ke*L!>^O9-$IB&Qz33aa{iTxL zC{M-700ucTfqy+;*1fI&uP_nv-dEIlP^Sv%wx-pNV6j#ink z6jz!g<2%OzqJXjIx!9ot$UE)N1N%=Uvvz~!EDaa0fh6q9t2zrbFYB3s91{lMVV_;4 zgrJ$Uka<06l;+SFi>*uoT($p@C*#pF4CA4!4^*F| z{TXlo?L*LmC!?tZDvWaW_tFNU-(k^zrH9?z^3ObioUZe^^A$3VqEZJZ;C40Fq>rN~ z{+Zt+U$_O#iBXWJ&m%8dH(a6^WFwYd9^$POvJSw*@@`_CVd#WDMvpD&ECy!K?Tu9P}dLOUk10DR%BEi6EAf#n47un!{fc^@KxwW<~G zR(9r3SlJH(;B}pghumv#xz`RJNC3OpyV*=(hS$C#L?!8V#Zp~NW7V$*GCJ-C&Vm1B zNMt^fz{tylS{wJRnkOutF803z>baJM&?E0+35;4rP=^Bp}T=qZ_NMs(?@m3d>8obaI&aa#ySV|3Bx(SuLy zRaK{*25_~OM_wL zY1ZAm)4!?KfGXAx&72GTMH1!*jySiA7hRUHYjLR>k7uyX`lWW+*l+Ixr>zQj;-*v? z2nFx~P@^A(LJ85!bC@I|mx;mhnBAt#Y(E-I;K8x^UdOOVA8@Q`HzLtLAo`~YGMF_8n|AC6PYKGKj- z96;26(V}s5JWwP-ng5`Ny0ZUiap17K#%NQ{xsLd~i=Jw5Fnk69ybq*At}YGZi=Q6A zk$A;!Lrz^n$`c}*u2(+tkzbap=DVEQsr8?Mqz|Zn_CAAC2Rz7MgCN;IhdtOV-pH6iEwk& z9d32M7Y45i{`D`VytN4)vvY@NxzhPeR+c!RS84e%+z?B~s=Pq{eM3e8+(AfnFRqH% z@W#`vWvr`z0WvuUjEe4nIvj?E4u|0rmp_}DiKTZ_LcMw3^1S7O zN(tqi(LLAw#)kOsJ_TeVm0VQvq``zi3OXu*O3c7+`$CPFzsPQg&5bQtIrsZmeHuay z<#`{HPEk63Omz~6{agL*)V^JXpj66BFR%8z>VnPVhI;pUg;HuX{VD4pVQ+VP%nw*R z$H7mEgkvq7X94{2ZUl6$SQPRFx7%-W#N_8Uu;XI!l$svFgS)_sb=Z8@tDZL-1XfRq zV#!S3<3mUJ8jY#LRVpZ4G4(cN_}Na8PE-0|nPNIoO->w-dJRRK3nTjOQ<#lIe_`AzDC$Df9+mq}@96lY(kx7?66Fm!1bk**Sy0%go z*&Lsdos?p~Ywo#6O?F-=k(pEGcXqlgU~|4HkzeGtcX`UTJS_uCh*#8AX|Ih3l$R0l zO9TaLuZ;PZ>w&4l~f>Jl<0%>GbVlJsqI_J=bs!f)UV z>SuTQYfUYV$GfR7T|(I2tsnuj=)xwwk(iBXeq1V__Z0NH9jdkLbUN0~@Wc08ik&6U zq*kLXtES`<$_NJ8IZvzYZ~Qc3it`x6x~PW=kK@Ey0%~QHg&t{yq~J5NGzlsav7Su) zL0C)=k4o1eAd?oKUV`$j8Pi6js;>89b5P0{DbiDlC?KKCNgt zp{bC?t*ySAa;Ti0wUgboNzQ$|n4RuAx;$(~ycF{!?%N92o{yR1FHTIUEsU7;S}c^g zkm>bRtzqi2(U57U#3mC4p8)S5bLomnNiNS$l#=<m_ubZ+5~bH?ekwZV+qYc-Eg z9=fk}O+Hc2!EL_S$R8^6SjPtV2r#`_l7wmgZv)yYlM8BMg7a}kEywC75xRN!GOBrD zYXw(#v3}#!64sX67No7V2=+eQ?0O`sC#yZd?^~22JV{C^OjH9{=2MRVk~E@UQkgDb zyc=m%#l4SIA3zKlo}wwQ%LxaY2LZefkJAYC4hjFQy(79i~&VG ze7u0;%X1trWa{=h5*{zo@tYBcK|!Ax@dKWi;zzcG^WE_BpTp-D!^rbte*cd*%!<&5~0B z`qMwuq_knsf7XS-x7|}6JyPZqZ>u{4EJjR>z-LMZSHu z6&M?MAu6~WVa8rUzV^bJ~`AH$vh49hW ztNxx1<(DD23;g5C3S$4X&`L@xI|oKSsg`nER>bF~pg*kWRD(6(WssSwheaebn3q;K zl|}^=aukn5X&LYEfMkuS1ghVQ@^cQNVzyI`u8Ci!xRc=90`#XtDTZw}Mx6D&;PF@f zr}1qbWW(eKMSZJpMNh0x^(H%I&7msu+=O)aA-tYFSHQ&MM2x%~K7&Z&G8Y$J;s)}` z;>Zff+f?gxeW5_*KU(zZ6Fpy?wbtpz%Uony+(Qavl{Al=(KcS}7f%0THXgcG_PgY~ zX)>3z*MC9*1U0Cz!8tg;b&mjve|t9VqKY%3D$6S;jd#;k(?N|%8tS|vi+>0HCZjs5 zM9#ZLIsLK?lCFexh55zy7bn)wcgFV>@3HzZ`jI}BFt4r~1yLX?Lsrmczv^NW-#*W} zr5gl{(tx+oYtl{6n>miWXpKv}H*&LGXmLPdRwm!b6tBRPc%G5};=K-PG92aryye-I zwSmVNSLd%EMMGz3!u@aJcmX^tZ@B-BRSWtaj8n1Ce9eMrPFWT zWW1vKL7+o)u4$x5KXM@S|D&|Bqx6ErqBY3cHRP-+i^3-^Ldotx(qYu&YH9c6f`3Ub zNG*6v!wo|cl=}>NXbk;5rT#;1YQqp_u0dO7SgG;$lZj+o1N#PEE=-iT0G{ z37BNGV3>a{uRCTfL(JG$VBt-VzJ$?V&kE3H>soxTGy z3P&fGI&{#kF8d=<2r6k?Ew0u9Jn(vER952Qy;Ul)waEOt0R7fJ&bwBB>bA{e0p1On z9dN;PPfN!JdCO1GFFDuNvXONWA5KzAzowUMvWIZyDCcxhwR>n6MmS6^-=?J{{(|I) z#ir622e3u{BOdRH))a@ieGNQ@RJd2$)cNqnBB69|<5gyCVA|22)m1{lNl6d|J@L{N zU6QRDH2x-3Auuuj`k6M`)p>tJtY*##9s<|hW4(XPS{?HFb9xr={t9|pl||tl7pdIf z5PwPtJ$K}Z5<@v%N-8W;rI=ok9+u`jew^=8K0vfc1YY~)X5EtTG7Rwg5#8P+7Cg8~ z9IqEUU7P$uRwEaSA>?L9Q8pea>yXVJotpPlClTjjTsH|YX z_B!lE$937waQCRk6wr_uEc7``h1wdCys@lk>azn=vg147_>w1){mv;5m^mPP%|zaD zqcE{iR^wcH=UsJLJC zh{U#wD@BmG?l&BKZ#w!?ixJNQKVqy&3{vyC>rG%Ym}uouB%lFMQ) zmBrf0=%|R<_kUjvI}{I?!)s$&2jX9R-G5ybM*0>6@Mk(4^eC1w&0}fM8 zCrQzseitynk<^|%y86C0qYPm$LdivSNIb7p$0QGX1FFJ3&LMkA%HB|3iUx?>(kbFjD?aFkzrmf_Ay$g%- zv8Lcz_mFWJQ(@*NpG{?BIefRZM|z>pKUhY4&;umYV(}!2x(g^{uQynz$-0bG3ou`|YtBrj&sQu1^VHPdze%rOL6^B|L;l}Qmcl*PyX(r_ z*e7GyKBnV>lYOV=_$DdX^KiG{fP0Z<;AxioPJ5Mcn@;u(eTU`gg@W-&){lnlC4H?e zz*7>f<2Ra&NtmM7Q8tZV7s9^S(tG$mM^eMYFJ7;IhP!kG=hJ--WWk<=X1Dy8TRLl-0{-be8R^DXYT$BZXsa_*SYOV+ z#{Gj7){mNhw{AMK37NomMC89SG3zi6_Jf4$N;|#8pZnGXV)K2q1iVkgVS-Xne#pLK zzGK#E*8Kc-)K3}=d4`Q{vBn%Vv$PRmt-E)d^R<76Cqk2;ne;UNu=W5|Cuj}$)`b#q zhe2|MhLjQgu!0WF!z#1jg1{u$twK8NhrcL<;%FY_5Twh-#Pm%AD5Ot7e91sFuL~y{!8cl=40u_Ym(2dfyDk-}U)xPm0j#>bYNPoNGx}Ou&F@&)6zY zv>V?u=mNI)5-|id+2*V4-D;lV?epB4DMF7mpwfa$V($9iC`|@I3crXbfz& zVm*7@`4~puFGZ^gD0ZH$3(O(*YQjj}l0?&JE%RIQ;0#fFc7qmct+cU_46AA%{o$JX zmvw#KHelEtQ61AX5q&}E@UHrwN8D&+9JSL$V_xUZtf(uhKKNy54eBRz7#j-m%ZJ@V*SHzw z%mPB!N0OeQcael>bP7u^pG)k&-Hg z^>;5`eY1bqcK7-g@s<1(!FX~?BY-ae@wlwG5{>pJBqL5MTPoMNqkXM~jGd{82`A10 zYs=Gow|J-x8-Y}Yj(~N>t(Xg+zLe)_7F87n8$H`&then}zCW7$a8l~7+Y0$U)msd) zkz^p)L&>5Ly-7U~wS$g)W$T>x6>ONmmW95X531av92M7NQS=lNOUPw~2e-!Of?H$P za;#WL8l+@9->nDi@pzi=MEz(YRovS2TS6l%5643#gZWnj<8Qvz7prm1)UbKEXsJ#-7pUBv=CfAq*4)R=Dm$p-|<@UYi2?NVU$tE-ABX6>BlY zT)?E)-g;k>Y1if5SDjEh=%SFe1FoI$C1P1u0BYp-!VLp0ffi5y%g6*#&V1j{8s~lx z1@<@}K(PWs^)xgns#78xp)X{FGT5))3MqOx;DkriPrd?Qf6^Sq2{B*4V;j=G-vW*f zYtF9X5$!3wmaVg$G7E5w@8g&tg9uD=^9OME`MD)(8J0Gvc3qZD( zod?D^^Sg{yE1#Kw$-l2Zoa%|PQE@MfEei7T`3#e@>?H*^6j2lW?`}%T;?=<ym_Y6m8oqPZ(Fe55rqXs@ z+HutmcY$ce+vC0r?F(ZIGA2ui=QM0Cb{<4=vOff@^Bjl*Q>2sckDXks{iI(H6!d?Z zHIP*TZYK?rCekFJRFqI&5L>#Lnz#7Y?&d9A zZeQ1I9qdtYkhRkvO8{-jHQRIZi-prGC@u-L4)!s-6}pv#+6aGNo)7zwZo4`c1#qse zLT=yLUB7<~{f(&{sC*du5coeEePLqGrQkVSCTL=^TF#P=%xg+M%3hkp1+(C=aN(|30WE z=Ycp1u;p%h;vKx$MIu8noq!RsklRaCunWZrn>zJ3jq7OU;c$o+dU0@fTk|hQ_N5RvO>G2mc)RgP@ zsb?ecJ_JtdCveMPspLE&H&FPd>-7VHIha;Em`Oe1ZXT@Yi+Laj+ybINTqyaC`;;43 z4%AU!mc%rvR(+jxGSxf$UwS{+hg>G8c6bd1i0Ash?peljt#6CGM1FWK?g5JIwn)(D zN>Sqzklc*kk`{=DGZ5;)ctD?iQSAhlTP?AQchkRJ*rEQ;Z}o1K;tX***A;R`jdI~O+tbrN7L#=WwkkJ9p|ObDklhpVR>0MB)km$e7?lD%?6S?s>OXB%J;!AZe6SsmK`;-n1C)xJ#OUhlKg`vSo-$xeU zQ^Vh6p{rVHct+~wU86UzqZYVxzWpFR__Qg-2K>Nm99rpN(@hC-oRh<w5;V)uN*K z{>F}2dAj!t#Ql+#lS>-fSqz^lGxX?8w9xN^)wDGi!oQ;E!(-C#(T4rb>3-hz0?8JJ zh$EN`*!Mt|oVQ!mj7~f5`NEk~e8JWoTJh6_2`2LK;e!Pxw^8@=OoyCD6uZaw78pE6 zJTEfsaUSZ5Y!?4S9-y*QAwV{2zwyzE%M?u6h&erCZjY4c%hWhXN!26RdW9R#w+_XiH5NjyrMNoSE63ofqHN(;T~>| zs|h6l4+7BiHL7uEgrs_=Rq>GK_1kLzo?Sn_og1;YI$DS34z8fDpReEEuAXRHlvSS# z(b8r2o|n<|htbM&v&lO1xnRpO@>f5T75&*qm?{ci~ zd95RzbCehWw!1YQj;?V-&qiX>*Gb|IiI1BOMR$ojbw!JQ0B@wP?sunAgGG&aOt4#Y zs&8X!*!r=K`?j>n5MWMIfUbkej#KY9*I3)GBdlk$mN8Tu(t z`zu-cxJUs$PJvG}hDN1WVk%)95IJ!$P65@wjRH!O>lHVWiX=l6G zvr80n!Y>P~`cY<=DCI_6=H7$kE2DESa*M%OFA9_}`RBPM5D0Fi{{U;NfPdZRYScb} z5*9ZtP<@id8NN&nuWWM^wB?7TOl+7{Djutmutch`6_&R27E_RO9RUd{a;R2uWhPFd z{s8hgBzJjRoOwL04_=?kx=c!(Io8#v)EEd&d}Kg-r3a#pB|-EKv-2KmptC?6w>_zkbW8F9a56efP+l@l+-Dz2o?NOW%(MNv6S^N_vZMtFN8q_^q zGS0iJ$TqXpV9Fr&(uY$5)l~cZvIXq-J7;_3K(_y8uwcWN&SIzE!b#L}8qR*t?bNBe zPQB-k#@VT4L$dRMz(oVS$nk`o7&+L@)tJ7;cn95*?wIacBhS>klgs24Xsh^G-0G%c zb6;!<#I7&u{5fVOeM0tmP;r;$*(I6IUWo-8-vHNlbs)v+>j7%6a&!%*CWMRcF@E&{T7&lGdARnNk+B`jI`i zi|)m|*6Gx#+Pe=tS6=Z!;k22Jd%j#_^9i=(90PA#sDj-ePes)cys~dk&dX`>aJm#c>8autt z3*Lq2@!Sm79@X@}=rK>|Ya&Y+N4B0VG=;b}Z=*q~*i?+aUh8Gs-xnQQv7CFntu zHH2NAdnuX{jj2z;AKW+3(h%=bTY!V`n2s)ptHehg^%@7ESb;Z5;n&UT1;=(Lg-pBPjtz_EGTg*;JG5>0 zNZ0AI-!5*R9o48es%PZIS*<`VcKt-HNJx7pu;1f8>2UtaMcS}>u;ZE6Hr{^B_U#a` z;1D-}ymC4<1D@REo;t^j$DtWj3W27@m9sV>AvbZND9J@BWv4wzCtIJ=RZCp|K*N+Le-4lV* zI(P=M7ti~QwyUo~oFHSdw?_#D#!K8Svn6U{Q3*n32U@G-f#f7;5Nx~bFcU11zG*3B z<@jRs8MM!5S*x1L_zCiHyb$6UZTs&N#uccaeg$(!S-tv6w0)a>iyUx#cLbkyj?x+6 z4kyZ&FtXjH&&N)eDu|MwPo4d^Gg9xVz151BRO>@#REGaaA zm*9x+{r{6fWtGvWEMyc1@I;9rrIkT6`^`YiW4rE7sGY3+u(QtxGKd4u>5N9G=>?6q zi)4?Ck+Gvk7?;IC3e|gIc@>@T;7v0U_0N7%&WpE;^Ns=#?T=I%-QjDVWJ+C~pG5%- zav@Q$L$a5d==9^~pdpZ*zRzDq#=m{H0JJ*NUt)!cSH|3FwO7 zD;n%fIw#s3ZR209eiJAZs?l#4JgceBy*7i)9Oxa-$bQ54Lc9ROO_My29-%qJzPpA2 z=pyN^Vun`rZ6%v#K1o&_$Q^jy0;%tRo96>o`PnI;TSYG3yWfo9f?U`w&Yuc)w-h0L zOnUc1KmT|@12($VKYotp|HW1kd;2xLbodD-_PL$JTGxh&OjKubn@YgV;jWvQn1QMX>d<`y za?TzPi6yUlqHQj)VVozN{j!jrV`uj1DfddhL3VexKDp`l!2~BT4D6&@F1W7qA(vlWvcI#oedGQb6k^o*6lmL38L4QLC`80Ia}6`>No$z+*z<_9u!(7TeNkSHCq0;#7C-1o5MjlkFqsFqizq^ zddu}#4ueGEFtA_a_Dz^_jO}jA$k$WRRNZMkO&O}q9c@_!W6##C#q*uO%dBr}ZcWVW zZb?&V?QTg=Y;8%Ue|vEH{DLbWixR3NPnbrX>|cC>j%yGi0xMZFseO5s*@}nUm z|H!sqHWZQLME%c!m2fzKhb`Hlm}cv-Sq>#0)YvMiDm9w4N|R2l8Ij4g%y4n>NN{D< zbTPCo)EuTv33#4maz87WI`ye$oT06;CP^ZOhl^{Dn+vw2?dRTBBGl&N)>gPm1D-3% zzd{}>Zi_ZxEn?F2$h1bkF*E0g#ufwWd`D zo0kZ=+g$ToOsaq(` zHwl3}BQtXE0EHmj6Y{bIQgZ}YH48-!+CCD5dqZ5X;4IMM{G$bbF;p&$S3T@(1;_dV z!X8ZIBkzJX$<5O;)9C4ys}(K%72l|s?KUvwL&kf~UwC+0GMO^4zn@&An|%QCc%IxC zC#90=k7a{*hWXDJ@wu0anZtI&*=@#Fc+ETz5qCi|80IQklBQ zMr?VmBd`~V*<{-m(Xk(KrKkO zbGALy8^T>2TH_hO=BHP<2C`Ce7&;C6RRkTxu0*-ueK9_;m!*D)^%Oj9&R#YT*-ea zFP8XPVyZY~@p!}fQ8vm@^4k;Yya*4@v?C_Rxtk&4-LnMgrt8#|aeq(K3&F`plaHVW zEMh-N%A!A?W))_h6&Y?b+HqQtwZksTc#)CZ=C$6YN08!*3q+^4>Pw_aseT>p#tUib z32pw}4hPUQQ=pq>p*4hQsv9 zIaVM?oU}9GDJ*7ifUt7xuGc=Qc?1duP2N1cYQUoL&#&nNx}sXDO2pum(wJhQDuxX! zKL1G4_u8zlely^^u~GDKY#tukT0SD8v80UwnW0`h_%>fAoe5|9gM& z{^kAu(~~Uv>2F_6o&YniNH5y3UxkDT6B^`lrBKW3CUN@ zm)n*#df{+5z+J_A#kB8aNtf#hik~e@ek!`NrYXO$x)GAsSzh0on^)gnx+a2KaQb$V|g(~E_@}lwyHfV)HGF*QrcbzEs*~H>h!pL zNEaR%Zi>ZZBJ5TBYc&SmYkG|}MJMi)ttd-rmTdMI4B48~6jIs}hta3$ReOS$?+rXQ z@>rv!M{f{_&!E;4xNHK2%igldr;tdiTOSu6vcD-lr=bZbk-WS4{)DRDO&o}nWA2u9 z&<<3?P|7Jb$q zaIvx5%XqCqRbE=BLQH^OL^YHs*5=Ub(1{~*NdY1qVBRB)(1*PcgPQ|#5~SkRV7v@zM?!Q>vA$y>O_ny znay6OR=SonPe5Xwk4F#G(N(Qn5Y$Pd5^1RkzgWrLRP6p{5Y51MZEMrT#S&4tB}kK1 zt0)naj0nLwto!L05hS)lq#%VvP_vR!DXUszGi83v4*AFcn+joaXaY#x0^x>?&A;qD zrtE|3u>FyFiai>^DEp2aY$Qj4v-6FobHX)o&jy|apBpuTV(iD<+@7J+4@#4xp&;So zlPvd#!$bMP*5AV^=X`QxU?de>yA>pb{eAE&`s@0@I^*C~-PJgoI_C}SSdJUOEuTBk zFWyn$c79;K{QLnu{(s&GlTss|T|^%`(HbEOFoZeyg7N($+=oSZVhvAH>*gWY!MM{dzZ!)seE;D<0*2?K; zr3Dp9V3vnhmX&jh8qT)GemTwHRL?VM^4D>JaY<56;oVP1I)V>_aQF^Hkdl(pX*nM4^F8Im(I&JU=kgYKZGT?S#J)_Zq(yd@?3SJ9Z1n#2lgYdlO=t&)4IMfSq4&Ov z!l0fj>s%*OmSXl%Pe-Tmjs$qqX0TBKPO4#KB4*23NCQm&xz9u(7hHa~>bQiLQ+{%w zeUNW{cSq&agk3?NS+cN!8u*k8ZXFvKL(tzB=rH~W)u7a7K7+o13PQ&QoGdr$ z=*@ha)%>{&GD!hQ-gSUea|3DA&qMgW+h5%0YnCc;$U2wp)0TCS98pWS9<|V@`L6FD z+zgf~k|)1@9Y*%u89W3kdJnjN=n>nma99EPu_s9G%#&QYXJrB$CJTMaoCE~uOaL_8 z8BaRmF2WD;mI@5Cb^^8sFMGBJzMTIqC5tkpU|r#Pw0^NhGLN4xRz*^6|znKt8*vzL+B zLV-~6tDb`u0N%SC=QS-}PTK?S2Aj1{#G&alg*t{YfI7d2Tz4rcp9-juil|tYJSs6T z`49MdGXbx55j4xhi%}T(=^@2ut^XOXeIoEL3ju=E`+PVx98!` z-JFjdK%6^20pb3J#6RqOse9YTMlRQlQp+`P@OHGPrenrbt2Y z{F7Ze#y3nK6wQf_Q$)wBM8|2O;zqfcU$tWJ|Mh z`seQ81q9l8H$lPoO-xCN83Wg+n*z`m1VSIY1kpa`PCz#4Il;7*S93Gdvkl`*wlx0u z&-M{eSxbIg5~8}4cd&3U>?9#ZD51PT3FVziD4*uITHH)=7^33%n$MIXpXJtqG@jdQ;&bIY?Mx|h|%<~_BA(G?Mof;Aq;baR_uJQLf z;E+V?#|os@gHw7~Zl*a8p6^NLSB6&Kp!5CHB{+tTjK@dD0Qdfco|e#iey03!TVNSM z5`mP)XaGa2Fj~&Lg*J&4k%X==m@Fte4ygz3D-I_ee23V{raY~NBZ9V!dUhhc=$5O9 z2_hL9^YCIwiUWTf~mb0Ji{UcIUJ5DDKLz%Mz{# z;uteyX0KSL#PVZiHN!TJ314O{-|NA;Ee-E|2%K3OeSoEkG~sA_sQPa%*;tWpGTDeb zRg63n*rr4`-4c%N++VI|cI%HfQps<^Qd|OTGts)MW)T0{hdG{viV$a<@>b@|1bbDS zyo5M-U&YB6nB&6iYvAYg%txA~SC+&JVI50yJyM9ZybaO-OH4|Tx zQ1aXa$Zu?kya?FXf_Z62z1UP!a4k;?mGuK22`<+rx)4-VgSa0Rw0iC^!x)q9o8CYm zQ-56n6BPYw6jA%HA&BYQ2b~QNdp;en8$6s}U~Al%vsWGOpQQ6HVlH03GwZfF_-j#w!&~=r_Gw$Q66qZyr*gnwH^gV z0F@`oG!^TBx_64y7;*GHJ70}WDl%p};?wO>2ow0pPsbW)Ed}8L#eqKtul%{h5Auh{ z<@HGzXBT^v82F-0mihnOkfOkPl4=D4oxpXGG=?bP3c?5;c!6Q^z4c`!*{9wVy2RO(VAU;9x9yzPm7VH#of3*Ox#y zk9KzMt{pr4CghICfPM;^v5*@CbqJgtaBPyJbc z>M!u(R}H{%pz7eM*eSqV*4){wT)%9pcLWN2`(A6yy0cew#2@Xp{_0UAbJfqwJBVth zLpS4|cPTJ^_75|INyC&gj+ZU1!)O`s>^rY(?mBJfD*bgYnm&tPu7h z9xk0lS8ro%PQaknFpOvOzP~t<#l_8rO@iC9Y$q0+7h+4R9X@_$ zk7|NZBq7IUa$bi7n*{hpQDe?>bI@;xQ1pp5v{S-Z+Qjt4z+%FD<`7C$TqK+TPb?*( zU62W)&!>&7h{5A zeYu`&2|9a~!|bT9QlZ$OIv*Qx8r`Zv?ALUQ!Lu4CL6tpOe(+GU;^n<+%w*-Sgi5hS zjgObVr;6!BZ2-IYuS1vo--0POxVk_o8r%(^y}{K59LQX~ps)#K{*Mxymaz}}@TwMm z8^`reC8h2!HsC)Ciyso@5vyN~&yAY{aoQ?6>TmTIc4y=N#^d2lCzx&WV_5*aGJ`Q& zi8!4f2lJUV6f3hYyF_C}4rQlI0I%y^L;%ifg=B#8Q7LvV1G=ufdDqI1APpGZR=F;#jkD%@L!zm zG4xIxC`%T8Y+C#D)+y7ipg#HgSbc8pUClXKZpTGx0pj6chWqIt*to}QaPJnkAHY$P|n)FW^E`CSr@0QA)>|+wSKkjhkaQY0hXC4E*%WIg608jVK=mB_azZ?+& zw{-WsjjunBBluIV8Mft|ZUxkSHbWoZDoNp-X}`j{w6HaK)seV;>oDhJ{SDaAugDu? zyyYx86~DnqTYaW?Qx3o*r(Wa3`&>w9e8{b4D}FNlwTQkK8L0=RG)#=vyQmdW<4@)E zNUS5_j+7MApYCT;347DzQ0ONzYGKb`nSMHAB;ap)gij*k5L$CZL!X3pl=1uEzql>i zls(-!b#fZDP}Jw5=87t;wf=3cmzIe2%OFS%gBP~~c5{W9&6ARNoqdaYB7m^~JB!>^ z+GV=bgN@04#?Q})!aqo@N%SIQ{ORzX2R;O-j>BXI;4E89D6~_?`>+tCyV0dV09jfD zMN9g(VjXN)b9GEQT#omvS;I;5QZr7)gX_w#|7x=Ky^UI_xVKfZSGV_VlUjfK&C-2y zC(*m-IT=k&L;s(+Zh}1D)3sxp*>Gxv*?A8|8ab|zuBDK0Olu!OY%T?B&8|&3*W&~P zJ_>`#C@r|;;&IcZ72DTSoTJl%ww2+t8|F2=H^ri<*4k4o-5KZ7dqjn4Y@6@6-o^ps z-`te};9)#JiySKYXM5vB5&W=>}WVE=Se+1RIuF<2u5)YH*bm`0C z=Spjl&Y4&u5wXeOrez$o#PO6P$bqL(u2|G8wbc`p6q0FHOn(_2ON1w?v?j~Z^aUsN z3RQ!VnLVowWn&itSWv51c;?beZ1(i)9>kH2X7L4oNO&M=4R-f?TH>9T<=xQDO)t;; zD|~fdoudL2tWopR~ocp>E=G|RP7 zC=ZnzH2`~<;K2YC-_LMcbL%RMxHYe?&+%)dHuhQk2J?P}A|GJ{N#?;bo|rtL?KC~XO6T@s6xVx327}SWmFlt5A>7_Jz zjJPIM%x2HM-aSv-^7>vl+OvA|_?2Qx=gyhX0lUo*PqhjiSG5jjvH{Avz8Lg-e$JO>9kZdV?pNY3o#~p0gI^%KG4zYh|Jw@#k!NS65n2)B4ZjkvmbfNZb0FLi+i{7%# zX?|HDmHJ`Mub{aXI7t-|e|7Awv7*mS%N5dr3PZ_54X=Avg^nLU!+mK5bpDkmY1Prw zv6QZ8gZYA zp&v=0Z3~XKV7T?kLsJT{#;44vZ95|w2bc29$@Z15ALU>fC$9}6+&|0hbZIO6Wc^zg z+IIG$(Dn=oAh~bxVNbk-#L!!`Vh8C5MVfoHfP=iHJ5* zz9fbKZ1PPIc(U9Ake!iB-8kl95 z${E@hvl3>9ICF!lH#12Y&6tQu;U%q$Ow=Kxh^z#Xd6f`ZHDWo0`?Pr6#jqN%%R0Iu z)NKAjh~1rb1M&x51Co1$C-?Y2QYL(%U%poXRg_a`pn;(7!{XlD=Qs}%plet-WHJ|N zMu!n{7LbC;$TH*}PASXM|4|OA*3;!-foK(>M^99#IKjY5udiRmESKSl;oZ9~UL@wmYjyQk)y!As-B9z5ois>m!H}?Hl zZo~R(Q`Br8lrXSE2m4+o%o?OqEWjJyDi}nv7Zsp@=t0@ksUR?9Qwq{SV9(;SHXg0o zIh`{S)#-{VA|2_8LiMAUzrKQ(oi)m9G7!BZxpUhK6LR}ZP1-2Pr-AXJor3@mzvdxp zpN-PtG&(IPYqH6?4@aiMbvMk&J>FIM5)}Ie0_tG}qIy4vdV=NSvP3M69b8l?^S%|k z`wEYo$c?e8w=j-oFj(z}F^sIcaX0#9@J71mP-ZBbMGL^k0_roMk&S!ShI<2U(bP%T znt2j;3d3ECAwImNKn?W=j%= znE+o1R^)YVqMAi8RbM6W8k6; zv52+C;vZO4gf~LUa`EYF3dYub$&S%o69fc{z>jc2@P?n%6A1Qm%(-Mcfr5>jfz~_j zhNch61{+;(1QDWB+DvKH8(@Wc1}m2y8YGVP-UhR3DPnX)uC+d*h}e_>!?J>7MCZAc z*dvBU8Pz&oK1TYm(+|Owx9XDJ8H3;VKo(0Q$1^o}RwJWB(g`*ds=(&*^2XoDo ztjkiaU}9{AOlCf$3z`^x-og;|LvH778ZILnnB>#fZl{g9SsN3IT%hr6&c_i^{;^a^ z@KD4BBjC(Ny3_J0=0~A;WS$LAR1px|rHoeR9V67kF-4aykB}W>gxp3h#$|`ZCvO!Z zVp8V)MEw}DcGy=#MqqqegOtU)oTEgf@tl2@#inn6ao3>QAhCkii0Tk|FaELf1I(FhT=cqfR5 zb@Q~syq-@Oh9x0`L*j@g6rxT(V{MJ==3A;2Q$J;+CYk4YTiZdSTpM{w!jhI64j64E zows{o*}}RaWofv+6Z~?Zb(NENU~_!uC(HtI`CyIcImTF?{8_hBq0r?yBJoaUHkBc- ztOdKISuX*BEJqW>vjRDCN?ArX=~b@2y^G`S645lzToSdiIUI7WySg~%2zHb+nQzqIoYwf6>O0L9Q0 zEGEUIrEJ^nGG#JrhFi zhWghP0h*brsusCXNmB9641%DXVjR6e&(3T;`jXQ2x#T5;Yk*5yPE2=@6Vgz!bWy_M z?yCMEZ^FaP)$NAch7+frfTu)bFM0&@7vg^qi1QbHop+NU=T@_g;Vy5N-ZwY8YZ%(U zjYFtvMeBEOy)eu4Y!kxn98sz&tokZVf@yem;RVzo1ls!V(sHpM%dAhkt*c%0!b@#z zfaCicYM-y{;;^Qtr>qw5$If0I)zUdQ$3BV?4}RTh*VS* zU-0F^tBV+=U^q~7KYD*E6@1p7=-J2`Izg)PmyC6svS|6(-adwv8~bJ*wqN0 z2z$&C{O~xrl+Twv7s?B}J3BJaP?D^864_baVVQ3N|E0!m7N%^@TX}&m;G2JijNcsH zSm9^igm~m=)OEB|GhoVzV#N9tK6(XDBp-laOt}>-%H)Zd;^WpDMQdTyS(PnS8f+#S zU{WokIqEGUPhPNh+Y{e+VGqA8ng>*JL~l1hp#|Ewq~hq&AF;}TQZ(kZ9`UR|RjaIm zl+>L?mq>j{^7Gl_^ObPxAsUZM7|{t?4YSI%?{nQ55I!B1Fk$_^mK98z_{}B{AU+-xtjNjLzf~(fbM1$M))>>aqIewtHw&Q%Hnu@VOZI?^W%n3d3 z+G8D@w;J1tW@ymmIdMMowqnS7wDIXNT*?fTbNIL`3BFlrORAc0msV0XicQ9Bshe?Q zTOAc$^=k`Ol2Ycppe|=7&%TOk0;}=CevXy>3T{E=MloecQfOQR2vMjHCWKsx09WmotZGIToB#Y$+I2xH zP&U}gA!8n9SeGtX4i`fq8@Rzkq{!%sK7vZ{ha>@(NZX(36>!XB3ag)Rn`S=;d*Gg? zfyj1fmEX=cwkPSI&Z1uA>kN+IdAZ{dPh*X5GzQ4GpVNlS^Jcq zYRUf%y7YW**##kcI^yiz-9sn|OU#@wxtP_g?hKwnt86_!wZ}%=un-p_KDf~-W-p!I zTy5>_=TIIvQa9*dXpW$p5Y_tcmFOVjiiTAtoYRcGIv~~<(~J`(`;oZ~p2=j}IjZ)2 z#aTXJ3s(GX)^xj(17&V**=tC)xWtGp6CDWO7k2|)0p6@w2F!qRak3{YZIF!xt9jrV z4owWAld-!i+&BH%MLB!8iQzTGIFrNCgL%sosl9adSeX!*g551dg2Wt{HYW9z2?Zws zDWE5fd~Td_Xil;#phkcA0r?!ZBb#%Y6?Wy;jK^L@EP23B$vC9jvc zE*l_}(z({K@jPXQO}&9!oq+3xHOis@4FFA@FDrsC*-~-7N?KrrnLQvOEDl>6XbKc^ zL@S-KTc~!}{;RLv=8(8H);t0RIp~<-F3|6d9lN_bZvb!I^K_Wn0I1PkW1B0KDksy1 zRMXvov0Jo*r@h*&!eZhDhCv``z1(L@YP1)&c^h^2eaMBG1R?O`ludD?H}hq~Uf+}N z1}zzfEZqJ9!$nu6hjABX?sfk!Y&NWIHV)-EEG*K-99{#&%SC<6^xs9LiAjK-3g;ymd5`{}Dx? z6w~v-@w}X8m5GO8X-yvsDvk576@VI_?q3h_C?5aUV<1>o-m!YjC_>XN3f&g1aN`r_ zcDf86wWv2#(8?8HkeXOBK%sV$N}fe9=Li*|QC65krGlAz(G!Xy1A3|93I}x&J&G!z ziM!l22ppz%Z6CSE1=mgB@if_*@m`BU{h(GMSAq3_Mo5(enxPx+~WR!m7X0O0)W;U>tt!QY{F?fI0G_5`>f-uVp zl)J;m;!fD1T&2vQ8dqKzxy-{ZWGaNJt0%^{^WQEpq>^>RrKlY7xASen;_ zRNO~tA3};|9#Lky^rz9v1g!9sqCwEn6X{_R??-e^j`w%N|5k=-g0X>*jm-N9g1dk4 z))odZrQ{WK45AD(HQYJt183?QJghpEaflAp;(ZV7?jF1yLU?$ zD3DPtT&-DF4->PzT{16V<^IiupgV2TM=R!?3vl0?L`=*o&S#4(m@&0g?*{Fy@X0iI zXB`MFD(ewCDkUs71VJC7uHaLML=(4)Rj;70$MnemiYZ^hOo7Li39+0eVZ)53tOXCX z1tCmxDcH^Y1baJ#fS^I{+*Bs~Pl^0Sc|FV$B)0>TL*n2w8?#%Ouk}uosvE*|Z+@uw zc~uYF}m&aV79z@qAEd++QPyL`VewIJLR@-PYZ6Jy}jl7@IPDR z;l}IR`NiVpmK?^@y13t5hT>MZUA8K0f-A;1zXoP<)&N|_d-Hg@xjqMu`Vz`DSqauf z^cg`;=mr^g*rdlL@*cc`pK-1x5Y&XX*iOOj>Z+@t%_mh0%PhgHaDopfdRi<^Cl4|6 zikQ@jkqb8&HqgRKG*Q>ngV>f*dqpXdGb&Z%Gdh%!V8(ziIz$cy+*W9eVsz_-wrVw1 zGOgH)V2l^@AXJhmxrbFfXfbGa(@FOo=3J=>+f?up>_Q}dK#d^dNiIn_NZHrI)lylj zzK4yw$Bp~>ZBLc^Dn!I`lw(tfVa~;1(8A%_+bt)i8TgF(VWB=>%o^`4joa-COZ3V| z^vqj*nF+TJ!QTip8(vRnrntQ zqV{z5E?z@+{f`&Qc|UiB*(vO`aK3cfL241yq0MG@d-g1SAfB*WrFS&~4L>x0Am6O@ zkpDLEA{p05?k<0w?(^;}$+V+1Tn$qC><;5&x4#nlOoQG3rqWg;mjKfYB3?&mGucIe zi&a61xQ+vsYzNBpxW@>STZL@*)F9S{Z`Fk?^->j0Z|IT5a@HNn#r$xGHj>Mr*JB^m z%}lHj!wW!FtASyKda-P)K!U_Tb~mnO3#=<_rvfTk-?HLqb|;rER}LRgazHgpck!5M z)|Z&$Cm3?$LRGz5#ShL35k}v%m{&iAb)2etXe~O-m1Q#Ma#6z zedR2xn6bplYU-He-!Y z#oJu#*g)gLgxM7V#qB>})@^mdJyC{?wkpXKJ84keMDsA^R8TZ-19@izfvz@pE=ISJ zu=134=nC~+?xUg(Xk2-O+X7=NAlq3{JSvViz2sD3vd4Z zFu{$Am`;~{R{X!2OzV_1j*JG8CU-P~Vq+S|)DSlq9AU2 z;o&KKa`eek_}t`ktj`Vp{7r7;RQq%*w@M{dJF0YbW$+jO2v6V%oZ+mViZiA#Gk5~G za0{Qo&!kpoDH1qY71NSgcpZK7G&G-y!SdTXRwHww|zyfPns{^dPNvIv4P|KQo)0#U4ttKK49?;5I<5DUkZo-j!0rx1EJ@=0; z>tH`m-xSV;d0D}6f9LB%@*6r!Q9x<5(LJ#=rqA%1(YN&I=XU;iJOiAzsa$`CI1c#Y z_vP=5s&4cxX?LXup#BiH@N+oB&(&YR!_jl?f5>fud6KeOZq(UJcFdAsxl|6r2hq-D zFT3T^C#Ph@w53AwK2tvG5gyXK$veIhy2WYS!Ii3a6)#qL=ws1bAyur>JS^!S+7ZuSzNb#7$VESY&WbmFvg~Ea=cl+?)(Qk~uZ6uSUH{6BG8JiZsiP(Jc`tdcfOC z4ID64k)dJ>FQ>eMg;$)QanyNGac!zh#ftP43H`Ysn0&ew(wO`CbQsoS!hTQ+sj@lv z?7VT$B;fG53{xCN+)aVEr&)nt({KOC37(R9Zi>1P@G-9KlZEZVt-g#7{@Q8%C*;|- z1)?pi!FlI`F!O?=n+^zw109;M?yVIbC`scVG&$`XOKt)|wG4;~m%$#v#L#IyT<3Wb zgl519EO&H;BIMDO#aE-36`X(@Qn>>VN6sVifdn=85FfN(4FEf98cz`$wM5&R7{$oZ z{6Kr({ra3&c;QwxLZ~C^mmN zbQ$JG1QUbQVtDHUMO~%esAFwR$mWC_Vha2={#$|g_u4y4UkrNh>-gH#ban!wMwIqB z1%U-}LjV@>$-Em|OE(0BLCLzK;n8myR+c5K8$9nXc8qn|n6#(Z>pmN2v0xQ5)#d&9xq5<&UZ{NV*ir$MBBlai%@=yi%@-%Xn_{w9VtQ{6?ojX{5#OD$x}OL- zY7RrK3+(BRJ{x#;wmSNOo!{N^sjDb=e2iIn%CtJNer?dI+)C6iy9^%5$xY(8z!KiKgDPO9CQp>RZewO5<@syM=~f8dy`CZy9}q@YNN#(6QDzG=~Oq)Gn)gW~vn!0^FnTJ}G~`u)u>Lz-;k7#k-m z($@eHG1MXHcTM~-brL*Wh393;5W@@)zf_x;d5rO4XSH!iNVp&C%h)I5v__2LH(*D5 z_Wh8DzxN!v8NAJ_fIl6)L1%?FEs`x^%4$t20IeXQjOn?5c|2VkAAOLpZy6I;MunA`C<~278ftd7!8q_ z^KrvPv4~?B`L`qO+YMgtPySK34Cb5JWg?Q0K_*&* zUC=z1Y(G5@BtQ9K@bmh9m_GL@VBLP^5%wkWVdif>XeT^CKEiSD{9a#RGe(n&5&D_s zRFf075|pWd;*7xAm6Bm~*Q{i7Qn?KLB`$HJ&~yR$%T^Y}K&f=Ja{R#?Bm1-m7J9IH zeQG>}6(Z^&Ws}gCzjirkEp8oKPpxipj(N{{AMbM4dvCS3SfEgUsj~O_;;Y|l?KPy9 zjNBAmk`#P>!F0+Kt^L0d%0(-N#k@E!%7Vox?qcpg?l1f6{=H}~kb)@iPZ>SlS_y}~ zB;iY%A3D6zL-6mI?LMmWnFPDGO72d{oTrJ}OEo$>*-}O(({czRywy@_t;m^vTvQd2 zimQ!bS0mYPHLT;j7(}9^^;{DVG>TP=mi$0CHnA!dk{@3CJK?(si zLz4-b`$F&lDSG`g2}5LxD~xzSuug(5 zkkt-?0;Z~WBQw=>9l~St@yZ#u^L9}24rW3@N;F!9lUW$>p`_zypE2nuj`G+#o-#9{ zTg3yil*x9iq}9v!hhlfGSm=zo@$P$IL9}2?pw|njLfoT^^P1W}cG>t&*t-vj_1QJL4;G0L4J$!e&4VG9-z}r($bMM{TW5Rsw70 z_1S%VvQ(}@ z&1e1}{aW-t)9AATKjBBxokz}IXMuFT ztDV#SUI41Dc@~lA3<)Gd+VLlry<^Z0`khq3?h@pl+!<2@M$BVUgxDdr#X6n+acROqlu2MkR0>`!Ozqx~oUo1eaX z$V%>Nl+Z(Wn-_ zq?t#Gfbay)e9A#z(?ZXA-Qv)GY`5+Hv38UG@8jK}_E>9ceJ``8qpARn(Tl!FI+#-X zQzw*UW?-(zU{rktDpk-qX;$&>XIGCJeBe+=+VQN{Wl~|hpPzaq<_g`4{p#R8y4Uvl zl}igiCt?hV)`|zcS^4C}G8ip%jVmFFs(^#twck)_^=S)wjJ``=8|Hp8mV^hh0(#qL zP&A@Xc5!C9j9nf@?_o;H4oBK69P~7XO{(=(11dUPxIolm@3)cnvIILBeW6rOl;=#Wfi|Via;}QIG zj^PR83EBdREqD90sOuW$W5fCq7aPXP)9f`ESw0pv=r1z| zavU0;&i;iN#yh^sA3r&qK3ec}Kz}*B7~$q6d;O38`hWPH zUQo~mHwNRZL1exF+@MIdkR6aPu`x7)Y#k=#7Usatl#cCCES%401P}ZQNK;DH828S+ zaWNKd>^H%oayP}>mte&TU~3EBXoy6%VOWQL3VQV<9|k7PH=g4x(DNdF|Cs!G&1Q() zSEO;Czi>i_csm#Kj4x@tPcX^gmz-Vv!}2M zWX=6f=S*;}=ljhc*eb;bI|;_b33hc7lQ5>5Seav%UGaZp~34szzdFwlZk2>T_|~d4Oq_ z8JmNY-d-bwfPg&Dkzv|QP7T2Wzd&%TaFjn4uNvl3$}7Abxgza~dN3)3rGlmW0rEhpVhere3VX~Ik zX-z|ej~f~kYxF#Ob>460YvP4JHiIuDXLGq{)snPNF88RFvS7yxH0eA8SLW~Sctl;P zSpN(k+NuQGXM%I{gRFmnj~zn2LnL)}vVV&&9LN5B|5yHgP(qLPf8N|xgfA;2PP$1i zZe@uyzsHf$+cnqHE}O+5^w0b6`e*&OeM%Vn92%pfpYpl_J)0b3!^lmd^Bp&0{5~4A zzve2^V*U61m;SpxGfe%DeKt*N7{bw`hGT&~+dhXrn?CzK>pmx8$C4KOY=$(X8?_l4 zq`S;aZPd^a*M_!0pSGcCtj{p+@nwS|n}|GA*!-m6Z_1yi5dM}lnEvzrH@NQf_-D&j zVoz4Q;hQu1M&J2i)0h`RDW?D{ne7D=nwZ^HeTSn27!nnMf#jCG+dyfgZnT5K=&TNQ zmSy`BQclH}z{mo}3*L^j`O@$LtCy)!D1)9*+?ncTs%x8@5I4AGS^`d5Vr%r)nF48o zhMh0p%04M89JtE%LC)!SsXNXxWAwm$rq;~he7&M1u*1$avU6gEoo22jl_OzmPII(C z+fyZUUz^p(=oYAd>=iq4!q=LBvsf!p19jHUZB;f9j|<`@My7wnYdd3mIg(8h*LLWr z1uCaQ?v1C<209#VU4;e*gX?r}^>lz#DvNOr0UVHqxYHDgG&{TKC_WjEGgiZqZ|Xq} zH`mgj#Tifk9R(!l_eD!k5}@4-DTAcdJxjEKaHBTF6G9Y@=vW!KizAdKh~0p(e}D|W z$r;BPBdS)B5N}2VC0on6i%AU6= z2KwA4J^6rq7QjRx&_&T{2n;T=8}^KmF)EO|qS+WAhH{1IH2_gfV0k1*)n4wRDgz2T zu$zoS5Pqoc=^PZ%Kdxs?f64nb8NI z%fHTg4a}gMSA48ZrNrK5p_@>KLA}Gw1e4&FI>n}BN~@v)i~mL$aC2}+f^|l0il)b} zs;{pD0N?yN6##C2&Z*0-H*e=Uf6xL5fPl3x{O1OM^*8=nGd6Xg=Nn&sUiQi0PZOf8 z?dve?X9d^s(Yd&~H%s&zDfST%!Mr(c1*ed*kExPz;yc?kQAD9~{u^770^W}Ou@7e9 zT%2Kgo?YEya;>B>j&v}!QN3&|$ywAv7VI=CDw^CL#HN$00+CiXSuEMxhhelBTmS+N~rXx~TR=Qt$Eg4aqzucBi5p@S*h?=qp4v5s+g^E(ACVj`ySFdXVmO zRS=#kNkqYw99Kete8gPq@U=`1EfrF4E|otCEtS_t5-pdjTHG2`EpJuhs=*?wf$KA@=&V-9$W_Xm#Vp*XLe&b!Nec&ykh)}E zBbd*p&s`$4jgJp1(Nj6}oqOdWEPq*^=S25@bu`PPrBd!v#vImpmn;KuSfvHv{}_PP z*w_}a*Zp_ip8)#Cy-Jrg+PRiYweQk%r6|*AX|)vZRLzaknJ;-I4J8P^{* zhN!SBuhFDM7sjR*BGr*+Jc)6zuA7K5!&d`|ObbnL^<%31)K1vEcv zR>kbLq0*JtABBEIvI*6?sH0Y9RHT8KE5)mtkL{@OO+zAgtXEcLu(suXi&FrxX5|C? z?;j|nZY@I1b^i)X;S;tc)+IgkvMS_~pWchC${__Wm8<2hU}>g3_=x_h+A^kaunJ8M zQ=RZW&aHgzE@zVQ)GCN;m&Dro_)JrUl5H>A(F_zre~{UD6>8a8Z9}nMq)5x!uPWHtluP%WWhibrk+$>`|qt>hXgqdpPZB1$*lbN7zuxz|8l^bH{x zTqQLvzC!uh4psa4YN^6;j89$UJ-(}~4oTMLFAx46U})I=AnpJG0Q>*|Kt?Ni{k6gxXe(2NxegQ^a^e=Z_=_8R1f(}<@&zUb zS7A8nm&PaRL{a1SYN(0Ku~!Vs6);aku4BPjjEohd)3T}xzMg7c_K}wizP^%ZvpD~Q z7aK{Z;4Q=R0J@*Z$ZzZya}~y+#9B5MPinmoSd(Jvi3DvF=SBlo0!PI*r~zaIoBIZ9 zNs-L(xmMjWeZ*1O(nVuwYQUGK1#Pd2Wt^&b7@MpUfJ-BQq!)Bcy+An}?BH^=yIu zw~R2V9-b>e3;zC00d_?1KOa4hm-AfIKtB)-piZ!XAuXYgx7Ky7qANs{`}CcYm;x1` z3S7v?aKirKbZZtfz)drRIGH1}z)>^8oR0ev8jaY|Mj!a`Tp`Klb6Dygn6*(~NU+Ih z74c^FDre+-&KO8hC^#uXHVm?ZTv{mUL()%wnQf_&LMHN=4_K`9+TtfJdVb!iTmZ!-Qef%po(V5 z_fy(DDOxroX1j^HrM)xLrBaV<_r@?y*5267rE68~?llLZA=769NO;5ZMdOLj<}^3J0S z6t615d1VCk4g<9B)oKtqX9@|arHbXsmZO9f7fzfXsg(edOwt81hXsnHqdDIh6zoP7 z_{E;f^ovZzO4(%;xu{B)MoBDT;(t!5k|`SYU2FYg6F4=D)&4;J`?_de@@fD6RG z2TR!ty>>uPjPSV<*dyyP-+lrzTJX06dUU0?%$D8qzhKX^WuOQ&uus9TXW!drl+oMY hQLwiIdY;H^`AYuZmd$DK`)zwe#2=E)s}P7k0046M-OB&~ literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto/roboto-italic.woff2 b/_static/fonts/roboto/roboto-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..719979294248cc489ad409e0bcf82b66c9a4ee79 GIT binary patch literal 54380 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 z�C9`zg^%TBxxmv*}JUD%T$iM-;C=s`)cR2W%JX_tI@xkJ(BRI zZenB~XZoj?_S*2lXPsM+dHNzu?2$O|f#Yb;Bh-pMSc@4nc4SzFj9S#}=B;`gt|vzI zjOw+FGNNaCJy^{2^{IOA=fm0j)O&kFjc@h{>q%~+b{|I*!@_Ih2A^}fKs!?f>bo?4 z)5)&>MMLf0M6LBMU>9`54$9YkRab1r^(~95pO4q(r`b0yJB;SNnVHsojO<`|ZTKLL z`9T(dmzLTZ&s?MPlg8|$Y<-_5d>hXi{I&5X;|dfEe?9NQ-4Fqm0-`SvJ$ae3#36oLP8HZ{?YI za*Hft2R<;Sn`V5noVhvm(*(Er8?Nogs}T6E-d-8E&$VC+G%DRTo<^2i1CPPTtlRC> zB_p)cDGNcuJg}Kl-KR;(`X9xZ{k-6f)6Cw0e;6CoB7@AlpK0y-Oj!HjediQ&IWx@p zszE_#dr*w?kV$v5Dff_-)A>#y_PbGESH{fbl)ZsSd+zXPn(F)?TSE5%V5?r=k~vk?nM3t8os*+O_a~?b-pl#F*`whH z2XXTGJrS}S0ReF;&9`7c@HGp`hv;;)W6OleIJu9wiygMuUgnSo{+e$Lh!k|lOVb<% z!xbUStijG$3c|=nA-9OjhwCGba4#YFL9yjC|u>M@JD#BD#XOH5+qkN zm!W9h7Mp_)tt=)cxZRm4hg(|3&D|ftU;}Iy!zw&I`-+7g0N$X0dwg)lnfQbFWdfR- zkPm{@`XHMF(7(_F^H4o!JqFL%;jM|s8+R~5fU)@zOM*v1pJL3TTs9W{H6D`neoS_@ zaX6ihlAKY-wd$y}(QBZ!I!Mq&)98~#mCGK0+QCk@Q>{1MTLctvoFdR_v5|)K3piE) zA}9xna(5mjVBl14h)zBrq11?}n1Kp2Jgg$sT_H&@6l6KG0R@syRA4XkR228p38DqK z`WFF#Iu=%}QqR~Y+^ECK*9H6KpirXN2y0E9-s*>#deai5{@#L_#KqNRX|AZrsRdkO zoau5e$kQEq^p?~k_wq_|4 zDNUp~8ls&tW8Gt^D%%W)uO~+s!F z!cJWQQ{RA9K9SJt#&P5U-%w@+N|`%;sL3w6JF|)7|H~(|25TyO540L1>+6W#&XaiO z>S%PPY-mBo_g>{l0y2d{2C;QrTTMA5SnaEe{5m8Dwlr>agSuArlnWv)yDN*0FUsegQ(^bl1^c?%=ddQVegjn48gFQ>_<1d z7oi$=KcMz%MM?>k04Dr9D)3gx!X@F5j&j|DBGCXwX-B(^^#3FlSy9xBZ)gG&fzp4+ zJYWQqU{@YqAHTQ1Dyj&9pvk7eUwZWHR@wSo9O$74kNygjyPLe_<8p@LNO9zq54bm>P9>R z@4z=;0KfKjE%v;PBtD;UofE*?8gPbt{*@&u9%UX(QZL@m?` zXm58P*quji6*6-Bh_Aa!$zq?PH>IZj>TVNkPYJZsOVJK%d?NCusk^4`Q+nF4{;@kV z?x>g4FzsU|!7qZn>*o;yA_!Ms$>P8;_R3d^xQ~v1ZBIy62tkmwd2;^>qREQt4T^*E z656KbY_BPl&GCrBcxWr+N1-_eMlHc$87E!CV|x}?X6dPotuHN*du_-NaWI@Y(CARL z8NFp~#3HALIsUc-G8-b3cG9q+k&_g#Sv-c=C*en65`dVUFm1%*zC9cH_}t$@CFy+! zcj@;MSdlAmr&*09Bq4DdXO+@jPV>Mq7-O_`W3CerwL8ps=E~hHLI*JMCe-XEk?ty0 zoTN}Ft)+3CZe>rN$sKg3DGqk`h5B)t{7qzXSXe~p6MOp@#z}1}Dv~OJY;Tik*ubKs z*q6?yFGQqhmXXf)k`6JqP@x*&Hi}@y;Q(61b54E6Tn8Cba&W(7{LM= zh`mZIxfe%9dzu!J{1U)}N_YS$+}7JS)<(lZgZf2+&z(p`0{qL3~`V@00G# zI<)F**E!V1^=DCZds(@33W0&)hGUk$DKb=%dy7t2=O&!sDR6}Lnp7!PSCIA|y=KGv zN3mCCoYk$%c+3L%c%~NB2jfNw0x*->+Dr~}n{sMGU^DJRWKy2awgj$%)ufELBMouo zjRRr5eWlL97(wOui}-r4oL&3s)2O@YG>iQ!7mL#t3FxLlLAhUgaPS(hljr!-ykxfK zwswDS0vmL81<+SdpMd^$NV{6(Q+Xdv6)L=_`nI7%_R`;)3=O_{Yt}DTlWOex>`6bh z&X!7l1eH~n#juIivV=AlWYqQ6s1p?2a)|?qO<@D^+)xkNz%~>{z*dZft)-@%jf(mE z&aklWrw(|t>wJ3f4RkRP@p0$%151l1Y!X}H%BO0n#@J}`fNeo#HMnUC%YfA=M4wMB zxKy6#h0_s7as+y2O6#ThkTt=ksO`BR8H6=x@1s#UuQq%O!lJzA(o`_ixx%+x)?bVp zu`PXbApySl`d_?|zl#1nMyOH=eF)(6Y?gu9@22ehd5BG;(x|5l%B0=p-`fT;i34JE zAB+_Q5iUBBjZhE564R!%kr5;IQUjxy8*Y9lIQB>4);6*fxHc56`{fq5_C$0 z*pUr6VECkw<5`n-%K_^62oM>@Vi59r_t8sfaMtP|S24gk-zE7knP##7B@+l=^SyeGw9dV4qTF-54$F zsvdMTbbO!1rs1A>m9y(=-vD-fdK&AF(p471g`3H?tL<< zkZq`NJMtLTjrF7$mq{ts!FwjJXP?aqhUr8@R5;49yUnjN^n51k)U^7#7sqgF?-4wJ zMiI6ln(E<(R=LYCT%$W}i=cWkbip>|R3+|SSHy|99jn@M_ z4fG#Tl}ctOB+~^A;i)nbRZ?a*mt;#qT*U2%3ou!|&J&e}+VDg%Y-DJXrwGmnqe+~z z5bi!>AW2FxFAc#yC2%m;-++U+T*5m(mj+xye#ZwH4H0Q++yP~*GnOdd*aqDypk7SF zsnQ9tX24h-?CX0(-K?hole;&e`5kRUTcA)jl5=*q4;)fI#j2G1T<6LTKgyClp9@w& z-O<wlM4Tj|!NSZAz%};PTvoLKHqhi*kjgb{nW7rbN1@e;{S;CT#ZHMYv)Oz#0eyPut`PRwK=`LMQ{YpVoq?Sd+HUA#9>RK9`ec zx3L=+=J^>FSg$K#D~qI4keJ_AwB0>C44Q^M5%iYe3{Xl#uRMK+W2T+%1LrQ7-|4M3 zM7b=$-U?vU+L)D&xe~Bv>kCpD^)-X$D5b;F`BbZR00X*CWA`eFuYW7VT7s7>?jB`Y zIBE^`59Fod&{o@)z+i~h-zs54oGbT}x;pi?cY^yLlQ~DjvfQ;nP>7*v6~J@ zpm|@Ih0N^bKOE1|C0?KkM5QXJ_HEKrNitHfyDvxrq9CftE7B(4JH!GDi)%T`SGCK? z;U5s2bY{%v^cW`P$?3XT@cn$LR$b8j5b0owwZAqwH={8T4?U5;=BoKcumxdTZLzk) zO}-fpbq0V|l?IqmKFiM}S#^)rl~tf^g|6A^0g}Tfod%I@YbE0eQFYG{c-y-gbuMk_ zFuz+5qr6qD7BD(vcH9M6w%z}^2ubk#xZQDyQ)N9;WO#S4-Bk90T{!Vjp{tM~Ccosi ztNLiT^c>;G;dVjfV!PgXu%itRyMFsuZS?yc)35xLa>Z99v+&{ka{kE9kg$P)fL8e7Dx{A#ile3QC}qGDA8qmtgR$vmDG z&Yr_dvPzhMYSDR0nHo$V4gr#3u9IlG!`-=qu{N4Em^Ee1h)7EXu->6)!g(8V%!AYm zVK^?!od6cPxqqVOP?L?)L3Ylgo0~Mk7+P-{IrL!OBLceL$X`2AB%$8j3GQce%^% zvphe%atjQcIuovgb&niPn)o&5D()9CM9p?#+b(cy97lw3bH9C+Jv7D+jodkpFgWr( zLm@KqT=9py*o=5LMvNAEyaC2$IBQWFtIHFp-klt@^rqR@M0l@XgO|=gc>>~Desyt; z#E#m{3~gH@c))^ax1m)n#mpS$VpIWo zy~M++ohYI^n_bKs(fzQPVMcI}uUyQt@uE?KlUoj>1ILkj`I50gh$I5K>#&X>Z*1x} zz%1n>oOx8F*7-QHbx5}k8Jb3l18G#1K=Y^w5?A2-hH$xWZiEoiWz$3I?dT{-A|wc$>y}I^K@2gS-|yV4?F4y-}`I_Gxh&eupIOaSKj8iRU2w zIrIDO`5`w7Hn=$rBdjrY&S5#oKKTK|N3#0OUP5z zn8{XNV9yGf1{ow-2roz3%p$2L^Ngxa>B5HJO~=gN5xRknyb?6328Z?OwF?NHy?wR- zws44519%SF(Cy-a`(L>>H8V`U3rV^Ol|GwT**gfua>xU%7BA|GJHAcriKJD#DwJfo zC}g+QmcYxr#LNZVBXsAg-!GBQK=))@vq}|mn@v{N)PWAQsH!GBdwdZd zMVUO{ngXPbb{C@?1>_aoZTqESAh~!S3JOE0Oo(^QXg3J|s@`NX^ykrg{r`A3Q{aw-#^Jr|_^d#z672Au?mH zsD4oqukOCg4<5^(&KFBK0Xv9xcfC)rgG%YRe9j)5IdBg1#=ME$Fo`LrtjWr&J~0Ph z63@#U_R8*fna-zzsGeznol@}LIWIl>?a&^wJox+=+Ic&g2U}Jt9!QTm)ChqyNFvo; z7V%mn)dk7GE7gpa0MX+fHDYEZO+}DZxRFCpNy_F|PM^Z~p%J`n8898e!jQV`RA}tW zk+147kjuKavT}g019(XIdp&;^aS(~JhOOMum$r)9V&2`hEWOt@Dv5<=e(-qLEk!b# zM$?p)ncOWY6&(d(y6R^k=N9?qJnjpg^++=2bbDb6Z{z*JG&#O^r#JK6G{8r;sk`5SRWYwfNP=>E?&# zK_q)YxIF;qgApI|SQ@Pf?aBehq1yOn|@HdX~Q z^pk(@w(8>2yJWUB6`<6@3@*m*Fh<4GSe-7WjoPie3Wn6DUVdZP7dWr-)w1FDVqHxQ zPk3^8opImU<04-SB8Kyg0aw4#K6N-kC771gM_%QiX=%{7_YW$fbQGD}|e? z@dT;_y;u&Lai}EEU10z-TM}>3#ljL})f|jJC)<6bsHj$?gGGrE9KBPmO1>G?8P#SBtMpy-n~0NQrdOH1FtZ;N?Vm!F~4UJti*s-G|^F{#GrKAaOX}K&dVd zu5F(_!G>!|=0vB5t1NReV@>g(MpEarDksPj4W$v4{7@BufE9q+*H=~wcb*Gbgkjnj zs!iyvKL5)%0rt$}#=S_bW7Da4Fvy0QZ>H+q!2{%h4mm(Mlep8rA z>8u?*BJ}uLhn|JMPK$0(;`chqaK|2(YF%XM=Ugt4Z%Rj8(pw+^A;3-coqqaP@B<`B zeuAp3S-61!H(Ot1B$my05hL*3;xA`m3BSS)epP>ibN1B3*V2Hd`euIYB6O$t&)d^kMaYA_y!abgF@nh&KjPe*cw z++NYDr##?_U*)T1EsWR>04|$(T6qDS+77cn4(lhWWcMzknqm~U z1w&}uUJ)*^B3qS0)acrWJb3GsA@n;X*%)F!dqIh1MP0d@G>UiTw49?D;HC_vTT(^9 z75WQgrE?d!yCbZF@m6~S@K)On=q24MCdEja8+*ft#f%z zqb^J{-d{QZ>Jg@zXE%Z4laJKi!w9aA?^8YIDC1fk-?TYXcQE#ORFm>i#%am^tcz!$ zC=0NRBnGRLsy3cBEIKK{Udqiw2+aV}?B(gI8Ym;r#(F=Ti<&ZmJLMu6JHToEd$<(2 znz4lF-e@d#r>U&kf>aulh6bz##f7BpBdSLh15`%EJf4-TNfUx_SFfiF;*AJkqr~(P z3*bDEHVx@^j`j$JaxJhgUc=t4=LN!0i7sFrTD9>86s0HyXv-t6VwUJC>EFUM%Z=Wy zwfag~z^t0l11nJxBz|iSdza50){f2a;ZDQ_TowM@HFqKz$;4pF6xBiyfF_*S?B&19 zT$Y>vlfi@R<6g4V_KC7dHa$AnyNiu$mOsbUDHyhUxLUpsuWE%bs3j=1gYdXXn?{nJ zNl@6*W7_qbMxXlE#C1azCLyT?umA6Ght`ia- zt*Gs*3Pn_pD)(x!1f<7U-L-MOJBJ#DG*INDNFwelv;{oTs(DE>mSOtBS|#v#e)GfG z6|7NB@8n!%K4jmK#_(4%Y{?W2CHoUyz*CBr-iyOlghz9vfZZ$4LlbosH&q&F*K^!W zC7RDXCkJJac~xZG9pm|*Gn{HEl~`_Q zv29vbTuiV>=l}+#Dmjz1W5U_}BjraL>*b(2&&tc~PKbT#SLB6m9!c7!T4{F|6}xIT z^fJrQ3U12;wbImcUDP`SUFJjohb(jy+y@t!BI2jJu4rp;TbZq;PSQxNGaoR3Z|GA~ z#7)RnW;tXiwH@fx&@DD|pvAUg!fK2LQFQ}?XwXO&8L@0i9C7J7p_f^bTYmGzRT>5F z9;4EtX6vX9`$^HEYTlfvWZFa+*D~SFuks_k@oZKJDlc6SQE{<9;Pf4Tm(Kj@4h#jy z{A%$_@GhfblF%oZOP}F?{xPEpaOWJHyQ56n+5E6^;!Z_g4Tj!k+rjCSL74(i@&mAi z%>}?ewhEc~_31i2Mb6wbe6fv2Fc>#;RGn1)J)R;Nl{g6L0#|MIo#T|SAdRnr zp*mh44vRaJQd;%KZmjh@kYt~Lr9?+y%BQ+}_1bK>)#t_@1n;uv)_mrJz51;&KOgst zp;Y$gaiq;V`Unt{h_y+2PLlu2bR4yhVI{P*%d|Y~=l1q-vuk@fvf`htj~dq6@Wu}hFrQjL>5L6YQjz14^H;b^J2?g-!2_EtMaBz)V-(VZlU9x^*t(fLU zMeHHIc~4Y#sVG}EKsUHtcdK4nycCHi+YBW-J%=2w-Mii=BOiyWa2=k*=hYXx_{{Dn z5KC2!<+u!iS^DagrvGW^9SK7oQoyEti#-kSfQ!~)Vff9461ds!hkJ7jf!R7&Q;*aF zL{H;zz~{{rdq-8t*B_;`&TbQ14XpH=%GV-dwP)cxXR|h*j@Gm0TiD!m)y=wbXF-$R zZjxgtzgLNCXp?(;E^-HX>k0?7Jo9Xn-0o3Ch-|(DdK3I%c@?bv#dMJ^3LGuBrA}@U za1q{B6a0_fzL}-Vzokfsec#znr)ieE0%gxbs#iXSFuOxVbD?+1-r9p&>4(zT| z?Qb%4L+vk_l#Bu zSU|R`ZRj;rO79+Hj4N>xLh{B2I_!hqGpA3P{q?{c<~FFsAGzUZFdS;=fv#WhpxO~W z9o?UNU*AnxKP;RQ{^~&m)5>^SRoO}QiuV~`ll79wm!C=zr=8~|z9}B0Y@T9p7%!=x z))mkmJVmRp`e)_;xd;e>7w@>}mme6NT*mwTmvvi4s=}T@AOIeY8 z;sAUyPXMRPE`e=;1}}htT$Mk7hKXH;{6PO!3S|%Mx9&;B1sFoFupr6vPV^DhQ%;K0 ztWI!H`MgBiq*d|zC#x1wxo$~LVQuOsBb7PX$$fX&4}E`7@LKYESpvjk614)hZ&HN$ zJi;Xl?qB=}kHKqSe*XoZ!Eb`8^uBCbSwA2I^LH86eE{t z$!Y8S6QLhV)n>sH8puz8Ud9VzyDdj7uGUe8S98%+Hkv1qgEi$NuGB0~?hTTkvGnx< zm5_NP!++fMWK8mUrB^B!IvodDA~orV z?$qP<)C`;{L?r2rG;;qIQxcxTukaGahB;w%$e;+%d|6j~HGUd1X#11A`qziQdY2wi z)wE55>-1)1Uxv5zSP_8zSHQvvg3E#061@mjnS649K38?l3i8U6F~x|VnI z25;Q4n*=g~=UHDV6~+5?AM{lZ^6KCD@aLl&AoaBYpXEkU{g=9X+uE%*)W#V*wfy|K z_NEvY0)I|eoDzawtUly9ur<%>%qcMj-yg_3ygqUNI>A?P31WkspgQPE6GT}5+k7?s zG|eb_|N69F(>b6@-zIr0ON%nHUKmg85!dL*bR!I7!3As27_E(_I8&HJPHi#0&Zh5D zv5i$c&d1ySIM%yO7??(c$exFKKmQK0fy~q(PR%+d>`p!3iGG0eVbZD64B+FusSS4a zBKEslo5RQS2I_FE(n`JB`7>KpYOeY-^J8ETFNgm(0(1O#7eYdmE4YW-h`9VJe$dsu zYC#$^sHPqkoRJeVi^7b%+oa9iQ8{|OB$rEicfC+E;CHuH1x9}25c8Ul( z?BdErPir(_4&U%DL^5J-py6S#CzV zb-0rOr12#yEs(8Q(c@T==%{Xbk1nWWK`EPU=YY9w4f4~E85*uq$4-YIUhtC82t|)C zT~D*)u8&&xxa-*^iDj!vx}%flQJ7lq^Ac`_>5$&Td8z9xJFCv2bL^~ZHXAzZfRF7; z9WVAep)+?%Jd`Y8WS31BlWOubBD>2Y?tKAz75wE6G@c~31EQzd8L5j5_brR9x8+DO z4fP1S#V*#55jsBg!8ba=-ks(>LI7-Od!FW{&klH)fDG4Q!x`xKRM**b&Ye^E6li!2 zJals$A-)N$xAh( zIOwq+jWL{p4!0dJntil($KL`Sw_m9Vf)NKB1q(CKl@p;Rb)93d|5W?_%KwD$I=b*b zSUF0~nVpYLzdT>~uW0ZeIruM)!baG%I)HEh9*zLxyslGps!sf9zhL46Gw>082xTWi z)vDd4hrNwIo!UjT9+C-Em1~W9m5kfTd~x3X9LzVFHc|9hII?seF2`g90EHed+m8-)7h7b0LpL1{~U(8ljHA}xOvp1+F5a@-z@*P1*ek8Q@Es*yLs7K zvOj8blfhbW!meA$)s7aemCo-1u_WAE+9NttvoZ;4^v%_z-PB~VNlnUMaCU1tvPU#- z6seL)!0VM|K z0WX$HwA%?qC)g&3aKX28omJ!ZU(HYaw7fgb_*~biYK~;iq$$^NHUl1PKZG#27`z{_ zgyrDp^;M?>j!UIr0ANpg3Oam*;IxP|~z5R!SPlHbbj`KHsD;lhac?U zdibXS#{s(mhXLCGSFOWwlQ&$-pycLZi85^-7xq)ri-Ve>qniD<2J|&!kKr^%Bm!tW zoOW_(Mb5k)=sUJNc*P{K$=%9>KT(?B!rmpzP4)tPgY6@3FPO4*I3s5+9!Jo=kB4!& zTYNNW87UlRjVM0WV-m62t?RFvusQ%b4Kl3g$NqIwQAxr0*}K_H93+q{Xto+x%O$69 zQ`L>VxRMK@?{&P&VjYVVm_JR_E~+I}5$fBMVUj+EUGMTLWlndVOJshQd;Z5&uK&{- zv>;NQUk|Dz)FRBqC3@&#(3^tFl0%_jEUi5Q*YYJr)Y<;3+ z)IRny+!?9xtliia8ldXiHr--uC)ZmZk~6}-lyQs-1JdB;PRA5KC+BjOB7NWE z&_OvcRxMMl;>yec88J+_i;)MloTgE<-3hxd%369@T=6vjfR&&?%sB)ryGTQ|t9yiM zR}6XAX4k{lSPPO`Lsa6DSRRhD=Zw4Jd2L`60cE#lu5Dv9ehUrNhYd+EGeO+UxR58O zC{v*1kFyB@kW;W1<<9KSMKH(ihXZIw)8H1}brN@sU_YP2x*aOu(})8>PDNCU+&3MZ zWwMP)#pPUk3E(DDqD>qcHgN&ML)QI+z-><1zWBV^rZA%*8COqk86S&3C`NZ4B5O&oNEs!&Ucp{X>5UZhT2m5gb|<6e^LPaDtm z)v03DBiA<+aE*G(_{c6Q(n4X!b{T)&>Ss@iwy*&nd<66t5gWhTvA-l+?P9+9@kyow zi|eS|_J0(_^2@cJQOlQbJoG>JqgySZ%-Soflg+G7T7e9m390@>X!{ec#I+U&w5I^%4|b2)7Yz}Usu_zJ03N%`n-eF{@glEb5$ zF2@{mDF3IGOYs#y=HlXpPj0*vQD7bR5a$nCGh1#3T319JQCs%}5g@(wY^yVtPzxrZ z(f7Dek4y3%JtPNKkA0SNeMsW-xRE;Pb=^hARH|$;m~2It>Pbd6kDS7kVYWgj!{jEd zK24ERLfMT&GFvhtaEC|suo{cZ2w@77j&NGxC9%a;ik%O1{2 z7Rv|0V>Q%t%@WDYdM;3MEKq%dm)kDLcS7UxufnE5(J`LE30PKsv z|AT=4tAv9nCGi6#?>Zsa$w)>c`^w|UG>?>En7*>4AwT0%pGON;EK%=PT9k|lf-b0FUDe9M@$C&7p~oh zp!6LQushhJ6me#bWkz#xQ%W({>8A)g$HOwExN#sdPdFu5+ZM=q%jcX~+5H-qN!H;? z>tA^Mj)FfI_Mn#sQz~;gzmrqHQOHEY4vnn%@)n(=Xk?;QovkV7$yGF*?Q0*j-a(H+ z0WF7)6FSx`dkZ?AX~Ty$);9I!baf>fDYVH%>mkXF1%7N~)~k5wX2R1nLQ7_U6r3+M z^-TtO$>`9`ZM)128R;k07&gA*N#)F}yEW%%d@0sG>u4!$$-rr8A0%2hZI zS;5{m17YckFNN3|T{g4qXh+*9>{=DQ20vHivnN0Qaxs6_*{G2Vhfx>?nD;*{x{_zp z+>H!K!@~Xgu52p^-(H#8n%MPjx(pD41HL)oTwqWYE@4K((i>kX_zp`2wx2-b`<`#K zKSF(Cd>i@WvOiE|eZ7`dO{sm|F*&sf^uW|)Jg~2?L7nxHPOWIGQSU16$XD)Bc$h+HB+aHL=@oj= z+*OW$d{3d)g z4<$7N>flC}`=mwuL6C()R_G@-x+?QFhouN!Ar3$=3w4?eav%oaMVjefwkIt`DX~GS zk|rQ3xe!-c&V!IJt7|}I;5T3RC%@6Cr^Al>`JSP9p34zNd8mYEXm+qRW9(~q-blny z772bbfbm?O^W`qxJm1TOBeEqmPj7?5v`Y>zbfj(J;W3l&y%|v^)#v$h?g~1h?Ao-- z$MwYcX9a8pSzRVvjS5B9$bm|D6V9GGnBpF#Y!_W{BdTQtMkxYqaKx@z(U@~oj1Te8 z*XXN*<&dE?RrA7#5G+C$rJJ(Z;1u#;6zU*+&GjFfm~JKbV32LH-?>#^Tq?I0LA%0* z=L<=#b`#IX0j(1|OZlom-%2LLe3@kYb+9_QcR|s>L!q-y$6>XgeyZxTf5utT-Xve| zb(DOYvr+PSznwdNb0!0}!vC7fwv5S#6y&?=+W0sFYEz6~?Omkc9M`FiE(TKNV&g9@ z%f>d!IMLMV7CXXyg}L$nhAF-eV==BE0BS~|locQhfB;B39smQR4jVt&0i*~95RC^w zPYUerf`AQTD9UEsg@H^vcPH*5!BQ0(+RQ%rYPldt?P4ogDcYk{#Vb~EN)sXr(PfTu zyA6@6k{JvqDEi(!B`H#7#>t}z6MQeX-7wLv6|Ge5v?glP@Q+Od(KN$jX4}#8$1Bpl z5$U@C|H^j7gG-8qnjK=uMt0mb+K@d=fn2px#1ie6*=5Y8qbb@}iIy3=D^;r6J0O>>$kvKrYK1}?yl@P;9Q6*aWbF1#LwcdzcX77eW{$J zVaK7p?MWTwPfG@cJw2_CbjAT)UCazr#)SxcRDWxYagr!E3q$2`QgLxU7TQf|O43@laWeNFv?kh(1LanJ!<%vb?%VY!m=2GA zv8)oNnLPpiKjGW*=N3M=A@j=L?sKb5K^o2=sFE-%Ie00{6OMi&5( z{!@TI_y5^e06@h5SC3MZ2BC4W}W>_&W&5~ZFiWiFA$yw?>?P*q!EC!4d|0<#_# zx}TdNw<^P|k+rXIRpH7)f0MKnO?jcbMzXa)v8@JfLH2*b>TA=#QmIS27D!d8s4I8= zu_jkf$odCt>6+ZIMFb&B0D}q!9S-Yq#aLxj%31pG)Wx+<>CzvD)eZJW`rna^miH*@ z_^IISKiA5h`5W^oi#*-UqI6F8Eph;Kx4fv&g`Yi$aTbqP^Pna=iVW-=KcZJbTg}6& z-!FW6KdB~BVS9D0{gL4rJ){TL8EPWCPEjT6B(=zFnq7_XBE!e&VKLi_=!D&N=Z6IA0 zm9lel`hmEEgGpj-nC3wV@9FJ-5og{TLmmVu#}3)YT7bk6qP-IT745B3UtR4@5T@RW ziOK+s*#~Cuj*^(&!Jn)(GBk}*wW-OtEw#)7!xG90Bi6aY!4IxWE-H?@Ahn+V>d`nW z8IJ5*&*0Q(JcB83l`qc+!9d25VB0787M5~oboEw$>8E|Yu?RpxFC~i2;f;y51T49O zS=i~?o-}>6+0CB`Y`|1#wzi}prn#_7}NC8P2 zAlhnQ`=<+mU&iWv4`-lbt$3GTJ0v*(^EU)>e@lXz2l*&qSg@5A|k70lH! zW*op$*Jz$TKpJCGmPF0wVD?t>ni&lvyh~P%E}3uV9dV}ahM)<}q5zNN_o>|~P7BWY zCeTFo8>et90<(56THy2_@&))9YvqKrAYEsRa)eD&2>TfdgqlQ5;RA~yS^9^(Ze>;S zHE8V#8V##Jpw-R4m^Q>kMZ=LYEf{e0+b^stLsP>5yUQq=ZO7{ZwyOavN^ypA^4pH@ zE}#&V_+?LX{mIi^5SU>!PLkV8~{FkLo-|g2y?Qx?{BLr z`KOvrL^)J6s6x~R>4~)#X zMyQXu$WN)0_-g$0u&UfWntfmc>(GGLZFs3f zAgNTSsRY2OG}tLuC>Jr#^QP&7D?7o}Do|Dn5Z(un=NaY&=XpWfEdkvw0bVb``W~>} z2QU^B5Ee6-=UMgzcYeYC+MwT0Xrw^^3@Al_VPT+v$#RggBq$70)&|*1;bl4Sm_$Sj zX0i-VG=ps8V9ryJ(1`48Q$Tp97eK7}ndGB@F=u))8*nW8t&LOwmH~7=ZcadnK#~bS2nK-Q86Hp@L=YEH z$N<2gBjjd=D8)FcIKNnvtu6Ck%p-BKe4#Gq@#SN`=JT0Xn`B^5vTa&68RzpI!ak$i zyY3qa8>g~Di4xKLPzG{Ob zV-sd<4#H>+DACQswvpP(H39GHZtkxB23HcZm1g|0dH{^_wtVX`?GvPa4lPp7Sr*&9$vfSq;+VS7I#iexz2{>Hk`@MeX23i`#?KoO9?;eHM8Xd z7?&hv%-Ta3qqyFAm=+UngQhM10;Eab0&5R>b*%_4qr>MSM2u)wsON>m*5I#Og~Wkh z8H*6g`de1II|B=mK&BRP>GMY{Q|@57cZ)?fF!A^ds2hPRIUsa(STL&RFfdc=yr5*& z>5vwErVwWH9Kbs;+isFWfds5?$0#M6h_Qf7M!KKh^jpCh{+@^^d# zZYAI6ddu;>qDw8-KHb&rtROp-8cz>R1rIYY@l9WZ52c*FiIm$C9}zMSO?^a#ag#}F z@xzw|5F1tOucMSe{@&9ww)rQ83}n~YyFLiKb16Yk{VHGabrK&Fx@VR<)m~$tohJU( zxasf7Yedq{jh9`P}+>#=`4 zCM>7Am~m6T4s1UUx{t=OZx+NdYDDhnlsVcnpHgPo(@*2OlO9Xw!6nru54;UDtHNEI zCa2nAd&t)Z|Bi_3-aJ#g$bjb}Y+Es(Uh+2@8@josQ$(&^&>AK){jTNbNx#&usnPzV z)XAH_=trZ)%GvLag=7DT0K01`6X4MnBI|M@^Olpboc!tExU}9bs^1YB$6{q#J!WK< z=P|zRK&NdzH!YUOC;Jg|h{--NTBGGJG(lAVqTA8}=pjHg67Ug`1eJ^wa%?0DNhK*u z&)!;GY$FpJe=$#v6wWX?b3D!9PSUj%e;gB&_J8BVW2;*YhDuP^x@4NB(RNRk9kV85 zLS5SMAp%r4p6?vs}s=7-W?cu&WXf zbT*C3s#jVSVilu~e~y9ojAHdG*&F~#P$Nbb;gXSoxM1T&q^Fgg;kM?!4c^VY$E>55 zzvHe2rdm@RjX)|Puy!)DphlwKmeQtFlt_Unh!w7d| z1+^J~8!*YB?1X82OP&TLW`vUdoO({Zg1)&*W~-;Qh|W^bUP=??i5rjPpp=VTK8)E1 z#0Mb&K?EQGgOm^ib1GGkDpj(QHnxmxTR_%zOj`hfKo|%JKvZA|24xr+gkoy|2HbP4 z34s_fAf_XwqlK$%qNNBj7|x53fY-9H>TjFg2Kp#x)t0l+#p0O%+HrAJnXgl;AY5lsR@7TFJisV*2I zJ8ytygBTna7mAP%LCKf&;@A%Y=Zi7I@k{84A)p9B6va`_7{ozq2tln`4ck(JOjW{6 zRR*m#QLUjb<~C7X*{54Ug@yIdFx2Q~n}e=A@xC$taX;#w)b`oHIVc80H4d7bY128W zRxzzo;pMK~_NvtfCM%)LD#Og01=X5{Et_oF(498Fu|H~!q{VR)cR)#CKp+T~_DM>L zNht}>2ci?9OcBFOi3O?>4Yqcw-WIZG(pW^@T}19Zh*dEmLJy@7CH0f7w&dl78z0

e0Vtxj!gu5E0!#@$Ma8+HkhD;stN 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

c# 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 in e?pn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,C=(e,t,n)=>(hn(e,"symbol"!=typeof t?t+"":t,n),n),PetiteVue=function(e){"use strict";function t(e){if(a(e)){const n={};for(let s=0;s{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function i(e){let t="";if(d(e))t=e;else if(a(e))for(let n=0;no(e,t)))}const l=Object.assign,f=Object.prototype.hasOwnProperty,u=(e,t)=>f.call(e,t),a=Array.isArray,p=e=>"[object Map]"===y(e),h=e=>e instanceof Date,d=e=>"string"==typeof e,m=e=>"symbol"==typeof e,g=e=>null!==e&&"object"==typeof e,v=Object.prototype.toString,y=e=>v.call(e),b=e=>d(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,x=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},_=/-(\w)/g,w=x((e=>e.replace(_,((e,t)=>t?t.toUpperCase():"")))),$=/\B([A-Z])/g,k=x((e=>e.replace($,"-$1").toLowerCase())),O=e=>{const t=parseFloat(e);return isNaN(t)?e:t};function S(e,t){(t=t||undefined)&&t.active&&t.effects.push(e)}const E=e=>{const t=new Set(e);return t.w=0,t.n=0,t},j=e=>(e.w&N)>0,A=e=>(e.n&N)>0,P=new WeakMap;let R=0,N=1;const T=[];let M;const B=Symbol(""),L=Symbol("");class W{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],S(this,n)}run(){if(!this.active)return this.fn();if(!T.includes(this))try{return T.push(M=this),F.push(V),V=!0,N=1<<++R,R<=30?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s0?T[e-1]:void 0}}stop(){this.active&&(I(this),this.onStop&&this.onStop(),this.active=!1)}}function I(e){const{deps:t}=e;if(t.length){for(let n=0;n{("length"===t||t>=s)&&c.push(e)}));else switch(void 0!==n&&c.push(o.get(n)),t){case"add":a(e)?b(n)&&c.push(o.get("length")):(c.push(o.get(B)),p(e)&&c.push(o.get(L)));break;case"delete":a(e)||(c.push(o.get(B)),p(e)&&c.push(o.get(L)));break;case"set":p(e)&&c.push(o.get(B))}if(1===c.length)c[0]&&Z(c[0]);else{const e=[];for(const t of c)t&&e.push(...t);Z(E(e))}}function Z(e,t){for(const n of a(e)?e:[...e])(n!==M||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const q=function(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[e.toLowerCase()]:e=>!!n[e]}("__proto__,__v_isRef,__isVue"),D=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(m)),G=X(),U=X(!0),Q=function(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=le(this);for(let t=0,r=this.length;t{e[t]=function(...e){F.push(V),V=!1;const n=le(this)[t].apply(this,e);return z(),n}})),e}();function X(e=!1,t=!1){return function(n,s,r){if("__v_isReactive"===s)return!e;if("__v_isReadonly"===s)return e;if("__v_raw"===s&&r===(e?t?re:se:t?ne:te).get(n))return n;const i=a(n);if(!e&&i&&u(Q,s))return Reflect.get(Q,s,r);const o=Reflect.get(n,s,r);return(m(s)?D.has(s):q(s))||(e||H(n,0,s),t)?o:fe(o)?i&&b(s)?o:o.value:g(o)?e?function(e){return ce(e,!0,ee,null,se)}(o):oe(o):o}}const Y={get:G,set:function(e=!1){return function(t,n,s,r){let i=t[n];if(!e&&!function(e){return!(!e||!e.__v_isReadonly)}(s)&&(s=le(s),i=le(i),!a(t)&&fe(i)&&!fe(s)))return i.value=s,!0;const o=a(t)&&b(n)?Number(n)!Object.is(e,t))(s,i)&&J(t,"set",n,s):J(t,"add",n,s)),c}}(),deleteProperty:function(e,t){const n=u(e,t);e[t];const s=Reflect.deleteProperty(e,t);return s&&n&&J(e,"delete",t,void 0),s},has:function(e,t){const n=Reflect.has(e,t);return(!m(t)||!D.has(t))&&H(e,0,t),n},ownKeys:function(e){return H(e,0,a(e)?"length":B),Reflect.ownKeys(e)}},ee={get:U,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},te=new WeakMap,ne=new WeakMap,se=new WeakMap,re=new WeakMap;function ie(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>y(e).slice(8,-1))(e))}function oe(e){return e&&e.__v_isReadonly?e:ce(e,!1,Y,null,te)}function ce(e,t,n,s,r){if(!g(e)||e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=ie(e);if(0===o)return e;const c=new Proxy(e,2===o?s:n);return r.set(e,c),c}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function fe(e){return Boolean(e&&!0===e.__v_isRef)}Promise.resolve();let ue=!1;const ae=[],pe=Promise.resolve(),he=e=>pe.then(e),de=e=>{ae.includes(e)||ae.push(e),ue||(ue=!0,he(me))},me=()=>{for(const e of ae)e();ae.length=0,ue=!1},ge=/^(spellcheck|draggable|form|list|type)$/,ve=({el:e,get:t,effect:n,arg:s,modifiers:r})=>{let i;"class"===s&&(e._class=e.className),n((()=>{let n=t();if(s)(null==r?void 0:r.camel)&&(s=w(s)),ye(e,s,n,i);else{for(const t in n)ye(e,t,n[t],i&&i[t]);for(const t in i)(!n||!(t in n))&&ye(e,t,null)}i=n}))},ye=(e,n,s,r)=>{if("class"===n)e.setAttribute("class",i(e._class?[e._class,s]:s)||"");else if("style"===n){s=t(s);const{style:n}=e;if(s)if(d(s))s!==r&&(n.cssText=s);else{for(const e in s)xe(n,e,s[e]);if(r&&!d(r))for(const e in r)null==s[e]&&xe(n,e,"")}else e.removeAttribute("style")}else e instanceof SVGElement||!(n in e)||ge.test(n)?"true-value"===n?e._trueValue=s:"false-value"===n?e._falseValue=s:null!=s?e.setAttribute(n,s):e.removeAttribute(n):(e[n]=s,"value"===n&&(e._value=s))},be=/\s*!important$/,xe=(e,t,n)=>{a(n)?n.forEach((n=>xe(e,t,n))):t.startsWith("--")?e.setProperty(t,n):be.test(n)?e.setProperty(k(t),n.replace(be,""),"important"):e[t]=n},_e=(e,t)=>{const n=e.getAttribute(t);return null!=n&&e.removeAttribute(t),n},we=(e,t,n,s)=>{e.addEventListener(t,n,s)},$e=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ke=["ctrl","shift","alt","meta"],Oe={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ke.some((n=>e[`${n}Key`]&&!t[n]))},Se=({el:e,get:t,exp:n,arg:s,modifiers:r})=>{if(!s)return;let i=$e.test(n)?t(`(e => ${n}(e))`):t(`($event => { ${n} })`);if("vue:mounted"!==s){if("vue:unmounted"===s)return()=>i();if(r){"click"===s&&(r.right&&(s="contextmenu"),r.middle&&(s="mouseup"));const e=i;i=t=>{if(!("key"in t)||k(t.key)in r){for(const e in r){const n=Oe[e];if(n&&n(t,r))return}return e(t)}}}we(e,s,i,r)}else he(i)},Ee=({el:e,get:t,effect:n})=>{n((()=>{e.textContent=Ce(t())}))},Ce=e=>null==e?"":g(e)?JSON.stringify(e,null,2):String(e),je=e=>"_value"in e?e._value:e.value,Ae=(e,t)=>{const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t},Pe=e=>{e.target.composing=!0},Re=e=>{const t=e.target;t.composing&&(t.composing=!1,Ne(t,"input"))},Ne=(e,t)=>{const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)},Te=Object.create(null),Me=(e,t,n)=>Be(e,`return(${t})`,n),Be=(e,t,n)=>{const s=Te[t]||(Te[t]=Le(t));try{return s(e,n)}catch(r){console.error(r)}},Le=e=>{try{return new Function("$data","$el",`with($data){${e}}`)}catch(t){return console.error(`${t.message} in expression: ${e}`),()=>{}}},We={bind:ve,on:Se,show:({el:e,get:t,effect:n})=>{const s=e.style.display;n((()=>{e.style.display=t()?s:"none"}))},text:Ee,html:({el:e,get:t,effect:n})=>{n((()=>{e.innerHTML=t()}))},model:({el:e,exp:t,get:n,effect:s,modifiers:r})=>{const i=e.type,l=n(`(val) => { ${t} = val }`),{trim:f,number:u="number"===i}=r||{};if("SELECT"===e.tagName){const t=e;we(e,"change",(()=>{const e=Array.prototype.filter.call(t.options,(e=>e.selected)).map((e=>u?O(je(e)):je(e)));l(t.multiple?e:e[0])})),s((()=>{const e=n(),s=t.multiple;for(let n=0,r=t.options.length;n-1:r.selected=e.has(i);else if(o(je(r),e))return void(t.selectedIndex!==n&&(t.selectedIndex=n))}!s&&-1!==t.selectedIndex&&(t.selectedIndex=-1)}))}else if("checkbox"===i){let t;we(e,"change",(()=>{const t=n(),s=e.checked;if(a(t)){const n=je(e),r=c(t,n),i=-1!==r;if(s&&!i)l(t.concat(n));else if(!s&&i){const e=[...t];e.splice(r,1),l(e)}}else l(Ae(e,s))})),s((()=>{const s=n();a(s)?e.checked=c(s,je(e))>-1:s!==t&&(e.checked=o(s,Ae(e,!0))),t=s}))}else if("radio"===i){let t;we(e,"change",(()=>{l(je(e))})),s((()=>{const s=n();s!==t&&(e.checked=o(s,je(e)))}))}else{const t=e=>f?e.trim():u?O(e):e;we(e,"compositionstart",Pe),we(e,"compositionend",Re),we(e,(null==r?void 0:r.lazy)?"change":"input",(()=>{e.composing||l(t(e.value))})),f&&we(e,"change",(()=>{e.value=e.value.trim()})),s((()=>{if(e.composing)return;const s=e.value,r=n();document.activeElement===e&&t(s)===r||s!==r&&(e.value=r)}))}},effect:({el:e,ctx:t,exp:n,effect:s})=>{he((()=>s((()=>Be(t.scope,n,e)))))}},Ie=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Ke=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ve=/^\(|\)$/g,Fe=/^[{[]\s*((?:[\w_$]+\s*,?\s*)+)[\]}]$/,ze=(e,t,n)=>{const s=t.match(Ie);if(!s)return;const r=e.nextSibling,i=e.parentElement,o=new Text("");i.insertBefore(o,e),i.removeChild(e);const c=s[2].trim();let l,f,u,p,h=s[1].trim().replace(Ve,"").trim(),d=!1,m="key",v=e.getAttribute(m)||e.getAttribute(m=":key")||e.getAttribute(m="v-bind:key");v&&(e.removeAttribute(m),"key"===m&&(v=JSON.stringify(v))),(p=h.match(Ke))&&(h=h.replace(Ke,"").trim(),f=p[1].trim(),p[2]&&(u=p[2].trim())),(p=h.match(Fe))&&(l=p[1].split(",").map((e=>e.trim())),d="["===h[0]);let y,b,x,_=!1;const w=(e,t,s,r)=>{const i={};l?l.forEach(((e,n)=>i[e]=t[d?n:e])):i[h]=t,r?(f&&(i[f]=r),u&&(i[u]=s)):f&&(i[f]=s);const o=et(n,i),c=v?Me(o.scope,v):s;return e.set(c,s),o.key=c,o},$=(t,n)=>{const s=new nt(e,t);return s.key=t.key,s.insert(i,n),s};return n.effect((()=>{const e=Me(n.scope,c),t=x;if([b,x]=(e=>{const t=new Map,n=[];if(a(e))for(let s=0;s$(e,o))),_=!0})),r},He=({el:e,ctx:{scope:{$refs:t}},get:n,effect:s})=>{let r;return s((()=>{const s=n();t[s]=e,r&&s!==r&&delete t[r],r=s})),()=>{r&&delete t[r]}},Je=/^(?:v-|:|@)/,Ze=/\.([\w-]+)/g;let qe=!1;const De=(e,t)=>{const n=e.nodeType;if(1===n){const n=e;if(n.hasAttribute("v-pre"))return;let s;if(_e(n,"v-cloak"),s=_e(n,"v-if"))return((e,t,n)=>{const s=e.parentElement,r=new Comment("v-if");s.insertBefore(r,e);const i=[{exp:t,el:e}];let o,c;for(;(o=e.nextElementSibling)&&(c=null,""===_e(o,"v-else")||(c=_e(o,"v-else-if")));)s.removeChild(o),i.push({exp:c,el:o});const l=e.nextSibling;s.removeChild(e);let f,u=-1;const a=()=>{f&&(s.insertBefore(r,f.el),f.remove(),f=void 0)};return n.effect((()=>{for(let e=0;e{let n=e.firstChild;for(;n;)n=De(n,t)||n.nextSibling},Ue=(e,t,n,s)=>{let r,i,o;if(":"===(t=t.replace(Ze,((e,t)=>((o||(o={}))[t]=!0,""))))[0])r=ve,i=t.slice(1);else if("@"===t[0])r=Se,i=t.slice(1);else{const e=t.indexOf(":"),n=e>0?t.slice(2,e):t.slice(2);r=We[n]||s.dirs[n],i=e>0?t.slice(e+1):void 0}r&&(r===ve&&"ref"===i&&(r=He),Qe(e,r,n,s,i,o),e.removeAttribute(t))},Qe=(e,t,n,s,r,i)=>{const o=t({el:e,get:(t=n)=>Me(s.scope,t,e),effect:s.effect,ctx:s,exp:n,arg:r,modifiers:i});o&&s.cleanups.push(o)},Xe=(e,t)=>{if("#"!==t[0])e.innerHTML=t;else{const n=document.querySelector(t);e.appendChild(n.content.cloneNode(!0))}},Ye=e=>{const t={delimiters:["{{","}}"],delimitersRE:/\{\{([^]+?)\}\}/g,...e,scope:e?e.scope:oe({}),dirs:e?e.dirs:{},effects:[],blocks:[],cleanups:[],effect:e=>{if(qe)return de(e),e;const n=function(e,t){e.effect&&(e=e.effect.fn);const n=new W(e);t&&(l(n,t),t.scope&&S(n,t.scope)),(!t||!t.lazy)&&n.run();const s=n.run.bind(n);return s.effect=n,s}(e,{scheduler:()=>de(n)});return t.effects.push(n),n}};return t},et=(e,t={})=>{const n=e.scope,s=Object.create(n);Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)),s.$refs=Object.create(n.$refs);const r=oe(new Proxy(s,{set:(e,t,s,i)=>i!==r||e.hasOwnProperty(t)?Reflect.set(e,t,s,i):Reflect.set(n,t,s)}));return tt(r),{...e,scope:r}},tt=e=>{for(const t of Object.keys(e))"function"==typeof e[t]&&(e[t]=e[t].bind(e))};class nt{constructor(e,t,n=!1){C(this,"template"),C(this,"ctx"),C(this,"key"),C(this,"parentCtx"),C(this,"isFragment"),C(this,"start"),C(this,"end"),this.isFragment=e instanceof HTMLTemplateElement,n?this.template=e:this.isFragment?this.template=e.content.cloneNode(!0):this.template=e.cloneNode(!0),n?this.ctx=t:(this.parentCtx=t,t.blocks.push(this),this.ctx=Ye(t)),De(this.template,this.ctx)}get el(){return this.start||this.template}insert(e,t=null){if(this.isFragment)if(this.start){let n,s=this.start;for(;s&&(n=s.nextSibling,e.insertBefore(s,t),s!==this.end);)s=n}else this.start=new Text(""),this.end=new Text(""),e.insertBefore(this.end,t),e.insertBefore(this.start,this.end),e.insertBefore(this.template,this.end);else e.insertBefore(this.template,t)}remove(){if(this.parentCtx&&((e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)})(this.parentCtx.blocks,this),this.start){const e=this.start.parentNode;let t,n=this.start;for(;n&&(t=n.nextSibling,e.removeChild(n),n!==this.end);)n=t}else this.template.parentNode.removeChild(this.template);this.teardown()}teardown(){this.ctx.blocks.forEach((e=>{e.teardown()})),this.ctx.effects.forEach(K),this.ctx.cleanups.forEach((e=>e()))}}const st=e=>e.replace(/[-.*+?^${}()|[\]\/\\]/g,"\\$&"),rt=e=>{const t=Ye();if(e&&(t.scope=oe(e),tt(t.scope),e.$delimiters)){const[n,s]=t.delimiters=e.$delimiters;t.delimitersRE=new RegExp(st(n)+"([^]+?)"+st(s),"g")}let n;return t.scope.$s=Ce,t.scope.$nextTick=he,t.scope.$refs=Object.create(null),{directive(e,n){return n?(t.dirs[e]=n,this):t.dirs[e]},mount(e){if("string"==typeof e&&!(e=document.querySelector(e)))return;let s;return s=(e=e||document.documentElement).hasAttribute("v-scope")?[e]:[...e.querySelectorAll("[v-scope]")].filter((e=>!e.matches("[v-scope] [v-scope]"))),s.length||(s=[e]),n=s.map((e=>new nt(e,t,!0))),this},unmount(){n.forEach((e=>e.teardown()))}}},it=document.currentScript;return it&&it.hasAttribute("init")&&rt().mount(),e.createApp=rt,e.nextTick=he,e.reactive=oe,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module",e}({}); diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 00000000..bf36d744 --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1,108 @@ + +/** + * We add extra br tags to the autodoc output, so each parameter is shown on + * its own line. + */ +function setupAutodocPy() { + const paramElements = document.querySelectorAll('.py .sig-param') + + Array(...paramElements).forEach((element) => { + let brElement = document.createElement('br') + element.parentNode.insertBefore(brElement, element) + }) + + const lastParamElements = document.querySelectorAll('.py em.sig-param:last-of-type') + + Array(...lastParamElements).forEach((element) => { + let brElement = document.createElement('br') + element.after(brElement) + }) +} + +function setupAutodocCpp() { + const highlightableElements = document.querySelectorAll(".c dt.sig-object, .cpp dt.sig-object") + + Array(...highlightableElements).forEach((element) => { + element.classList.add("highlight"); + }) + + const documentables = document.querySelectorAll("dt.sig-object.c,dt.sig-object.cpp"); + + Array(...documentables).forEach((element) => { + element.classList.add("highlight"); + + var parens = element.querySelectorAll(".sig-paren"); + var commas = Array(...element.childNodes).filter(e => e.textContent == ", ") + + if (parens.length != 2) return; + + commas.forEach(c => { + if (c.compareDocumentPosition(parens[0]) == Node.DOCUMENT_POSITION_PRECEDING && + c.compareDocumentPosition(parens[1]) == Node.DOCUMENT_POSITION_FOLLOWING + ) { + let brElement = document.createElement('br') + let spanElement = document.createElement('span') + spanElement.className = "sig-indent" + c.after(brElement) + brElement.after(spanElement) + } + }); + + if (parens[0].nextSibling != parens[1]) { + // not an empty argument list + let brElement = document.createElement('br') + let spanElement = document.createElement('span') + spanElement.className = "sig-indent" + parens[0].after(brElement) + brElement.after(spanElement) + let brElement1 = document.createElement('br') + parens[1].parentNode.insertBefore(brElement1, parens[1]); + } + }) +} + +function setupSearchSidebar() { + const searchInput = document.querySelector('form.search input[type=text]') + if (searchInput) { + searchInput.placeholder = 'Search...' + } + + const searchButton = document.querySelector('form.search input[type=submit]') + if (searchButton) { + searchButton.value = 'Search' + } +} + +function setupSidebarToggle() { + const sidebar = document.querySelector('.sphinxsidebar') + document.querySelector('#toggle_sidebar a').onclick = (event) => { + console.log("Toggling sidebar") + event.preventDefault() + sidebar.style.display = window.getComputedStyle(sidebar, null).display == 'none' ? 'block' : 'none' + } +} + +function setupRightSidebarToggle() { + const sidebar = document.querySelector('#right_sidebar') + + const links = document.querySelectorAll('a.toggle_right_sidebar') + + Array(...links).forEach((element) => { + element.onclick = (event) => { + console.log("Toggling right sidebar") + event.preventDefault() + sidebar.style.display = window.getComputedStyle(sidebar, null).display == 'none' ? 'block' : 'none' + } + }) +} + + +document.addEventListener("DOMContentLoaded", function() { + console.log("custom theme loaded") + + setupAutodocPy() + setupAutodocCpp() + setupSearchSidebar() + setupSidebarToggle() + setupRightSidebarToggle() +}) diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..c7fe6c6f --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..84ab3030 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..2c774d17 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,632 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/api/api.html b/api/api.html new file mode 100644 index 00000000..24055218 --- /dev/null +++ b/api/api.html @@ -0,0 +1,1956 @@ + + + + + + + + API reference — Port 1.0.0 documentation + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

API reference

+
+

Props

+
+
+class port.api.props.PropsUIFooter
+

Page footer.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIHeader(title: Translatable)
+

Page header.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPageDonation(platform: str, header: PropsUIHeader, body: PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput | PropsUIPromptFileInputMultiple | PropsUIPromptConfirm | PropsUIPromptQuestionnaire, footer: PropsUIFooter | None = None)
+

A multi-purpose page that gets shown to the user.

+
+
+platform
+

The platform name the user is currently in the process of donating data from.

+
+
Type:
+

str

+
+
+
+ +
+
+header
+

Page header.

+
+
Type:
+

PropsUIHeader

+
+
+
+ +
+
+body (PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput |
+
+

PropsUIPromptFileInputMultiple | PropsUIPromptConfirm | PropsUIPromptQuestionnaire):

+
+

Main body of the page.

+
+ +
+
+footer
+

Optional page footer.

+
+
Type:
+

Optional[PropsUIFooter]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPageEnd
+

An ending page to show the user they are done.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConfirm(text: Translatable, ok: Translatable, cancel: Translatable)
+

Retry submitting a file page.

+

Prompt the user if they want to submit a new file. +This can be used in case a file could not be processed.

+
+
+text
+

Message to display.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+ok
+

Message to display if the user wants to try again.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+cancel
+

Message to display if the user wants to continue regardless.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConsentForm(id: str, tables: list[PropsUIPromptConsentFormTable], meta_tables: list[PropsUIPromptConsentFormTable], description: Translatable | None = None, donate_question: Translatable | None = None, donate_button: Translatable | None = None)
+

Tables to be shown to the participant prior to donation.

+
+
+id
+

will be used as part of the filename when the data is stored

+
+
Type:
+

str

+
+
+
+ +
+
+tables
+

A list of tables.

+
+
Type:
+

list[PropsUIPromptConsentFormTable]

+
+
+
+ +
+
+meta_tables
+

A list of optional tables, for example for logging data.

+
+
Type:
+

list[PropsUIPromptConsentFormTable]

+
+
+
+ +
+
+description
+

Optional description of the consent form.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+donate_question
+

Optional donation question.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+donate_button
+

Optional text for the donate button.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+
+translate_meta_tables()
+

Translate the meta tables to a list of dictionaries.

+
+
Returns:
+

A list of dictionaries representing the meta tables.

+
+
Return type:
+

list

+
+
+
+ +
+
+translate_tables()
+

Translate the tables to a list of dictionaries.

+
+
Returns:
+

A list of dictionaries representing the tables.

+
+
Return type:
+

list

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConsentFormTable(id: str, title: Translatable, data_frame: pandas.DataFrame | Dict[str, Dict[str, Any]], description: Translatable | None = None, visualizations: list | None = None, folded: bool | None = False, delete_option: bool | None = True)
+

Table to be shown to the participant prior to donation.

+
+
+id
+

A unique string to identify the table after donation.

+
+
Type:
+

str

+
+
+
+ +
+
+title
+

Title of the table.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+data_frame
+

Table to be shown can be a pandas data frame or a dictionary

+
+
Type:
+

pd.DataFrame | Dict[str, Dict[str, Any]]

+
+
+
+ +
+
+description
+

Optional description of the table.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+visualizations
+

Optional visualizations to be shown.

+
+
Type:
+

Optional[list]

+
+
+
+ +
+
+folded
+

Whether the table should be initially folded.

+
+
Type:
+

Optional[bool]

+
+
+
+ +
+
+delete_option
+

Whether to show a delete option for the table.

+
+
Type:
+

Optional[bool]

+
+
+
+ +

Examples

+

# Using a pandas DataFrame for data_frame +data_frame_df = pd.DataFrame([

+
+

{“column1”: 1, “column2”: 4}, +{“column1”: 2, “column2”: 5}, +{“column1”: 3, “column2”: 6}

+
+

])

+
+
example1 = PropsUIPromptConsentFormTable(

id=”example1”, +title=Translatable(“Table as DataFrame”), +data_frame=data_frame_df,

+
+
+

)

+

# Using a dictionary for data_frame +data_frame_dict = {

+
+

“column1”: {“0”: 1, “1”: 4}, +“column2”: {“0”: 2, “1”: 5}, +“column3”: {“0”: 3, “1”: 6}

+
+

} +example2 = PropsUIPromptConsentFormTable(

+
+

id=”example2”, +title=Translatable(“Table as Dictionary”), +data_frame=data_frame_dict,

+
+

)

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptFileInput(description: Translatable, extensions: str)
+

Prompt the user to submit a file.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+extensions
+

Accepted mime types, example: “application/zip, text/plain”.

+
+
Type:
+

str

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptFileInputMultiple(description: Translatable, extensions: str)
+

Prompt the user to submit multiple files.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+extensions
+

Accepted mime types, example: “application/zip, text/plain”.

+
+
Type:
+

str

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptProgress(description: Translatable, message: str, percentage: int | None = None)
+

Prompt the user information during the extraction.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+message
+

Can be used to show extraction progress.

+
+
Type:
+

str

+
+
+
+ +
+
+percentage
+

Optional percentage of progress.

+
+
Type:
+

Optional[int]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptQuestionnaire(description: Translatable, questions: list[PropsUIQuestionMultipleChoice | PropsUIQuestionMultipleChoiceCheckbox | PropsUIQuestionOpen])
+

Questionnaire containing multiple questions.

+
+
+description
+

Description of the questionnaire.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+questions
+

List of questions in the questionnaire.

+
+
Type:
+

list[PropsUIQuestionMultipleChoice | PropsUIQuestionMultipleChoiceCheckbox | PropsUIQuestionOpen]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptRadioInput(title: Translatable, description: Translatable, items: list[RadioItem])
+

Radio group.

+

This radio group can be used to get a multiple choice answer from a user.

+
+
+title
+

Title of the radio group.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+description
+

Short description of the radio group.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+items
+

A list of radio buttons.

+
+
Type:
+

list[RadioItem]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionMultipleChoice(id: int, question: Translatable, choices: list[Translatable])
+

Multiple choice question with radio buttons.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+choices
+

List of choices.

+
+
Type:
+

list[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionMultipleChoiceCheckbox(id: int, question: Translatable, choices: list[Translatable])
+

Multiple choice question with checkboxes.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+choices
+

List of choices.

+
+
Type:
+

list[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionOpen(id: int, question: Translatable)
+

Open-ended question.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.RadioItem
+

Radio button.

+
+
+id
+

ID of radio button.

+
+
Type:
+

int

+
+
+
+ +
+
+value
+

Text to be displayed.

+
+
Type:
+

str

+
+
+
+ +
+ +
+
+class port.api.props.Translatable(translations: Translations)
+

Wrapper class for Translations.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.Translations
+

Typed dict containing text that is displayed in a specific language.

+
+ +
+
+

Extraction helpers

+

This module contains helper functions that can be used during the data extraction process

+
+
+exception port.helpers.extraction_helpers.FileNotFoundInZipError
+

The File you are looking for is not present in a zipfile

+
+ +
+
+port.helpers.extraction_helpers.dict_denester(inp: dict[Any, Any] | list[Any], new: dict[Any, Any] | None = None, name: str = '', run_first: bool = True) dict[Any, Any]
+

Denests a dictionary or list, returning a new flattened dictionary.

+
+
Parameters:
+
    +
  • inp (dict[Any, Any] | list[Any]) – The input dictionary or list to be denested.

  • +
  • new (dict[Any, Any] | None, optional) – The dictionary to store denested key-value pairs. Defaults to None.

  • +
  • name (str, optional) – The current key name in the denesting process. Defaults to “”.

  • +
  • run_first (bool, optional) – Flag to indicate if this is the first run of the function. Defaults to True.

  • +
+
+
Returns:
+

A new denested dictionary.

+
+
Return type:
+

dict[Any, Any]

+
+
+

Examples

+
>>> nested_dict = {"a": {"b": {"c": 1}}, "d": [2, 3]}
+>>> dict_denester(nested_dict)
+{"a-b-c": 1, "d-0": 2, "d-1": 3}
+
+
+
+ +
+
+port.helpers.extraction_helpers.epoch_to_iso(epoch_timestamp: str | int | float) str
+

Convert epoch timestamp to an ISO 8601 string, assuming UTC.

+
+
Parameters:
+

epoch_timestamp (str | int) – The epoch timestamp to convert.

+
+
Returns:
+

The ISO 8601 formatted string, or the original input if conversion fails.

+
+
Return type:
+

str

+
+
Raises:
+

Exception – Logs an error message if conversion fails.

+
+
+

Examples

+
>>> epoch_to_iso(1632139200)
+"2021-09-20T12:00:00+00:00"
+
+
+
+ +
+
+port.helpers.extraction_helpers.extract_file_from_zip(zfile: str, file_to_extract: str) BytesIO
+

Extracts a specific file from a zipfile and returns it as a BytesIO buffer.

+
+
Parameters:
+
    +
  • zfile (str) – Path to the zip file.

  • +
  • file_to_extract (str) – Name or path of the file to extract from the zip.

  • +
+
+
Returns:
+

+
A BytesIO buffer containing the extracted file’s content of the first file found.

Returns an empty BytesIO if the file is not found or an error occurs.

+
+
+

+
+
Return type:
+

io.BytesIO

+
+
Raises:
+
    +
  • FileNotFoundInZipError – Logs an error if the specified file is not found in the zip.

  • +
  • zipfile.BadZipFile – Logs an error if the zip file is invalid.

  • +
  • Exception – Logs any other unexpected errors.

  • +
+
+
+

Examples

+
>>> extracted_file = extract_file_from_zip("archive.zip", "data.txt")
+>>> content = extracted_file.getvalue().decode('utf-8')
+
+
+
+ +
+
+port.helpers.extraction_helpers.find_item(d: dict[Any, Any], key_to_match: str) str
+

Finds the least nested value in a denested dictionary whose key contains the given key_to_match.

+
+
Parameters:
+
    +
  • d (dict[Any, Any]) – A denested dictionary to search in.

  • +
  • key_to_match (str) – The substring to match in the keys.

  • +
+
+
Returns:
+

+
The value of the least nested key containing key_to_match.

Returns an empty string if no match is found.

+
+
+

+
+
Return type:
+

str

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the search.

+
+
+

Examples

+
>>> d = {"asd-asd-asd": 1, "asd-asd": 2, "qwe": 3}
+>>> find_item(d, "asd")
+"2"
+
+
+
+ +
+
+port.helpers.extraction_helpers.find_items(d: dict[Any, Any], key_to_match: str) list
+

Finds all values in a denested dictionary whose keys contain the given key_to_match.

+
+
Parameters:
+
    +
  • d (dict[Any, Any]) – A denested dictionary to search in.

  • +
  • key_to_match (str) – The substring to match in the keys.

  • +
+
+
Returns:
+

A list of all values whose keys contain key_to_match.

+
+
Return type:
+

list

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the search.

+
+
+

Examples

+
>>> d = {"asd-1": "a", "asd-2": "b", "qwe": "c"}
+>>> find_items(d, "asd")
+["a", "b"]
+
+
+
+ +
+
+port.helpers.extraction_helpers.fix_ascii_string(input: str) str
+

Fixes the string encoding by removing non-ASCII characters.

+
+
Parameters:
+

input (str) – The input string that needs to be fixed.

+
+
Returns:
+

The fixed string with only ASCII characters, or the original string if an exception occurs.

+
+
Return type:
+

str

+
+
+

Examples

+
>>> fix_ascii_string("Hello, 世界!")
+"Hello, !"
+
+
+
+ +
+
+port.helpers.extraction_helpers.fix_latin1_string(input: str) str
+

Fixes the string encoding by attempting to encode it using the ‘latin1’ encoding and then decoding it.

+
+
Parameters:
+

input (str) – The input string that needs to be fixed.

+
+
Returns:
+

The fixed string after encoding and decoding, or the original string if an exception occurs.

+
+
Return type:
+

str

+
+
+

Examples

+
>>> fix_latin1_string("café")
+"café"
+
+
+
+ +
+
+port.helpers.extraction_helpers.json_dumper(zfile: str) pandas.DataFrame
+

Reads all JSON files in a zip file, flattens them, and combines them into a single DataFrame.

+
+
Parameters:
+

zfile (str) – Path to the zip file containing JSON files.

+
+
Returns:
+

A DataFrame containing flattened data from all JSON files in the zip.

+
+
Return type:
+

pd.DataFrame

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the process.

+
+
+

Examples

+
>>> df = json_dumper("data.zip")
+>>> print(df.head())
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_csv_from_bytes(json_bytes: BytesIO) list[dict[Any, Any]]
+

Reads CSV data from a BytesIO buffer and returns it as a list of dictionaries.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing CSV data.

+
+
Returns:
+

+
A list of dictionaries, where each dictionary represents a row in the CSV.

Returns an empty list if parsing fails.

+
+
+

+
+
Return type:
+

list[dict[Any, Any]]

+
+
+

Examples

+
>>> buffer = io.BytesIO(b'name,age\nAlice,30\nBob,25')
+>>> data = read_csv_from_bytes(buffer)
+>>> print(data)
+[{'name': 'Alice', 'age': '30'}, {'name': 'Bob', 'age': '25'}]
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_csv_from_bytes_to_df(json_bytes: BytesIO) pandas.DataFrame
+

Reads CSV data from a BytesIO buffer and returns it as a pandas DataFrame.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing CSV data.

+
+
Returns:
+

A pandas DataFrame containing the CSV data.

+
+
Return type:
+

pd.DataFrame

+
+
+

Examples

+
>>> buffer = io.BytesIO(b'name,age\nAlice,30\nBob,25')
+>>> df = read_csv_from_bytes_to_df(buffer)
+>>> print(df)
+   name  age
+0  Alice   30
+1    Bob   25
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_json_from_bytes(json_bytes: BytesIO) dict[Any, Any] | list[Any]
+

Reads JSON data from a BytesIO buffer.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing JSON data.

+
+
Returns:
+

+
The parsed JSON data as a dictionary or list.

Returns an empty dictionary if parsing fails.

+
+
+

+
+
Return type:
+

dict[Any, Any] | list[Any]

+
+
+

Examples

+
>>> buffer = io.BytesIO(b'{"key": "value"}')
+>>> data = read_json_from_bytes(buffer)
+>>> print(data)
+{'key': 'value'}
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_json_from_file(json_file: str) dict[Any, Any] | list[Any]
+

Reads JSON data from a file.

+
+
Parameters:
+

json_file (str) – Path to the JSON file.

+
+
Returns:
+

+
The parsed JSON data as a dictionary or list.

Returns an empty dictionary if parsing fails.

+
+
+

+
+
Return type:
+

dict[Any, Any] | list[Any]

+
+
+

Examples

+
>>> data = read_json_from_file("data.json")
+>>> print(data)
+{'key': 'value'}
+
+
+
+ +
+
+port.helpers.extraction_helpers.replace_months(input_string: str) str
+

Replaces Dutch month abbreviations with English equivalents in the input string.

+
+
Parameters:
+

input_string (str) – The input string containing potential Dutch month abbreviations.

+
+
Returns:
+

The input string with Dutch month abbreviations replaced by English equivalents.

+
+
Return type:
+

str

+
+
+

Examples

+
>>> replace_months("15 mei 2023")
+"15 may 2023"
+
+
+
+ +
+
+port.helpers.extraction_helpers.sort_isotimestamp_empty_timestamp_last(timestamp_series: pandas.Series) pandas.Series
+

Creates a key for sorting a pandas Series of ISO timestamps, placing empty timestamps last.

+
+
Parameters:
+

timestamp_series (pd.Series) – A pandas Series containing ISO formatted timestamps.

+
+
Returns:
+

A Series of sorting keys, with -timestamp for valid dates and infinity for invalid/empty dates.

+
+
Return type:
+

pd.Series

+
+
+

Examples

+
>>> df = df.sort_values(by="Date", key=sort_isotimestamp_empty_timestamp_last)
+
+
+
+ +
+
+

Port helpers

+
+
+port.helpers.port_helpers.donate(key: str, json_string: str) CommandSystemDonate
+

Initiates a donation process using the provided key and data.

+

This function triggers the donation process by passing a key and a JSON-formatted string +that contains donation information.

+
+
Parameters:
+
    +
  • key (str) – The key associated with the donation process. The key will be used in the file name.

  • +
  • json_string (str) – A JSON-formatted string containing the donated data.

  • +
+
+
Returns:
+

A system command that initiates the donation process. Must be yielded.

+
+
Return type:
+

CommandSystemDonate

+
+
+
+ +
+
+port.helpers.port_helpers.exit(code: int, info: str) CommandSystemExit
+

Exits Next with the provided exit code and additional information. +This if the code reaches this function, it will return to the task list in Next.

+
+
Parameters:
+
    +
  • code (int) – The exit code representing the type or status of the exit.

  • +
  • info (str) – A string containing additional information about the exit.

  • +
+
+
Returns:
+

A system command that initiates the exit process in Next.

+
+
Return type:
+

CommandSystemExit

+
+
+

Examples

+

yield exit(0, “Success”)

+
+ +
+
+port.helpers.port_helpers.generate_file_prompt(extensions: str) PropsUIPromptFileInput
+

Generates a file input prompt for selecting a file for a platform.

+

This function creates a bilingual (English and Dutch) file input prompt +that instructs the user to select a file they’ve received from a platform +and stored on their device.

+
+
Parameters:
+
    +
  • extensions (str) – A collection of allowed MIME types.

  • +
  • example (For) – “application/zip, text/plain, application/json”

  • +
+
+
Returns:
+

A file input prompt object containing +the description text and allowed file extensions.

+
+
Return type:
+

props.PropsUIPromptFileInput

+
+
+
+ +
+
+port.helpers.port_helpers.generate_retry_prompt(platform_name: str) PropsUIPromptConfirm
+

Generates a confirmation prompt for retrying file processing.

+

This function creates a bilingual (English and Dutch) confirmation prompt +when a file from a specific platform cannot be processed. It allows the user +to either try again with a different file or continue with the current file.

+
+
Parameters:
+

platform_name (str) – The name of the platform associated with the file +that couldn’t be processed. This is inserted into the prompt text.

+
+
Returns:
+

A confirmation prompt object containing +the message, and labels for the “OK” (try again) and “Cancel” (continue) buttons.

+
+
Return type:
+

props.PropsUIPromptConfirm

+
+
+
+ +
+
+port.helpers.port_helpers.generate_review_data_prompt(id: str, description: Translatable, table_list: list[PropsUIPromptConsentFormTable]) PropsUIPromptConsentForm
+

Generates a data review form with a list of tables and a description, including default donate question and button. +The participant can review these tables before they will be send to the researcher. If the participant consents to sharing the data +the data will be stored at the configured storage location.

+
+
Parameters:
+
    +
  • id (str) – will be used as part of the filename when the data is stored

  • +
  • table_list (list[props.PropsUIPromptConsentFormTable]) – A list of consent form tables to be included in the prompt.

  • +
  • description (props.Translatable) – A translatable description text for the consent prompt.

  • +
+
+
Returns:
+

A structured consent form object containing the provided table list, description, +and default values for donate question and button.

+
+
Return type:
+

props.PropsUIPromptConsentForm

+
+
+
+ +
+
+port.helpers.port_helpers.render_end_page()
+

Renders a thank you page, must be yielded.

+
+ +
+
+port.helpers.port_helpers.render_page(header_text: Translatable, body: PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput | PropsUIPromptFileInputMultiple | PropsUIPromptConfirm | PropsUIPromptQuestionnaire) CommandUIRender
+

Renders the UI components for a donation page.

+

This function assembles various UI components including a header, body, and footer +to create a complete donation page. It uses the provided header text and body content +to customize the page.

+
+
Parameters:
+
    +
  • header_text (props.Translatable) – The text to be displayed in the header. +This should be a translatable object to support multiple languages.

  • +
  • ( (body) – props.PropsUIPromptRadioInput | +props.PropsUIPromptConsentForm | +props.PropsUIPromptFileInput | +props.PropsUIPromptFileInputMultiple | +props.PropsUIPromptConfirm | +props.PropsUIPromptQuestionnaire

  • +
  • ) – The main content of the page. It must be compatible with props.PropsUIPageDonation.

  • +
+
+
Returns:
+

A render command object containing the fully assembled page. Must be yielded.

+
+
Return type:
+

CommandUIRender

+
+
+
+ +
+
+

Validation

+

Contains classes to deal with input validation of DDPs

+

The idea of this module is to provide a uniform way to assign a validation status to a DDP validation +Which can be used and acted upon

+
+
+class port.helpers.validate.DDPCategory(id: str, ddp_filetype: DDPFiletype, language: Language, known_files: list[str])
+

Represents characteristics that define a DDP (Data Delivery Package) category.

+
+
Parameters:
+
    +
  • id (str) – Unique identifier for the DDP category.

  • +
  • ddp_filetype (DDPFiletype) – The file type of the DDP.

  • +
  • language (Language) – The language of the DDP.

  • +
  • known_files (List[str]) – A list of known files associated with this DDP category.

  • +
+
+
+

Examples

+
>>> category = DDPCategory("cat1", DDPFiletype.JSON, Language.EN, ["file1.json", "file2.json"])
+>>> print(category.id)
+cat1
+>>> print(category.language)
+<Language.EN: 1>
+
+
+
+ +
+
+class port.helpers.validate.DDPFiletype(value)
+

Enumeration of supported DDP file types.

+
+ +
+
+class port.helpers.validate.Language(value)
+

Enumeration of supported languages.

+
+ +
+
+class port.helpers.validate.StatusCode(id: int, description: str)
+

Represents a status code that can be used to set a DDP status.

+
+
Parameters:
+
    +
  • id (int) – The numeric identifier of the status code.

  • +
  • description (str) – A brief description of what the status code represents.

  • +
+
+
+

Examples

+
>>> status = StatusCode(0, "Success")
+>>> print(status.id)
+0
+>>> print(status.description)
+Success
+
+
+
+ +
+
+class port.helpers.validate.ValidateInput(all_status_codes: list[StatusCode], all_ddp_categories: list[DDPCategory], current_status_code: StatusCode | None = None, current_ddp_category: DDPCategory | None = None)
+

A class for validating input data against predefined categories and status codes.

+
+
Parameters:
+
    +
  • all_status_codes (List[StatusCode]) – A list of valid status codes.

  • +
  • all_ddp_categories (List[DDPCategory]) – A list of valid DDP categories.

  • +
  • current_status_code (Optional[StatusCode]) – The current status code. Defaults to None.

  • +
  • current_ddp_category (Optional[DDPCategory]) – The current DDP category. Defaults to None.

  • +
+
+
+
+
+ddp_categories_lookup
+

A lookup dictionary for DDP categories.

+
+
Type:
+

Dict[str, DDPCategory]

+
+
+
+ +
+
+status_codes_lookup
+

A lookup dictionary for status codes.

+
+
Type:
+

Dict[int, StatusCode]

+
+
+
+ +

Examples

+
>>> status_codes = [StatusCode(id=0, description="Success"), StatusCode(id=1, description="Error")]
+>>> ddp_categories = [DDPCategory(id="cat1", ddp_filetype=DDPFiletype.JSON, language=Language.EN, known_files=["file1.txt", "file2.txt"])]
+>>> validator = ValidateInput(all_status_codes=status_codes, all_ddp_categories=ddp_categories)
+
+
+
+
+get_status_code_id() int
+

Return the current assigned status code ID. Note: zero is always used for OK. +Non-zero otherwise.

+
+
Returns:
+

The ID of the current status code, or 1 if no status code is set.

+
+
Return type:
+

int

+
+
+

Examples

+
>>> validator.get_status_code_id()
+
+
+
+ +
+
+infer_ddp_category(file_list_input: list[str]) bool
+

Compares a list of files to a list of known files and infers the DDPCategory.

+
+
Parameters:
+

file_list_input (List[str]) – A list of input files to compare against known files.

+
+
Returns:
+

True if a valid DDP category is inferred, False otherwise. It sets the current_status_code +and current_ddp_category to either the DDP catogory match, or to an unknown category.

+
+
Return type:
+

bool

+
+
+

Examples

+
>>> validator.infer_ddp_category(["file1.txt", "file2.txt"])
+
+
+
+ +
+
+set_current_status_code_by_id(id: int) None
+

Set the status code based on the provided ID.

+
+
Parameters:
+

id (int) – The ID of the status code to set.

+
+
+

Examples

+
>>> validator.set_current_status_code_by_id(0)
+
+
+
+ +
+ +
+
+port.helpers.validate.validate_zip(ddp_categories: list[DDPCategory], path_to_zip: str) ValidateInput
+

Validates a DDP zip file against a list of DDP categories.

+

This function attempts to open and read the contents of a zip file, then uses +the ValidateInput class to infer the DDP category based on the files in the zip. +If the zip file is invalid or cannot be read, it sets an error status code (an integer greather than 0).

+
+
Parameters:
+
    +
  • ddp_categories (List[DDPCategory]) – A list of valid DDP categories to compare against.

  • +
  • path_to_zip (str) – The file path to the zip file to be validated.

  • +
+
+
Returns:
+

An instance of ValidateInput containing the validation results.

+
+
Return type:
+

ValidateInput

+
+
Raises:
+

zipfile.BadZipFile – This exception is caught internally and results in an error status code.

+
+
+

Examples

+
>>> categories = [DDPCategory(id="cat1", ddp_filetype=DDPFiletype.JSON, language=Language.EN, known_files=["file1.txt", "file2.txt"])]
+>>> result = validate_zip(categories, "path/to/valid.zip")
+>>> result.get_status_code_id()
+0
+
+
+
>>> result = validate_zip(categories, "path/to/invalid.zip")
+>>> result.get_status_code_id()
+1
+
+
+
+ +
+
+

Platforms

+
+

ChatGPT

+

ChatGPT

+

This module contains an example flow of a ChatGPT data donation study

+
+
+
+ + +
+
+
+
+ + + + + + +
+
+
+
+ + +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..3ccb3fa4 --- /dev/null +++ b/api/index.html @@ -0,0 +1,247 @@ + + + + + + + + API Documentation — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ +
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/creating-your-own-data-donation-task.html b/articles/creating-your-own-data-donation-task.html new file mode 100644 index 00000000..84b1f7d4 --- /dev/null +++ b/articles/creating-your-own-data-donation-task.html @@ -0,0 +1,570 @@ + + + + + + + + Creating your own donation task — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Creating your own donation task

+

The donation task is at the core of a data donation study. +It is the step where the participant is actually going to donate their data.

+

The data donation task goes as follows:

+
    +
  1. The participant goes to your data donation task app in a browser

  2. +
  3. The participant is prompted to submit their data download package (DDP)

  4. +
  5. A Python script you wrote, extracts the data you need for your research

  6. +
  7. That data gets presented to the participant on screen

  8. +
  9. The participants decides to donate and you receive the data

  10. +
+
+

Using the data donation task in a data donation study

+

The data donation task needs to be used in together with Next. Next is the backend for the data donation task. With Next you can configure a data donation study: i.e. configure:

+
    +
  • Your data donation task

  • +
  • An information page

  • +
  • An informed consent page

  • +
  • A privacy policy

  • +
  • Instruction manuals for participants

  • +
  • Configure where the data should go

  • +
  • and more

  • +
+

You can find more information on how to deploy a study in the wiki

+
+
+

How does the data donation task work?

+

The idea behind the data donation task +The data donation task repository is in essence a toolkit with which you can build your own custom data donation task. +It is designed as a toolkit because researchers need to tailor the data donation task to their own interests; they interested in different DDPs and are interested in different data within those DDPs.

+

This toolkit approach has several benefits:

+
    +
  1. It allows for a bespoke experience for the participant

  2. +
  3. You can only extract (and possibly aggregate) the data you need for you study, which we think is important in order to preserve the privacy of the participant and is often a requirement from your data steward/ethical review board

  4. +
+

These benefits come at the cost of added complexity compared to a one size fits all approach that extracts most or all data from the participant.

+

The design of the data donation task +The data donation task contains reusable components (such as: a screen that prompts the participant to submit their DDP and a screen with tables that the participants need to review prior to donation) that you can use and combine in creative ways to make your own study. +These components are combined in a Python script that is created by the researcher.

+

On a high level the script works as follows:

+
    +
  1. The Python script determines which user interface (UI) component needs to be shown to the participant

  2. +
  3. Whenever the participant is done interacting with the UI component, the result of that interaction is returned to the script

  4. +
  5. The script handles the return result en determine the next UI component that the participant needs to see or interact with, go back to step 1 until the end of the donation task

  6. +
+

The architecture of the data donation task +The data donation task is a web application (build with React and Pyodide) that completely runs in the browser of the participant. +The Python script and the UI components will run completely in the browser of the participant. +Data is only sent to the server upon the participant clicking a consent button.

+
+
+

Start writing your first data donation task script

+

After you have forked or cloned and installed this repository (see instruction) you can start creating your own donation task.

+

You can create your own study by changing and/or adapting the code in the following directory port/src/framework/processing/py/port/ +This directory contains the following files:

+
    +
  • script.py: Contains your donation task logic; which screen the participants will see and in what order

  • +
  • api/props.py: Contains all the UI elements you can use; you can use this file for reference

  • +
  • api/commands.py: Contains the Render and the Donate commands

  • +
  • main.py: The main driver of you donation task, you don’t need to touch this file

  • +
+
+

script.py

+

script.py is the most important file and the one we will be working with the most

+

Lets look at a full example of a script.py. In this example we will be extracting data from a fictional DDP. +Participants are asked to submit a zip file (any zip file will do in this case), and we will extract the file names and some meta data from this zip file. +In a real study you would extract something substantial from the data.

+

script.py must contain a function called process this function determines the whole data donation task from start to finish (Which screens the participant will see and in what order, and what kind of data extraction will take place). +At the time of writing this example is also the default script.py.

+

In this example process defines the following data donation task:

+
    +
  1. Ask the participant to submit a zip file

  2. +
  3. Perform validation on the submitted zip file, if not valid return to step 1

  4. +
  5. Extract the data from the submitted zip file

  6. +
  7. Render the extract data on screen in a table

  8. +
  9. Send the data to the data storage upon consent

  10. +
+

Although these can vary per data donation task, they will be more or less similar.

+

Below you can find the annotated example process function:

+
# script.py
+import port.api.props as props
+from port.api.commands import (CommandSystemDonate, CommandUIRender, CommandSystemExit)
+
+import pandas as pd
+import zipfile
+
+def process(session_id: str):
+    platform = "Platform of interest"
+
+    # Start of the data donation task
+    while True:
+        # Ask the participant to submit a file
+        file_prompt = generate_file_prompt(platform, "application/zip, text/plain")
+        file_prompt_result = yield render_page(platform, file_prompt)
+
+        # If the participant submitted a file: continue
+        if file_prompt_result.__type__ == 'PayloadString':
+
+            # Validate the file the participant submitted
+            # In general this is wise to do 
+            is_data_valid = validate_the_participants_input(file_prompt_result.value)
+
+            # Happy flow (all is well):
+            # The file the participant submitted is valid
+            if is_data_valid == True:
+
+                # Extract the data you as a researcher are interested in, and put it in a pandas DataFrame
+                # Show this data to the participant in a table on screen
+                # The participant can now decide to donate
+                extracted_data = extract_the_data_you_are_interested_in(file_prompt_result.value)
+                consent_prompt = generate_consent_prompt(extracted_data)
+                consent_prompt_result = yield render_page(platform, consent_prompt)
+
+                # If the participant wants to donate the data gets donated
+                if consent_prompt_result.__type__ == "PayloadJSON":
+                    yield donate(f"{session_id}-{platform}", consent_prompt_result.value)
+
+                break
+
+            # Sad flow
+            # The data was not valid, ask the participant to retry
+            if is_data_valid == False:
+                retry_prompt = generate_retry_prompt(platform)
+                retry_prompt_result = yield render_page(platform, retry_prompt)
+
+                # The participant wants to retry: start from the beginning
+                if retry_prompt_result.__type__ == 'PayloadTrue':
+                    continue
+                # The participant does not want to retry or pressed skip
+                else:
+                    break
+
+        # The participant did not submit a file and pressed skip
+        else:
+            break
+
+    yield exit_port(0, "Success")
+    yield render_end_page()
+
+
+
+

The functions used in process

+

These are all the functions used in process together they make up script.py.

+
+extract_the_data_you_are_interested_in +
def extract_the_data_you_are_interested_in(zip_file: str) -> pd.DataFrame:
+    """
+    This function extracts the data the researcher is interested in
+
+    In this case we extract from the zipfile:
+    * The filesnames
+    * The compressed file size
+    * The file size
+
+    You could extract anything here
+    """
+    names = []
+    out = pd.DataFrame()
+
+    try:
+        file = zipfile.ZipFile(zip_file)
+        data = []
+        for name in file.namelist():
+            names.append(name)
+            info = file.getinfo(name)
+            data.append((name, info.compress_size, info.file_size))
+
+        out = pd.DataFrame(data, columns=["File name", "Compressed file size", "File size"])
+
+    except Exception as e:
+        print(f"Something went wrong: {e}")
+
+    return out
+
+
+
+
+validate_the_participants_input +
def validate_the_participants_input(zip_file: str) -> bool:
+    """
+    Check if the participant actually submitted a zipfile
+    Returns True if participant submitted a zipfile, otherwise False
+
+    In reality you need to do a lot more validation.
+    Some things you could check:
+    - Check if the the file(s) are the correct format (json, html, binary, etc.)
+    - If the files are in the correct language
+    """
+
+    try:
+        with zipfile.ZipFile(zip_file) as zf:
+            return True
+    except zipfile.BadZipFile:
+        return False
+
+
+
+
+render_end_page +
def render_end_page():
+    """
+    Renders a thank you page
+    """
+    page = props.PropsUIPageEnd()
+    return CommandUIRender(page)
+
+
+
+
+
+render_page +
def render_page(platform: str, body, progress: int):
+    """
+    Renders the UI components
+    """
+    header = props.PropsUIHeader(props.Translatable({"en": platform, "nl": platform }))
+    footer = props.PropsUIFooter(progress)
+    page = props.PropsUIPageDonation(platform, header, body, footer)
+    return CommandUIRender(page)
+
+
+
+
+generate_retry_prompt +
def generate_retry_prompt(platform: str) -> props.PropsUIPromptConfirm:
+    """
+    Generates a retry screen, this can be used if validation failed for example.
+    You can aks the participant to try again, and go back to the submit file prompt
+    """
+    text = props.Translatable({
+        "en": f"Unfortunately, we cannot process your {platform} file. Continue, if you are sure that you selected the right file. Try again to select a different file.",
+        "nl": f"Helaas, kunnen we uw {platform} bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen."
+    })
+    ok = props.Translatable({
+        "en": "Try again",
+        "nl": "Probeer opnieuw"
+    })
+    cancel = props.Translatable({
+        "en": "Continue",
+        "nl": "Verder"
+    })
+    return props.PropsUIPromptConfirm(text, ok, cancel)
+
+
+
+
+generate_file_prompt +
def generate_file_prompt(platform: str) -> props.PropsUIPromptFileInput:
+    """
+    Generates a prompt that asks the participant to input a file
+    """
+    description = props.Translatable({
+        "en": f"Please follow the download instructions and choose the file that you stored on your device. Click “Skip” at the right bottom, if you do not have a {platform} file. ",
+        "nl": f"Volg de download instructies en kies het bestand dat u opgeslagen heeft op uw apparaat. Als u geen {platform} bestand heeft klik dan op “Overslaan” rechts onder."
+    })
+ 
+    return props.PropsUIPromptFileInput(description, "application/zip, text/plain")
+
+
+
+
+generate_consent_prompt +
def generate_consent_prompt(df: pd.DataFrame) -> props.PropsUIPromptConsentForm:
+    """
+    Generates a prompt screen with table(s) with the extract data for the participant to review
+    """
+    table_title = props.Translatable({
+        "en": "Zip file contents",
+        "nl": "Inhoud zip bestand"
+    })
+    table = props.PropsUIPromptConsentFormTable("zip_contents", table_title, df)
+    return props.PropsUIPromptConsentForm([table], [])
+
+
+
+
+donate +
def donate(key, json_string):
+    """
+    Sends data to the backend
+    """
+    return CommandSystemDonate(key, json_string)
+
+
+
+
+exit_port +
def exit_port(code, info):
+    """
+    When in Next this function exits the data donation task, and lets the participant return to Next
+    """
+    return CommandSystemExit(code, info)
+
+
+
+
+
+

Start writing your own script.py using the api

+

Now that you have seen a full example, you can start to try and create your own data donation task. With the elements from the example you can already build some pretty intricate data donation tasks. +Start creating your own by script.py by adapting this example to your own needs, for example, instead of file names you could extract data you would actually like to extract yourself.

+

If you want to see which up what UI elements are available to you checkout api/props.py. In general you need to construct your own pages (prompts) and render them with render_page (dont forget yield).

+
+
+

The usage of yield in script.py

+

Did you notice yield instead of return? yield makes sure that whenever the code resumes after a page render, it starts where it left off. +If you render a page you need to use yield instead of return, just like in the example.

+
+
+

Install Python packages

+

The data donation task runs in the browser of the participant, it is important to understand that when Python is running in your browser it is not using the Python version you have installed on your system. +The data donation task is using Pyodide this is Python compiled to web assembly that runs in the browser. +This means that packages you have available on your system install of Python, won’t be available in the browser.

+

If you want to use external packages they should be available for Pyodide, you can check the list of available packages here. +If you have found a package you want to use you can installed it by adding it to the array in the loadPackages function in src/framework/processing/py_worker.js as shown below:

+
// src/framework/processing/py_worker.js
+function loadPackages() {
+  console.log('[ProcessingWorker] loading packages')
+  // These packages are now installed and usable: micropip, numpy, pandas, and lxml
+  return self.pyodide.loadPackage(['micropip', 'numpy', 'pandas', 'lxml'])
+}
+
+
+

You can now import the packages as you would normally do in Python.

+
+
+

Try the donation task from the perspective of the participant

+

If you want to try out the above example, follow the installation instructions and start the server with npm run start.

+
+
+

Tips when writing your own script.py

+

Split the extraction logic from the data donation task logic +You can define your own modules where you create your data extraction, you can import those modules in script.py

+

Develop in separate script +You are better off engineering your extraction logic in different scripts and put them in script.py whenever you are finished developing. Only do small tweaks in script.py

+

Use the console in your browser +In case of errors they will show up in the browser console. You can use print in the Python script and it will show up in the browser console.

+

Keep the diverse nature of DDPs into account +At least check a couple of DDPs to make sure its reflective of the population you are interesed in. Thinks you can check are: data formats (html, json, plain text, csv, etc.), language settings (they somethines lead to json keys being in a different language or file names other than English).

+

Keep your code efficient +If your code is not efficient the extraction will take longer, which can result in a bad experience for the participant. In practice I have found that in most cases it’s not really an issue, and don’t have to pay that much attention to efficiency of your code. +Where efficiency really matters is when you have parse huge html files, beautifulsoup4 is a library that is commonly used to do this, this library is too slow however. As an alternative you can use lxml which is fast enough.

+

Don’t let your code crash +You cannot have your script crash, if your Python script crashes the task stops as well. This is not a good experience for your participant. +For example in the code you do the following: value_i_want_to_extract = extracted_data_in_a_dictionary["interesting key"] if the key "interesting key" does not exists, because it does not occur in the data of the participant, the script crashes and the participant cannot continue the data donation task.

+

Data donation checklist +Creating a good data donation task can be hard due to the variety of DDPs you will encounted. +Check out the following wiki article

+
+
+
+

Limits of the data donation task

+

Currently the data donation task has the following limitations:

+
    +
  • The data donation task is a frontend, you need to package this together with Next to deploy it. If you want to use it with your own backend you have to make the data donation task compatible with it yourself. A tutorial on how to do this might be added in the future.

  • +
  • The data donation task is running in the browser of the participant that brings in limitations, such as constraints on the files participant can submit. The limits are around 2GiB thats what Pyodide can handle. But less is better. So keep that in mind whenever you, for example, want to collect data from YouTube: your participants should exclude their own personal videos from their DDP (including these would result in a huge number of separate DDPs of around 2GiB).

  • +
  • The data donation currently works with text data, nothing keeps us from using other formats in the future (but the constraints on file sizes are still there)

  • +
  • The data donation task should run fine on mobile, however its not optimized for it, you might need to do some tweaking to the UI yourself

  • +
+
+
+ + +
+
+
+
+ + + + + + +
+
+
+ +
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/data-donation-checklist.html b/articles/data-donation-checklist.html new file mode 100644 index 00000000..c26d66e3 --- /dev/null +++ b/articles/data-donation-checklist.html @@ -0,0 +1,217 @@ + + + + + + + + Data donation checklist — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Data donation checklist

+

Writing data donation scripts can be challenging due to the diverse nature of data download packages (DDPs) your participants will try to submit. +If your participants try to submit a DDP that you did not anticipate your extraction might fail, or your script might crash, in that case you will end up with a non-response and a frustrated participant.

+

In order to minimize the number of problems you encounter. We developed a list of points you can pay attention to when developing scripts or performing your own study.

+

Inspect at least 5 DDPs from persons in the population you are going to sample from

+

Because DDPs will be different for different people, you need to inspect a couple of them (preferably from people from your target population) to learn what those differences are. +You need to verify that the extraction you have in mind works for all DDPs you might encounter.

+

DDP formats will change over time

+

DDP formats will change over time. Organization providing you with a DDP are under no obligation to keep the format of their DDP the same. The formats could change during data collection, be mindful of this fact. +Before going live with a study request a fresh package of your own and check whether your extraction still works as expected, and in the worst case scenario be ready to change your script during your data donation study.

+

Validate the DDPs your participant submit and log the results

+

This is crucial to do for two reasons:

+
    +
  1. If there are multiple versions of a DDP, you need to know which version the participant submitted so you can handle it appropriately. As an example consider the Youtube DDP: depending on the language setting files in the DDP are named differently. Another example is for the Instagram DDPs, keys in json files can be different depending on the language.

  2. +
  3. You probably want to give participants an incentive whenever they did a serious attempt of donating their data. In order to know whether they did a serious attempt you need to validate their DDP to see whether they submitted a package you expect. Example: a participant wants to participate in your study, but finds out its way too much work to request and download a DDP. They submit a random zipfile containing garbage, and they claim they completed the process succesfully. The only way for you to verify whether the participant gave it a fair shot is, to check what they submitted and why that did not result in you receiving data from that participant (If you would have received data its easy to verify they participated).

  4. +
+

Write your extraction so it matches the DDP request defaults

+

Often when requesting a DDP participants have a choice, for example you can request a portion of the DDP in html format or json format. The most human readible format (html) is often the default. It will be worth while to tailor your extraction script to the request defaults because participants will not read your instructions where you tell them to get the DDP in json format instead of html. This goes wrong quite often.

+

Our way of dealing with this is to bite the bullet and deal with the default DDP formats. This prevents mistakes and keeps the requests instruction for the participant as simple as possible. +Another way of dealing with it is to provide feedback to the participant whenever you detected they submitted the DDP in a format you did not anticipate.

+

Make sure your code will not crash

+

A crash in your code causes the data donation task to be stuck. The participant will see an error screen with the stacktrace displayed. You don’t want this to happen. Carefull programming can prevent your code from crashing. +A common cause for crashes is trying to access a key value pair in a dict that does not exist or sorting a pd.DataFrame column that does not exist. Most crashes will be caused by your expectation that the extraction is in a certain format, while in some cases it won’t be.

+

Make the least amount of assumptions possible about the data in a DDP

+

The more assumptions you make about the data the more opportunities your code has to fail. Some examples:

+
    +
  • Date parsing: Only parse date when its absolutely required. Date formats can be wildly different between participants, anticipating them all or writing code that can parse all dates you might encounter is less trivial than you might think.

  • +
  • Files in a zip: You can look for file paths you are interested in, or only file names you are interested in. If the file name is unique, there is no need to check for the full file path. Example: if the folder structure in a zip changes but files remain the same, the code that looks only at file names will still work.

  • +
  • Nested dictionaries: Sometimes you are interested in a value in a dict that is heavily nested. An approach you can take, instead of doing dict["key1"]["key2"]["key3"]["key_that_sometimes_is_called_something_different"]["key_which_value_you_want"], you can to first denest or flatten the dictionary start looking directly for “key_which_value_you_want”. You can find an example here, look for dict_denester and find_items.

  • +
+

The researcher is responsible for providing you with DDPs and should be knowledgeable about the data

+

If you are reading this checklist chances are you are going to create a data donation task. It could be the case that you are not the principal investigator of the project but just an engineer or person with some coding experience helping the researcher out. Some researchers expect you to be the one to have knowledge about a certain DDP they are interested in. Some researchers believe that because you are working with data, you also have that data available to you, know what it all means or whether data is present in a DDP. This is of course not always the case. Communicate clearly to the researcher that they responsible for the contents of their study, they should know what the data means and that they should tell you what to extract. In some cases the researcher might not even use the platform they are interested in, if that is the case, tell the researcher to start using the platform they are interested in so they can start instructing you on what to extract.

+

Test a study carefully before you go live

+

All researchers involved in the research group should test the study before you go live. A data donation study has more points of failure compared to traditional survey research, therefore its crucial that every researcher that is involved will test the complete data donation flow and shares their findings with you.

+
+ + +
+
+
+
+ + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/deployment.html b/articles/deployment.html new file mode 100644 index 00000000..c33d2c12 --- /dev/null +++ b/articles/deployment.html @@ -0,0 +1,259 @@ + + + + + + + + Deployment of the data donation task — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Deployment of the data donation task

+

This article will discuss the option you have when using the data donation task in a data donation study. +The data donation task is designed to be used with Next.

+
+

The data donation task with Next

+

Next is a software as a service platform developed by Eyra. +As a researcher you can log in to Next and configure data donation study, this means:

+
    +
  1. Configuring a landing zone for your participants: I.e. a Consent form page, an information page, a privacy policy

  2. +
  3. Configure a task list for your participants to complete: After the landing zone participants see a list of task they have to complete, typically these tasks are: viewing instruction on how to request and download data from a specific platform and administering the data donation task that you developed using this repository

  4. +
  5. Configuring where the donated data should be stored. Next has solutions for: AWS, Azure and Yoda.

  6. +
+

After configuration participants can be sent to Next with a unique id in the url. This unique key id be used when storing the data, so you know who donated their data

+
+

Next as a paid service

+

You can use Next as a paid service provided by Eyra. +Please contact Eyra if this is something you are interested in.

+
+
+

Self service Next (community version) on Surf Research Cloud

+

Next is available as an offering on Surf Research Cloud available for Researchers at Dutch universities and universities of applied sciences. +Dutch researchers can apply for an EINFRA grant and get access to Research cloud this way. You can apply for an EINFRA grant here and click “Straight to the request portal”.

+

This offering comes with no service or warranties. Contact datadonation.eu if you are interested in setting this up.

+
+
+

Self service Next (community version)

+

Next is a free and open source tool and you could host it yourself. You can find Next here

+
+
+

Which option should I choose?

+
    +
  • Next as a paid service: If you have research budget; want to be unburdened and get your data donation study done, this is the best option.

  • +
  • Self service community Next on Surf Research Cloud: You are a researcher at a Dutch university with no budget this is the best option. When choosing this option you have to realize that it comes with no service or warranties, you have to know what you are doing.

  • +
  • Self service community Next: If you want to provide Next as a service to your organization.

  • +
+
+
+

Add data donation task to your data donation study on Next

+

After you have created your data donation task with this repository, you can use this task directly in Next. You can do this as follows:

+
    +
  1. In the data donation task run the command npm run release, this creates a zip file named release.zip

  2. +
  3. In Next when configuring your data donation study, go to work flow and create a new item task list item called data donation task

  4. +
  5. In the newly created task list item select the release.zip you have just created

  6. +
+

Your data donation task list item is configured!

+
+
+
+

Use the data donation task without Next

+

The data donation task can be adapted so it works with your own bespoke back end. A tutorial on how to do this is might be added in the future.

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/index.html b/articles/index.html new file mode 100644 index 00000000..163aaa5a --- /dev/null +++ b/articles/index.html @@ -0,0 +1,221 @@ + + + + + + + + Articles — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/installation.html b/articles/installation.html new file mode 100644 index 00000000..970c4062 --- /dev/null +++ b/articles/installation.html @@ -0,0 +1,297 @@ + + + + + + + + Installation — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Installation

+

This guide covers the installation of the data donation task locally, so you can start creating your own data donation study!

+
+

Installation Guide for the Pre-requisites

+

You need to install the following software:

+
    +
  • Python: Make sure it is at least version 3.10

  • +
  • Node.js: Make sure it is at least version 16

  • +
  • Poetry: It is a build system for Python packages that the data donation task uses.

  • +
+

Below you can find more detailed instructions on how to install the required software depending on your operating system. +These instructions are just suggestions, always prefer the official instructions that suite your situation best.

+
+

Linux

+

You can install Python and Node.js from the official repositories of your distribution. Here are the general steps:

+
    +
  1. Open your terminal

  2. +
  3. Use your package manager to install Python and Node.js

  4. +
  5. Install Poetry using pipx, see the instruction manual

  6. +
+
+
+

Mac OSX

+

If you are using a Mac OSX, you can install Python and Node.js using the HomeBrew package manager. Follow these steps:

+
    +
  1. Open your terminal

  2. +
  3. Install HomeBrew following instructions if you haven’t already

  4. +
  5. Install Python and Node.js by runnning: brew install python node

  6. +
  7. Install Poetry using pipx, see the instruction manual

  8. +
+
+
+

Windows

+

In order to develop on Windows we recommend using Windows Subsystem for Linux (WSL) in combination with VSCode. +Windows subsystem for Linux is a convenient way of running Linux on Windows. +This section will contain a bit more context because the steps might be less familiar to Windows only users.

+

If you are already familiar with WSL/Linux, VSCode or both, the installation won’t give you too much trouble. +If you are completely new to WSL (or Linux) expect a certain amount of problem solving you have to do. +Key topics to understand are: WSL, and the Ubuntu basics; knowledge on these topics will help you a lot.

+
    +
  1. Install WSL, see the official installation instructions

  2. +
  3. Install the default Linux distro (Ubuntu 22.04 at the time of writing) and choose a username and password

  4. +
  5. Download and install VSCode

  6. +
  7. Connect VSCode to WSL, see instructions

  8. +
  9. Now you can follow the instructions for Linux, Note that Python will be already installed for you

  10. +
+

In theory these steps should cause no problems but in reality you have a couple of issues you could run into. I will discuss some of them I encountered here:

+
    +
  • You have the be an administrator of your own device. If you are not an administrator you cannot continue the installation

  • +
  • In order to install WSL, kernel virtualization needs to be on. You can go into the Windows Task Manager and check whether it is on. If its not on, you have to turn it on in the bios of your motherboard. Check what CPU you have (AMD or Intel) and check what the settings is called. If the setting is not present in the bios your CPU might not support virtualization, this means you cannot run WSL

  • +
  • If you have WSL 1 installed make sure you continue with WSL 2

  • +
  • Make sure you don’t forget the username and password you chose during the installation

  • +
  • If you have VSCode open make sure you are connected to WSL, you can check this by looking at the “><” icon in the lower left corner of VSCode

  • +
  • Remember that if you are connected to WSL with VSCode you are working in Ubuntu. Programs and files are not shared between Windows and Ubuntu, meaning if you have installed a program on Windows is not available for Ubuntu and vice versa.

  • +
  • Remember to not use Powershell when connected to WSL use bash

  • +
  • If you see error messages related to Windows in the terminal (something with cmd.exe for example), you know that Ubuntu is trying to open a program on Windows. This will never work. This is happening because Windows manipulates the PATH variable on Ubuntu that contains information about where the programs Ubuntu can open are. Example: you want to check which version of node you have node -v and you get an error with cmd.exe in the error message. Solutions: uninstall the windows version of the Node.js or manipulate the PATH variable so it does not try to open the Windows version of Nodejs. How to do that is outside the scope of this manual.

  • +
  • To run port you need version Nodejs version 18 this version is not in the official Ubuntu 22.04 repositories. See for example this guide on how to get nodejs version 18. If you run into errors you are expected to search for them and to solve them

  • +
+
+

Don’t want to use WSL?

+

That’s completely fine too, you can change the commands in package.json so they work on Windows instead.

+
+
+
+
+

Installation of the data donation task

+

If you have the Pre-requisites installed the installation of the data donation task should be straightforward.

+
    +
  1. Clone the repository:

  2. +
+
git clone https://github.com/d3i-infra/data-donation-task.git
+
+
+
    +
  1. Install the dependencies by running the following commands:

  2. +
+
cd ./data-donation-task
+npm install
+
+
+
    +
  1. Start a local web server to server the data donation app:

  2. +
+
npm run start
+
+
+

You can now go to the browser: http://localhost:3000 and you should be greeted by a mock data donation task

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/introduction-to-data-donation.html b/articles/introduction-to-data-donation.html new file mode 100644 index 00000000..0cfa5c92 --- /dev/null +++ b/articles/introduction-to-data-donation.html @@ -0,0 +1,186 @@ + + + + + + + + Introduction to Data Donation — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Introduction to Data Donation

+

We have produced 2 videos detailing the concept of data donation, accessible on our website at datadonation.eu/data-donation.

+

Additionally, our website provides guidance on how to set up a data donation study; simply refer to the “Prepare a study” tab.

+
+ + +
+
+
+
+ + +
+
+
+
+
+ + + <Articles + +
+ +
+ + Installation> + +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/next-in-docker.html b/articles/next-in-docker.html new file mode 100644 index 00000000..d441b4d2 --- /dev/null +++ b/articles/next-in-docker.html @@ -0,0 +1,383 @@ + + + + + + + + Try out Next with Docker — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Try out Next with Docker

+

This tutorial outlines how you can run Next in a docker container.

+

This is great for trying out the Next platform and will show you the necessary settings so you could use it in production.

+
+

Prerequisites

+

In order for you to try out Next you need to set up some prerequisites.

+
+

Unsplash

+

Configure a developer account at unsplash and get an API key. You can do this for free.

+

Unsplash is used as the source for banner images used to customize studies.

+
+
+

Google OIDC

+

Configure a google OIDC connect application in the google cloud console. For the details check the official instructions.

+

Google OIDC (OpenID Connect) is used to manage user authentication and account sign-ins.

+
+
+
+

Run Next in a Docker container

+

In this step, we will create and run the necessary containers using Docker Compose.

+

We are going to create a folder with the following structure:

+
.
+├── docker-compose.yaml
+├── proxy
+│   ├── certs
+│   │   ├── nginx-selfsigned.crt
+│   │   └── nginx-selfsigned.key
+│   └── conf
+│       └── nginx.conf
+
+
+

In the next step we are going to create the files.

+
+

Build the Next Docker image

+

Clone or fork Next

+

cd into /core

+

and build the image with:

+
docker build  --build-arg VERSION=1.0.0 --build-arg BUNDLE=self . -t self-d3i:latest
+
+
+
+
+

Setup certificates for TLS

+

Create certificates and put them in proxy/certs

+
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt
+
+
+
+
+

Nginx configuration

+

We are going to use Nginx as reverse proxy.

+

Nginx will be used to provide TLS for our HTTP connections.

+

Paste the following nginx configuration in proxy/conf:

+
# nginx.conf
+events {}
+http {
+    server {
+        listen 80;
+        listen [::]:80;
+        server_name localhost;
+        
+        # Redirect all HTTP requests to HTTPS
+        return 301 https://$server_name$request_uri;
+    }
+
+    server {
+        server_name localhost;
+        
+        if ($scheme != "https") {
+            return 301 https://$host$request_uri;
+        }
+        
+        location / {
+          allow all;
+          proxy_pass                http://app:8000;
+          proxy_set_header          X-Forwarded-Proto $scheme;
+          proxy_set_header          X-Forwarded-For $remote_addr;
+          proxy_set_header          X-Real-IP $remote_addr;
+          proxy_set_header          Host $http_host;
+          proxy_http_version        1.1;
+          proxy_set_header          Upgrade $http_upgrade;
+          proxy_set_header          Connection "upgrade";
+          proxy_max_temp_file_size  1m;
+        }
+        
+        listen 443 ssl;
+        ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt;
+        ssl_certificate_key /etc/nginx/certs/nginx-selfsigned.key;
+    }
+}
+
+
+

This Nginx configuration works with websocket connections which Next (Phoenix web application) uses.

+
+
+

Docker compose yaml

+

Now create the docker-compose.yaml:

+
#docker-compose.yaml
+services:
+  app:
+    image: self-d3i:latest
+    container_name: self-d3i
+    restart: always
+    environment:
+      APP_NAME: next
+      APP_DOMAIN: localhost
+      APP_MAIL_DOMAIN: "@gmail"
+      APP_ADMINS: youremail@gmail.com
+      DB_USER: user
+      DB_PASS: password
+      DB_HOST: db
+      DB_NAME: test_database
+      SECRET_KEY_BASE: "aUMZobj7oJn58XIlMGVcwTYrCsAllwDCGlwDCGlwDCGwDChdhsjahdghaggdgdGt7MoQYJtJbA="
+      STATIC_PATH: "/tmp"
+      UNSPLASH_ACCESS_KEY: "<your-unsplash-api-key>"
+      UNSPLASH_APP_NAME: "<your-unsplash-app-name>"
+      GOOGLE_SIGN_IN_CLIENT_ID: "<your-google-oidc-client-id>"
+      GOOGLE_SIGN_IN_CLIENT_SECRET: "<your-google-oidc-client-secret>"
+      STORAGE_SERVICES: "builtin, yoda, azure"
+    volumes:
+      - app_data:/tmp
+    depends_on:
+      - db
+
+  db:
+    image: postgres:latest
+    container_name: db-next
+    restart: always
+    environment:
+      POSTGRES_USER: user
+      POSTGRES_PASSWORD: password
+      POSTGRES_DB: test_database
+    volumes:
+      - postgres_data:/var/lib/postgresql/data
+
+  proxy:
+    image: nginx:latest
+    container_name: nginx
+    ports:
+      - 443:443
+    volumes:
+      - ./proxy/conf/nginx.conf:/etc/nginx/nginx.conf
+      - ./proxy/certs:/etc/nginx/certs
+    depends_on:
+      - app
+
+volumes:
+  postgres_data:
+  app_data:
+
+
+

and replace the following variables with the values you obtained in the previous steps:

+
UNSPLASH_ACCESS_KEY: "<your-unsplash-api-key>"
+UNSPLASH_APP_NAME: "<your-unsplash-app-name>"
+GOOGLE_SIGN_IN_CLIENT_ID: "<your-google-oidc-client-id>"
+GOOGLE_SIGN_IN_CLIENT_SECRET: "<your-google-oidc-client-secret>"
+
+
+

If you want to learn more about the variables you can read the documentation.

+

Now you are ready to start the containers with:

+
docker compose up
+
+
+

Go to https://localhost:80 and if everything went well you should see Next.

+

Note: because you self-signed your TLS certificates your browser will complain: accept all the risks and continue.

+
+
+
+

Next steps in Next

+

Now you can play around in Next. If you want to login as admin go to /admin/login.

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/visualizations.html b/articles/visualizations.html new file mode 100644 index 00000000..8ffdb8d1 --- /dev/null +++ b/articles/visualizations.html @@ -0,0 +1,416 @@ + + + + + + + + Adding data visualizations — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Adding data visualizations

+

You can add data visualizations to the consent form page, that will be shown below a data table. These visualizations will dynamically aggregate and visualize the data, responding to search queries and deleted items.

+

Good visualizations can help participants to see and explore what data they are about to donate, and thereby support informed consent. Furthermore, it can make the data donation process more educational and enjoyable.

+
+

Adding visualizations to tables

+

Visualizations are always directly connected to a consent form table. When in script.py you create a consent form table, you can implement visualizations as follows:

+
table_title = props.Translatable({
+    "en": "Table title",
+    "nl": "Tabel titel"
+})
+
+table = props.PropsUIPromptConsentFormTable(
+    id = "tableId",
+    title = table_title,
+    data_frame = df,
+    visualizations = [])
+
+
+

You can now add one or multiple visualization specifications to the visualizations list.

+
+
+

Visualization Specification

+

A visualization specification provides instructions for creating a visualization based on the data in the table. This visualization will then be created dynamically, so that when the table is updated (e.g., when participants search the data or remove rows) the visualization is updated as well.

+

A specification covers three main components:

+
    +
  • Aggregation: How should the table data be aggregated. e.g., count the number of rows per day

  • +
  • Display: How should the aggregated data be displayed? e.g., line chart, bar chart, wordcloud

  • +
  • Labels: Any labels to help along interpretation, optionally with translations (as seen above in the table_title)

  • +
+

A detailed explanation of the visualizatoin specification is shown below in the Specification Guide. But we recommend first having a look at the following examples.

+
+
+

Examples

+

Say we have data about every time a participant viewed a certain channel, and we also also know the channel category (e.g., sports, entertainment) and the exact timestampe. We have put this in a data_frame with the columns: channel, category and timestamp. We can then make a number of different visualizations.

+
+

Categorical variables | Bar chart of views per category

+
vis1 = dict(
+    title = dict(en= "views per category", ...),
+    type = "bar",
+    group = dict(column = "category", label = "Category")
+    values = [dict(aggregate = "count", label = dict(en = "number of views", ...))]
+)
+
+
+

The type determines the chart type, and can in this case be “bar”,”line” or “area”. The group determines how the data should be grouped and aggregated, which in this case is per category. The values determines the values to calculate per group, which here is just the count of the rows.

+

!!! Notice that values is a list, and not a single dictionary. Adding multiple value dictionaries will create multiple y-values, for grouped barcharts or multiple lines or areas.

+

The label’s can be either a single string (as in the group) or a dictionary with different languages, where keys are country codes, and values are labels (as in the values).

+
+
+

Date variables | Area chart of views per month

+
vis2 = dict(
+    title = dict(en= "views over time", ...),
+    type = "area",
+    group = dict(column = "timestamp", dateFormat = "month", label = "Month")
+    values = [dict(aggregate = "count", label = dict(en = "number of views", ...))]
+)
+
+
+

In this area chart (i.e. a line chart where the area below the line is coloured) we group the data by month, and use the same aggregation values as in the previous example to count the number of views per group.

+

The dateFormat grouping variable can be set if the column is a date string in ISO format: YYYY-MM-DD for date or YYYY-MM-DD HH:MM:SS for datetime (You can also use YYYY-MM-DDTHH:SS:MM), but that doesn’t look niced in the table).

+

The following formats are supported:

+
    +
  • Fixed interval: “year”, “quarter”, “month”, “day”, “hour”

  • +
  • Automatic interval: “auto” will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with “hour” interval)

  • +
  • cycles / season: “month_cycle” (January - December), “weekday_cycle” (Monday - Sunday) and “hour_cycle” (1 - 24).

  • +
+
+
+

Second-level aggregation | Line chart of views over time per category

+

Above we mentioned that you can add multiple values to create multiple y-values. But this only works if your data is wide. Alternatively, you can also perform a second-level aggregation on long data.

+
vis3 = dict(
+    title = dict(en= "views per category over time", ...),
+    type = "line",
+    group = dict(column = "timestamp", dateFormat = "auto", label = "Month")
+    values = [dict(
+        aggregate = "count",
+        label = dict(en = "number of views", ...),
+        group_by = "category"
+    )]
+)
+
+
+

Here we changed three things. First, we changed the type to “line”, because that’s a bit easier on the eye with multiple y-values. Second, we added group_by to the aggregation value, setting it to “category”. This will break the values data into groups for categories, and calculate the aggregation statistic per category. This will be visualized as a line chart where the frequency of each category (e.g., sport, entertainment) will be displayed on separate lines.

+

A third change is that we set the dateFormat to “auto” instead of fixing it to “month”. This will automatically pick a suitable time interval based on the range of column (last date - first date). This could mean that different participants see different intervals, depending on what works best for their own data.

+
+
+

Text variables | A wordcloud

+

As a final example, we’ll look at a different sub-specification for visualizing textual data. We’ll make a wordcloud of channels, based on their frequency in the data.

+
vis4 = dict(
+    title = dict(en= "Most viewed channels", ...),
+    type = "wordcloud",
+    textColumn = 'channel',
+    tokenize = False,
+)
+
+
+

This creates a wordcloud of the full channel names. Note that we could also have tokenized the texts, but for channels (e.g., YouTube channels) the full names are probably most informative.

+
+
+
+

Example wrap-up

+

Now that we have created visualizations, we can add them to the consent form table. Note that above we assigned our specifications to vis1 to vis4. We can now simply add them to the visualiations list.

+
table = props.PropsUIPromptConsentFormTable(
+    id = "tableId",
+    title = table_title,
+    data_frame = df,
+    visualizations = [vis1, vis2, vis3, vis4])
+
+
+
+
+

Specification guide

+

This is an overview of the visualiation specification. First, there are some general visualization arguments that every visualization has. Second, there are specific arguments depending on the visualization type

+
+

General visualization arguments

+

Every visualization has the following arguments

+
    +
  • title: A title for the visualization. This has to be a translation dictionary (see translation spec below)

  • +
  • type: The type of the visualization. The type determines what specification you need to follow

    +
      +
    • Chart visualiation: “line”, “bar” or “area”

    • +
    • Text visualization: “wordcloud”

    • +
    +
  • +
  • height (optional): The height of the chart in pixels

  • +
+
+
+

Chart visualization arguments

+

Chart visualizations work by aggregating the data into X, Y and optionally Z axes. It’s the basis for most common charts.

+
    +
  • type: “line”, “bar” or “area”

  • +
  • group: specifies the column to group and aggregate the data by. The group is visualized on the x-axis.

    +
      +
    • label: x-axis label. Either a string or translation dictionary (see translation spec below)

    • +
    • column: the name of the column

    • +
    • dateFormat (optional): if column is a date, select how it should be grouped. (see dateFormat spec below)

    • +
    • levels (optional). A list of strings with the specific column values to use. This also makes sure these values are displayed if they are missing in a participants data (also see values -> addZeroes)

    • +
    +
  • +
  • values: A list (!!) of objects. Each object specifies an (aggregate) value to calculate per group. A value is visualized on the y-axis. Multiple values can be given for multiple y-values

    +
      +
    • label: y-axis label. Either a string or translation dictionary (see translation spec below)

    • +
    • column (optional): the column based on which the value is calculated. Can be empty if just counting rows.

    • +
    • aggregate: The aggregation function. (see aggregate spec below)

    • +
    • addZeroes: Boolean. If true, add zeroes for empty groups. If levels are specified, participants will explicitly see that they occured zero times in their data. If dateFormat is used, this fills possible gaps (note that this mostly makes sense for row “count” aggregations where absense implies zero)

    • +
    • group_by (optional): the name of a column to do a second-level aggregation. This will create multiple y-values where the value in the column becomes the label.

    • +
    +
  • +
+
+
+

Text visualization arguments

+

Text visualizations take a text column as input.

+
    +
  • type: “wordcloud”

  • +
  • textColumn: A text (string) column in the data

  • +
  • tokenize (optional): Boolean. If true, the text will be tokenized

  • +
  • valueColumn (optional): By default, every text or token will be given a value based on the number of rows in which it occurs. Alternatively, you can specify a numeric column, in which case (the sum of) the values in this column will be used.

  • +
  • extract (optional): Normally, all preprocessing of the data should be handled in the import scripts, but for convenience we will provide some common methods for extracting parts of a string. Currently supports:

    +
      +
    • “url_domain”: If the column contains URLs, extract only the domain.

    • +
    +
  • +
+
+
+

Spec details

+

Here are some details for the more complicated spec components.

+
+

- translation

+

A translation dictionary has country codes as keys and the translations as values: dict(en = "english label", nl = "dutch label"). (This is identical to the dictionary used in the props.Translatable)

+
+
+

- dateFormat

+

If column is a date (YYYY-MM-DD, YYYY-MM-DD HH:MM or YYYY-MM-DD HH:MM:SS), select how the date is grouped. options are:

+
    +
  • Fixed interval: “year”, “quarter”, “month”, “day”, “hour”

  • +
  • Automatic interval: “auto” will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with “hour” interval)

  • +
  • cycles / season: “month_cycle” (January - December), “weekday_cycle” (Monday - Sunday) and “hour_cycle” (1 - 24).

  • +
+
+
+

- aggregate

+

The function by which to aggregate the column in values. The following functions are currently supported

+
    +
  • “count” just counts the rows

  • +
  • “mean” and “sum” require the value column to be numeric.

  • +
  • “count_pct” gives the count as a percentage of the total number of rows.*

  • +
  • “pct” sums the values of a numeric column and divides by the total sum.*

  • +
+

* If a secondary aggregation is used, percentages are calculated within the primary aggregation group

+
+
+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..0e240e09 --- /dev/null +++ b/genindex.html @@ -0,0 +1,597 @@ + + + + + + + Index — Port 1.0.0 documentation + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ + +

Index

+ +
+ C + | D + | E + | F + | G + | H + | I + | J + | L + | M + | O + | P + | Q + | R + | S + | T + | V + +
+

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + +
+ +

I

+ + + +
+ +

J

+ + +
+ +

L

+ + +
+ +

M

+ + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

V

+ + + +
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..c1709ccc --- /dev/null +++ b/index.html @@ -0,0 +1,229 @@ + + + + + + + + The Data Donation Task Documentation — Port 1.0.0 documentation + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

The Data Donation Task Documentation

+

Welcome to the Data Donation Task Documentation!

+

This is the place to learn about the data donation task. +Checkout the following wiki articles to get started:

+ +

You can find the API documentation here:

+ +
+
+

Indices and tables

+ +
+ + +
+
+
+
+ + + + + + +
+
+
+
+
+ +
+ +
+ + Articles> + +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..701a3edecbf2626c7cdbe190e46f3f0e2bb6546b GIT binary patch literal 1382 zcmV-s1)2IIAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkVZ*p`B zBOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?TV{dJ6a%FRK zWn>_Ab7^j8AbM z5D;K&&;I%}!#r)tk_LRy1L&`zyJ?z{v@$Lyn&;XmZ8P0`Iw)2P$bQMN^@H!J+(G;l zT30`3s~bHN$?yH^Uw5}kIWQhT1+g~!IF~;sm^-!M)U^`;S1EQm;0qA8NOKU3(0osJ zuu+mYuH*v!Q}MhU>_?n4d|NwMNU8>V#FDfiu2klbf)!`w&yp=PFiOVgHtL|=TFH_J zGh91^seDd}q#%}BbB0p;Bp3(JE)6K^ExRdHtS894(>4cGn7j9K5v^sx*DVqALa ze>K>ov*j!q3SCMHN45fNGG=OAy7h05Vz}Zxqv&VYqvP! z2ST#A8HsqFg0$%t8SRRJ^tBd_>xe}0ij>}b139%B2XL%8@pWgw+QnAv0m+Ov01x462?_r(i{=V>^4Di2M3!9 z7Jnd4VT(=QyRgqa>q>FDBzBL3a@xKvwb}{j;^O24FY;P*f|}YX>k8<8tDciNrw6`^ zlLmNVXARtUaoRwSci!(BWQ41{c)aaeN+L_OtOa%nc?xsqHP#q}7T92veI%m3I>|nC z*WYU|tW&uqcIxH(WBF~p6$mVUtS>?hp%TX=ao&1OE&&H_s zc`ZCs2*>L6Q_C3|rC=a2qQcYPvX*oy478$E;Z(t`ie`nTqQrF@JT@^h+i~WA{I*!*uM-I9GtZSQM{EjKmU8Ti;S)K@|(%m!f z#oBSfeEHn-9VSWRpTV{nNw*b$0-6D5nv}Rl4o^k(no==hG4b8 zS?BWW;-;6(H=Fx4zVDQ2EJq_x2) zp3isNB$@IA8EM}B!^Ndi|5Lri8z*tQkSxybw5~m~j(uW^W~(_q`}O`VGk|^oNueE$ z)e=0v9N#vM5*tP9gMWDFXM979<5YnCK=IJTYG$`;RBcx3Nv?cuTe0pR0xL)Cen!4V zFlb+QBQrlT!;x7(DD#8Hxy%97Urhza^YEDZ6JvwM4R(%7hR%s5Jl0j?&2bz)ba%XQ zxGFPOLB?hp=F52Pjag6UlCEtkhLI}5edvVrI3PgoCM{EtGZ;-YxIxYRa)SJZM6YTb zk~tMj-2abc)Ge{+Mz`)}|}A3Y_=7KEqut^KO;V)qTEM>&_aKn$(sf}t(Qd=LHpzc@Gl1FI(YHC + + + + + + Python Module Index — Port 1.0.0 documentation + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ p +
+ + + + + + + + + + + + + + + + + + + + + + +
 
+ p
+ port +
    + port.api.props +
    + port.helpers.extraction_helpers +
    + port.helpers.port_helpers +
    + port.helpers.validate +
    + port.platforms.chatgpt +
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..549d7b30 --- /dev/null +++ b/search.html @@ -0,0 +1,179 @@ + + + + + + + Search — Port 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..9df27e7b --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"- aggregate": [[9, "aggregate"]], "- dateFormat": [[9, "dateformat"]], "- translation": [[9, "translation"]], "API Documentation": [[1, null]], "API reference": [[0, null]], "Add data donation task to your data donation study on Next": [[4, "add-data-donation-task-to-your-data-donation-study-on-next"]], "Adding data visualizations": [[9, null]], "Adding visualizations to tables": [[9, "adding-visualizations-to-tables"]], "Articles": [[5, null]], "Build the Next Docker image": [[8, "build-the-next-docker-image"]], "Categorical variables | Bar chart of views per category": [[9, "categorical-variables-bar-chart-of-views-per-category"]], "Chart visualization arguments": [[9, "chart-visualization-arguments"]], "ChatGPT": [[0, "module-port.platforms.chatgpt"]], "Creating your own donation task": [[2, null]], "Data donation checklist": [[3, null]], "Date variables | Area chart of views per month": [[9, "date-variables-area-chart-of-views-per-month"]], "Deployment of the data donation task": [[4, null]], "Docker compose yaml": [[8, "docker-compose-yaml"]], "Don\u2019t want to use WSL?": [[6, "don-t-want-to-use-wsl"]], "Example wrap-up": [[9, "example-wrap-up"]], "Examples": [[9, "examples"]], "Extraction helpers": [[0, "module-port.helpers.extraction_helpers"]], "General visualization arguments": [[9, "general-visualization-arguments"]], "Google OIDC": [[8, "google-oidc"]], "How does the data donation task work?": [[2, "how-does-the-data-donation-task-work"]], "Indices and tables": [[10, "indices-and-tables"]], "Install Python packages": [[2, "install-python-packages"]], "Installation": [[6, null]], "Installation Guide for the Pre-requisites": [[6, "installation-guide-for-the-pre-requisites"]], "Installation of the data donation task": [[6, "installation-of-the-data-donation-task"]], "Introduction to Data Donation": [[7, null]], "Limits of the data donation task": [[2, "limits-of-the-data-donation-task"]], "Linux": [[6, "linux"]], "Mac OSX": [[6, "mac-osx"]], "Next as a paid service": [[4, "next-as-a-paid-service"]], "Next steps in Next": [[8, "next-steps-in-next"]], "Nginx configuration": [[8, "nginx-configuration"]], "Platforms": [[0, "platforms"]], "Port helpers": [[0, "module-port.helpers.port_helpers"]], "Prerequisites": [[8, "prerequisites"]], "Props": [[0, "module-port.api.props"]], "Run Next in a Docker container": [[8, "run-next-in-a-docker-container"]], "Second-level aggregation | Line chart of views over time per category": [[9, "second-level-aggregation-line-chart-of-views-over-time-per-category"]], "Self service Next (community version)": [[4, "self-service-next-community-version"]], "Self service Next (community version) on Surf Research Cloud": [[4, "self-service-next-community-version-on-surf-research-cloud"]], "Setup certificates for TLS": [[8, "setup-certificates-for-tls"]], "Spec details": [[9, "spec-details"]], "Specification guide": [[9, "specification-guide"]], "Start writing your first data donation task script": [[2, "start-writing-your-first-data-donation-task-script"]], "Start writing your own script.py using the api": [[2, "start-writing-your-own-script-py-using-the-api"]], "Text variables | A wordcloud": [[9, "text-variables-a-wordcloud"]], "Text visualization arguments": [[9, "text-visualization-arguments"]], "The Data Donation Task Documentation": [[10, null]], "The data donation task with Next": [[4, "the-data-donation-task-with-next"]], "The usage of yield in script.py": [[2, "the-usage-of-yield-in-script-py"]], "Tips when writing your own script.py": [[2, "tips-when-writing-your-own-script-py"]], "Try out Next with Docker": [[8, null]], "Try the donation task from the perspective of the participant": [[2, "try-the-donation-task-from-the-perspective-of-the-participant"]], "Unsplash": [[8, "unsplash"]], "Use the data donation task without Next": [[4, "use-the-data-donation-task-without-next"]], "Using the data donation task in a data donation study": [[2, "using-the-data-donation-task-in-a-data-donation-study"]], "Validation": [[0, "module-port.helpers.validate"]], "Visualization Specification": [[9, "visualization-specification"]], "Which option should I choose?": [[4, "which-option-should-i-choose"]], "Windows": [[6, "windows"]], "script.py": [[2, "script-py"]]}, "docnames": ["api/api", "api/index", "articles/creating-your-own-data-donation-task", "articles/data-donation-checklist", "articles/deployment", "articles/index", "articles/installation", "articles/introduction-to-data-donation", "articles/next-in-docker", "articles/visualizations", "index"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["api/api.md", "api/index.rst", "articles/creating-your-own-data-donation-task.md", "articles/data-donation-checklist.md", "articles/deployment.md", "articles/index.rst", "articles/installation.md", "articles/introduction-to-data-donation.md", "articles/next-in-docker.md", "articles/visualizations.md", "index.rst"], "indexentries": {"cancel (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.cancel", false]], "choices (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.choices", false]], "choices (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.choices", false]], "data_frame (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.data_frame", false]], "ddp_categories_lookup (port.helpers.validate.validateinput attribute)": [[0, "port.helpers.validate.ValidateInput.ddp_categories_lookup", false]], "ddpcategory (class in port.helpers.validate)": [[0, "port.helpers.validate.DDPCategory", false]], "ddpfiletype (class in port.helpers.validate)": [[0, "port.helpers.validate.DDPFiletype", false]], "delete_option (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.delete_option", false]], "description (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.description", false]], "description (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.description", false]], "description (port.api.props.propsuipromptfileinput attribute)": [[0, "port.api.props.PropsUIPromptFileInput.description", false]], "description (port.api.props.propsuipromptfileinputmultiple attribute)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.description", false]], "description (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.description", false]], "description (port.api.props.propsuipromptquestionnaire attribute)": [[0, "port.api.props.PropsUIPromptQuestionnaire.description", false]], "description (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.description", false]], "dict_denester() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.dict_denester", false]], "donate() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.donate", false]], "donate_button (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.donate_button", false]], "donate_question (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.donate_question", false]], "epoch_to_iso() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.epoch_to_iso", false]], "exit() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.exit", false]], "extensions (port.api.props.propsuipromptfileinput attribute)": [[0, "port.api.props.PropsUIPromptFileInput.extensions", false]], "extensions (port.api.props.propsuipromptfileinputmultiple attribute)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.extensions", false]], "extract_file_from_zip() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.extract_file_from_zip", false]], "filenotfoundinziperror": [[0, "port.helpers.extraction_helpers.FileNotFoundInZipError", false]], "find_item() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.find_item", false]], "find_items() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.find_items", false]], "fix_ascii_string() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.fix_ascii_string", false]], "fix_latin1_string() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.fix_latin1_string", false]], "folded (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.folded", false]], "footer (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.footer", false]], "generate_file_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_file_prompt", false]], "generate_retry_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_retry_prompt", false]], "generate_review_data_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_review_data_prompt", false]], "get_status_code_id() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.get_status_code_id", false]], "header (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.header", false]], "id (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.id", false]], "id (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.id", false]], "id (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.id", false]], "id (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.id", false]], "id (port.api.props.propsuiquestionopen attribute)": [[0, "port.api.props.PropsUIQuestionOpen.id", false]], "id (port.api.props.radioitem attribute)": [[0, "port.api.props.RadioItem.id", false]], "infer_ddp_category() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.infer_ddp_category", false]], "items (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.items", false]], "json_dumper() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.json_dumper", false]], "language (class in port.helpers.validate)": [[0, "port.helpers.validate.Language", false]], "message (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.message", false]], "meta_tables (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.meta_tables", false]], "module": [[0, "module-port.api.props", false], [0, "module-port.helpers.extraction_helpers", false], [0, "module-port.helpers.port_helpers", false], [0, "module-port.helpers.validate", false], [0, "module-port.platforms.chatgpt", false]], "ok (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.ok", false]], "percentage (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.percentage", false]], "platform (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.platform", false]], "port.api.props": [[0, "module-port.api.props", false]], "port.helpers.extraction_helpers": [[0, "module-port.helpers.extraction_helpers", false]], "port.helpers.port_helpers": [[0, "module-port.helpers.port_helpers", false]], "port.helpers.validate": [[0, "module-port.helpers.validate", false]], "port.platforms.chatgpt": [[0, "module-port.platforms.chatgpt", false]], "propsuifooter (class in port.api.props)": [[0, "port.api.props.PropsUIFooter", false]], "propsuiheader (class in port.api.props)": [[0, "port.api.props.PropsUIHeader", false]], "propsuipagedonation (class in port.api.props)": [[0, "port.api.props.PropsUIPageDonation", false]], "propsuipageend (class in port.api.props)": [[0, "port.api.props.PropsUIPageEnd", false]], "propsuipromptconfirm (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConfirm", false]], "propsuipromptconsentform (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConsentForm", false]], "propsuipromptconsentformtable (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConsentFormTable", false]], "propsuipromptfileinput (class in port.api.props)": [[0, "port.api.props.PropsUIPromptFileInput", false]], "propsuipromptfileinputmultiple (class in port.api.props)": [[0, "port.api.props.PropsUIPromptFileInputMultiple", false]], "propsuipromptprogress (class in port.api.props)": [[0, "port.api.props.PropsUIPromptProgress", false]], "propsuipromptquestionnaire (class in port.api.props)": [[0, "port.api.props.PropsUIPromptQuestionnaire", false]], "propsuipromptradioinput (class in port.api.props)": [[0, "port.api.props.PropsUIPromptRadioInput", false]], "propsuiquestionmultiplechoice (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionMultipleChoice", false]], "propsuiquestionmultiplechoicecheckbox (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox", false]], "propsuiquestionopen (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionOpen", false]], "question (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.question", false]], "question (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.question", false]], "question (port.api.props.propsuiquestionopen attribute)": [[0, "port.api.props.PropsUIQuestionOpen.question", false]], "questions (port.api.props.propsuipromptquestionnaire attribute)": [[0, "port.api.props.PropsUIPromptQuestionnaire.questions", false]], "radioitem (class in port.api.props)": [[0, "port.api.props.RadioItem", false]], "read_csv_from_bytes() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_csv_from_bytes", false]], "read_csv_from_bytes_to_df() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_csv_from_bytes_to_df", false]], "read_json_from_bytes() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_json_from_bytes", false]], "read_json_from_file() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_json_from_file", false]], "render_end_page() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.render_end_page", false]], "render_page() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.render_page", false]], "replace_months() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.replace_months", false]], "set_current_status_code_by_id() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.set_current_status_code_by_id", false]], "sort_isotimestamp_empty_timestamp_last() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.sort_isotimestamp_empty_timestamp_last", false]], "status_codes_lookup (port.helpers.validate.validateinput attribute)": [[0, "port.helpers.validate.ValidateInput.status_codes_lookup", false]], "statuscode (class in port.helpers.validate)": [[0, "port.helpers.validate.StatusCode", false]], "tables (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.tables", false]], "text (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.text", false]], "title (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.title", false]], "title (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.title", false]], "todict() (port.api.props.propsuifooter method)": [[0, "port.api.props.PropsUIFooter.toDict", false]], "todict() (port.api.props.propsuiheader method)": [[0, "port.api.props.PropsUIHeader.toDict", false]], "todict() (port.api.props.propsuipagedonation method)": [[0, "port.api.props.PropsUIPageDonation.toDict", false]], "todict() (port.api.props.propsuipageend method)": [[0, "port.api.props.PropsUIPageEnd.toDict", false]], "todict() (port.api.props.propsuipromptconfirm method)": [[0, "port.api.props.PropsUIPromptConfirm.toDict", false]], "todict() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.toDict", false]], "todict() (port.api.props.propsuipromptconsentformtable method)": [[0, "port.api.props.PropsUIPromptConsentFormTable.toDict", false]], "todict() (port.api.props.propsuipromptfileinput method)": [[0, "port.api.props.PropsUIPromptFileInput.toDict", false]], "todict() (port.api.props.propsuipromptfileinputmultiple method)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.toDict", false]], "todict() (port.api.props.propsuipromptprogress method)": [[0, "port.api.props.PropsUIPromptProgress.toDict", false]], "todict() (port.api.props.propsuipromptquestionnaire method)": [[0, "port.api.props.PropsUIPromptQuestionnaire.toDict", false]], "todict() (port.api.props.propsuipromptradioinput method)": [[0, "port.api.props.PropsUIPromptRadioInput.toDict", false]], "todict() (port.api.props.propsuiquestionmultiplechoice method)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.toDict", false]], "todict() (port.api.props.propsuiquestionmultiplechoicecheckbox method)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.toDict", false]], "todict() (port.api.props.propsuiquestionopen method)": [[0, "port.api.props.PropsUIQuestionOpen.toDict", false]], "todict() (port.api.props.translatable method)": [[0, "port.api.props.Translatable.toDict", false]], "translatable (class in port.api.props)": [[0, "port.api.props.Translatable", false]], "translate_meta_tables() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.translate_meta_tables", false]], "translate_tables() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.translate_tables", false]], "translations (class in port.api.props)": [[0, "port.api.props.Translations", false]], "validate_zip() (in module port.helpers.validate)": [[0, "port.helpers.validate.validate_zip", false]], "validateinput (class in port.helpers.validate)": [[0, "port.helpers.validate.ValidateInput", false]], "value (port.api.props.radioitem attribute)": [[0, "port.api.props.RadioItem.value", false]], "visualizations (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.visualizations", false]]}, "objects": {"port.api": [[0, 0, 0, "-", "props"]], "port.api.props": [[0, 1, 1, "", "PropsUIFooter"], [0, 1, 1, "", "PropsUIHeader"], [0, 1, 1, "", "PropsUIPageDonation"], [0, 1, 1, "", "PropsUIPageEnd"], [0, 1, 1, "", "PropsUIPromptConfirm"], [0, 1, 1, "", "PropsUIPromptConsentForm"], [0, 1, 1, "", "PropsUIPromptConsentFormTable"], [0, 1, 1, "", "PropsUIPromptFileInput"], [0, 1, 1, "", "PropsUIPromptFileInputMultiple"], [0, 1, 1, "", "PropsUIPromptProgress"], [0, 1, 1, "", "PropsUIPromptQuestionnaire"], [0, 1, 1, "", "PropsUIPromptRadioInput"], [0, 1, 1, "", "PropsUIQuestionMultipleChoice"], [0, 1, 1, "", "PropsUIQuestionMultipleChoiceCheckbox"], [0, 1, 1, "", "PropsUIQuestionOpen"], [0, 1, 1, "", "RadioItem"], [0, 1, 1, "", "Translatable"], [0, 1, 1, "", "Translations"]], "port.api.props.PropsUIFooter": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIHeader": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPageDonation": [[0, 3, 1, "", "footer"], [0, 3, 1, "", "header"], [0, 3, 1, "", "platform"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPageEnd": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptConfirm": [[0, 3, 1, "", "cancel"], [0, 3, 1, "", "ok"], [0, 3, 1, "", "text"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptConsentForm": [[0, 3, 1, "", "description"], [0, 3, 1, "", "donate_button"], [0, 3, 1, "", "donate_question"], [0, 3, 1, "", "id"], [0, 3, 1, "", "meta_tables"], [0, 3, 1, "", "tables"], [0, 2, 1, "", "toDict"], [0, 2, 1, "", "translate_meta_tables"], [0, 2, 1, "", "translate_tables"]], "port.api.props.PropsUIPromptConsentFormTable": [[0, 3, 1, "", "data_frame"], [0, 3, 1, "", "delete_option"], [0, 3, 1, "", "description"], [0, 3, 1, "", "folded"], [0, 3, 1, "", "id"], [0, 3, 1, "", "title"], [0, 2, 1, "", "toDict"], [0, 3, 1, "", "visualizations"]], "port.api.props.PropsUIPromptFileInput": [[0, 3, 1, "", "description"], [0, 3, 1, "", "extensions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptFileInputMultiple": [[0, 3, 1, "", "description"], [0, 3, 1, "", "extensions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptProgress": [[0, 3, 1, "", "description"], [0, 3, 1, "", "message"], [0, 3, 1, "", "percentage"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptQuestionnaire": [[0, 3, 1, "", "description"], [0, 3, 1, "", "questions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptRadioInput": [[0, 3, 1, "", "description"], [0, 3, 1, "", "items"], [0, 3, 1, "", "title"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionMultipleChoice": [[0, 3, 1, "", "choices"], [0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionMultipleChoiceCheckbox": [[0, 3, 1, "", "choices"], [0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionOpen": [[0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.RadioItem": [[0, 3, 1, "", "id"], [0, 3, 1, "", "value"]], "port.api.props.Translatable": [[0, 2, 1, "", "toDict"]], "port.helpers": [[0, 0, 0, "-", "extraction_helpers"], [0, 0, 0, "-", "port_helpers"], [0, 0, 0, "-", "validate"]], "port.helpers.extraction_helpers": [[0, 4, 1, "", "FileNotFoundInZipError"], [0, 5, 1, "", "dict_denester"], [0, 5, 1, "", "epoch_to_iso"], [0, 5, 1, "", "extract_file_from_zip"], [0, 5, 1, "", "find_item"], [0, 5, 1, "", "find_items"], [0, 5, 1, "", "fix_ascii_string"], [0, 5, 1, "", "fix_latin1_string"], [0, 5, 1, "", "json_dumper"], [0, 5, 1, "", "read_csv_from_bytes"], [0, 5, 1, "", "read_csv_from_bytes_to_df"], [0, 5, 1, "", "read_json_from_bytes"], [0, 5, 1, "", "read_json_from_file"], [0, 5, 1, "", "replace_months"], [0, 5, 1, "", "sort_isotimestamp_empty_timestamp_last"]], "port.helpers.port_helpers": [[0, 5, 1, "", "donate"], [0, 5, 1, "", "exit"], [0, 5, 1, "", "generate_file_prompt"], [0, 5, 1, "", "generate_retry_prompt"], [0, 5, 1, "", "generate_review_data_prompt"], [0, 5, 1, "", "render_end_page"], [0, 5, 1, "", "render_page"]], "port.helpers.validate": [[0, 1, 1, "", "DDPCategory"], [0, 1, 1, "", "DDPFiletype"], [0, 1, 1, "", "Language"], [0, 1, 1, "", "StatusCode"], [0, 1, 1, "", "ValidateInput"], [0, 5, 1, "", "validate_zip"]], "port.helpers.validate.ValidateInput": [[0, 3, 1, "", "ddp_categories_lookup"], [0, 2, 1, "", "get_status_code_id"], [0, 2, 1, "", "infer_ddp_category"], [0, 2, 1, "", "set_current_status_code_by_id"], [0, 3, 1, "", "status_codes_lookup"]], "port.platforms": [[0, 0, 0, "-", "chatgpt"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "exception", "Python exception"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:exception", "5": "py:function"}, "terms": {"": [0, 2, 6, 9], "0": [0, 2, 8], "00": 0, "04": 6, "09": 0, "1": [0, 2, 6, 8, 9], "10": 6, "15": 0, "16": 6, "1632139200": 0, "18": 6, "1m": 8, "2": [0, 6, 7], "2021": 0, "2023": 0, "2048": 8, "20t12": 0, "22": 6, "24": 9, "25": 0, "2gib": 2, "3": [0, 6], "30": 0, "3000": 6, "301": 8, "365": 8, "4": 0, "443": 8, "5": [0, 3], "6": 0, "8": 0, "80": 8, "8000": 8, "8601": 0, "A": [0, 2, 3, 4], "As": [2, 3, 4, 9], "At": 2, "But": [2, 9], "By": 9, "For": [0, 2, 8], "If": [0, 2, 3, 4, 6, 8, 9], "In": [2, 3, 4, 6, 8, 9], "It": [0, 2, 3, 6, 9], "On": 2, "That": [2, 6], "The": [0, 3, 5, 9], "These": [2, 6, 9], "To": 6, "With": 2, "__type__": 2, "abbrevi": 0, "about": [0, 3, 6, 8, 9, 10], "abov": [2, 9], "absens": 9, "absolut": 3, "accept": [0, 8], "access": [3, 4, 7], "accident": 9, "account": [2, 8], "act": 0, "actual": 2, "ad": [2, 4, 5, 10], "adapt": [2, 4], "add": 9, "addit": 0, "addition": 7, "addzero": 9, "admin": 8, "administ": 4, "administr": 6, "after": [0, 2, 4], "ag": 0, "again": [0, 2], "against": 0, "aggreg": 2, "ak": 2, "al": 2, "alic": 0, "all": [0, 2, 3, 8, 9], "all_ddp_categori": 0, "all_status_cod": 0, "allow": [0, 2, 8], "along": 9, "alreadi": [2, 6], "also": [2, 3, 9], "altern": [2, 9], "although": 2, "alwai": [0, 3, 6, 8, 9], "amd": 6, "amount": [3, 6], "an": [0, 2, 3, 4, 6, 8, 9], "ander": 2, "ani": [0, 2, 9], "annot": 2, "anoth": 3, "answer": 0, "anticip": 3, "anyth": 2, "api": [8, 10], "app": [2, 6, 8], "app_admin": 8, "app_data": 8, "app_domain": 8, "app_mail_domain": 8, "app_nam": 8, "apparaat": 2, "append": 2, "appli": 4, "applic": [0, 2, 8, 9], "approach": [2, 3], "appropri": 3, "ar": [0, 2, 3, 4, 6, 8, 9], "architectur": 2, "archiv": 0, "arg": 8, "around": [2, 8], "arrai": 2, "articl": [2, 4, 10], "ascii": 0, "asd": 0, "ask": 2, "assembl": 0, "assembli": 2, "assign": [0, 9], "associ": 0, "assum": 0, "assumpt": 3, "attempt": [0, 3], "attent": [2, 3], "aumzobj7ojn58xilmgvcwtyrcsallwdcglwdcglwdcgwdchdhsjahdghaggdgdgt7moqyjtjba": 8, "authent": 8, "auto": 9, "automat": 9, "avail": [2, 3, 4, 6], "avoid": 9, "aw": 4, "ax": 9, "axi": 9, "azur": [4, 8], "b": 0, "back": [2, 4], "backend": 2, "bad": 2, "badzipfil": [0, 2], "banner": 8, "barchart": 9, "base": [0, 9], "bash": 6, "basi": 9, "basic": 6, "beautifulsoup4": 2, "becaus": [2, 3, 6, 8, 9], "becom": 9, "befor": [0, 3], "begin": 2, "behind": 2, "being": 2, "believ": 3, "below": [2, 6, 9], "benefit": 2, "bespok": [2, 4], "best": [4, 6, 9], "bestand": 2, "better": 2, "between": [3, 6, 9], "bilingu": 0, "binari": 2, "bio": 6, "bit": [6, 9], "bite": 3, "board": 2, "bob": 0, "bodi": [0, 2], "bool": [0, 2], "boolean": 9, "both": 6, "bottom": 2, "break": [2, 9], "brew": 6, "brief": 0, "bring": 2, "browser": [2, 6, 8], "budget": 4, "buffer": 0, "build": [2, 6], "builtin": 8, "bullet": 3, "bundl": 8, "button": [0, 2], "bytesio": 0, "c": 0, "caf\u00e9": 0, "calcul": 9, "call": [2, 4, 6], "can": [0, 2, 3, 4, 6, 8, 9, 10], "cancel": [0, 2], "cannot": [0, 2, 6], "careful": 3, "carefulli": 3, "case": [0, 2, 3, 9], "cat1": 0, "categori": 0, "catogori": 0, "caught": 0, "caus": [3, 6], "cd": [6, 8], "cert": 8, "certain": [3, 6, 9], "challeng": 3, "chanc": 3, "chang": [2, 3, 6, 9], "channel": 9, "charact": 0, "characterist": 0, "chatgpt": 1, "check": [2, 3, 6, 8], "checkbox": 0, "checklist": [2, 5, 10], "checkout": [2, 10], "choic": [0, 3], "choos": [2, 6], "chose": 6, "claim": 3, "class": 0, "clearli": 3, "click": [2, 4], "client": 8, "clone": [2, 6, 8], "cloud": 8, "cmd": 6, "code": [0, 2, 3, 9], "collect": [0, 2, 3], "colour": 9, "column": [2, 3, 9], "column1": 0, "column2": 0, "column3": 0, "com": [6, 8], "combin": [0, 2, 6], "come": [2, 4], "command": [0, 2, 4, 6], "commandsystemdon": [0, 2], "commandsystemexit": [0, 2], "commanduirend": [0, 2], "common": [3, 9], "commonli": 2, "commun": 3, "compar": [0, 2, 3], "compat": [0, 2], "compil": 2, "complain": 8, "complet": [0, 2, 3, 4, 6], "complex": 2, "complic": 9, "compon": [0, 2, 9], "compress": 2, "compress_s": 2, "concept": 7, "conf": 8, "configur": [0, 2, 4], "confirm": 0, "connect": [6, 8, 9], "consent": [0, 2, 4, 9], "consent_prompt": 2, "consent_prompt_result": 2, "consid": 3, "consol": [2, 8], "constraint": 2, "construct": 2, "contact": 4, "contain": [0, 2, 3, 5, 6, 9], "container_nam": 8, "content": [0, 2, 3], "context": 6, "continu": [0, 2, 6, 8], "conveni": [6, 9], "convers": 0, "convert": 0, "core": [2, 8], "corner": 6, "correct": 2, "cost": 2, "could": [0, 2, 3, 4, 6, 8, 9], "couldn": 0, "count": 9, "count_pct": 9, "countri": 9, "coupl": [2, 3, 6], "cours": 3, "cover": [6, 9], "cpu": 6, "crash": [2, 3], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "creativ": 2, "crt": 8, "crucial": 3, "csv": [0, 2], "current": [0, 2, 9], "current_ddp_categori": 0, "current_status_cod": 0, "custom": [0, 2, 8], "cycl": 9, "d": 0, "d3i": [6, 8], "dai": [8, 9], "dan": 2, "dat": 2, "data": [0, 5, 8], "data_fram": [0, 9], "data_frame_df": 0, "data_frame_dict": 0, "datadon": [4, 7], "datafram": [0, 2, 3], "date": [0, 3], "datetim": 9, "db": 8, "db_host": 8, "db_name": 8, "db_pass": 8, "db_user": 8, "dd": 9, "ddp": [0, 2, 3], "ddp_categori": 0, "ddp_categories_lookup": 0, "ddp_filetyp": 0, "ddpcategori": [0, 1], "ddpfiletyp": [0, 1], "ddthh": 9, "de": 2, "deal": [0, 3], "decemb": 9, "decid": 2, "decod": 0, "def": 2, "default": [0, 2, 3, 6, 9], "defin": [0, 2], "delet": [0, 9], "delete_opt": 0, "deliveri": 0, "denest": [0, 3], "depend": [3, 6, 9], "depends_on": 8, "deploi": 2, "deploy": [5, 10], "descript": [0, 2], "design": [2, 4], "detail": [6, 7, 8], "detect": 3, "determin": [2, 9], "develop": [2, 3, 4, 6, 8], "devic": [0, 2, 6], "df": [0, 2, 9], "dict": [0, 3, 9], "dict_denest": [0, 1, 3], "dictionari": [0, 3, 9], "did": [2, 3], "differ": [0, 2, 3, 9], "directli": [3, 4, 9], "directori": 2, "discuss": [4, 6], "displai": [0, 3, 9], "distribut": 6, "distro": 6, "divers": [2, 3], "divid": 9, "do": [2, 3, 4, 6, 8, 9], "docker": [5, 10], "document": 8, "doe": [3, 5, 6], "doesn": 9, "domain": 9, "don": [2, 3], "donat": [0, 1, 5, 9], "donate_button": 0, "donate_quest": 0, "done": [0, 2, 4], "dont": 2, "down": 9, "download": [2, 3, 4, 6], "driver": 2, "due": [2, 3], "dure": [0, 3, 6], "dutch": [0, 4, 9], "dynam": 9, "e": [2, 4, 9], "each": [0, 9], "easi": 3, "easier": 9, "educ": 9, "een": 2, "effici": 2, "einfra": 4, "either": [0, 9], "element": 2, "els": 2, "empti": [0, 9], "en": [0, 2, 9], "encod": 0, "encount": [2, 3, 6], "end": [0, 2, 3, 4], "engin": [2, 3], "english": [0, 2, 9], "enjoy": 9, "enough": 2, "entertain": 9, "enumer": 0, "environ": 8, "epoch": 0, "epoch_timestamp": 0, "epoch_to_iso": [0, 1], "equival": 0, "error": [0, 2, 3, 6], "essenc": 2, "etc": [2, 8], "ethic": 2, "eu": [4, 7], "even": 3, "event": 8, "everi": [3, 9], "everyth": 8, "ex": 6, "exact": 9, "exampl": [0, 2, 3, 5, 6], "example1": 0, "example2": 0, "except": [0, 2], "exclud": 2, "exist": [2, 3], "exit": [0, 1, 2], "exit_port": 2, "expect": [3, 6], "experi": [2, 3], "explan": [0, 9], "explicitli": 9, "explor": 9, "extens": 0, "extern": 2, "extract": [1, 2, 3, 9, 10], "extract_file_from_zip": [0, 1], "extract_the_data_you_are_interested_in": 2, "extracted_data": 2, "extracted_data_in_a_dictionari": 2, "extracted_fil": 0, "extraction_help": 0, "ey": 9, "eyra": 4, "f": 2, "fact": 3, "fail": [0, 2, 3], "failur": 3, "fair": 3, "fals": [0, 2, 9], "familiar": 6, "fast": 2, "feedback": 3, "fiction": 2, "file": [0, 2, 3, 4, 6, 8], "file1": 0, "file2": 0, "file_list_input": 0, "file_prompt": 2, "file_prompt_result": 2, "file_s": 2, "file_to_extract": 0, "filenam": 0, "filenotfoundinziperror": [0, 1], "filesnam": 2, "fill": 9, "final": 9, "find": [0, 2, 3, 4, 6, 10], "find_item": [0, 1, 3], "fine": [2, 6], "finish": 2, "first": [0, 3, 5, 9], "fit": 2, "fix": [0, 9], "fix_ascii_str": [0, 1], "fix_latin1_str": [0, 1], "flag": 0, "flatten": [0, 3], "float": 0, "flow": [0, 2, 3, 4], "fold": 0, "folder": [3, 8], "follow": [2, 4, 6, 8, 9, 10], "footer": [0, 2], "forget": [2, 6], "fork": [2, 8], "form": [0, 4, 9], "format": [0, 2, 3, 9], "forward": 8, "found": [0, 2], "frame": 0, "framework": 2, "free": [4, 8], "frequenc": 9, "fresh": 3, "from": [0, 3, 4, 6], "frontend": 2, "frustrat": 3, "full": [2, 3, 9], "fulli": 0, "function": [0, 2, 9], "furthermor": 9, "futur": [2, 4], "g": 9, "ga": 2, "gap": 9, "garbag": 3, "gave": 3, "geen": 2, "gekozen": 2, "gener": [0, 2, 6], "generate_consent_prompt": 2, "generate_file_prompt": [0, 1, 2], "generate_retry_prompt": [0, 1, 2], "generate_review_data_prompt": [0, 1], "get": [0, 2, 3, 4, 6, 8, 10], "get_status_code_id": 0, "getinfo": 2, "getvalu": 0, "git": 6, "github": 6, "give": [3, 6, 9], "given": [0, 9], "gmail": 8, "go": [2, 3, 4, 6, 8], "goe": [2, 3], "good": [2, 9], "google_sign_in_client_id": 8, "google_sign_in_client_secret": 8, "grant": 4, "graph": 9, "great": 8, "greather": 0, "greet": 6, "group": [0, 3, 9], "group_bi": 9, "guid": 5, "guidanc": 7, "ha": [2, 3, 4, 9], "handl": [2, 3, 9], "happen": [3, 6], "happi": 2, "hard": 2, "have": [2, 3, 4, 6, 7, 9], "haven": 6, "head": 0, "header": [0, 2], "header_text": 0, "heavili": [3, 9], "heeft": 2, "height": 9, "helaa": 2, "hello": 0, "help": [3, 6, 9], "helper": [1, 10], "here": [2, 3, 4, 6, 9, 10], "het": 2, "hh": 9, "high": 2, "homebrew": 6, "host": [4, 8], "hour": 9, "hour_cycl": 9, "how": [4, 5, 6, 7, 8, 9], "howev": 2, "html": [2, 3], "http": [6, 8], "http_host": 8, "http_upgrad": 8, "huge": [2, 9], "human": 3, "i": [0, 2, 3, 6, 8, 9, 10], "icon": 6, "id": [0, 4, 8, 9], "idea": [0, 2], "ident": 9, "identifi": 0, "implement": 9, "impli": 9, "import": [2, 9], "incent": 3, "includ": [0, 2], "index": 10, "indic": 0, "infer": 0, "infer_ddp_categori": 0, "infin": 0, "info": [0, 2], "inform": [0, 2, 4, 6, 9], "infra": 6, "inhoud": 2, "initi": 0, "inp": 0, "input": [0, 2, 9], "input_str": 0, "ins": 8, "insert": 0, "inspect": 3, "instagram": 3, "instal": [5, 10], "instanc": 0, "instead": [2, 3, 6, 9], "instruct": [0, 2, 3, 4, 6, 8, 9], "instructi": 2, "int": [0, 2], "integ": 0, "intel": 6, "interact": 2, "interes": 2, "interest": [2, 3, 4], "interfac": 2, "intern": 0, "interpret": 9, "interv": 9, "intric": 2, "introduct": [5, 10], "invalid": 0, "investig": 3, "involv": 3, "io": 0, "ip": 8, "is_data_valid": 2, "iso": [0, 9], "issu": [2, 6], "item": [0, 4, 9], "its": [2, 3, 6], "j": [2, 6], "januari": 9, "json": [0, 2, 3, 6], "json_byt": 0, "json_dump": [0, 1], "json_fil": 0, "json_str": [0, 2], "juist": 2, "just": [2, 3, 4, 6, 9], "keep": [2, 3], "kei": [0, 2, 3, 4, 6, 8, 9], "kernel": 6, "key1": 3, "key2": 3, "key3": 3, "key_that_sometimes_is_called_something_differ": 3, "key_to_match": 0, "key_which_value_you_w": 3, "keyout": 8, "ki": 2, "kiezen": 2, "kind": 2, "klik": 2, "know": [3, 4, 6, 9], "knowledg": [3, 6], "known": 0, "known_fil": 0, "kunnen": 2, "label": [0, 9], "land": 4, "languag": [0, 1, 2, 3, 9], "last": [0, 9], "latest": 8, "latin1": 0, "lead": 2, "learn": [3, 8, 10], "least": [0, 2, 3, 6], "left": [2, 6], "less": [2, 3, 6], "let": 2, "level": 2, "lib": 8, "librari": 2, "like": 2, "limit": 5, "list": [0, 2, 3, 4, 9], "listen": 8, "live": 3, "ll": 9, "load": 2, "loadpackag": 2, "local": 6, "localhost": [6, 8], "locat": [0, 8], "log": [0, 2, 3, 4], "logic": 2, "login": 8, "long": 9, "longer": 2, "look": [0, 2, 3, 6, 9], "lookup": 0, "lot": [2, 6], "lower": 6, "lxml": 2, "mai": 0, "main": [0, 2, 9], "make": [2, 3, 6, 9], "manag": [6, 8], "manipul": 6, "manual": [2, 6], "match": [0, 3], "matter": 2, "max": 9, "mean": [2, 3, 4, 6, 9], "mei": 0, "mention": 9, "messag": [0, 6], "meta": [0, 2], "meta_t": 0, "method": 9, "micropip": 2, "might": [2, 3, 4, 6], "mime": 0, "min": 9, "mind": [2, 3], "minim": 3, "miss": 9, "mistak": 3, "mm": 9, "mobil": 2, "mock": 6, "modul": [0, 2, 10], "mondai": 9, "month": 0, "month_cycl": 9, "more": [2, 3, 6, 8, 9], "most": [2, 3, 9], "mostli": 9, "motherboard": 6, "much": [2, 3, 6], "multi": 0, "multipl": [0, 3, 9], "must": [0, 2], "nalic": 0, "name": [0, 2, 3, 4, 8, 9], "namelist": 2, "natur": [2, 3], "nbob": 0, "necessari": 8, "need": [0, 2, 3, 6, 8, 9], "nest": [0, 3], "nested_dict": 0, "never": 6, "new": [0, 4, 6], "newkei": 8, "newli": 4, "next": [0, 2, 5, 10], "nice": 9, "niet": 2, "nl": [2, 9], "node": [6, 8], "nodej": 6, "non": [0, 3], "none": 0, "normal": [2, 9], "note": [0, 6, 8, 9], "noth": 2, "notic": [2, 9], "now": [2, 6, 8, 9], "npm": [2, 4, 6], "number": [2, 3, 9], "numer": [0, 9], "numpi": 2, "object": [0, 9], "oblig": 3, "obtain": 8, "occur": [0, 2, 9], "off": 2, "offer": 4, "offici": [6, 8], "often": [2, 3], "ok": [0, 2], "onder": 2, "one": [2, 3, 9], "onli": [0, 2, 3, 6, 9], "op": 2, "open": [0, 4, 6], "openid": 8, "openssl": 8, "oper": 6, "opgeslagen": 2, "opnieuw": 2, "opportun": 3, "optim": 2, "option": [0, 9], "order": [2, 3, 6, 8], "organ": [3, 4], "origin": 0, "other": [0, 2], "otherwis": [0, 2], "our": [3, 7, 8, 9], "out": [2, 3, 5, 10], "outlin": 8, "outsid": 6, "over": 3, "overslaan": 2, "overview": 9, "own": [3, 4, 5, 6, 9, 10], "packag": [0, 3, 6], "page": [0, 2, 4, 9, 10], "pai": [2, 3], "pair": [0, 3], "panda": [0, 2], "paramet": 0, "pars": [0, 2, 3], "part": [0, 9], "particip": [0, 3, 4, 9], "pass": 0, "password": [6, 8], "past": 8, "path": [0, 3, 6], "path_to_zip": 0, "payloadjson": 2, "payloadstr": 2, "payloadtru": 2, "pct": 9, "pd": [0, 2, 3], "peopl": 3, "per": 2, "percentag": [0, 9], "perform": [2, 3, 9], "period": 9, "person": [2, 3], "phoenix": 8, "pick": 9, "pipx": 6, "pixel": 9, "place": [0, 2, 10], "plai": 8, "plain": [0, 2], "platform": [1, 2, 3, 4, 8, 10], "platform_nam": 0, "pleas": [2, 4], "poetri": 6, "point": 3, "polici": [2, 4], "popul": [2, 3], "port": [1, 2, 6, 8, 10], "port_help": 0, "portal": 4, "portion": 3, "possibl": [3, 9], "possibli": 2, "postgr": 8, "postgres_data": 8, "postgres_db": 8, "postgres_password": 8, "postgres_us": 8, "postgresql": 8, "potenti": 0, "powershel": 6, "practic": 2, "pre": 5, "predefin": 0, "prefer": [3, 6], "prepar": 7, "preprocess": 9, "prerequisit": 5, "present": [0, 2, 3, 6], "preserv": 2, "press": 2, "pretti": 2, "prevent": 3, "previou": [8, 9], "primari": 9, "princip": 3, "print": [0, 2], "prior": [0, 2], "privaci": [2, 4], "probabl": [3, 9], "probeer": 2, "problem": [3, 6], "process": [0, 2, 3, 9], "processingwork": 2, "produc": 7, "product": 8, "program": [3, 6], "progress": [0, 2], "project": 3, "prompt": [0, 2], "prop": [1, 2, 9, 10], "propsuifoot": [0, 1, 2], "propsuihead": [0, 1, 2], "propsuipagedon": [0, 1, 2], "propsuipageend": [0, 1, 2], "propsuipromptconfirm": [0, 1, 2], "propsuipromptconsentform": [0, 1, 2], "propsuipromptconsentformt": [0, 1, 2, 9], "propsuipromptfileinput": [0, 1, 2], "propsuipromptfileinputmultipl": [0, 1], "propsuipromptprogress": [0, 1], "propsuipromptquestionnair": [0, 1], "propsuipromptradioinput": [0, 1], "propsuiquestionmultiplechoic": [0, 1], "propsuiquestionmultiplechoicecheckbox": [0, 1], "propsuiquestionopen": [0, 1], "proto": 8, "provid": [0, 3, 4, 7, 8, 9], "proxi": 8, "proxy_http_vers": 8, "proxy_max_temp_file_s": 8, "proxy_pass": 8, "proxy_set_head": 8, "purpos": 0, "put": [2, 8, 9], "py": 9, "py_work": 2, "pyodid": 2, "python": 6, "quarter": 9, "queri": 9, "question": 0, "questionnair": 0, "quit": 3, "qwe": 0, "radio": 0, "radioitem": [0, 1], "rais": 0, "random": 3, "rang": 9, "reach": 0, "react": 2, "read": [0, 3, 8], "read_csv_from_byt": [0, 1], "read_csv_from_bytes_to_df": [0, 1], "read_json_from_byt": [0, 1], "read_json_from_fil": [0, 1], "readi": [3, 8], "readibl": 3, "real": [2, 8], "realiti": [2, 6], "realiz": 4, "realli": 2, "reason": 3, "receiv": [0, 2, 3], "recht": 2, "recommend": [6, 9], "redirect": 8, "refer": [1, 2, 7, 10], "reflect": 2, "regardless": 0, "relat": 6, "releas": 4, "remain": 3, "rememb": 6, "remote_addr": 8, "remov": [0, 9], "render": [0, 2], "render_end_pag": [0, 1, 2], "render_pag": [0, 1, 2], "replac": [0, 8], "replace_month": [0, 1], "repositori": [2, 4, 6], "repres": 0, "represent": 0, "req": 8, "request": [3, 4, 8], "request_uri": 8, "requir": [2, 3, 6, 9], "requisit": 5, "research": [0, 2, 3], "respond": 9, "respons": 3, "restart": 8, "result": [0, 2, 3], "resum": 2, "retri": [0, 2], "retry_prompt": 2, "retry_prompt_result": 2, "return": [0, 2, 8], "reusabl": 2, "revers": 8, "review": [0, 2], "right": 2, "risk": 8, "row": [0, 9], "rsa": 8, "run": [0, 2, 4, 5, 6], "run_first": 0, "runn": 6, "sad": 2, "sai": 9, "same": [3, 9], "sampl": 3, "scenario": 3, "scheme": 8, "scienc": 4, "scope": 6, "screen": [2, 3], "script": [3, 5, 9], "search": [0, 6, 9, 10], "season": 9, "secondari": 9, "secret": 8, "secret_key_bas": 8, "section": 6, "see": [2, 3, 4, 6, 8, 9], "seen": [2, 9], "select": [0, 2, 4, 9], "self": [2, 8], "selfsign": 8, "send": [0, 2], "sens": 9, "sent": [2, 4], "separ": [2, 9], "seri": 0, "seriou": 3, "server": [2, 6, 8], "server_nam": 8, "servic": 8, "session_id": 2, "set": [0, 2, 3, 4, 6, 7, 8, 9], "set_current_status_code_by_id": 0, "sever": 2, "share": [0, 3, 6], "short": 0, "shot": 3, "should": [0, 2, 3, 6, 8, 9], "show": [0, 2, 8], "shown": [0, 2, 9], "sign": 8, "similar": 2, "simpl": 3, "simpli": [7, 9], "singl": [0, 9], "situat": 6, "size": 2, "skip": 2, "slow": [2, 9], "small": 2, "so": [2, 3, 4, 6, 8, 9], "softwar": [4, 6], "solut": [4, 6], "solv": 6, "some": [2, 3, 6, 8, 9], "someth": [2, 4, 6], "somethin": 2, "sometim": 3, "sort": [0, 3], "sort_isotimestamp_empty_timestamp_last": [0, 1], "sort_valu": 0, "sourc": [4, 8], "specif": [0, 4, 5], "specifi": [0, 9], "split": 2, "sport": 9, "src": 2, "ss": 9, "ssl": 8, "ssl_certif": 8, "ssl_certificate_kei": 8, "stacktrac": 3, "start": [3, 5, 6, 8, 10], "static_path": 8, "statist": 9, "statu": 0, "status_cod": 0, "status_codes_lookup": 0, "statuscod": [0, 1], "step": [2, 5, 6], "steward": 2, "still": [2, 3], "stop": 2, "storag": [0, 2], "storage_servic": 8, "store": [0, 2, 4], "str": [0, 2], "straight": 4, "straightforward": 6, "string": [0, 9], "structur": [0, 3, 8], "stuck": 3, "studi": [0, 3, 5, 6, 7, 8], "sub": 9, "submit": [0, 2, 3], "substanti": 2, "substr": 0, "subsystem": 6, "succesfulli": 3, "success": [0, 2], "suggest": 6, "suit": 6, "suitabl": 9, "sum": 9, "sundai": 9, "support": [0, 6, 9], "sure": [2, 3, 6, 9], "survei": 3, "system": [0, 2, 6], "t": [0, 2, 3, 8, 9], "tab": 7, "tabel": 9, "tabl": [0, 2, 5], "table_list": 0, "table_titl": [2, 9], "tableid": 9, "tailor": [2, 3], "take": [2, 3, 9], "target": 3, "task": [0, 3, 5], "tell": 3, "termin": 6, "test": 3, "test_databas": 8, "text": [0, 2], "textcolumn": 9, "textual": 9, "than": [0, 2, 3], "thank": [0, 2], "thats": 2, "thei": [0, 2, 3, 4, 6, 9], "them": [0, 2, 3, 6, 8, 9], "theori": 6, "therebi": 9, "therefor": 3, "thi": [0, 2, 3, 4, 6, 8, 9, 10], "thing": [2, 9], "think": [2, 3], "third": 9, "those": [2, 3], "three": 9, "time": [2, 3, 6], "timestamp": [0, 9], "timestamp_seri": 0, "titel": 9, "titl": [0, 9], "tmp": 8, "todict": 0, "togeth": 2, "token": 9, "too": [2, 3, 6], "tool": 4, "toolkit": 2, "topic": 6, "total": 9, "touch": 2, "tradit": 3, "translat": [0, 1, 2], "translate_meta_t": 0, "translate_t": 0, "trigger": 0, "trivial": 3, "troubl": 6, "true": [0, 2, 9], "try": [0, 3, 5, 6, 10], "turn": 6, "tutori": [2, 4, 8], "tweak": 2, "two": 3, "txt": 0, "type": [0, 9], "typic": 4, "u": 2, "ubuntu": 6, "ui": [0, 2], "unburden": 4, "under": 3, "understand": [2, 6], "unexpect": 0, "unfortun": 2, "uniform": 0, "uninstal": 6, "uniqu": [0, 3, 4], "univers": 4, "unknown": 0, "unsplash_access_kei": 8, "unsplash_app_nam": 8, "until": 2, "up": [2, 3, 4, 5, 7, 8], "updat": 9, "upgrad": 8, "upon": [0, 2], "url": [4, 9], "url_domain": 9, "us": [0, 3, 5, 8, 9], "usabl": 2, "user": [0, 2, 6, 8], "usernam": 6, "utc": 0, "utf": 0, "uw": 2, "v": 6, "valid": [1, 2, 3, 10], "validate_the_participants_input": 2, "validate_zip": [0, 1], "validateinput": [0, 1], "valu": [0, 2, 3, 8, 9], "value_i_want_to_extract": 2, "valuecolumn": 9, "var": 8, "vari": [2, 9], "variabl": [6, 8], "varieti": 2, "variou": 0, "ve": 0, "verder": 2, "verifi": 3, "versa": 6, "version": [2, 3, 6, 8], "verwerken": 2, "vice": 6, "video": [2, 7], "view": 4, "virtual": 6, "vis1": 9, "vis2": 9, "vis3": 9, "vis4": 9, "visual": [0, 5, 10], "visuali": 9, "visualizatoin": 9, "volg": 2, "volum": 8, "vscode": 6, "wa": 2, "wai": [0, 2, 3, 4, 6], "want": [0, 2, 3, 4, 8], "warranti": 4, "we": [2, 3, 6, 7, 8, 9], "web": [2, 6, 8], "websit": 7, "websocket": 8, "weekday_cycl": 9, "weet": 2, "welcom": 10, "well": [2, 8, 9], "went": [2, 8], "what": [0, 2, 3, 4, 6, 9], "when": [0, 3, 4, 6, 9], "whenev": [2, 3], "where": [0, 2, 3, 4, 6, 9], "whether": [0, 3, 6], "which": [0, 2, 3, 6, 8, 9], "while": [2, 3], "who": 4, "whole": 2, "whose": 0, "why": 3, "wide": 9, "wiki": [2, 10], "wildli": 3, "wilt": 2, "wise": 2, "within": [2, 9], "without": 5, "won": [2, 3, 6], "work": [3, 4, 5, 6, 8, 9], "worst": 3, "worth": 3, "would": [2, 3], "wrap": 5, "wrapper": 0, "write": [3, 5, 6], "wrong": [2, 3], "wrote": 2, "x": [8, 9], "x509": 8, "y": 9, "year": 9, "yield": 0, "yoda": [4, 8], "you": [0, 2, 3, 4, 6, 8, 9, 10], "your": [3, 5, 6, 8, 9, 10], "youremail": 8, "yourself": [2, 4], "youtub": [2, 3, 9], "yyyi": 9, "z": 9, "zeker": 2, "zero": [0, 9], "zf": 2, "zfile": 0, "zip": [0, 2, 3, 4], "zip_cont": 2, "zip_fil": 2, "zipfil": [0, 2, 3], "zone": 4, "\u4e16\u754c": 0}, "titles": ["API reference", "API Documentation", "Creating your own donation task", "Data donation checklist", "Deployment of the data donation task", "Articles", "Installation", "Introduction to Data Donation", "Try out Next with Docker", "Adding data visualizations", "The Data Donation Task Documentation"], "titleterms": {"A": 9, "The": [2, 4, 10], "ad": 9, "add": 4, "aggreg": 9, "api": [0, 1, 2], "area": 9, "argument": 9, "articl": 5, "bar": 9, "build": 8, "categor": 9, "categori": 9, "certif": 8, "chart": 9, "chatgpt": 0, "checklist": 3, "choos": 4, "cloud": 4, "commun": 4, "compos": 8, "configur": 8, "contain": 8, "creat": 2, "data": [2, 3, 4, 6, 7, 9, 10], "date": 9, "dateformat": 9, "deploy": 4, "detail": 9, "docker": 8, "document": [1, 10], "doe": 2, "don": 6, "donat": [2, 3, 4, 6, 7, 10], "exampl": 9, "extract": 0, "first": 2, "from": 2, "gener": 9, "googl": 8, "guid": [6, 9], "helper": 0, "how": 2, "i": 4, "imag": 8, "indic": 10, "instal": [2, 6], "introduct": 7, "level": 9, "limit": 2, "line": 9, "linux": 6, "mac": 6, "month": 9, "next": [4, 8], "nginx": 8, "oidc": 8, "option": 4, "osx": 6, "out": 8, "over": 9, "own": 2, "packag": 2, "paid": 4, "particip": 2, "per": 9, "perspect": 2, "platform": 0, "port": 0, "pre": 6, "prerequisit": 8, "prop": 0, "py": 2, "python": 2, "refer": 0, "requisit": 6, "research": 4, "run": 8, "script": 2, "second": 9, "self": 4, "servic": 4, "setup": 8, "should": 4, "spec": 9, "specif": 9, "start": 2, "step": 8, "studi": [2, 4], "surf": 4, "t": 6, "tabl": [9, 10], "task": [2, 4, 6, 10], "text": 9, "time": 9, "tip": 2, "tl": 8, "translat": 9, "try": [2, 8], "unsplash": 8, "up": 9, "us": [2, 4, 6], "usag": 2, "valid": 0, "variabl": 9, "version": 4, "view": 9, "visual": 9, "want": 6, "when": 2, "which": 4, "window": 6, "without": 4, "wordcloud": 9, "work": 2, "wrap": 9, "write": 2, "wsl": 6, "yaml": 8, "yield": 2, "your": [2, 4]}}) \ No newline at end of file