Here, we report on our results on Preferred Relationship Options including Interest in Single Life; Interest in Sexual, Non-Romantic Relationships; Interest in Non-Monogamous Relationships; and Interest in Monogamous Relationships

Library

library(formr)
library(effects)
## Lade nötiges Paket: carData
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
library(effectsize)
library(lme4)
## Lade nötiges Paket: Matrix
library(sjstats)
## 
## Attache Paket: 'sjstats'
## Die folgenden Objekte sind maskiert von 'package:effectsize':
## 
##     cohens_f, cramers_v, phi
library(lmerTest)
## 
## Attache Paket: 'lmerTest'
## Das folgende Objekt ist maskiert 'package:lme4':
## 
##     lmer
## Das folgende Objekt ist maskiert 'package:stats':
## 
##     step
library(dplyr)
## 
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:formr':
## 
##     first, last
## Die folgenden Objekte sind maskiert von 'package:stats':
## 
##     filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(RColorBrewer)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ✔ readr     2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::expand() masks Matrix::expand()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first()  masks formr::first()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::last()   masks formr::last()
## ✖ tidyr::pack()   masks Matrix::pack()
## ✖ tidyr::unpack() masks Matrix::unpack()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(mgcv)         
## Lade nötiges Paket: nlme
## 
## Attache Paket: 'nlme'
## 
## Das folgende Objekt ist maskiert 'package:dplyr':
## 
##     collapse
## 
## Das folgende Objekt ist maskiert 'package:lme4':
## 
##     lmList
## 
## This is mgcv 1.9-1. For overview type 'help("mgcv-package")'.
library(stringr)     
library(sandwich)     
library(lmtest) 
## Lade nötiges Paket: zoo
## 
## Attache Paket: 'zoo'
## 
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     as.Date, as.Date.numeric
library(minqa)
library(tidyr)
library(ggpubr)
library(coefplot)
library(tibble)
library(purrr) # for running multiple regression
library(broom)
## 
## Attache Paket: 'broom'
## 
## Das folgende Objekt ist maskiert 'package:sjstats':
## 
##     bootstrap
library(mvmeta)
## This is mvmeta 1.0.3. For an overview type: help('mvmeta-package').
library(lm.beta)
library(countrycode)

apatheme = theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        axis.line = element_line(),
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5))

Main Analysis

Data

Load selected data based on 03_codebook

data_included_documented = read.csv(file = "data_included_documented.csv")[,-1]

S1 Interest in Single Life

S1 There is a negative linear link between right-wing political orientation and women’s interest in being single.
Outcome: Ratings for interest in single life. Predictor: Political Orientation. Random intercept and random slope for country.

