Im letzten Teil der Vorlesung hatten wir uns mit der (multiplen) linearen Regression beschäftigt und diese auf unsere Case-Study angewendet. Dadurch haben Sie das Rüstzeug erhalten um Koeffizienten einer linearen Regression interpretieren zu können. Weiterhin hatten Sie etwas komplexere Regressionen mit Interaktionstermen erstellt und auch diese interpretiert.

Im nun anstehenden Teil der Vorlesung wollen wir uns mit der Kausalität beschäftigen, insbesondere wann Sie (Regressions-)Ergebnisse kausal interpretieren können.

Dafür betrachten wir uns sowohl in dieser Vorlesungseinheit, als auch im sechsten Problem Set eine aktuelle Studie aus dem American Economic Review. Dankenswerterweise haben die Autoren ihre Daten frei zugänglich gemacht und wir können diese selbst analysieren.

Die Studie, welche wir hier betrachten wollen, beschäftigt sich mit Wochenbettdepressionen und deren ökonomischen Konsequenzen. Die Studie untersucht die Behandlung von Wochenbettdepressionen durch psychologische Betreuung:

Baranov, Victoria, Sonia Bhalotra, Pietro Biroli, and Joanna Maselko. 2020. “Maternal Depression, Women’s Empowerment, and Parental Investment: Evidence from a Randomized Controlled Trial.” American Economic Review, 110 (3): 824-59.

Beschreibung des Experiments

Wochenbettdepressionen können bei Müttern während der Schwangerschaft und einige Zeit nach der Geburt auftreten. Schätzungsweise 10% - 20% aller werdenden Mütter leiden weltweit an Wochenbettdepressionen, wobei die Dunkelziffer hoch sein dürfte, insbesondere in den ärmeren Regionen der Welt. Die Folgen einer Wochenbettdepression können langfristige Effekte auf die ganze Familie haben. Neben den negativen Folgen für die Gesundheit der Frau und des Kindes, verursachen Depressionen auch hohe wirtschaftliche Kosten: Beispielsweise können dadurch Frauen nicht mehr arbeiten, oder die Kinder werden vernachlässigt und haben so schlechtere Chancen auf Bildung, ein niedrigeres Einkommen oder eine geringere Empathie.

In dem vorliegenden Experiment wurden insgesamt 3518 Frauen mit klinischer Depression diagnostiziert, von denen 903 als werdende Mütter mit Wochenbettdepressionen identifiziert wurden. Diese werdenen Mütter wurden in die vorliegende Studie aufgenommen und zufällig der Treatment oder Kontrollgruppe zugeteilt. In der Treatment Gruppe erhielten die Mütter mit Wochenbettdepressionen neben der Standardbetreuung durch die Hebamme eine zusätzliche psychologische Betreuung, in der Kontrollgruppe nicht.

Nun fragen Sie sich sicher, ob die Mütter in der Kontrollgruppe nicht einfach selbst psychologische Hilfe organisieren konnten und dadurch der Effekt des Treatments potentiell verzerrt wäre. Jedoch kann ich Sie beruhigen: Das Experiment wurde in Pakistan durchgeführt und es gibt dort laut den Autoren fast kein Angebot an psychologischer Betreuung. Daher ist die Wahrscheinlichkeit das Mütter aus der Kontrollgruppe sich selbst psychologische Hilfe organisiert haben sehr gering.

In der folgenden Grafik sehen Sie die Interventionen innerhalb des Experiments. Die Studie begann im letzten Drittel der Schwangerschaft und die letzte Befragung der Teilnehmerinnen wurde 7 Jahre nach der Studie durchgeführt. Die grünen Striche markieren die Interventionen, konkret die Besuche der Hebamme bei den Müttern.

Quelle: Baranov, Victoria, Sonia Bhalotra, Pietro Biroli, and Joanna Maselko. 2020. “Maternal Depression, Women’s Empowerment, and Parental Investment: Evidence from a Randomized Controlled Trial.” American Economic Review, 110 (3): 824-59.

Deskriptive Analyse

Insgesamt enthält die Studie 394 unterschiedliche Variablen. Diese wollen wir uns nicht alle näher anschauen, sondern wir wollen uns auf die wichtigsten Variablen konzentrieren, welche auch in der Hauptstudie untersucht wurden. Bei diesen Variablen handelt es sich hauptsächlich um Informationen zu den Müttern (Bildungsstand, Alter …) und deren Umfeld (lebt die Großmutter daheim, Bildung des Vaters, …). In einem ersten Schritt wollen wir uns die Daten mittels skimr näher anschauen:

options(scipen = 999)
thp <- read_csv("./data/THP_clean.csv") 

thp %>%
  select(treat, depressed_1y, age_baseline, mo_ht, mo_bmi, edu_mo_baseline, mo_emp, employed_mo_baseline, kids_no, first_child, gender_4sum, femshare, hamd_baseline, bdq_baseline, gaf_baseline, mspss_baseline, var29,  MIL, maternalgma, edu_fa_baseline, employed_fa_baseline, occupation_fa_baseline,  ses_bl_flipped, wealth_baseline_4sum) %>%
  skim()
Data summary
Name Piped data
Number of rows 1203
Number of columns 24
_______________________
Column type frequency:
numeric 24
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
treat 0 1.00 0.51 0.50 0.00 0.00 1.00 1.00 1.00 ▇▁▁▁▇
depressed_1y 412 0.66 0.43 0.49 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▆
age_baseline 300 0.75 26.74 5.11 17.00 23.00 26.00 30.00 45.00 ▃▇▃▂▁
mo_ht 300 0.75 1.56 0.06 1.38 1.52 1.56 1.60 1.74 ▁▃▇▅▁
mo_bmi 300 0.75 23.26 4.07 15.40 20.40 22.70 25.20 46.90 ▆▇▂▁▁
edu_mo_baseline 300 0.75 4.06 4.01 0.00 0.00 5.00 7.00 16.00 ▇▅▂▂▁
mo_emp 300 0.75 0.53 0.50 0.00 0.00 1.00 1.00 1.00 ▇▁▁▁▇
employed_mo_baseline 300 0.75 0.03 0.16 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▁
kids_no 300 0.75 2.24 1.80 0.00 1.00 2.00 3.00 9.00 ▇▇▃▁▁
first_child 0 1.00 0.20 0.40 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▂
gender_4sum 0 1.00 0.49 0.50 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▇
femshare 300 0.75 0.53 0.32 0.00 0.33 0.50 0.71 1.00 ▃▂▇▃▅
hamd_baseline 300 0.75 14.63 4.09 5.00 11.00 14.00 18.00 23.00 ▂▇▆▇▃
bdq_baseline 300 0.75 8.21 2.69 0.00 6.00 8.00 10.00 14.00 ▁▃▇▇▂
gaf_baseline 300 0.75 62.05 5.22 51.00 58.00 62.00 67.00 71.00 ▃▃▇▅▆
mspss_baseline 300 0.75 45.04 16.44 12.00 35.00 44.00 56.00 82.00 ▃▇▇▃▃
var29 300 0.75 0.59 0.49 0.00 0.00 1.00 1.00 1.00 ▆▁▁▁▇
MIL 300 0.75 0.44 0.50 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▆
maternalgma 300 0.75 0.07 0.25 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▁
edu_fa_baseline 300 0.75 7.02 3.96 0.00 5.00 8.00 10.00 16.00 ▅▃▆▇▁
employed_fa_baseline 313 0.74 0.91 0.29 0.00 1.00 1.00 1.00 1.00 ▁▁▁▁▇
occupation_fa_baseline 399 0.67 0.29 0.45 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃
ses_bl_flipped 300 0.75 1.38 0.97 0.00 1.00 1.00 2.00 4.00 ▅▆▇▂▁
wealth_baseline_4sum 300 0.75 0.00 2.00 -4.91 -1.39 -0.23 1.44 5.47 ▂▇▇▅▂

Hier eine Erklärung der wichtigsten Variablen:

  • depressed_1y: Dummy ob eine Frau 1 Jahr nach Entbindung Depressionen hatte.
  • treat: Dummy ob eine Frau in einer Region mit Treatment lebt.
  • age_baseline: Alter bei Eintritt in das Experiment in den letzten drei Monaten der Schwangerschaft.
  • kids_no: Anzahl der Kinder insgesamt.
  • edu_mo/edu_fa: Ausbildungsjahre der Mutter/des Vaters.
  • employed_mo_baseline: Dummy ob die Mutter beim Eintritt in das Experiment gearbeitet hat.
  • incomeindex: Wohlstandsindex des Haushalts bei Eintritt in das Experiment.
  • mspss_baseline: Erhaltene Unterstützung vom sozialen Umfeld. (Skala von 0 bis 60)

Die Meisten unserer Variablen sind nicht komplett vollständig (oft fehlen 300 Beobachtungen, manchmal etwas mehr), was wir bei unserer Analyse bedenken sollten. Doch warum fehlen diese 300 Beobachtungen bei vielen Variablen? Dafür sollten wir uns die Anzahl an Beobachtungen näher anschauen (1203 Beobachtungen). Die 300 Beobachtungen, welche bei den Grundcharakteristika fehlen, lassen sich auf die zusätzliche Kontrollgruppe zurückführen, welche die Autoren in ihrer Befragung 7 Jahre nach der eigentlichen Studie noch mit einbezogen haben. Diese waren nicht in der Grundstudie enthalten. Wir konzentrieren uns in unserer Analyse auf die 903 Mütter, welche in der Hauptstudie untersucht wurden.

Weiterhin sehen wir, dass der Altersdurchschnitt der Mütter in unserem Datensatz bei 26,7 Jahren liegt (age_baseline) und diese im Schnitt bereits etwas mehr als 2 Kinder haben (kids_no). Weiterhin lebt in 49,6% aller Haushalte noch die Stiefoma mit im Haushalt (MIL). Insgesamt 42,6% der Mütter waren nach einem Jahr immer noch depressiv (depressed_1y).

Aus dieser ersten dekriptiven Analyse können wir bereits sehr viel über den Datensatz lernen. Insbesondere die Variable treat lässt uns vermuten, dass es eine Unterteilung in Treatment und Kontrollgruppe gegeben hat (treat = 51%). Allerdings lernen wir noch nichts darüber, wie erfolgreich die Randomisierung in der Studie in Treatment und Kontrollgruppe durchgeführt wurde. Dies können wir aus einer sogenannten Balancing Tabelle ablesen. In dieser Tabelle stellen wir die beobachtbaren Charakteristika der Treatmentgruppe denen der Kontrollgruppe gegenüber. War die Randomisierung erfolgreich, so sollten wir im Durchschnitt zwischen der Treatmentgruppe und der Kontrollgruppe keine Unterschiede in den Grundcharakteristika sehen. D.h. wir sollten gleiche Gruppen erhalten deren einziges Unterscheidungsmerkmal darin besteht getreatet worden zu sein.

Balancing Tabelle

Wir wollen uns eine solche Balancing Tabelle erstellen und betrachten, in wie weit sich die Grundcharakteristika zwischen Treatment und Kontrollgruppe für das Basisjahr, das erste Jahr nach der Intervention, und 7 Jahre nach der Intervention unterscheiden:

#baseline sample
baseline <- thp %>% 
  filter(THP_sample==1) %>%
  select( treat, age_baseline, mo_ht, mo_bmi, edu_mo_baseline, mo_emp, employed_mo_baseline, kids_no, first_child, gender_4sum, femshare, hamd_baseline, bdq_baseline, gaf_baseline, mspss_baseline, var29,  MIL, maternalgma,   edu_fa_baseline, employed_fa_baseline, occupation_fa_baseline,  ses_bl_flipped, wealth_baseline_4sum) %>%
  pivot_longer(cols = -treat, names_to = "variable", values_to = "value") %>%
  group_nest(variable) %>%
  mutate(t.test = map(data, ~tidy(t.test(value ~ treat, data = .x)))) %>%
  unnest(t.test) %>%
  mutate( Mean_Treatment = round(estimate2, 2),
          Mean_Kontrolle = round(estimate1, 2),
    Differenz = -round(estimate, 2),
          Signifikanz = round(p.value,2)) %>%
  select(Mean_Treatment, Mean_Kontrolle, Differenz, Signifikanz)

n.baseline <- thp %>% 
  filter(THP_sample == 1) %>%
  summarise(N = n())

#after one year
one.year <- thp %>% 
  filter(!is.na(attrit) & THP_sample == 1) %>%
  select( treat, age_baseline, mo_ht, mo_bmi, edu_mo_baseline, mo_emp, employed_mo_baseline, kids_no, first_child, gender_4sum, femshare, hamd_baseline, bdq_baseline, gaf_baseline, mspss_baseline, var29,  MIL, maternalgma,   edu_fa_baseline, employed_fa_baseline, occupation_fa_baseline,  ses_bl_flipped, wealth_baseline_4sum) %>%
  pivot_longer(cols = -treat, names_to = "variable", values_to = "value") %>%
  group_nest(variable) %>%
  mutate(t.test = map(data, ~tidy(t.test(value ~ treat, data = .x)))) %>%
  unnest(t.test) %>%
  mutate( Differenz = -round(estimate, 2),
          Signifikanz = round(p.value,2)) %>%
  select(Differenz, Signifikanz)

n.one.year <- thp %>% 
  filter(!is.na(attrit) & THP_sample == 1) %>%
  summarise(N = n())

#after 7 years
seven.years <- thp %>% 
  filter(attrit2 == 0 & THP_sample == 1) %>%
  select( treat, age_baseline, mo_ht, mo_bmi, edu_mo_baseline, mo_emp, employed_mo_baseline, kids_no, first_child, gender_4sum, femshare, hamd_baseline, bdq_baseline, gaf_baseline, mspss_baseline, var29,  MIL, maternalgma,   edu_fa_baseline, employed_fa_baseline, occupation_fa_baseline,  ses_bl_flipped, wealth_baseline_4sum) %>%
  pivot_longer(cols = `age_baseline`:`wealth_baseline_4sum`, names_to = "variable", values_to = "value") %>%
  group_nest(variable) %>%
  mutate(t.test = map(data, ~tidy(t.test(value ~ treat, data = .x)))) %>%
  unnest(t.test) %>%
  mutate( Differenz = -round(estimate, 2),
          Signifikanz = round(p.value,2)) %>%
  select(Differenz, Signifikanz)  

n.seven.years <- thp %>% 
  filter(attrit2 == 0 & THP_sample == 1) %>%
  summarise(N = n())

total <- baseline %>%
#  select(-variable) %>%
  cbind(one.year) %>%
  cbind(seven.years)
  
rownames(total) <- c("Alter der Mutter", "Behinderung", "Bildung des Vaters", "Bildung der Mutter", "Vater berufstätig", "Mutter arbeitet normalerweise", "Kind ist weibl.", "Erstes Kind",  "gaf_baseline", "Anteil an weibl. Kindern", "hamd_baseline", "Parität", "Oma im Haushalt", "Stiefoma im Haushalt", "BMI der Mutter", "mo_emp", "Größe der Mutter (in Meter)",  "Soziale Unterstützung", "Keine handwerkliche Arbeit", "SES", "var29", "Vermögensindex")

            #"Empowered",  "Parität",    "Depressions-Score", "Disability-Score", "General functioning", "Wahrgenommene Hilfe aus dem Umfeld", "Erweiterte Familie", 

total %>%
  kbl(col.names = c("Treatment", "Kontrolle","Differenz","p-Wert", "Differenz", "p-Wert", "Differenz", "p-Wert"), digits = 2, format = "html", 
      caption = "Balancing Tabelle für die Grundcharakteristika") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  kable_paper(full_width = F)  %>%
  add_header_above(c(" ", "Stichprobe Baseline (N = 903)" = 4, "Stichprobe 1-Jahr follow up (N = 704)" = 2, "Stichprobe 7-Jahre follow up (N = 585)" = 2)) %>%
#  row_spec(c(7,9, 11,12,13), bold = T, color = "white", background = "#BBBBBB")  %>%
  footnote(general = "Diese Tabelle testet, wie ausbalanciert die Beobachtungen in der Baseline Stichprobe, dem 1-Jahres follow-up und dem 7-Jahres follow-up sind. In den ersten beiden Spalten wird der Mittelwert für die Treatment bzw. Kontrollgruppe für die Baseline Stichprobe gezeigt. Spalte (3), (5) und (7) zeigen die Differenz zwischen den Mittelwerten der Treatment und Kontrollgruppe für die jeweilige Stichprobe und die Spalten (4), (6) und (8) zeigen die p-Werte und damit ob die einzelnen Mittelwerte statistisch signifikant unterschiedlich voneinander sind.") 
Balancing Tabelle für die Grundcharakteristika
Stichprobe Baseline (N = 903)
Stichprobe 1-Jahr follow up (N = 704)
Stichprobe 7-Jahre follow up (N = 585)
Treatment Kontrolle Differenz p-Wert Differenz p-Wert Differenz p-Wert
Alter der Mutter 0.47 0.40 0.06 0.05 0.08 0.02 0.09 0.04
Behinderung 26.49 27.00 -0.51 0.14 -0.39 0.30 -0.32 0.44
Bildung des Vaters 8.12 8.30 -0.17 0.34 -0.16 0.45 -0.03 0.88
Bildung der Mutter 6.95 7.09 -0.13 0.61 -0.10 0.73 -0.22 0.48
Vater berufstätig 4.24 3.87 0.37 0.17 0.75 0.01 0.71 0.03
Mutter arbeitet normalerweise 0.90 0.91 -0.01 0.53 -0.02 0.50 0.00 0.88
Kind ist weibl. 0.02 0.03 -0.01 0.26 -0.01 0.43 -0.01 0.38
Erstes Kind 0.53 0.52 0.02 0.44 0.00 0.93 0.01 0.84
gaf_baseline 0.19 0.19 0.01 0.82 0.01 0.61 0.01 0.65
Anteil an weibl. Kindern 62.04 62.05 -0.01 0.97 0.35 0.37 0.58 0.18
hamd_baseline 0.52 0.49 0.03 0.34 0.05 0.18 0.06 0.13
Parität 14.82 14.43 0.40 0.15 0.25 0.41 0.31 0.35
Oma im Haushalt 2.16 2.33 -0.17 0.15 -0.29 0.03 -0.34 0.02
Stiefoma im Haushalt 0.08 0.05 0.03 0.07 0.04 0.05 0.03 0.11
BMI der Mutter 23.37 23.13 0.24 0.37 0.15 0.61 0.36 0.28
mo_emp 0.51 0.55 -0.03 0.34 -0.05 0.19 -0.04 0.36
Größe der Mutter (in Meter) 1.56 1.56 0.00 0.32 0.01 0.17 0.01 0.18
Soziale Unterstützung 45.57 44.49 1.08 0.32 1.82 0.13 2.63 0.05
Keine handwerkliche Arbeit 0.28 0.29 -0.01 0.80 0.01 0.86 0.00 0.93
SES 1.38 1.38 0.01 0.91 0.11 0.15 0.12 0.13
var29 0.60 0.57 0.04 0.27 0.05 0.17 0.06 0.18
Vermögensindex 0.03 -0.03 0.06 0.66 0.24 0.11 0.19 0.24
Note:
Diese Tabelle testet, wie ausbalanciert die Beobachtungen in der Baseline Stichprobe, dem 1-Jahres follow-up und dem 7-Jahres follow-up sind. In den ersten beiden Spalten wird der Mittelwert für die Treatment bzw. Kontrollgruppe für die Baseline Stichprobe gezeigt. Spalte (3), (5) und (7) zeigen die Differenz zwischen den Mittelwerten der Treatment und Kontrollgruppe für die jeweilige Stichprobe und die Spalten (4), (6) und (8) zeigen die p-Werte und damit ob die einzelnen Mittelwerte statistisch signifikant unterschiedlich voneinander sind.

Wann nutzt uns eine solche Balancing Tabelle?

Wir sollten eine solche Tabelle immer dann erstellen, wenn wir uns nicht ganz sicher sein können, ob unsere Randomisierung erfolgreich war, d.h. insbesondere bei der Untersuchung von Feldexperimenten.

  1. In solchen Feldexperimenten ist es nicht zu 100% klar, dass die Randomisierung erfolgreich war, denn die tatsächliche Durchführung der Randomisierung liegt nicht gänzlich in der Hand des Forschers (beispielsweise arbeiteten die Forscher in diesem Experiment mit einer NGO zusammen und eventuell hatte die NGO Anreize das besonders viele Frauen getreatet werden). Durch eine Balancing Tabelle schauen wir, ob Treatment und Kontrollgruppe tatsächlich erfolgreich randomisiert wurden.
  2. Ein weiterer Grund, warum wir uns hier die Balancing Tabelle anschauen möchten ist die Attrition (Schwundquote). Es ist völlig normal einige Teilnehmer in Feldexperimenten über die Zeit zu verlieren, da diese nicht antworten, verstorben sind oder aus anderen Gründen nicht mehr am Experiment teilnehmen möchten. Durch die Balancing Tabelle können wir anschauen, ob Attrition selektiv stärker in der Treatment oder Kontrollgruppe war, zumindest auf Basis beobachtbarer Variablen.

Aus dieser Balancing Tabelle lernen wir mehrere Dinge:

  • In den meisten Grundcharakteristika unterscheiden sich Treatment und Kontrollgruppe nicht voneinander.Die Differenz zwischen Treatment und Kontrollgruppe ist meist klein und nicht signifikant. Der t-Test, welchen wir für jede Variable durchgeführt haben testet die Nullhypothese:

\(H_0\): In der Treatment Gruppe zu sein hat keinen Einfluss auf die untersuchte Variable.

  • Einige Variablen sind jedoch signifikant unterschiedlich zwischen Treatment und Kontrollgruppe, insbesondere ob die Oma väterlicherseits oder mütterlicherseits mit im Haushalt lebt.
  • Wir verlieren einige Teilnehmer über die Zeit (903 -> 704 -> 585 Beobachtungen), d.h. wir haben nach 7 Jahren nur noch 64,8% der Mütter, die ursprünglich am Experiment teilgenommen haben, in der Stichprobe. Allerdings scheinen sich die Grundcharakteristika über die Zeit zwischen Treatment und Kontrollgruppe nicht signifikant verändert zu haben. D.h. es scheint keine Selektive Attrition für die Kontrollgrupppe oder die Treatment Gruppe gegeben zu haben. Die Bildung der Mutter und die Parität zwischen Mutter und Vater scheinen zwischen Treatment und Kontrollgruppe außeinander zu driften zwischen Treatment und Kontrollgruppe.

Auf Basis dieser ersten deskriptiven Analyse wollen wir uns tiefer mit den Unterschieden zwischen Treatment und Kontrollgruppe beschäftigen.

Ergebnisse

Grafische Analyse

Im ersten Schritt möchten wir uns die Unterschiede zwischen Treatment und Kontrollgruppe näher anschauen. Insbesondere interessiert uns, ob das Treatment erfolgreich war!

thp %>%
  #filter( !is.na(depressed))  %>%
  select(treat, depressed_6m, depressed_1y, depressed) %>%
  mutate(Baseline = 1) %>%
  pivot_longer( cols = -treat, names_to = "name", values_to = "depression") %>%
  mutate(name = fct_relevel(name, "Baseline", "depressed_6m", "depressed_1y", "depressed"),
         name = fct_recode(name,
                           "6 Monate" = "depressed_6m",
                           "1 Jahr" = "depressed_1y",
                           "7 Jahre" = "depressed"),
         treat_factor = as.factor(ifelse(treat == 1, "Treatment", "Kontrolle"))) %>%
  ggplot(aes(x = name, y = depression, 
             color = treat_factor)) +
  scale_color_manual(values = c("#0072B2", "#E69F00")) +
  stat_summary(geom = "pointrange", 
               fun.data = "mean_se", 
               fun.args = list(mult=2.33)) +
  ylim(0,1) +
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = "bottom") +
  labs(x = NULL, 
       y = "Anteil an Depressionen",
       title = "Treatment Effekte auf den Anteil an Depressionen",
       caption = "Gezeigt wird der Mittelwert der Gruppen inklusive des 99% Konfidenzintervalls.\nEigene Analysen auf Basis von Baranov et al. (2020)") 

An dieser Grafik sehen wir einen besonders starken Effekt des Treatments nach 6 bzw. 12 Monaten. Der Unterschied zwischen Treatment und Kontrollgruppe liegt bei über 30 Prozentpunkten, wobei sich die Treatmentgruppe bereits nach 6 Monaten bei einem Anteil der Depressionen von rund 25% stabilisiert. Insbesondere die schnelle Erholung von der Depression bereits nach 6 Monaten ist für die Treatment Gruppe hoch signifikant und zeigt, wie effektiv die Intervention mit der psychologischen Betreuung war. Jedoch ist es auch wichtig zu sehen, dass auch ohne Treatment eine Erholung in der Kontrollgruppe stattgefunden hat. Diese Erholung ist deutlich schwächer, allerdings würde ein naiver Vergleich von vorher/nachher in der Treatment Gruppe (ohne Experiment) einen viel zu großen Effekt schätzen. Daher ist es wichtig ein solches Experiment zu untersuchen und die Treatment mit der Kontrollgruppe und nicht mit sich selbst zu vergleichen! Auch nach sieben Jahren scheinen Mütter aus der Treatmentgruppe weniger häufig an Depressionen zu leiden (18%) als in der Kontrollgruppe (25%). Jedoch ist dieser Unterschied statistisch nicht signifikant.

Anhand dieser Grafik können wir sehr schön die Effektivität der Intervention beobachten. Insbesondere da es sich bei der psychologischen Betreuung um eine kostengünstige Alternative zu Psychopharmaka handelt (und die psychologische Betreuung bei stillenden Müttern bedenkenlos eingesetzt werden kann) ist dieses Ergebnis beeindruckend.

Regressionsanalyse

In der folgenden Tabelle wollen wir uns die Ergebnisse mittels linearer Regression anschauen, bei der wir zusätzlich auf mögliche Confounder kontrollieren können. Wir wollen uns in diesen Regressionen nur die Ergebnisse für Mütter anschauen, welche auch nach sieben Jahren noch in unserer Stichprobe sind. Hierdurch können wir die Ergebnisse zwischen den einzelnen Jahren besser vergleichen. Im ersten Schritt wollen wir auf keine sonstigen Variablen kontrollieren. Dies sollte bei einem perfekt randomisierten Experiment vollkommen ausreichen. Wir erhalten hierbei die selben Ergebnisse wie in unserem obigen Schaubild! Auch nach der Kontrolle auf viele soziodemografische Variablen erhalten wir sehr ähnliche Ergebnisse. Es zeigt sich, was wir bereits in unserer Balancing Tabelle gesehen haben: Die Randomisierung in Treatment und Kontrollgruppe war erfolgreich. Für uns bedeutet dies: Wir müssen in den folgenden Regressionen auf keine Confounder kontrollieren.

Die Intervention war insbesondere für das erste Jahr extrem erfolgreich, mit einer Reduktion der Depressionen um über 30 Prozentpunkte im Vergleich zur Kontrollgruppe! Nach 7 Jahren gab es auch in der Kontrollgruppe viele Mütter, die sich von der Depression erholt hatten, daher haben sich hier die Kontrollgruppe und die Treatment-Gruppe einander angenähert, aber auch hier leiden Mütter aus der Treatment-Gruppe um 5 - 6 Prozentpunkte weniger häufig (je nach Spezifikation) an Depressionen, wobei diese Koeffizienten statistisch nicht signifikant sind.

reg_dep6m <- lm(depressed_6m ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))
reg_dep6m_long <- lm(depressed_6m ~ treat + age_baseline + age_baseline_sq + employed_mo_baseline + mo_emp + grandmother_baseline + MIL + wealth_baseline + edu_lvl_mo_1 + edu_lvl_mo_2 + edu_lvl_mo_3 + edu_mo_baseline + edu_fa_baseline + kids_no + first_child + hamd_baseline + mspss_baseline + month_int + month_int_sq + doi0 + intervr_1 + intervr_2 + intervr_3 +intervr_4 + intervr_5 + intervr_6 + intervr_7 + intervr_8 + intervr_9, data = filter(thp, attrit2 == 0 & THP_sample == 1))

reg_dep1y <- lm(depressed_1y ~ treat, data =  filter(thp, attrit2 == 0 & THP_sample == 1))
reg_dep1y_long <- lm(depressed_1y ~ treat + age_baseline + age_baseline_sq + employed_mo_baseline + mo_emp + grandmother_baseline + MIL + wealth_baseline + edu_lvl_mo_1 + edu_lvl_mo_2 + edu_lvl_mo_3 + edu_mo_baseline + edu_fa_baseline + kids_no + first_child + hamd_baseline + mspss_baseline + month_int + month_int_sq + doi0 + intervr_1 + intervr_2 + intervr_3 +intervr_4 + intervr_5 + intervr_6 + intervr_7 + intervr_8 + intervr_9, data = filter(thp, attrit2 == 0 & THP_sample == 1))

reg_dep7y <- lm(depressed ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))
reg_dep7y_long <- lm(depressed ~ treat + age_baseline + age_baseline_sq + employed_mo_baseline + mo_emp + grandmother_baseline + MIL + wealth_baseline + edu_lvl_mo_1 + edu_lvl_mo_2 + edu_lvl_mo_3 + edu_mo_baseline + edu_fa_baseline + kids_no + first_child + hamd_baseline + mspss_baseline + month_int + month_int_sq + doi0 + intervr_1 + intervr_2 + intervr_3 +intervr_4 + intervr_5 + intervr_6 + intervr_7 + intervr_8 + intervr_9, data = filter(thp, attrit2 == 0 & THP_sample == 1))

rows <- tribble(~term,          ~reg_dep6m,  ~reg_dep6m_long, ~reg_dep1y, ~reg_dep1y_long, ~reg_dep7y, ~reg_dep7y_long,
                "Kontrollvariablen", "Nein", "Ja", "Nein", "Ja", "Nein", "Ja")

attr(rows, 'position') <- c(3)

modelsummary(list(reg_dep6m, reg_dep6m_long, reg_dep1y, reg_dep1y_long, reg_dep7y, reg_dep7y_long), 
          type = "html",
          keep = "treat",
          coef_rename = c("treat" = "Treatment"),
          add_rows = rows,
          fmt = 2,
          statistic = 'conf.int', 
          conf_level = .99,
          gof_omit = 'DF|Deviance|RMSE|AIC|BIC|Log.Lik|F',
          title = "Depression bei Müttern, mit und ohne Kontrollvariablen") %>%
          add_header_above(c(" " = 1,"Nach 6 Monaten" = 2, "Nach 1 Jahr" = 2, "Nach 7 Jahren" = 2))
Depression bei Müttern, mit und ohne Kontrollvariablen
Nach 6 Monaten
Nach 1 Jahr
Nach 7 Jahren
 (1)   (2)   (3)   (4)   (5)   (6)
Treatment −0.32 −0.32 −0.33 −0.31 −0.07 −0.05
[−0.42, −0.22] [−0.42, −0.22] [−0.43, −0.23] [−0.41, −0.21] [−0.16, 0.03] [−0.14, 0.05]
Kontrollvariablen Nein Ja Nein Ja Nein Ja
Num.Obs. 584 584 584 584 585 585
R2 0.112 0.221 0.115 0.230 0.005 0.165
R2 Adj. 0.110 0.181 0.113 0.192 0.004 0.123

Ökonomische Auswirkungen der Behandlung

Im letzten Schritt möchten wir uns noch die ökonomischen Auswirkungen der Behandlung auf Mütter mit Depressionen anschauen. In Pakistan haben Frauen allgemein nur eine geringe Kontrolle über die finanziellen Ressourcen ihrer Familie. Allerdings würden wir annehmen das bei Frauen mit Depressionen diese Kontrolle noch deutlich kleiner sein dürfte, als bei Müttern ohne Depressionen. Insbesondere da Mütter mit Depressionen vermutlich nicht auch noch mit finanziellen Gegebenheiten belastet werden wollen.

In unserer Studie gibt es sehr viele unterscheidliche Variablen, welche die finanzielle Eigenständigkeit (und andere Größen) der Mütter erfassen. Die Autoren der Studie haben weiterhin aus diese Variablen im Datensatz eigene Indizes erstellt, in denen mehrere Variablen zusammengefasst wurden. Die wichtigsten Indizes wollen wir uns näher anschauen:

  • “Finanziellen Stärkung” der Mutter: Mutter arbeitet, Einkommen der Mutter, Kontrolle der Mutter über die Ausgaben
  • “Monetäres Investment (in das Kind)”: Ausgaben für Schule, Lernmaterialien, sonstige Infos zur Schule und Ausgaben
  • “Zeitliches Investment (in das Kind)”: Wie oft spielen Mutter/Vater mit dem Kind?, oder helfen mit den Hausaufgaben?
  • “Erziehungsstil”: Wie spricht die Mutter mit dem Kind?; welche Art der Disziplinierung wird angewendet?
  • “Fruchtbarkeit”: Wie viele Kinder hatte die Mutter nach dem aktuellen Kind? Perfekte Anzahl an Kindern abgefragt.
reg_financial <- lm(motherfinancial ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1)) 
reg_money <- lm(parentmoney ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))
reg_time<- lm(parenttime ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))
reg_style <- lm(parentstyle ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))
reg_fertility <- lm(fertility_vars ~ treat, data = filter(thp, attrit2 == 0 & THP_sample == 1))


tidy(reg_financial, conf.int = T) %>%
  mutate(term = ifelse( term == "treat", "fin_emp", term))%>%
  bind_rows(tidy(reg_money, conf.int = T)) %>%
  mutate(term = ifelse( term == "treat", "money", term)) %>%
  bind_rows(tidy(reg_time, conf.int = T)) %>%
  mutate(term = ifelse( term == "treat", "time", term)) %>%
  bind_rows(tidy(reg_style, conf.int = T)) %>%
  mutate(term = ifelse( term == "treat", "style", term)) %>%
  bind_rows(tidy(reg_fertility, conf.int = T)) %>%
  mutate(term = ifelse( term == "treat", "fertility", term)) %>%
  filter( term != "(Intercept)") %>%
    mutate(term = fct_relevel(term, "fertility", "style", "time", "money", "fin_emp"),
           term = fct_recode(term,
                           "Finanzielle Stärkung" = "fin_emp",
                           "Monetäre Investments" = "money",
                           "Zeitliche Investments" = "time",
                           "Erziehungsstil" = "style",
                           "Fruchtbarkeit" = "fertility")) %>%
  ggplot(aes(x = term, y=estimate, ymin=conf.low, ymax=conf.high)) +
  geom_pointrange() +
  geom_hline(yintercept = 0, col = "orange") +
  scale_y_continuous(breaks = c(-0.25,0,0.25,0.5)) +
 # ylim(-0.5,0.6) +
  coord_flip() +
  labs(
    x = NULL, y = "Effektgröße als Standardabweichung der Kontrollgruppe",
    title = "Effekt der Intervention auf ökonomische Entscheidungen der Mutter", 
    subtitle = "95% Konfidenzintervall um den Punktschätzer"
    ) +
  theme_minimal()

Die Intervention führte bei der finanziellen Lage der depressiven Mütter zu einer Verbesserung um 0.34 Standardabweichungen (SD), verglichen mit der Kontrollgruppe. Weiterhin wurde 0.35 SD mehr in das Kind investiert (monetär), verglichen mit der Kontrollgruppe und die Eltern spielten 0.31 SD häufiger mit dem Kind als die Eltern der Kontrollgruppe. Diese Ergebnisse sind alle signifikant auf dem 1%-Signifikanzniveau, wie wir in der obigen Grafik sehen können.

Interessanterweise gab es keinen signifikanten Effekt der Intervention auf den Erziehungsstil oder die Fruchtbarkeit (d.h. wie viele Kinder die diese nach dem aktuellen Kind hatten).

Interne Validität

Probleme der Studie: Attrition

Insgesamt sind die Autoren der Studie bemüht auf ein großes Problem ihrer Studie hinzuweisen: Die Attrition, d.h. der Schwund der Teilnehmer in ihrer Stichprobe.

Durch ein Feldexperiment, insbesondere durch die Randomisierung der Teilnehmer in eine Treatment und Kontrollgruppe, ist es möglich sehr viele Probleme bezüglich interner Validität zu lösen. Es gibt keine Confounder mehr, welche die Ergebnisse verzerren können und Selbstselektion o.ä. ist kein Thema. Doch wenn wir eine Studie durchführen, die über sieben Jahre geht, dann bleibt ein Thema, welches durch Randomisierung nicht gelöst werden kann: Die Attrition!

Wenn nun selektiv mehr Teilnehmer in der Treatmentgruppe die Studie verlassen, möglicherweise auch noch auf Grund des Treatments, dann bekommen wir verzerrte Ergebnisse in unseren späteren Analysen, die wir nur sehr schlecht auflösen könnten. Um dem Leser zu zeigen, dass es keine selektive Attrition in unserer Stichprobe gab, sondern das diese für Treatment und Kontrollgruppe ähnlich groß waren hatten wir uns bereits dazu entschlossen eine Balancing Tabelle zu erstellen. Attrition scheint in unserem Fall zwar vorhanden zu sein, doch nicht selektiv nur für die Treatment oder nur für die Kontrollgruppe.

Wenn Sie eine derart lange Studie planen, dann sollten Sie versuchen möglichst viele Informationen über die Teilnehmer an ihrem Experiment zu gewinnen. Anhand dieser Charakteristika können Sie dann untersuchen, in wie weit die Attrition zwischen der Treatment und Kontrollgruppe zufällig oder systematisch war.

Zusammenfassung

Wochenbettdepressionen sind weltweit bei 10 - 20% der werdenden Mütter zu beobachten (wobei die Dunkelziffer hoch sein dürfte). Dabei haben solche Depressionen langfristige Auswirkungen, sowohl auf die Kinder der Frau, als auch auf die Teilhabe der Frau am Arbeitsmarkt. Um die gesellschaftlichen und ökonomischen Kosten von Wochenbettdepressionen einzudämmen wurde hierzu in der vorliegenden Untersuchung ein Experiment durchgeführt in dem eine Treatment Gruppe psychologische Betreuung für die Depressionen angeboten wurde, und der Kontrollgruppe nicht. Diese psychologische Betreuung hatte sehr starke Effekte auf die Depression der Mütter nach einem Jahr. Mütter mit psychologischer Betreuung hatten nur noch in rund 25 Prozent der Fälle eine Depression, in der Kontrollgruppe lag der Anteil bei über 50 Prozent. Auch nach sieben Jahren war noch eine Differenz zwischen Treatment und Kontrollgruppe von 6 Prozentpunkten sichtbar (allerdings nicht mehr statistisch signifikant).

Neben den direkten Effekten in Form eines geringeren Anteils von depressiven Müttern hatte die Intervention den Effekt, dass die Mütter im Treatment in ihrer finanziellen Handhabe unabhängiger wurden und mehr in ihr Kind investierten (sowohl monetär als auch zeitlich). Dies spricht dafür, dass die relativ günstige Intervention durch die psychologische Betreuung sehr erfolgreich war und eine klare Alternative zu Antidepressiva darstellt. Natürlich auch vor dem Hintergrund das stillende Mütter keine Antidepressiva nutzen sollten.

LS0tCnRpdGxlOiAiRXhwZXJpbWVudCB6dXIgQmVoYW5kbHVuZyB2b24gV29jaGVuYmV0dGRlcHJlc3Npb25lbiBiZWkgTcO8dHRlcm4iCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiBjb3NtbwogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShza2ltcikKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KGZvcmNhdHMpCmxpYnJhcnkobW9kZWxzdW1tYXJ5KQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkKYGBgCgpJbSBsZXR6dGVuIFRlaWwgZGVyIFZvcmxlc3VuZyBoYXR0ZW4gd2lyIHVucyBtaXQgZGVyIChtdWx0aXBsZW4pIGxpbmVhcmVuIFJlZ3Jlc3Npb24gYmVzY2jDpGZ0aWd0IHVuZCBkaWVzZSBhdWYgdW5zZXJlIENhc2UtU3R1ZHkgYW5nZXdlbmRldC4gRGFkdXJjaCBoYWJlbiBTaWUgZGFzIFLDvHN0emV1ZyBlcmhhbHRlbiB1bSBLb2VmZml6aWVudGVuIGVpbmVyIGxpbmVhcmVuIFJlZ3Jlc3Npb24gaW50ZXJwcmV0aWVyZW4genUga8O2bm5lbi4gV2VpdGVyaGluIGhhdHRlbiBTaWUgZXR3YXMga29tcGxleGVyZSBSZWdyZXNzaW9uZW4gbWl0IEludGVyYWt0aW9uc3Rlcm1lbiBlcnN0ZWxsdCB1bmQgYXVjaCBkaWVzZSBpbnRlcnByZXRpZXJ0LgoKSW0gbnVuIGFuc3RlaGVuZGVuIFRlaWwgZGVyIFZvcmxlc3VuZyB3b2xsZW4gd2lyIHVucyBtaXQgZGVyIEthdXNhbGl0w6R0IGJlc2Now6RmdGlnZW4sIGluc2Jlc29uZGVyZSB3YW5uIFNpZSAoUmVncmVzc2lvbnMtKUVyZ2Vibmlzc2Uga2F1c2FsIGludGVycHJldGllcmVuIGvDtm5uZW4uIAoKRGFmw7xyIGJldHJhY2h0ZW4gd2lyIHVucyBzb3dvaGwgaW4gZGllc2VyIFZvcmxlc3VuZ3NlaW5oZWl0LCBhbHMgYXVjaCBpbSBzZWNoc3RlbiBQcm9ibGVtIFNldCBlaW5lIGFrdHVlbGxlIFN0dWRpZSBhdXMgZGVtIEFtZXJpY2FuIEVjb25vbWljIFJldmlldy4gRGFua2Vuc3dlcnRlcndlaXNlIGhhYmVuIGRpZSBBdXRvcmVuIGlocmUgRGF0ZW4gZnJlaSB6dWfDpG5nbGljaCBnZW1hY2h0IHVuZCB3aXIga8O2bm5lbiBkaWVzZSBzZWxic3QgYW5hbHlzaWVyZW4uCgpEaWUgU3R1ZGllLCB3ZWxjaGUgd2lyIGhpZXIgYmV0cmFjaHRlbiB3b2xsZW4sIGJlc2Now6RmdGlndCBzaWNoIG1pdCBXb2NoZW5iZXR0ZGVwcmVzc2lvbmVuIHVuZCBkZXJlbiDDtmtvbm9taXNjaGVuIEtvbnNlcXVlbnplbi4gRGllIFN0dWRpZSB1bnRlcnN1Y2h0IGRpZSBCZWhhbmRsdW5nIHZvbiBXb2NoZW5iZXR0ZGVwcmVzc2lvbmVuIGR1cmNoIHBzeWNob2xvZ2lzY2hlIEJldHJldXVuZzoKCkJhcmFub3YsIFZpY3RvcmlhLCBTb25pYSBCaGFsb3RyYSwgUGlldHJvIEJpcm9saSwgYW5kIEpvYW5uYSBNYXNlbGtvLiAyMDIwLiAiTWF0ZXJuYWwgRGVwcmVzc2lvbiwgV29tZW4ncyBFbXBvd2VybWVudCwgYW5kIFBhcmVudGFsIEludmVzdG1lbnQ6IEV2aWRlbmNlIGZyb20gYSBSYW5kb21pemVkIENvbnRyb2xsZWQgVHJpYWwuIiBBbWVyaWNhbiBFY29ub21pYyBSZXZpZXcsIDExMCAoMyk6IDgyNC01OS4gCgojIEJlc2NocmVpYnVuZyBkZXMgRXhwZXJpbWVudHMKCldvY2hlbmJldHRkZXByZXNzaW9uZW4ga8O2bm5lbiBiZWkgTcO8dHRlcm4gd8OkaHJlbmQgZGVyIFNjaHdhbmdlcnNjaGFmdCB1bmQgZWluaWdlIFplaXQgbmFjaCBkZXIgR2VidXJ0IGF1ZnRyZXRlbi4gU2Now6R0enVuZ3N3ZWlzZSAxMCUgLSAyMCUgYWxsZXIgd2VyZGVuZGVuIE3DvHR0ZXIgbGVpZGVuIHdlbHR3ZWl0IGFuIFdvY2hlbmJldHRkZXByZXNzaW9uZW4sIHdvYmVpIGRpZSBEdW5rZWx6aWZmZXIgaG9jaCBzZWluIGTDvHJmdGUsIGluc2Jlc29uZGVyZSBpbiBkZW4gw6RybWVyZW4gUmVnaW9uZW4gZGVyIFdlbHQuIERpZSBGb2xnZW4gZWluZXIgV29jaGVuYmV0dGRlcHJlc3Npb24ga8O2bm5lbiBsYW5nZnJpc3RpZ2UgRWZmZWt0ZSBhdWYgZGllIGdhbnplIEZhbWlsaWUgaGFiZW4uIE5lYmVuIGRlbiBuZWdhdGl2ZW4gRm9sZ2VuIGbDvHIgZGllIEdlc3VuZGhlaXQgZGVyIEZyYXUgdW5kIGRlcyBLaW5kZXMsIHZlcnVyc2FjaGVuIERlcHJlc3Npb25lbiBhdWNoIGhvaGUgd2lydHNjaGFmdGxpY2hlIEtvc3RlbjogQmVpc3BpZWxzd2Vpc2Uga8O2bm5lbiBkYWR1cmNoIEZyYXVlbiBuaWNodCBtZWhyIGFyYmVpdGVuLCBvZGVyIGRpZSBLaW5kZXIgd2VyZGVuIHZlcm5hY2hsw6Rzc2lndCB1bmQgaGFiZW4gc28gc2NobGVjaHRlcmUgQ2hhbmNlbiBhdWYgQmlsZHVuZywgZWluIG5pZWRyaWdlcmVzIEVpbmtvbW1lbiBvZGVyIGVpbmUgZ2VyaW5nZXJlIEVtcGF0aGllLiAKCkluIGRlbSB2b3JsaWVnZW5kZW4gRXhwZXJpbWVudCB3dXJkZW4gaW5zZ2VzYW10IDM1MTggRnJhdWVuIG1pdCBrbGluaXNjaGVyIERlcHJlc3Npb24gZGlhZ25vc3RpemllcnQsIHZvbiBkZW5lbiA5MDMgYWxzIHdlcmRlbmRlIE3DvHR0ZXIgbWl0IFdvY2hlbmJldHRkZXByZXNzaW9uZW4gaWRlbnRpZml6aWVydCB3dXJkZW4uIERpZXNlIHdlcmRlbmVuIE3DvHR0ZXIgd3VyZGVuIGluIGRpZSB2b3JsaWVnZW5kZSBTdHVkaWUgYXVmZ2Vub21tZW4gdW5kIHp1ZsOkbGxpZyBkZXIgVHJlYXRtZW50IG9kZXIgS29udHJvbGxncnVwcGUgenVnZXRlaWx0LiBJbiBkZXIgVHJlYXRtZW50IEdydXBwZSBlcmhpZWx0ZW4gZGllIE3DvHR0ZXIgbWl0IFdvY2hlbmJldHRkZXByZXNzaW9uZW4gbmViZW4gZGVyIFN0YW5kYXJkYmV0cmV1dW5nIGR1cmNoIGRpZSBIZWJhbW1lIGVpbmUgenVzw6R0emxpY2hlIHBzeWNob2xvZ2lzY2hlIEJldHJldXVuZywgaW4gZGVyIEtvbnRyb2xsZ3J1cHBlIG5pY2h0LgoKTnVuIGZyYWdlbiBTaWUgc2ljaCBzaWNoZXIsIG9iIGRpZSBNw7x0dGVyIGluIGRlciBLb250cm9sbGdydXBwZSBuaWNodCBlaW5mYWNoIHNlbGJzdCBwc3ljaG9sb2dpc2NoZSBIaWxmZSBvcmdhbmlzaWVyZW4ga29ubnRlbiB1bmQgZGFkdXJjaCBkZXIgRWZmZWt0IGRlcyBUcmVhdG1lbnRzIHBvdGVudGllbGwgdmVyemVycnQgd8OkcmUuIEplZG9jaCBrYW5uIGljaCBTaWUgYmVydWhpZ2VuOiBEYXMgRXhwZXJpbWVudCB3dXJkZSBpbiBQYWtpc3RhbiBkdXJjaGdlZsO8aHJ0IHVuZCBlcyBnaWJ0IGRvcnQgbGF1dCBkZW4gQXV0b3JlbiBmYXN0IGtlaW4gQW5nZWJvdCBhbiBwc3ljaG9sb2dpc2NoZXIgQmV0cmV1dW5nLiBEYWhlciBpc3QgZGllIFdhaHJzY2hlaW5saWNoa2VpdCBkYXMgTcO8dHRlciBhdXMgZGVyIEtvbnRyb2xsZ3J1cHBlIHNpY2ggc2VsYnN0IHBzeWNob2xvZ2lzY2hlIEhpbGZlIG9yZ2FuaXNpZXJ0IGhhYmVuIHNlaHIgZ2VyaW5nLgoKSW4gZGVyIGZvbGdlbmRlbiBHcmFmaWsgc2VoZW4gU2llIGRpZSBJbnRlcnZlbnRpb25lbiBpbm5lcmhhbGIgZGVzIEV4cGVyaW1lbnRzLiBEaWUgU3R1ZGllIGJlZ2FubiBpbSBsZXR6dGVuIERyaXR0ZWwgZGVyIFNjaHdhbmdlcnNjaGFmdCB1bmQgZGllIGxldHp0ZSBCZWZyYWd1bmcgZGVyIFRlaWxuZWhtZXJpbm5lbiB3dXJkZSA3IEphaHJlIG5hY2ggZGVyIFN0dWRpZSBkdXJjaGdlZsO8aHJ0LiBEaWUgZ3LDvG5lbiBTdHJpY2hlIG1hcmtpZXJlbiBkaWUgSW50ZXJ2ZW50aW9uZW4sIGtvbmtyZXQgZGllIEJlc3VjaGUgZGVyIEhlYmFtbWUgYmVpIGRlbiBNw7x0dGVybi4KCmBgYHtyLCBlY2hvID0gRkFMU0V9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIuLi9zbGlkZXMvZmlncy9FeHBlcmltZW50LnBuZyIpCmBgYAoKUXVlbGxlOiBCYXJhbm92LCBWaWN0b3JpYSwgU29uaWEgQmhhbG90cmEsIFBpZXRybyBCaXJvbGksIGFuZCBKb2FubmEgTWFzZWxrby4gMjAyMC4gIk1hdGVybmFsIERlcHJlc3Npb24sIFdvbWVuJ3MgRW1wb3dlcm1lbnQsIGFuZCBQYXJlbnRhbCBJbnZlc3RtZW50OiBFdmlkZW5jZSBmcm9tIGEgUmFuZG9taXplZCBDb250cm9sbGVkIFRyaWFsLiIgQW1lcmljYW4gRWNvbm9taWMgUmV2aWV3LCAxMTAgKDMpOiA4MjQtNTkuCgojIyBEZXNrcmlwdGl2ZSBBbmFseXNlCgpJbnNnZXNhbXQgZW50aMOkbHQgZGllIFN0dWRpZSAzOTQgdW50ZXJzY2hpZWRsaWNoZSBWYXJpYWJsZW4uIERpZXNlIHdvbGxlbiB3aXIgdW5zIG5pY2h0IGFsbGUgbsOkaGVyIGFuc2NoYXVlbiwgc29uZGVybiB3aXIgd29sbGVuIHVucyBhdWYgZGllIHdpY2h0aWdzdGVuIFZhcmlhYmxlbiBrb256ZW50cmllcmVuLCB3ZWxjaGUgYXVjaCBpbiBkZXIgSGF1cHRzdHVkaWUgdW50ZXJzdWNodCB3dXJkZW4uIEJlaSBkaWVzZW4gVmFyaWFibGVuIGhhbmRlbHQgZXMgc2ljaCBoYXVwdHPDpGNobGljaCB1bSBJbmZvcm1hdGlvbmVuIHp1IGRlbiBNw7x0dGVybiAoQmlsZHVuZ3NzdGFuZCwgQWx0ZXIgLi4uKSB1bmQgZGVyZW4gVW1mZWxkIChsZWJ0IGRpZSBHcm/Dn211dHRlciBkYWhlaW0sIEJpbGR1bmcgZGVzIFZhdGVycywgLi4uKS4gSW4gZWluZW0gZXJzdGVuIFNjaHJpdHQgd29sbGVuIHdpciB1bnMgZGllIERhdGVuIG1pdHRlbHMgc2tpbXIgbsOkaGVyIGFuc2NoYXVlbjoKCmBgYHtyfQpvcHRpb25zKHNjaXBlbiA9IDk5OSkKdGhwIDwtIHJlYWRfY3N2KCIuL2RhdGEvVEhQX2NsZWFuLmNzdiIpIAoKdGhwICU+JQogIHNlbGVjdCh0cmVhdCwgZGVwcmVzc2VkXzF5LCBhZ2VfYmFzZWxpbmUsIG1vX2h0LCBtb19ibWksIGVkdV9tb19iYXNlbGluZSwgbW9fZW1wLCBlbXBsb3llZF9tb19iYXNlbGluZSwga2lkc19ubywgZmlyc3RfY2hpbGQsIGdlbmRlcl80c3VtLCBmZW1zaGFyZSwgaGFtZF9iYXNlbGluZSwgYmRxX2Jhc2VsaW5lLCBnYWZfYmFzZWxpbmUsIG1zcHNzX2Jhc2VsaW5lLCB2YXIyOSwgIE1JTCwgbWF0ZXJuYWxnbWEsIGVkdV9mYV9iYXNlbGluZSwgZW1wbG95ZWRfZmFfYmFzZWxpbmUsIG9jY3VwYXRpb25fZmFfYmFzZWxpbmUsICBzZXNfYmxfZmxpcHBlZCwgd2VhbHRoX2Jhc2VsaW5lXzRzdW0pICU+JQogIHNraW0oKQoKYGBgCgoKSGllciBlaW5lIEVya2zDpHJ1bmcgZGVyIHdpY2h0aWdzdGVuIFZhcmlhYmxlbjoKCi0gZGVwcmVzc2VkXzF5OiBEdW1teSBvYiBlaW5lIEZyYXUgMSBKYWhyIG5hY2ggRW50YmluZHVuZyBEZXByZXNzaW9uZW4gaGF0dGUuCi0gdHJlYXQ6IER1bW15IG9iIGVpbmUgRnJhdSBpbiBlaW5lciBSZWdpb24gbWl0IFRyZWF0bWVudCBsZWJ0LgotIGFnZV9iYXNlbGluZTogQWx0ZXIgYmVpIEVpbnRyaXR0IGluIGRhcyBFeHBlcmltZW50IGluIGRlbiBsZXR6dGVuIGRyZWkgTW9uYXRlbiBkZXIgU2Nod2FuZ2Vyc2NoYWZ0LgotIGtpZHNfbm86IEFuemFobCBkZXIgS2luZGVyIGluc2dlc2FtdC4KLSBlZHVfbW8vZWR1X2ZhOiBBdXNiaWxkdW5nc2phaHJlIGRlciBNdXR0ZXIvZGVzIFZhdGVycy4KLSBlbXBsb3llZF9tb19iYXNlbGluZTogRHVtbXkgb2IgZGllIE11dHRlciBiZWltIEVpbnRyaXR0IGluIGRhcyBFeHBlcmltZW50IGdlYXJiZWl0ZXQgaGF0LgotIGluY29tZWluZGV4OiBXb2hsc3RhbmRzaW5kZXggZGVzIEhhdXNoYWx0cyBiZWkgRWludHJpdHQgaW4gZGFzIEV4cGVyaW1lbnQuCi0gbXNwc3NfYmFzZWxpbmU6IEVyaGFsdGVuZSBVbnRlcnN0w7x0enVuZyB2b20gc296aWFsZW4gVW1mZWxkLiAoU2thbGEgdm9uIDAgYmlzIDYwKQoKRGllIE1laXN0ZW4gdW5zZXJlciBWYXJpYWJsZW4gc2luZCBuaWNodCBrb21wbGV0dCB2b2xsc3TDpG5kaWcgKG9mdCBmZWhsZW4gMzAwIEJlb2JhY2h0dW5nZW4sIG1hbmNobWFsIGV0d2FzIG1laHIpLCB3YXMgd2lyIGJlaSB1bnNlcmVyIEFuYWx5c2UgYmVkZW5rZW4gc29sbHRlbi4gRG9jaCB3YXJ1bSBmZWhsZW4gZGllc2UgMzAwIEJlb2JhY2h0dW5nZW4gYmVpIHZpZWxlbiBWYXJpYWJsZW4/IERhZsO8ciBzb2xsdGVuIHdpciB1bnMgZGllIEFuemFobCBhbiBCZW9iYWNodHVuZ2VuIG7DpGhlciBhbnNjaGF1ZW4gKDEyMDMgQmVvYmFjaHR1bmdlbikuIERpZSAzMDAgQmVvYmFjaHR1bmdlbiwgd2VsY2hlIGJlaSBkZW4gR3J1bmRjaGFyYWt0ZXJpc3Rpa2EgZmVobGVuLCBsYXNzZW4gc2ljaCBhdWYgZGllIHp1c8OkdHpsaWNoZSBLb250cm9sbGdydXBwZSB6dXLDvGNrZsO8aHJlbiwgd2VsY2hlIGRpZSBBdXRvcmVuIGluIGlocmVyIEJlZnJhZ3VuZyA3IEphaHJlIG5hY2ggZGVyIGVpZ2VudGxpY2hlbiBTdHVkaWUgbm9jaCBtaXQgZWluYmV6b2dlbiBoYWJlbi4gRGllc2Ugd2FyZW4gbmljaHQgaW4gZGVyIEdydW5kc3R1ZGllIGVudGhhbHRlbi4gV2lyIGtvbnplbnRyaWVyZW4gdW5zIGluIF91bnNlcmVyXyBBbmFseXNlIGF1ZiBkaWUgOTAzIE3DvHR0ZXIsIHdlbGNoZSBpbiBkZXIgSGF1cHRzdHVkaWUgdW50ZXJzdWNodCB3dXJkZW4uIAoKV2VpdGVyaGluIHNlaGVuIHdpciwgZGFzcyBkZXIgQWx0ZXJzZHVyY2hzY2huaXR0IGRlciBNw7x0dGVyIGluIHVuc2VyZW0gRGF0ZW5zYXR6IGJlaSAyNiw3IEphaHJlbiBsaWVndCAoYWdlX2Jhc2VsaW5lKSB1bmQgZGllc2UgaW0gU2Nobml0dCBiZXJlaXRzIGV0d2FzIG1laHIgYWxzIDIgS2luZGVyIGhhYmVuIChraWRzX25vKS4gV2VpdGVyaGluIGxlYnQgaW4gNDksNiUgYWxsZXIgSGF1c2hhbHRlIG5vY2ggZGllIFN0aWVmb21hIG1pdCBpbSBIYXVzaGFsdCAoTUlMKS4gSW5zZ2VzYW10IDQyLDYlIGRlciBNw7x0dGVyIHdhcmVuIG5hY2ggZWluZW0gSmFociBpbW1lciBub2NoIGRlcHJlc3NpdiAoZGVwcmVzc2VkXzF5KS4KCkF1cyBkaWVzZXIgZXJzdGVuIGRla3JpcHRpdmVuIEFuYWx5c2Uga8O2bm5lbiB3aXIgYmVyZWl0cyBzZWhyIHZpZWwgw7xiZXIgZGVuIERhdGVuc2F0eiBsZXJuZW4uIEluc2Jlc29uZGVyZSBkaWUgVmFyaWFibGUgYHRyZWF0YCBsw6Rzc3QgdW5zIHZlcm11dGVuLCBkYXNzIGVzIGVpbmUgVW50ZXJ0ZWlsdW5nIGluIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgZ2VnZWJlbiBoYXQgKHRyZWF0ID0gNTElKS4gQWxsZXJkaW5ncyBsZXJuZW4gd2lyIG5vY2ggbmljaHRzIGRhcsO8YmVyLCB3aWUgZXJmb2xncmVpY2ggZGllIFJhbmRvbWlzaWVydW5nIGluIGRlciBTdHVkaWUgaW4gVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSBkdXJjaGdlZsO8aHJ0IHd1cmRlLiBEaWVzIGvDtm5uZW4gd2lyIGF1cyBlaW5lciBzb2dlbmFubnRlbiBCYWxhbmNpbmcgVGFiZWxsZSBhYmxlc2VuLiBJbiBkaWVzZXIgVGFiZWxsZSBzdGVsbGVuIHdpciBkaWUgYmVvYmFjaHRiYXJlbiBDaGFyYWt0ZXJpc3Rpa2EgZGVyIFRyZWF0bWVudGdydXBwZSBkZW5lbiBkZXIgS29udHJvbGxncnVwcGUgZ2VnZW7DvGJlci4gCldhciBkaWUgUmFuZG9taXNpZXJ1bmcgZXJmb2xncmVpY2gsIHNvIHNvbGx0ZW4gd2lyIGltIER1cmNoc2Nobml0dCB6d2lzY2hlbiBkZXIgVHJlYXRtZW50Z3J1cHBlIHVuZCBkZXIgS29udHJvbGxncnVwcGUga2VpbmUgVW50ZXJzY2hpZWRlIGluIGRlbiBHcnVuZGNoYXJha3RlcmlzdGlrYSBzZWhlbi4gRC5oLiB3aXIgc29sbHRlbiBnbGVpY2hlIEdydXBwZW4gZXJoYWx0ZW4gZGVyZW4gZWluemlnZXMgVW50ZXJzY2hlaWR1bmdzbWVya21hbCBkYXJpbiBiZXN0ZWh0IGdldHJlYXRldCB3b3JkZW4genUgc2Vpbi4KCiMjIEJhbGFuY2luZyBUYWJlbGxlCgpXaXIgd29sbGVuIHVucyBlaW5lIHNvbGNoZSBCYWxhbmNpbmcgVGFiZWxsZSBlcnN0ZWxsZW4gdW5kIGJldHJhY2h0ZW4sIGluIHdpZSB3ZWl0IHNpY2ggZGllIEdydW5kY2hhcmFrdGVyaXN0aWthIHp3aXNjaGVuIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgZsO8ciBkYXMgQmFzaXNqYWhyLCBkYXMgZXJzdGUgSmFociBuYWNoIGRlciBJbnRlcnZlbnRpb24sIHVuZCA3IEphaHJlIG5hY2ggZGVyIEludGVydmVudGlvbiB1bnRlcnNjaGVpZGVuOgoKYGBge3J9CiNiYXNlbGluZSBzYW1wbGUKYmFzZWxpbmUgPC0gdGhwICU+JSAKICBmaWx0ZXIoVEhQX3NhbXBsZT09MSkgJT4lCiAgc2VsZWN0KCB0cmVhdCwgYWdlX2Jhc2VsaW5lLCBtb19odCwgbW9fYm1pLCBlZHVfbW9fYmFzZWxpbmUsIG1vX2VtcCwgZW1wbG95ZWRfbW9fYmFzZWxpbmUsIGtpZHNfbm8sIGZpcnN0X2NoaWxkLCBnZW5kZXJfNHN1bSwgZmVtc2hhcmUsIGhhbWRfYmFzZWxpbmUsIGJkcV9iYXNlbGluZSwgZ2FmX2Jhc2VsaW5lLCBtc3Bzc19iYXNlbGluZSwgdmFyMjksICBNSUwsIG1hdGVybmFsZ21hLCAgIGVkdV9mYV9iYXNlbGluZSwgZW1wbG95ZWRfZmFfYmFzZWxpbmUsIG9jY3VwYXRpb25fZmFfYmFzZWxpbmUsICBzZXNfYmxfZmxpcHBlZCwgd2VhbHRoX2Jhc2VsaW5lXzRzdW0pICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gLXRyZWF0LCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQogIGdyb3VwX25lc3QodmFyaWFibGUpICU+JQogIG11dGF0ZSh0LnRlc3QgPSBtYXAoZGF0YSwgfnRpZHkodC50ZXN0KHZhbHVlIH4gdHJlYXQsIGRhdGEgPSAueCkpKSkgJT4lCiAgdW5uZXN0KHQudGVzdCkgJT4lCiAgbXV0YXRlKCBNZWFuX1RyZWF0bWVudCA9IHJvdW5kKGVzdGltYXRlMiwgMiksCiAgICAgICAgICBNZWFuX0tvbnRyb2xsZSA9IHJvdW5kKGVzdGltYXRlMSwgMiksCiAgICBEaWZmZXJlbnogPSAtcm91bmQoZXN0aW1hdGUsIDIpLAogICAgICAgICAgU2lnbmlmaWthbnogPSByb3VuZChwLnZhbHVlLDIpKSAlPiUKICBzZWxlY3QoTWVhbl9UcmVhdG1lbnQsIE1lYW5fS29udHJvbGxlLCBEaWZmZXJlbnosIFNpZ25pZmlrYW56KQoKbi5iYXNlbGluZSA8LSB0aHAgJT4lIAogIGZpbHRlcihUSFBfc2FtcGxlID09IDEpICU+JQogIHN1bW1hcmlzZShOID0gbigpKQoKI2FmdGVyIG9uZSB5ZWFyCm9uZS55ZWFyIDwtIHRocCAlPiUgCiAgZmlsdGVyKCFpcy5uYShhdHRyaXQpICYgVEhQX3NhbXBsZSA9PSAxKSAlPiUKICBzZWxlY3QoIHRyZWF0LCBhZ2VfYmFzZWxpbmUsIG1vX2h0LCBtb19ibWksIGVkdV9tb19iYXNlbGluZSwgbW9fZW1wLCBlbXBsb3llZF9tb19iYXNlbGluZSwga2lkc19ubywgZmlyc3RfY2hpbGQsIGdlbmRlcl80c3VtLCBmZW1zaGFyZSwgaGFtZF9iYXNlbGluZSwgYmRxX2Jhc2VsaW5lLCBnYWZfYmFzZWxpbmUsIG1zcHNzX2Jhc2VsaW5lLCB2YXIyOSwgIE1JTCwgbWF0ZXJuYWxnbWEsICAgZWR1X2ZhX2Jhc2VsaW5lLCBlbXBsb3llZF9mYV9iYXNlbGluZSwgb2NjdXBhdGlvbl9mYV9iYXNlbGluZSwgIHNlc19ibF9mbGlwcGVkLCB3ZWFsdGhfYmFzZWxpbmVfNHN1bSkgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtdHJlYXQsIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lCiAgZ3JvdXBfbmVzdCh2YXJpYWJsZSkgJT4lCiAgbXV0YXRlKHQudGVzdCA9IG1hcChkYXRhLCB+dGlkeSh0LnRlc3QodmFsdWUgfiB0cmVhdCwgZGF0YSA9IC54KSkpKSAlPiUKICB1bm5lc3QodC50ZXN0KSAlPiUKICBtdXRhdGUoIERpZmZlcmVueiA9IC1yb3VuZChlc3RpbWF0ZSwgMiksCiAgICAgICAgICBTaWduaWZpa2FueiA9IHJvdW5kKHAudmFsdWUsMikpICU+JQogIHNlbGVjdChEaWZmZXJlbnosIFNpZ25pZmlrYW56KQoKbi5vbmUueWVhciA8LSB0aHAgJT4lIAogIGZpbHRlcighaXMubmEoYXR0cml0KSAmIFRIUF9zYW1wbGUgPT0gMSkgJT4lCiAgc3VtbWFyaXNlKE4gPSBuKCkpCgojYWZ0ZXIgNyB5ZWFycwpzZXZlbi55ZWFycyA8LSB0aHAgJT4lIAogIGZpbHRlcihhdHRyaXQyID09IDAgJiBUSFBfc2FtcGxlID09IDEpICU+JQogIHNlbGVjdCggdHJlYXQsIGFnZV9iYXNlbGluZSwgbW9faHQsIG1vX2JtaSwgZWR1X21vX2Jhc2VsaW5lLCBtb19lbXAsIGVtcGxveWVkX21vX2Jhc2VsaW5lLCBraWRzX25vLCBmaXJzdF9jaGlsZCwgZ2VuZGVyXzRzdW0sIGZlbXNoYXJlLCBoYW1kX2Jhc2VsaW5lLCBiZHFfYmFzZWxpbmUsIGdhZl9iYXNlbGluZSwgbXNwc3NfYmFzZWxpbmUsIHZhcjI5LCAgTUlMLCBtYXRlcm5hbGdtYSwgICBlZHVfZmFfYmFzZWxpbmUsIGVtcGxveWVkX2ZhX2Jhc2VsaW5lLCBvY2N1cGF0aW9uX2ZhX2Jhc2VsaW5lLCAgc2VzX2JsX2ZsaXBwZWQsIHdlYWx0aF9iYXNlbGluZV80c3VtKSAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IGBhZ2VfYmFzZWxpbmVgOmB3ZWFsdGhfYmFzZWxpbmVfNHN1bWAsIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lCiAgZ3JvdXBfbmVzdCh2YXJpYWJsZSkgJT4lCiAgbXV0YXRlKHQudGVzdCA9IG1hcChkYXRhLCB+dGlkeSh0LnRlc3QodmFsdWUgfiB0cmVhdCwgZGF0YSA9IC54KSkpKSAlPiUKICB1bm5lc3QodC50ZXN0KSAlPiUKICBtdXRhdGUoIERpZmZlcmVueiA9IC1yb3VuZChlc3RpbWF0ZSwgMiksCiAgICAgICAgICBTaWduaWZpa2FueiA9IHJvdW5kKHAudmFsdWUsMikpICU+JQogIHNlbGVjdChEaWZmZXJlbnosIFNpZ25pZmlrYW56KSAgCgpuLnNldmVuLnllYXJzIDwtIHRocCAlPiUgCiAgZmlsdGVyKGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkgJT4lCiAgc3VtbWFyaXNlKE4gPSBuKCkpCgp0b3RhbCA8LSBiYXNlbGluZSAlPiUKIyAgc2VsZWN0KC12YXJpYWJsZSkgJT4lCiAgY2JpbmQob25lLnllYXIpICU+JQogIGNiaW5kKHNldmVuLnllYXJzKQogIApyb3duYW1lcyh0b3RhbCkgPC0gYygiQWx0ZXIgZGVyIE11dHRlciIsICJCZWhpbmRlcnVuZyIsICJCaWxkdW5nIGRlcyBWYXRlcnMiLCAiQmlsZHVuZyBkZXIgTXV0dGVyIiwgIlZhdGVyIGJlcnVmc3TDpHRpZyIsICJNdXR0ZXIgYXJiZWl0ZXQgbm9ybWFsZXJ3ZWlzZSIsICJLaW5kIGlzdCB3ZWlibC4iLCAiRXJzdGVzIEtpbmQiLCAgImdhZl9iYXNlbGluZSIsICJBbnRlaWwgYW4gd2VpYmwuIEtpbmRlcm4iLCAiaGFtZF9iYXNlbGluZSIsICJQYXJpdMOkdCIsICJPbWEgaW0gSGF1c2hhbHQiLCAiU3RpZWZvbWEgaW0gSGF1c2hhbHQiLCAiQk1JIGRlciBNdXR0ZXIiLCAibW9fZW1wIiwgIkdyw7bDn2UgZGVyIE11dHRlciAoaW4gTWV0ZXIpIiwgICJTb3ppYWxlIFVudGVyc3TDvHR6dW5nIiwgIktlaW5lIGhhbmR3ZXJrbGljaGUgQXJiZWl0IiwgIlNFUyIsICJ2YXIyOSIsICJWZXJtw7ZnZW5zaW5kZXgiKQoKICAgICAgICAgICAgIyJFbXBvd2VyZWQiLCAgIlBhcml0w6R0IiwgICAgIkRlcHJlc3Npb25zLVNjb3JlIiwgIkRpc2FiaWxpdHktU2NvcmUiLCAiR2VuZXJhbCBmdW5jdGlvbmluZyIsICJXYWhyZ2Vub21tZW5lIEhpbGZlIGF1cyBkZW0gVW1mZWxkIiwgIkVyd2VpdGVydGUgRmFtaWxpZSIsIAoKdG90YWwgJT4lCiAga2JsKGNvbC5uYW1lcyA9IGMoIlRyZWF0bWVudCIsICJLb250cm9sbGUiLCJEaWZmZXJlbnoiLCJwLVdlcnQiLCAiRGlmZmVyZW56IiwgInAtV2VydCIsICJEaWZmZXJlbnoiLCAicC1XZXJ0IiksIGRpZ2l0cyA9IDIsIGZvcm1hdCA9ICJodG1sIiwgCiAgICAgIGNhcHRpb24gPSAiQmFsYW5jaW5nIFRhYmVsbGUgZsO8ciBkaWUgR3J1bmRjaGFyYWt0ZXJpc3Rpa2EiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpKSAlPiUKICBrYWJsZV9wYXBlcihmdWxsX3dpZHRoID0gRikgICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIsICJTdGljaHByb2JlIEJhc2VsaW5lIChOID0gOTAzKSIgPSA0LCAiU3RpY2hwcm9iZSAxLUphaHIgZm9sbG93IHVwIChOID0gNzA0KSIgPSAyLCAiU3RpY2hwcm9iZSA3LUphaHJlIGZvbGxvdyB1cCAoTiA9IDU4NSkiID0gMikpICU+JQojICByb3dfc3BlYyhjKDcsOSwgMTEsMTIsMTMpLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNCQkJCQkIiKSAgJT4lCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJEaWVzZSBUYWJlbGxlIHRlc3RldCwgd2llIGF1c2JhbGFuY2llcnQgZGllIEJlb2JhY2h0dW5nZW4gaW4gZGVyIEJhc2VsaW5lIFN0aWNocHJvYmUsIGRlbSAxLUphaHJlcyBmb2xsb3ctdXAgdW5kIGRlbSA3LUphaHJlcyBmb2xsb3ctdXAgc2luZC4gSW4gZGVuIGVyc3RlbiBiZWlkZW4gU3BhbHRlbiB3aXJkIGRlciBNaXR0ZWx3ZXJ0IGbDvHIgZGllIFRyZWF0bWVudCBiencuIEtvbnRyb2xsZ3J1cHBlIGbDvHIgZGllIEJhc2VsaW5lIFN0aWNocHJvYmUgZ2V6ZWlndC4gU3BhbHRlICgzKSwgKDUpIHVuZCAoNykgemVpZ2VuIGRpZSBEaWZmZXJlbnogendpc2NoZW4gZGVuIE1pdHRlbHdlcnRlbiBkZXIgVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSBmw7xyIGRpZSBqZXdlaWxpZ2UgU3RpY2hwcm9iZSB1bmQgZGllIFNwYWx0ZW4gKDQpLCAoNikgdW5kICg4KSB6ZWlnZW4gZGllIHAtV2VydGUgdW5kIGRhbWl0IG9iIGRpZSBlaW56ZWxuZW4gTWl0dGVsd2VydGUgc3RhdGlzdGlzY2ggc2lnbmlmaWthbnQgdW50ZXJzY2hpZWRsaWNoIHZvbmVpbmFuZGVyIHNpbmQuIikgCgoKYGBgCgoqKldhbm4gbnV0enQgdW5zIGVpbmUgc29sY2hlIEJhbGFuY2luZyBUYWJlbGxlPyoqCgpXaXIgc29sbHRlbiBlaW5lIHNvbGNoZSBUYWJlbGxlIGltbWVyIGRhbm4gZXJzdGVsbGVuLCB3ZW5uIHdpciB1bnMgbmljaHQgZ2FueiBzaWNoZXIgc2VpbiBrw7ZubmVuLCBvYiB1bnNlcmUgUmFuZG9taXNpZXJ1bmcgZXJmb2xncmVpY2ggd2FyLCBkLmguIGluc2Jlc29uZGVyZSBiZWkgZGVyIFVudGVyc3VjaHVuZyB2b24gRmVsZGV4cGVyaW1lbnRlbi4gCgoxLiBJbiBzb2xjaGVuIEZlbGRleHBlcmltZW50ZW4gaXN0IGVzIG5pY2h0IHp1IDEwMCUga2xhciwgZGFzcyBkaWUgUmFuZG9taXNpZXJ1bmcgZXJmb2xncmVpY2ggd2FyLCBkZW5uIGRpZSB0YXRzw6RjaGxpY2hlIER1cmNoZsO8aHJ1bmcgZGVyIFJhbmRvbWlzaWVydW5nIGxpZWd0IG5pY2h0IGfDpG56bGljaCBpbiBkZXIgSGFuZCBkZXMgRm9yc2NoZXJzIChiZWlzcGllbHN3ZWlzZSBhcmJlaXRldGVuIGRpZSBGb3JzY2hlciBpbiBkaWVzZW0gRXhwZXJpbWVudCBtaXQgZWluZXIgTkdPIHp1c2FtbWVuIHVuZCBldmVudHVlbGwgaGF0dGUgZGllIE5HTyBBbnJlaXplIGRhcyBiZXNvbmRlcnMgdmllbGUgRnJhdWVuIGdldHJlYXRldCB3ZXJkZW4pLiBEdXJjaCBlaW5lIEJhbGFuY2luZyBUYWJlbGxlIHNjaGF1ZW4gd2lyLCBvYiBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlIHRhdHPDpGNobGljaCBlcmZvbGdyZWljaCByYW5kb21pc2llcnQgd3VyZGVuLiAKMi4gRWluIHdlaXRlcmVyIEdydW5kLCB3YXJ1bSB3aXIgdW5zIGhpZXIgZGllIEJhbGFuY2luZyBUYWJlbGxlIGFuc2NoYXVlbiBtw7ZjaHRlbiBpc3QgZGllIF9BdHRyaXRpb25fIChTY2h3dW5kcXVvdGUpLiBFcyBpc3QgdsO2bGxpZyBub3JtYWwgZWluaWdlIFRlaWxuZWhtZXIgaW4gRmVsZGV4cGVyaW1lbnRlbiDDvGJlciBkaWUgWmVpdCB6dSB2ZXJsaWVyZW4sIGRhIGRpZXNlIG5pY2h0IGFudHdvcnRlbiwgdmVyc3RvcmJlbiBzaW5kIG9kZXIgYXVzIGFuZGVyZW4gR3LDvG5kZW4gbmljaHQgbWVociBhbSBFeHBlcmltZW50IHRlaWxuZWhtZW4gbcO2Y2h0ZW4uIER1cmNoIGRpZSBCYWxhbmNpbmcgVGFiZWxsZSBrw7ZubmVuIHdpciBhbnNjaGF1ZW4sIG9iIF9BdHRyaXRpb25fIHNlbGVrdGl2IHN0w6Rya2VyIGluIGRlciBUcmVhdG1lbnQgb2RlciBLb250cm9sbGdydXBwZSB3YXIsIHp1bWluZGVzdCBhdWYgQmFzaXMgYmVvYmFjaHRiYXJlciBWYXJpYWJsZW4uCgpBdXMgZGllc2VyIEJhbGFuY2luZyBUYWJlbGxlIGxlcm5lbiB3aXIgbWVocmVyZSBEaW5nZToKCi0gSW4gZGVuIG1laXN0ZW4gR3J1bmRjaGFyYWt0ZXJpc3Rpa2EgdW50ZXJzY2hlaWRlbiBzaWNoIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgKipuaWNodCoqIHZvbmVpbmFuZGVyLkRpZSBEaWZmZXJlbnogendpc2NoZW4gVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSBpc3QgbWVpc3Qga2xlaW4gdW5kIG5pY2h0IHNpZ25pZmlrYW50LiBEZXIgdC1UZXN0LCB3ZWxjaGVuIHdpciBmw7xyIGplZGUgVmFyaWFibGUgZHVyY2hnZWbDvGhydCBoYWJlbiB0ZXN0ZXQgZGllIE51bGxoeXBvdGhlc2U6IAoKJEhfMCQ6IEluIGRlciBUcmVhdG1lbnQgR3J1cHBlIHp1IHNlaW4gaGF0IGtlaW5lbiBFaW5mbHVzcyBhdWYgZGllIHVudGVyc3VjaHRlIFZhcmlhYmxlLgoKLSBFaW5pZ2UgVmFyaWFibGVuIHNpbmQgamVkb2NoIHNpZ25pZmlrYW50IHVudGVyc2NoaWVkbGljaCB6d2lzY2hlbiBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlLCBpbnNiZXNvbmRlcmUgb2IgZGllIE9tYSB2w6R0ZXJsaWNoZXJzZWl0cyBvZGVyIG3DvHR0ZXJsaWNoZXJzZWl0cyBtaXQgaW0gSGF1c2hhbHQgbGVidC4KLSBXaXIgdmVybGllcmVuIGVpbmlnZSBUZWlsbmVobWVyIMO8YmVyIGRpZSBaZWl0ICg5MDMgLT4gNzA0IC0+IDU4NSBCZW9iYWNodHVuZ2VuKSwgZC5oLiB3aXIgaGFiZW4gbmFjaCA3IEphaHJlbiBudXIgbm9jaCA2NCw4JSBkZXIgTcO8dHRlciwgZGllIHVyc3Byw7xuZ2xpY2ggYW0gRXhwZXJpbWVudCB0ZWlsZ2Vub21tZW4gaGFiZW4sIGluIGRlciBTdGljaHByb2JlLiBBbGxlcmRpbmdzIHNjaGVpbmVuIHNpY2ggZGllIEdydW5kY2hhcmFrdGVyaXN0aWthIMO8YmVyIGRpZSBaZWl0IHp3aXNjaGVuIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgbmljaHQgc2lnbmlmaWthbnQgdmVyw6RuZGVydCB6dSBoYWJlbi4gRC5oLiBlcyBzY2hlaW50IGtlaW5lIFNlbGVrdGl2ZSBBdHRyaXRpb24gZsO8ciBkaWUgS29udHJvbGxncnVwcHBlIG9kZXIgZGllIFRyZWF0bWVudCBHcnVwcGUgZ2VnZWJlbiB6dSBoYWJlbi4gRGllIEJpbGR1bmcgZGVyIE11dHRlciB1bmQgZGllIFBhcml0w6R0IHp3aXNjaGVuIE11dHRlciB1bmQgVmF0ZXIgc2NoZWluZW4gendpc2NoZW4gVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSBhdcOfZWluYW5kZXIgenUgZHJpZnRlbiB6d2lzY2hlbiBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlLgoKQXVmIEJhc2lzIGRpZXNlciBlcnN0ZW4gZGVza3JpcHRpdmVuIEFuYWx5c2Ugd29sbGVuIHdpciB1bnMgdGllZmVyIG1pdCBkZW4gVW50ZXJzY2hpZWRlbiB6d2lzY2hlbiBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlIGJlc2Now6RmdGlnZW4uCgojIEVyZ2Vibmlzc2UKCiMjIEdyYWZpc2NoZSBBbmFseXNlCgpJbSBlcnN0ZW4gU2Nocml0dCBtw7ZjaHRlbiB3aXIgdW5zIGRpZSBVbnRlcnNjaGllZGUgendpc2NoZW4gVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSBuw6RoZXIgYW5zY2hhdWVuLiBJbnNiZXNvbmRlcmUgaW50ZXJlc3NpZXJ0IHVucywgb2IgZGFzIFRyZWF0bWVudCBlcmZvbGdyZWljaCB3YXIhCgpgYGB7cn0KdGhwICU+JQogICNmaWx0ZXIoICFpcy5uYShkZXByZXNzZWQpKSAgJT4lCiAgc2VsZWN0KHRyZWF0LCBkZXByZXNzZWRfNm0sIGRlcHJlc3NlZF8xeSwgZGVwcmVzc2VkKSAlPiUKICBtdXRhdGUoQmFzZWxpbmUgPSAxKSAlPiUKICBwaXZvdF9sb25nZXIoIGNvbHMgPSAtdHJlYXQsIG5hbWVzX3RvID0gIm5hbWUiLCB2YWx1ZXNfdG8gPSAiZGVwcmVzc2lvbiIpICU+JQogIG11dGF0ZShuYW1lID0gZmN0X3JlbGV2ZWwobmFtZSwgIkJhc2VsaW5lIiwgImRlcHJlc3NlZF82bSIsICJkZXByZXNzZWRfMXkiLCAiZGVwcmVzc2VkIiksCiAgICAgICAgIG5hbWUgPSBmY3RfcmVjb2RlKG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IE1vbmF0ZSIgPSAiZGVwcmVzc2VkXzZtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEgSmFociIgPSAiZGVwcmVzc2VkXzF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcgSmFocmUiID0gImRlcHJlc3NlZCIpLAogICAgICAgICB0cmVhdF9mYWN0b3IgPSBhcy5mYWN0b3IoaWZlbHNlKHRyZWF0ID09IDEsICJUcmVhdG1lbnQiLCAiS29udHJvbGxlIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBuYW1lLCB5ID0gZGVwcmVzc2lvbiwgCiAgICAgICAgICAgICBjb2xvciA9IHRyZWF0X2ZhY3RvcikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzAwNzJCMiIsICIjRTY5RjAwIikpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJwb2ludHJhbmdlIiwgCiAgICAgICAgICAgICAgIGZ1bi5kYXRhID0gIm1lYW5fc2UiLCAKICAgICAgICAgICAgICAgZnVuLmFyZ3MgPSBsaXN0KG11bHQ9Mi4zMykpICsKICB5bGltKDAsMSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkFudGVpbCBhbiBEZXByZXNzaW9uZW4iLAogICAgICAgdGl0bGUgPSAiVHJlYXRtZW50IEVmZmVrdGUgYXVmIGRlbiBBbnRlaWwgYW4gRGVwcmVzc2lvbmVuIiwKICAgICAgIGNhcHRpb24gPSAiR2V6ZWlndCB3aXJkIGRlciBNaXR0ZWx3ZXJ0IGRlciBHcnVwcGVuIGlua2x1c2l2ZSBkZXMgOTklIEtvbmZpZGVuemludGVydmFsbHMuXG5FaWdlbmUgQW5hbHlzZW4gYXVmIEJhc2lzIHZvbiBCYXJhbm92IGV0IGFsLiAoMjAyMCkiKSAKCmBgYAoKQW4gZGllc2VyIEdyYWZpayBzZWhlbiB3aXIgZWluZW4gYmVzb25kZXJzIHN0YXJrZW4gRWZmZWt0IGRlcyBUcmVhdG1lbnRzIG5hY2ggNiBiencuIDEyIE1vbmF0ZW4uIERlciBVbnRlcnNjaGllZCB6d2lzY2hlbiBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlIGxpZWd0IGJlaSDDvGJlciAzMCBQcm96ZW50cHVua3Rlbiwgd29iZWkgc2ljaCBkaWUgVHJlYXRtZW50Z3J1cHBlIGJlcmVpdHMgbmFjaCA2IE1vbmF0ZW4gYmVpIGVpbmVtIEFudGVpbCBkZXIgRGVwcmVzc2lvbmVuIHZvbiBydW5kIDI1JSBzdGFiaWxpc2llcnQuIEluc2Jlc29uZGVyZSBkaWUgc2NobmVsbGUgRXJob2x1bmcgdm9uIGRlciBEZXByZXNzaW9uIGJlcmVpdHMgbmFjaCA2IE1vbmF0ZW4gaXN0IGbDvHIgZGllIFRyZWF0bWVudCBHcnVwcGUgaG9jaCBzaWduaWZpa2FudCB1bmQgemVpZ3QsIHdpZSBlZmZla3RpdiBkaWUgSW50ZXJ2ZW50aW9uIG1pdCBkZXIgcHN5Y2hvbG9naXNjaGVuIEJldHJldXVuZyB3YXIuIEplZG9jaCBpc3QgZXMgYXVjaCB3aWNodGlnIHp1IHNlaGVuLCBkYXNzIGF1Y2ggb2huZSBUcmVhdG1lbnQgZWluZSBFcmhvbHVuZyBpbiBkZXIgS29udHJvbGxncnVwcGUgc3RhdHRnZWZ1bmRlbiBoYXQuIERpZXNlIEVyaG9sdW5nIGlzdCBkZXV0bGljaCBzY2h3w6RjaGVyLCBhbGxlcmRpbmdzIHfDvHJkZSBlaW4gbmFpdmVyIFZlcmdsZWljaCB2b24gdm9yaGVyL25hY2hoZXIgaW4gZGVyIFRyZWF0bWVudCBHcnVwcGUgKG9obmUgRXhwZXJpbWVudCkgZWluZW4gdmllbCB6dSBncm/Dn2VuIEVmZmVrdCBzY2jDpHR6ZW4uIERhaGVyIGlzdCBlcyB3aWNodGlnIGVpbiBzb2xjaGVzIEV4cGVyaW1lbnQgenUgdW50ZXJzdWNoZW4gdW5kIGRpZSBUcmVhdG1lbnQgbWl0IGRlciBLb250cm9sbGdydXBwZSB1bmQgbmljaHQgbWl0IHNpY2ggc2VsYnN0IHp1IHZlcmdsZWljaGVuIQpBdWNoIG5hY2ggc2llYmVuIEphaHJlbiBzY2hlaW5lbiBNw7x0dGVyIGF1cyBkZXIgVHJlYXRtZW50Z3J1cHBlIHdlbmlnZXIgaMOkdWZpZyBhbiBEZXByZXNzaW9uZW4genUgbGVpZGVuICgxOCUpIGFscyBpbiBkZXIgS29udHJvbGxncnVwcGUgKDI1JSkuIEplZG9jaCBpc3QgZGllc2VyIFVudGVyc2NoaWVkIHN0YXRpc3Rpc2NoIG5pY2h0IHNpZ25pZmlrYW50LiAKCkFuaGFuZCBkaWVzZXIgR3JhZmlrIGvDtm5uZW4gd2lyIHNlaHIgc2Now7ZuIGRpZSBFZmZla3Rpdml0w6R0IGRlciBJbnRlcnZlbnRpb24gYmVvYmFjaHRlbi4gSW5zYmVzb25kZXJlIGRhIGVzIHNpY2ggYmVpIGRlciBwc3ljaG9sb2dpc2NoZW4gQmV0cmV1dW5nIHVtIGVpbmUga29zdGVuZ8O8bnN0aWdlIEFsdGVybmF0aXZlIHp1IFBzeWNob3BoYXJtYWthIGhhbmRlbHQgKHVuZCBkaWUgcHN5Y2hvbG9naXNjaGUgQmV0cmV1dW5nIGJlaSBzdGlsbGVuZGVuIE3DvHR0ZXJuIGJlZGVua2VubG9zIGVpbmdlc2V0enQgd2VyZGVuIGthbm4pIGlzdCBkaWVzZXMgRXJnZWJuaXMgYmVlaW5kcnVja2VuZC4KCiMjIFJlZ3Jlc3Npb25zYW5hbHlzZSAKCkluIGRlciBmb2xnZW5kZW4gVGFiZWxsZSB3b2xsZW4gd2lyIHVucyBkaWUgRXJnZWJuaXNzZSBtaXR0ZWxzIGxpbmVhcmVyIFJlZ3Jlc3Npb24gYW5zY2hhdWVuLCBiZWkgZGVyIHdpciB6dXPDpHR6bGljaCBhdWYgbcO2Z2xpY2hlIF9Db25mb3VuZGVyXyBrb250cm9sbGllcmVuIGvDtm5uZW4uIFdpciB3b2xsZW4gdW5zIGluIGRpZXNlbiBSZWdyZXNzaW9uZW4gbnVyIGRpZSBFcmdlYm5pc3NlIGbDvHIgTcO8dHRlciBhbnNjaGF1ZW4sIHdlbGNoZSBhdWNoIG5hY2ggc2llYmVuIEphaHJlbiBub2NoIGluIHVuc2VyZXIgU3RpY2hwcm9iZSBzaW5kLiBIaWVyZHVyY2gga8O2bm5lbiB3aXIgZGllIEVyZ2Vibmlzc2Ugendpc2NoZW4gZGVuIGVpbnplbG5lbiBKYWhyZW4gYmVzc2VyIHZlcmdsZWljaGVuLiBJbSBlcnN0ZW4gU2Nocml0dCB3b2xsZW4gd2lyIGF1ZiBrZWluZSBzb25zdGlnZW4gVmFyaWFibGVuIGtvbnRyb2xsaWVyZW4uIERpZXMgc29sbHRlIGJlaSBlaW5lbSBwZXJmZWt0IHJhbmRvbWlzaWVydGVuIEV4cGVyaW1lbnQgdm9sbGtvbW1lbiBhdXNyZWljaGVuLiBXaXIgZXJoYWx0ZW4gaGllcmJlaSBkaWUgc2VsYmVuIEVyZ2Vibmlzc2Ugd2llIGluIHVuc2VyZW0gb2JpZ2VuIFNjaGF1YmlsZCEgQXVjaCBuYWNoIGRlciBLb250cm9sbGUgYXVmIHZpZWxlIHNvemlvZGVtb2dyYWZpc2NoZSBWYXJpYWJsZW4gZXJoYWx0ZW4gd2lyIHNlaHIgw6RobmxpY2hlIEVyZ2Vibmlzc2UuIApFcyB6ZWlndCBzaWNoLCB3YXMgd2lyIGJlcmVpdHMgaW4gdW5zZXJlciBCYWxhbmNpbmcgVGFiZWxsZSBnZXNlaGVuIGhhYmVuOiBEaWUgUmFuZG9taXNpZXJ1bmcgaW4gVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSB3YXIgZXJmb2xncmVpY2guIApGw7xyIHVucyBiZWRldXRldCBkaWVzOiBXaXIgbcO8c3NlbiBpbiBkZW4gZm9sZ2VuZGVuIFJlZ3Jlc3Npb25lbiBhdWYga2VpbmUgX0NvbmZvdW5kZXJfIGtvbnRyb2xsaWVyZW4uCgpEaWUgSW50ZXJ2ZW50aW9uIHdhciBpbnNiZXNvbmRlcmUgZsO8ciBkYXMgZXJzdGUgSmFociBleHRyZW0gZXJmb2xncmVpY2gsIG1pdCBlaW5lciBSZWR1a3Rpb24gZGVyIERlcHJlc3Npb25lbiB1bSAqKsO8YmVyIDMwIFByb3plbnRwdW5rdGUqKiBpbSBWZXJnbGVpY2ggenVyIEtvbnRyb2xsZ3J1cHBlISAKTmFjaCA3IEphaHJlbiBnYWIgZXMgYXVjaCBpbiBkZXIgS29udHJvbGxncnVwcGUgdmllbGUgTcO8dHRlciwgZGllIHNpY2ggdm9uIGRlciBEZXByZXNzaW9uIGVyaG9sdCBoYXR0ZW4sIGRhaGVyIGhhYmVuIHNpY2ggaGllciBkaWUgS29udHJvbGxncnVwcGUgdW5kIGRpZSBUcmVhdG1lbnQtR3J1cHBlIGVpbmFuZGVyIGFuZ2Vuw6RoZXJ0LCBhYmVyIGF1Y2ggaGllciBsZWlkZW4gTcO8dHRlciBhdXMgZGVyIFRyZWF0bWVudC1HcnVwcGUgdW0gKio1IC0gNiBQcm96ZW50cHVua3RlIHdlbmlnZXIgaMOkdWZpZyoqIChqZSBuYWNoIFNwZXppZmlrYXRpb24pIGFuIERlcHJlc3Npb25lbiwgd29iZWkgZGllc2UgS29lZmZpemllbnRlbiBzdGF0aXN0aXNjaCBuaWNodCBzaWduaWZpa2FudCBzaW5kLgoKYGBge3IsIHJlc3VsdHMgPSAnYXNpcyd9CnJlZ19kZXA2bSA8LSBsbShkZXByZXNzZWRfNm0gfiB0cmVhdCwgZGF0YSA9IGZpbHRlcih0aHAsIGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkpCnJlZ19kZXA2bV9sb25nIDwtIGxtKGRlcHJlc3NlZF82bSB+IHRyZWF0ICsgYWdlX2Jhc2VsaW5lICsgYWdlX2Jhc2VsaW5lX3NxICsgZW1wbG95ZWRfbW9fYmFzZWxpbmUgKyBtb19lbXAgKyBncmFuZG1vdGhlcl9iYXNlbGluZSArIE1JTCArIHdlYWx0aF9iYXNlbGluZSArIGVkdV9sdmxfbW9fMSArIGVkdV9sdmxfbW9fMiArIGVkdV9sdmxfbW9fMyArIGVkdV9tb19iYXNlbGluZSArIGVkdV9mYV9iYXNlbGluZSArIGtpZHNfbm8gKyBmaXJzdF9jaGlsZCArIGhhbWRfYmFzZWxpbmUgKyBtc3Bzc19iYXNlbGluZSArIG1vbnRoX2ludCArIG1vbnRoX2ludF9zcSArIGRvaTAgKyBpbnRlcnZyXzEgKyBpbnRlcnZyXzIgKyBpbnRlcnZyXzMgK2ludGVydnJfNCArIGludGVydnJfNSArIGludGVydnJfNiArIGludGVydnJfNyArIGludGVydnJfOCArIGludGVydnJfOSwgZGF0YSA9IGZpbHRlcih0aHAsIGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkpCgpyZWdfZGVwMXkgPC0gbG0oZGVwcmVzc2VkXzF5IH4gdHJlYXQsIGRhdGEgPSAgZmlsdGVyKHRocCwgYXR0cml0MiA9PSAwICYgVEhQX3NhbXBsZSA9PSAxKSkKcmVnX2RlcDF5X2xvbmcgPC0gbG0oZGVwcmVzc2VkXzF5IH4gdHJlYXQgKyBhZ2VfYmFzZWxpbmUgKyBhZ2VfYmFzZWxpbmVfc3EgKyBlbXBsb3llZF9tb19iYXNlbGluZSArIG1vX2VtcCArIGdyYW5kbW90aGVyX2Jhc2VsaW5lICsgTUlMICsgd2VhbHRoX2Jhc2VsaW5lICsgZWR1X2x2bF9tb18xICsgZWR1X2x2bF9tb18yICsgZWR1X2x2bF9tb18zICsgZWR1X21vX2Jhc2VsaW5lICsgZWR1X2ZhX2Jhc2VsaW5lICsga2lkc19ubyArIGZpcnN0X2NoaWxkICsgaGFtZF9iYXNlbGluZSArIG1zcHNzX2Jhc2VsaW5lICsgbW9udGhfaW50ICsgbW9udGhfaW50X3NxICsgZG9pMCArIGludGVydnJfMSArIGludGVydnJfMiArIGludGVydnJfMyAraW50ZXJ2cl80ICsgaW50ZXJ2cl81ICsgaW50ZXJ2cl82ICsgaW50ZXJ2cl83ICsgaW50ZXJ2cl84ICsgaW50ZXJ2cl85LCBkYXRhID0gZmlsdGVyKHRocCwgYXR0cml0MiA9PSAwICYgVEhQX3NhbXBsZSA9PSAxKSkKCnJlZ19kZXA3eSA8LSBsbShkZXByZXNzZWQgfiB0cmVhdCwgZGF0YSA9IGZpbHRlcih0aHAsIGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkpCnJlZ19kZXA3eV9sb25nIDwtIGxtKGRlcHJlc3NlZCB+IHRyZWF0ICsgYWdlX2Jhc2VsaW5lICsgYWdlX2Jhc2VsaW5lX3NxICsgZW1wbG95ZWRfbW9fYmFzZWxpbmUgKyBtb19lbXAgKyBncmFuZG1vdGhlcl9iYXNlbGluZSArIE1JTCArIHdlYWx0aF9iYXNlbGluZSArIGVkdV9sdmxfbW9fMSArIGVkdV9sdmxfbW9fMiArIGVkdV9sdmxfbW9fMyArIGVkdV9tb19iYXNlbGluZSArIGVkdV9mYV9iYXNlbGluZSArIGtpZHNfbm8gKyBmaXJzdF9jaGlsZCArIGhhbWRfYmFzZWxpbmUgKyBtc3Bzc19iYXNlbGluZSArIG1vbnRoX2ludCArIG1vbnRoX2ludF9zcSArIGRvaTAgKyBpbnRlcnZyXzEgKyBpbnRlcnZyXzIgKyBpbnRlcnZyXzMgK2ludGVydnJfNCArIGludGVydnJfNSArIGludGVydnJfNiArIGludGVydnJfNyArIGludGVydnJfOCArIGludGVydnJfOSwgZGF0YSA9IGZpbHRlcih0aHAsIGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkpCgpyb3dzIDwtIHRyaWJibGUofnRlcm0sICAgICAgICAgIH5yZWdfZGVwNm0sICB+cmVnX2RlcDZtX2xvbmcsIH5yZWdfZGVwMXksIH5yZWdfZGVwMXlfbG9uZywgfnJlZ19kZXA3eSwgfnJlZ19kZXA3eV9sb25nLAogICAgICAgICAgICAgICAgIktvbnRyb2xsdmFyaWFibGVuIiwgIk5laW4iLCAiSmEiLCAiTmVpbiIsICJKYSIsICJOZWluIiwgIkphIikKCmF0dHIocm93cywgJ3Bvc2l0aW9uJykgPC0gYygzKQoKbW9kZWxzdW1tYXJ5KGxpc3QocmVnX2RlcDZtLCByZWdfZGVwNm1fbG9uZywgcmVnX2RlcDF5LCByZWdfZGVwMXlfbG9uZywgcmVnX2RlcDd5LCByZWdfZGVwN3lfbG9uZyksIAogICAgICAgICAgdHlwZSA9ICJodG1sIiwKICAgICAgICAgIGtlZXAgPSAidHJlYXQiLAogICAgICAgICAgY29lZl9yZW5hbWUgPSBjKCJ0cmVhdCIgPSAiVHJlYXRtZW50IiksCiAgICAgICAgICBhZGRfcm93cyA9IHJvd3MsCiAgICAgICAgICBmbXQgPSAyLAogICAgICAgICAgc3RhdGlzdGljID0gJ2NvbmYuaW50JywgCiAgICAgICAgICBjb25mX2xldmVsID0gLjk5LAogICAgICAgICAgZ29mX29taXQgPSAnREZ8RGV2aWFuY2V8Uk1TRXxBSUN8QklDfExvZy5MaWt8RicsCiAgICAgICAgICB0aXRsZSA9ICJEZXByZXNzaW9uIGJlaSBNw7x0dGVybiwgbWl0IHVuZCBvaG5lIEtvbnRyb2xsdmFyaWFibGVuIikgJT4lCiAgICAgICAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwiTmFjaCA2IE1vbmF0ZW4iID0gMiwgIk5hY2ggMSBKYWhyIiA9IDIsICJOYWNoIDcgSmFocmVuIiA9IDIpKQoKYGBgCgojIyDDlmtvbm9taXNjaGUgQXVzd2lya3VuZ2VuIGRlciBCZWhhbmRsdW5nCgpJbSBsZXR6dGVuIFNjaHJpdHQgbcO2Y2h0ZW4gd2lyIHVucyBub2NoIGRpZSDDtmtvbm9taXNjaGVuIEF1c3dpcmt1bmdlbiBkZXIgQmVoYW5kbHVuZyBhdWYgTcO8dHRlciBtaXQgRGVwcmVzc2lvbmVuIGFuc2NoYXVlbi4gSW4gUGFraXN0YW4gaGFiZW4gRnJhdWVuIGFsbGdlbWVpbiBudXIgZWluZSBnZXJpbmdlIEtvbnRyb2xsZSDDvGJlciBkaWUgZmluYW56aWVsbGVuIFJlc3NvdXJjZW4gaWhyZXIgRmFtaWxpZS4gQWxsZXJkaW5ncyB3w7xyZGVuIHdpciBhbm5laG1lbiBkYXMgYmVpIEZyYXVlbiBtaXQgRGVwcmVzc2lvbmVuIGRpZXNlIEtvbnRyb2xsZSBub2NoIGRldXRsaWNoIGtsZWluZXIgc2VpbiBkw7xyZnRlLCBhbHMgYmVpIE3DvHR0ZXJuIG9obmUgRGVwcmVzc2lvbmVuLiBJbnNiZXNvbmRlcmUgZGEgTcO8dHRlciBtaXQgRGVwcmVzc2lvbmVuIHZlcm11dGxpY2ggbmljaHQgYXVjaCBub2NoIG1pdCBmaW5hbnppZWxsZW4gR2VnZWJlbmhlaXRlbiBiZWxhc3RldCB3ZXJkZW4gd29sbGVuLgoKSW4gdW5zZXJlciBTdHVkaWUgZ2lidCBlcyBzZWhyIHZpZWxlIHVudGVyc2NoZWlkbGljaGUgVmFyaWFibGVuLCB3ZWxjaGUgZGllIGZpbmFuemllbGxlIEVpZ2Vuc3TDpG5kaWdrZWl0ICh1bmQgYW5kZXJlIEdyw7bDn2VuKSBkZXIgTcO8dHRlciBlcmZhc3Nlbi4gRGllIEF1dG9yZW4gZGVyIFN0dWRpZSBoYWJlbiB3ZWl0ZXJoaW4gYXVzIGRpZXNlIFZhcmlhYmxlbiBpbSBEYXRlbnNhdHogZWlnZW5lIEluZGl6ZXMgZXJzdGVsbHQsIGluIGRlbmVuIG1laHJlcmUgVmFyaWFibGVuIHp1c2FtbWVuZ2VmYXNzdCB3dXJkZW4uIERpZSB3aWNodGlnc3RlbiBJbmRpemVzIHdvbGxlbiB3aXIgdW5zIG7DpGhlciBhbnNjaGF1ZW46CgotICJGaW5hbnppZWxsZW4gU3TDpHJrdW5nIiBkZXIgTXV0dGVyOiBNdXR0ZXIgYXJiZWl0ZXQsIEVpbmtvbW1lbiBkZXIgTXV0dGVyLCBLb250cm9sbGUgZGVyIE11dHRlciDDvGJlciBkaWUgQXVzZ2FiZW4KLSAiTW9uZXTDpHJlcyBJbnZlc3RtZW50IChpbiBkYXMgS2luZCkiOiBBdXNnYWJlbiBmw7xyIFNjaHVsZSwgTGVybm1hdGVyaWFsaWVuLCBzb25zdGlnZSBJbmZvcyB6dXIgU2NodWxlIHVuZCBBdXNnYWJlbgotICJaZWl0bGljaGVzIEludmVzdG1lbnQgKGluIGRhcyBLaW5kKSI6IFdpZSBvZnQgc3BpZWxlbiBNdXR0ZXIvVmF0ZXIgbWl0IGRlbSBLaW5kPywgb2RlciBoZWxmZW4gbWl0IGRlbiBIYXVzYXVmZ2FiZW4/Ci0gIkVyemllaHVuZ3NzdGlsIjogV2llIHNwcmljaHQgZGllIE11dHRlciBtaXQgZGVtIEtpbmQ/OyB3ZWxjaGUgQXJ0IGRlciBEaXN6aXBsaW5pZXJ1bmcgd2lyZCBhbmdld2VuZGV0PwotICJGcnVjaHRiYXJrZWl0IjogV2llIHZpZWxlIEtpbmRlciBoYXR0ZSBkaWUgTXV0dGVyIG5hY2ggZGVtIGFrdHVlbGxlbiBLaW5kPyBQZXJmZWt0ZSBBbnphaGwgYW4gS2luZGVybiBhYmdlZnJhZ3QuCgpgYGB7cn0KCnJlZ19maW5hbmNpYWwgPC0gbG0obW90aGVyZmluYW5jaWFsIH4gdHJlYXQsIGRhdGEgPSBmaWx0ZXIodGhwLCBhdHRyaXQyID09IDAgJiBUSFBfc2FtcGxlID09IDEpKSAKcmVnX21vbmV5IDwtIGxtKHBhcmVudG1vbmV5IH4gdHJlYXQsIGRhdGEgPSBmaWx0ZXIodGhwLCBhdHRyaXQyID09IDAgJiBUSFBfc2FtcGxlID09IDEpKQpyZWdfdGltZTwtIGxtKHBhcmVudHRpbWUgfiB0cmVhdCwgZGF0YSA9IGZpbHRlcih0aHAsIGF0dHJpdDIgPT0gMCAmIFRIUF9zYW1wbGUgPT0gMSkpCnJlZ19zdHlsZSA8LSBsbShwYXJlbnRzdHlsZSB+IHRyZWF0LCBkYXRhID0gZmlsdGVyKHRocCwgYXR0cml0MiA9PSAwICYgVEhQX3NhbXBsZSA9PSAxKSkKcmVnX2ZlcnRpbGl0eSA8LSBsbShmZXJ0aWxpdHlfdmFycyB+IHRyZWF0LCBkYXRhID0gZmlsdGVyKHRocCwgYXR0cml0MiA9PSAwICYgVEhQX3NhbXBsZSA9PSAxKSkKCgp0aWR5KHJlZ19maW5hbmNpYWwsIGNvbmYuaW50ID0gVCkgJT4lCiAgbXV0YXRlKHRlcm0gPSBpZmVsc2UoIHRlcm0gPT0gInRyZWF0IiwgImZpbl9lbXAiLCB0ZXJtKSklPiUKICBiaW5kX3Jvd3ModGlkeShyZWdfbW9uZXksIGNvbmYuaW50ID0gVCkpICU+JQogIG11dGF0ZSh0ZXJtID0gaWZlbHNlKCB0ZXJtID09ICJ0cmVhdCIsICJtb25leSIsIHRlcm0pKSAlPiUKICBiaW5kX3Jvd3ModGlkeShyZWdfdGltZSwgY29uZi5pbnQgPSBUKSkgJT4lCiAgbXV0YXRlKHRlcm0gPSBpZmVsc2UoIHRlcm0gPT0gInRyZWF0IiwgInRpbWUiLCB0ZXJtKSkgJT4lCiAgYmluZF9yb3dzKHRpZHkocmVnX3N0eWxlLCBjb25mLmludCA9IFQpKSAlPiUKICBtdXRhdGUodGVybSA9IGlmZWxzZSggdGVybSA9PSAidHJlYXQiLCAic3R5bGUiLCB0ZXJtKSkgJT4lCiAgYmluZF9yb3dzKHRpZHkocmVnX2ZlcnRpbGl0eSwgY29uZi5pbnQgPSBUKSkgJT4lCiAgbXV0YXRlKHRlcm0gPSBpZmVsc2UoIHRlcm0gPT0gInRyZWF0IiwgImZlcnRpbGl0eSIsIHRlcm0pKSAlPiUKICBmaWx0ZXIoIHRlcm0gIT0gIihJbnRlcmNlcHQpIikgJT4lCiAgICBtdXRhdGUodGVybSA9IGZjdF9yZWxldmVsKHRlcm0sICJmZXJ0aWxpdHkiLCAic3R5bGUiLCAidGltZSIsICJtb25leSIsICJmaW5fZW1wIiksCiAgICAgICAgICAgdGVybSA9IGZjdF9yZWNvZGUodGVybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFuemllbGxlIFN0w6Rya3VuZyIgPSAiZmluX2VtcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb25ldMOkcmUgSW52ZXN0bWVudHMiID0gIm1vbmV5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplaXRsaWNoZSBJbnZlc3RtZW50cyIgPSAidGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnppZWh1bmdzc3RpbCIgPSAic3R5bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRnJ1Y2h0YmFya2VpdCIgPSAiZmVydGlsaXR5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHRlcm0sIHk9ZXN0aW1hdGUsIHltaW49Y29uZi5sb3csIHltYXg9Y29uZi5oaWdoKSkgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2wgPSAib3JhbmdlIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKC0wLjI1LDAsMC4yNSwwLjUpKSArCiAjIHlsaW0oLTAuNSwwLjYpICsKICBjb29yZF9mbGlwKCkgKwogIGxhYnMoCiAgICB4ID0gTlVMTCwgeSA9ICJFZmZla3RncsO2w59lIGFscyBTdGFuZGFyZGFid2VpY2h1bmcgZGVyIEtvbnRyb2xsZ3J1cHBlIiwKICAgIHRpdGxlID0gIkVmZmVrdCBkZXIgSW50ZXJ2ZW50aW9uIGF1ZiDDtmtvbm9taXNjaGUgRW50c2NoZWlkdW5nZW4gZGVyIE11dHRlciIsIAogICAgc3VidGl0bGUgPSAiOTUlIEtvbmZpZGVuemludGVydmFsbCB1bSBkZW4gUHVua3RzY2jDpHR6ZXIiCiAgICApICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgpEaWUgSW50ZXJ2ZW50aW9uIGbDvGhydGUgYmVpIGRlciBmaW5hbnppZWxsZW4gTGFnZSBkZXIgZGVwcmVzc2l2ZW4gTcO8dHRlciB6dSBlaW5lciBWZXJiZXNzZXJ1bmcgdW0gMC4zNCBTdGFuZGFyZGFid2VpY2h1bmdlbiAoU0QpLCB2ZXJnbGljaGVuIG1pdCBkZXIgS29udHJvbGxncnVwcGUuIFdlaXRlcmhpbiB3dXJkZSAwLjM1IFNEIG1laHIgaW4gZGFzIEtpbmQgaW52ZXN0aWVydCAobW9uZXTDpHIpLCB2ZXJnbGljaGVuIG1pdCBkZXIgS29udHJvbGxncnVwcGUgdW5kIGRpZSBFbHRlcm4gc3BpZWx0ZW4gMC4zMSBTRCBow6R1ZmlnZXIgbWl0IGRlbSBLaW5kIGFscyBkaWUgRWx0ZXJuIGRlciBLb250cm9sbGdydXBwZS4gRGllc2UgRXJnZWJuaXNzZSBzaW5kIGFsbGUgc2lnbmlmaWthbnQgYXVmIGRlbSAxJS1TaWduaWZpa2Fuem5pdmVhdSwgd2llIHdpciBpbiBkZXIgb2JpZ2VuIEdyYWZpayBzZWhlbiBrw7ZubmVuLgoKSW50ZXJlc3NhbnRlcndlaXNlIGdhYiBlcyBrZWluZW4gc2lnbmlmaWthbnRlbiBFZmZla3QgZGVyIEludGVydmVudGlvbiBhdWYgZGVuIEVyemllaHVuZ3NzdGlsIG9kZXIgZGllIEZydWNodGJhcmtlaXQgKGQuaC4gd2llIHZpZWxlIEtpbmRlciBkaWUgZGllc2UgbmFjaCBkZW0gYWt0dWVsbGVuIEtpbmQgaGF0dGVuKS4KCgojIEludGVybmUgVmFsaWRpdMOkdAoKIyMgUHJvYmxlbWUgZGVyIFN0dWRpZTogQXR0cml0aW9uCgpJbnNnZXNhbXQgc2luZCBkaWUgQXV0b3JlbiBkZXIgU3R1ZGllIGJlbcO8aHQgYXVmIGVpbiBncm/Dn2VzIFByb2JsZW0gaWhyZXIgU3R1ZGllIGhpbnp1d2Vpc2VuOiBEaWUgQXR0cml0aW9uLCBkLmguIGRlciBTY2h3dW5kIGRlciBUZWlsbmVobWVyIGluIGlocmVyIFN0aWNocHJvYmUuCgpEdXJjaCBlaW4gRmVsZGV4cGVyaW1lbnQsIGluc2Jlc29uZGVyZSBkdXJjaCBkaWUgUmFuZG9taXNpZXJ1bmcgZGVyIFRlaWxuZWhtZXIgaW4gZWluZSBUcmVhdG1lbnQgdW5kIEtvbnRyb2xsZ3J1cHBlLCBpc3QgZXMgbcO2Z2xpY2ggc2VociB2aWVsZSBQcm9ibGVtZSBiZXrDvGdsaWNoIGludGVybmVyIFZhbGlkaXTDpHQgenUgbMO2c2VuLiBFcyBnaWJ0IGtlaW5lIF9Db25mb3VuZGVyXyBtZWhyLCB3ZWxjaGUgZGllIEVyZ2Vibmlzc2UgdmVyemVycmVuIGvDtm5uZW4gdW5kIFNlbGJzdHNlbGVrdGlvbiBvLsOkLiBpc3Qga2VpbiBUaGVtYS4gRG9jaCB3ZW5uIHdpciBlaW5lIFN0dWRpZSBkdXJjaGbDvGhyZW4sIGRpZSDDvGJlciBzaWViZW4gSmFocmUgZ2VodCwgZGFubiBibGVpYnQgZWluIFRoZW1hLCB3ZWxjaGVzIGR1cmNoIFJhbmRvbWlzaWVydW5nIG5pY2h0IGdlbMO2c3Qgd2VyZGVuIGthbm46IERpZSBBdHRyaXRpb24hCgpXZW5uIG51biBzZWxla3RpdiBtZWhyIFRlaWxuZWhtZXIgaW4gZGVyIFRyZWF0bWVudGdydXBwZSBkaWUgU3R1ZGllIHZlcmxhc3NlbiwgbcO2Z2xpY2hlcndlaXNlIGF1Y2ggbm9jaCBhdWYgR3J1bmQgZGVzIFRyZWF0bWVudHMsIGRhbm4gYmVrb21tZW4gd2lyIHZlcnplcnJ0ZSBFcmdlYm5pc3NlIGluIHVuc2VyZW4gc3DDpHRlcmVuIEFuYWx5c2VuLCBkaWUgd2lyIG51ciBzZWhyIHNjaGxlY2h0IGF1ZmzDtnNlbiBrw7ZubnRlbi4KVW0gZGVtIExlc2VyIHp1IHplaWdlbiwgZGFzcyBlcyBrZWluZSBzZWxla3RpdmUgQXR0cml0aW9uIGluIHVuc2VyZXIgU3RpY2hwcm9iZSBnYWIsIHNvbmRlcm4gZGFzIGRpZXNlIGbDvHIgVHJlYXRtZW50IHVuZCBLb250cm9sbGdydXBwZSDDpGhubGljaCBncm/DnyB3YXJlbiBoYXR0ZW4gd2lyIHVucyBiZXJlaXRzIGRhenUgZW50c2NobG9zc2VuIGVpbmUgQmFsYW5jaW5nIFRhYmVsbGUgenUgZXJzdGVsbGVuLiBBdHRyaXRpb24gc2NoZWludCBpbiB1bnNlcmVtIEZhbGwgendhciB2b3JoYW5kZW4genUgc2VpbiwgZG9jaCBuaWNodCBzZWxla3RpdiBudXIgZsO8ciBkaWUgVHJlYXRtZW50IG9kZXIgbnVyIGbDvHIgZGllIEtvbnRyb2xsZ3J1cHBlLgoKV2VubiBTaWUgZWluZSBkZXJhcnQgbGFuZ2UgU3R1ZGllIHBsYW5lbiwgZGFubiBzb2xsdGVuIFNpZSB2ZXJzdWNoZW4gbcO2Z2xpY2hzdCB2aWVsZSBJbmZvcm1hdGlvbmVuIMO8YmVyIGRpZSBUZWlsbmVobWVyIGFuIGlocmVtIEV4cGVyaW1lbnQgenUgZ2V3aW5uZW4uIEFuaGFuZCBkaWVzZXIgQ2hhcmFrdGVyaXN0aWthIGvDtm5uZW4gU2llIGRhbm4gdW50ZXJzdWNoZW4sIGluIHdpZSB3ZWl0IGRpZSBBdHRyaXRpb24gendpc2NoZW4gZGVyIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgenVmw6RsbGlnIG9kZXIgc3lzdGVtYXRpc2NoIHdhci4KCiMgWnVzYW1tZW5mYXNzdW5nCgpXb2NoZW5iZXR0ZGVwcmVzc2lvbmVuIHNpbmQgd2VsdHdlaXQgYmVpIDEwIC0gMjAlIGRlciB3ZXJkZW5kZW4gTcO8dHRlciB6dSBiZW9iYWNodGVuICh3b2JlaSBkaWUgRHVua2VsemlmZmVyIGhvY2ggc2VpbiBkw7xyZnRlKS4gRGFiZWkgaGFiZW4gc29sY2hlIERlcHJlc3Npb25lbiBsYW5nZnJpc3RpZ2UgQXVzd2lya3VuZ2VuLCBzb3dvaGwgYXVmIGRpZSBLaW5kZXIgZGVyIEZyYXUsIGFscyBhdWNoIGF1ZiBkaWUgVGVpbGhhYmUgZGVyIEZyYXUgYW0gQXJiZWl0c21hcmt0LiBVbSBkaWUgZ2VzZWxsc2NoYWZ0bGljaGVuIHVuZCDDtmtvbm9taXNjaGVuIEtvc3RlbiB2b24gV29jaGVuYmV0dGRlcHJlc3Npb25lbiBlaW56dWTDpG1tZW4gd3VyZGUgaGllcnp1IGluIGRlciB2b3JsaWVnZW5kZW4gVW50ZXJzdWNodW5nIGVpbiBFeHBlcmltZW50IGR1cmNoZ2Vmw7xocnQgaW4gZGVtIGVpbmUgVHJlYXRtZW50IEdydXBwZSBwc3ljaG9sb2dpc2NoZSBCZXRyZXV1bmcgZsO8ciBkaWUgRGVwcmVzc2lvbmVuIGFuZ2Vib3RlbiB3dXJkZSwgdW5kIGRlciBLb250cm9sbGdydXBwZSBuaWNodC4gRGllc2UgcHN5Y2hvbG9naXNjaGUgQmV0cmV1dW5nIGhhdHRlIHNlaHIgc3RhcmtlIEVmZmVrdGUgYXVmIGRpZSBEZXByZXNzaW9uIGRlciBNw7x0dGVyIG5hY2ggZWluZW0gSmFoci4gTcO8dHRlciBtaXQgcHN5Y2hvbG9naXNjaGVyIEJldHJldXVuZyBoYXR0ZW4gbnVyIG5vY2ggaW4gcnVuZCAyNSBQcm96ZW50IGRlciBGw6RsbGUgZWluZSBEZXByZXNzaW9uLCBpbiBkZXIgS29udHJvbGxncnVwcGUgbGFnIGRlciBBbnRlaWwgYmVpIMO8YmVyIDUwIFByb3plbnQuIEF1Y2ggbmFjaCBzaWViZW4gSmFocmVuIHdhciBub2NoIGVpbmUgRGlmZmVyZW56IHp3aXNjaGVuIFRyZWF0bWVudCB1bmQgS29udHJvbGxncnVwcGUgdm9uIDYgUHJvemVudHB1bmt0ZW4gc2ljaHRiYXIgKGFsbGVyZGluZ3MgbmljaHQgbWVociBzdGF0aXN0aXNjaCBzaWduaWZpa2FudCkuIAoKTmViZW4gZGVuIGRpcmVrdGVuIEVmZmVrdGVuIGluIEZvcm0gZWluZXMgZ2VyaW5nZXJlbiBBbnRlaWxzIHZvbiBkZXByZXNzaXZlbiBNw7x0dGVybiBoYXR0ZSBkaWUgSW50ZXJ2ZW50aW9uIGRlbiBFZmZla3QsIGRhc3MgZGllIE3DvHR0ZXIgaW0gVHJlYXRtZW50IGluIGlocmVyIGZpbmFuemllbGxlbiBIYW5kaGFiZSB1bmFiaMOkbmdpZ2VyIHd1cmRlbiB1bmQgbWVociBpbiBpaHIgS2luZCBpbnZlc3RpZXJ0ZW4gKHNvd29obCBtb25ldMOkciBhbHMgYXVjaCB6ZWl0bGljaCkuIERpZXMgc3ByaWNodCBkYWbDvHIsIGRhc3MgZGllIHJlbGF0aXYgZ8O8bnN0aWdlIEludGVydmVudGlvbiBkdXJjaCBkaWUgcHN5Y2hvbG9naXNjaGUgQmV0cmV1dW5nIHNlaHIgZXJmb2xncmVpY2ggd2FyIHVuZCBlaW5lIGtsYXJlIEFsdGVybmF0aXZlIHp1IEFudGlkZXByZXNzaXZhIGRhcnN0ZWxsdC4gTmF0w7xybGljaCBhdWNoIHZvciBkZW0gSGludGVyZ3J1bmQgZGFzIHN0aWxsZW5kZSBNw7x0dGVyIGtlaW5lIEFudGlkZXByZXNzaXZhIG51dHplbiBzb2xsdGVuLg==