Models
model_interest_single <- lmer(interest_single ~ political_orientation + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_single)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_single ~ political_orientation + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 51974.1
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.7078 -0.9823  0.0163  0.6611  2.7573 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.116849 0.34183       
##           political_orientation 0.003378 0.05812  -0.16
##  Residual                       2.968827 1.72303       
## Number of obs: 13208, groups:  country, 144
## 
## Fixed effects:
##                       Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)            2.44485    0.06422 31.80915  38.068  < 2e-16 ***
## political_orientation -0.06556    0.01711 16.42094  -3.833  0.00141 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## pltcl_rnttn -0.598
confint(model_interest_single, level = 0.997)
## Computing profile confidence intervals ...
##                           0.15 %      99.85 %
## .sig01                 0.1849826  0.579772477
## .sig02                -0.7990715  0.807232991
## .sig03                 0.0000000  0.140181840
## .sigma                 1.6919489  1.755120985
## (Intercept)            2.2391626  2.641095248
## political_orientation -0.1181832 -0.006601603
Standardized Coefficients
standardize_parameters(model_interest_single, method = "basic", ci = 0.997)
## # A tibble: 2 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation         -0.0508 0.997 -0.0901 -0.0114
Plot
lmer(interest_single ~ political_orientation + (1 | country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

S2 Interest in Sexual, Non-Romantic Relationships

S2 There is a negative linear link between right-wing political orientation and women’s interest in having sexual, non-romantic relationships (e.g., hookups, one-night stands). Outcome: Ratings for interest in having sexual, non-romantic relationships. Predictor: Political Orientation. Random intercept and random slope for country.

Models
model_interest_sexrel <- lmer(interest_sexrel ~ political_orientation + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_sexrel)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_sexrel ~ political_orientation + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 53552.6
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.76694 -0.83515 -0.02686  0.69705  2.48827 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.54673  0.7394        
##           political_orientation 0.01011  0.1006   -0.52
##  Residual                       3.34229  1.8282        
## Number of obs: 13193, groups:  country, 144
## 
## Fixed effects:
##                       Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)            2.53992    0.10328 63.44029  24.592   <2e-16 ***
## political_orientation  0.03100    0.02327 25.94934   1.332    0.194    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## pltcl_rnttn -0.654
confint(model_interest_sexrel, level = 0.997)
## Computing profile confidence intervals ...
##                            0.15 %   99.85 %
## .sig01                 0.51174594 1.0650785
## .sig02                -0.83709089 0.2309198
## .sig03                 0.03942878 0.2012493
## .sigma                 1.79514324 1.8622959
## (Intercept)            2.23004337 2.8581617
## political_orientation -0.04325027 0.1036027
Standardized Coefficients
standardize_parameters(model_interest_sexrel, method = "basic", ci = 0.997)
## # A tibble: 2 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation          0.0213 0.997 -0.0262  0.0689
#ci(standardize_parameters(model_interest_sexrel, method = "basic"), ci = 0.997)
Plot
lmer(interest_sexrel ~ political_orientation + (1 + political_orientation| country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

S3 Interest in Non-Monogamous Relationships

S3 There is a negative linear link between right-wing political orientation and women’s interest in having non-monogamous relationships. Outcome: Ratings for interest in having non-monogamous relationships. Predictor: Political Orientation. Random intercept and random slope for country.

Models
model_interest_nonmonrel <- lmer(interest_nonmonrel ~ political_orientation + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_nonmonrel)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_nonmonrel ~ political_orientation + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 47749.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.9692 -0.5948 -0.4801  0.1749  3.8166 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.036929 0.19217       
##           political_orientation 0.003119 0.05585  -0.57
##  Residual                       2.200558 1.48343       
## Number of obs: 13145, groups:  country, 144
## 
## Fixed effects:
##                       Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)            1.05078    0.04819 24.08063   21.81   <2e-16 ***
## political_orientation -0.05907    0.01550 21.31114   -3.81    0.001 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## pltcl_rnttn -0.770
confint(model_interest_nonmonrel, level = 0.997)
## Computing profile confidence intervals ...
##                             0.15 %      99.85 %
## .sig01                 0.064398879  0.389501282
## .sig02                -0.923694403  0.985570830
## .sig03                 0.008087882  0.124709921
## .sigma                 1.456617726  1.511089379
## (Intercept)            0.893957781  1.200128299
## political_orientation -0.107312045 -0.008080654
Standardized Coefficients
standardize_parameters(model_interest_nonmonrel, method = "basic", ci = 0.997)
## # A tibble: 2 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation         -0.0539 0.997 -0.0959 -0.0119
#ci(standardize_parameters(model_interest_nonmonrel, method = "basic"), ci = 0.997)
Plot
lmer(interest_nonmonrel ~ political_orientation + (1+political_orientation|country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()
## boundary (singular) fit: see help('isSingular')

S4 Interest in Monogamous Relationships

S4 There is no link between right-wing political orientation and women’s interest in having monogamous relationships. Outcome: Ratings for interest in having monogamous relationships. Predictor: Political Orientation. Random intercept and random slope for country.

Models
model_interest_monrel <- lmer(interest_monrel ~ political_orientation + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_monrel)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_monrel ~ political_orientation + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 51454.1
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.1161 -0.3455  0.4959  0.6013  1.5791 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.159956 0.39994       
##           political_orientation 0.004759 0.06899  -0.41
##  Residual                       2.888588 1.69958       
## Number of obs: 13165, groups:  country, 144
## 
## Fixed effects:
##                       Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)            4.84081    0.07114 27.75591  68.049   <2e-16 ***
## political_orientation  0.01324    0.01861 17.61097   0.711    0.486    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## pltcl_rnttn -0.669
confint(model_interest_monrel, level = 0.997)
## Computing profile confidence intervals ...
##                            0.15 %    99.85 %
## .sig01                 0.22216840 0.69554009
## .sig02                -0.86699903 1.00000000
## .sig03                 0.01211041 0.15835921
## .sigma                 1.66887322 1.73134443
## (Intercept)            4.60723287 5.06149285
## political_orientation -0.04364710 0.08020918
Standardized Coefficients
standardize_parameters(model_interest_monrel, method = "basic", ci = 0.997)
## # A tibble: 2 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation          0.0103 0.997 -0.0327  0.0534
#ci(standardize_parameters(model_interest_monrel, method = "basic"), ci = 0.997) #calculate by hand to get exact numbers
Plot
lmer(interest_monrel ~ political_orientation + (1+political_orientation|country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

Robustness Analysis

Data

Load selected data based on 03_codebook

data_included_documented = read.csv(file = "data_included_documented.csv")[,-1]

S1 Interest in Single Life

S1 There is a negative linear link between right-wing political orientation and women’s interest in being single.
Outcome: Ratings for interest in single life. Predictors: Political Orientation & Age. Random intercept and random slope for country.

Models
model_interest_single_robustcheck <- lmer(interest_single ~ political_orientation + age + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_single_robustcheck)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_single ~ political_orientation + age + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 51944.6
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -1.77221 -0.95685  0.02419  0.67012  2.76559 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.117131 0.34224       
##           political_orientation 0.003592 0.05993  -0.16
##  Residual                       2.963381 1.72145       
## Number of obs: 13204, groups:  country, 144
## 
## Fixed effects:
##                         Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)            2.724e+00  8.445e-02  9.417e+01  32.261  < 2e-16 ***
## political_orientation -6.838e-02  1.733e-02  1.705e+01  -3.946  0.00104 ** 
## age                   -1.129e-02  2.204e-03  1.320e+04  -5.124 3.04e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) pltcl_
## pltcl_rnttn -0.478       
## age         -0.647  0.032
confint(model_interest_single_robustcheck, level = 0.997)
## Computing profile confidence intervals ...
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): unexpected decrease in
## profile: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in nextpar(mat, cc, i, delta, lowcut, upcut): Last two rows have
## identical or NA .zeta values: using minstep
## Warning in FUN(X[[i]], ...): non-monotonic profile for .sig02
## Warning in confint.thpr(pp, level = level, zeta = zeta): bad spline fit for
## .sig02: falling back to linear interpolation
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## Reduktion auf einmalige 'x' Werte
##                            0.15 %      99.85 %
## .sig01                 0.18598545  0.579885456
## .sig02                -0.87343169  1.000000000
## .sig03                 0.00000000  0.141917484
## .sigma                 1.69032568  1.753447203
## (Intercept)            2.46746166  2.976973473
## political_orientation -0.12162835 -0.008907457
## age                   -0.01782619 -0.004743392
Standardized Coefficients
standardize_parameters(model_interest_single_robustcheck, method = "basic", ci = 0.997)
## # A tibble: 3 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation         -0.0529 0.997 -0.0927 -0.0131
## 3 age                           -0.0441 0.997 -0.0697 -0.0186
#ci(standardize_parameters(model_interest_single_robustcheck, method = "basic"), ci = 0.997)
Plot
lmer(interest_single ~ political_orientation + age + (1+political_orientation|country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00264607 (tol = 0.002, component 1)

S2 Interest in Sexual, Non-Romantic Relationships

S2 There is a negative linear link between right-wing political orientation and women’s interest in having sexual, non-romantic relationships (e.g., hookups, one-night stands). Outcome: Ratings for interest in having sexual, non-romantic relationships. Predictors: Political Orientation & Age. Random intercept and random slope for country.

Models
model_interest_sexrel_robustcheck <- lmer(interest_sexrel ~ political_orientation + age + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_sexrel_robustcheck)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_sexrel ~ political_orientation + age + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 53293.5
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.91783 -0.86031 -0.04707  0.71412  3.04454 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.536147 0.73222       
##           political_orientation 0.009233 0.09609  -0.49
##  Residual                       3.278802 1.81075       
## Number of obs: 13189, groups:  country, 144
## 
## Fixed effects:
##                         Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)            3.465e+00  1.171e-01  1.142e+02  29.593   <2e-16 ***
## political_orientation  2.096e-02  2.265e-02  2.559e+01   0.925    0.364    
## age                   -3.715e-02  2.324e-03  1.316e+04 -15.987   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) pltcl_
## pltcl_rnttn -0.570       
## age         -0.494  0.028
confint(model_interest_sexrel_robustcheck, level = 0.997)
## Computing profile confidence intervals ...
##                            0.15 %     99.85 %
## .sig01                 0.51125710  1.04860121
## .sig02                -0.82654392  0.26568627
## .sig03                 0.03665801  0.19421010
## .sigma                 1.77793911  1.84445400
## (Intercept)            3.11630975  3.82004787
## political_orientation -0.05162425  0.09155244
## age                   -0.04405250 -0.03025721
Standardized Coefficients
standardize_parameters(model_interest_sexrel_robustcheck, method = "basic", ci = 0.997)
## # A tibble: 3 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation          0.0144 0.997 -0.0319  0.0607
## 3 age                           -0.129  0.997 -0.153  -0.105
#ci(standardize_parameters(model_interest_sexrel_robustcheck, method = "basic"), ci = 0.997)
#calculate by hand to get exact numbers
Plot
lmer(interest_sexrel ~ political_orientation + age + (1|country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

S3 Interest in Non-Monogamous Relationships

S3 There is a negative linear link between right-wing political orientation and women’s interest in having non-monogamous relationships. Outcome: Ratings for interest in having non-monogamous relationships. Predictors: Political Orientation & Age. Random intercept and random slope for country.

Models
model_interest_nonmonrel_robustcheck <- lmer(interest_nonmonrel ~ political_orientation + age + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_nonmonrel_robustcheck)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_nonmonrel ~ political_orientation + age + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 47748.1
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.9724 -0.5972 -0.4791  0.1761  3.8178 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.036904 0.19210       
##           political_orientation 0.003098 0.05566  -0.57
##  Residual                       2.201192 1.48364       
## Number of obs: 13141, groups:  country, 144
## 
## Fixed effects:
##                         Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)            1.033e+00  6.724e-02  8.872e+01  15.357  < 2e-16 ***
## political_orientation -5.884e-02  1.549e-02  2.136e+01  -3.798  0.00103 ** 
## age                    7.390e-04  1.899e-03  1.310e+04   0.389  0.69715    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) pltcl_
## pltcl_rnttn -0.573       
## age         -0.698  0.031
confint(model_interest_nonmonrel_robustcheck, level = 0.997)
## Computing profile confidence intervals ...
##                             0.15 %      99.85 %
## .sig01                 0.064113969  0.389476424
## .sig02                -0.923882439  0.759957786
## .sig03                 0.007668933  0.124407294
## .sigma                 1.456768369  1.511253817
## (Intercept)            0.827678660  1.233629191
## political_orientation -0.107023703 -0.007890225
## age                   -0.004899292  0.006375122
Standardized Coefficients
standardize_parameters(model_interest_nonmonrel_robustcheck, method = "basic", ci = 0.997)
## # A tibble: 3 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                   0       0.997  0       0     
## 2 political_orientation        -0.0537  0.997 -0.0956 -0.0117
## 3 age                           0.00340 0.997 -0.0226  0.0294
Plot
lmer(interest_nonmonrel ~ political_orientation + age + (1 | country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

S4 Interest in Monogamous Relationships

S4 There is no link between right-wing political orientation and women’s interest in having monogamous relationships. Outcome: Ratings for interest in having monogamous relationships. Predictors: Political Orientation & Age. Random intercept and random slope for country.

Models
model_interest_monrel_robustcheck <- lmer(interest_monrel ~ political_orientation + age + (1+political_orientation|country), data = data_included_documented, control =lmerControl(optimizer = "bobyqa"))
Summary
summary(model_interest_monrel_robustcheck)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## interest_monrel ~ political_orientation + age + (1 + political_orientation |  
##     country)
##    Data: data_included_documented
## Control: lmerControl(optimizer = "bobyqa")
## 
## REML criterion at convergence: 51395.4
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.3078 -0.3357  0.4511  0.6122  1.6180 
## 
## Random effects:
##  Groups   Name                  Variance Std.Dev. Corr 
##  country  (Intercept)           0.149360 0.38647       
##           political_orientation 0.004552 0.06747  -0.37
##  Residual                       2.877455 1.69631       
## Number of obs: 13161, groups:  country, 144
## 
## Fixed effects:
##                        Estimate Std. Error        df t value Pr(>|t|)    
## (Intercept)           4.435e+00  8.808e-02 6.914e+01  50.349  < 2e-16 ***
## political_orientation 1.756e-02  1.838e-02 1.723e+01   0.955    0.353    
## age                   1.636e-02  2.174e-03 1.315e+04   7.526 5.58e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) pltcl_
## pltcl_rnttn -0.540       
## age         -0.612  0.031
confint(model_interest_monrel_robustcheck, level = 0.997)
## Computing profile confidence intervals ...
##                            0.15 %    99.85 %
## .sig01                 0.21515994 0.67856164
## .sig02                -0.85879483 0.89318148
## .sig03                 0.01048347 0.15671408
## .sigma                 1.66558877 1.72794152
## (Intercept)            4.16017509 4.70168722
## political_orientation -0.03844329 0.08417633
## age                    0.00991095 0.02281649
Standardized Coefficients
standardize_parameters(model_interest_monrel_robustcheck, method = "basic", ci = 0.997)
## # A tibble: 3 × 5
##   Parameter             Std_Coefficient    CI  CI_low CI_high
##   <chr>                           <dbl> <dbl>   <dbl>   <dbl>
## 1 (Intercept)                    0      0.997  0       0     
## 2 political_orientation          0.0137 0.997 -0.0289  0.0562
## 3 age                            0.0644 0.997  0.0390  0.0899
Plot
lmer(interest_monrel ~ political_orientation + age + (1| country),
       data = data_included_documented) %>%
    allEffects() %>%
    plot()

Exploratory Analysis for Countries

Data

Load selected data based on 03_codebook

data_included_documented = read.csv(file = "data_included_documented.csv")[,-1]

Inclusion of Data

countries = as.data.frame(table(data_included_documented$country)) %>%
  arrange(-Freq)

countries
## # A tibble: 144 × 2
##    Var1                      Freq
##    <fct>                    <int>
##  1 France                    2013
##  2 Germany                   1846
##  3 United States of America  1254
##  4 Mexico                    1157
##  5 Italy                      968
##  6 Brazil                     806
##  7 Spain                      562
##  8 United Kingdom             499
##  9 Denmark                    395
## 10 Colombia                   387
## # ℹ 134 more rows

We will include all countries with more than 500 participants. This allows us to show effect sizes for a diverse range of countries. Diversity of countries is indicated by:

  • location: European (France, Germany, Italy, Spain); North American (United States of America); South American (Mexico, Brazil)
  • language: French (France); German (Germany); English (United States of America); Spanish (Mexico, Spain); Italian (Italy); Portuguese (Brazil)
  • culture: Western (France, Germany, Italy, Spain, United States of America); Non-Western (Mexico, Brazil)

Sample sizes of other countries are too small (n < 500) to reach any conclusions.

seven_countries = countries %>% filter(Freq > 500)
data_included_documented_rescon = data_included_documented %>%
  filter(country %in% seven_countries$Var1)
countries_rescon =
  data_included_documented_rescon %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


countries_rescon
## # A tibble: 7 × 2
##   country                   Freq
##   <fct>                    <int>
## 1 France                    2013
## 2 Germany                   1846
## 3 United States of America  1254
## 4 Mexico                    1157
## 5 Italy                      968
## 6 Brazil                     806
## 7 Spain                      562

Models

S1 Interest in Single Life
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(interest_single, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_interest_single = data_included_documented_rescon_wide %>%
  select(-interest_single) %>%
  map(~lm(data_included_documented_rescon_wide$interest_single ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_interest_single_coef = models_interest_single %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_single_se = models_interest_single %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))



models_interest_single_analyses = left_join(models_interest_single_coef,
                                            models_interest_single_se,
                                            by = "name") %>%
  mutate(outcome = "S1 Interest in Single Life")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(interest_single)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_interest_single_analyses$n = countries_rescon$Freq
sum(models_interest_single_analyses$n)
## [1] 8577
model = mvmeta(mean ~ 1, data = models_interest_single_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_single_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.0614      0.0136  -4.5225    0.0000   -0.0881   -0.0348  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 8.4415 (df = 6), p-value = 0.2075
## I-square statistic = 28.9%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##  12.4542  -22.9084  -22.9624
S2 Interest in Sexual, Non-Romantic Relationships
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(interest_sexrel, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_interest_sexrel = data_included_documented_rescon_wide %>%
  select(-interest_sexrel) %>%
  map(~lm(data_included_documented_rescon_wide$interest_sexrel ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_interest_sexrel_coef = models_interest_sexrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_sexrel_se = models_interest_sexrel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))



models_interest_sexrel_analyses = left_join(models_interest_sexrel_coef,
                                            models_interest_sexrel_se,
                                            by = "name") %>%
  mutate(outcome = "S2 Interest in Sexual, Non-Romantic Relationships")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(interest_sexrel)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_interest_sexrel_analyses$n = countries_rescon$Freq
sum(models_interest_sexrel_analyses$n)
## [1] 8567
model = mvmeta(mean ~ 1, data = models_interest_sexrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_sexrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub   
## (Intercept)    0.0356      0.0145  2.4579    0.0140    0.0072    0.0640  *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 23.8985 (df = 6), p-value = 0.0005
## I-square statistic = 74.9%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
##  4.2988  -6.5976  -6.6516
S3 Interest in Non-Monogamous Relationships
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(interest_nonmonrel, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_interest_nonmonrel = data_included_documented_rescon_wide %>%
  select(-interest_nonmonrel) %>%
  map(~lm(data_included_documented_rescon_wide$interest_nonmonrel ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_interest_nonmonrel_coef = models_interest_nonmonrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_nonmonrel_se = models_interest_nonmonrel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))



models_interest_nonmonrel_analyses = left_join(models_interest_nonmonrel_coef,
                                            models_interest_nonmonrel_se,
                                            by = "name") %>%
  mutate(outcome = "S3 Interest in Non-Monogamous Relationships")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(interest_nonmonrel)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_interest_nonmonrel_analyses$n = countries_rescon$Freq
sum(models_interest_nonmonrel_analyses$n)
## [1] 8537
model = mvmeta(mean ~ 1, data = models_interest_nonmonrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_nonmonrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.0675      0.0112  -6.0030    0.0000   -0.0896   -0.0455  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 18.3263 (df = 6), p-value = 0.0055
## I-square statistic = 67.3%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   8.6479  -15.2957  -15.3498
S4 Interest in Monogamous Relationships
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(interest_monrel, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_interest_monrel = data_included_documented_rescon_wide %>%
  select(-interest_monrel) %>%
  map(~lm(data_included_documented_rescon_wide$interest_monrel ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_interest_monrel_coef = models_interest_monrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_monrel_se = models_interest_monrel %>%
 map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))



models_interest_monrel_analyses = left_join(models_interest_monrel_coef,
                                            models_interest_monrel_se,
                                            by = "name") %>%
  mutate(outcome = "S4 Interest in Monogamous Relationships")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(interest_monrel)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_interest_monrel_analyses$n = countries_rescon$Freq
sum(models_interest_monrel_analyses$n)
## [1] 8548
model = mvmeta(mean ~ 1, data = models_interest_monrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_monrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub   
## (Intercept)   -0.0048      0.0133  -0.3588    0.7197   -0.0307    0.0212   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 9.1679 (df = 6), p-value = 0.1644
## I-square statistic = 34.6%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##  12.0307  -22.0613  -22.1154

Exploratory Analysis for Regions

Data

Load selected data based on 03_codebook

data_included_documented = read.csv(file = "data_included_documented.csv")[,-1]

Inclusion of Data

data_included_documented <- data_included_documented %>%
  mutate(region1 = countrycode(country,
                                 origin = "country.name",
                                 destination = "region"),
         region1 = ifelse(country == "Micronesia",
                            "East Asia and Pacific",
                            region1),
         region2 = countrycode(country,
                                 origin = "country.name",
                                 destination = "continent"),
         region2 = ifelse(country == "Micronesia",
                            "Oceania",
                            region2))
## Warning: There were 2 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `region1 = countrycode(country, origin = "country.name",
##   destination = "region")`.
## Caused by warning:
## ! Some values were not matched unambiguously: Micronesia
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
table(data_included_documented$region1)
## 
##        East Asia & Pacific      East Asia and Pacific 
##                        674                          1 
##      Europe & Central Asia  Latin America & Caribbean 
##                       7441                       3325 
## Middle East & North Africa              North America 
##                         90                       1592 
##                 South Asia         Sub-Saharan Africa 
##                         59                         75
table(data_included_documented$region2)
## 
##   Africa Americas     Asia   Europe  Oceania 
##      108     4917      645     7417      170
data_included_documented = data_included_documented %>%
  mutate(region_final = ifelse(region2 == "Africa", "Africa",
                                  ifelse(region2 == "Asia", "Asia",
                                         ifelse(region2 == "Europe", "Europe",
                           ifelse(region2 == "Oceania", "Oceania",
                                  ifelse(region1 == "Latin America & Caribbean",
                                         "Latin and South America",
                                         ifelse(region1 == "North America",
                                                "North America", NA)))))))

data_included_documented <- data_included_documented %>%
  mutate(region_final = ifelse(country %in% c("Afghanistan", "Bahrain", "Iran",
                                                 "Iraq", "Israel", "Jordan", 
                                                 "Kazakhstan", "Kuwait", "Kyrgyzstan",
                                                 "Lebanon", "Pakistan", 
                                                 "Palestinian Territories", "Qatar",
                                                 "Saudi Arabia", "Syria", 
                                                 "Turkey", "Turkmenistan",
                                                 "United Arab Emirates", "Indonesia"),
                                  "Middle East and Central Asia", region_final),
         region_final = ifelse(country %in% c("Armenia", "Burma",
                                                 "China",
                                                 "East Timor (see Timor-Leste)", 
                                                 "Georgia", "Hong Kong", "India",
                                                 "Japan", "Malaysia", "Maldives",
                                                 "Nepal", "Philippines", "Singapore",
                                                 "South Korea", "Sri Lanka", 
                                                 "Taiwan", "Thailand", "Vietnam"), 
                                  "South and East Asia", region_final))

x <- data_included_documented %>% 
  select(country, region_final) %>%
  group_by(country, region_final) %>%
  summarize(n = n()) %>%
  arrange(region_final, country)
## `summarise()` has grouped output by 'country'. You can override using the
## `.groups` argument.
write.csv2(x, file = "country_regions.csv")

regions <- x %>%
  group_by(region_final) %>%
  summarize(countries = n(),
            participants = sum(n))

regions
## # A tibble: 7 × 3
##   region_final                 countries participants
##   <chr>                            <int>        <int>
## 1 Africa                              26          108
## 2 Europe                              41         7417
## 3 Latin and South America             33         3325
## 4 Middle East and Central Asia        19          103
## 5 North America                        2         1592
## 6 Oceania                              5          170
## 7 South and East Asia                 18          542

We will include all regions with more than 500 participants. This allows us to show effect sizes for a diverse range of regions.

These regions include the following countries (n)

Europe included 41 countries: France (n = 2,013); Germany (n = 1,846); Italy (n = 968); Spain (n = 562); United Kingdom (n = 499); Denmark (n = 395); Switzerland (n = 280); Austria (n = 197); Russia (n = 155); Belgium (n = 102); Ireland (n = 59); Portugal (n = 51); Netherlands (n = 44); Finland (n = 31); Sweden (n = 27); Romania (n = 24); Ukraine (n = 21); Belarus (n = 13); Luxembourg (n = 13); Estonia (n = 12); Norway (n = 12); Czechia (n = 11); Bulgaria (n = 9); Hungary (n = 9); Latvia (n = 8); Poland (n = 7); Andorra (n = 6); Bosnia and Herzegovina (n = 6); Croatia (n = 6); Iceland (n = 5); Serbia (n = 5); Greece (n = 4); Lithuania (n = 3); Slovakia (n = 3); Slovenia (n = 3); Albania (n = 2); Malta (n = 2); Liechtenstein (n = 1); Macedonia (n = 1); Monaco (n = 1); and Montenegro (n = 1).

Latin and South America included 33 countries: Mexico (n = 1157); Brazil (n = 806); Colombia (n = 387); Argentina (n = 217); Chile (n = 154); Peru (n = 119); Ecuador (n = 102); Venezuela (n = 67); Guatemala (n = 61); Costa Rica (n = 47); Dominican Republic (n = 41); El Salvador (n = 26); Uruguay (n = 24); Bolivia (n = 23); Honduras (n = 18); Nicaragua (n = 15); Panama (n = 15); Paraguay (n = 11); Trinidad and Tobago (n = 8); Jamaica (n = 6); Haiti (n = 4); Guyana (n = 3); Antigua and Barbuda (n = 2); Dominica (n = 2); Saint Lucia (n = 2); Aruba (n = 1); Bahamas (n = 1); Barbados (n = 1); Belize (n = 1); Cuba (n = 1); Grenada (n = 1); Saint Vincent and the Grenadines (n = 1); and Sint Maarten (n = 1).

North America included 2 countries: United States of America (n = 1254) and Canada (n = 338).

South and East Asia included 18 countries: Japan (n = 290); China (n = 90); India (n = 45); Philippines (n = 36); Singapore (n = 26); Malaysia (n = 17); Hong Kong (n = 8); Taiwan (n = 7); South Korea (n = 5); Thailand (n = 4); Georgia (n = 3); Sri Lanka (n = 3); Armenia (n = 2); Vietnam (n = 2); Burma (n = 1); East Timor (n = 1); Maldives (n = 1); and Nepal (n = 1).

Oceania included 5 countries: Australia (n = 133); New Zealand (n = 34); Fiji (n = 1); Marshall Islands (n = 1); and Micronesia (n = 1).

Africa included 26 countries: South Africa (n = 29); Morocco (n = 16); Algeria (n = 7); Tunisia (n = 7); Kenya (n = 6); Nigeria (n = 6); Senegal (n = 5); Namibia (n = 4); Cameroon (n = 3); Egypt (n = 3); Ghana (n = 3); Benin (n = 2); Central African Republic (n = 2); Mali (n = 2); Mauritius (n = 2); Botswana (n = 1); Cote d’Ivoire (n = 1); Ethiopia (n = 1); Guinea-Bissau (n = 1); Madagascar (n = 1); Mauritania (n = 1); South Sudan (n = 1); Swaziland (n = 1); Tanzania (n = 1); Uganda (n = 1); and Zimbabwe (n = 1).

Middle East and Central Asia included 19 countries: Indonesia (n = 18); United Arab Emirates (n = 14); Israel (n = 13); Kazakhstan (n = 9); Pakistan (n = 8); Turkey (n = 8); Iran (n = 7); Saudi Arabia (n = 6); Bahrain (n = 3); Lebanon (n = 3); Jordan (n = 2); Kyrgyzstan (n = 2); Palestinian Territories (n = 2); Qatar (n = 2); Turkmenistan (n = 2); Afghanistan (n = 1); Iraq (n = 1); Kuwait (n = 1); and Syria (n = 1).

We investigated how effects of political orientation on partner preferences differed between four different regions. Namely, these were Europe (n = 7,417), Latin and South America (n = 3,325), North America (n = 1,592), and South and East Asia (n = 542). We could not include Oceania (n = 170), Africa (n = 108), and Middle East and Central Asia (n = 103) because sample sizes were too small (n < 500) to reach any conclusions.

regions = regions %>% filter(participants > 500)
data_included_documented_reg = data_included_documented %>%
  filter(region_final %in% regions$region_final)
regions_reg =
  data_included_documented_reg %>%
  select(region_final, country) %>%
  table() %>%
  as.data.frame() %>%
  filter(Freq != 0) %>%
  arrange(-Freq)


regions_reg
## # A tibble: 94 × 3
##    region_final            country                   Freq
##    <fct>                   <fct>                    <int>
##  1 Europe                  France                    2013
##  2 Europe                  Germany                   1846
##  3 North America           United States of America  1254
##  4 Latin and South America Mexico                    1157
##  5 Europe                  Italy                      968
##  6 Latin and South America Brazil                     806
##  7 Europe                  Spain                      562
##  8 Europe                  United Kingdom             499
##  9 Europe                  Denmark                    395
## 10 Latin and South America Colombia                   387
## # ℹ 84 more rows

Models

S1 Interest in Single Life
data_included_documented_reg_wide = data_included_documented_reg %>%
  pivot_wider(names_from = region_final, values_from = political_orientation) %>%
  select(interest_single, Europe, 'South and East Asia', 'Latin and South America', 'North America')

models_interest_single = data_included_documented_reg_wide %>%
  select(-interest_single) %>%
  map(~lm(scale(data_included_documented_reg_wide$interest_single) ~ scale(.x),
      data = data_included_documented_reg_wide)) %>%
  map(lm.beta)

models_interest_single_coef = models_interest_single %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_single_se = models_interest_single %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
   mutate(name = ifelse(name == "South and East Asia",
                       "South.and.East.Asia",
                       ifelse(name == "Latin and South America",
                       "Latin.and.South.America",
                       ifelse(name == "North America",
                       "North.America",
                       name))))

models_interest_single_analyses = left_join(models_interest_single_coef,
                                            models_interest_single_se,
                                            by = "name") %>%
  mutate(outcome = "S1 Interest in Single Life")

countries_reg =
  data_included_documented_reg %>%
  filter(!is.na(interest_single)) %>%
  select(region_final) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


models_interest_single_analyses$n = countries_reg$Freq
sum(models_interest_single_analyses$n)
## [1] 12830
model = mvmeta(mean ~ 1, data = models_interest_single_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_single_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.0607      0.0087  -6.9773    0.0000   -0.0778   -0.0437  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 16.4400 (df = 3), p-value = 0.0009
## I-square statistic = 81.8%
## 
## 4 studies, 4 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
##  3.5018  -5.0037  -5.6174
S2 Interest in Sexual, Non-Romantic Relationships
data_included_documented_reg_wide = data_included_documented_reg %>%
  pivot_wider(names_from = region_final, values_from = political_orientation) %>%
  select(interest_sexrel, Europe, 'South and East Asia', 'Latin and South America', 'North America')

models_interest_sexrel = data_included_documented_reg_wide %>%
  select(-interest_sexrel) %>%
  map(~lm(scale(data_included_documented_reg_wide$interest_sexrel) ~ scale(.x),
          data = data_included_documented_reg_wide)) %>%
  map(lm.beta)

models_interest_sexrel_coef = models_interest_sexrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_sexrel_se = models_interest_sexrel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "South and East Asia",
                       "South.and.East.Asia",
                       ifelse(name == "Latin and South America",
                              "Latin.and.South.America",
                              ifelse(name == "North America",
                                     "North.America",
                                     name))))

models_interest_sexrel_analyses = left_join(models_interest_sexrel_coef,
                                            models_interest_sexrel_se,
                                            by = "name") %>%
  mutate(outcome = "S1 Interest in Single Life")

countries_reg =
  data_included_documented_reg %>%
  filter(!is.na(interest_sexrel)) %>%
  select(region_final) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


models_interest_sexrel_analyses$n = countries_reg$Freq
sum(models_interest_sexrel_analyses$n)
## [1] 12816
model = mvmeta(mean ~ 1, data = models_interest_sexrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_sexrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0392      0.0086  4.5559    0.0000    0.0223    0.0561  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 30.3133 (df = 3), p-value = 0.0000
## I-square statistic = 90.1%
## 
## 4 studies, 4 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
## -3.4338   8.8677   8.2539
S3 Interest in Non-Monogamous Relationships
data_included_documented_reg_wide = data_included_documented_reg %>%
  pivot_wider(names_from = region_final, values_from = political_orientation) %>%
  select(interest_nonmonrel, Europe, 'South and East Asia', 'Latin and South America', 'North America')

models_interest_nonmonrel = data_included_documented_reg_wide %>%
  select(-interest_nonmonrel) %>%
  map(~lm(scale(data_included_documented_reg_wide$interest_nonmonrel) ~ scale(.x),
          data = data_included_documented_reg_wide)) %>%
  map(lm.beta)

models_interest_nonmonrel_coef = models_interest_nonmonrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_nonmonrel_se = models_interest_nonmonrel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "South and East Asia",
                       "South.and.East.Asia",
                       ifelse(name == "Latin and South America",
                              "Latin.and.South.America",
                              ifelse(name == "North America",
                                     "North.America",
                                     name))))

models_interest_nonmonrel_analyses = left_join(models_interest_nonmonrel_coef,
                                            models_interest_nonmonrel_se,
                                            by = "name") %>%
  mutate(outcome = "S1 Interest in Single Life")

countries_reg =
  data_included_documented_reg %>%
  filter(!is.na(interest_nonmonrel)) %>%
  select(region_final) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


models_interest_nonmonrel_analyses$n = countries_reg$Freq
sum(models_interest_nonmonrel_analyses$n)
## [1] 12772
model = mvmeta(mean ~ 1, data = models_interest_nonmonrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_nonmonrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.0597      0.0087  -6.8974    0.0000   -0.0767   -0.0427  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 9.0060 (df = 3), p-value = 0.0292
## I-square statistic = 66.7%
## 
## 4 studies, 4 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   7.1120  -12.2240  -12.8377
S4 Interest in Monogamous Relationships
data_included_documented_reg_wide = data_included_documented_reg %>%
  pivot_wider(names_from = region_final, values_from = political_orientation) %>%
  select(interest_monrel, Europe, 'South and East Asia', 'Latin and South America', 'North America')

models_interest_monrel = data_included_documented_reg_wide %>%
  select(-interest_monrel) %>%
  map(~lm(scale(data_included_documented_reg_wide$interest_monrel) ~ scale(.x),
          data = data_included_documented_reg_wide)) %>%
  map(lm.beta)

models_interest_monrel_coef = models_interest_monrel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_interest_monrel_se = models_interest_monrel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "South and East Asia",
                       "South.and.East.Asia",
                       ifelse(name == "Latin and South America",
                              "Latin.and.South.America",
                              ifelse(name == "North America",
                                     "North.America",
                                     name))))

models_interest_monrel_analyses = left_join(models_interest_monrel_coef,
                                            models_interest_monrel_se,
                                            by = "name") %>%
  mutate(outcome = "S1 Interest in Single Life")

countries_reg =
  data_included_documented_reg %>%
  filter(!is.na(interest_monrel)) %>%
  select(region_final) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


models_interest_monrel_analyses$n = countries_reg$Freq
sum(models_interest_monrel_analyses$n)
## [1] 12791
model = mvmeta(mean ~ 1, data = models_interest_monrel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_interest_monrel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub   
## (Intercept)   -0.0182      0.0086  -2.1055    0.0353   -0.0351   -0.0013  *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 9.4189 (df = 3), p-value = 0.0242
## I-square statistic = 68.1%
## 
## 4 studies, 4 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   7.1469  -12.2938  -12.9075
LS0tDQp0aXRsZTogPGZvbnQgY29sb3I9IiM2NkMyQTUiPlN1cHBsZW1lbnRhcnkgQW5hbHlzZXM8L2ZvbnQ+DQpjc2w6IGFwYS1jdXN0b20tbm8taXNzdWUuY3NsDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCg0KIyMgey50YWJzZXR9DQpIZXJlLCB3ZSByZXBvcnQgb24gb3VyIHJlc3VsdHMgb24gUHJlZmVycmVkIFJlbGF0aW9uc2hpcCBPcHRpb25zIGluY2x1ZGluZyBJbnRlcmVzdCBpbiBTaW5nbGUgTGlmZTsgSW50ZXJlc3QgaW4gU2V4dWFsLCBOb24tUm9tYW50aWMgUmVsYXRpb25zaGlwczsgSW50ZXJlc3QgaW4gTm9uLU1vbm9nYW1vdXMgUmVsYXRpb25zaGlwczsgYW5kIEludGVyZXN0IGluIE1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyANCg0KIyMjIExpYnJhcnkNCmBgYHtyIExpYnJhcnl9DQpsaWJyYXJ5KGZvcm1yKQ0KbGlicmFyeShlZmZlY3RzKQ0KbGlicmFyeShlZmZlY3RzaXplKQ0KbGlicmFyeShsbWU0KQ0KbGlicmFyeShzanN0YXRzKQ0KbGlicmFyeShsbWVyVGVzdCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShtZ2N2KSAgICAgICAgIA0KbGlicmFyeShzdHJpbmdyKSAgICAgDQpsaWJyYXJ5KHNhbmR3aWNoKSAgICAgDQpsaWJyYXJ5KGxtdGVzdCkgDQpsaWJyYXJ5KG1pbnFhKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZ2dwdWJyKQ0KbGlicmFyeShjb2VmcGxvdCkNCmxpYnJhcnkodGliYmxlKQ0KbGlicmFyeShwdXJycikgIyBmb3IgcnVubmluZyBtdWx0aXBsZSByZWdyZXNzaW9uDQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShtdm1ldGEpDQpsaWJyYXJ5KGxtLmJldGEpDQpsaWJyYXJ5KGNvdW50cnljb2RlKQ0KDQphcGF0aGVtZSA9IHRoZW1lX2J3KCkgKw0KICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZSgpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KYGBgDQoNCiMjIyBNYWluIEFuYWx5c2lzIHsudGFic2V0IC5hY3RpdmV9DQojIyMjIERhdGENCkxvYWQgc2VsZWN0ZWQgZGF0YSBiYXNlZCBvbiAwM19jb2RlYm9vaw0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgPSByZWFkLmNzdihmaWxlID0gImRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZC5jc3YiKVssLTFdDQpgYGANCg0KIyMjIyBTMSBJbnRlcmVzdCBpbiBTaW5nbGUgTGlmZSB7LnRhYnNldH0NClMxIFRoZXJlIGlzIGEgbmVnYXRpdmUgbGluZWFyIGxpbmsgYmV0d2VlbiByaWdodC13aW5nIHBvbGl0aWNhbCBvcmllbnRhdGlvbiBhbmQgd29tZW7igJlzIGludGVyZXN0IGluIGJlaW5nIHNpbmdsZS4gIA0KT3V0Y29tZTogUmF0aW5ncyBmb3IgaW50ZXJlc3QgaW4gc2luZ2xlIGxpZmUuIFByZWRpY3RvcjogUG9saXRpY2FsIE9yaWVudGF0aW9uLiBSYW5kb20gaW50ZXJjZXB0IGFuZCByYW5kb20gc2xvcGUgZm9yIGNvdW50cnkuDQoNCiMjIyMjIE1vZGVscw0KYGBge3J9DQptb2RlbF9pbnRlcmVzdF9zaW5nbGUgPC0gbG1lcihpbnRlcmVzdF9zaW5nbGUgfiBwb2xpdGljYWxfb3JpZW50YXRpb24gKyAoMStwb2xpdGljYWxfb3JpZW50YXRpb258Y291bnRyeSksIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQsIGNvbnRyb2wgPWxtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCmBgYA0KDQojIyMjIyBTdW1tYXJ5DQpgYGB7cn0NCnN1bW1hcnkobW9kZWxfaW50ZXJlc3Rfc2luZ2xlKQ0KY29uZmludChtb2RlbF9pbnRlcmVzdF9zaW5nbGUsIGxldmVsID0gMC45OTcpDQpgYGANCg0KIyMjIyMgU3RhbmRhcmRpemVkIENvZWZmaWNpZW50cw0KYGBge3J9DQpzdGFuZGFyZGl6ZV9wYXJhbWV0ZXJzKG1vZGVsX2ludGVyZXN0X3NpbmdsZSwgbWV0aG9kID0gImJhc2ljIiwgY2kgPSAwLjk5NykNCmBgYA0KDQojIyMjIyBQbG90IHsuYWN0aXZlfQ0KYGBge3J9DQpsbWVyKGludGVyZXN0X3NpbmdsZSB+IHBvbGl0aWNhbF9vcmllbnRhdGlvbiArICgxIHwgY291bnRyeSksDQogICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCkgJT4lDQogICAgYWxsRWZmZWN0cygpICU+JQ0KICAgIHBsb3QoKQ0KYGBgDQoNCiMjIyMgUzIgSW50ZXJlc3QgaW4gU2V4dWFsLCBOb24tUm9tYW50aWMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NClMyIFRoZXJlIGlzIGEgbmVnYXRpdmUgbGluZWFyIGxpbmsgYmV0d2VlbiByaWdodC13aW5nIHBvbGl0aWNhbCBvcmllbnRhdGlvbiBhbmQgd29tZW7igJlzIGludGVyZXN0IGluIGhhdmluZyBzZXh1YWwsIG5vbi1yb21hbnRpYyByZWxhdGlvbnNoaXBzIChlLmcuLCBob29rdXBzLCBvbmUtbmlnaHQgc3RhbmRzKS4NCk91dGNvbWU6IFJhdGluZ3MgZm9yIGludGVyZXN0IGluIGhhdmluZyBzZXh1YWwsIG5vbi1yb21hbnRpYyByZWxhdGlvbnNoaXBzLiBQcmVkaWN0b3I6IFBvbGl0aWNhbCBPcmllbnRhdGlvbi4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3Rfc2V4cmVsIDwtIGxtZXIoaW50ZXJlc3Rfc2V4cmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X3NleHJlbCkNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3Rfc2V4cmVsLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9zZXhyZWwsIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQojY2koc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9zZXhyZWwsIG1ldGhvZCA9ICJiYXNpYyIpLCBjaSA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFBsb3Qgey5hY3RpdmV9DQpgYGB7cn0NCmxtZXIoaW50ZXJlc3Rfc2V4cmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgKDEgKyBwb2xpdGljYWxfb3JpZW50YXRpb258IGNvdW50cnkpLA0KICAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQpICU+JQ0KICAgIGFsbEVmZmVjdHMoKSAlPiUNCiAgICBwbG90KCkNCmBgYA0KDQojIyMjIFMzIEludGVyZXN0IGluIE5vbi1Nb25vZ2Ftb3VzIFJlbGF0aW9uc2hpcHMgey50YWJzZXR9DQpTMyBUaGVyZSBpcyBhIG5lZ2F0aXZlIGxpbmVhciBsaW5rIGJldHdlZW4gcmlnaHQtd2luZyBwb2xpdGljYWwgb3JpZW50YXRpb24gYW5kIHdvbWVu4oCZcyBpbnRlcmVzdCBpbiBoYXZpbmcgbm9uLW1vbm9nYW1vdXMgcmVsYXRpb25zaGlwcy4NCk91dGNvbWU6IFJhdGluZ3MgZm9yIGludGVyZXN0IGluIGhhdmluZyBub24tbW9ub2dhbW91cyByZWxhdGlvbnNoaXBzLiBQcmVkaWN0b3I6IFBvbGl0aWNhbCBPcmllbnRhdGlvbi4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3Rfbm9ubW9ucmVsIDwtIGxtZXIoaW50ZXJlc3Rfbm9ubW9ucmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X25vbm1vbnJlbCkNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3Rfbm9ubW9ucmVsLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9ub25tb25yZWwsIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQojY2koc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9ub25tb25yZWwsIG1ldGhvZCA9ICJiYXNpYyIpLCBjaSA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFBsb3Qgey5hY3RpdmV9DQpgYGB7cn0NCmxtZXIoaW50ZXJlc3Rfbm9ubW9ucmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLA0KICAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQpICU+JQ0KICAgIGFsbEVmZmVjdHMoKSAlPiUNCiAgICBwbG90KCkNCmBgYA0KDQojIyMjIFM0IEludGVyZXN0IGluIE1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NClM0IFRoZXJlIGlzIG5vIGxpbmsgYmV0d2VlbiByaWdodC13aW5nIHBvbGl0aWNhbCBvcmllbnRhdGlvbiBhbmQgd29tZW7igJlzIGludGVyZXN0IGluIGhhdmluZyBtb25vZ2Ftb3VzIHJlbGF0aW9uc2hpcHMuDQpPdXRjb21lOiBSYXRpbmdzIGZvciBpbnRlcmVzdCBpbiBoYXZpbmcgbW9ub2dhbW91cyByZWxhdGlvbnNoaXBzLiBQcmVkaWN0b3I6IFBvbGl0aWNhbCBPcmllbnRhdGlvbi4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3RfbW9ucmVsIDwtIGxtZXIoaW50ZXJlc3RfbW9ucmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X21vbnJlbCkNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3RfbW9ucmVsLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9tb25yZWwsIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQoNCiNjaShzdGFuZGFyZGl6ZV9wYXJhbWV0ZXJzKG1vZGVsX2ludGVyZXN0X21vbnJlbCwgbWV0aG9kID0gImJhc2ljIiksIGNpID0gMC45OTcpICNjYWxjdWxhdGUgYnkgaGFuZCB0byBnZXQgZXhhY3QgbnVtYmVycw0KYGBgDQoNCiMjIyMjICBQbG90IHsuYWN0aXZlfQ0KYGBge3J9DQpsbWVyKGludGVyZXN0X21vbnJlbCB+IHBvbGl0aWNhbF9vcmllbnRhdGlvbiArICgxK3BvbGl0aWNhbF9vcmllbnRhdGlvbnxjb3VudHJ5KSwNCiAgICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkKSAlPiUNCiAgICBhbGxFZmZlY3RzKCkgJT4lDQogICAgcGxvdCgpDQpgYGANCg0KIyMjIFJvYnVzdG5lc3MgQW5hbHlzaXMNCiMjIyMgRGF0YQ0KTG9hZCBzZWxlY3RlZCBkYXRhIGJhc2VkIG9uIDAzX2NvZGVib29rDQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCA9IHJlYWQuY3N2KGZpbGUgPSAiZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLmNzdiIpWywtMV0NCmBgYA0KDQojIyMjIFMxIEludGVyZXN0IGluIFNpbmdsZSBMaWZlIHsudGFic2V0IC5hY3RpdmV9DQpTMSBUaGVyZSBpcyBhIG5lZ2F0aXZlIGxpbmVhciBsaW5rIGJldHdlZW4gcmlnaHQtd2luZyBwb2xpdGljYWwgb3JpZW50YXRpb24gYW5kIHdvbWVu4oCZcyBpbnRlcmVzdCBpbiBiZWluZyBzaW5nbGUuICANCk91dGNvbWU6IFJhdGluZ3MgZm9yIGludGVyZXN0IGluIHNpbmdsZSBsaWZlLiANClByZWRpY3RvcnM6IFBvbGl0aWNhbCBPcmllbnRhdGlvbiAmIEFnZS4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3Rfc2luZ2xlX3JvYnVzdGNoZWNrIDwtIGxtZXIoaW50ZXJlc3Rfc2luZ2xlIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgYWdlICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X3NpbmdsZV9yb2J1c3RjaGVjaykNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3Rfc2luZ2xlX3JvYnVzdGNoZWNrLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9zaW5nbGVfcm9idXN0Y2hlY2ssIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQojY2koc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9zaW5nbGVfcm9idXN0Y2hlY2ssIG1ldGhvZCA9ICJiYXNpYyIpLCBjaSA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFBsb3Qgey5hY3RpdmV9DQpgYGB7cn0NCmxtZXIoaW50ZXJlc3Rfc2luZ2xlIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgYWdlICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLA0KICAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQpICU+JQ0KICAgIGFsbEVmZmVjdHMoKSAlPiUNCiAgICBwbG90KCkNCmBgYA0KDQojIyMjIFMyIEludGVyZXN0IGluIFNleHVhbCwgTm9uLVJvbWFudGljIFJlbGF0aW9uc2hpcHMgey50YWJzZXR9DQpTMiBUaGVyZSBpcyBhIG5lZ2F0aXZlIGxpbmVhciBsaW5rIGJldHdlZW4gcmlnaHQtd2luZyBwb2xpdGljYWwgb3JpZW50YXRpb24gYW5kIHdvbWVu4oCZcyBpbnRlcmVzdCBpbiBoYXZpbmcgc2V4dWFsLCBub24tcm9tYW50aWMgcmVsYXRpb25zaGlwcyAoZS5nLiwgaG9va3Vwcywgb25lLW5pZ2h0IHN0YW5kcykuDQpPdXRjb21lOiBSYXRpbmdzIGZvciBpbnRlcmVzdCBpbiBoYXZpbmcgc2V4dWFsLCBub24tcm9tYW50aWMgcmVsYXRpb25zaGlwcy4gUHJlZGljdG9yczogUG9saXRpY2FsIE9yaWVudGF0aW9uICYgQWdlLiBSYW5kb20gaW50ZXJjZXB0IGFuZCByYW5kb20gc2xvcGUgZm9yIGNvdW50cnkuDQoNCiMjIyMjIE1vZGVscw0KYGBge3J9DQptb2RlbF9pbnRlcmVzdF9zZXhyZWxfcm9idXN0Y2hlY2sgPC0gbG1lcihpbnRlcmVzdF9zZXhyZWwgfiBwb2xpdGljYWxfb3JpZW50YXRpb24gKyBhZ2UgKyAoMStwb2xpdGljYWxfb3JpZW50YXRpb258Y291bnRyeSksIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQsIGNvbnRyb2wgPWxtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCmBgYA0KDQojIyMjIyBTdW1tYXJ5DQpgYGB7cn0NCnN1bW1hcnkobW9kZWxfaW50ZXJlc3Rfc2V4cmVsX3JvYnVzdGNoZWNrKQ0KY29uZmludChtb2RlbF9pbnRlcmVzdF9zZXhyZWxfcm9idXN0Y2hlY2ssIGxldmVsID0gMC45OTcpDQpgYGANCg0KIyMjIyMgU3RhbmRhcmRpemVkIENvZWZmaWNpZW50cw0KYGBge3J9DQpzdGFuZGFyZGl6ZV9wYXJhbWV0ZXJzKG1vZGVsX2ludGVyZXN0X3NleHJlbF9yb2J1c3RjaGVjaywgbWV0aG9kID0gImJhc2ljIiwgY2kgPSAwLjk5NykNCg0KI2NpKHN0YW5kYXJkaXplX3BhcmFtZXRlcnMobW9kZWxfaW50ZXJlc3Rfc2V4cmVsX3JvYnVzdGNoZWNrLCBtZXRob2QgPSAiYmFzaWMiKSwgY2kgPSAwLjk5NykNCiNjYWxjdWxhdGUgYnkgaGFuZCB0byBnZXQgZXhhY3QgbnVtYmVycw0KYGBgDQoNCiMjIyMjIFBsb3Qgey5hY3RpdmV9DQpgYGB7cn0NCmxtZXIoaW50ZXJlc3Rfc2V4cmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgYWdlICsgKDF8Y291bnRyeSksDQogICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCkgJT4lDQogICAgYWxsRWZmZWN0cygpICU+JQ0KICAgIHBsb3QoKQ0KYGBgDQoNCiMjIyMgUzMgSW50ZXJlc3QgaW4gTm9uLU1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NClMzIFRoZXJlIGlzIGEgbmVnYXRpdmUgbGluZWFyIGxpbmsgYmV0d2VlbiByaWdodC13aW5nIHBvbGl0aWNhbCBvcmllbnRhdGlvbiBhbmQgd29tZW7igJlzIGludGVyZXN0IGluIGhhdmluZyBub24tbW9ub2dhbW91cyByZWxhdGlvbnNoaXBzLg0KT3V0Y29tZTogUmF0aW5ncyBmb3IgaW50ZXJlc3QgaW4gaGF2aW5nIG5vbi1tb25vZ2Ftb3VzIHJlbGF0aW9uc2hpcHMuIFByZWRpY3RvcnM6IFBvbGl0aWNhbCBPcmllbnRhdGlvbiAmIEFnZS4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3Rfbm9ubW9ucmVsX3JvYnVzdGNoZWNrIDwtIGxtZXIoaW50ZXJlc3Rfbm9ubW9ucmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgYWdlICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X25vbm1vbnJlbF9yb2J1c3RjaGVjaykNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3Rfbm9ubW9ucmVsX3JvYnVzdGNoZWNrLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9ub25tb25yZWxfcm9idXN0Y2hlY2ssIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQpgYGANCg0KIyMjIyMgUGxvdCB7LmFjdGl2ZX0NCmBgYHtyfQ0KbG1lcihpbnRlcmVzdF9ub25tb25yZWwgfiBwb2xpdGljYWxfb3JpZW50YXRpb24gKyBhZ2UgKyAoMSB8IGNvdW50cnkpLA0KICAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQpICU+JQ0KICAgIGFsbEVmZmVjdHMoKSAlPiUNCiAgICBwbG90KCkNCmBgYA0KDQojIyMjIFM0IEludGVyZXN0IGluIE1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NClM0IFRoZXJlIGlzIG5vIGxpbmsgYmV0d2VlbiByaWdodC13aW5nIHBvbGl0aWNhbCBvcmllbnRhdGlvbiBhbmQgd29tZW7igJlzIGludGVyZXN0IGluIGhhdmluZyBtb25vZ2Ftb3VzIHJlbGF0aW9uc2hpcHMuDQpPdXRjb21lOiBSYXRpbmdzIGZvciBpbnRlcmVzdCBpbiBoYXZpbmcgbW9ub2dhbW91cyByZWxhdGlvbnNoaXBzLiANClByZWRpY3RvcnM6IFBvbGl0aWNhbCBPcmllbnRhdGlvbiAmIEFnZS4gUmFuZG9tIGludGVyY2VwdCBhbmQgcmFuZG9tIHNsb3BlIGZvciBjb3VudHJ5Lg0KDQojIyMjIyBNb2RlbHMNCmBgYHtyfQ0KbW9kZWxfaW50ZXJlc3RfbW9ucmVsX3JvYnVzdGNoZWNrIDwtIGxtZXIoaW50ZXJlc3RfbW9ucmVsIH4gcG9saXRpY2FsX29yaWVudGF0aW9uICsgYWdlICsgKDErcG9saXRpY2FsX29yaWVudGF0aW9ufGNvdW50cnkpLCBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLCBjb250cm9sID1sbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQpgYGANCg0KIyMjIyMgU3VtbWFyeQ0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsX2ludGVyZXN0X21vbnJlbF9yb2J1c3RjaGVjaykNCmNvbmZpbnQobW9kZWxfaW50ZXJlc3RfbW9ucmVsX3JvYnVzdGNoZWNrLCBsZXZlbCA9IDAuOTk3KQ0KYGBgDQoNCiMjIyMjIFN0YW5kYXJkaXplZCBDb2VmZmljaWVudHMNCmBgYHtyfQ0Kc3RhbmRhcmRpemVfcGFyYW1ldGVycyhtb2RlbF9pbnRlcmVzdF9tb25yZWxfcm9idXN0Y2hlY2ssIG1ldGhvZCA9ICJiYXNpYyIsIGNpID0gMC45OTcpDQpgYGANCg0KIyMjIyMgUGxvdCB7LmFjdGl2ZX0NCmBgYHtyfQ0KbG1lcihpbnRlcmVzdF9tb25yZWwgfiBwb2xpdGljYWxfb3JpZW50YXRpb24gKyBhZ2UgKyAoMXwgY291bnRyeSksDQogICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCkgJT4lDQogICAgYWxsRWZmZWN0cygpICU+JQ0KICAgIHBsb3QoKQ0KYGBgDQoNCg0KIyMjIEV4cGxvcmF0b3J5IEFuYWx5c2lzIGZvciBDb3VudHJpZXMNCiMjIyMgRGF0YQ0KTG9hZCBzZWxlY3RlZCBkYXRhIGJhc2VkIG9uIDAzX2NvZGVib29rDQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCA9IHJlYWQuY3N2KGZpbGUgPSAiZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLmNzdiIpWywtMV0NCmBgYA0KDQojIyMjIEluY2x1c2lvbiBvZiBEYXRhDQpgYGB7cn0NCmNvdW50cmllcyA9IGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkJGNvdW50cnkpKSAlPiUNCiAgYXJyYW5nZSgtRnJlcSkNCg0KY291bnRyaWVzDQpgYGANCldlIHdpbGwgaW5jbHVkZSBhbGwgY291bnRyaWVzIHdpdGggbW9yZSB0aGFuIDUwMCBwYXJ0aWNpcGFudHMuIFRoaXMgYWxsb3dzIHVzIHRvIHNob3cgZWZmZWN0IHNpemVzIGZvciBhIGRpdmVyc2UgcmFuZ2Ugb2YgY291bnRyaWVzLg0KRGl2ZXJzaXR5IG9mIGNvdW50cmllcyBpcyBpbmRpY2F0ZWQgYnk6DQoNCiogbG9jYXRpb246IEV1cm9wZWFuIChGcmFuY2UsIEdlcm1hbnksIEl0YWx5LCBTcGFpbik7IE5vcnRoIEFtZXJpY2FuIChVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EpOyBTb3V0aCBBbWVyaWNhbiAoTWV4aWNvLCBCcmF6aWwpDQoqIGxhbmd1YWdlOiBGcmVuY2ggKEZyYW5jZSk7IEdlcm1hbiAoR2VybWFueSk7IEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSk7IFNwYW5pc2ggKE1leGljbywgU3BhaW4pOyBJdGFsaWFuIChJdGFseSk7IFBvcnR1Z3Vlc2UgKEJyYXppbCkNCiogY3VsdHVyZTogV2VzdGVybiAoRnJhbmNlLCBHZXJtYW55LCBJdGFseSwgU3BhaW4sIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSk7IE5vbi1XZXN0ZXJuIChNZXhpY28sIEJyYXppbCkNCg0KU2FtcGxlIHNpemVzIG9mIG90aGVyIGNvdW50cmllcyBhcmUgdG9vIHNtYWxsIChuIDwgNTAwKSB0byByZWFjaCBhbnkgY29uY2x1c2lvbnMuDQoNCmBgYHtyfQ0Kc2V2ZW5fY291bnRyaWVzID0gY291bnRyaWVzICU+JSBmaWx0ZXIoRnJlcSA+IDUwMCkNCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgJT4lDQogIGZpbHRlcihjb3VudHJ5ICVpbiUgc2V2ZW5fY291bnRyaWVzJFZhcjEpDQpgYGANCg0KYGBge3J9DQpjb3VudHJpZXNfcmVzY29uID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCg0KY291bnRyaWVzX3Jlc2Nvbg0KYGBgDQoNCiMjIyMgTW9kZWxzIHsudGFic2V0fQ0KIyMjIyMgUzEgSW50ZXJlc3QgaW4gU2luZ2xlIExpZmUNCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGludGVyZXN0X3NpbmdsZSwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19pbnRlcmVzdF9zaW5nbGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtaW50ZXJlc3Rfc2luZ2xlKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaW50ZXJlc3Rfc2luZ2xlIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X3NpbmdsZV9zZSA9IG1vZGVsc19pbnRlcmVzdF9zaW5nbGUgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQoNCm1vZGVsc19pbnRlcmVzdF9zaW5nbGVfYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX2ludGVyZXN0X3NpbmdsZV9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIlMxIEludGVyZXN0IGluIFNpbmdsZSBMaWZlIikNCg0KY291bnRyaWVzX3Jlc2NvbiA9DQogIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIGZpbHRlcighaXMubmEoaW50ZXJlc3Rfc2luZ2xlKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2FuYWx5c2VzJG4pDQoNCm1vZGVsID0gbXZtZXRhKG1lYW4gfiAxLCBkYXRhID0gbW9kZWxzX2ludGVyZXN0X3NpbmdsZV9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyBTMiBJbnRlcmVzdCBpbiBTZXh1YWwsIE5vbi1Sb21hbnRpYyBSZWxhdGlvbnNoaXBzIA0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QoaW50ZXJlc3Rfc2V4cmVsLCBGcmFuY2UsIEdlcm1hbnksIGBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FgLCBNZXhpY28sDQogICAgICAgICBJdGFseSwgQnJhemlsLCBTcGFpbikNCg0KbW9kZWxzX2ludGVyZXN0X3NleHJlbCA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1pbnRlcmVzdF9zZXhyZWwpICU+JQ0KICBtYXAofmxtKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSRpbnRlcmVzdF9zZXhyZWwgfiAueCwNCiAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUpKSAlPiUNCiAgbWFwKGxtLmJldGEpDQoNCm1vZGVsc19pbnRlcmVzdF9zZXhyZWxfY29lZiA9IG1vZGVsc19pbnRlcmVzdF9zZXhyZWwgJT4lDQogIG1hcChjb2VmKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gInJvd25hbWUiKSAlPiUNCiAgZmlsdGVyKHJvd25hbWUgIT0gIihJbnRlcmNlcHQpIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gLXJvd25hbWUpICU+JQ0KICBzZWxlY3QoLXJvd25hbWUpICU+JQ0KICByZW5hbWUobWVhbiA9IHZhbHVlKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2V4cmVsX3NlID0gbW9kZWxzX2ludGVyZXN0X3NleHJlbCAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCg0KbW9kZWxzX2ludGVyZXN0X3NleHJlbF9hbmFseXNlcyA9IGxlZnRfam9pbihtb2RlbHNfaW50ZXJlc3Rfc2V4cmVsX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pbnRlcmVzdF9zZXhyZWxfc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiUzIgSW50ZXJlc3QgaW4gU2V4dWFsLCBOb24tUm9tYW50aWMgUmVsYXRpb25zaGlwcyIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGludGVyZXN0X3NleHJlbCkpICU+JQ0KICBzZWxlY3QoY291bnRyeSkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgYXJyYW5nZSgtRnJlcSkNCg0KbW9kZWxzX2ludGVyZXN0X3NleHJlbF9hbmFseXNlcyRuID0gY291bnRyaWVzX3Jlc2NvbiRGcmVxDQpzdW0obW9kZWxzX2ludGVyZXN0X3NleHJlbF9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19pbnRlcmVzdF9zZXhyZWxfYW5hbHlzZXMsIFMgPSBzZV4yLA0KICAgICAgICAgICAgICAgbWV0aG9kID0gImZpeGVkIikNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KIyMjIyMgUzMgSW50ZXJlc3QgaW4gTm9uLU1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGludGVyZXN0X25vbm1vbnJlbCwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19pbnRlcmVzdF9ub25tb25yZWwgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtaW50ZXJlc3Rfbm9ubW9ucmVsKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaW50ZXJlc3Rfbm9ubW9ucmVsIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbF9zZSA9IG1vZGVsc19pbnRlcmVzdF9ub25tb25yZWwgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQoNCm1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbF9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIlMzIEludGVyZXN0IGluIE5vbi1Nb25vZ2Ftb3VzIFJlbGF0aW9uc2hpcHMiKQ0KDQpjb3VudHJpZXNfcmVzY29uID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgZmlsdGVyKCFpcy5uYShpbnRlcmVzdF9ub25tb25yZWwpKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0Kc3VtKG1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfYW5hbHlzZXMkbikNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIFM0IEludGVyZXN0IGluIE1vbm9nYW1vdXMgUmVsYXRpb25zaGlwcyB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGludGVyZXN0X21vbnJlbCwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19pbnRlcmVzdF9tb25yZWwgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtaW50ZXJlc3RfbW9ucmVsKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaW50ZXJlc3RfbW9ucmVsIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3RfbW9ucmVsICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X21vbnJlbF9zZSA9IG1vZGVsc19pbnRlcmVzdF9tb25yZWwgJT4lDQogbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCg0KbW9kZWxzX2ludGVyZXN0X21vbnJlbF9hbmFseXNlcyA9IGxlZnRfam9pbihtb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pbnRlcmVzdF9tb25yZWxfc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiUzQgSW50ZXJlc3QgaW4gTW9ub2dhbW91cyBSZWxhdGlvbnNoaXBzIikNCg0KY291bnRyaWVzX3Jlc2NvbiA9DQogIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIGZpbHRlcighaXMubmEoaW50ZXJlc3RfbW9ucmVsKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2FuYWx5c2VzJG4pDQoNCm1vZGVsID0gbXZtZXRhKG1lYW4gfiAxLCBkYXRhID0gbW9kZWxzX2ludGVyZXN0X21vbnJlbF9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMgRXhwbG9yYXRvcnkgQW5hbHlzaXMgZm9yIFJlZ2lvbnMgey50YWJzZXR9DQojIyMjIERhdGENCkxvYWQgc2VsZWN0ZWQgZGF0YSBiYXNlZCBvbiAwM19jb2RlYm9vaw0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgPSByZWFkLmNzdihmaWxlID0gImRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZC5jc3YiKVssLTFdDQpgYGANCg0KIyMjIyBJbmNsdXNpb24gb2YgRGF0YQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgPC0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkICU+JQ0KICBtdXRhdGUocmVnaW9uMSA9IGNvdW50cnljb2RlKGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPSAiY291bnRyeS5uYW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gInJlZ2lvbiIpLA0KICAgICAgICAgcmVnaW9uMSA9IGlmZWxzZShjb3VudHJ5ID09ICJNaWNyb25lc2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWFzdCBBc2lhIGFuZCBQYWNpZmljIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24xKSwNCiAgICAgICAgIHJlZ2lvbjIgPSBjb3VudHJ5Y29kZShjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gImNvdW50cnkubmFtZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9ICJjb250aW5lbnQiKSwNCiAgICAgICAgIHJlZ2lvbjIgPSBpZmVsc2UoY291bnRyeSA9PSAiTWljcm9uZXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9jZWFuaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbjIpKQ0KDQp0YWJsZShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQkcmVnaW9uMSkNCnRhYmxlKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCRyZWdpb24yKQ0KDQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgJT4lDQogIG11dGF0ZShyZWdpb25fZmluYWwgPSBpZmVsc2UocmVnaW9uMiA9PSAiQWZyaWNhIiwgIkFmcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJlZ2lvbjIgPT0gIkFzaWEiLCAiQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZWdpb24yID09ICJFdXJvcGUiLCAiRXVyb3BlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZWdpb24yID09ICJPY2VhbmlhIiwgIk9jZWFuaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZWdpb24xID09ICJMYXRpbiBBbWVyaWNhICYgQ2FyaWJiZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxhdGluIGFuZCBTb3V0aCBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJlZ2lvbjEgPT0gIk5vcnRoIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vcnRoIEFtZXJpY2EiLCBOQSkpKSkpKSkNCg0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkIDwtIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCAlPiUNCiAgbXV0YXRlKHJlZ2lvbl9maW5hbCA9IGlmZWxzZShjb3VudHJ5ICVpbiUgYygiQWZnaGFuaXN0YW4iLCAiQmFocmFpbiIsICJJcmFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXJhcSIsICJJc3JhZWwiLCAiSm9yZGFuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthemFraHN0YW4iLCAiS3V3YWl0IiwgIkt5cmd5enN0YW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZWJhbm9uIiwgIlBha2lzdGFuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhbGVzdGluaWFuIFRlcnJpdG9yaWVzIiwgIlFhdGFyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2F1ZGkgQXJhYmlhIiwgIlN5cmlhIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR1cmtleSIsICJUdXJrbWVuaXN0YW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIsICJJbmRvbmVzaWEiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlkZGxlIEVhc3QgYW5kIENlbnRyYWwgQXNpYSIsIHJlZ2lvbl9maW5hbCksDQogICAgICAgICByZWdpb25fZmluYWwgPSBpZmVsc2UoY291bnRyeSAlaW4lIGMoIkFybWVuaWEiLCAiQnVybWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVhc3QgVGltb3IgKHNlZSBUaW1vci1MZXN0ZSkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2VvcmdpYSIsICJIb25nIEtvbmciLCAiSW5kaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXBhbiIsICJNYWxheXNpYSIsICJNYWxkaXZlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5lcGFsIiwgIlBoaWxpcHBpbmVzIiwgIlNpbmdhcG9yZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdXRoIEtvcmVhIiwgIlNyaSBMYW5rYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYWl3YW4iLCAiVGhhaWxhbmQiLCAiVmlldG5hbSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291dGggYW5kIEVhc3QgQXNpYSIsIHJlZ2lvbl9maW5hbCkpDQoNCnggPC0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkICU+JSANCiAgc2VsZWN0KGNvdW50cnksIHJlZ2lvbl9maW5hbCkgJT4lDQogIGdyb3VwX2J5KGNvdW50cnksIHJlZ2lvbl9maW5hbCkgJT4lDQogIHN1bW1hcml6ZShuID0gbigpKSAlPiUNCiAgYXJyYW5nZShyZWdpb25fZmluYWwsIGNvdW50cnkpDQoNCndyaXRlLmNzdjIoeCwgZmlsZSA9ICJjb3VudHJ5X3JlZ2lvbnMuY3N2IikNCg0KcmVnaW9ucyA8LSB4ICU+JQ0KICBncm91cF9ieShyZWdpb25fZmluYWwpICU+JQ0KICBzdW1tYXJpemUoY291bnRyaWVzID0gbigpLA0KICAgICAgICAgICAgcGFydGljaXBhbnRzID0gc3VtKG4pKQ0KDQpyZWdpb25zDQpgYGANCldlIHdpbGwgaW5jbHVkZSBhbGwgcmVnaW9ucyB3aXRoIG1vcmUgdGhhbiA1MDAgcGFydGljaXBhbnRzLiBUaGlzIGFsbG93cyB1cyB0byBzaG93IGVmZmVjdCBzaXplcyBmb3IgYSBkaXZlcnNlIHJhbmdlIG9mIHJlZ2lvbnMuDQoNClRoZXNlIHJlZ2lvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNvdW50cmllcyAobikNCg0KRXVyb3BlIGluY2x1ZGVkIDQxIGNvdW50cmllczogRnJhbmNlIChuID0gMiwwMTMpOyBHZXJtYW55IChuID0gMSw4NDYpOyBJdGFseSAobiA9IDk2OCk7IFNwYWluIChuID0gNTYyKTsgVW5pdGVkIEtpbmdkb20gKG4gPSA0OTkpOyBEZW5tYXJrIChuID0gMzk1KTsgU3dpdHplcmxhbmQgKG4gPSAyODApOyBBdXN0cmlhIChuID0gMTk3KTsgUnVzc2lhIChuID0gMTU1KTsgQmVsZ2l1bSAobiA9IDEwMik7IElyZWxhbmQgKG4gPSA1OSk7IFBvcnR1Z2FsIChuID0gNTEpOyBOZXRoZXJsYW5kcyAobiA9IDQ0KTsgRmlubGFuZCAobiA9IDMxKTsgU3dlZGVuIChuID0gMjcpOyBSb21hbmlhIChuID0gMjQpOyBVa3JhaW5lIChuID0gMjEpOyBCZWxhcnVzIChuID0gMTMpOyBMdXhlbWJvdXJnIChuID0gMTMpOyBFc3RvbmlhIChuID0gMTIpOyBOb3J3YXkgKG4gPSAxMik7IEN6ZWNoaWEgKG4gPSAxMSk7IEJ1bGdhcmlhIChuID0gOSk7IEh1bmdhcnkgKG4gPSA5KTsgTGF0dmlhIChuID0gOCk7IFBvbGFuZCAobiA9IDcpOyBBbmRvcnJhIChuID0gNik7IEJvc25pYSBhbmQgSGVyemVnb3ZpbmEgKG4gICA9ICA2KTsgQ3JvYXRpYSAobiA9IDYpOyBJY2VsYW5kIChuID0gNSk7IFNlcmJpYSAobiA9IDUpOyBHcmVlY2UgKG4gPSA0KTsgTGl0aHVhbmlhIChuID0gMyk7IFNsb3Zha2lhIChuID0gMyk7IFNsb3ZlbmlhIChuID0gMyk7IEFsYmFuaWEgKG4gPSAyKTsgTWFsdGEgKG4gPSAyKTsgTGllY2h0ZW5zdGVpbiAobiA9IDEpOyBNYWNlZG9uaWEgKG4gPSAxKTsgTW9uYWNvIChuID0gMSk7IGFuZCBNb250ZW5lZ3JvIChuID0gMSkuDQoNCkxhdGluIGFuZCBTb3V0aCBBbWVyaWNhIGluY2x1ZGVkIDMzIGNvdW50cmllczogTWV4aWNvIChuID0gMTE1Nyk7IEJyYXppbCAobiA9IDgwNik7IENvbG9tYmlhIChuID0gMzg3KTsgQXJnZW50aW5hIChuID0gMjE3KTsgQ2hpbGUgKG4gPSAxNTQpOyBQZXJ1IChuID0gMTE5KTsgRWN1YWRvciAobiA9IDEwMik7IFZlbmV6dWVsYSAobiA9IDY3KTsgR3VhdGVtYWxhIChuID0gNjEpOyBDb3N0YSBSaWNhIChuID0gNDcpOyBEb21pbmljYW4gUmVwdWJsaWMgKG4gPSA0MSk7IEVsIFNhbHZhZG9yIChuID0gMjYpOyBVcnVndWF5IChuID0gMjQpOyBCb2xpdmlhIChuID0gMjMpOyBIb25kdXJhcyAobiA9IDE4KTsgTmljYXJhZ3VhIChuID0gMTUpOyBQYW5hbWEgKG4gPSAxNSk7IFBhcmFndWF5IChuID0gMTEpOyBUcmluaWRhZCBhbmQgVG9iYWdvIChuID0gOCk7IEphbWFpY2EgKG4gPSA2KTsgSGFpdGkgKG4gPSA0KTsgR3V5YW5hIChuID0gMyk7IEFudGlndWEgYW5kIEJhcmJ1ZGEgKG4gPSAyKTsgRG9taW5pY2EgKG4gPSAyKTsgU2FpbnQgTHVjaWEgKG4gPSAyKTsgQXJ1YmEgKG4gPSAxKTsgQmFoYW1hcyAobiA9IDEpOyBCYXJiYWRvcyAobiA9IDEpOyBCZWxpemUgKG4gPSAxKTsgQ3ViYSAobiA9IDEpOyBHcmVuYWRhIChuID0gMSk7IFNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIChuID0gMSk7IGFuZCBTaW50IE1hYXJ0ZW4gKG4gPSAxKS4NCg0KTm9ydGggQW1lcmljYSBpbmNsdWRlZCAyIGNvdW50cmllczogVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIChuID0gMTI1NCkgYW5kIENhbmFkYSAobiA9IDMzOCkuDQoNClNvdXRoIGFuZCBFYXN0IEFzaWEgaW5jbHVkZWQgMTggY291bnRyaWVzOiBKYXBhbiAobiA9IDI5MCk7IENoaW5hIChuID0gOTApOyBJbmRpYSAobiA9IDQ1KTsgUGhpbGlwcGluZXMgKG4gPSAzNik7IFNpbmdhcG9yZSAobiA9IDI2KTsgTWFsYXlzaWEgKG4gPSAxNyk7IEhvbmcgS29uZyAobiA9IDgpOyBUYWl3YW4gKG4gPSA3KTsgU291dGggS29yZWEgKG4gPSA1KTsgVGhhaWxhbmQgKG4gPSA0KTsgR2VvcmdpYSAobiA9IDMpOyBTcmkgTGFua2EgKG4gPSAzKTsgQXJtZW5pYSAobiA9IDIpOyBWaWV0bmFtIChuID0gMik7IEJ1cm1hIChuID0gMSk7IEVhc3QgVGltb3IgKG4gPSAxKTsgTWFsZGl2ZXMgKG4gPSAxKTsgYW5kIE5lcGFsIChuID0gMSkuDQoNCk9jZWFuaWEgaW5jbHVkZWQgNSBjb3VudHJpZXM6IEF1c3RyYWxpYSAobiA9IDEzMyk7IE5ldyBaZWFsYW5kIChuID0gMzQpOyBGaWppIChuID0gMSk7IE1hcnNoYWxsIElzbGFuZHMgKG4gPSAxKTsgYW5kIE1pY3JvbmVzaWEgKG4gPSAxKS4NCg0KQWZyaWNhIGluY2x1ZGVkIDI2IGNvdW50cmllczogU291dGggQWZyaWNhIChuID0gMjkpOyBNb3JvY2NvIChuID0gMTYpOyBBbGdlcmlhIChuID0gNyk7IFR1bmlzaWEgKG4gPSA3KTsgS2VueWEgKG4gPSA2KTsgTmlnZXJpYSAobiA9IDYpOyBTZW5lZ2FsIChuID0gNSk7IE5hbWliaWEgKG4gPSA0KTsgQ2FtZXJvb24gKG4gPSAzKTsgRWd5cHQgKG4gPSAzKTsgR2hhbmEgKG4gPSAzKTsgQmVuaW4gKG4gPSAyKTsgQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIChuID0gMik7IE1hbGkgKG4gPSAyKTsgTWF1cml0aXVzIChuID0gMik7IEJvdHN3YW5hIChuID0gMSk7IENvdGUgZCdJdm9pcmUgKG4gPSAxKTsgRXRoaW9waWEgKG4gPSAxKTsgR3VpbmVhLUJpc3NhdSAobiA9IDEpOyBNYWRhZ2FzY2FyIChuID0gMSk7IE1hdXJpdGFuaWEgKG4gPSAxKTsgU291dGggU3VkYW4gKG4gPSAxKTsgU3dhemlsYW5kIChuID0gMSk7IFRhbnphbmlhIChuID0gMSk7IFVnYW5kYSAobiA9IDEpOyBhbmQgWmltYmFid2UgKG4gPSAxKS4NCg0KTWlkZGxlIEVhc3QgYW5kIENlbnRyYWwgQXNpYSBpbmNsdWRlZCAxOSBjb3VudHJpZXM6IEluZG9uZXNpYSAobiA9IDE4KTsgVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKG4gPSAxNCk7IElzcmFlbCAobiA9IDEzKTsgS2F6YWtoc3RhbiAobiA9IDkpOyBQYWtpc3RhbiAobiA9IDgpOyBUdXJrZXkgKG4gPSA4KTsgSXJhbiAobiA9IDcpOyBTYXVkaSBBcmFiaWEgKG4gPSA2KTsgQmFocmFpbiAobiA9IDMpOyBMZWJhbm9uIChuID0gMyk7IEpvcmRhbiAobiA9IDIpOyBLeXJneXpzdGFuIChuID0gMik7IFBhbGVzdGluaWFuIFRlcnJpdG9yaWVzIChuID0gMik7IFFhdGFyIChuID0gMik7IFR1cmttZW5pc3RhbiAobiA9IDIpOyBBZmdoYW5pc3RhbiAobiA9IDEpOyBJcmFxIChuID0gMSk7IEt1d2FpdCAobiA9IDEpOyBhbmQgU3lyaWEgKG4gPSAxKS4NCg0KDQpXZSBpbnZlc3RpZ2F0ZWQgaG93IGVmZmVjdHMgb2YgcG9saXRpY2FsIG9yaWVudGF0aW9uIG9uIHBhcnRuZXIgcHJlZmVyZW5jZXMgZGlmZmVyZWQgYmV0d2VlbiBmb3VyIGRpZmZlcmVudCByZWdpb25zLiBOYW1lbHksIHRoZXNlIHdlcmUgRXVyb3BlICAobiA9IDcsNDE3KSwgTGF0aW4gYW5kIFNvdXRoIEFtZXJpY2EgIChuID0gMywzMjUpLCBOb3J0aCBBbWVyaWNhICAobiA9IDEsNTkyKSwgYW5kIFNvdXRoIGFuZCBFYXN0IEFzaWEgIChuID0gNTQyKS4gV2UgY291bGQgbm90IGluY2x1ZGUgT2NlYW5pYSAgKG4gPSAxNzApLCBBZnJpY2EgIChuID0gMTA4KSwgYW5kIE1pZGRsZSBFYXN0IGFuZCBDZW50cmFsIEFzaWEgIChuID0gMTAzKSBiZWNhdXNlIHNhbXBsZSBzaXplcyB3ZXJlIHRvbyBzbWFsbCAobiA8IDUwMCkgdG8gcmVhY2ggYW55IGNvbmNsdXNpb25zLg0KDQoNCg0KYGBge3J9DQpyZWdpb25zID0gcmVnaW9ucyAlPiUgZmlsdGVyKHBhcnRpY2lwYW50cyA+IDUwMCkNCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWcgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgJT4lDQogIGZpbHRlcihyZWdpb25fZmluYWwgJWluJSByZWdpb25zJHJlZ2lvbl9maW5hbCkNCmBgYA0KDQpgYGB7cn0NCnJlZ2lvbnNfcmVnID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZyAlPiUNCiAgc2VsZWN0KHJlZ2lvbl9maW5hbCwgY291bnRyeSkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgZmlsdGVyKEZyZXEgIT0gMCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCg0KcmVnaW9uc19yZWcNCmBgYA0KDQoNCiMjIyMgTW9kZWxzIHsudGFic2V0fQ0KIyMjIyMgUzEgSW50ZXJlc3QgaW4gU2luZ2xlIExpZmUNCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZyAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHJlZ2lvbl9maW5hbCwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QoaW50ZXJlc3Rfc2luZ2xlLCBFdXJvcGUsICdTb3V0aCBhbmQgRWFzdCBBc2lhJywgJ0xhdGluIGFuZCBTb3V0aCBBbWVyaWNhJywgJ05vcnRoIEFtZXJpY2EnKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2luZ2xlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlICU+JQ0KICBzZWxlY3QoLWludGVyZXN0X3NpbmdsZSkgJT4lDQogIG1hcCh+bG0oc2NhbGUoZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlJGludGVyZXN0X3NpbmdsZSkgfiBzY2FsZSgueCksDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X3NpbmdsZV9zZSA9IG1vZGVsc19pbnRlcmVzdF9zaW5nbGUgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogICBtdXRhdGUobmFtZSA9IGlmZWxzZShuYW1lID09ICJTb3V0aCBhbmQgRWFzdCBBc2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlNvdXRoLmFuZC5FYXN0LkFzaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmFtZSA9PSAiTGF0aW4gYW5kIFNvdXRoIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAiTGF0aW4uYW5kLlNvdXRoLkFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmFtZSA9PSAiTm9ydGggQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJOb3J0aC5BbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZSkpKSkNCg0KbW9kZWxzX2ludGVyZXN0X3NpbmdsZV9hbmFseXNlcyA9IGxlZnRfam9pbihtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pbnRlcmVzdF9zaW5nbGVfc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiUzEgSW50ZXJlc3QgaW4gU2luZ2xlIExpZmUiKQ0KDQpjb3VudHJpZXNfcmVnID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZyAlPiUNCiAgZmlsdGVyKCFpcy5uYShpbnRlcmVzdF9zaW5nbGUpKSAlPiUNCiAgc2VsZWN0KHJlZ2lvbl9maW5hbCkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgYXJyYW5nZSgtRnJlcSkNCg0KDQptb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVnJEZyZXENCnN1bShtb2RlbHNfaW50ZXJlc3Rfc2luZ2xlX2FuYWx5c2VzJG4pDQoNCm1vZGVsID0gbXZtZXRhKG1lYW4gfiAxLCBkYXRhID0gbW9kZWxzX2ludGVyZXN0X3NpbmdsZV9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyBTMiBJbnRlcmVzdCBpbiBTZXh1YWwsIE5vbi1Sb21hbnRpYyBSZWxhdGlvbnNoaXBzIA0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gcmVnaW9uX2ZpbmFsLCB2YWx1ZXNfZnJvbSA9IHBvbGl0aWNhbF9vcmllbnRhdGlvbikgJT4lDQogIHNlbGVjdChpbnRlcmVzdF9zZXhyZWwsIEV1cm9wZSwgJ1NvdXRoIGFuZCBFYXN0IEFzaWEnLCAnTGF0aW4gYW5kIFNvdXRoIEFtZXJpY2EnLCAnTm9ydGggQW1lcmljYScpDQoNCm1vZGVsc19pbnRlcmVzdF9zZXhyZWwgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUgJT4lDQogIHNlbGVjdCgtaW50ZXJlc3Rfc2V4cmVsKSAlPiUNCiAgbWFwKH5sbShzY2FsZShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUkaW50ZXJlc3Rfc2V4cmVsKSB+IHNjYWxlKC54KSwNCiAgICAgICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2V4cmVsX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3Rfc2V4cmVsICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X3NleHJlbF9zZSA9IG1vZGVsc19pbnRlcmVzdF9zZXhyZWwgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlNvdXRoIGFuZCBFYXN0IEFzaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAiU291dGguYW5kLkVhc3QuQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYW1lID09ICJMYXRpbiBhbmQgU291dGggQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGF0aW4uYW5kLlNvdXRoLkFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5hbWUgPT0gIk5vcnRoIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3J0aC5BbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSkpKQ0KDQptb2RlbHNfaW50ZXJlc3Rfc2V4cmVsX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pbnRlcmVzdF9zZXhyZWxfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX2ludGVyZXN0X3NleHJlbF9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJTMSBJbnRlcmVzdCBpbiBTaW5nbGUgTGlmZSIpDQoNCmNvdW50cmllc19yZWcgPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGludGVyZXN0X3NleHJlbCkpICU+JQ0KICBzZWxlY3QocmVnaW9uX2ZpbmFsKSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQoNCm1vZGVsc19pbnRlcmVzdF9zZXhyZWxfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZWckRnJlcQ0Kc3VtKG1vZGVsc19pbnRlcmVzdF9zZXhyZWxfYW5hbHlzZXMkbikNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfaW50ZXJlc3Rfc2V4cmVsX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIFMzIEludGVyZXN0IGluIE5vbi1Nb25vZ2Ftb3VzIFJlbGF0aW9uc2hpcHMgey50YWJzZXR9DQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWdfd2lkZSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWcgJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSByZWdpb25fZmluYWwsIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGludGVyZXN0X25vbm1vbnJlbCwgRXVyb3BlLCAnU291dGggYW5kIEVhc3QgQXNpYScsICdMYXRpbiBhbmQgU291dGggQW1lcmljYScsICdOb3J0aCBBbWVyaWNhJykNCg0KbW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbCA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWdfd2lkZSAlPiUNCiAgc2VsZWN0KC1pbnRlcmVzdF9ub25tb25yZWwpICU+JQ0KICBtYXAofmxtKHNjYWxlKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWdfd2lkZSRpbnRlcmVzdF9ub25tb25yZWwpIH4gc2NhbGUoLngpLA0KICAgICAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUpKSAlPiUNCiAgbWFwKGxtLmJldGEpDQoNCm1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfY29lZiA9IG1vZGVsc19pbnRlcmVzdF9ub25tb25yZWwgJT4lDQogIG1hcChjb2VmKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gInJvd25hbWUiKSAlPiUNCiAgZmlsdGVyKHJvd25hbWUgIT0gIihJbnRlcmNlcHQpIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gLXJvd25hbWUpICU+JQ0KICBzZWxlY3QoLXJvd25hbWUpICU+JQ0KICByZW5hbWUobWVhbiA9IHZhbHVlKQ0KDQptb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsX3NlID0gbW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbCAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiU291dGggYW5kIEVhc3QgQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJTb3V0aC5hbmQuRWFzdC5Bc2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5hbWUgPT0gIkxhdGluIGFuZCBTb3V0aCBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYXRpbi5hbmQuU291dGguQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmFtZSA9PSAiTm9ydGggQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vcnRoLkFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpKSkpDQoNCm1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbF9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfaW50ZXJlc3Rfbm9ubW9ucmVsX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIlMxIEludGVyZXN0IGluIFNpbmdsZSBMaWZlIikNCg0KY291bnRyaWVzX3JlZyA9DQogIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZWcgJT4lDQogIGZpbHRlcighaXMubmEoaW50ZXJlc3Rfbm9ubW9ucmVsKSkgJT4lDQogIHNlbGVjdChyZWdpb25fZmluYWwpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCg0KbW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbF9hbmFseXNlcyRuID0gY291bnRyaWVzX3JlZyRGcmVxDQpzdW0obW9kZWxzX2ludGVyZXN0X25vbm1vbnJlbF9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19pbnRlcmVzdF9ub25tb25yZWxfYW5hbHlzZXMsIFMgPSBzZV4yLA0KICAgICAgICAgICAgICAgbWV0aG9kID0gImZpeGVkIikNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KIyMjIyMgUzQgSW50ZXJlc3QgaW4gTW9ub2dhbW91cyBSZWxhdGlvbnNoaXBzIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gcmVnaW9uX2ZpbmFsLCB2YWx1ZXNfZnJvbSA9IHBvbGl0aWNhbF9vcmllbnRhdGlvbikgJT4lDQogIHNlbGVjdChpbnRlcmVzdF9tb25yZWwsIEV1cm9wZSwgJ1NvdXRoIGFuZCBFYXN0IEFzaWEnLCAnTGF0aW4gYW5kIFNvdXRoIEFtZXJpY2EnLCAnTm9ydGggQW1lcmljYScpDQoNCm1vZGVsc19pbnRlcmVzdF9tb25yZWwgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUgJT4lDQogIHNlbGVjdCgtaW50ZXJlc3RfbW9ucmVsKSAlPiUNCiAgbWFwKH5sbShzY2FsZShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnX3dpZGUkaW50ZXJlc3RfbW9ucmVsKSB+IHNjYWxlKC54KSwNCiAgICAgICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3JlZ193aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2NvZWYgPSBtb2RlbHNfaW50ZXJlc3RfbW9ucmVsICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ludGVyZXN0X21vbnJlbF9zZSA9IG1vZGVsc19pbnRlcmVzdF9tb25yZWwgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlNvdXRoIGFuZCBFYXN0IEFzaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAiU291dGguYW5kLkVhc3QuQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYW1lID09ICJMYXRpbiBhbmQgU291dGggQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGF0aW4uYW5kLlNvdXRoLkFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5hbWUgPT0gIk5vcnRoIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3J0aC5BbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSkpKQ0KDQptb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pbnRlcmVzdF9tb25yZWxfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX2ludGVyZXN0X21vbnJlbF9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJTMSBJbnRlcmVzdCBpbiBTaW5nbGUgTGlmZSIpDQoNCmNvdW50cmllc19yZWcgPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVnICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGludGVyZXN0X21vbnJlbCkpICU+JQ0KICBzZWxlY3QocmVnaW9uX2ZpbmFsKSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQoNCm1vZGVsc19pbnRlcmVzdF9tb25yZWxfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZWckRnJlcQ0Kc3VtKG1vZGVsc19pbnRlcmVzdF9tb25yZWxfYW5hbHlzZXMkbikNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfaW50ZXJlc3RfbW9ucmVsX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCg==