Supporting Information: Male castration and female sterilization improve survival but do not explain sex-differences in vertebrate ageing

Michael Garratt, Christine Neyt, Michael Stout, José V. V. Isola, Jean-Michel Gaillard, Jean-François Lemaître, Malgorzata Lagisz, & Shinichi Nakagawa

Setting-ups

Loading packages

# packages ####

#ochaRd
# 
# install.packages("devtools")
# install.packages("tidyverse")
# #install.packages("metafor")
# install.packages("patchwork")
# install.packages("R.rsp")
# 
# devtools::install_github("daniel1noble/orchaRd", force = TRUE, build_vignettes = TRUE)
# remotes::install_github("rvlenth/emmeans", dependencies = TRUE, build_opts = "") 
# 
# #emmeans
# remotes::install_github("rvlenth/emmeans", dependencies = TRUE, build_opts = "")
# # metafor
# install.packages("remotes")
# remotes::install_github("wviechtb/metafor")

# loading
pacman::p_load(tidyverse,
               metafor,
               pander,
               stringr,
               ape,
               kableExtra,
               patchwork,
               lme4,
               readxl,
               #emmeans,
               rotl,
               orchaRd,
               clubSandwich,
               MuMIn,
               png,
               grid,
               here,
               formatR,
               naniar,
               GoodmanKruskal,
               ggalluvial
)

# you may need to run this (we will plan to fix this)
library(groundhog)
groundhog.library("emmeans", '2022-04-01')

# need for metafor to understand MuMin 
eval(metafor:::.MuMIn)

Loading custom functions

# custom functions

# function for getting lnRR for proportional data (mortality)

lnrrp <- function(m1, m2, n1, n2) {
    # arcsine transforamtion
    asin_trans <- function(p) {
        asin(sqrt(p))
    }
    # SD for arcsine distribution (see Wiki -
    # https://en.wikipedia.org/wiki/Arcsine_distribution)
    var1 <- 1/8
    var2 <- 1/8
    # lnRR - with 2nd order correction
    lnrr <- log(asin_trans(m1)/asin_trans(m2)) + 0.5 * ((var1/(n1 * asin_trans(m1)^2)) -
        (var2/(n2 * asin_trans(m2)^2)))

    var <- var1/(n1 * asin_trans(m1)^2) + var1^2/(2 * n1^2 * asin_trans(m1)^4) +
        var2/(n2 * asin_trans(m2)^2) + var2^2/(2 * n2^2 * asin_trans(m2)^4)

    invisible(data.frame(yi = lnrr, vi = var))
}


# function to get to lnRR for longevity data (CV required) The method proposed
# in Nakagawa et al (2022) - missing SD method

lnrrm <- function(m1, m2, n1, n2, cv21, cv22) {
    # lnRR - with 2nd order correction
    lnrr <- log(m1/m2) + 0.5 * ((cv21/n1) - (cv22/n2))

    var <- (cv21/n1) + ((cv21^2)/(2 * n1^2)) + (cv22/n2) + ((cv22^2)/(2 * n2^2))

    invisible(data.frame(yi = lnrr, vi = var))
}

# for folded normal distribution see:
# https://en.wikipedia.org/wiki/Folded_normal_distribution

# folded mean
folded_mu <- function(mean, variance) {
    mu <- mean
    sigma <- sqrt(variance)
    fold_mu <- sigma * sqrt(2/pi) * exp((-mu^2)/(2 * sigma^2)) + mu * (1 - 2 * pnorm(-mu/sigma))
    fold_mu
}

# folded variance
folded_v <- function(mean, variance) {
    mu <- mean
    sigma <- sqrt(variance)
    fold_mu <- sigma * sqrt(2/pi) * exp((-mu^2)/(2 * sigma^2)) + mu * (1 - 2 * pnorm(-mu/sigma))
    fold_se <- sqrt(mu^2 + sigma^2 - fold_mu^2)
    # adding se to make bigger mean
    fold_v <- fold_se^2
    fold_v
}

Data preparation & processing

Main data

# dat_full <- read_csv(here('data', 'dat_07072021.csv'), na = c('', 'NA'))
# dat_full <- read_csv(here('data', 'data_15022022.csv'), na = c('', 'NA'))
dat_full <- read_csv(here("data", "data_05052022.csv"), na = c("", "NA"))
# glimpse(dat_full)

# loading data ####

dat_full %>%
    filter(is.na(Treatment_lifespan_variable) == FALSE) %>%
    filter(Type_of_sterilization != "Vasectomy") %>%
    mutate_if(is.character, as.factor) -> dat


dim(dat)
## [1] 159  40
dim(dat_full)
## [1] 161  40
# separating two kinds

effect_type <- ifelse(str_detect(dat$Lifespan_parameter, "Me"), "longevity", "mortality")

# fix a typo in species name
dat$Species_Latin <- gsub("Macaca Fascicularis", "Macaca fascicularis", dat$Species_Latin)
dat$Species_Latin <- gsub("Equus caballus", "Equus ferus", dat$Species_Latin)

# creating the phylo column
dat$Phylogeny <- sub(" ", "_", dat$Species_Latin)
dat$Effect_type <- effect_type
dat$Effect_ID <- 1:nrow(dat)
# key variables
names(dat)
##  [1] "Order_extracted"                  "Study"                           
##  [3] "Controlled_treatments"            "Type_of_sterilization"           
##  [5] "Gonads_removed"                   "Control_treatment"               
##  [7] "Shamtreatment_moderator"          "Sex"                             
##  [9] "Species_Latin"                    "Species"                         
## [11] "Strain"                           "Environment"                     
## [13] "Wild_or_semi_wild"                "Age_at_treatment"                
## [15] "Maturity_at_treatment"            "Maturity_at_treatment_ordinal"   
## [17] "Duration_of_treatment"            "Shared_control"                  
## [19] "Control_lifespan_variable"        "Treatment_lifespan_variable"     
## [21] "Opposite_sex_lifespan_variable"   "Error_control"                   
## [23] "Error_experimental"               "Error_opposite_sex"              
## [25] "Lifespan_parameter"               "Lifespan_unit"                   
## [27] "Error_unit"                       "Error_control_SD"                
## [29] "Error_experimental_SD"            "Error_opposite_sex_SD"           
## [31] "Coefficent_difference_to_control" "Lower_interval"                  
## [33] "Upper_interval"                   "Coefficent_unit"                 
## [35] "Sample_size_control"              "Sample_size_sterilization"       
## [37] "Sample_size_opposite_sex"         "Notes"                           
## [39] "Notes2"                           "Notes3"                          
## [41] "Phylogeny"                        "Effect_type"                     
## [43] "Effect_ID"
unique(dat$Species_Latin)
##  [1] "Equus ferus"            "Rattus argentiventer"   "Oryctolagus cuniculus" 
##  [4] "Myodes glareolus"       "Mus musculus"           "Rattus norvegicus"     
##  [7] "Anolis sagrei"          "Felis catus"            "Canis lupus"           
## [10] "Mesocricetus auratus"   "Homo sapiens"           "Trichosurus vulpecula" 
## [13] "Phascolarctos cinereus" "Ovis aries"             "Odocoileus virginianus"
## [16] "Oncorhynchus masou"     "Oncorhynchus nerka"     "Vulpes vulpes"         
## [19] "Macaca fascicularis"    "Varecia rubra"          "Varecia variegata"     
## [22] "Lamperta fluviatilis"
kable(dat, "html") %>%
    kable_styling("striped", position = "left") %>%
    scroll_box(width = "100%", height = "250px")
Order_extracted Study Controlled_treatments Type_of_sterilization Gonads_removed Control_treatment Shamtreatment_moderator Sex Species_Latin Species Strain Environment Wild_or_semi_wild Age_at_treatment Maturity_at_treatment Maturity_at_treatment_ordinal Duration_of_treatment Shared_control Control_lifespan_variable Treatment_lifespan_variable Opposite_sex_lifespan_variable Error_control Error_experimental Error_opposite_sex Lifespan_parameter Lifespan_unit Error_unit Error_control_SD Error_experimental_SD Error_opposite_sex_SD Coefficent_difference_to_control Lower_interval Upper_interval Coefficent_unit Sample_size_control Sample_size_sterilization Sample_size_opposite_sex Notes Notes2 Notes3 Phylogeny Effect_type Effect_ID
1 Kirkpatrick and Turner 2004 No porcine zona pellucida (PZP) immunocontraception No untreated No Female Equus ferus Horses NA Wild Yes 2 Years Adult 4 Less than 3 years 1 6.4700 10.2700 10.300 0.850 0.5600 0.840 Mean years S.E.M 5.508630 1.857310 6.285984 NA NA NA NA 42 11 56 Sterilization requires booster injections and these did not receive, the longer treatment did NA NA Equus_ferus longevity 1
2 Kirkpatrick and Turner 2004 No porcine zona pellucida (PZP) immunocontraception No untreated No Female Equus ferus Horses NA Wild Yes 2 Years Adult 4 More than 3 years 1 6.4700 19.9400 10.300 0.850 1.6600 0.840 Mean years S.E.M 5.508630 7.235772 6.285984 NA NA NA NA 42 19 56 NA NA NA Equus_ferus longevity 2
3 Jacob et al 2004 A Yes Tubul-ligation No Intact (no surgery) No Female Rattus argentiventer Ricefield rats NA Outdoor enclosure No Unknown - wild caught (approx 100g) Adult (young) 4 NA 2 0.2800 0.6700 NA 6.000 34.0000 NA Survival rate (%) One breeding season S.E.M NA NA NA NA NA NA NA 18 6 NA 25% population sterilized data from two enclosures pooled The impact of sterilized females on enclosed populations of ricefield rats Estimated age at treatment from data on weight at surgery. They were approximately 100g and are never referred to as sexually immature. 1Pregnancy occurs from when the animals are 60-120 g in weight (Sudarmaji 2002). Rattus_argentiventer mortality 3
4 Jacob et al 2004 A Yes Tubul-ligation No Intact (no surgery) No Female Rattus argentiventer Ricefield rats NA Outdoor enclosure No Unknown - wild caught (approx 100g) Adult (young) 4 NA 3 0.1400 0.2500 NA 6.000 8.0000 NA Survival rate (%) One breeding season S.E.M NA NA NA NA NA NA NA 12 12 NA 50% population sterilzed data from two enclosures pooled The impact of sterilized females on enclosed populations of ricefield rats NA Rattus_argentiventer mortality 4
5 Jacob et al 2004 A Yes Tubul-ligation No Intact (no surgery) No Female Rattus argentiventer Ricefield rats NA Outdoor enclosure No Unknown - wild caught (approx 100g) Adult (young) 4 NA 4 0.2200 0.1700 NA 6.000 6.0000 NA Survival rate (%) One breeding season S.E.M NA NA NA NA NA NA NA 6 18 NA 75% population sterilized data from two enclosures pooled The impact of sterilized females on enclosed populations of ricefield rats NA Rattus_argentiventer mortality 5
6 Jacob et al 2004 B Yes Tubul-ligation No Intact (no surgery) No Female Rattus argentiventer Ricefield rats NA Wild Yes Unknown - wild caught (approx 100g) Adult (young) 4 NA 10 0.4100 0.4200 NA 0.110 0.1700 NA Survival rate (%) two months deviance NA NA NA NA NA NA NA 13 24 NA Radiocollared - Animals spread across 4 plots giving error for survival NA NA Rattus_argentiventer mortality 6
7 Jacob et al 2004 B Yes Progesterone treatment No Untreated No Female Rattus argentiventer Ricefield rats NA Wild Yes Unknown - wild caught (approx 100g) Adult (young) 4 NA 10 0.4100 0.4000 NA 0.110 0.0000 NA Survival rate (%) two months deviance NA NA NA NA NA NA NA 15 24 NA Radiocollared -Animals spread across 4 plots giving error for survival. Progesterone treatment wore off and some females got pregnant NA NA Rattus_argentiventer mortality 7
8 Twigg et al 2000 Yes Tubul-ligation No Sham surgery or no surgery No Female Oryctolagus cuniculus Rabbit NA Outdoor enclosure Yes Unknown - wild caught (see notes for age estimation) Adult 4 NA 5 0.1330 0.4180 0.165 NA NA NA Survival rate (%) Four years NA NA NA NA NA NA NA NA 225 165 435 1993 cohorts. Assuming adults at sterilization because they do not refer to kittens, and because they show the survival of sterile females against intact females and intact adult males. They also show a plot of kitten survival and show that it is very poor NA NA Oryctolagus_cuniculus mortality 8
9 Twigg et al 2000 Yes Tubul-ligation No Sham surgery or no surgery No Female Oryctolagus cuniculus Rabbit NA Outdoor enclosure Yes Unknown - wild caught - yearling. Puberty or adult? NA NA NA 6 0.2390 0.3630 0.221 NA NA NA Survival rate (%) Four years NA NA NA NA NA NA NA NA 109 63 267 1994 cohorts NA NA Oryctolagus_cuniculus mortality 9
10 Twigg et al 2000 Yes Tubul-ligation No Sham surgery or no surgery No Female Oryctolagus cuniculus Rabbit NA Outdoor enclosure Yes Unknown - wild caught - yearly. Puberty or adult? NA NA NA 7 0.2100 0.3140 0.209 NA NA NA Survival rate (%) Four years NA NA NA NA NA NA NA NA 252 155 382 1995 cohorts - Also survival data and data split into different densities NA NA Oryctolagus_cuniculus mortality 10
11 Gipps and Jewel 1979 Yes Castration Yes Sham surgery Yes Male Myodes glareolus Bank vole NA Outdoor enclosure No Immature Prepuberty 2 NA 8 0.7820 0.9570 NA NA NA NA Survival rate (%) 6 months NA NA NA NA NA NA NA NA 23 23 NA No reproduction in enclosure so density both treatments exposed to would be the same NA NA Myodes_glareolus mortality 11
12 Gipps and Jewel 1979 Yes Castration Yes Sham surgery Yes Male Myodes glareolus Bank vole NA Outdoor enclosure No Immature Prepuberty 2 NA 9 0.7590 1.0000 0.700 NA NA NA Survival rate (%) 11 months NA NA NA NA NA NA NA NA 29 18 40 Some intacts were in a control enclosure without castrates. In the enclosure with castrates the density in the enclosure increased slightly quicker NA NA Myodes_glareolus mortality 12
13 Zakeri et al 2019 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mouse NMRI Laboratory No 10 months Adult (old) 4 NA 11 0.3600 0.5000 NA NA NA NA Survival rate (%) 11.5 months NA NA NA NA NA NA NA NA 16 16 NA Its the sterilization treatment that is compared to two different types of control in this study NA NA Mus_musculus mortality 13
14 Zakeri et al 2019 Yes Ovariectomy Yes Sham surgery Yes Female Mus musculus Mouse NMRI Laboratory No 10 months Adult (old) 4 NA 11 0.3300 0.5000 NA NA NA NA Survival rate (%) 11.5 months NA NA NA NA NA NA NA NA 16 16 NA Its the sterilization treatment that is compared to two different types of control in this study NA NA Mus_musculus mortality 14
15 Dorner 1973 Yes Castration Yes Untreated No Male Rattus norvegicus Rat Sprague-Dawley-Stammes Laboratory No Day after birth Birth 1 NA 12 570.0000 696.0000 NA 122.000 132.0000 NA Mean days Standard Deviation 122.000000 132.000000 NA NA NA NA NA 12 8 NA NA NA NA Rattus_norvegicus longevity 15
16 Asdell et al 1967 Yes Ovariectomy Yes Intact (no surgery) No Female Rattus norvegicus Rat Cornell Nutrion colony Laboratory No Between 38-42 days Puberty 3 NA 13 742.0000 669.0000 615.000 24.000 26.0000 21.000 Mean days S.E.M 169.705627 183.847763 148.492424 NA NA NA NA 50 50 50 Also data for mated females but havent included as would be a different environment (e.g. With males) NA NA Rattus_norvegicus longevity 16
17 Asdell et al 1967 Yes Castration Yes Intact (no surgery) No Male Rattus norvegicus Rat Cornell Nutrion colony Laboratory No Between 39-42 days Puberty 3 NA 14 615.0000 651.0000 742.000 21.000 26.0000 24.000 Mean days S.E.M 148.492424 183.847763 169.705627 NA NA NA NA 50 50 50 NA NA NA Rattus_norvegicus longevity 17
18 Asdell and Joshi 1976 Yes Ovariectomy Yes Intact (no surgery) No Female Rattus norvegicus Rat Manor-Wistar Laboratory No 45 days old Puberty 3 NA 15 654.0000 844.0000 661.000 24.000 24.0000 30.000 Mean days S.E.M 169.705627 169.705627 212.132034 NA NA NA NA 50 50 50 NA NA NA Rattus_norvegicus longevity 18
19 Asdell and Joshi 1976 Yes Castration Yes Intact (no surgery) No Male Rattus norvegicus Rat Manor-Wistar Laboratory No 45 days old Puberty 3 NA 16 661.0000 775.0000 654.000 30.000 30.0000 24.000 Mean days S.E.M 212.132034 212.132034 169.705627 NA NA NA NA 50 50 50 NA NA NA Rattus_norvegicus longevity 19
20 Arriola Apelo et al 2020 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice C57BL6 Laboratory No 21 days Prepuberty 2 NA 17 1006.0000 978.0000 853.000 34.300 37.4500 26.250 Median days S.E.M 145.522576 183.466782 136.399001 NA NA NA NA 18 24 27 NA NA NA Mus_musculus longevity 20
21 Arriola Apelo et al 2020 Yes Ovariectomy Yes Sham surgery Yes Female Mus musculus Mice C57BL6 Laboratory No 21 days Prepuberty 2 NA 18 853.0000 916.0000 1006.000 26.250 49.3600 34.300 Median days S.E.M 136.399001 231.518922 145.522576 NA NA NA NA 27 22 18 NA NA NA Mus_musculus longevity 21
22 Benedusi et al 2015 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice C57BL76 (ERE-LucRepTOP™) Laboratory No 5 Months Adult (old) 4 NA 19 0.1000 0.3500 NA NA NA NA Survival rate (%) 15 Months NA NA NA NA NA NA NA NA 20 20 NA NA NA NA Mus_musculus mortality 22
24 Cargil et al 2003 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice CBA Laboratory No 21 days Prepuberty 2 NA 21 599.2900 578.6400 NA 30.450 35.6000 NA Median Days S.E.M 158.222841 178.000000 NA NA NA NA NA 27 25 NA Extracted median lifespan from data in figure and calculated SD NA NA Mus_musculus longevity 23
25 Cox et al 2014 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Wild Yes Unknown - wild caught - assuming adult because caught at the same time of year as other studies, but work “adult” not specifically mentioned. Adult 4 NA 22 0.2600 0.3300 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 168 170 NA Raw data from Dyrad. My survival estimates from survival dont equal those extracted from the model, that probably includes covariates NA NA Anolis_sagrei mortality 24
26 Cox et al 2014 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Wild Yes Unknown - wild caught Adult 4 NA 22 0.3000 0.2000 NA NA NA NA Survival rate (%) Winter (Sept-May) NA NA NA NA NA NA NA NA 20 20 NA Remaining animals from first mortality assessment and only controls where fat was not removed. My survival estimates from those alive after monitored period NA NA Anolis_sagrei mortality 25
27 Cox and Calsbeek 2010 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Wild Yes Unknown - wild caught Adult 4 NA 23 0.0800 0.2400 NA NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 188 194 NA Data is also available for Summer and winter mortality, seperately NA NA Anolis_sagrei mortality 26
28 Cox et al 2010 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Wild Yes Adult - wild caught Adult 4 NA 24 0.2300 0.3400 NA NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 105 106 NA NA NA NA Anolis_sagrei mortality 27
29 Reedy et al 2016 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Wild Yes Unknown - wild caught adult after start of breeding Adult (young) 4 NA 25 0.2500 0.2100 0.550 NA NA NA Survival rate (%) 10 weeks (of breeding season) NA NA NA NA NA NA NA NA 110 110 60 NA NA NA Anolis_sagrei mortality 28
30 Reedy et al 2016 Yes Castration Yes Sham surgery Yes Male Anolis sagrei Anole lizards NA Wild Yes Unknown - wild caught adult after start of breeding Adult (young) 4 NA 26 0.5500 0.2800 0.250 NA NA NA Survival rate (%) 10 weeks (of breeding season) NA NA NA NA NA NA NA NA 60 60 110 NA NA NA Anolis_sagrei mortality 29
31 Drori and Folman 1976 Yes Castration Yes Intact (no surgery) No Male Rattus norvegicus Rat Albino Laboratory No 38-44 days. Stated as prepuberty Prepuberty 2 NA 27 727.0000 817.0000 849.000 26.000 32.0000 26.000 Mean Days S.E.M 182.000000 224.000000 182.000000 NA NA NA NA 49 49 49 Authors state that they castrated animals shortly before puberty, so coded as prepuberty NA NA Rattus_norvegicus longevity 30
32 Garratt et al 2021 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice C57BL6 Laboratory No 7-8 weeks Adult (young) 4 NA 28 952.0000 960.0000 956.000 20.700 36.4000 28.500 Median Days S.E.M 117.096883 218.400000 156.100929 NA NA NA NA 32 36 30 NA NA NA Mus_musculus longevity 31
33 Hamilton et al 1969 No Castration Yes Intact (no surgery) No Male Felis catus Cats Outbred Domestic No Under 5 months (before sexual maturity) Prepuberty 2 NA 29 5.3000 12.2000 7.700 0.420 1.4800 0.520 Mean Years S.E.M 4.136520 5.336216 4.794163 NA NA NA NA 97 13 85 Correlative data is provided in a figure showing exact age at gonadectomy and lifespan for each individual NA NA Felis_catus longevity 32
34 Hamilton et al 1969 No Castration Yes Intact (no surgery) No Male Felis catus Cats Outbred Domestic No 6 to 7 months Puberty 3 NA 29 5.3000 8.6000 7.700 0.420 1.1200 0.520 Mean Years S.E.M 4.136520 5.371331 4.794163 NA NA NA NA 97 23 85 NA NA NA Felis_catus longevity 33
35 Hamilton et al 1969 No Castration Yes Intact (no surgery) No Male Felis catus Cats Outbred Domestic No over 8 months Adult 4 NA 29 5.3000 7.2000 7.700 0.420 0.7100 0.520 Mean Years S.E.M 4.136520 4.376734 4.794163 NA NA NA NA 97 38 85 NA NA NA Felis_catus longevity 34
36 Hamilton et al 1969 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Outbred Domestic No Various, median 6 months NA NA NA 30 7.7000 8.2000 5.300 0.520 0.5200 0.420 Mean Years S.E.M 4.794163 4.503332 4.136520 NA NA NA NA 85 75 97 NA NA NA Felis_catus longevity 35
37 Hamilton et al 1969 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Name breeds Domestic No Various, median 6 months NA NA NA 31 6.2000 8.2000 4.600 0.840 0.8100 0.700 Mean Years S.E.M 5.040000 4.723071 3.500000 NA NA NA NA 36 34 25 NA NA NA Felis_catus longevity 36
38 Hamilton et al 1969 No Castration Yes Intact (no surgery) No Male Felis catus Cats Name breeds Domestic No Various, median 6 months NA NA NA 32 4.6000 6.9000 6.200 0.700 0.5900 0.840 Mean Years S.E.M 3.500000 4.971428 5.040000 NA NA NA NA 25 71 36 NA NA NA Felis_catus longevity 37
39 Waters et al 2011 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Rottweilers Domestic No 6.1-8 years Adult (old) 4 NA 33 0.2670 1.0000 NA NA NA NA Likelyhood of exceptional longevity Survival to 13 NA NA NA NA NA NA NA NA 14 14 NA Look at whether animals were normally lived, or lived over 13 years. Author is providing me with the raw data NA NA Canis_lupus mortality 38
40 Waters et al 2011 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Rottweilers Domestic No 2.1-6 years Adult (young) 4 NA 33 0.2670 0.4390 NA NA NA NA Likelyhood of exceptional longevity Survival to 13 NA NA NA NA NA NA NA NA 14 57 NA Look at whether animals were normally lived, or lived over 13 years. Author is providing me with the raw data NA NA Canis_lupus mortality 39
41 Waters et al 2011 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Rottweilers Domestic No 0.4-2 years. Estimated as puberty because rott weilers start to go through heat at approximately 12-18 months Puberty 3 NA 33 0.2670 0.3230 NA NA NA NA Likelyhood of exceptional longevity Survival to 13 NA NA NA NA NA NA NA NA 14 65 NA Look at whether animals were normally lived, or lived over 13 years. Author is providing me with the raw data NA NA Canis_lupus mortality 40
42 Holland et al 1977 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice RFM Laboratory No 3-4 weeks Prepuberty 2 NA 34 638.0000 628.0000 NA 16.000 16.0000 NA Mean Days S.E.M 167.044904 162.382265 NA NA NA NA NA 109 103 NA Just used data from non-irradiated group. Lots of pathology data NA NA Mus_musculus longevity 41
43 Kirkman and Yau 1972 No Castration Yes Intact (no surgery) No Male Mesocricetus auratus Hamsters Syrian Hamsters Laboratory No Unknown - not given NA NA NA 35 632.0000 508.0000 543.000 NA NA NA Mean Days NA 222.910000 151.300000 222.950000 NA NA NA NA 629 72 578 Do not have error presented in paper. The proportion of animals dying in 10 brackets of different ages is presented that could be used (Figs 3 and 4). Upper and low quartiles estimated from figure 3 when number of animals dying in 100 day periods is given. Have used the middle number within this period for the quartile value (e.g. 550-850 for intact males, 350-550 for castrated males) NA NA Mesocricetus_auratus longevity 42
44 Kirkman and Yau 1972 No Ovariectomy Yes Intact (no surgery) No Female Mesocricetus auratus Hamsters Syrian Hamsters Laboratory No Unknown - not given NA NA NA 36 543.0000 391.0000 632.000 NA NA NA Mean Days NA 222.950000 155.440000 222.910000 NA NA NA NA 578 31 629 Do not have error presented in paper. The proportion of animals dying in 10 brackets of different ages is presented that could be used (Figs 3 and 4). Upper and low quartiles estimated from figure 3 when number of animals dying in 100 day periods is given. Have used the middle number within this period for the quartile value (e.g. 450-750 for intact females, 250-450 for castrated females) NA NA Mesocricetus_auratus longevity 43
45 Sichuk 1965 Yes Castration Yes Sham surgery Yes Male Mesocricetus auratus Hampsters Syrian Hampsters Laboratory No 6 weeks Puberty 3 NA 37 612.0000 578.0000 589.000 NA NA NA Mean Days NA 222.910000 151.300000 222.950000 NA NA NA NA 92 90 94 Use - SD from Kirkman & Yau;Error not provided. Mean lifespan comes from the lifespan of both those with thrumobis and those that do not have it. Calculated the mean of these two values weighed against the sample size of each group NA NA Mesocricetus_auratus longevity 44
46 Sichuk 1965 Yes Ovariectomy Yes Sham surgery Yes Female Mesocricetus auratus Hampsters Syrian Hampsters Laboratory No 6 weeks Puberty 3 NA 38 589.0000 586.0000 612.000 NA NA NA Mean Days NA 222.950000 155.440000 222.910000 NA NA NA NA 94 92 92 Use - SD from Kirkman & Yau;Error not provided. Mean lifespan comes from the lifespan of both those with thrumobis and those that do not have it. Calculated the mean of these two values weighed against the sample size of each group NA NA Mesocricetus_auratus longevity 45
47 Mitchel et al 1999 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 39 131.0000 128.0000 130.000 1.400 2.7000 1.800 Mean Months S.E.M 50.029192 46.058550 51.951131 NA NA NA NA 1277 291 833 Used all causes of death. Data collected on the basis of surveys that pet owners filled out about their last pets age at death NA NA Canis_lupus longevity 46
48 Mitchel et al 1999 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 40 130.0000 144.0000 131.000 1.800 1.5000 1.400 Mean Months S.E.M 51.951131 40.249224 50.029192 NA NA NA NA 833 720 1277 Used all causes of death. Data collected on the basis of surveys that pet owners filled out about their last pets age at death NA NA Canis_lupus longevity 47
49 Moore et al 2001 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Military working dogs Domestic No Various NA NA NA 41 9.9700 10.4900 NA 2.100 2.0600 NA Median Years Standard deviation 2.100000 2.060000 NA NA NA NA NA 641 143 NA Shinichi made decisoin to halve the rest of N to control and the opposit sex;Do not know the sample size of castrated males. 641/927 animals in the study are intact males, the remaining animals are either castrated males or spayed females but we do not know sample size of each of these two groups. NA NA Canis_lupus longevity 48
50 Nieschlag et al 1993 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans NA NA No Castrate prepubertal boys to prevent maturation of voice Prepuberty 2 NA 42 64.3000 65.5000 NA 14.100 13.8000 NA Mean Years Standard Deviation 14.100000 13.800000 NA NA NA NA NA 200 50 NA NA NA NA Homo_sapiens longevity 49
51 Slonaker 1930 Yes Castration Yes Intact (no surgery) No Male Rattus norvegicus Rat Albino Laboratory No 44 days. Testes had decended by the operation Adult (young) 4 NA 43 788.0000 770.0000 863.000 22.250 28.0000 27.690 Mean Days Probable error 32.987398 41.512231 41.052632 NA NA NA NA 10 8 17 NA NA NA Rattus_norvegicus longevity 50
53 Slonaker 1930 Yes Ovariectomy Yes Intact (no surgery) No Female Rattus norvegicus Rat Albino Laboratory No 27.5 days Prepuberty 2 NA 44 863.0000 755.0000 788.000 27.690 22.1500 22.250 Mean Days Probable error 41.052632 32.839140 32.987398 NA NA NA NA 17 37 10 NA NA NA Rattus_norvegicus longevity 51
54 Slonaker 1930 Yes Hysterectomy No Intact (no surgery) No Female Rattus norvegicus Rat Albino Laboratory No 29 days Prepuberty 2 NA 44 863.0000 855.0000 788.000 27.690 12.6700 22.250 Mean Days Probable error 41.052632 18.784285 32.987398 NA NA NA NA 17 60 10 NA NA NA Rattus_norvegicus longevity 52
55 Storer et al 1982 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice RFM Laboratory No 50 days Adult (young) 4 NA 45 643.4000 662.2000 NA 5.910 7.3100 NA Mean Days S.E.M. 161.311607 134.193762 NA NA NA NA NA 745 337 NA Non-irradiated controls from an irradiation experiment NA NA Mus_musculus longevity 53
56 Storer et al 1982 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice Balb/c Laboratory No 50 days Adult (young) 4 NA 46 762.9000 795.5000 NA 6.210 10.9500 NA Mean Days S.E.M. 179.016109 197.707397 NA NA NA NA NA 831 326 NA Non-irradiated controls from an irradiation experiment NA NA Mus_musculus longevity 54
57 Hoffman et al 2018 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 47 10.8600 11.6400 10.860 0.110 0.0700 0.140 Mean Years S.E.M 3.327386 2.033618 3.685485 NA NA NA NA 915 844 693 Vetcompass database NA NA Canis_lupus longevity 55
58 Hoffman et al 2018 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 48 10.8600 12.1200 10.860 0.140 0.1900 0.110 Mean Years S.E.M 3.685485 5.766116 3.327386 NA NA NA NA 693 921 915 Vetcompass database NA NA Canis_lupus longevity 56
59 Hoffman et al 2018 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 49 8.0000 9.2100 7.680 0.070 0.0400 0.070 Mean Years S.E.M 8.556337 4.241509 6.018372 NA NA NA NA 14941 11244 7392 VMDB - individual data for breeds available in supplementary, but just mean lifespan without error NA NA Canis_lupus longevity 57
60 Hoffman et al 2018 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 50 7.6800 9.7300 8.000 0.070 0.0400 0.070 Mean Years S.E.M 6.018372 5.599714 8.556337 NA NA NA NA 7392 19598 14941 VMDB - individual data for breeds available in supplementary, but just mean lifespan without error NA NA Canis_lupus longevity 58
61 Mason et al 2009 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice CBA Laboratory No 21 days Prepuberty 2 NA 51 727.6000 715.0000 NA 15.900 20.0000 NA Mean Days S.E.M 89.943983 101.980390 NA NA NA NA NA 32 26 NA Worked out sample size from fig 4 This and the other entry for this paper have two different control comparisons NA NA Mus_musculus longevity 59
62 Mason et al 2009 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mice CBA Laboratory No 21 days Prepuberty 2 NA 51 725.6000 715.0000 NA 20.400 20.0000 NA Mean Days S.E.M 117.189078 101.980390 NA NA NA NA NA 33 26 NA Worked out sample size from fig 4 NA NA Mus_musculus longevity 60
63 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Yes Male Rattus norvegicus Rats Lewis Laboratory No Birth Birth 1 NA 52 454.0000 521.0000 484.000 18.000 27.0000 19.000 Mean Days S.E.M 108.000000 174.979999 123.134073 NA NA NA NA 36 42 42 NA NA NA Rattus_norvegicus longevity 61
64 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Yes Male Rattus norvegicus Rats Lewis Laboratory No 22-28 days Prepuberty 2 NA 52 454.0000 488.0000 484.000 18.000 28.0000 19.000 Mean Days S.E.M 108.000000 165.650234 123.134073 NA NA NA NA 36 35 42 NA NA NA Rattus_norvegicus longevity 62
65 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Yes Male Rattus norvegicus Rats Lewis Laboratory No 100 days Adult (young) 4 NA 52 454.0000 439.0000 484.000 18.000 25.0000 19.000 Mean Days S.E.M 108.000000 119.895788 123.134073 NA NA NA NA 36 23 42 NA NA NA Rattus_norvegicus longevity 63
66 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Lewis Laboratory No Birth Birth 1 NA 53 484.0000 574.0000 454.000 19.000 33.0000 18.000 Mean Days S.E.M 123.134073 183.736224 108.000000 NA NA NA NA 42 31 36 NA NA NA Rattus_norvegicus longevity 64
67 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Lewis Laboratory No 22-28 days Prepuberty 2 NA 53 484.0000 480.0000 454.000 19.000 44.0000 18.000 Mean Days S.E.M 123.134073 206.378293 108.000000 NA NA NA NA 42 22 36 NA NA NA Rattus_norvegicus longevity 65
68 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Lewis Laboratory No 100 days Adult (young) 4 NA 53 484.0000 515.0000 454.000 19.000 41.0000 18.000 Mean Days S.E.M 123.134073 183.357574 108.000000 NA NA NA NA 42 20 36 NA NA NA Rattus_norvegicus longevity 66
69 Tapprest et al 2017 No Castration Yes Intact (no surgery) No Male Equus ferus Draught horse NA Farm No Unknown Unknown NA NA 54 0.1520 0.1740 0.103 NA NA NA Survival rate (%) to 10 years NA NA NA NA NA NA NA NA 132 23 638 No error provided with median lifespan but there is proportion surviving to a specific age, which includes condfidence intervals, and survival curves. Have used survival to 10 yeays of age. NA NA Equus_ferus mortality 67
70 Tapprest et al 2017 No Castration Yes Intact (no surgery) No Male Equus ferus Pony NA Farm No Unknown Unknown NA NA 55 0.6970 0.6970 0.709 NA NA NA Survival rate (%) to 10 years NA NA NA NA NA NA NA NA 211 201 533 No error provided with median lifespan but there is proportion surviving to a specific age, which includes condfidence intervals, and survival curves. Have used survival to 10 yeays of age. NA NA Equus_ferus mortality 68
71 Tapprest et al 2017 No Castration Yes Intact (no surgery) No Male Equus ferus Saddle horse NA Farm No Unknown Unknown NA NA 56 0.5620 0.5540 0.575 NA NA NA Survival rate (%) to 10 years NA NA NA NA NA NA NA NA 1077 2203 4124 No error provided with median lifespan but there is proportion surviving to a specific age, which includes condfidence intervals, and survival curves. Have used survival to 10 yeays of age. NA NA Equus_ferus mortality 69
72 Hamilton 1965 No Castration Yes Intact (no surgery) No Male Felis catus Cats Various breeds Domestic No 6 -12 months for those that were known Puberty or adult NA NA 57 3.2000 6.8000 7.700 0.340 0.5800 0.680 Mean Years S.E.M 2.741168 4.492661 5.178726 NA NA NA NA 65 60 58 Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. NA NA Felis_catus longevity 70
73 Hamilton 1965 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Various breeds Domestic No 6 -12 months for those that were known Puberty or adult NA NA 58 7.7000 9.2000 3.200 0.680 0.8800 0.340 Mean Years S.E.M 5.178726 4.656522 2.741168 NA NA NA NA 58 28 65 Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. NA NA Felis_catus longevity 71
74 Hamilton 1965 No Castration Yes Intact (no surgery) No Male Felis catus Cats Various breeds Domestic No 6 -12 months for those that were known Puberty or adult NA NA 59 6.1000 8.5000 7.400 0.660 0.5600 0.720 Mean Years S.E.M 4.713343 4.913980 5.091169 NA NA NA NA 51 77 50 Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. NA NA Felis_catus longevity 72
75 Hamilton 1965 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Various breeds Domestic No 6 -12 months for those that were known Puberty or adult NA NA 60 7.4000 8.4000 6.100 0.720 0.7100 0.660 Mean Years S.E.M 5.091169 4.762825 4.713343 NA NA NA NA 50 45 51 Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. NA NA Felis_catus longevity 73
76 Huang et al 2017 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 61 9.0000 12.0000 10.000 NA NA NA Median Years Interquartile range 5.941000 3.723000 5.947000 NA NA NA NA 839 332 528 Interquartile range Intact, 5.0-13.0; castrated 9.0-14.0 NA NA Canis_lupus longevity 74
77 Huang et al 2017 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 62 10.0000 12.0000 9.000 NA NA NA Median Years Interquartile range 5.947000 3.938000 5.941000 NA NA NA NA 528 607 839 Interquartile range Intact, 5.0-13.0; ovariectomy 9.7-15.0 NA NA Canis_lupus longevity 75
78 Min et al 2012 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans NA NA No Various.The boys lost their reproductive organs in accidents, or they underwent deliberate castration to gain access to the palace before becoming a teenager. Prepuberty 2 NA 63 55.6000 70.0000 NA 0.530 1.7600 NA Median Years S.E.M 17.784639 15.840000 NA NA NA NA NA 1126 81 NA Mok family NA NA Homo_sapiens longevity 76
79 Min et al 2012 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans NA NA No Various.The boys lost their reproductive organs in accidents, or they underwent deliberate castration to gain access to the palace before becoming a teenager. Prepuberty 2 NA 63 52.9000 70.0000 NA 0.450 1.7600 NA Median Years S.E.M 16.921436 15.840000 NA NA NA NA NA 1414 81 NA Shin family NA NA Homo_sapiens longevity 77
80 Min et al 2012 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans NA NA No Various.The boys lost their reproductive organs in accidents, or they underwent deliberate castration to gain access to the palace before becoming a teenager. Prepuberty 2 NA 63 50.9000 70.0000 NA 2.160 1.7600 NA Median Years S.E.M 15.120000 15.840000 NA NA NA NA NA 49 81 NA Seo family NA NA Homo_sapiens longevity 78
81 Williams et al 2007 Yes Tubul-ligation No Intact (no surgery) No Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Unknown - wild caught (>500g weight) Adult (young) 4 NA 65 0.2710 0.4970 0.269 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 70 143 331 1993 cohort_treatment shared between two controls NA NA Oryctolagus_cuniculus mortality 79
82 Williams et al 2007 Yes Tubul-ligation No Sham surgery Yes Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Unknown - wild caught (>500g weight) Adult (young) 4 NA 65 0.2710 0.4970 0.269 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 140 143 331 1994 cohort_treatment shared between two controls NA NA Oryctolagus_cuniculus mortality 80
83 Williams et al 2007 Yes Tubul-ligation No Intact (no surgery) No Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Yearling (>500g) Puberty or adult? NA NA NA 66 0.5120 0.5160 0.271 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 41 128 280 1994 cohort_Treatment shared NA NA Oryctolagus_cuniculus mortality 81
84 Williams et al 2007 Yes Tubul-ligation No Sham surgery Yes Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Yearling (>500g) Puberty or adult? NA NA NA 66 0.3770 0.5160 0.271 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 77 128 280 1994 cohort_Treatment shared NA NA Oryctolagus_cuniculus mortality 82
85 Williams et al 2007 Yes Tubul-ligation No Intact (no surgery) No Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Yearling (>500g) Puberty or adult? NA NA NA 67 0.2790 0.5180 0.347 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 43 114 236 1995 cohort_Treatment shared NA NA Oryctolagus_cuniculus mortality 83
86 Williams et al 2007 Yes Tubul-ligation No Sham surgery Yes Female Oryctolagus cuniculus Rabbits European Rabbit Wild Yes Yearling (>500g) Puberty or adult? NA NA NA 67 0.3380 0.5180 0.347 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 68 114 236 1995 cohort_Treatment shared NA NA Oryctolagus_cuniculus mortality 84
87 Urfer et al 2019 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 68 14.0900 14.1500 13.770 0.033 0.0130 0.046 Median years 95% Confidence intervals 18.753700 12.400487 22.107487 NA 0.033 0.0130 0.046 322958 909894 230974 95% confidence intervals Intact Male: 14.03-14.16; Castrated male: 14.13-14.18 NA NA Canis_lupus longevity 85
88 Urfer et al 2019 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 69 13.7700 14.3500 14.090 0.046 0.0102 0.033 Median years 95% Confidence intervals 22.107487 9.710121 18.753700 NA 0.046 0.0102 0.033 230974 906252 322958 95% confidence intervals Intact female: 13.68-13.86, OVX female: 14.33-14.37 NA NA Canis_lupus longevity 86
89 Ramsey 2005 Yes Tubul-ligation No Sham surgery Yes Female Trichosurus vulpecula Possum NA Wild Yes Various Adult 4 NA 70 0.7800 0.8700 NA NA NA NA Survival rate (%) Annual (taken from 4 years) NA NA NA NA NA NA NA NA 56 56 NA Orongorono 50% sterility_Survival from Fig 7, sample sizes from number of animals released over the years 1996-1999 NA NA Trichosurus_vulpecula mortality 87
90 Ramsey 2005 Yes Tubul-ligation No Sham surgery Yes Female Trichosurus vulpecula Possum NA Wild Yes Various Adult 4 NA 71 0.7200 0.8300 NA NA NA NA Survival rate (%) Annual (taken from 4 years) NA NA NA NA NA NA NA NA 36 142 NA Orongorono 80% sterility_Survival from Fig 7, sample sizes from number of animals released over the years 1996-1999 NA NA Trichosurus_vulpecula mortality 88
91 Ramsey 2005 Yes Tubul-ligation No Sham surgery Yes Female Trichosurus vulpecula Possum NA Wild Yes Various Adult 4 NA 72 0.6300 0.7600 NA NA NA NA Survival rate (%) Annual (taken from 4 years) NA NA NA NA NA NA NA NA 215 215 NA Turitea 50% sterility_Survival from Fig 7, sample sizes from number of animals released over the years 1996-1999. Confidence intervals are provided NA NA Trichosurus_vulpecula mortality 89
92 Ramsey 2005 Yes Tubul-ligation No Sham surgery Yes Female Trichosurus vulpecula Possum NA Wild Yes Various Adult 4 NA 73 0.6000 0.7400 NA NA NA NA Survival rate (%) Annual (taken from 4 years) NA NA NA NA NA NA NA NA 31 123 NA Turitea 80% sterility_Survival from Fig 7, sample sizes from number of animals released over the years 1996-1999 NA NA Trichosurus_vulpecula mortality 90
93 Ramsey et al 2021 Yes levonorgestrel implant No Sham capture Yes Female Phascolarctos cinereus Koala NA Wild Yes Mature females, as definted by toothwear, under 1 year Adult (young) 4 NA 74 0.7200 0.7800 NA NA NA NA Survival rate (%) Annual (average from across all years) NA NA NA NA NA NA NA NA 603 4355 NA Survival rate taken as the average across all years. Sample size is also from across all years. Yearly data is also available in supplementary. Confidence intervals are provided. NA NA Phascolarctos_cinereus mortality 91
94 Muhlock 1959 Yes Castration Yes Intact (no surgery) No Male Mus musculus Mouse DBA Laboratory No Weaning (1month) Prepuberty 2 NA 75 578.0000 595.0000 667.000 10.120 11.4400 9.570 Mean days S.E.M 78.389183 102.322471 88.748529 NA NA NA NA 60 80 86 Extracted data and calculated mean and SE from graph NA NA Mus_musculus longevity 92
95 Muhlock 1959 Yes Ovariectomy Yes Intact (no surgery) No Female Mus musculus Mouse DBA Laboratory No Weaning (1 month) Prepuberty 2 NA 76 667.0000 627.0000 578.000 9.570 10.6700 10.120 Mean days S.E.M 88.748529 87.987074 78.389183 NA NA NA NA 86 68 60 Extracted data and calculated mean and SE from graph NA NA Mus_musculus longevity 93
96 Jewel 1997 Yes Castration Yes Intact (no surgery) No Male Ovis aries Sheep Soay sheep Wild Yes Lambs Birth 1 NA 77 0.3600 0.7100 0.410 NA NA NA Survival rate (%) one year NA NA NA NA NA NA NA NA 14 14 54 1978 Calaculated the survival rate to the timepoint nearest 50% intact male survival NA NA Ovis_aries mortality 94
97 Jewel 1997 Yes Castration Yes Intact (no surgery) No Male Ovis aries Sheep Soay sheep Wild Yes Lambs Birth 1 NA 78 0.2000 0.8800 0.910 NA NA NA Survival rate (%) One year NA NA NA NA NA NA NA NA 8 5 44 1979 NA NA Ovis_aries mortality 95
98 Jewel 1997 Yes Castration Yes Intact (no surgery) No Male Ovis aries Sheep Soay sheep Wild Yes Lambs Birth 1 NA 79 0.0800 0.6600 0.400 NA NA NA Survival rate (%) Five years NA NA NA NA NA NA NA NA 50 50 83
  1. Calculated the survival rate to timepoint nearest to 50% intact male survival, and where there is data for all groups. A survival curve is also available but there is alot of missing data
NA NA Ovis_aries mortality 96
99 Iwasa et al 2018 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Sprague-Dawley Laboratory No 23 weeks Late adult 4 NA 80 0.4300 0.8600 NA NA NA NA Survival rate (%) ~85 weeks. NA NA NA NA NA NA NA NA 8 7 NA Calculated from a partial survival curve. Looked at when 50% of the control group died and then the number alive in the treatment group at this point NA NA Rattus_norvegicus mortality 97
100 Hamilton and Mestler 1969 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans Mentally handicaped individuals NA No 8-14 years (prepubertal) Prepuberty 2 NA 81 64.7000 76.3000 NA 0.990 1.3600 NA Median lifespan (for those alive at 40) Years S.E.M 17.709658 5.769991 NA NA NA NA NA 320 18 NA Median lifespan data from Table 10. This data is taken from those individuals alive at 40. Data for those alive at earlier ages is also available but not stratified into different surgery ages NA NA Homo_sapiens longevity 98
101 Hamilton and Mestler 1969 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans Mentally handicaped individuals NA No 15-19 years Adult (young) 4 NA 81 64.7000 72.9000 NA 0.990 5.1300 NA Median lifespan (for those alive at 40) Years S.E.M 17.709658 43.529493 NA NA NA NA NA 320 72 NA Median lifespan data from Table 10. This data is taken from those individuals alive at 40. Data for those alive at earlier ages is also available but not stratified into different surgery ages NA NA Homo_sapiens longevity 99
102 Hamilton and Mestler 1969 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans Mentally handicaped individuals NA No 20-29 years Adult (young) 4 NA 81 64.7000 69.6000 NA 0.990 2.5000 NA Median lifespan (for those alive at 40) Years S.E.M 17.709658 19.525624 NA NA NA NA NA 320 61 NA Median lifespan data from Table 10. This data is taken from those individuals alive at 40. Data for those alive at earlier ages is also available but not stratified into different surgery ages NA NA Homo_sapiens longevity 100
103 Hamilton and Mestler 1969 No Castration Yes Intact (no surgery) No Male Homo sapiens Humans Mentally handicaped individuals NA No 30-39 years Adult (old) 4 NA 81 64.7000 68.9000 NA 0.990 2.0500 NA Median lifespan (for those alive at 40) Years S.E.M 17.709658 14.350000 NA NA NA NA NA 320 49 NA Median lifespan data from Table 10. This data is taken from those individuals alive at 40. Data for those alive at earlier ages is also available but not stratified into different surgery ages NA NA Homo_sapiens longevity 101
104 Hamilton and Mestler 1969 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans Mentally handicaped individuals NA No 13-46 years old Adult 4 NA 82 33.9000 56.2000 NA 1.360 4.6900 NA Median Years S.E.M 15.265962 15.554970 NA NA NA NA NA 126 11 NA Only one female was 13 years and all the rest were clearly adult so group coded as adult NA NA Homo_sapiens longevity 102
105 Oneil et al 2013 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 83 11.9900 11.9900 11.590 NA NA NA Mean Years Estimated NA NA NA 0.8 0.500 1.1000 Average difference in years to control 1464 1224 1082 Means calculated from the coefficient change in lifespan in Table 4. Sample size for all was known, SD was estimated NA NA Canis_lupus longevity 103
106 Oneil et al 2013 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 84 11.5900 12.3900 11.990 NA NA NA Mean Years Estimated NA NA NA Look at comments for Coefficent whiich is in relation to the control female from the same study) NA NA NA 1082 1304 1464 Means calculated from the coefficient change in lifespan in Table 4. Sample size for all was known, SD was estimated NA NA Canis_lupus longevity 104
107 Oneil et al 2015 No Castration Yes Intact (no surgery) No Male Felis catus Cats Various breeds Domestic No Various NA NA NA 85 12.8100 14.7100 14.610 NA NA NA Mean Years Estimated NA NA NA 0.6 0.100 1.0000 Average difference in years to control 704 1296 707 Means calculated from the coefficient change in lifespan in Table 4. Sample size for each sex was estimated on the basis of the total sample size and the percentage that were known to be sterilized in both sexes, SD was estimated NA NA Felis_catus longevity 105
108 Oneil et al 2015 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Various breeds Domestic No Various NA NA NA 86 14.6100 15.2100 12.810 NA NA NA Mean Years Estimated NA NA NA Look at comments for Coefficent whiich is in relation to the control female from the same study) NA NA NA 707 1302 704 Means calculated from the coefficient change in lifespan in Table 4. Sample size for each sex was estimated on the basis of the total sample size and the percentage that were known to be sterilized in both sexes, SD was estimated NA NA Felis_catus longevity 106
112 Wilson et al 2019 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No Under 50 years old Adult 4 NA 90 0.9351 0.9166 NA NA NA NA Survival rate (%) 21.5 years (median follow-up) NA NA NA NA NA NA NA NA 10218 851 NA Calculated survival rate from those surviving across the study period. Hazard ratios are also provided in the paper, and additional analysis cotrolling for factors. There is also analysis where women are seperated according to whether they have used hormone replacement therapy. Additional studies are cited that have conducted this type of analysis. NA NA Homo_sapiens mortality 107
113 Wilson et al 2019 No Hysterectomy No Intact (no surgery) No Female Homo sapiens Humans NA NA No Under 50 years old Adult 4 NA 90 0.9351 0.9324 NA NA NA NA Survival rate (%) 21.5 years (median follow-up) NA NA NA NA NA NA NA NA 10218 2472 NA Calculated survival rate from those surviving across the study period. Hazard ratios are also provided in the paper, and additional analysis cotrolling for factors. There is also analysis where women are seperated according to whether they have used hormone replacement therapy. Additional studies are cited that have conducted this type of analysis. NA NA Homo_sapiens mortality 108
114 Cheng 2019 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice UMHet3 Laboratory No Under 30 days is stated. The figure shows weights starting at approximately 15-20 days so this is used in the correlation analysis Prepuberty 2 NA 91 0.8100 0.9700 NA NA NA NA Survival rate (%) 500 days NA NA NA NA NA NA NA NA 238 238 NA NA NA NA Mus_musculus mortality 109
115 Bronson 1981 No Castration Yes Intact (no surgery) No Male Felis catus Cats Various breeds Domestic No After 6 months (they state few were done before neutered before 6 months or so) Puberty or adult NA NA 92 4.9700 7.3400 6.650 3.660 4.2900 5.660 Mean Years - for cats surviving to two years old Standard deviation 3.660000 4.290000 5.660000 NA NA NA NA 219 265 99 Lifespan of individuals calculated from histograms. Used data from animals that survived after the first year. NA NA Felis_catus longevity 110
116 Bronson 1981 No Ovariectomy Yes Intact (no surgery) No Female Felis catus Cats Various breeds Domestic No After 6 months (they state few were done before neutered before 6 months or so) Puberty or adult NA NA 93 6.6500 9.1100 4.970 5.660 5.1300 3.660 Mean Years - for cats surviving to two years old Standard deviation 5.660000 5.130000 3.660000 NA NA NA NA 99 220 219 Lifespan of individuals calculated from histograms. Used data from animals that survived after the first year. NA NA Felis_catus longevity 111
117 Bronson 1982 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Various breeds Domestic No Various NA NA NA 94 8.0000 9.9000 7.700 5.200 6.8000 4.400 Mean (from those alive after 2) Years Standard Deviation 5.200000 6.800000 4.400000 NA NA NA NA 755 54 224 Mean lifespan is that of those that are alive from 2 years of age. The authors also provide lifespan from birth, but point out that animals are not usually sterilized until at least 6 months, so this doesnt provide a fair comparison NA NA Canis_lupus longevity 112
118 Bronson 1982 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Various breeds Domestic No Various NA NA NA 95 7.7000 8.8000 8.000 4.400 6.9000 5.200 Mean (from those alive after 2) Years Standard Deviation 4.400000 6.900000 5.200000 NA NA NA NA 224 528 755 Mean lifespan is that of those that are alive from 2 years of age. The authors also provide lifespan from birth, but point out that animals are not usually sterilized until at least 6 months, so this doesnt provide a fair comparison NA NA Canis_lupus longevity 113
119 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site FP predation natural Yes Unknown NA NA NA 96 0.3590 0.5250 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 78 80 NA Site FP predation natural NA NA Anolis_sagrei mortality 114
120 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site FC no predation No Unknown NA NA NA 97 0.5430 0.3590 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 81 78 NA Site FC no predation. Included as not wild-semi wild because protected from predation NA NA Anolis_sagrei mortality 115
121 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site HC Bird predation Yes Unknown NA NA NA 98 0.3210 0.3920 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 81 79 NA Site HC Bird predation NA NA Anolis_sagrei mortality 116
122 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site FP Natural Yes Unknown NA NA NA 99 0.3270 0.5610 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 110 114 NA Site FP Natural NA NA Anolis_sagrei mortality 117
123 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site NC No predation No Unknown NA NA NA 100 0.2930 0.3470 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 75 75 NA Site NC No predation. Included as not wild semi-wild because protected from predation NA NA Anolis_sagrei mortality 118
124 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site FC Bird predation Yes Unknown NA NA NA 101 0.4930 0.5730 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 75 75 NA Site FC Bird predation NA NA Anolis_sagrei mortality 119
125 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site HC Bird and snake predation Yes Unknown NA NA NA 102 0.3330 0.2840 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 74 75 NA Site HC Bird and snake predation NA NA Anolis_sagrei mortality 120
126 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site Mc Bird and snake predation Yes Unknown NA NA NA 103 0.2670 0.2530 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 75 75 NA Site Mc Bird and snake predation NA NA Anolis_sagrei mortality 121
127 Cox et al 2021 Yes Ovariectomy Yes Sham surgery Yes Female Anolis sagrei Anole lizards NA Site FP natural Yes Unknown NA NA NA 104 0.2290 0.3400 NA NA NA NA Survival rate (%) One breeding season (May-Sept) NA NA NA NA NA NA NA NA 105 106 NA Site FP natural NA NA Anolis_sagrei mortality 122
128 Skinner 2007 Yes Tubul-ligation No Anesthetized but no surgery Yes Female Odocoileus virginianus White-tailed deer NA Suburban chicago No Unknown NA NA NA 105 0.7500 0.5200 0.660 NA NA NA Survival rate (%) four years NA NA NA NA NA NA NA NA 34 67 79 It is stated that more treatment does died from vechicle accidents (e.g. Human biased) NA NA Odocoileus_virginianus mortality 123
129 Kent et al 2018 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs Golden retriver Domestic No Unknown NA NA NA 106 8.6800 9.3500 5.890 NA NA NA Median Years Range 3.230000 2.710000 3.270000 NA NA NA NA 118 228 58 Standard deviation calculated from the range according to Wan et al 2014 NA NA Canis_lupus longevity 124
130 Kent et al 2018 No Ovariectomy Yes Intact (no surgery) No Female Canis lupus Dogs Golden retriver Domestic No Unknown NA NA NA 107 5.8900 9.5100 8.680 NA NA NA Median Years Range 3.270000 2.740000 3.230000 NA NA NA NA 58 248 118 Standard deviation calculated from the range according to Wan et al 2014 NA NA Canis_lupus longevity 125
131 Iversen et al 2007 No Tubul-ligation No Intact (no surgery) No Female Homo sapiens Humans NA NA No Various NA NA NA 108 0.9195 0.9124 NA NA NA NA Survival rate (%) 1968-2004 approx NA NA NA NA NA NA NA NA 2634 2511 NA Groups differ in some demographic factors ie parity. Used data from Table 3 (all cause dealth), where women who had a history of cancer or cardiovascular disease etc, before their operation or follow-up period, were excluded from the analysis (see statistics section). NA NA Homo_sapiens mortality 126
132 Sato et al 1997 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Sprague-Dawley Laboratory No 9 months Adult 4 NA 109 0.8000 0.9710 NA NA NA NA Survival rate (%) 6 months NA NA NA NA NA NA NA NA 35 35 NA NA NA NA Rattus_norvegicus mortality 127
133 Aida et al 1984 Yes Castration Yes Sham surgery Yes Male Oncorhynchus masou masu salmon NA Laboratory No precocious NA NA NA 110 0.3360 0.6200 NA NA NA NA Survival rate (%) 8 months NA NA NA NA NA NA NA NA 107 316 NA Experiments were conducted on precocious mature males. Need to work out how to classify this in terms of maturity at castration. Some males had partial gonads remaining at NA NA Oncorhynchus_masou mortality 128
135 Pullinger and Head 1964 Yes Ovariectomy Yes Untreated No Female Mus musculus Mice C3Hf Laboratory No 56-111 days of age Adult 4 NA 112 0.3700 0.2300 NA NA NA NA Survival rate (%) to 30 months NA NA NA NA NA NA NA NA 114 40 NA “average lifespan” in months is also provided but no error. Calculated the percentage surviving to 30 months as dead ranges are provided in 6 brackets and this is the closest to the median for control females. This group is control virgin females (OVX data was shared and compared to breeding females in the other female comparison for this paper but I removed it because I dont think social environment was comparable) NA NA Mus_musculus mortality 129
136 Robertson et al 1961 No Castration Yes Untreated No Male Oncorhynchus nerka Kokanee salmon NA Experimental pond No 2 years 1 month Prior to sexual maturity 2 NA 113 4.0500 5.3100 4.260 NA NA NA Mean NA NA 0.590000 1.600000 0.550000 NA NA NA NA 41 13 58 Only used data on animals that were found dead and did not have regenerating gonads. Mortality data is presented for a larger cohort that were also exposed to predation but control data is not seperated according to sex. NA NA Oncorhynchus_nerka longevity 130
137 Robertson et al 1961 No Ovariectomy Yes Untreated No Female Oncorhynchus nerka Kokanee salmon NA Experimental pond No 2 years 1 month Prior to sexual maturity 2 NA 114 4.2600 5.8900 4.050 NA NA NA Mean NA NA 0.550000 1.630000 0.590000 NA NA NA NA 58 16 41 Only used data on animals that were found dead and did not have regenerating gonads. Mortality data is presented for a larger cohort that were also exposed to predation but control data is not seperated according to sex. NA NA Oncorhynchus_nerka longevity 131
138 Saunders et al 2002 Yes Tubul-ligation No Intact (no surgery) No Female Vulpes vulpes Foxes NA Wild Yes Adult (toothwear) NA 4 NA 115 0.8300 0.8500 0.885 NA NA NA Survival rate (%) 2 years NA NA NA NA NA NA NA NA 6 20 26 Included as controled because comparison is to animals on the same site. Male data is also from the same site NA NA Vulpes_vulpes mortality 132
139 Saunders et al 2002 No Tubul-ligation No Sham surgery Yes Female Vulpes vulpes Foxes NA Wild Yes Adult (toothwear) NA 4 NA 115 0.7860 0.8500 0.955 NA NA NA Survival rate (%) 2 years NA NA NA NA NA NA NA NA 14 20 22 Included as not controlled as effect of sham surgery was assessed on a neighouring site although the authors compare survivalship rates between NA NA Vulpes_vulpes mortality 133
140 Collins and Kasbohn 2017 No Ovariectomy Yes untreated No Female Equus ferus Feral horse NA Wild Yes Adult NA 4 NA 116 0.8610 0.8510 0.900 NA NA NA Survival rate (%) Annual NA NA NA NA NA NA NA NA 114 36 10 There is also male data but they used a lot of different methods, mainly vasectomy and chemical castration, and data is not split according to surgery type NA NA Equus_ferus mortality 134
141 Urfer et al 2020 No Castration Yes Intact (no surgery) No Male Canis lupus Dogs NA Various No Various NA NA NA 117 15.0000 15.2000 14.100 NA NA NA Median survival time Years Confidence interval (calcualted SD) 17.598000 16.530000 20.090000 NA NA NA NA 2115 8567 1551 Calculated SD looks high? Another MSL from age 5 years is provided by not sure of the sample size included NA NA Canis_lupus longevity 135
142 Urfer et al 2020 No Ovariectomy Yes Intact (no surgery) No Male Canis lupus Dogs NA Various No Various NA NA NA 118 14.1000 15.8000 15.000 NA NA NA Median survival time Years Confidence interval (calcualted SD) 20.090000 16.670000 17.598000 NA NA NA NA 1551 8711 2115 Calculated SD looks high? Another MSL from age 5 years is provided by not sure of the sample size included NA NA Canis_lupus longevity 136
143 Ossewaarde et al 2005 No Hysterectomy No Intact (no surgery) No Female Homo sapiens Humans NA NA No Various NA NA NA 119 0.7825 0.8197 NA NA NA NA Survival rate (%) Mean 17 years NA NA NA NA NA NA NA NA 10087 743 NA Taken from number of cases of mortality across the follow-up period (Table 3) NA NA Homo_sapiens mortality 137
144 Ossewaarde et al 2005 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No Various NA NA NA 119 0.7825 0.8139 NA NA NA NA Survival rate (%) Mean 17 years NA NA NA NA NA NA NA NA 10087 865 NA Taken from number of cases of mortality across the follow-up period (Table 3) NA NA Homo_sapiens mortality 138
145 Hotchkiss 1995 Yes Ovariectomy Yes Sham surgery Yes Female Rattus norvegicus Rats Sprague-Dawley Laboratory No 90 days Adult 4 NA 120 0.3330 0.8330 NA NA NA NA Survival rate (%) to 630 days NA NA NA NA NA NA NA NA 12 12 NA Survival to 630 days. Animals that presented with subquaneous tumors had these surgically removed. NA NA Rattus_norvegicus mortality 139
146 Rocca et al 2006 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No Under 45 years old Adult 4 NA 121 0.8380 0.7340 NA NA NA NA Survival rate (%) Not sure, but total follow up years is provided in tables NA NA NA NA NA NA NA NA 1417 124 NA Data from Table 1 and includes all individuals in that bracket NA NA Homo_sapiens mortality 140
147 Rocca et al 2006 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No NA Adult 4 NA 122 0.6280 0.6910 NA NA NA NA Survival rate (%) Not sure, but total follow up years is provided in tables NA NA NA NA NA NA NA NA 645 243 NA Data from Table 1 and includes all individuals in that bracket NA NA Homo_sapiens mortality 141
148 Rocca et al 2006 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No NA Adult 4 NA 123 0.5050 0.5530 NA NA NA NA Survival rate (%) Not sure, but total follow up years is provided in tables NA NA NA NA NA NA NA NA 321 170 NA Data from Table 1 and includes all individuals in that bracket NA NA Homo_sapiens mortality 142
149 Howard et al 2005 No Hysterectomy No Intact (no surgery) No Female Homo sapiens Humans NA NA No NA Adult 4 NA 124 0.9790 0.9770 NA NA NA NA Survival rate (%) NA NA NA NA NA NA NA NA NA 52976 18687 NA Total sample size split between groups is shown in “age at screening”, which equates to the total sample size given at start of results. Calculated mortality by adding all causes together. Not sure have calculated this correctly or why it differs so dramatically from % annual that is given NA NA Homo_sapiens mortality 143
150 Howard et al 2005 No Ovariectomy Yes Intact (no surgery) No Female Homo sapiens Humans NA NA No NA Adult 4 NA 124 0.9790 0.9760 NA NA NA NA Survival rate (%) NA NA NA NA NA NA NA NA NA 52976 18251 NA Total sample size split between groups is shown in “age at screening”, which equates to the total sample size given at start of results. Calculated mortality by adding all causes together. Not sure have calculated this correctly or why it differs so dramatically from % annual that is given NA NA Homo_sapiens mortality 144
151 Phelan 1995 Yes Ovariectomy Yes Sham surgery Yes Female Mus musculus Mice Swiss Laboratory No Weaning Weaning 2 NA 125 0.4100 0.6200 NA NA NA NA Survival rate (%) To 800 days NA NA NA NA NA NA NA NA 30 30 NA Animals were maintained on a 90% of adlibitum diet. This was a control group for a sepeate CR study and they state stopped the animals getting fat. NA NA Mus_musculus mortality 145
152 Manson et al 2013 No Hysterectomy No Intact (no surgery) No Female Homo sapiens Humans NA NA No Various Adult 4 NA 126 0.9706 0.9449 NA NA NA NA Survival rate (%) 17 years NA NA NA NA NA NA NA NA 8102 5429 NA The control and hysterectomy data is taken from the placebo of two parrellel studies run by the WHI. Women in both studies were matched for age and various variables, although some differences between the cohorts were present as would be typical. NA NA Homo_sapiens mortality 146
153 Deleuze et al 2021 No Tubectomy No Intact (no surgery) No Female Macaca fascicularis Long-tailed Macaques NA NA Yes Adult (most) and a few subadult NA 4 NA 127 0.8600 0.8700 NA NA NA NA Survival rate (%) 3 years NA NA NA NA NA NA NA NA 22 39 NA 2017-2018 cohort. Authors sent me additional data for control female animals that had been marked, and were tracked over the same time period from the same population. NA NA Macaca_fascicularis mortality 147
154 Deleuze et al 2021 No Tubectomy No Intact (no surgery) No Female Macaca fascicularis Long-tailed Macaques NA NA Yes Adult (most) and a few subadult NA 4 NA 128 0.9300 0.9500 NA NA NA NA Survival rate (%) Annual NA NA NA NA NA NA NA NA 41 43 NA 2018-2019 cohort. Authors sent me additional data for control female animals that had been marked, and were tracked over the same time period from the same population. NA NA Macaca_fascicularis mortality 148
155 Deleuze et al 2021 No Tubectomy No Intact (no surgery) No Female Macaca fascicularis Long-tailed Macaques NA NA Yes Adult (most) and a few subadult NA 4 NA 129 0.9500 0.9800 NA NA NA NA Survival rate (%) Annual NA NA NA NA NA NA NA NA 134 45 NA 2019-2020 cohort. Authors sent me additional data for control female animals that had been marked, and were tracked over the same time period from the same population. NA NA Macaca_fascicularis mortality 149
156 Wang et al 2021 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice C57BL6 NA No 8 months Adult 4 NA 130 933.5000 938.5000 NA NA NA NA Median NA SD 129.000000 117.000000 NA NA NA NA NA 22 22 NA Extended figure 3I NA NA Mus_musculus longevity 150
157 Wang et al 2021 Yes Castration Yes Sham surgery Yes Male Mus musculus Mice NA NA No 18 months Adult 4 NA 131 974.0000 959.0000 NA NA NA NA Median NA SD 95.000000 93.000000 NA NA NA NA NA 19 19 NA Fig 6q Animals had been injected with a control shRNA NA NA Mus_musculus longevity 151
158 Tidiere 2016 No Various NA Intact (no surgery) No Female Varecia rubra Red ruffed lemur NA Zoo No Unknown Unknown NA NA 132 15.6500 19.8400 16.180 NA NA NA Mean NA SD 12.454792 10.210810 13.436925 NA NA NA NA 689 67 927 Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species NA NA Varecia_rubra longevity 152
159 Tidiere 2016 No Various NA Intact (no surgery) No Male Varecia rubra Red ruffed lemur NA Zoo No Unknown Unknown NA NA 133 16.1800 19.4000 15.650 NA NA NA Mean NA SD 13.436925 11.495374 12.454792 NA NA NA NA 927 38 689 Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species NA NA Varecia_rubra longevity 153
160 Tidiere 2016 No Various NA Intact (no surgery) No Female Varecia variegata Black and white ruffed lemur NA Zoo No Unknown Unknown NA NA 134 13.9500 18.0300 13.820 NA NA NA Mean NA SD 13.122827 12.489796 14.485185 NA NA NA NA 1542 36 1999 Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species NA NA Varecia_variegata longevity 154
161 Tidiere 2016 No Various NA Intact (no surgery) No Male Varecia variegata Black and white ruffed lemur NA Zoo No Unknown Unknown NA NA 134 13.8200 15.8600 13.950 NA NA NA Mean NA SD 14.485185 12.320698 13.122827 NA NA NA NA 1999 37 1542 Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species NA NA Varecia_variegata longevity 155
162 Larsen1969 Yes Gonadectomy Yes Intact (no surgery) No Female Lamperta fluviatilis River Lamprey NA Lab but wild caught No Prior to sexual maturity - Jan NA 2 NA 135 0.1000 0.3000 NA NA NA NA Survival rate (%) May (after spawning) NA NA NA NA NA NA NA NA 10 10 10 Data extracted from Figures 6D in Larsen 1973 (thesis) and the published abstract. Have calculated survival rate compared to when there is only one control animal alive so we can calculate a log-response ratio. Data is given as the number of gonadectomized animals that survived past the die-off. From figures 3 and 4 of the thesis there is no gonadectomized animal that dies over April when the last of the control males and females died, so we can be confident that the proportion of alive and dead of control and gonadectomized is correct. NA NA Lamperta_fluviatilis mortality 156
163 Larsen1969 Yes Gonadectomy Yes Intact (no surgery) No Male Lamperta fluviatilis River Lamprey NA Lab but wild caught No Prior to sexual maturity - Jan NA 2 NA 136 0.1000 0.2700 NA NA NA NA Survival rate (%) May (after spawning) NA NA NA NA NA NA NA NA 10 11 10 Data extracted from Figures 6D in Larsen 1973 (thesis) and the published abstract. Have calculated survival rate compared to when there is only one control animal alive so we can calculate a log-response ratio. Data is given as the number of gonadectomized animals that survived past the die-off. From figures 3 and 4 of the thesis there is no gonadectomized animal that dies over April when the last of the control males and females died, so we can be confident that the proportion of alive and dead of control and gonadectomized is correct NA NA Lamperta_fluviatilis mortality 157
164 Larsen 1973 Yes Gonadectomy Yes Intact (no surgery) No Female Lamperta fluviatilis River Lamprey NA Lab but wild caught No Prior to sexual maturity - Either Jan or October prior year NA 2 NA 137 0.0600 0.2500 NA NA NA NA Survival rate (%) May (after spawning) NA NA NA NA NA NA NA NA 17 20 50 Data extracted from Figures 6E in Lrsden 1973 (thesis). Sample sizes at the start are in Table 11. Have calculated survival rate compared to when there is only one control animal alive so we can calculate a log-response ratio. Data is given as the number of gonadectomized animals that survived past the die-off. From figures 3 and 4 of the thesis there is no gonadectomized animal that dies over April when the last of the control males and females died, so we can be confident that the proportion of alive and dead of control and gonadectomized is correct NA NA Lamperta_fluviatilis mortality 158
165 Larsen 1973 Yes Gonadectomy Yes Intact (no surgery) No Male Lamperta fluviatilis River Lamprey NA Lab but wild caught No Prior to sexual maturity - Either Jan or October prior year NA 2 NA 138 0.0200 0.2500 NA NA NA NA Survival rate (%) May (after spawning) NA NA NA NA NA NA NA NA 50 20 17 Data extracted from Figures 6E in Lrsden 1973 (thesis). Sample sizes at the start are in Table 12, pooled for the two treatment times. Sample size for the controls comes from fig 4 where heart weight is given just for the same year cohort and sample.sizes are shown. It is started that they have studied approximately 200 animals over the 4 years and never seen a control live much past spawning but this gives a definitive value for that year. Have calculated survival rate compared to when there is only one control animal alive so we can calculate a log-response ratio. Data is given as the number of gonadectomized animals that survived past the die-off. From figures 3 and 4 of the thesis there is no gonadectomized animal that dies over April when the last of the control males and females died, so we can be confident that the proportion of alive and dead of control and gonadectomized is correct NA NA Lamperta_fluviatilis mortality 159

Calculating effect size for the main data

# let's get CVs

dat %>%
    group_by(Study) %>%
    summarise(cv2_cont = mean((Error_control_SD/Control_lifespan_variable)^2, na.rm = T),
        cv2_trt = mean((Error_experimental_SD/Treatment_lifespan_variable)^2, na.rm = T),
        cv2_opst = mean((Error_opposite_sex_SD/Opposite_sex_lifespan_variable)^2,
            na.rm = T), n_cont = mean(Sample_size_control, na.rm = T), n_trt = mean(Sample_size_sterilization,
            na.rm = T), n_opst = mean(Sample_size_opposite_sex, na.rm = T)) %>%
    ungroup() %>%
    summarise(cv2_cont = weighted.mean(cv2_cont, n_cont, na.rm = T), cv2_trt = weighted.mean(cv2_trt,
        n_trt, na.rm = T), cv2_opst = weighted.mean(cv2_opst, n_opst, na.rm = T)) ->
    cvs

# lnRR using CV
dat$yi <- ifelse(effect_type == "longevity", lnrrm(dat$Treatment_lifespan_variable,
    dat$Control_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_control,
    cvs[["cv2_trt"]], cvs[["cv2_cont"]])[[1]], lnrrp(dat$Treatment_lifespan_variable,
    dat$Control_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_control)[[1]])

dat$vi <- ifelse(effect_type == "longevity", lnrrm(dat$Treatment_lifespan_variable,
    dat$Control_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_control,
    cvs[["cv2_trt"]], cvs[["cv2_cont"]])[[2]], lnrrp(dat$Treatment_lifespan_variable,
    dat$Control_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_control)[[2]])

# getting effect size for the long format we create a longer data format

dat1 <- dat
dat2 <- dat

dat1$yi <- ifelse(effect_type == "longevity", lnrrm(dat$Control_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_control, dat$Sample_size_opposite_sex,
    cvs[["cv2_cont"]], cvs[["cv2_opst"]])[[1]], lnrrp(dat$Control_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_control, dat$Sample_size_opposite_sex)[[1]])

dat1$vi <- ifelse(effect_type == "longevity", lnrrm(dat$Control_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_control, dat$Sample_size_opposite_sex,
    cvs[["cv2_cont"]], cvs[["cv2_opst"]])[[2]], lnrrp(dat$Control_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_control, dat$Sample_size_opposite_sex)[[2]])

# here we create CM/F or CF/M
dat2$yi <- ifelse(effect_type == "longevity", lnrrm(dat$Treatment_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_opposite_sex,
    cvs[["cv2_trt"]], cvs[["cv2_opst"]])[[1]], lnrrp(dat$Treatment_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_opposite_sex)[[1]])

dat2$vi <- ifelse(effect_type == "longevity", lnrrm(dat$Treatment_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_opposite_sex,
    cvs[["cv2_trt"]], cvs[["cv2_opst"]])[[2]], lnrrp(dat$Treatment_lifespan_variable,
    dat$Opposite_sex_lifespan_variable, dat$Sample_size_sterilization, dat$Sample_size_opposite_sex)[[2]])




# putting two data frames
dat_long <- rbind(dat1, dat2)

# putt 2 new column

dat_long$Obs <- factor(1:dim(dat_long)[[1]])
dat_long$Comp_type <- as.factor(rep(c("both_normal", "one_castrated"), each = dim(dat_long)[[1]]/2))

dat_long$Comp_type_Sex <- paste(dat_long$Comp_type, dat_long$Sex, sep = "_")

dat_long$yi <- ifelse(dat_long$Comp_type_Sex == "one_castrated_Female" | dat_long$Comp_type_Sex ==
    "both_normal_Female", -1 * dat_long$yi, dat_long$yi)

dat_long %>%
    filter(!is.na(yi), !is.na(vi)) -> dat_long

dim(dat_long)
## [1] 170  48

Rodent data

This data is a subset of the main data only including data from rodents. This is used to test the effect of sterilization/castration on life stage (for these species, we were able to get more fine scale data). This dataset has two more variables: 1) Age_at_treatment (age in days when treatment was applied) and 2) Day_to_maturity (age in days when animals become mature). As also mentioned below, the analyses associated with this data set is post-hoc (not planned before data collection).

# sdat <- read_csv(here('data', 'data2_15022022.csv'), na = c('', 'NA'))
rdat <- read_csv(here("data", "data3_05052022.csv"), na = c("", "NA"))

rdat <- rdat %>%
    filter(is.na(Treatment_lifespan_variable) == FALSE) %>%
    # filter(Type_of_sterilization != 'Vasectomy') %>%
mutate_if(is.character, as.factor)

dim(rdat)
## [1] 40 39
# separating two kinds

effect_type_r <- ifelse(str_detect(rdat$Lifespan_parameter, "Me"), "longevity", "mortality")


# effect-level ID dat$Species_Latin <- gsub('Macaca Fascicularis', 'Macaca
# fascicularis', dat$Species_Latin) #fix a typo in species name
rdat$Effect_ID <- 1:nrow(rdat)
rdat$Phylogeny <- sub(" ", "_", rdat$Species_Latin)
rdat$Effect_type <- effect_type_r

# key variables
names(rdat)
##  [1] "Order_extracted"                  "Study"                           
##  [3] "Controlled_treatments"            "Type_of_sterilization"           
##  [5] "Gonads_removed"                   "Control_treatment"               
##  [7] "Sex"                              "Day_to_matuarity"                
##  [9] "Species_Latin"                    "Species"                         
## [11] "Strain"                           "Environment"                     
## [13] "Wild_or_semi_wild"                "Age_at_treatment"                
## [15] "Age_at_treatment_continuous"      "Maturity_at_treatment"           
## [17] "Maturity_at_treatment_ordinal"    "Duration_of_treatment"           
## [19] "Shared_control"                   "Control_lifespan_variable"       
## [21] "Treatment_lifespan_variable"      "Opposite_sex_lifespan_variable"  
## [23] "Error_control"                    "Error_experimental"              
## [25] "Error_opposite_sex"               "Lifespan_parameter"              
## [27] "Lifespan_unit"                    "Error_unit"                      
## [29] "Error_control_SD"                 "Error_experimental_SD"           
## [31] "Error_opposite_sex_SD"            "Coefficent_difference_to_control"
## [33] "Lower_interval"                   "Upper_interval"                  
## [35] "Coefficent_unit"                  "Sample_size_control"             
## [37] "Sample_size_sterilization"        "Sample_size_opposite_sex"        
## [39] "Notes"                            "Effect_ID"                       
## [41] "Phylogeny"                        "Effect_type"
unique(rdat$Species_Latin)
## [1] Mus musculus         Rattus norvegicus    Mesocricetus auratus
## Levels: Mesocricetus auratus Mus musculus Rattus norvegicus
kable(rdat, "html") %>%
    kable_styling("striped", position = "left") %>%
    scroll_box(width = "100%", height = "250px")
Order_extracted Study Controlled_treatments Type_of_sterilization Gonads_removed Control_treatment Sex Day_to_matuarity Species_Latin Species Strain Environment Wild_or_semi_wild Age_at_treatment Age_at_treatment_continuous Maturity_at_treatment Maturity_at_treatment_ordinal Duration_of_treatment Shared_control Control_lifespan_variable Treatment_lifespan_variable Opposite_sex_lifespan_variable Error_control Error_experimental Error_opposite_sex Lifespan_parameter Lifespan_unit Error_unit Error_control_SD Error_experimental_SD Error_opposite_sex_SD Coefficent_difference_to_control Lower_interval Upper_interval Coefficent_unit Sample_size_control Sample_size_sterilization Sample_size_opposite_sex Notes Effect_ID Phylogeny Effect_type
13 Zakeri et al 2019 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice NMRI Laboratory No 10 months 304.0 Adult (old) 4 NA 11 0.360 0.500 NA NA NA NA Survival rate (%) 11.5 months NA NA NA NA NA NA NA NA 16 16 NA Its the sterilization treatment that is compared to two different types of control in this study 1 Mus_musculus mortality
14 Zakeri et al 2019 Yes Ovariectomy Yes Sham surgery Female 42 Mus musculus Mice NMRI Laboratory No 10 months 304.0 Adult (old) 4 NA 11 0.330 0.500 NA NA NA NA Survival rate (%) 11.5 months NA NA NA NA NA NA NA NA 16 16 NA Its the sterilization treatment that is compared to two different types of control in this study 2 Mus_musculus mortality
15 Dorner 1973 Yes Castration Yes Untreated Male 70 Rattus norvegicus Rats Sprague-Dawley-Stammes Laboratory No Day after birth 2.0 Birth 1 NA 12 570.000 696.000 NA 122.00 132.00 NA Mean days Standard Deviation 122.00000 132.00000 NA NA NA NA NA 12 8 NA NA 3 Rattus_norvegicus longevity
16 Asdell et al 1967 Yes Ovariectomy Yes Intact (no surgery) Female 90 Rattus norvegicus Rats Cornell Nutrion colony Laboratory No Between 38-42 days 40.0 Puberty 3 NA 13 742.000 669.000 615 24.00 26.00 21.00 Mean days S.E.M 169.70563 183.84776 148.49242 NA NA NA NA 50 50 50 Also data for mated females but havent included as would be a different environment (e.g. With males) 4 Rattus_norvegicus longevity
17 Asdell et al 1967 Yes Castration Yes Intact (no surgery) Male 70 Rattus norvegicus Rats Cornell Nutrion colony Laboratory No Between 39-42 days 41.0 Puberty 3 NA 14 615.000 651.000 742 21.00 26.00 24.00 Mean days S.E.M 148.49242 183.84776 169.70563 NA NA NA NA 50 50 50 NA 5 Rattus_norvegicus longevity
18 Asdell and Joshi 1976 Yes Ovariectomy Yes Intact (no surgery) Female 90 Rattus norvegicus Rats Manor-Wistar Laboratory No 45 days old 45.0 Puberty 3 NA 15 654.000 844.000 661 24.00 24.00 30.00 Mean days S.E.M 169.70563 169.70563 212.13203 NA NA NA NA 50 50 50 NA 6 Rattus_norvegicus longevity
19 Asdell and Joshi 1976 Yes Castration Yes Intact (no surgery) Male 70 Rattus norvegicus Rats Manor-Wistar Laboratory No 45 days old 45.0 Puberty 3 NA 16 661.000 775.000 654 30.00 30.00 24.00 Mean days S.E.M 212.13203 212.13203 169.70563 NA NA NA NA 50 50 50 NA 7 Rattus_norvegicus longevity
20 Arriola Apelo et al 2020 Yes Castration Yes Sham surgery Male 42 Mus musculus Mice C57BL6 Laboratory No 21 days 21.0 Prepuberty 2 NA 17 1006.000 978.000 853 34.30 37.45 26.25 Median days S.E.M 145.52258 183.46678 136.39900 NA NA NA NA 18 24 27 NA 8 Mus_musculus longevity
21 Arriola Apelo et al 2020 Yes Ovariectomy Yes Sham surgery Female 42 Mus musculus Mice C57BL6 Laboratory No 21 days 21.0 Prepuberty 2 NA 18 853.000 916.000 1006 26.25 49.36 34.30 Median days S.E.M 136.39900 231.51892 145.52258 NA NA NA NA 27 22 18 NA 9 Mus_musculus longevity
22 Benedusi et al 2015 Yes Castration Yes Sham surgery Male 42 Mus musculus Mice C57BL76 (ERE-LucRepTOP™) Laboratory No 5 Months 152.0 Adult (old) 4 NA 19 0.100 0.350 NA NA NA NA Survival rate (%) 15 Months NA NA NA NA NA NA NA NA 20 20 NA NA 10 Mus_musculus mortality
24 Cargil et al 2003 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice CBA Laboratory No 21 days 21.0 Prepuberty 2 NA 21 599.290 578.640 NA 30.45 35.60 NA Median Days S.E.M 158.22284 178.00000 NA NA NA NA NA 27 25 NA Extracted median lifespan from data in figure and calculated SD 11 Mus_musculus longevity
31 Drori and Folman 1976 Yes Castration Yes Intact (no surgery) Male 42 Rattus norvegicus Rats Albino Laboratory No 38-44 days. Stated as prepuberty 41.0 Prepuberty 2 NA 27 727.000 817.000 849 26.00 32.00 26.00 Mean Days S.E.M 182.00000 224.00000 182.00000 NA NA NA NA 49 49 49 Authors state that they castrated animals shortly before puberty, so coded as prepuberty 12 Rattus_norvegicus longevity
32 Garratt et al 2021 Yes Castration Yes Sham surgery Male 70 Mus musculus Mice C57BL6 Laboratory No 7-8 weeks 53.0 Adult (young) 4 NA 28 952.000 960.000 956 20.70 36.40 28.50 Median Days S.E.M 117.09688 218.40000 156.10093 NA NA NA NA 32 36 30 NA 13 Mus_musculus longevity
42 Holland et al 1977 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice RFM Laboratory No 3-4 weeks 25.0 Prepuberty 2 NA 34 638.000 628.000 NA 16.00 16.00 NA Mean Days S.E.M 167.04490 162.38226 NA NA NA NA NA 109 103 NA Just used data from non-irradiated group. Lots of pathology data 14 Mus_musculus longevity
45 Sichuk 1965 Yes Castration Yes Sham surgery Male 48 Mesocricetus auratus Hampsters Syrian Hampsters Laboratory No 6 weeks 42.0 Puberty 3 NA 37 612.000 578.000 589 NA NA NA Mean Days NA 222.91000 151.30000 222.95000 NA NA NA NA 92 90 94 Use - SD from Kirkman & Yau;Error not provided. Mean lifespan comes from the lifespan of both those with thrumobis and those that do not have it. Calculated the mean of these two values weighed against the sample size of each group 15 Mesocricetus_auratus longevity
46 Sichuk 1965 Yes Ovariectomy Yes Sham surgery Female 48 Mesocricetus auratus Hampsters Syrian Hampsters Laboratory No 6 weeks 42.0 Puberty 3 NA 38 589.000 586.000 612 NA NA NA Mean Days NA 222.95000 155.44000 222.91000 NA NA NA NA 94 92 92 Use - SD from Kirkman & Yau;Error not provided. Mean lifespan comes from the lifespan of both those with thrumobis and those that do not have it. Calculated the mean of these two values weighed against the sample size of each group 16 Mesocricetus_auratus longevity
51 Slonaker 1930 Yes Castration Yes Intact (no surgery) Male 70 Rattus norvegicus Rats Albino Laboratory No 44 days. Testes had decended by the operation 44.0 Adult (young) 4 NA 43 788.000 770.000 863 22.25 28.00 27.69 Mean Days Probable error 32.98740 41.51223 41.05263 NA NA NA NA 10 8 17 NA 17 Rattus_norvegicus longevity
52 Slonaker 1930 Yes Vasectomy No Intact (no surgery) Male 70 Rattus norvegicus Rats Albino Laboratory No 46.5 days. Testes had decended by the operation 47.0 Adult (young) 4 NA 43 788.000 685.000 863 22.25 39.72 27.69 Mean Days Probable error 32.98740 58.88807 41.05263 NA NA NA NA 10 12 17 Standard deviation calculated from probable error as P.E./0.6745. Calculation derived from P.E. Wikipedia page 18 Rattus_norvegicus longevity
53 Slonaker 1930 Yes Ovariectomy Yes Intact (no surgery) Female 90 Rattus norvegicus Rats Albino Laboratory No 27.5 days 28.0 Prepuberty 2 NA 44 863.000 755.000 788 27.69 22.15 22.25 Mean Days Probable error 41.05263 32.83914 32.98740 NA NA NA NA 17 37 10 NA 19 Rattus_norvegicus longevity
54 Slonaker 1930 Yes Hysterectomy No Intact (no surgery) Female 90 Rattus norvegicus Rats Albino Laboratory No 29 days 29.0 Prepuberty 2 NA 44 863.000 855.000 788 27.69 12.67 22.25 Mean Days Probable error 41.05263 18.78428 32.98740 NA NA NA NA 17 60 10 NA 20 Rattus_norvegicus longevity
55 Storer et al 1982 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice RFM Laboratory No 50 days 50.0 Adult (young) 4 NA 45 643.400 662.200 NA 5.91 7.31 NA Mean Days S.E.M. 161.31161 134.19376 NA NA NA NA NA 745 337 NA Non-irradiated controls from an irradiation experiment 21 Mus_musculus longevity
56 Storer et al 1982 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice Balb/c Laboratory No 50 days 50.0 Adult (young) 4 NA 46 762.900 795.500 NA 6.21 10.95 NA Mean Days S.E.M. 179.01611 197.70740 NA NA NA NA NA 831 326 NA Non-irradiated controls from an irradiation experiment 22 Mus_musculus longevity
61 Mason et al 2009 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice CBA Laboratory No 21 days 21.0 Prepuberty 2 NA 51 727.600 715.000 NA 15.90 20.00 NA Mean Days S.E.M 89.94398 101.98039 NA NA NA NA NA 32 26 NA Worked out sample size from fig 4 This and the other entry for this paper have two different control comparisons 23 Mus_musculus longevity
62 Mason et al 2009 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice CBA Laboratory No 21 days 21.0 Prepuberty 2 NA 51 725.600 715.000 NA 20.40 20.00 NA Mean Days S.E.M 117.18908 101.98039 NA NA NA NA NA 33 26 NA Worked out sample size from fig 4 24 Mus_musculus longevity
63 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Male 70 Rattus norvegicus Rats Lewis Laboratory No Birth 1.0 Birth 1 NA 52 454.000 521.000 484 18.00 27.00 19.00 Mean Days S.E.M 108.00000 174.98000 123.13407 NA NA NA NA 36 42 42 NA 25 Rattus_norvegicus longevity
64 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Male 70 Rattus norvegicus Rats Lewis Laboratory No 22-28 days 25.0 Prepuberty 2 NA 52 454.000 488.000 484 18.00 28.00 19.00 Mean Days S.E.M 108.00000 165.65023 123.13407 NA NA NA NA 36 35 42 NA 26 Rattus_norvegicus longevity
65 Talbert and Hamilton 1965 Yes Castration Yes Sham surgery Male 70 Rattus norvegicus Rats Lewis Laboratory No 100 days 100.0 Adult (young) 4 NA 52 454.000 439.000 484 18.00 25.00 19.00 Mean Days S.E.M 108.00000 119.89579 123.13407 NA NA NA NA 36 23 42 NA 27 Rattus_norvegicus longevity
66 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Lewis Laboratory No Birth 1.0 Birth 1 NA 53 484.000 574.000 454 19.00 33.00 18.00 Mean Days S.E.M 123.13407 183.73622 108.00000 NA NA NA NA 42 31 36 NA 28 Rattus_norvegicus longevity
67 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Lewis Laboratory No 22-28 days 25.0 Prepuberty 2 NA 53 484.000 480.000 454 19.00 44.00 18.00 Mean Days S.E.M 123.13407 206.37829 108.00000 NA NA NA NA 42 22 36 NA 29 Rattus_norvegicus longevity
68 Talbert and Hamilton 1965 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Lewis Laboratory No 100 days 100.0 Adult (young) 4 NA 53 484.000 515.000 454 19.00 41.00 18.00 Mean Days S.E.M 123.13407 183.35757 108.00000 NA NA NA NA 42 20 36 NA 30 Rattus_norvegicus longevity
94 Muhlock 1959 Yes Castration Yes Intact (no surgery) Male 42 Mus musculus Mice DBA Laboratory No Weaning (1month) 30.0 Prepuberty 2 NA 75 578.000 595.000 667 10.12 11.44 9.57 Mean days S.E.M 78.38918 102.32247 88.74853 NA NA NA NA 60 80 86 Extracted data and calculated mean and SE from graph 31 Mus_musculus longevity
95 Muhlock 1959 Yes Ovariectomy Yes Intact (no surgery) Female 42 Mus musculus Mice DBA Laboratory No Weaning (1 month) 30.0 Prepuberty 2 NA 76 667.000 627.000 578 9.57 10.67 10.12 Mean days S.E.M 88.74853 87.98707 78.38918 NA NA NA NA 86 68 60 Extracted data and calculated mean and SE from graph 32 Mus_musculus longevity
99 Iwasa et al 2018 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Sprague-Dawley Laboratory No 23 weeks 161.0 Late adult 4 NA 80 0.430 0.860 NA NA NA NA Survival rate (%) ~85 weeks. NA NA NA NA NA NA NA NA 8 7 NA Calculated from a partial survival curve. Looked at when 50% of the control group died and then the number alive in the treatment group at this point 33 Rattus_norvegicus mortality
114 Cheng 2019 Yes Castration Yes Sham surgery Male 42 Mus musculus Mice UMHet3 Laboratory No Under 30 days 17.5 Prepuberty 2 NA 91 0.810 0.970 NA NA NA NA Survival rate (%) 500 days NA NA NA NA NA NA NA NA 238 238 NA NA 34 Mus_musculus mortality
132 Sato et al 1997 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Sprague-Dawley Laboratory No 9 months 274.0 Adult 4 NA 109 0.800 0.971 NA NA NA NA Survival rate (%) 6 months NA NA NA NA NA NA NA NA 35 35 NA NA 35 Rattus_norvegicus mortality
135 Pullinger and Head 1964 Yes Ovariectomy Yes untreated Female 42 Mus musculus Mice C3Hf Laboratory No 56-111 days of age 84.0 Adult 4 NA 112 0.370 0.230 NA NA NA NA Survival rate (%) to 30 months NA NA NA NA NA NA NA NA 114 40 NA “average lifespan” in months is also provided but no error. Calculated the percentage surviving to 30 months as dead ranges are provided in 6 brackets and this is the closest to the median for control females. This group is control virgin females (OVX data was shared and compared to breeding females in the other female comparison for this paper but I removed it because I dont think social environment was comparable) 36 Mus_musculus mortality
145 Hotchkiss 1995 Yes Ovariectomy Yes Sham surgery Female 90 Rattus norvegicus Rats Sprague-Dawley Laboratory No 90 days 90.0 Adult 4 NA 120 0.333 0.833 NA NA NA NA Survival rate (%) to 630 days NA NA NA NA NA NA NA NA 12 12 NA Survival to 630 days. Animals that presented with subquaneous tumors had these surgically removed. 37 Rattus_norvegicus mortality
151 Phelan 1995 Yes Ovariectomy Yes Sham surgery Female 42 Mus musculus Mice Swiss Laboratory No Weaning 25.0 Weaning 2 NA 125 0.410 0.620 NA NA NA NA Survival rate (%) To 800 days NA NA NA NA NA NA NA NA 30 30 NA Animals were maintained on a 90% of adlibitum diet. This was a control group for a sepeate CR study and they state stopped the animals getting fat. 38 Mus_musculus mortality
156 Wang et al 2021 Yes Castration Yes Sham surgery Male 42 Mus musculus Mice C57BL6 NA No 8 months 243.0 Adult 4 NA 130 933.500 938.500 NA NA NA NA Median NA SD 129.00000 117.00000 NA NA NA NA NA 22 22 NA Extended figure 3I 39 Mus_musculus longevity
157 Wang et al 2021 Yes Castration Yes Sham surgery Male 42 Mus musculus Mice NA NA No 18 months 548.0 Adult 4 NA 131 974.000 959.000 NA NA NA NA Median NA SD 95.00000 93.00000 NA NA NA NA NA 19 19 NA Fig 6q Animals had been injected with a control shRNA 40 Mus_musculus longevity

Calculating effect size for the rodent data

# let's get CVs

rdat %>%
    group_by(Study) %>%
    summarise(cv2_cont = mean((Error_control_SD/Control_lifespan_variable)^2, na.rm = T),
        cv2_trt = mean((Error_experimental_SD/Treatment_lifespan_variable)^2, na.rm = T),
        cv2_opst = mean((Error_opposite_sex_SD/Opposite_sex_lifespan_variable)^2,
            na.rm = T), n_cont = mean(Sample_size_control, na.rm = T), n_trt = mean(Sample_size_sterilization,
            na.rm = T), n_opst = mean(Sample_size_opposite_sex, na.rm = T)) %>%
    ungroup() %>%
    summarise(cv2_cont = weighted.mean(cv2_cont, n_cont, na.rm = T), cv2_trt = weighted.mean(cv2_trt,
        n_trt, na.rm = T), cv2_opst = weighted.mean(cv2_opst, n_opst, na.rm = T)) ->
    cvs

# lnRR using CV
rdat$yi <- ifelse(effect_type_r == "longevity", lnrrm(rdat$Treatment_lifespan_variable,
    rdat$Control_lifespan_variable, rdat$Sample_size_sterilization, rdat$Sample_size_control,
    cvs[["cv2_trt"]], cvs[["cv2_cont"]])[[1]], lnrrp(rdat$Treatment_lifespan_variable,
    rdat$Control_lifespan_variable, rdat$Sample_size_sterilization, rdat$Sample_size_control)[[1]])

rdat$vi <- ifelse(effect_type_r == "longevity", lnrrm(rdat$Treatment_lifespan_variable,
    rdat$Control_lifespan_variable, rdat$Sample_size_sterilization, rdat$Sample_size_control,
    cvs[["cv2_trt"]], cvs[["cv2_cont"]])[[2]], lnrrp(rdat$Treatment_lifespan_variable,
    rdat$Control_lifespan_variable, rdat$Sample_size_sterilization, rdat$Sample_size_control)[[2]])

str(rdat)
## tibble [40 × 44] (S3: tbl_df/tbl/data.frame)
##  $ Order_extracted                 : num [1:40] 13 14 15 16 17 18 19 20 21 22 ...
##  $ Study                           : Factor w/ 23 levels "Arriola Apelo et al 2020",..: 23 23 7 3 3 2 2 1 1 4 ...
##  $ Controlled_treatments           : Factor w/ 1 level "Yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Type_of_sterilization           : Factor w/ 4 levels "Castration","Hysterectomy",..: 3 3 1 3 1 3 1 1 3 1 ...
##  $ Gonads_removed                  : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Control_treatment               : Factor w/ 4 levels "Intact (no surgery)",..: 1 2 4 1 1 1 1 2 2 2 ...
##  $ Sex                             : Factor w/ 2 levels "Female","Male": 1 1 2 1 2 1 2 2 1 2 ...
##  $ Day_to_matuarity                : num [1:40] 42 42 70 90 70 90 70 42 42 42 ...
##  $ Species_Latin                   : Factor w/ 3 levels "Mesocricetus auratus",..: 2 2 3 3 3 3 3 2 2 2 ...
##  $ Species                         : Factor w/ 3 levels "Hampsters","Mice",..: 2 2 3 3 3 3 3 2 2 2 ...
##  $ Strain                          : Factor w/ 17 levels "Albino","Balb/c",..: 11 11 14 7 7 10 10 4 4 5 ...
##  $ Environment                     : Factor w/ 1 level "Laboratory": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Wild_or_semi_wild               : Factor w/ 1 level "No": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Age_at_treatment                : Factor w/ 29 levels "10 months","100 days",..: 1 1 25 22 23 12 12 4 4 14 ...
##  $ Age_at_treatment_continuous     : num [1:40] 304 304 2 40 41 45 45 21 21 152 ...
##  $ Maturity_at_treatment           : Factor w/ 8 levels "Adult","Adult (old)",..: 2 2 4 7 7 7 7 6 6 2 ...
##  $ Maturity_at_treatment_ordinal   : num [1:40] 4 4 1 3 3 3 3 2 2 4 ...
##  $ Duration_of_treatment           : logi [1:40] NA NA NA NA NA NA ...
##  $ Shared_control                  : num [1:40] 11 11 12 13 14 15 16 17 18 19 ...
##  $ Control_lifespan_variable       : num [1:40] 0.36 0.33 570 742 615 ...
##  $ Treatment_lifespan_variable     : num [1:40] 0.5 0.5 696 669 651 844 775 978 916 0.35 ...
##  $ Opposite_sex_lifespan_variable  : num [1:40] NA NA NA 615 742 ...
##  $ Error_control                   : num [1:40] NA NA 122 24 21 ...
##  $ Error_experimental              : num [1:40] NA NA 132 26 26 ...
##  $ Error_opposite_sex              : num [1:40] NA NA NA 21 24 ...
##  $ Lifespan_parameter              : Factor w/ 3 levels "Mean","Median",..: 3 3 1 1 1 1 1 2 2 3 ...
##  $ Lifespan_unit                   : Factor w/ 10 levels "~85 weeks.","11.5 months",..: 2 2 6 6 6 6 6 6 6 3 ...
##  $ Error_unit                      : Factor w/ 5 levels "Probable error",..: NA NA 5 2 2 2 2 2 2 NA ...
##  $ Error_control_SD                : num [1:40] NA NA 122 170 148 ...
##  $ Error_experimental_SD           : num [1:40] NA NA 132 184 184 ...
##  $ Error_opposite_sex_SD           : num [1:40] NA NA NA 148 170 ...
##  $ Coefficent_difference_to_control: logi [1:40] NA NA NA NA NA NA ...
##  $ Lower_interval                  : logi [1:40] NA NA NA NA NA NA ...
##  $ Upper_interval                  : logi [1:40] NA NA NA NA NA NA ...
##  $ Coefficent_unit                 : logi [1:40] NA NA NA NA NA NA ...
##  $ Sample_size_control             : num [1:40] 16 16 12 50 50 50 50 18 27 20 ...
##  $ Sample_size_sterilization       : num [1:40] 16 16 8 50 50 50 50 24 22 20 ...
##  $ Sample_size_opposite_sex        : num [1:40] NA NA NA 50 50 50 50 27 18 NA ...
##  $ Notes                           : Factor w/ 17 levels "\"average lifespan\" in months is also provided but no error. Calculated the percentage surviving to 30 months "| __truncated__,..: 10 10 NA 2 NA NA NA NA NA NA ...
##  $ Effect_ID                       : int [1:40] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Phylogeny                       : chr [1:40] "Mus_musculus" "Mus_musculus" "Rattus_norvegicus" "Rattus_norvegicus" ...
##  $ Effect_type                     : chr [1:40] "mortality" "mortality" "longevity" "longevity" ...
##  $ yi                              : num [1:40] 0.1962 0.2455 0.2007 -0.1036 0.0568 ...
##  $ vi                              : num [1:40] 0.03179 0.03383 0.012 0.00232 0.00232 ...

This dataset is a part of the full data and only has data from rodent species.

All-combination data

This data sets is a subset of the main data and this includes only study which has all 4 groups: 1) control females, 2) control males, 3) treated females and 4) treated males.

# sdat <- read_csv(here('data', 'data2_15022022.csv'), na = c('', 'NA'))
sdat <- read_csv(here("data", "data2_19042022.csv"), na = c("", "NA"))
effect_type_s <- ifelse(str_detect(sdat$Lifespan_parameter, "Me"), "longevity", "mortality")


# effect-level ID

sdat$Effect_ID <- 1:nrow(sdat)
sdat$Phylogeny <- sub(" ", "_", sdat$Species_Latin)
sdat$Effect_type <- effect_type_s

kable(sdat, "html") %>%
    kable_styling("striped", position = "left") %>%
    scroll_box(width = "100%", height = "250px")
Order_extracted Study Controlled_treatments Wild_or_semi_wild Type_of_sterilization Gonads_removed Control_treatment Species_Latin Species Strain Environment Age_at_treatment Shared_control Male_control_lifespan_variable Error_male_control_SD Sample_size_male_control Male_sterilization_lifespan_variable Error_male_sterilization_SD Sample_size_male_sterilization Female_control_lifespan_variable Error_female_control_SD Sample_size_female_control Female_sterilization_lifespan_variable Error_female_sterilization_SD Sample_size_female_sterilization Lifespan_parameter Lifespan_unit Notes Effect_ID Phylogeny Effect_type
20 Arriola Apelo et al 2020 Yes No Castration Yes Sham surgery Mus musculus Mice C57BL6 Laboratory 21 days 17 1006.00 145.522576 18 978.00 171.617460 24 853.00 136.399001 27 916.00 203.516494 22 Median days NA 1 Mus_musculus longevity
19 Asdell and Joshi 1976 Yes No Castration Yes Intact (no surgery) Rattus norvegicus Rat Manor-Wistar Laboratory 45 days old 16 661.00 212.132034 50 775.00 212.132034 50 654.00 169.705627 50 844.00 169.705627 50 Mean days NA 2 Rattus_norvegicus longevity
17 Asdell et al 1967 Yes No Castration Yes Intact (no surgery) Rattus norvegicus Rat Cornell Nutrion colony Laboratory Between 38-42 days 14 615.00 148.492424 50 651.00 183.847763 50 742.00 169.705627 50 669.00 183.847763 50 Mean days NA 3 Rattus_norvegicus longevity
115 Bronson 1981 No No Castration Yes Intact (no surgery) Felis catus Cats Various breeds Domestic Various 92 4.97 3.660000 219 7.34 4.290000 265 6.65 5.660000 99 9.11 5.130000 220 Mean Years - for cats surviving to two years old Lifespan of individuals calculated from histograms. Used data from animals that survived after the first year. 4 Felis_catus longevity
117 Bronson 1982 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 94 8.00 5.200000 755 9.90 6.800000 54 7.70 4.400000 224 8.80 6.900000 528 Mean (from those alive after 2) Years Mean lifespan is that of those that are alive from 2 years of age. The authors also provide lifespan from birth, but point out that animals are not usually sterilized until at least 6 months, so this doesnt provide a fair comparison 5 Canis_lupus longevity
72 Hamilton 1965 No No Castration Yes Intact (no surgery) Felis catus Cats Various breeds Domestic Before 1 year 57 3.20 2.741168 65 6.80 4.492661 60 7.70 5.178726 58 9.20 4.656522 28 Mean Years Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. 6 Felis_catus longevity
74 Hamilton 1965 No No Castration Yes Intact (no surgery) Felis catus Cats Various breeds Domestic Before 1 year 59 6.10 4.713343 51 8.50 4.913980 77 7.40 5.091169 50 8.40 4.762825 45 Mean Years Error displayed must be standard error not standard deviation. I initially interpreted the symbol used as standard deviation but actually it must be SEM, and this is what Hamilton usually uses. Otherwise they are abnormally low. 7 Felis_catus longevity
33 Hamilton et al 1969 No No Castration Yes Intact (no surgery) Felis catus Cats Outbred Domestic Various 29 5.30 4.136520 97 8.10 4.820332 201 7.70 4.794163 85 8.20 4.503332 75 Mean Years Pooled data for all ages which is consistent for both castrated and spayed of both sexes. 8 Felis_catus longevity
38 Hamilton et al 1969 No No Castration Yes Intact (no surgery) Felis catus Cats Name breeds Domestic Various, median 6 months 32 4.60 3.500000 25 6.90 4.971428 71 6.20 5.040000 36 8.20 4.723071 34 Mean Years NA 9 Felis_catus longevity
57 Hoffman et al 2018 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 47 10.86 3.327386 915 11.64 2.033618 844 10.86 3.685485 693 12.12 5.766116 921 Mean Years Vetcompass database 10 Canis_lupus longevity
59 Hoffman et al 2018 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 49 8.00 8.556337 14941 9.21 4.241509 11244 7.68 6.018372 7392 9.73 5.599714 19598 Mean Years VMDB - individual data for breeds available in supplementary, but just mean lifespan without error 11 Canis_lupus longevity
76 Huang et al 2017 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 61 9.00 5.941000 839 12.00 3.723000 332 10.00 5.947000 528 12.00 3.938000 607 Median Years Interquartile range Intact, 5.0-13.0; castrated 9.0-14.0 12 Canis_lupus longevity
43 Kirkman and Yau No No Castration Yes Intact (no surgery) Mesocricetus auratus Hampsters Syrian Hampsters Laboratory Unknown - not given 35 632.00 222.910000 629 508.00 151.300000 72 543.00 222.950000 578 391.00 155.440000 31 Mean Days Do not have error presented in paper. The proportion of animals dying in 10 brackets of different ages is presented that could be used (Figs 3 and 4). Upper and low quartiles estimated from figure 3 when number of animals dying in 100 day periods is given. Have used the middle number within this period for the quartile value (e.g. 550-850 for intact males, 350-550 for castrated males) 13 Mesocricetus_auratus longevity
47 Mitchel et al 1999 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 39 131.00 50.029192 1277 128.00 46.058550 291 130.00 51.951131 833 144.00 40.249224 720 Mean Months Used all causes of death. Data collected on the basis of surveys that pet owners filled out about their last pets age at death 14 Canis_lupus longevity
94 Muhlock 1959 Yes No Castration Yes Intact (no surgery) Mus musculus Mouse DBA Laboratory Weaning 75 578.00 78.389183 60 595.00 102.322471 80 667.00 88.748529 86 627.00 87.987074 68 Mean days Extracted data and calculated mean and SE from graph 15 Mus_musculus longevity
105 Oneil et al 2013 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 83 11.99 NA 1464 11.99 NA 1224 11.59 NA 1082 12.39 NA 1304 Mean Years Means calculated from the coefficient change in lifespan in Table 4. Sample size for all was known, SD was estimated 16 Canis_lupus longevity
107 Oneil et al 2015 No No Castration Yes Intact (no surgery) Felis catus Cats Various breeds Domestic Various 85 12.81 NA 704 14.71 NA 1296 14.61 NA 707 15.21 NA 1302 Mean Years Means calculated from the coefficient change in lifespan in Table 4. Sample size for each sex was estimated on the basis of the total sample size and the percentage that were known to be sterilized in both sexes, SD was estimated 17 Felis_catus longevity
30 Reedy et al 2016 Yes Yes Castration Yes Sham surgery Anolis sagrei Anole lizards NA Wild Unknown - wild caught 26 0.55 NA 60 0.28 NA 60 0.25 NA 110 0.21 NA 110 Survival rate (%) 10 weeks (of breeding season) NA 18 Anolis_sagrei mortality
45 Sichuk 1965 Yes No Castration Yes Sham surgery Mesocricetus auratus Hampsters Syrian Hampsters Laboratory 6 weeks 37 612.00 222.910000 92 578.00 151.300000 90 589.00 222.950000 94 586.00 155.440000 92 Mean Days Use - SD from Kirkman & Yau;Error not provided. Mean lifespan comes from the lifespan of both those with thrumobis and those that do not have it. Calculated the mean of these two values weighed against the sample size of each group 19 Mesocricetus_auratus longevity
51 Slonaker 1929 Yes No Castration Yes Intact (no surgery) Rattus norvegicus Rat Albino Laboratory 44 days 43 788.00 32.987398 10 770.00 41.512231 8 863.00 41.052632 17 855.00 18.784285 60 Mean Days Hyesterectomy female comparison 20 Rattus_norvegicus longevity
51 Slonaker 1929 Yes No Castration Yes Intact (no surgery) Rattus norvegicus Rat Albino Laboratory 44 days 43 788.00 32.987398 10 770.00 41.512231 8 863.00 41.052632 17 755.00 32.839140 37 Mean Days Ovariectomy female comparison 21 Rattus_norvegicus longevity
63 Talbert and Hamilton 1965 Yes No Castration Yes Sham surgery Rattus norvegicus Rats Lewis Laboratory Birth 52 454.00 108.000000 36 521.00 174.979999 42 484.00 123.134073 42 574.00 183.736224 31 Mean Days NA 22 Rattus_norvegicus longevity
64 Talbert and Hamilton 1965 Yes No Castration Yes Sham surgery Rattus norvegicus Rats Lewis Laboratory 22-28 days 52 454.00 108.000000 36 488.00 165.650234 35 484.00 123.134073 42 480.00 206.378293 22 Mean Days NA 23 Rattus_norvegicus longevity
65 Talbert and Hamilton 1965 Yes No Castration Yes Sham surgery Rattus norvegicus Rats Lewis Laboratory 100 days 52 454.00 108.000000 36 439.00 119.895788 23 484.00 123.134073 42 515.00 183.357574 20 Mean Days NA 24 Rattus_norvegicus longevity
87 Urfer et al 2019 No No Castration Yes Intact (no surgery) Canis lupus Dogs Various breeds Domestic Various 68 14.09 18.753700 322958 14.15 12.400487 909894 13.77 22.107487 230974 14.35 9.710121 906252 Median years 95% confidence intervals Intact Male: 14.03-14.16; Castrated male: 14.13-14.18 25 Canis_lupus longevity
159 Tidiere 2016 No No Unknown Unknown Intact (no surgery) Varecia rubra Red ruffed lemur NA Zoo Unknown 133 16.18 13.436925 927 19.40 11.495374 38 15.65 12.454792 689 19.84 10.210810 67 Mean Years Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species 26 Varecia_rubra longevity
161 Tidiere 2016 No No Unknown Unknown Intact (no surgery) Varecia variegata Black and white ruffed lemur NA Zoo Unknown 134 13.82 14.485185 1999 15.86 12.320698 37 13.95 13.122827 1542 18.03 12.489796 36 Mean Years Data as described in Fig 7.3 of thesis, from 1 year of age and split for each species 27 Varecia_variegata longevity
129 Kent et al 2018 No No Castration Yes Intact (no surgery) Canis lupus Dogs Golden retriver Domestic Unknown 106 8.68 3.230000 118 9.35 2.710000 228 5.89 3.270000 58 9.51 2.740000 248 Median Years Standard deviation calculated from the range according to Wan et al 2014 28 Canis_lupus longevity
136 Robertson et al 1961 No No Castration Yes untreated Oncorhynchus nerka Kokanee salmon NA Experimental pond 2 years 1 month 113 4.05 0.590000 41 5.31 1.600000 13 4.26 0.550000 58 5.89 1.630000 16 Mean Years Only used data on animals that were found dead and did not have regenerating gonads. Mortality data is presented for a larger cohort that were also exposed to predation but control data is not seperated according to sex. 29 Oncorhynchus_nerka longevity
141 Urfer et al 2020 No No Castration Yes Intact (no surgery) Canis lupus Dogs NA Various Various 117 15.00 17.598000 2115 15.20 16.530000 8567 14.10 20.090000 1551 15.80 16.670000 8711 Median survival time Years Calculated SD looks high? Another MSL from age 5 years is provided by not sure of the sample size included 30 Canis_lupus longevity
162 Larsen1969 Yes No Gonadectomy Yes Intact (no surgery) Lamperta fluviatilis River Lamprey NA Lab but wild caught Prior to sexual maturity - Jan 135 0.10 NA 10 0.27 NA 10 0.10 NA 10 0.30 NA 10 Survival rate (%) May (after spawning) Data extracted from Figures 6D in Larsen 1973 (thesis) and the published abstract 31 Lamperta_fluviatilis mortality
164 Larsen 1973 Yes No Gonadectomy Yes Intact (no surgery) Lamperta fluviatilis River Lamprey NA Lab but wild caught Prior to sexual maturity - Either Jan or October prior year 137 0.02 NA 50 0.25 NA 20 0.06 NA 17 0.25 NA 20 Survival rate (%) May (after spawning) Data extracted from Figures 6E in Lrsden 1973 (thesis). Sample sizes at the start are in Table 11 32 Lamperta_fluviatilis mortality

Calculating effect size for the matching data

# we create a longer data format

sdat1 <- sdat
sdat2 <- sdat
# lnRR

# here we create the ratio of M/F
sdat1$yi <- ifelse(effect_type_s == "longevity", lnrrm(sdat$Male_control_lifespan_variable,
    sdat$Female_control_lifespan_variable, sdat$Sample_size_male_control, sdat$Sample_size_female_control,
    cvs[["cv2_cont"]], cvs[["cv2_cont"]])[[1]], lnrrp(sdat$Male_control_lifespan_variable,
    sdat$Female_control_lifespan_variable, sdat$Sample_size_male_control, sdat$Sample_size_female_control)[[1]])

sdat1$vi <- ifelse(effect_type_s == "longevity", lnrrm(sdat$Male_control_lifespan_variable,
    sdat$Female_control_lifespan_variable, sdat$Sample_size_male_control, sdat$Sample_size_female_control,
    cvs[["cv2_cont"]], cvs[["cv2_cont"]])[[2]], lnrrp(sdat$Male_control_lifespan_variable,
    sdat$Female_control_lifespan_variable, sdat$Sample_size_male_control, sdat$Sample_size_female_control)[[2]])

# here we create CM/CF
sdat2$yi <- ifelse(effect_type_s == "longevity", lnrrm(sdat$Male_sterilization_lifespan_variable,
    sdat$Female_sterilization_lifespan_variable, sdat$Sample_size_male_sterilization,
    sdat$Sample_size_female_sterilization, cvs[["cv2_trt"]], cvs[["cv2_trt"]])[[1]],
    lnrrp(sdat$Male_sterilization_lifespan_variable, sdat$Female_sterilization_lifespan_variable,
        sdat$Sample_size_male_sterilization, sdat$Sample_size_female_sterilization)[[1]])

sdat2$vi <- ifelse(effect_type_s == "longevity", lnrrm(sdat$Male_sterilization_lifespan_variable,
    sdat$Female_sterilization_lifespan_variable, sdat$Sample_size_male_sterilization,
    sdat$Sample_size_female_sterilization, cvs[["cv2_trt"]], cvs[["cv2_trt"]])[[2]],
    lnrrp(sdat$Male_sterilization_lifespan_variable, sdat$Female_sterilization_lifespan_variable,
        sdat$Sample_size_male_sterilization, sdat$Sample_size_female_sterilization)[[2]])

# merging sdata frames
sdat_long <- rbind(sdat1, sdat2)

# putt 2 new column

sdat_long$Obs <- factor(1:dim(sdat_long)[[1]])
sdat_long$Comp_type <- as.factor(rep(c("both_normal", "both_castrated"), each = dim(sdat_long)[[1]]/2))

Meta-data

# sdat <- read_csv(here('data', 'data2_15022022.csv'), na = c('', 'NA'))
mdat <- read_csv(here("data", "data_meta-data.csv"))


kable(mdat, "html") %>%
    kable_styling("striped", position = "left") %>%
    scroll_box(width = "100%", height = "250px")
Order_extracted Serial number of the order of effect size extration
Study Study data was taken from
Controlled_treatments Whether treatment allocation and environments were derived in a controlled way
Type_of_sterilization Type of sterilization used
Gonads_removed Whether gonads were removed as part of the sterilization
Control_treatment Type of treatment/sham manipulation applied to controls
Shamtreatment_moderator Whether control groups involved sham treatments or not
Sex Sex in which the effect of sterilization was assessed
Species_Latin Latin name of species
Species Common name
Strain Strain of animal used where relevant
Environment Type of environment that effects were assessed in
Wild_or_semi_wild Whether the environment was wild/semi-wild or not
Age_at_treatment Information on age at which sterilization was conducted
Maturity_at_treatment When sterilization was conducted in relation to life stage
Maturity_at_treatment_ordinal When sterilization was conducted as an ordinal variable (1=birth; 2 = pre-puberty, 3 = puberty, 4 = adulthood)
Duration_of_treatment Duration of treatment if not permanent
Shared_control Shared numbers denote that a shared control or treatment group was used in each of these comparisons
Control_lifespan_variable Lifespan/survival variable for the control group
Treatment_lifespan_variable Lifespan/survival variable for the sterilized group
Opposite_sex_lifespan_variable Lifespan/survival variable for the opposite sex group if available
Error_control Error value for control group as extracted from the original source
Error_experimental Error value for sterilized group as extracted from the original source
Error_opposite_sex Error value for opposite sex group as extracted from the original source
Lifespan_parameter Type of survival data
Lifespan_unit Unit of measurement for survival data
Error_unit Unit of measurement for error in original source
Error_control_SD Standard deviation of control group
Error_experimental_SD Standard deviation of sterilized group
Error_opposite_sex_SD Standard deviation of opposite sex group
Coefficent_difference_to_control Coefficient estimate of difference to control group in lifespan from original source
Lower_interval Lower confidence interval for coefficient estimate
Upper_interval Upper confidence interval for coefficient estimate
Coefficent_unit Unit of measurement for coefficient estimate
Sample_size_control Sample size of control group
Sample_size_sterilization Sample size of sterilization group
Sample_size_opposite_sex Sample size of opposite sex group
Notes Notes on study and data extraction

Summarise the dataset

Visualising missing data

General summary

  • Number of effect sizes: 159
  • Number of studies: 71
  • Publication years: from to -
  • Simple list of studies as short references: Kirkpatrick and Turner 2004, Jacob et al 2004 A, Jacob et al 2004 B, Twigg et al 2000, Gipps and Jewel 1979, Zakeri et al 2019, Dorner 1973, Asdell et al 1967, Asdell and Joshi 1976, Arriola Apelo et al 2020, Benedusi et al 2015, Cargil et al 2003, Cox et al 2014, Cox and Calsbeek 2010, Cox et al 2010, Reedy et al 2016, Drori and Folman 1976, Garratt et al 2021, Hamilton et al 1969, Waters et al 2011, Holland et al 1977, Kirkman and Yau 1972, Sichuk 1965, Mitchel et al 1999, Moore et al 2001, Nieschlag et al 1993, Slonaker 1930, Storer et al 1982, Hoffman et al 2018, Mason et al 2009, Talbert and Hamilton 1965, Tapprest et al 2017, Hamilton 1965, Huang et al 2017, Min et al 2012, Williams et al 2007, Urfer et al 2019, Ramsey 2005, Ramsey et al 2021, Muhlock 1959, Jewel 1997, Iwasa et al 2018, Hamilton and Mestler 1969, Oneil et al 2013, Oneil et al 2015, Wilson et al 2019, Cheng 2019, Bronson 1981, Bronson 1982, Cox et al 2021, Skinner 2007, Kent et al 2018, Iversen et al 2007, Sato et al 1997, Aida et al 1984, Pullinger and Head 1964, Robertson et al 1961, Saunders et al 2002, Collins and Kasbohn 2017, Urfer et al 2020, Ossewaarde et al 2005, Hotchkiss 1995, Rocca et al 2006, Howard et al 2005, Phelan 1995, Manson et al 2013, Deleuze et al 2021, Wang et al 2021, Tidiere 2016, Larsen1969, Larsen 1973
  • Number of species: 22
  • Simple list of species Latin names (also stored in “Phylogeny” variable): Equus ferus, Rattus argentiventer, Oryctolagus cuniculus, Myodes glareolus, Mus musculus, Rattus norvegicus, Anolis sagrei, Felis catus, Canis lupus, Mesocricetus auratus, Homo sapiens, Trichosurus vulpecula, Phascolarctos cinereus, Ovis aries, Odocoileus virginianus, Oncorhynchus masou, Oncorhynchus nerka, Vulpes vulpes, Macaca fascicularis, Varecia rubra, Varecia variegata, Lamperta fluviatilis
  • Number of data points for females: 100, and data points form males: 59
# Key variables: Sex, Gonads_removed, Wild_or_semi_wild, Controlled_treatments,
# Effect_type, Maturity_at_treatment_ordinal (ordinal with NA), names(dat)

# check how crossed with Sex (relevant to both sexes or not?)
table(dat$Species_Latin, dat$Sex)
##                         
##                          Female Male
##   Anolis sagrei              14    1
##   Canis lupus                11   11
##   Equus ferus                 3    3
##   Felis catus                 6    8
##   Homo sapiens               12    8
##   Lamperta fluviatilis        2    2
##   Macaca fascicularis         3    0
##   Mesocricetus auratus        2    2
##   Mus musculus               12    7
##   Myodes glareolus            0    2
##   Odocoileus virginianus      1    0
##   Oncorhynchus masou          0    1
##   Oncorhynchus nerka          1    1
##   Oryctolagus cuniculus       9    0
##   Ovis aries                  0    3
##   Phascolarctos cinereus      1    0
##   Rattus argentiventer        5    0
##   Rattus norvegicus          10    8
##   Trichosurus vulpecula       4    0
##   Varecia rubra               1    1
##   Varecia variegata           1    1
##   Vulpes vulpes               2    0
table(dat$Wild_or_semi_wild, dat$Sex)
##      
##       Female Male
##   No      64   55
##   Yes     36    4
table(dat$Gonads_removed, dat$Sex)  #always Yes in Males
##      
##       Female Male
##   No      33    0
##   Yes     65   57
table(dat$Controlled_treatments, dat$Sex)
##      
##       Female Male
##   No      40   34
##   Yes     60   25
table(dat$Maturity_at_treatment_ordinal, dat$Sex)  #table(dat$Maturity_at_treatment)
##    
##     Female Male
##   1      1    5
##   2     13   16
##   3      4    4
##   4     46   11
table(dat$Effect_type, dat$Sex)
##            
##             Female Male
##   longevity     37   45
##   mortality     63   14
# check how crossed with Wild_or_semi_wild
table(dat$Gonads_removed, dat$Wild_or_semi_wild)
##      
##        No Yes
##   No   10  23
##   Yes 105  17
table(dat$Controlled_treatments, dat$Wild_or_semi_wild)
##      
##       No Yes
##   No  67   7
##   Yes 52  33
table(dat$Maturity_at_treatment_ordinal, dat$Wild_or_semi_wild)
##    
##     No Yes
##   1  3   3
##   2 29   0
##   3  8   0
##   4 33  24
table(dat$Effect_type, dat$Wild_or_semi_wild)
##            
##             No Yes
##   longevity 80   2
##   mortality 39  38
# check how crossed with Gonads_removed
table(dat$Wild_or_semi_wild, dat$Gonads_removed)
##      
##        No Yes
##   No   10 105
##   Yes  23  17
table(dat$Controlled_treatments, dat$Gonads_removed)
##      
##       No Yes
##   No  11  59
##   Yes 22  63
table(dat$Maturity_at_treatment_ordinal, dat$Gonads_removed)
##    
##     No Yes
##   1  0   6
##   2  1  28
##   3  0   8
##   4 23  34
table(dat$Effect_type, dat$Gonads_removed)
##            
##             No Yes
##   longevity  3  75
##   mortality 30  47
# check how crossed with Controlled_treatments
table(dat$Wild_or_semi_wild, dat$Controlled_treatments)
##      
##       No Yes
##   No  67  52
##   Yes  7  33
table(dat$Gonads_removed, dat$Controlled_treatments)
##      
##       No Yes
##   No  11  22
##   Yes 59  63
table(dat$Maturity_at_treatment_ordinal, dat$Controlled_treatments)
##    
##     No Yes
##   1  0   6
##   2  8  21
##   3  2   6
##   4 22  35
table(dat$Effect_type, dat$Controlled_treatments)
##            
##             No Yes
##   longevity 52  30
##   mortality 22  55
# check how crossed with Effect_type
table(dat$Wild_or_semi_wild, dat$Effect_type)
##      
##       longevity mortality
##   No         80        39
##   Yes         2        38
table(dat$Gonads_removed, dat$Effect_type)
##      
##       longevity mortality
##   No          3        30
##   Yes        75        47
table(dat$Controlled_treatments, dat$Effect_type)
##      
##       longevity mortality
##   No         52        22
##   Yes        30        55
table(dat$Maturity_at_treatment_ordinal, dat$Effect_type)
##    
##     longevity mortality
##   1         3         3
##   2        21         8
##   3         7         1
##   4        15        42

Key predictors (moderators)

Visualise missing data in 6 key variables (moderators):
- Sex,
- Wild_or_semi_wild,
- Maturity_at_treatment_ordinal,
- Gonads_removed,
- Controlled_treatments,
- Effect_type

Visualize pairwise associations between 6 key variables:

Alluvial diagrams for key predictor variables (moderators) - two groups of 3 moderators, grouped by similarity:

For Sex, Gonads_removed, $ Maturity_at_treatment_ordinal (changed NA to 0)

# use ggalluvial
# (https://cran.r-project.org/web/packages/ggalluvial/vignettes/ggalluvial.html)

# create a frequency table for first 3 moderator variables freq_1 <-
# as.data.frame(table(dat$Sex, dat$Gonads_removed,
# dat$Maturity_at_treatment_ordinal)) %>% rename(Sex = Var1, Gonads_removed =
# Var2, Maturity_at_treatment_ordinal = Var3)
# is_alluvia_form(as.data.frame(freq_1), axes = 1:3, silent = TRUE) #freq_1 %>%
# filter(Freq != 0) %>% arrange(desc(Freq)) #collapesd table of values, without
# 0s


# ggplot(data = freq_1, aes(axis1 = Sex, axis2 = Gonads_removed, axis3 =
# Maturity_at_treatment_ordinal, y = Freq)) + geom_alluvium(aes(fill = Sex)) +
# geom_stratum(aes(fill = Sex))+ geom_text(stat = 'stratum', aes(label =
# after_stat(stratum))) + #theme_minimal() + theme_void() +
# theme(legend.position = 'none', plot.title = element_text(hjust = 0.5, vjust
# = 3), axis.title.x = element_text(), axis.text.x = element_text(face='bold'))
# + scale_x_discrete(limits = c('Sex', 'Gonads removed', 'Maturity class'),
# expand = c(0.15, 0.05), position = 'top') + scale_fill_brewer(palette =
# 'Set3') + ggtitle('A. Subjects sex, manipulation type and maturity class')

# as above but with, but with Gonads_removed as first column, and different
# colours ggplot(data = freq_1, aes(axis1 = Gonads_removed, axis2 = Sex, axis3
# = Maturity_at_treatment_ordinal, y = Freq)) + geom_alluvium(aes(fill =
# Gonads_removed)) + geom_stratum(aes(fill = Gonads_removed))+ geom_text(stat =
# 'stratum', aes(label = after_stat(stratum))) + theme_minimal() + #
# theme_void() + theme(legend.position = 'none', plot.title =
# element_text(hjust = 0.5, vjust = 3), axis.title.x = element_text(),
# axis.text.x = element_text(face='bold')) + scale_x_discrete(limits =
# c('Gonads_removed', 'Sex', 'Maturity class'), expand = c(0.15, 0.05),
# position = 'top') + scale_fill_brewer(palette = 'Pastel2') + ggtitle('A.
# Subjects sex, manipulation and maturity ')

# NOTE: all rows with NA in Maturity class are removed from the plot recode NA
# as 0
dat$Maturity_at_treatment_ordinal2 <- dat$Maturity_at_treatment_ordinal
dat$Maturity_at_treatment_ordinal2[is.na(dat$Maturity_at_treatment_ordinal2)] <- 0
# create a frequency table for first 3 moderator variables
freq_1 <- as.data.frame(table(dat$Sex, dat$Gonads_removed, dat$Maturity_at_treatment_ordinal2)) %>%
    rename(Sex = Var1, Gonads_removed = Var2, Maturity_at_treatment_ordinal = Var3)
is_alluvia_form(as.data.frame(freq_1), axes = 1:3, silent = TRUE)
# freq_1 %>% filter(Freq != 0) %>% arrange(desc(Freq)) #collapesd table of
# values, without 0s


# ggplot(data = freq_1, aes(axis1 = Sex, axis2 = Gonads_removed, axis3 =
# Maturity_at_treatment_ordinal, y = Freq)) + geom_alluvium(aes(fill = Sex)) +
# geom_stratum(aes(fill = Sex))+ geom_text(stat = 'stratum', aes(label =
# after_stat(stratum))) + #theme_minimal() + theme_void() +
# theme(legend.position = 'none', plot.title = element_text(hjust = 0.5, vjust
# = 3), axis.title.x = element_text(), axis.text.x = element_text(face='bold'))
# + scale_x_discrete(limits = c('Sex', 'Gonads removed', 'Maturity class'),
# expand = c(0.15, 0.05), position = 'top') + scale_fill_brewer(palette =
# 'Set3') + ggtitle('A. Subjects sex, manipulation type and maturity class')

# as above but with, but with Gonads_removed as first column, and different
# colours
ggplot(data = freq_1, aes(axis1 = Gonads_removed, axis2 = Sex, axis3 = Maturity_at_treatment_ordinal,
    y = Freq)) + geom_alluvium(aes(fill = Gonads_removed)) + geom_stratum(aes(fill = Gonads_removed)) +
    geom_text(stat = "stratum", aes(label = after_stat(stratum))) + theme_minimal() +
    # theme_void() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, vjust = 3),
    axis.title.x = element_text(), axis.text.x = element_text(face = "bold")) + scale_x_discrete(limits = c("Gonads_removed",
    "Sex", "Maturity class"), expand = c(0.15, 0.05), position = "top") + scale_fill_brewer(palette = "Pastel2") +
    ggtitle("A. Subjects sex, manipulation and maturity ")

For Wild_or_semi_wild, Controlled_treatments, & Effect_type (Outcome type)

# create a frequency table for next 3 moderator variables
freq_2 <- as.data.frame(table(dat$Wild_or_semi_wild, dat$Controlled_treatments, dat$Effect_type)) %>%
    rename(Wild_or_semi_wild = Var1, Controlled_treatments = Var2, Effect_type = Var3)
is_alluvia_form(as.data.frame(freq_2), axes = 1:3, silent = TRUE)
# freq_2 %>% filter(Freq != 0) %>% arrange(desc(Freq)) #collapesd table of
# values, without 0s

ggplot(data = freq_2, aes(axis1 = Wild_or_semi_wild, axis2 = Controlled_treatments,
    axis3 = Effect_type, y = Freq)) + geom_alluvium(aes(fill = Wild_or_semi_wild)) +
    geom_stratum(aes(fill = Wild_or_semi_wild)) + geom_text(stat = "stratum", aes(label = after_stat(stratum))) +
    theme_minimal() + #  theme_void() + theme_minimal() + # theme_void() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, vjust = 3),
    axis.title.x = element_text(), axis.text.x = element_text(face = "bold")) + scale_x_discrete(limits = c("Wild_or_semi_wild",
    "Controlled_treatments", "Outcome type"), expand = c(0.15, 0.05), position = "top") +
    scale_fill_brewer(palette = "Pastel1") + ggtitle("B. Experimental settings and outcome type")

# names(dat_key)

For Gonads_removed, Wild_or_semi_wild, Controlled_treatments, & Effect_type (Outcome type)

# create a frequency table for next 3 moderator variables
freq_3 <- as.data.frame(table(dat$Gonads_removed, dat$Wild_or_semi_wild, dat$Effect_type)) %>%
    rename(Gonads_removed = Var1, Wild_or_semi_wild = Var2, Effect_type = Var3)
is_alluvia_form(as.data.frame(freq_3), axes = 1:3, silent = TRUE)
# freq_2 %>% filter(Freq != 0) %>% arrange(desc(Freq)) #collapesd table of
# values, without 0s

ggplot(data = freq_3, aes(axis1 = Gonads_removed, axis2 = Wild_or_semi_wild, axis3 = Effect_type,
    y = Freq)) + geom_alluvium(aes(fill = Gonads_removed)) + geom_stratum(aes(fill = Gonads_removed)) +
    geom_text(stat = "stratum", aes(label = after_stat(stratum))) + theme_minimal() +
    # theme_void() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, vjust = 3),
    axis.title.x = element_text(), axis.text.x = element_text(face = "bold")) + scale_x_discrete(limits = c("Gonads_removed",
    "Wild_or_semi_wild", "Outcome type"), expand = c(0.15, 0.05), position = "top") +
    scale_fill_brewer(palette = "Set3") + ggtitle("C. Manipulation, subject and outcome types")

# names(dat_key)

This just shows a different combination of predictor variables (moderators) from plots A and B.

Building phylogenetic tree

Setting up

names(dat)
myspecies <- as.character(unique(dat$Species_Latin))  #get list of species
# str_sort(myspecies) #visual check length(myspecies) #23 species
# length(unique(myspecies)) #23 unique species names

Using rotl package to retrieve synthetic species tree from Open Tree of Life: Rotl is an R package (https://peerj.com/preprints/1471/) allowing access to synthetic phylogenetic tree available at Open Tree of Life database (https://opentreeoflife.org/).

taxa <- tnrs_match_names(names = myspecies)
dim(taxa)  #40 specias - all matched
table(taxa$approximate_match)  #1 approximate match
taxa[taxa$approximate_match == TRUE, ]  ##lamperta fluviatilis (search_string) will be presented as Perca fluviatilis (uniquw_name)

Get the initial tree

tree <- tol_induced_subtree(ott_ids = taxa[["ott_id"]], label_format = "name")
# plot(tree, cex=.6, label.offset =.1, no.margin = TRUE) visual check

Check matching species & labels

# check overlap and differences with the taxa list
intersect(gsub("_", " ", tree$tip.label), myspecies)  #22
setdiff(gsub("_", " ", tree$tip.label), myspecies)  # 'Perca fluviatilis'  
setdiff(myspecies, gsub("_", " ", tree$tip.label))  # 'Lamperta fluviatilis'
tree$tip.label <- gsub("Perca_fluviatilis", "Lamperta_fluviatilis", tree$tip.label)  #replace with the original name

# tree <- drop.tip(tree, 'Equus_caballus') re-check overlap and differences
# with myspecies list intersect(myspecies, tree2$tip.label) #23
# setdiff(myspecies, tree2$tip.label) #0 setdiff(tree2$tip.label, myspecies) #0

# check if the tree is really binary
is.binary.tree(tree)  #TRUE
# tree_binary$node.label <- NULL #you can delete internal node labels *NOTE:*
# no branch lengths are included, they can be created later via simulations.

write.tree(tree, file = here("data", "tree_rotl.tre"))  #save the tree

# *NOTE:* underscores within species names on tree tip labals are added
# automatically tree <- read.tree(file='plot_cooked_fish_MA.tre') #if you need
# to read in the tree tree$tip.label <- gsub('_',' ', tree$tip.label) #get rid
# of the underscores tree$node.label <- NULL #you can delete internal node
# labels

Plot phylogenetic tree

tree <- read.tree(here("data/tree_rotl.tre"))

plot(tree, cex = 0.6, label.offset = 0.1, no.margin = TRUE)

# #or plot to pdf pdf(here('figs/rotl_tree.pdf'), width=8, heigh=10) plot(tree,
# cex=0.6, label.offset =.1, no.margin = TRUE) dev.off()

Meta-analysis: main

Main model

# VCV matrix to model shared control
V_matrix <- impute_covariance_matrix(vi = dat$vi, cluster = dat$Shared_control, r = 0.5)

# phylogeny to model tree <- read.tree(here('data/tree_rotl.tre'))
tree <- compute.brlen(tree)

cor_tree <- vcv(tree, corr = TRUE)

# checking the match
match(unique(dat$Phylogeny), colnames(cor_tree))
##  [1] 13  2  6  5  1  3 19 16 14  4  8 17 18 12 11 20 21 15  7 10  9 22
# meta-analysis basics phylogenetic model
mod <- rma.mv(yi, V = V_matrix, mod = ~1, random = list(~1 | Phylogeny, ~1 | Species_Latin,
    ~1 | Study, ~1 | Effect_ID), R = list(Phylogeny = cor_tree), data = dat, test = "t",
    sparse = TRUE, control = list(optimizer = "optim", optmethod = "Nelder-Mead"))
summary(mod)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.2903  -26.5806  -16.5806   -1.2676  -16.1858   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor    R 
## sigma^2.1  0.0003  0.0161     22     no      Phylogeny  yes 
## sigma^2.2  0.0178  0.1333     22     no  Species_Latin   no 
## sigma^2.3  0.0128  0.1132     71     no          Study   no 
## sigma^2.4  0.0091  0.0956    159     no      Effect_ID   no 
## 
## Test for Heterogeneity:
## Q(df = 158) = 1387.1988, p-val < .0001
## 
## Model Results:
## 
## estimate      se    tval   df    pval   ci.lb   ci.ub     ​ 
##   0.1630  0.0400  4.0761  158  <.0001  0.0840  0.2420  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(i2_ml(mod), 2)  # almost no phylogenetic effect
##         I2_Total     I2_Phylogeny I2_Species_Latin         I2_Study 
##            99.42             0.65            44.18            31.86 
##     I2_Effect_ID 
##            22.74
# visualizing the result
orchard_plot(mod, xlab = "log response ratio (lnRR)", group = "Study", data = dat)

# reduced model without phylogeny 
# we use this as our base model for meta-regression

mod2 <-  rma.mv(yi, V = V_matrix, mod = ~ 1, 
               random = list(#~1|Phylogeny, 
                             ~1|Species_Latin, 
                             ~1|Study, 
                             ~1|Effect_ID), 
               #R = list(Phylogeny = cor_tree), 
               data = dat, 
               test = "t",
               sparse = TRUE,
               control=list(optimizer="optim", optmethod="Nelder-Mead")
               )
summary(mod2) 
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.2899  -26.5799  -18.5799   -6.3295  -18.3185   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0179  0.1338     22     no  Species_Latin 
## sigma^2.2  0.0128  0.1131     71     no          Study 
## sigma^2.3  0.0091  0.0957    159     no      Effect_ID 
## 
## Test for Heterogeneity:
## Q(df = 158) = 1387.1988, p-val < .0001
## 
## Model Results:
## 
## estimate      se    tval   df    pval   ci.lb   ci.ub     ​ 
##   0.1618  0.0388  4.1694  158  <.0001  0.0852  0.2385  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# we will not use robust for the analysis - they do not seem to change the results
# rob2.2 <- robust(mod2, cluster = Study, adjust=TRUE, clubSandwich=TRUE, verbose=TRUE)
# rob2.2

anova(mod, mod2) # they are not significantly different
## 
##         df      AIC     BIC     AICc  logLik    LRT   pval        QE tau^2 
## Full     5 -16.5806 -1.2676 -16.1858 13.2903               1387.1988    NA 
## Reduced  4 -18.5799 -6.3295 -18.3185 13.2899 0.0007 0.9791 1387.1988    NA

Sex-wise species-level effect (Figure 1A)

# creating mod_table- results from the model

results <- mod_results(mod, group = "Study", data = dat)[[1]]

# create a new cluster
dat$Phylo_Sex <- paste(dat$Phylogeny, dat$Sex , sep = "_" )

# rho = 0.5 is as in Noble et al (Mol Ecol)
dat <- escalc(yi=yi, vi=vi, data = dat)
cdat <- aggregate(dat, cluster=Phylo_Sex, struct="CS", rho = 0.5)

dim(dat)
dim(cdat)

# CI
cdat$lower.ci <- cdat$yi - sqrt(cdat$vi) * qnorm(0.975) 
cdat$upper.ci <- cdat$yi + sqrt(cdat$vi) *  qnorm(0.975)

# adding more informaition
cdat %>% select(Species_Latin, yi, lower.ci, upper.ci, Sex) -> ddat

addition <- data.frame(Species_Latin = "Overall", yi =  NA,lower.ci = NA, upper.ci = NA, Sex = "Female")

ddat <- rbind(ddat, addition)

sum_data <- data.frame("x.diamond" = c(results$lowerCL,
                                         results$estimate ,
                                         results$upperCL,
                                         results$estimate ),
                         "y.diamond" = c(1,
                                         1 + 0.25,
                                         1,
                                         1 - 0.25)
  )


ddat$Species_Latin <-  factor(ddat$Species_Latin, 
                                 levels = c("Overall", 
                                            "Lamperta fluviatilis", # fish
                                            "Oncorhynchus nerka", # fish
                                            "Oncorhynchus masou" , # fish
                                            "Anolis sagrei" , # lizard
                                            "Phascolarctos cinereus", #masp
                                            "Trichosurus vulpecula", # masp?
                                            "Oryctolagus cuniculus", # rabbit
                                            "Mesocricetus auratus", 
                                            "Myodes glareolus", # voles
                                            "Rattus norvegicus", # rat
                                            "Rattus argentiventer" , #rat
                                            "Mus musculus", 
                                            "Ovis aries",
                                            "Equus ferus",
                                            "Odocoileus virginianus" , 
                                            "Vulpes vulpes", 
                                            "Canis lupus",
                                            "Felis catus",
                                            "Varecia variegata",
                                            "Varecia rubra",
                                            "Macaca fascicularis",
                                            "Homo sapiens"
                                            ),
                              labels  = c("Overall", 
                                            "Lamperta fluviatilis", # fish
                                            "Oncorhynchus nerka", # fish
                                            "Oncorhynchus masou" , # fish
                                            "Anolis sagrei" , # lizard
                                            "Phascolarctos cinereus", #masp
                                            "Trichosurus vulpecula", # masp?
                                            "Oryctolagus cuniculus", # rabbit
                                            "Mesocricetus auratus", 
                                            "Myodes glareolus", # voles
                                            "Rattus norvegicus", # rat
                                            "Rattus argentiventer" , #rat
                                            "Mus musculus", 
                                            "Ovis aries",
                                            "Equus ferus",
                                            "Odocoileus virginianus" , 
                                            "Vulpes vulpes", 
                                            "Canis lupus",
                                            "Felis catus",
                                            "Varecia variegata",
                                            "Varecia rubra",
                                            "Macaca fascicularis",
                                            "Homo sapiens"
                                            ))


phy_sex <- ggplot(data = ddat, aes(x = yi, y = Species_Latin)) +
   geom_errorbarh(aes(xmin = lower.ci, xmax = upper.ci, colour = Sex), 
                  height = 0, show.legend = TRUE, size = 4.5, alpha = 0.8, position =position_dodge(width = 0.75)) +
   geom_point(aes(col = Sex), fill = "white", size = 2, shape = 21, position =position_dodge2(width = 0.75)) +
  geom_vline(xintercept = 0, linetype = 2, colour = "black", alpha = 0.3) +
  geom_vline(xintercept = mod$b, linetype = 1, colour = "red", alpha = 0.3) +
  xlim(-1.6, 1.6) +
  #creating 95% prediction intervals
  geom_segment(data = results, ggplot2::aes(x = lowerPR, y = 1, xend = upperPR, yend = 1, group = name)) +
    # creating diamonsts (95% CI)
    ggplot2::geom_polygon(data = sum_data, ggplot2::aes(x = x.diamond, y = y.diamond), fill = "red") +
  
  theme_bw() +
  scale_color_manual(values = c("#CC6677", "#88CCEE")) +
   labs(x = "lnRR (effect size)", y = "", colour = "Sex") +
  theme(legend.position= c(0.95, 0.85), legend.justification = c(1, 0)) +
  theme(legend.title = element_text(size = 9)) +
  #theme(legend.direction="horizontal") +
  theme(axis.text.y = element_blank()) +
  theme(axis.text.y = element_text(size = 10, colour ="black",
                                  hjust = 0.5)) 


# adding incons
filenames <- list.files("icons", pattern=".png", full.names=TRUE)
ldf <- lapply(filenames, readPNG)
names(ldf) <- substr(filenames, 7, 60)

p0 <- phy_sex +
  annotation_custom(rasterGrob(ldf$Lampetra_fluviatilis.png), xmin = -1.5, xmax = -1, ymin = 1.5, ymax = 2.5) +
  annotation_custom(rasterGrob(ldf$Oncorhynchus_nerka.png), xmin = -1.5, xmax = -1, ymin = 2.5, ymax = 3.5) +
  annotation_custom(rasterGrob(ldf$Oncorhynchus_masou.png), xmin = -1.5, xmax = -1, ymin = 3.5, ymax = 4.5) +
  annotation_custom(rasterGrob(ldf$Anolis_sagrei.png), xmin = -1.5, xmax = -1, ymin = 4.5, ymax = 5.5) +
  annotation_custom(rasterGrob(ldf$Phascolarctos_cinereus.png), xmin = -1.5, xmax = -1, ymin = 5.5, ymax = 6.5) +
  annotation_custom(rasterGrob(ldf$Trichosurus_vulpecula.png), xmin = -1.5, xmax = -1, ymin = 6.5, ymax = 7.5) +
  annotation_custom(rasterGrob(ldf$Oryctolagus_cuniculus.png), xmin = -1.5, xmax = -1, ymin = 7.5, ymax = 8.5) +
  annotation_custom(rasterGrob(ldf$Mesocricetus_auratus.png), xmin = -1.5, xmax = -1, ymin = 8.5, ymax = 9.5) +
  annotation_custom(rasterGrob(ldf$Myodes_glareolus.png), xmin = -1.5, xmax = -1, ymin = 9.5, ymax = 10.5) +
  annotation_custom(rasterGrob(ldf$Rattus_norvegicus.png), xmin = -1.5, xmax = -1, ymin = 10.5, ymax = 11.5) +
  annotation_custom(rasterGrob(ldf$Rattus_argentiventer.png), xmin = -1.5, xmax = -1, ymin = 11.5, ymax = 12.5) +
  annotation_custom(rasterGrob(ldf$Mus_musculus.png), xmin = -1.5, xmax = -1, ymin = 12.5, ymax = 13.5) +
  annotation_custom(rasterGrob(ldf$Ovis_aries.png), xmin = -1.5, xmax = -1, ymin = 13.5, ymax = 14.5) +
  annotation_custom(rasterGrob(ldf$Equus_ferus.png), xmin = -1.5, xmax = -1, ymin = 14.5, ymax = 15.5) +
  annotation_custom(rasterGrob(ldf$Odocoileus_virginianus.png), xmin = -1.5, xmax = -1, ymin = 15.5, ymax = 16.5) +
  annotation_custom(rasterGrob(ldf$Vulpes_vulpes.png), xmin = -1.5, xmax = -1, ymin = 16.5, ymax = 17.5) +
  annotation_custom(rasterGrob(ldf$Canis_lupus.png), xmin = -1.5, xmax = -1, ymin = 17.5, ymax = 18.5) +
  annotation_custom(rasterGrob(ldf$Felis_catus.png), xmin = -1.5, xmax = -1, ymin = 18.5, ymax = 19.5) +
  annotation_custom(rasterGrob(ldf$Varecia_variegata.png), xmin = -1.5, xmax = -1, ymin = 19.5, ymax = 20.5) +
  annotation_custom(rasterGrob(ldf$Varecia_rubra.png), xmin = -1.5, xmax = -1, ymin = 20.5, ymax = 21.5) +
  annotation_custom(rasterGrob(ldf$Macaca_Fascicularis.png), xmin = -1.5, xmax = -1, ymin = 21.5, ymax = 22.5)  +
  annotation_custom(rasterGrob(ldf$Homo_sapiens.png), xmin = -1.5, xmax = -1, ymin = 22.5, ymax = 23.5) 

p0

Meta-regression: non-full models

Model function

# no phylogeny

mod_func <-  function(formula) {
        rma.mv(yi, 
               V = V_matrix,
               mod = formula, 
               random = list(#~1|Phylogeny, 
                             ~1|Species_Latin, 
                             ~1|Study, 
                             ~1|Effect_ID), 
               #R = list(Phylogeny = cor_tree), 
               data = dat, 
               test = "t",
               sparse = TRUE,
               control=list(optimizer="optim", optmethod="Nelder-Mead")
                            #optmethod="BFGS")
               )
}

Sex difference (Sex)

mod_sex <- mod_func(formula = ~Sex - 1)
summary(mod_sex)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  12.6642  -25.3283  -15.3283   -0.0471  -14.9310   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0176  0.1326     22     no  Species_Latin 
## sigma^2.2  0.0128  0.1131     71     no          Study 
## sigma^2.3  0.0095  0.0972    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1377.0170, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 157) = 8.7588, p-val = 0.0002
## 
## Model Results:
## 
##            estimate      se    tval   df    pval   ci.lb   ci.ub     ​ 
## SexFemale    0.1601  0.0405  3.9519  157  0.0001  0.0801  0.2401  *** 
## SexMale      0.1645  0.0448  3.6703  157  0.0003  0.0760  0.2531  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_sex1 <- mod_func(formula = ~Sex)
summary(mod_sex1)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  12.6642  -25.3283  -15.3283   -0.0471  -14.9310   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0176  0.1326     22     no  Species_Latin 
## sigma^2.2  0.0128  0.1131     71     no          Study 
## sigma^2.3  0.0095  0.0972    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1377.0170, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 0.0161, p-val = 0.8991
## 
## Model Results:
## 
##          estimate      se    tval   df    pval    ci.lb   ci.ub     ​ 
## intrcpt    0.1601  0.0405  3.9519  157  0.0001   0.0801  0.2401  *** 
## SexMale    0.0044  0.0349  0.1270  157  0.8991  -0.0645  0.0734      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_sex1)
##    R2_marginal R2_conditional 
##   0.0001159238   0.7627304449
# orchard plot test <- mod_results(mod_sex1, mod = 'Sex', group = 'Study', data
# = dat)
p1 <- orchard_plot(mod_sex1, mod = "Sex", xlab = "log response ratio (lnRR)", group = "Study",
    data = dat, cb = F, angle = 0)

p1

Gonad Removal (Sex_Gonads)

# creating a new variable Sex + Gonad because

dat$Sex_Gonads <- paste(dat$Sex, dat$Gonads_removed, sep = "_")

dat$Sex_Gonads[grep("NA", dat$Sex_Gonads)] <- NA


dat$Sex_Gonads <- factor(dat$Sex_Gonads, levels = c("Female_No", "Female_Yes", "Male_Yes"),
    labels = c("Gonads removed \n(female)", "Gonads not removed \n(female)", "Gonads removed \n(male)"))


mod_rem <- mod_func(formula = ~Sex_Gonads - 1)
summary(mod_rem)
## 
## Multivariate Meta-Analysis Model (k = 155; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  10.2552  -20.5104   -8.5104    9.6329   -7.9311   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0232  0.1523     20     no  Species_Latin 
## sigma^2.2  0.0110  0.1051     70     no          Study 
## sigma^2.3  0.0105  0.1023    155     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 152) = 1341.0829, p-val < .0001
## 
## Test of Moderators (coefficients 1:3):
## F(df1 = 3, df2 = 152) = 4.8811, p-val = 0.0029
## 
## Model Results:
## 
##                                          estimate      se    tval   df    pval​ 
## Sex_GonadsGonads removed \n(female)        0.1350  0.0560  2.4089  152  0.0172 
## Sex_GonadsGonads not removed \n(female)    0.1742  0.0502  3.4694  152  0.0007 
## Sex_GonadsGonads removed \n(male)          0.1780  0.0514  3.4633  152  0.0007 
##                                           ci.lb   ci.ub 
## Sex_GonadsGonads removed \n(female)      0.0243  0.2457    * 
## Sex_GonadsGonads not removed \n(female)  0.0750  0.2734  *** 
## Sex_GonadsGonads removed \n(male)        0.0764  0.2795  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_rem1 <- mod_func(formula = ~Sex_Gonads)
summary(mod_rem1)
## 
## Multivariate Meta-Analysis Model (k = 155; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  10.2552  -20.5104   -8.5104    9.6329   -7.9311   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0232  0.1523     20     no  Species_Latin 
## sigma^2.2  0.0110  0.1051     70     no          Study 
## sigma^2.3  0.0105  0.1023    155     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 152) = 1341.0829, p-val < .0001
## 
## Test of Moderators (coefficients 2:3):
## F(df1 = 2, df2 = 152) = 0.2784, p-val = 0.7574
## 
## Model Results:
## 
##                                          estimate      se    tval   df    pval​ 
## intrcpt                                    0.1350  0.0560  2.4089  152  0.0172 
## Sex_GonadsGonads not removed \n(female)    0.0392  0.0560  0.6997  152  0.4852 
## Sex_GonadsGonads removed \n(male)          0.0430  0.0603  0.7132  152  0.4768 
##                                            ci.lb   ci.ub 
## intrcpt                                   0.0243  0.2457  * 
## Sex_GonadsGonads not removed \n(female)  -0.0715  0.1499    
## Sex_GonadsGonads removed \n(male)        -0.0761  0.1621    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_rem1)
##    R2_marginal R2_conditional 
##     0.00635652     0.76747820
# orchard plot
p2 <- orchard_plot(mod_rem, mod = "Sex_Gonads", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat, cb = F, angle = 0)

p2

Environmental (Wild_or_semi_wild)

dat$Wild_or_semi_wild <- factor(dat$Wild_or_semi_wild, levels = c("No", "Yes"), labels = c("Others \n(e.g., lab, farm)",
    "Wild or \nSemi-wild"))


mod_env <- mod_func(formula = ~Wild_or_semi_wild - 1)
summary(mod_env)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  14.8385  -29.6769  -19.6769   -4.3957  -19.2796   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0173  0.1315     22     no  Species_Latin 
## sigma^2.2  0.0151  0.1227     71     no          Study 
## sigma^2.3  0.0077  0.0875    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1263.2354, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 157) = 10.5379, p-val < .0001
## 
## Model Results:
## 
##                                              estimate      se    tval   df​ 
## Wild_or_semi_wildOthers \n(e.g., lab, farm)    0.1208  0.0443  2.7292  157 
## Wild_or_semi_wildWild or \nSemi-wild           0.2372  0.0551  4.3050  157 
##                                                pval   ci.lb   ci.ub 
## Wild_or_semi_wildOthers \n(e.g., lab, farm)  0.0071  0.0334  0.2082   ** 
## Wild_or_semi_wildWild or \nSemi-wild         <.0001  0.1284  0.3461  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_env1 <- mod_func(formula = ~Wild_or_semi_wild)
summary(mod_env1)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  14.8385  -29.6769  -19.6769   -4.3957  -19.2796   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0173  0.1315     22     no  Species_Latin 
## sigma^2.2  0.0151  0.1227     71     no          Study 
## sigma^2.3  0.0077  0.0875    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1263.2354, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 3.7244, p-val = 0.0554
## 
## Model Results:
## 
##                                       estimate      se    tval   df    pval​ 
## intrcpt                                 0.1208  0.0443  2.7292  157  0.0071 
## Wild_or_semi_wildWild or \nSemi-wild    0.1164  0.0603  1.9299  157  0.0554 
##                                         ci.lb   ci.ub 
## intrcpt                                0.0334  0.2082  ** 
## Wild_or_semi_wildWild or \nSemi-wild  -0.0027  0.2356   . 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_env1)
##    R2_marginal R2_conditional 
##     0.06031414     0.81997475
# orchard plot
p3 <- orchard_plot(mod_env1, mod = "Wild_or_semi_wild", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat) + scale_fill_manual(values = c("#D55E00", "#009E73")) +
    scale_colour_manual(values = c("#D55E00", "#009E73"))

p3

Controlled treatment (Controlled_treatments)

dat$Controlled_treatments <- factor(dat$Controlled_treatments, levels = c("No", "Yes"),
    labels = c("Not controlled", "Controlled"))

mod_con <- mod_func(formula = ~Controlled_treatments - 1)
summary(mod_con)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  14.0983  -28.1965  -18.1965   -2.9153  -17.7992   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0188  0.1372     22     no  Species_Latin 
## sigma^2.2  0.0116  0.1075     71     no          Study 
## sigma^2.3  0.0093  0.0967    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1173.2814, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 157) = 9.3003, p-val = 0.0002
## 
## Model Results:
## 
##                                      estimate      se    tval   df    pval​ 
## Controlled_treatmentsNot controlled    0.1135  0.0567  2.0004  157  0.0472 
## Controlled_treatmentsControlled        0.1982  0.0497  3.9914  157  0.0001 
##                                       ci.lb   ci.ub 
## Controlled_treatmentsNot controlled  0.0014  0.2256    * 
## Controlled_treatmentsControlled      0.1001  0.2964  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_con1 <- mod_func(formula = ~Controlled_treatments)
summary(mod_con1)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  14.0983  -28.1965  -18.1965   -2.9153  -17.7992   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0188  0.1372     22     no  Species_Latin 
## sigma^2.2  0.0116  0.1075     71     no          Study 
## sigma^2.3  0.0093  0.0967    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1173.2814, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 1.3925, p-val = 0.2398
## 
## Model Results:
## 
##                                  estimate      se    tval   df    pval    ci.lb​ 
## intrcpt                            0.1135  0.0567  2.0004  157  0.0472   0.0014 
## Controlled_treatmentsControlled    0.0848  0.0718  1.1800  157  0.2398  -0.0571 
##                                   ci.ub 
## intrcpt                          0.2256  * 
## Controlled_treatmentsControlled  0.2266    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_con1)
##    R2_marginal R2_conditional 
##     0.04331906     0.77499242
# orchard plot
p4 <- orchard_plot(mod_con1, mod = "Controlled_treatments", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat) + scale_fill_manual(values = c("#D55E00", "#009E73")) +
    scale_colour_manual(values = c("#D55E00", "#009E73"))

p4

Sham (Shamtreatment_moderator)

dat$Shamtreatment_moderator <- factor(dat$Shamtreatment_moderator, levels = c("No",
    "Yes"), labels = c("No sham", "Sham-controlled"))

mod_sham <- mod_func(formula = ~Shamtreatment_moderator - 1)
summary(mod_sham)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.7380  -27.4760  -17.4760   -2.1948  -17.0786   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0247  0.1572     22     no  Species_Latin 
## sigma^2.2  0.0107  0.1032     71     no          Study 
## sigma^2.3  0.0091  0.0953    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1226.7067, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 157) = 8.4280, p-val = 0.0003
## 
## Model Results:
## 
##                                         estimate      se    tval   df    pval​ 
## Shamtreatment_moderatorNo sham            0.1398  0.0465  3.0061  157  0.0031 
## Shamtreatment_moderatorSham-controlled    0.2050  0.0522  3.9250  157  0.0001 
##                                          ci.lb   ci.ub 
## Shamtreatment_moderatorNo sham          0.0479  0.2317   ** 
## Shamtreatment_moderatorSham-controlled  0.1019  0.3082  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_sham1 <- mod_func(formula = ~Shamtreatment_moderator)
summary(mod_sham1)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.7380  -27.4760  -17.4760   -2.1948  -17.0786   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0247  0.1572     22     no  Species_Latin 
## sigma^2.2  0.0107  0.1032     71     no          Study 
## sigma^2.3  0.0091  0.0953    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1226.7067, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 1.7290, p-val = 0.1905
## 
## Model Results:
## 
##                                         estimate      se    tval   df    pval​ 
## intrcpt                                   0.1398  0.0465  3.0061  157  0.0031 
## Shamtreatment_moderatorSham-controlled    0.0652  0.0496  1.3149  157  0.1905 
##                                           ci.lb   ci.ub 
## intrcpt                                  0.0479  0.2317  ** 
## Shamtreatment_moderatorSham-controlled  -0.0328  0.1632     
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_sham1)
##    R2_marginal R2_conditional 
##     0.01989385     0.79966912
# orchard plot
p5 <- orchard_plot(mod_sham, mod = "Shamtreatment_moderator", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat) + scale_fill_manual(values = c("#D55E00", "#009E73")) +
    scale_colour_manual(values = c("#D55E00", "#009E73"))

p5

Type of effect sizes (Effect_type)

dat$Effect_type <- factor(dat$Effect_type, levels = c("longevity", "mortality"),
    labels = c("Mean or meadian \nlongevity", "Mortality \n(%)"))

mod_eff <- mod_func(formula = ~Effect_type - 1)
summary(mod_eff)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.7440  -27.4881  -17.4881   -2.2068  -17.0907   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0167  0.1293     22     no  Species_Latin 
## sigma^2.2  0.0141  0.1188     71     no          Study 
## sigma^2.3  0.0090  0.0949    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1222.5851, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 157) = 9.4479, p-val = 0.0001
## 
## Model Results:
## 
##                                         estimate      se    tval   df    pval​ 
## Effect_typeMean or meadian \nlongevity    0.1222  0.0523  2.3363  157  0.0207 
## Effect_typeMortality \n(%)                0.1827  0.0430  4.2511  157  <.0001 
##                                          ci.lb   ci.ub 
## Effect_typeMean or meadian \nlongevity  0.0189  0.2255    * 
## Effect_typeMortality \n(%)              0.0978  0.2676  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# contrast
mod_eff1 <- mod_func(formula = ~Effect_type)
summary(mod_eff1)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.7440  -27.4881  -17.4881   -2.2068  -17.0907   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0167  0.1293     22     no  Species_Latin 
## sigma^2.2  0.0141  0.1188     71     no          Study 
## sigma^2.3  0.0090  0.0949    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1222.5851, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 1.2181, p-val = 0.2714
## 
## Model Results:
## 
##                             estimate      se    tval   df    pval    ci.lb​ 
## intrcpt                       0.1222  0.0523  2.3363  157  0.0207   0.0189 
## Effect_typeMortality \n(%)    0.0606  0.0549  1.1037  157  0.2714  -0.0478 
##                              ci.ub 
## intrcpt                     0.2255  * 
## Effect_typeMortality \n(%)  0.1689    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_eff1)
##    R2_marginal R2_conditional 
##     0.02261499     0.77904949
# orchard plot
p6 <- orchard_plot(mod_eff1, mod = "Effect_type", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat, cb = F) + scale_fill_manual(values = c("#D55E00",
    "#009E73")) + scale_colour_manual(values = c("#D55E00", "#009E73"))
p6

Matuarity (Maturity_at_treatment_ordinal)

mod_mat <- mod_func(formula = ~Maturity_at_treatment_ordinal)
summary(mod_mat)
## 
## Multivariate Meta-Analysis Model (k = 100; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  -5.1049   10.2099   20.2099   33.1347   20.8620   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0144  0.1199     18     no  Species_Latin 
## sigma^2.2  0.0282  0.1681     51     no          Study 
## sigma^2.3  0.0045  0.0673    100     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 98) = 516.0643, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 98) = 2.2526, p-val = 0.1366
## 
## Model Results:
## 
##                                estimate      se     tval  df    pval    ci.lb​ 
## intrcpt                          0.3615  0.1090   3.3159  98  0.0013   0.1452 
## Maturity_at_treatment_ordinal   -0.0440  0.0293  -1.5009  98  0.1366  -0.1022 
##                                 ci.ub 
## intrcpt                        0.5779  ** 
## Maturity_at_treatment_ordinal  0.0142     
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_mat)
##    R2_marginal R2_conditional 
##     0.04264234     0.90790792
# bubble plot
p7 <- bubble_plot(mod_mat, xlab = "Life-course stages", ylab = "lnRR (effect size)",
    mod = "Maturity_at_treatment_ordinal", data = dat, group = "Study", cb = F)

p7

Sex x Matuarity

# interaction with Sex
mod_sex_mat <- mod_func(formula = ~Sex * Maturity_at_treatment_ordinal)
summary(mod_sex_mat)
## 
## Multivariate Meta-Analysis Model (k = 100; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  -1.4599    2.9198   16.9198   34.8703   18.1926   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0096  0.0980     18     no  Species_Latin 
## sigma^2.2  0.0311  0.1764     51     no          Study 
## sigma^2.3  0.0029  0.0541    100     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 96) = 506.8281, p-val < .0001
## 
## Test of Moderators (coefficients 2:4):
## F(df1 = 3, df2 = 96) = 3.7971, p-val = 0.0127
## 
## Model Results:
## 
##                                        estimate      se     tval  df    pval​ 
## intrcpt                                  0.0273  0.1695   0.1614  96  0.8722 
## SexMale                                  0.5087  0.1965   2.5886  96  0.0111 
## Maturity_at_treatment_ordinal            0.0459  0.0446   1.0292  96  0.3060 
## SexMale:Maturity_at_treatment_ordinal   -0.1712  0.0579  -2.9586  96  0.0039 
##                                          ci.lb    ci.ub 
## intrcpt                                -0.3091   0.3638     
## SexMale                                 0.1186   0.8987   * 
## Maturity_at_treatment_ordinal          -0.0426   0.1344     
## SexMale:Maturity_at_treatment_ordinal  -0.2860  -0.0563  ** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_mat)
##    R2_marginal R2_conditional 
##     0.04264234     0.90790792
# different reference (gives whether male slope is significant)
mod_sex_mat1 <- mod_func(formula = ~relevel(Sex, ref = "Male") * Maturity_at_treatment_ordinal)
summary(mod_sex_mat1)
## 
## Multivariate Meta-Analysis Model (k = 100; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  -1.4599    2.9198   16.9198   34.8703   18.1926   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0096  0.0980     18     no  Species_Latin 
## sigma^2.2  0.0311  0.1764     51     no          Study 
## sigma^2.3  0.0029  0.0541    100     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 96) = 506.8281, p-val < .0001
## 
## Test of Moderators (coefficients 2:4):
## F(df1 = 3, df2 = 96) = 3.7971, p-val = 0.0127
## 
## Model Results:
## 
##                                                                 estimate​ 
## intrcpt                                                           0.5360 
## relevel(Sex, ref = "Male")Female                                 -0.5087 
## Maturity_at_treatment_ordinal                                    -0.1253 
## relevel(Sex, ref = "Male")Female:Maturity_at_treatment_ordinal    0.1712 
##                                                                     se     tval 
## intrcpt                                                         0.1252   4.2808 
## relevel(Sex, ref = "Male")Female                                0.1965  -2.5886 
## Maturity_at_treatment_ordinal                                   0.0399  -3.1390 
## relevel(Sex, ref = "Male")Female:Maturity_at_treatment_ordinal  0.0579   2.9586 
##                                                                 df    pval 
## intrcpt                                                         96  <.0001 
## relevel(Sex, ref = "Male")Female                                96  0.0111 
## Maturity_at_treatment_ordinal                                   96  0.0023 
## relevel(Sex, ref = "Male")Female:Maturity_at_treatment_ordinal  96  0.0039 
##                                                                   ci.lb 
## intrcpt                                                          0.2875 
## relevel(Sex, ref = "Male")Female                                -0.8987 
## Maturity_at_treatment_ordinal                                   -0.2045 
## relevel(Sex, ref = "Male")Female:Maturity_at_treatment_ordinal   0.0563 
##                                                                   ci.ub 
## intrcpt                                                          0.7846  *** 
## relevel(Sex, ref = "Male")Female                                -0.1186    * 
## Maturity_at_treatment_ordinal                                   -0.0461   ** 
## relevel(Sex, ref = "Male")Female:Maturity_at_treatment_ordinal   0.2860   ** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# bubble plot
p8 <- bubble_plot(mod_sex_mat, xlab = "Life-course stages", ylab = "lnRR (effect size)",
    mod = "Maturity_at_treatment_ordinal", group = "Study", data = dat, by = "Sex")

p8

Figure 1

p0/(p1 | p2) + plot_layout(nrow = 2, heights = c(2.5, 1)) + plot_annotation(tag_levels = "A")

Figure 2

(p3 | p4)/(p5 | p6)/(p7 | p8) + plot_layout(nrow = 3, heights = c(1, 1, 1.5)) + plot_annotation(tag_levels = "A")

Meta-regression: full model

Full model

# at least 10 in each group (sex * wild = male wild is too few - 4)

mod_full <- mod_func(formula = ~Sex_Gonads + Sex * Controlled_treatments + Wild_or_semi_wild +
    Sex * Maturity_at_treatment_ordinal)
summary(mod_full)
## 
## Multivariate Meta-Analysis Model (k = 100; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  -2.4213    4.8426   26.8426   54.5823   30.1426   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0180  0.1340     18     no  Species_Latin 
## sigma^2.2  0.0280  0.1672     51     no          Study 
## sigma^2.3  0.0040  0.0629    100     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 92) = 380.2741, p-val < .0001
## 
## Test of Moderators (coefficients 2:8):
## F(df1 = 7, df2 = 92) = 1.6012, p-val = 0.1449
## 
## Model Results:
## 
##                                          estimate      se     tval  df    pval​ 
## intrcpt                                   -0.0030  0.1977  -0.0150  92  0.9881 
## Sex_GonadsGonads not removed \n(female)    0.0017  0.0545   0.0307  92  0.9755 
## Sex_GonadsGonads removed \n(male)          0.6038  0.2410   2.5049  92  0.0140 
## Controlled_treatmentsControlled            0.0376  0.0925   0.4062  92  0.6855 
## Wild_or_semi_wildWild or \nSemi-wild      -0.0314  0.1042  -0.3011  92  0.7640 
## Maturity_at_treatment_ordinal              0.0537  0.0472   1.1376  92  0.2583 
## SexMale:Controlled_treatmentsControlled   -0.1057  0.1392  -0.7597  92  0.4494 
## SexMale:Maturity_at_treatment_ordinal     -0.1758  0.0602  -2.9231  92  0.0044 
##                                            ci.lb    ci.ub 
## intrcpt                                  -0.3956   0.3896     
## Sex_GonadsGonads not removed \n(female)  -0.1065   0.1099     
## Sex_GonadsGonads removed \n(male)         0.1250   1.0825   * 
## Controlled_treatmentsControlled          -0.1462   0.2214     
## Wild_or_semi_wildWild or \nSemi-wild     -0.2383   0.1756     
## Maturity_at_treatment_ordinal            -0.0401   0.1475     
## SexMale:Controlled_treatmentsControlled  -0.3821   0.1707     
## SexMale:Maturity_at_treatment_ordinal    -0.2953  -0.0564  ** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_full)
##    R2_marginal R2_conditional 
##      0.1285086      0.9309425

AIC model selection

# res_mod_full <- dredge(mod_full, trace=2)
res_mod_full <- dredge(mod_full, trace = 2)

saveRDS(res_mod_full, file = here("Rdata", "res_mod_full"))
res_mod_full <- readRDS(file = here("Rdata", "res_mod_full"))

# delta AIC = 2
res_mod_full2 <- subset(res_mod_full, delta <= 2)  #, recalc.weights=FALSE)

# the best model according to the delta 2
best2 <- mod_func(formula = ~Controlled_treatments + Wild_or_semi_wild)
# summary(best2)

# model varaged coeffisents
avg2 <- model.avg(res_mod_full2)
summary(avg2)  # similar to the orignal resulde
## 
## Call:
## model.avg(object = res_mod_full2)
## 
## Component model call: 
## rma.mv(yi = yi, V = V_matrix, mods = ~<4 unique rhs>, random = list(~1 
##      | Species_Latin, ~1 | Study, ~1 | Effect_ID), data = dat, test = t, 
##      sparse = TRUE, control = list(optimizer = "optim", optmethod = 
##      "Nelder-Mead"))
## 
## Component models: 
##        df logLik   AICc delta weight
## 2       5  14.84 -19.28  0.00   0.38
## (Null)  4  13.29 -18.32  0.96   0.24
## 12      6  15.25 -17.95  1.34   0.20
## 1       5  14.10 -17.80  1.48   0.18
## 
## Term codes: 
## Controlled_treatments     Wild_or_semi_wild 
##                     1                     2 
## 
## Model-averaged coefficients:  
## (full average) 
##                                      Estimate Std. Error z value Pr(>|z|)  
## intrcpt                               0.12316    0.05473   2.250   0.0244 *
## Wild_or_semi_wildYes                  0.06579    0.07279   0.904   0.3661  
## Controlled_treatmentsSham-controlled  0.02739    0.05755   0.476   0.6341  
##  
## (conditional average) 
##                                      Estimate Std. Error z value Pr(>|z|)  
## intrcpt                               0.12316    0.05473   2.250   0.0244 *
## Wild_or_semi_wildYes                  0.11342    0.06109   1.856   0.0634 .
## Controlled_treatmentsSham-controlled  0.07219    0.07412   0.974   0.3301  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# note controlling and wild-semi-wide is correlated: r = 0.34
# cor.test(as.numeric(dat$Controlled_treatments),as.numeric(dat$Wild_or_semi_wild))

Publication bais & sensitivity analysis

Funnel plot

# raw funnel plot funnel plot -
funnel(mod)

# residual funnel plot
funnel(best2)

Small-study effect: uni-moderaotor

dat$Effective_N <- 1/dat$Sample_size_sterilization + 1/dat$Sample_size_control

egger_uni <- mod_func(formula = ~sqrt(Effective_N))
# egger_uni2 <- mod_func(formula = ~ Effective_N)

summary(egger_uni)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  17.0315  -34.0630  -24.0630   -8.7818  -23.6657   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0197  0.1404     22     no  Species_Latin 
## sigma^2.2  0.0052  0.0722     71     no          Study 
## sigma^2.3  0.0120  0.1095    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1257.7807, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 9.4610, p-val = 0.0025
## 
## Model Results:
## 
##                    estimate      se    tval   df    pval    ci.lb   ci.ub    ​ 
## intrcpt              0.0468  0.0531  0.8825  157  0.3788  -0.0580  0.1517     
## sqrt(Effective_N)    0.6238  0.2028  3.0759  157  0.0025   0.2232  1.0244  ** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# egger_uni2 <- mod_func(formula = ~ Effective_N) summary(egger_uni2)

Decline effect (time lag bias): uni-moderator

dat$Year <- as.numeric(str_extract(as.character(dat$Study), "[:digit:][:digit:][:digit:][:digit:]"))

decline_uni <- mod_func(formula = ~Year)
summary(decline_uni)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  13.2140  -26.4280  -16.4280   -1.1468  -16.0307   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0176  0.1326     22     no  Species_Latin 
## sigma^2.2  0.0134  0.1159     71     no          Study 
## sigma^2.3  0.0091  0.0956    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 157) = 1335.5062, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 157) = 0.0138, p-val = 0.9065
## 
## Model Results:
## 
##          estimate      se     tval   df    pval    ci.lb   ci.ub   ​ 
## intrcpt    0.4684  2.6079   0.1796  157  0.8577  -4.6827  5.6196    
## Year      -0.0002  0.0013  -0.1176  157  0.9065  -0.0027  0.0024    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Mulit-moderator model for both the small-study & decline effects

dat$cYear <- scale(dat$Year, scale = F)

pub_bias <- mod_func(formula = ~Effective_N + Controlled_treatments + Wild_or_semi_wild +
    cYear)

summary(pub_bias)
## 
## Multivariate Meta-Analysis Model (k = 159; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  18.6361  -37.2721  -21.2721    3.0235  -20.2790   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0184  0.1358     22     no  Species_Latin 
## sigma^2.2  0.0096  0.0979     71     no          Study 
## sigma^2.3  0.0093  0.0967    159     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 154) = 1072.0218, p-val < .0001
## 
## Test of Moderators (coefficients 2:5):
## F(df1 = 4, df2 = 154) = 3.0262, p-val = 0.0195
## 
## Model Results:
## 
##                                       estimate      se     tval   df    pval​ 
## intrcpt                                 0.0570  0.0588   0.9699  154  0.3336 
## Effective_N                             1.3047  0.4609   2.8312  154  0.0053 
## Controlled_treatmentsControlled         0.0149  0.0742   0.2014  154  0.8406 
## Wild_or_semi_wildWild or \nSemi-wild    0.1000  0.0621   1.6093  154  0.1096 
## cYear                                  -0.0004  0.0013  -0.3509  154  0.7261 
##                                         ci.lb   ci.ub 
## intrcpt                               -0.0591  0.1732     
## Effective_N                            0.3943  2.2152  ** 
## Controlled_treatmentsControlled       -0.1317  0.1616     
## Wild_or_semi_wildWild or \nSemi-wild  -0.0228  0.2228     
## cYear                                 -0.0029  0.0021     
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
prep1 <- qdrg(object = pub_bias, data = dat, at = list(Effective_N = 0, cYear = 0))

# this seems the most appropriate to report equal averaging
res1 <- emmeans(prep1, specs = "1", df = pub_bias$ddf, weights = "equal")
res1
##  1       emmean    SE  df lower.CL upper.CL
##  overall  0.114 0.045 154   0.0256    0.203
## 
## Results are averaged over the levels of: Controlled_treatments, Wild_or_semi_wild 
## Degrees-of-freedom method: user-specified 
## Confidence level used: 0.95
# proportional to what we have
res2 <- emmeans(prep1, specs = "1", df = pub_bias$ddf, weights = "prop")
res2
##  1       emmean     SE  df lower.CL upper.CL
##  overall 0.0902 0.0441 154  0.00298    0.177
## 
## Results are averaged over the levels of: Controlled_treatments, Wild_or_semi_wild 
## Degrees-of-freedom method: user-specified 
## Confidence level used: 0.95

Leave-one-study-out analysis

# The function for leave-one-study-out

dat$Study <- as.factor(dat$Study)

LeaveOneOut_effectsize <- list()
for (i in 1:length(levels(dat$Study))) {
    dat1 <- dat[dat$Study != levels(dat$Study)[i], ]
    V_matrix <- impute_covariance_matrix(vi = dat1$vi, cluster = dat1$Shared_control,
        r = 0.5)

    LeaveOneOut_effectsize[[i]] <- rma.mv(yi, V = V_matrix, random = list(~1 | Species_Latin,
        ~1 | Study, ~1 | Effect_ID), test = "t", sparse = TRUE, control = list(optimizer = "optim",
        optmethod = "BFGS"), data = dat1)
}


# writing function for extracting est, ci.lb, and ci.ub from all models
est.func <- function(mod) {
    df <- data.frame(est = mod$b, lower = mod$ci.lb, upper = mod$ci.ub)
    return(df)
}

# using dplyr to form data frame
MA_LOO <- lapply(LeaveOneOut_effectsize, function(x) est.func(x)) %>%
    bind_rows %>%
    mutate(left_out = levels(dat$Study))


saveRDS(MA_LOO, file = here("Rdata", "MA_LOO.rds"))
# telling ggplot to stop reordering factors
MA_LOO <- readRDS(file = here("Rdata", "MA_LOO.rds"))

MA_LOO$left_out <- as.factor(MA_LOO$left_out)
MA_LOO$left_out <- factor(MA_LOO$left_out, levels = MA_LOO$left_out)


# plotting
leaveoneout_E <- ggplot(MA_LOO) + geom_hline(yintercept = 0, lty = 2, lwd = 1) +
    geom_hline(yintercept = mod$ci.lb, lty = 3, lwd = 0.75, colour = "black") + geom_hline(yintercept = mod$b,
    lty = 1, lwd = 0.75, colour = "black") + geom_hline(yintercept = mod$ci.ub, lty = 3,
    lwd = 0.75, colour = "black") + geom_pointrange(aes(x = left_out, y = est, ymin = lower,
    ymax = upper)) + xlab("Study left out") + ylab("lnRR, 95% CI") + coord_flip() +
    theme(panel.grid.minor = element_blank()) + theme_bw() + theme(panel.grid.major = element_blank()) +
    theme(panel.grid.minor.x = element_blank()) + theme(axis.text.y = element_text(size = 6))

leaveoneout_E

Meta-analysis: rodent data only

We note that the analyses below using rodent data are post-host analyses.

Main model

# shared control this does not seem to work V_matrix <- make_VCV_matrix(dat, V=
# 'vi', cluster = 'Shared_control', obs = 'Effect_ID')
V_matrix <- impute_covariance_matrix(vi = rdat$vi, cluster = rdat$Shared_control,
    r = 0.5)

# meta-analysis basics phylo model
rmod <- rma.mv(yi, V = V_matrix, mod = ~1, random = list(~1 | Species_Latin, ~1 |
    Study, ~1 | Effect_ID), data = rdat, test = "t", sparse = TRUE, control = list(optimizer = "optim",
    optmethod = "Nelder-Mead"))
summary(rmod)
## 
## Multivariate Meta-Analysis Model (k = 40; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  23.9404  -47.8807  -39.8807  -33.2265  -38.7043   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0018  0.0423      3     no  Species_Latin 
## sigma^2.2  0.0089  0.0941     23     no          Study 
## sigma^2.3  0.0027  0.0522     40     no      Effect_ID 
## 
## Test for Heterogeneity:
## Q(df = 39) = 176.6345, p-val < .0001
## 
## Model Results:
## 
## estimate      se    tval  df    pval    ci.lb   ci.ub   ​ 
##   0.0650  0.0380  1.7128  39  0.0947  -0.0118  0.1418  . 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
i2_ml(rmod)
##         I2_Total I2_Species_Latin         I2_Study     I2_Effect_ID 
##         86.13553         11.50770         57.04649         17.58134
# visualizing the result
orchard_plot(rmod, xlab = "log response ratio (lnRR)", group = "Study", data = rdat)

Sex difference (Sex)

rmod_sex <- rma.mv(yi, V = V_matrix, mod = ~Sex, random = list(~1 | Species_Latin,
    ~1 | Study, ~1 | Effect_ID), data = rdat, test = "t", sparse = TRUE, control = list(optimizer = "optim",
    optmethod = "Nelder-Mead"))
summary(rmod_sex)
## 
## Multivariate Meta-Analysis Model (k = 40; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  22.6144  -45.2289  -35.2289  -27.0409  -33.3539   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0017  0.0414      3     no  Species_Latin 
## sigma^2.2  0.0088  0.0936     23     no          Study 
## sigma^2.3  0.0029  0.0543     40     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 38) = 164.4126, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 38) = 0.0501, p-val = 0.8241
## 
## Model Results:
## 
##          estimate      se    tval  df    pval    ci.lb   ci.ub   ​ 
## intrcpt    0.0617  0.0403  1.5290  38  0.1345  -0.0200  0.1434    
## SexMale    0.0074  0.0333  0.2238  38  0.8241  -0.0599  0.0748    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(rmod_sex)
##    R2_marginal R2_conditional 
##    0.001033388    0.780759740
# visualizing the result
orchard_plot(rmod_sex, mod = "Sex", xlab = "log response ratio (lnRR)", group = "Study",
    data = rdat)

Maturity (in days)

# two more type of ages
rdat$lnAge_Trt <- log(rdat$Age_at_treatment_continuous)
rdat$Age_ratio <- (rdat$Age_at_treatment_continuous/rdat$Day_to_matuarity)
rdat$lnAge_ratio <- log(rdat$Age_at_treatment_continuous/rdat$Day_to_matuarity)


# just pure effect
rmod_mat <- rma.mv(yi, V = V_matrix, mod = ~lnAge_ratio * Sex, random = list(~1 |
    Species_Latin, ~1 | Study, ~1 | Effect_ID), data = rdat, test = "t", sparse = TRUE,
    control = list(optimizer = "optim", optmethod = "Nelder-Mead"))
summary(rmod_mat)
## 
## Multivariate Meta-Analysis Model (k = 40; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  21.8680  -43.7360  -29.7360  -18.6514  -25.7360   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0006  0.0237      3     no  Species_Latin 
## sigma^2.2  0.0108  0.1037     23     no          Study 
## sigma^2.3  0.0016  0.0396     40     no      Effect_ID 
## 
## Test for Residual Heterogeneity:
## QE(df = 36) = 147.1755, p-val < .0001
## 
## Test of Moderators (coefficients 2:4):
## F(df1 = 3, df2 = 36) = 1.7831, p-val = 0.1678
## 
## Model Results:
## 
##                      estimate      se     tval  df    pval    ci.lb   ci.ub   ​ 
## intrcpt                0.0590  0.0347   1.7003  36  0.0977  -0.0114  0.1294  . 
## lnAge_ratio           -0.0192  0.0152  -1.2562  36  0.2171  -0.0501  0.0118    
## SexMale                0.0037  0.0327   0.1137  36  0.9101  -0.0626  0.0701    
## lnAge_ratio:SexMale   -0.0102  0.0201  -0.5056  36  0.6162  -0.0510  0.0307    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(rmod_mat)
##    R2_marginal R2_conditional 
##     0.09196419     0.88970527
# visualizing the result
bubble_plot(rmod_mat, mod = "lnAge_ratio", group = "Study", data = rdat, by = "Sex",
    xlab = "ln(Treatment Day/Day to sexual maturity) [Rodent data only]", ylab = "ln(Response ratio)")

Contrasting sexes: full data

Calcuating aboslute effect sizes

# full data
dat_long <- dat_long %>%
    mutate(abs_yi = folded_mu(yi, vi), abs_vi = folded_v(yi, vi))

# partial data
sdat_long <- sdat_long %>%
    mutate(abs_yi = folded_mu(yi, vi), abs_vi = folded_v(yi, vi))

Comparing M/F vs. M\(\star\)/F or M/F\(\star\)

# variance covariance matrix
V_matrix_long <- impute_covariance_matrix(vi = dat_long$vi, cluster = dat_long$Shared_control,
    r = 0.5)

# we can run - some heteroscad models this does not improve model
mod_comp <- rma.mv(yi, V = V_matrix_long, mod = ~Comp_type - 1, random = list(~1 |
    Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = dat_long, test = "t")
summary(mod_comp)
## 
## Multivariate Meta-Analysis Model (k = 170; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##   4.4256   -8.8513    3.1487   21.8925    3.6705   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0201  0.1417     15     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     34     no          Study 
## sigma^2.3  0.0000  0.0000     85     no      Effect_ID 
## sigma^2.4  0.0229  0.1513    170     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 168) = 1521.8257, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 168) = 0.1197, p-val = 0.8873
## 
## Model Results:
## 
##                         estimate      se    tval   df    pval    ci.lb   ci.ub​ 
## Comp_typeboth_normal      0.0190  0.0463  0.4102  168  0.6822  -0.0724  0.1104 
## Comp_typeone_castrated    0.0078  0.0459  0.1709  168  0.8645  -0.0827  0.0984 
##  
## Comp_typeboth_normal 
## Comp_typeone_castrated 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_comp)
##    R2_marginal R2_conditional 
##   0.0007280653   0.4676277813
# visualizing the result
orchard_plot(mod_comp, mod = "Comp_type", xlab = "log response ratio (lnRR)", group = "Study",
    data = dat_long, cb = F)

Separating by sex (M/F vs. M\(\star\)/F or M/F\(\star\))

# naming factors dat_long$Comp_type <- factor(dat_long$Comp_type, levels =
# c('one_castrated', 'both_normal'), labels = c('one_castrated', 'both_normal')
# )

dat_long$Comp_type_Sex1 <- factor(dat_long$Comp_type_Sex, levels = c("one_castrated_Male",
    "both_normal_Male", "one_castrated_Female", "both_normal_Female"), labels = c("Male sterlized/\nFemale normal",
    "Male normal/\nFemale normal (B)", "Male normal/\nFemale sterlized", "Male normal/\nFemale normal (A)"))

mod_comp_sex <- rma.mv(yi, V = V_matrix_long, mod = ~Comp_type_Sex1 - 1, random = list(~1 |
    Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = dat_long, test = "t")
summary(mod_comp_sex)
## 
## Multivariate Meta-Analysis Model (k = 170; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  23.2985  -46.5969  -30.5969   -5.7010  -29.6797   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0200  0.1415     15     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     34     no          Study 
## sigma^2.3  0.0000  0.0000     85     no      Effect_ID 
## sigma^2.4  0.0146  0.1207    170     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 166) = 1177.6380, p-val < .0001
## 
## Test of Moderators (coefficients 1:4):
## F(df1 = 4, df2 = 166) = 11.7696, p-val < .0001
## 
## Model Results:
## 
##                                                estimate      se     tval   df​ 
## Comp_type_Sex1Male sterlized/\nFemale normal     0.1356  0.0489   2.7708  166 
## Comp_type_Sex1Male normal/\nFemale normal (B)   -0.0103  0.0494  -0.2088  166 
## Comp_type_Sex1Male normal/\nFemale sterlized    -0.1036  0.0484  -2.1390  166 
## Comp_type_Sex1Male normal/\nFemale normal (A)    0.0545  0.0489   1.1127  166 
##                                                  pval    ci.lb    ci.ub 
## Comp_type_Sex1Male sterlized/\nFemale normal   0.0062   0.0390   0.2322  ** 
## Comp_type_Sex1Male normal/\nFemale normal (B)  0.8348  -0.1080   0.0873     
## Comp_type_Sex1Male normal/\nFemale sterlized   0.0339  -0.1992  -0.0080   * 
## Comp_type_Sex1Male normal/\nFemale normal (A)  0.2675  -0.0422   0.1511     
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_comp_sex)
##    R2_marginal R2_conditional 
##      0.1828964      0.6560378
d0 <- orchard_plot(mod_comp_sex, mod = "Comp_type_Sex1", xlab = "log response ratio (lnRR)",
    group = "Study", data = dat_long, cb = T, angle = 90) + geom_vline(xintercept = 2.5,
    size = 0.2)

d0

Absolute effect size comparaion (M/F or F/M vs. M\(\star\)/F or F\(\star\)/M)

# VCV matrix
abs_V_matrix_long <- impute_covariance_matrix(vi = dat_long$abs_vi, cluster = dat_long$Shared_control,
    r = 0.5)

abs_mod_comp_sex0 <- rma.mv(abs_yi, V = abs_V_matrix_long, mod = ~Comp_type_Sex1,
    random = list(~1 | Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = dat_long,
    test = "t")
summary(abs_mod_comp_sex0)
## 
## Multivariate Meta-Analysis Model (k = 170; method: REML)
## 
##    logLik   Deviance        AIC        BIC       AICc  ​ 
##   92.6456  -185.2912  -169.2912  -144.3953  -168.3740   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0050  0.0707     15     no  Species_Latin 
## sigma^2.2  0.0011  0.0337     34     no          Study 
## sigma^2.3  0.0000  0.0000     85     no      Effect_ID 
## sigma^2.4  0.0048  0.0696    170     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 166) = 947.2720, p-val < .0001
## 
## Test of Moderators (coefficients 2:4):
## F(df1 = 3, df2 = 166) = 9.5512, p-val < .0001
## 
## Model Results:
## 
##                                                estimate      se     tval   df​ 
## intrcpt                                          0.1555  0.0288   5.3956  166 
## Comp_type_Sex1Male normal/\nFemale normal (B)    0.0113  0.0226   0.5023  166 
## Comp_type_Sex1Male normal/\nFemale sterlized     0.0973  0.0269   3.6187  166 
## Comp_type_Sex1Male normal/\nFemale normal (A)   -0.0092  0.0269  -0.3430  166 
##                                                  pval    ci.lb   ci.ub 
## intrcpt                                        <.0001   0.0986  0.2124  *** 
## Comp_type_Sex1Male normal/\nFemale normal (B)  0.6161  -0.0332  0.0559      
## Comp_type_Sex1Male normal/\nFemale sterlized   0.0004   0.0442  0.1504  *** 
## Comp_type_Sex1Male normal/\nFemale normal (A)  0.7320  -0.0624  0.0440      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
abs_mod_comp_sex <- rma.mv(abs_yi, V = abs_V_matrix_long, mod = ~Comp_type_Sex1 -
    1, random = list(~1 | Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = dat_long,
    test = "t")
summary(abs_mod_comp_sex)
## 
## Multivariate Meta-Analysis Model (k = 170; method: REML)
## 
##    logLik   Deviance        AIC        BIC       AICc  ​ 
##   92.6456  -185.2912  -169.2912  -144.3953  -168.3740   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0050  0.0707     15     no  Species_Latin 
## sigma^2.2  0.0011  0.0337     34     no          Study 
## sigma^2.3  0.0000  0.0000     85     no      Effect_ID 
## sigma^2.4  0.0048  0.0696    170     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 166) = 947.2720, p-val < .0001
## 
## Test of Moderators (coefficients 1:4):
## F(df1 = 4, df2 = 166) = 20.6516, p-val < .0001
## 
## Model Results:
## 
##                                                estimate      se    tval   df​ 
## Comp_type_Sex1Male sterlized/\nFemale normal     0.1555  0.0288  5.3956  166 
## Comp_type_Sex1Male normal/\nFemale normal (B)    0.1668  0.0293  5.7011  166 
## Comp_type_Sex1Male normal/\nFemale sterlized     0.2528  0.0289  8.7427  166 
## Comp_type_Sex1Male normal/\nFemale normal (A)    0.1462  0.0288  5.0751  166 
##                                                  pval   ci.lb   ci.ub 
## Comp_type_Sex1Male sterlized/\nFemale normal   <.0001  0.0986  0.2124  *** 
## Comp_type_Sex1Male normal/\nFemale normal (B)  <.0001  0.1090  0.2246  *** 
## Comp_type_Sex1Male normal/\nFemale sterlized   <.0001  0.1957  0.3098  *** 
## Comp_type_Sex1Male normal/\nFemale normal (A)  <.0001  0.0893  0.2031  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(abs_mod_comp_sex)
##    R2_marginal R2_conditional 
##      0.1450346      0.6228585
# visualizing results
d1 <- orchard_plot(abs_mod_comp_sex, mod = "Comp_type_Sex1", xlab = "absolute log response ratio (lnRR)",
    group = "Study", data = dat_long, cb = T, angle = 90) + geom_vline(xintercept = 2.5,
    size = 0.2)

d1

Contrasting M/F and M/F\(\star\)

# female
female_dat_log <- dat_long %>%
    filter(Sex == "Female")
f_dat_log <- female_dat_log %>%
    group_by(Effect_ID) %>%
    summarise(yi2 = abs_yi[2] - abs_yi[1], vi2 = abs_vi[1] + abs_vi[2] - 0.5 * sqrt(abs_vi[1] *
        abs_vi[2]), Species_Latin = Species_Latin[1], Study = Study[1], Shared_control = Shared_control[1])

# variance covariance matrix
V_matrix_long1 <- impute_covariance_matrix(vi = f_dat_log$vi2, cluster = f_dat_log$Shared_control,
    r = 0.5)

# we can run - some heteroscad models this does not improve model
f_mod_long <- rma.mv(yi2, V = V_matrix_long1, random = list(~1 | Species_Latin, ~1 |
    Study, ~1 | Effect_ID), data = f_dat_log, test = "t")
summary(f_mod_long)
## 
## Multivariate Meta-Analysis Model (k = 44; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  23.2097  -46.4193  -38.4193  -31.3745  -37.3667   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0045  0.0672     13     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     28     no          Study 
## sigma^2.3  0.0035  0.0595     44     no      Effect_ID 
## 
## Test for Heterogeneity:
## Q(df = 43) = 168.9263, p-val < .0001
## 
## Model Results:
## 
## estimate      se    tval  df    pval   ci.lb   ci.ub    ​ 
##   0.0904  0.0320  2.8227  43  0.0072  0.0258  0.1549  ** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
i2_ml(f_mod_long)
##         I2_Total I2_Species_Latin         I2_Study     I2_Effect_ID 
##     7.053045e+01     3.952129e+01     4.435228e-07     3.100916e+01
# Pair figures
d2 <- ggplot(female_dat_log, aes(x = Comp_type, y = abs_yi)) + geom_point(aes(size = sqrt(1/abs_vi),
    col = Comp_type), alpha = 0.5) + geom_line(aes(group = Effect_ID), alpha = 0.5) +
    labs(y = "absolute log response ratio (lnRR)", x = "", size = "Precision (1/SE)") +
    scale_x_discrete(labels = c(one_castrated = "Male normal/\nFemale sterlized",
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ both_normal
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ =
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ "Male
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ normal/\nFemale
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ normal"))
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ +
        both_normal = "Male normal/\nFemale normal")) + #xlim(c('one_castrated','both_normal'))+ #xlim(c('one_castrated','both_normal'))+
ylim(0, 1.25) + scale_color_manual(values = c("#DDCC77", "#117733")) + coord_flip() +
    theme_bw() + guides(colour = "none") + theme(legend.position = c(1, 0), legend.justification = c(1,
    0)) + theme(legend.title = element_text(size = 9)) + theme(legend.direction = "horizontal") +
    theme(legend.background = element_blank()) + theme(axis.text.y = element_text(size = 10,
    colour = "black", hjust = 0.5, angle = 90))

d2
d3 <- orchard_plot(f_mod_long, xlab = "absolute log response ratio (lnRR)", group = "Study",
    data = f_dat_log, cb = F, angle = 90) + scale_fill_manual(values = "#999933") +
    scale_colour_manual(values = "#999933") + scale_x_discrete(labels = "Male normal/Female sterlized vs. \nMale normal/Female normal") +
    ylim(-0.9, 0.5)
d3

Contrasting M/F and M\(\star\)/F

# pair figure male
male_dat_log <- dat_long %>%
    filter(Sex == "Male")

m_dat_log <- male_dat_log %>%
    group_by(Effect_ID) %>%
    summarise(yi2 = abs_yi[2] - abs_yi[1], vi2 = abs_vi[1] + abs_vi[2] - 0.5 * sqrt(abs_vi[1] *
        abs_vi[2]), Species_Latin = Species_Latin[1], Study = Study[1], Shared_control = Shared_control[1])

# variance covariance matrix
V_matrix_long2 <- impute_covariance_matrix(vi = m_dat_log$vi2, cluster = m_dat_log$Shared_control,
    r = 0.5)

# we can run - some hetero-scad models this does not improve model
m_mod_long <- rma.mv(yi2, V = V_matrix_long2, random = list(~1 | Species_Latin, ~1 |
    Study, ~1 | Effect_ID), data = m_dat_log, test = "t")
summary(m_mod_long)
## 
## Multivariate Meta-Analysis Model (k = 41; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  11.4025  -22.8051  -14.8051   -8.0495  -13.6622   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0234  0.1530     12     no  Species_Latin 
## sigma^2.2  0.0002  0.0148     28     no          Study 
## sigma^2.3  0.0021  0.0454     41     no      Effect_ID 
## 
## Test for Heterogeneity:
## Q(df = 40) = 105.9507, p-val < .0001
## 
## Model Results:
## 
## estimate      se     tval  df    pval    ci.lb   ci.ub   ​ 
##  -0.0123  0.0531  -0.2307  40  0.8188  -0.1197  0.0951    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
i2_ml(m_mod_long)
##         I2_Total I2_Species_Latin         I2_Study     I2_Effect_ID 
##       93.3494808       85.0605985        0.7915758        7.4973065
d4 <- ggplot(male_dat_log, aes(x = Comp_type, y = abs_yi)) + geom_point(aes(size = sqrt(1/abs_vi),
    col = Comp_type), alpha = 0.5) + geom_line(aes(group = Effect_ID), alpha = 0.5) +
    labs(y = "absolute log response ratio (lnRR)", x = "", size = "Precision (1/SE)") +
    scale_x_discrete(labels = c(one_castrated = "Male sterlized/\nFemale normal",
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + both_normal
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + =
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + "Male
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + normal/\nFemale
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + normal"))
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + +
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + ylim(0,
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + 1.25)
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + +
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + #coord_cartesian(xlim
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + =
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + c(0.5,
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + 2.5))
        both_normal = "Male normal/\nFemale normal")) + ylim(0, 1.25) + #coord_cartesian(xlim = c(0.5, 2.5)) + +
scale_color_manual(values = c("#88CCEE", "#CC6677")) + coord_flip() + theme_bw() +
    guides(colour = "none") + theme(legend.position = c(1, 0), legend.justification = c(1,
    0)) + theme(legend.title = element_text(size = 9)) + theme(legend.direction = "horizontal") +
    theme(legend.background = element_blank()) + theme(axis.text.y = element_text(size = 10,
    colour = "black", hjust = 0.5, angle = 90))

d4
d5 <- orchard_plot(m_mod_long, xlab = "absolute log response ratio (lnRR)", group = "Study",
    data = m_dat_log, cb = F, angle = 90) + scale_fill_manual(values = "#332288") +
    scale_colour_manual(values = "#332288") + scale_x_discrete(labels = "Male sterlized/Female normal vs. \nMale normal/Female normal") +
    ylim(-0.9, 0.5)

d5

Figure 4

patch <- d0 + d1 + plot_layout()

patch + plot_annotation(tag_levels = "A")

Figure S1

Related figures

patch2 <- (d2/d4) | (d3/d5) + plot_layout()

patch2 + plot_annotation(tag_levels = "A")

Contrasting sexes: all-combination data

Comparing M/F vs. M\(\star\)/F\(\star\)

# naming factor
sdat_long$Comp_type <- factor(sdat_long$Comp_type, levels = c("both_castrated", "both_normal"),
    labels = c("Male sterlized/\nFemale sterlized", "Male normal/\nFemale normal"))

# VCV matrix
V_matrix_long <- impute_covariance_matrix(vi = sdat_long$vi, cluster = sdat_long$Shared_control,
    r = 0.5)

# correlaiton matrix for phylogeny tree <-
# read.tree(here('data/tree_rotl.tre')) tree <- compute.brlen(tree) cor_tree <-
# vcv(tree, corr = TRUE)

# without heteroscedasticity
mod_comp2 <- rma.mv(yi, V = V_matrix_long, mod = ~Comp_type - 1, random = list(~1 |
    Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = sdat_long, test = "t")
summary(mod_comp2)
## 
## Multivariate Meta-Analysis Model (k = 64; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  24.7648  -49.5296  -37.5296  -24.7668  -36.0023   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0125  0.1118     10     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     25     no          Study 
## sigma^2.3  0.0033  0.0571     32     no      Effect_ID 
## sigma^2.4  0.0154  0.1242     64     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 62) = 2017.0006, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 62) = 0.1994, p-val = 0.8197
## 
## Model Results:
## 
##                                             estimate      se     tval  df​ 
## Comp_typeMale sterlized/\nFemale sterlized   -0.0104  0.0482  -0.2156  62 
## Comp_typeMale normal/\nFemale normal         -0.0264  0.0482  -0.5470  62 
##                                               pval    ci.lb   ci.ub 
## Comp_typeMale sterlized/\nFemale sterlized  0.8300  -0.1067  0.0860    
## Comp_typeMale normal/\nFemale normal        0.5863  -0.1227  0.0700    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# without heteroscedasticity
mod_comp2b <- rma.mv(yi, V = V_matrix_long, mod = ~Comp_type, random = list(~1 |
    Species_Latin, ~1 | Study, ~1 | Effect_ID, ~1 | Obs), data = sdat_long, test = "t")
summary(mod_comp2b)
## 
## Multivariate Meta-Analysis Model (k = 64; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  24.7648  -49.5296  -37.5296  -24.7668  -36.0023   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0125  0.1118     10     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     25     no          Study 
## sigma^2.3  0.0033  0.0571     32     no      Effect_ID 
## sigma^2.4  0.0154  0.1242     64     no            Obs 
## 
## Test for Residual Heterogeneity:
## QE(df = 62) = 2017.0006, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 62) = 0.2342, p-val = 0.6301
## 
## Model Results:
## 
##                                       estimate      se     tval  df    pval​ 
## intrcpt                                -0.0104  0.0482  -0.2156  62  0.8300 
## Comp_typeMale normal/\nFemale normal   -0.0160  0.0330  -0.4839  62  0.6301 
##                                         ci.lb   ci.ub 
## intrcpt                               -0.1067  0.0860    
## Comp_typeMale normal/\nFemale normal  -0.0820  0.0500    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_comp2b)
##    R2_marginal R2_conditional 
##    0.002076156    0.506405183
# with heteroscedasticity
mod_comp2c <- rma.mv(yi, V = V_matrix_long, mod = ~Comp_type, random = list(~1 |
    Species_Latin, ~1 | Study, ~Comp_type | Effect_ID), rho = 0, struct = "HCS",
    data = sdat_long, test = "t")
summary(mod_comp2c)
## 
## Multivariate Meta-Analysis Model (k = 64; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  30.3689  -60.7377  -48.7377  -35.9749  -47.2105   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0057  0.0756     10     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     25     no          Study 
## 
## outer factor: Effect_ID (nlvls = 32)
## inner factor: Comp_type (nlvls = 2)
## 
##             estim    sqrt  k.lvl  fixed                              level 
## tau^2.1    0.0058  0.0763     32     no  Male sterlized/\nFemale sterlized 
## tau^2.2    0.0343  0.1851     32     no        Male normal/\nFemale normal 
## rho        0.0000                   yes                                    
## 
## Test for Residual Heterogeneity:
## QE(df = 62) = 2017.0006, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 62) = 0.1620, p-val = 0.6887
## 
## Model Results:
## 
##                                       estimate      se     tval  df    pval​ 
## intrcpt                                -0.0231  0.0330  -0.7005  62  0.4862 
## Comp_typeMale normal/\nFemale normal   -0.0150  0.0374  -0.4025  62  0.6887 
##                                         ci.lb   ci.ub 
## intrcpt                               -0.0889  0.0428    
## Comp_typeMale normal/\nFemale normal  -0.0897  0.0596    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Comparing models with and without heteroscedasticity
AIC(mod_comp2, mod_comp2c)
##            df       AIC
## mod_comp2   6 -37.52956
## mod_comp2c  6 -48.73773
# visualizing results
f1 <- orchard_plot(mod_comp2c, mod = "Comp_type", xlab = "log response ratio (lnRR)",
    group = "Study", data = sdat_long, angle = 90) + scale_fill_manual(values = c("#D55E00",
    "#009E73")) + scale_colour_manual(values = c("#D55E00", "#009E73"))

f1

Absolute effect size comparaion (M/F vs. M\(\star\)/F\(\star\))

# VCV matrix
abs_V_matrix_long <- impute_covariance_matrix(vi = sdat_long$abs_vi, cluster = sdat_long$Shared_control, r = 0.5)


# with heteroscedasticity
mod_comp3 <-  rma.mv(abs_yi, V = abs_V_matrix_long, 
                     mod = ~ Comp_type - 1, 
                     random = list( ~1|Species_Latin, ~1|Study, ~Comp_type|Effect_ID),
                    rho = 0, struct = "HCS",
                     data = sdat_long, test = "t")
summary(mod_comp3) 
## 
## Multivariate Meta-Analysis Model (k = 64; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  46.7119  -93.4239  -81.4239  -68.6611  -79.8966   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0008  0.0283     10     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     25     no          Study 
## 
## outer factor: Effect_ID (nlvls = 32)
## inner factor: Comp_type (nlvls = 2)
## 
##             estim    sqrt  k.lvl  fixed                              level 
## tau^2.1    0.0029  0.0540     32     no  Male sterlized/\nFemale sterlized 
## tau^2.2    0.0256  0.1600     32     no        Male normal/\nFemale normal 
## rho        0.0000                   yes                                    
## 
## Test for Residual Heterogeneity:
## QE(df = 62) = 1423.9437, p-val < .0001
## 
## Test of Moderators (coefficients 1:2):
## F(df1 = 2, df2 = 62) = 18.2633, p-val < .0001
## 
## Model Results:
## 
##                                             estimate      se    tval  df​ 
## Comp_typeMale sterlized/\nFemale sterlized    0.0844  0.0170  4.9548  62 
## Comp_typeMale normal/\nFemale normal          0.1547  0.0322  4.8113  62 
##                                               pval   ci.lb   ci.ub 
## Comp_typeMale sterlized/\nFemale sterlized  <.0001  0.0503  0.1184  *** 
## Comp_typeMale normal/\nFemale normal        <.0001  0.0904  0.2190  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# with heteroscedasticity
mod_comp3b <-  rma.mv(abs_yi, V = abs_V_matrix_long, 
                      mod = ~ Comp_type, 
                      random = list( ~1|Species_Latin, ~1|Study, ~Comp_type|Effect_ID),
                      rho = 0, struct = "HCS",
                      data = sdat_long, test = "t")
summary(mod_comp3b) 
## 
## Multivariate Meta-Analysis Model (k = 64; method: REML)
## 
##   logLik  Deviance       AIC       BIC      AICc  ​ 
##  46.7119  -93.4239  -81.4239  -68.6611  -79.8966   
## 
## Variance Components:
## 
##             estim    sqrt  nlvls  fixed         factor 
## sigma^2.1  0.0008  0.0283     10     no  Species_Latin 
## sigma^2.2  0.0000  0.0000     25     no          Study 
## 
## outer factor: Effect_ID (nlvls = 32)
## inner factor: Comp_type (nlvls = 2)
## 
##             estim    sqrt  k.lvl  fixed                              level 
## tau^2.1    0.0029  0.0540     32     no  Male sterlized/\nFemale sterlized 
## tau^2.2    0.0256  0.1600     32     no        Male normal/\nFemale normal 
## rho        0.0000                   yes                                    
## 
## Test for Residual Heterogeneity:
## QE(df = 62) = 1423.9437, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 62) = 5.0020, p-val = 0.0289
## 
## Model Results:
## 
##                                       estimate      se    tval  df    pval​ 
## intrcpt                                 0.0844  0.0170  4.9548  62  <.0001 
## Comp_typeMale normal/\nFemale normal    0.0703  0.0314  2.2365  62  0.0289 
##                                        ci.lb   ci.ub 
## intrcpt                               0.0503  0.1184  *** 
## Comp_typeMale normal/\nFemale normal  0.0075  0.1332    * 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r2_ml(mod_comp3b)
##    R2_marginal R2_conditional 
##      0.6108544      1.0000000
# without heteroscedasticity
mod_comp3c <-  rma.mv(abs_yi, V = abs_V_matrix_long, 
                      mod = ~ Comp_type, 
                      random = list( ~1|Species_Latin, ~1|Study, ~1|Effect_ID),
                      #rho = 0, struct = "HCS",
                      data = sdat_long, test = "t")

# Comparing models with and without heteroscedasticity
AIC(mod_comp3, mod_comp3c)
##            df       AIC
## mod_comp3   6 -81.42389
## mod_comp3c  5 491.98996
# visualizing results
f2 <- orchard_plot(mod_comp3b, mod = "Comp_type", xlab = "absolute log response ratio (lnRR)",
    group = "Study", data = sdat_long, angle = 90) + scale_fill_manual(values = c("#D55E00",
    "#009E73")) + scale_colour_manual(values = c("#D55E00", "#009E73"))

f2

Figure 5

patch3 <- f1/f2 + plot_layout()

patch3 + plot_annotation(tag_levels = "A")

Software and package versions

sessionInfo() %>%
    pander()

R version 4.2.0 (2022-04-22)

Platform: x86_64-apple-darwin17.0 (64-bit)

locale: en_AU.UTF-8||en_AU.UTF-8||en_AU.UTF-8||C||en_AU.UTF-8||en_AU.UTF-8

attached base packages: grid, stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: emmeans(v.1.7.3), groundhog(v.1.5.0), ggalluvial(v.0.12.3), GoodmanKruskal(v.0.0.3), naniar(v.0.6.1), formatR(v.1.12), here(v.1.0.1), png(v.0.1-7), MuMIn(v.1.46.0), clubSandwich(v.0.5.6), orchaRd(v.2.0), rotl(v.3.0.12), readxl(v.1.4.0), lme4(v.1.1-29), patchwork(v.1.1.1), kableExtra(v.1.3.4), ape(v.5.6-2), pander(v.0.6.5), metafor(v.3.4-0), metadat(v.1.2-0), Matrix(v.1.4-1), forcats(v.0.5.1), stringr(v.1.4.0), dplyr(v.1.0.9), purrr(v.0.3.4), readr(v.2.1.2), tidyr(v.1.2.0), tibble(v.3.1.8), ggplot2(v.3.3.6) and tidyverse(v.1.3.2)

loaded via a namespace (and not attached): ggbeeswarm(v.0.6.0), googledrive(v.2.0.0), minqa(v.1.2.4), colorspace(v.2.0-3), ellipsis(v.0.3.2), visdat(v.0.5.3), rprojroot(v.2.0.3), estimability(v.1.3), fs(v.1.5.2), rstudioapi(v.0.13), farver(v.2.1.1), bit64(v.4.0.5), mvtnorm(v.1.1-3), fansi(v.1.0.3), lubridate(v.1.8.0), mathjaxr(v.1.6-0), xml2(v.1.3.3), codetools(v.0.2-18), splines(v.4.2.0), cachem(v.1.0.6), knitr(v.1.39), jsonlite(v.1.8.0), nloptr(v.2.0.3), broom(v.1.0.0), dbplyr(v.2.2.1), latex2exp(v.0.9.4), rentrez(v.1.2.3), compiler(v.4.2.0), httr(v.1.4.3), backports(v.1.4.1), assertthat(v.0.2.1), fastmap(v.1.1.0), gargle(v.1.2.0), cli(v.3.3.0), htmltools(v.0.5.3), prettyunits(v.1.1.1), tools(v.4.2.0), coda(v.0.19-4), gtable(v.0.3.0), glue(v.1.6.2), Rcpp(v.1.0.8.3), cellranger(v.1.1.0), jquerylib(v.0.1.4), vctrs(v.0.4.1), svglite(v.2.1.0), nlme(v.3.1-157), xfun(v.0.31), rvest(v.1.0.2), lifecycle(v.1.0.1), pacman(v.0.5.1), XML(v.3.99-0.10), googlesheets4(v.1.0.0), MASS(v.7.3-56), zoo(v.1.8-10), scales(v.1.2.0), vroom(v.1.5.7), hms(v.1.1.1), parallel(v.4.2.0), sandwich(v.3.0-1), RColorBrewer(v.1.1-3), yaml(v.2.3.5), sass(v.0.4.2), stringi(v.1.7.8), highr(v.0.9), corrplot(v.0.92), boot(v.1.3-28), rlang(v.1.0.4), pkgconfig(v.2.0.3), systemfonts(v.1.0.4), rncl(v.0.8.6), evaluate(v.0.15), lattice(v.0.20-45), labeling(v.0.4.2), bit(v.4.0.4), tidyselect(v.1.1.2), magrittr(v.2.0.3), bookdown(v.0.26), R6(v.2.5.1), generics(v.0.1.3), DBI(v.1.1.3), mgcv(v.1.8-40), pillar(v.1.8.0), haven(v.2.5.0), withr(v.2.5.0), modelr(v.0.1.8), crayon(v.1.5.1), utf8(v.1.2.2), tzdb(v.0.3.0), rmarkdown(v.2.14), progress(v.1.2.2), rmdformats(v.1.0.4), reprex(v.2.0.1), digest(v.0.6.29), webshot(v.0.5.3), xtable(v.1.8-4), numDeriv(v.2016.8-1.1), stats4(v.4.2.0), munsell(v.0.5.0), beeswarm(v.0.4.0), viridisLite(v.0.4.0), vipor(v.0.4.5) and bslib(v.0.4.0)

LS0tCnRpdGxlOiAiU3VwcG9ydGluZyBJbmZvcm1hdGlvbjogTWFsZSBjYXN0cmF0aW9uIGFuZCBmZW1hbGUgc3RlcmlsaXphdGlvbiBpbXByb3ZlIHN1cnZpdmFsIGJ1dCBkbyBub3QgZXhwbGFpbiBzZXgtZGlmZmVyZW5jZXMgaW4gdmVydGVicmF0ZSBhZ2VpbmciCnN1YnRpdGxlOiAiTWljaGFlbCBHYXJyYXR0LCBDaHJpc3RpbmUgTmV5dCwgTWljaGFlbCBTdG91dCwgSm9zw6kgVi4gVi4gSXNvbGEsIEplYW4tTWljaGVsIEdhaWxsYXJkLCBKZWFuLUZyYW7Dp29pcyBMZW1hw650cmUsIE1hbGdvcnphdGEgTGFnaXN6LCAmIFNoaW5pY2hpIE5ha2FnYXdhIiAKI2F1dGhvcnM6IApkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiAlWScpYCIKb3V0cHV0OiAKICAgIAogICAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246CiAgICAgIGNvZGVfZm9sZGluZzogc2hvdyAjaGlkZQogICAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICAgIHRvY19kZXB0aDogNAplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQoja25pdGVyIHNlZXR0aW5nCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKbWVzc2FnZSA9IEZBTFNFLAp3YXJuaW5nID0gRkFMU0UsICMgbm8gd2FybmluZ3MKY2FjaGUgPSBUUlVFLCMgQ2FjaGluZyB0byBzYXZlIHRpbWUgd2hlbiBrbml0dGluZwp0aWR5ID0gVFJVRQojZmlnLndpZHRoID0gOQopCgojIGNsZWFybmluZyB1cApybShsaXN0PWxzKCkpCmBgYAoKIyBTZXR0aW5nLXVwcyB7LnRhYnNldCAudGFic2V0LXBpbGxzIC50YWJzZXQtZmFkZX0KCiMjIExvYWRpbmcgcGFja2FnZXMKCmBgYHtyfQojIHBhY2thZ2VzICMjIyMKCiNvY2hhUmQKIyAKIyBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKIyAjaW5zdGFsbC5wYWNrYWdlcygibWV0YWZvciIpCiMgaW5zdGFsbC5wYWNrYWdlcygicGF0Y2h3b3JrIikKIyBpbnN0YWxsLnBhY2thZ2VzKCJSLnJzcCIpCiMgCiMgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJkYW5pZWwxbm9ibGUvb3JjaGFSZCIsIGZvcmNlID0gVFJVRSwgYnVpbGRfdmlnbmV0dGVzID0gVFJVRSkKIyByZW1vdGVzOjppbnN0YWxsX2dpdGh1YigicnZsZW50aC9lbW1lYW5zIiwgZGVwZW5kZW5jaWVzID0gVFJVRSwgYnVpbGRfb3B0cyA9ICIiKSAKIyAKIyAjZW1tZWFucwojIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJydmxlbnRoL2VtbWVhbnMiLCBkZXBlbmRlbmNpZXMgPSBUUlVFLCBidWlsZF9vcHRzID0gIiIpCiMgIyBtZXRhZm9yCiMgaW5zdGFsbC5wYWNrYWdlcygicmVtb3RlcyIpCiMgcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInd2aWVjaHRiL21ldGFmb3IiKQoKIyBsb2FkaW5nCnBhY21hbjo6cF9sb2FkKHRpZHl2ZXJzZSwKICAgICAgICAgICAgICAgbWV0YWZvciwKICAgICAgICAgICAgICAgcGFuZGVyLAogICAgICAgICAgICAgICBzdHJpbmdyLAogICAgICAgICAgICAgICBhcGUsCiAgICAgICAgICAgICAgIGthYmxlRXh0cmEsCiAgICAgICAgICAgICAgIHBhdGNod29yaywKICAgICAgICAgICAgICAgbG1lNCwKICAgICAgICAgICAgICAgcmVhZHhsLAogICAgICAgICAgICAgICAjZW1tZWFucywKICAgICAgICAgICAgICAgcm90bCwKICAgICAgICAgICAgICAgb3JjaGFSZCwKICAgICAgICAgICAgICAgY2x1YlNhbmR3aWNoLAogICAgICAgICAgICAgICBNdU1JbiwKICAgICAgICAgICAgICAgcG5nLAogICAgICAgICAgICAgICBncmlkLAogICAgICAgICAgICAgICBoZXJlLAogICAgICAgICAgICAgICBmb3JtYXRSLAogICAgICAgICAgICAgICBuYW5pYXIsCiAgICAgICAgICAgICAgIEdvb2RtYW5LcnVza2FsLAogICAgICAgICAgICAgICBnZ2FsbHV2aWFsCikKCiMgeW91IG1heSBuZWVkIHRvIHJ1biB0aGlzICh3ZSB3aWxsIHBsYW4gdG8gZml4IHRoaXMpCmxpYnJhcnkoZ3JvdW5kaG9nKQpncm91bmRob2cubGlicmFyeSgiZW1tZWFucyIsICcyMDIyLTA0LTAxJykKCiMgbmVlZCBmb3IgbWV0YWZvciB0byB1bmRlcnN0YW5kIE11TWluIApldmFsKG1ldGFmb3I6OjouTXVNSW4pCmBgYAoKIyMgTG9hZGluZyBjdXN0b20gZnVuY3Rpb25zCgpgYGB7cn0KIyBjdXN0b20gZnVuY3Rpb25zIAoKIyBmdW5jdGlvbiBmb3IgZ2V0dGluZyBsblJSIGZvciBwcm9wb3J0aW9uYWwgZGF0YSAobW9ydGFsaXR5KQoKbG5ycnAgPC0gZnVuY3Rpb24obTEsIG0yLCBuMSwgbjIpIHsKICAjIGFyY3NpbmUgdHJhbnNmb3JhbXRpb24KICBhc2luX3RyYW5zIDwtIGZ1bmN0aW9uKHApIHsgYXNpbihzcXJ0KHApKSB9CiAgIyBTRCBmb3IgYXJjc2luZSBkaXN0cmlidXRpb24gKHNlZSBXaWtpIC0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQXJjc2luZV9kaXN0cmlidXRpb24pCiAgdmFyMSA8LSAxLzgKICB2YXIyIDwtIDEvOAogICMgbG5SUiAtIHdpdGggMm5kIG9yZGVyIGNvcnJlY3Rpb24KICBsbnJyIDwtIGxvZyhhc2luX3RyYW5zKG0xKS9hc2luX3RyYW5zKG0yKSkgKyAKICAgIDAuNSAqICgodmFyMSAvIChuMSAqIGFzaW5fdHJhbnMobTEpXjIpKSAtICh2YXIyIC8gKG4yICogYXNpbl90cmFucyhtMileMikpKQkKICAKICB2YXIgPC0gdmFyMSAvIChuMSAqIGFzaW5fdHJhbnMobTEpXjIpICsgdmFyMV4yIC8gKDIgKiBuMV4yICogYXNpbl90cmFucyhtMSleNCkgICsgCiAgICB2YXIyIC8gKG4yICogYXNpbl90cmFucyhtMileMikgKyB2YXIyXjIgLyAoMiAqIG4yXjIgKiBhc2luX3RyYW5zKG0yKV40KSAKICAKICBpbnZpc2libGUoZGF0YS5mcmFtZSh5aSA9IGxucnIgLCB2aSA9IHZhcikpCn0KCgojIGZ1bmN0aW9uIHRvIGdldCB0byBsblJSIGZvciBsb25nZXZpdHkgZGF0YSAoQ1YgcmVxdWlyZWQpCiMgVGhlIG1ldGhvZCBwcm9wb3NlZCBpbiBOYWthZ2F3YSBldCBhbCAoMjAyMikgLSBtaXNzaW5nIFNEIG1ldGhvZAoKbG5ycm0gPC0gZnVuY3Rpb24obTEsIG0yLCBuMSwgbjIsIGN2MjEsIGN2MjIpIHsKICAjIGxuUlIgLSB3aXRoIDJuZCBvcmRlciBjb3JyZWN0aW9uCiAgbG5yciA8LSBsb2cobTEvbTIpICsgCiAgICAwLjUgKiAoKGN2MjEgL24xKSAtIChjdjIyIC8gbjIpKQkKICAKICB2YXIgPC0gKGN2MjEgLyBuMSkgKyAoKGN2MjFeMikgLyAoMiAqIG4xXjIpKSAgKyAKICAgIChjdjIyLyBuMikgKyAoKGN2MjJeMikgLyAoMiAqIG4yXjIpICkKICAKICBpbnZpc2libGUoZGF0YS5mcmFtZSh5aSA9IGxucnIgLCB2aSA9IHZhcikpCn0KCiMgZm9yIGZvbGRlZCBub3JtYWwgZGlzdHJpYnV0aW9uIHNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm9sZGVkX25vcm1hbF9kaXN0cmlidXRpb24KCiMgZm9sZGVkIG1lYW4KZm9sZGVkX211IDwtZnVuY3Rpb24obWVhbiwgdmFyaWFuY2UpewogIG11IDwtIG1lYW4KICBzaWdtYSA8LSBzcXJ0KHZhcmlhbmNlKQogIGZvbGRfbXUgPC0gc2lnbWEqc3FydCgyL3BpKSpleHAoKC1tdV4yKS8oMipzaWdtYV4yKSkgKyBtdSooMSAtIDIqcG5vcm0oLW11L3NpZ21hKSkKICBmb2xkX211Cn0gCgojIGZvbGRlZCB2YXJpYW5jZQpmb2xkZWRfdiA8LWZ1bmN0aW9uKG1lYW4sIHZhcmlhbmNlKXsKICBtdSA8LSBtZWFuCiAgc2lnbWEgPC0gc3FydCh2YXJpYW5jZSkKICBmb2xkX211IDwtIHNpZ21hKnNxcnQoMi9waSkqZXhwKCgtbXVeMikvKDIqc2lnbWFeMikpICsgbXUqKDEgLSAyKnBub3JtKC1tdS9zaWdtYSkpCiAgZm9sZF9zZSA8LSBzcXJ0KG11XjIgKyBzaWdtYV4yIC0gZm9sZF9tdV4yKQogICMgYWRkaW5nIHNlIHRvIG1ha2UgYmlnZ2VyIG1lYW4KICBmb2xkX3YgPC1mb2xkX3NlXjIKICBmb2xkX3YKfSAKCgpgYGAKCiMgRGF0YSBwcmVwYXJhdGlvbiAmIHByb2Nlc3Npbmcgey50YWJzZXQgLnRhYnNldC1waWxscyAudGFic2V0LWZhZGV9CgojIyBNYWluIGRhdGEKCmBgYHtyfQojZGF0X2Z1bGwgPC0gcmVhZF9jc3YoaGVyZSgiZGF0YSIsICJkYXRfMDcwNzIwMjEuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIAojZGF0X2Z1bGwgPC0gcmVhZF9jc3YoaGVyZSgiZGF0YSIsICJkYXRhXzE1MDIyMDIyLmNzdiIpLCBuYSA9IGMoIiIsICJOQSIpKQpkYXRfZnVsbCA8LSByZWFkX2NzdihoZXJlKCJkYXRhIiwgImRhdGFfMDUwNTIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpCiNnbGltcHNlKGRhdF9mdWxsKQoKI2xvYWRpbmcgZGF0YSAjIyMjCgpkYXRfZnVsbCAlPiUgZmlsdGVyKGlzLm5hKFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSkgPT0gRkFMU0UpICU+JSAKICBmaWx0ZXIoVHlwZV9vZl9zdGVyaWxpemF0aW9uICE9ICJWYXNlY3RvbXkiKSAlPiUgCiAgbXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgYXMuZmFjdG9yKSAtPiBkYXQKCgpkaW0oZGF0KQpkaW0oZGF0X2Z1bGwpCiMgc2VwYXJhdGluZyB0d28ga2luZHMKCmVmZmVjdF90eXBlIDwtIGlmZWxzZShzdHJfZGV0ZWN0KGRhdCRMaWZlc3Bhbl9wYXJhbWV0ZXIsICJNZSIpLCAibG9uZ2V2aXR5IiwgIm1vcnRhbGl0eSIpCgojZml4IGEgdHlwbyBpbiBzcGVjaWVzIG5hbWUKZGF0JFNwZWNpZXNfTGF0aW4gPC0gZ3N1YigiTWFjYWNhIEZhc2NpY3VsYXJpcyIsICJNYWNhY2EgZmFzY2ljdWxhcmlzIiwgZGF0JFNwZWNpZXNfTGF0aW4pIApkYXQkU3BlY2llc19MYXRpbiA8LSBnc3ViKCJFcXV1cyBjYWJhbGx1cyIsICJFcXV1cyBmZXJ1cyIsIGRhdCRTcGVjaWVzX0xhdGluKQoKIyBjcmVhdGluZyB0aGUgcGh5bG8gY29sdW1uCmRhdCRQaHlsb2dlbnkgPC0gc3ViKCIgIiwgIl8iLCAgZGF0JFNwZWNpZXNfTGF0aW4pCmRhdCRFZmZlY3RfdHlwZSA8LSBlZmZlY3RfdHlwZQpkYXQkRWZmZWN0X0lEIDwtIDE6bnJvdyhkYXQpCiMga2V5IHZhcmlhYmxlcwpuYW1lcyhkYXQpCnVuaXF1ZShkYXQkU3BlY2llc19MYXRpbikKCmthYmxlKGRhdCwgImh0bWwiKSAlPiUgCiAga2FibGVfc3R5bGluZygic3RyaXBlZCIsIHBvc2l0aW9uID0gImxlZnQiKSAlPiUgCiAgc2Nyb2xsX2JveCh3aWR0aCA9ICIxMDAlIiwgCiAgICBoZWlnaHQgPSAiMjUwcHgiKQpgYGAKCiMjIENhbGN1bGF0aW5nIGVmZmVjdCBzaXplIGZvciB0aGUgbWFpbiBkYXRhCgpgYGB7cn0KIyBsZXQncyBnZXQgQ1ZzCgpkYXQgJT4lIGdyb3VwX2J5KFN0dWR5KSAlPiUgc3VtbWFyaXNlKGN2Ml9jb250ID0gbWVhbigoRXJyb3JfY29udHJvbF9TRC9Db250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlKV4yLCBuYS5ybSA9IFQpLCBjdjJfdHJ0ID0gbWVhbigoRXJyb3JfZXhwZXJpbWVudGFsX1NEL1RyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSleMiwgbmEucm0gPSBUKSwgY3YyX29wc3QgPSBtZWFuKChFcnJvcl9vcHBvc2l0ZV9zZXhfU0QvT3Bwb3NpdGVfc2V4X2xpZmVzcGFuX3ZhcmlhYmxlKV4yLCBuYS5ybSA9IFQpLCBuX2NvbnQgPSBtZWFuKFNhbXBsZV9zaXplX2NvbnRyb2wsIG5hLnJtID0gVCksIG5fdHJ0ID0gIG1lYW4oU2FtcGxlX3NpemVfc3RlcmlsaXphdGlvbiwgbmEucm0gPSBUKSwgbl9vcHN0ID0gIG1lYW4oU2FtcGxlX3NpemVfb3Bwb3NpdGVfc2V4LCBuYS5ybSA9IFQpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpc2UoY3YyX2NvbnQgPSB3ZWlnaHRlZC5tZWFuKGN2Ml9jb250LCBuX2NvbnQsIG5hLnJtID0gVCksIGN2Ml90cnQgPSB3ZWlnaHRlZC5tZWFuKGN2Ml90cnQsIG5fdHJ0LCBuYS5ybSA9IFQpLCBjdjJfb3BzdCA9IHdlaWdodGVkLm1lYW4oY3YyX29wc3QsIG5fb3BzdCwgbmEucm0gPSBUKSkgLT4gY3ZzCgojIGxuUlIKIyB1c2luZyBDVgpkYXQkeWkgPC0gaWZlbHNlKGVmZmVjdF90eXBlID09ICJsb25nZXZpdHkiLCBsbnJybShkYXQkVHJlYXRtZW50X2xpZmVzcGFuX3ZhcmlhYmxlLCBkYXQkQ29udHJvbF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIGRhdCRTYW1wbGVfc2l6ZV9jb250cm9sLCBjdnNbWyJjdjJfdHJ0Il1dLGN2c1tbImN2Ml9jb250Il1dKVtbMV1dLCBsbnJycChkYXQkVHJlYXRtZW50X2xpZmVzcGFuX3ZhcmlhYmxlLCBkYXQkQ29udHJvbF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIGRhdCRTYW1wbGVfc2l6ZV9jb250cm9sKVtbMV1dKQoKZGF0JHZpIDwtIGlmZWxzZShlZmZlY3RfdHlwZSA9PSAibG9uZ2V2aXR5IiwgbG5ycm0oZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JENvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIGRhdCRTYW1wbGVfc2l6ZV9zdGVyaWxpemF0aW9uLCBkYXQkU2FtcGxlX3NpemVfY29udHJvbCwgY3ZzW1siY3YyX3RydCJdXSxjdnNbWyJjdjJfY29udCJdXSlbWzJdXSwgbG5ycnAoZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JENvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIGRhdCRTYW1wbGVfc2l6ZV9zdGVyaWxpemF0aW9uLCBkYXQkU2FtcGxlX3NpemVfY29udHJvbClbWzJdXSkKCiMgZ2V0dGluZyBlZmZlY3Qgc2l6ZSBmb3IgdGhlIGxvbmcgZm9ybWF0IAojIHdlIGNyZWF0ZSBhIGxvbmdlciBkYXRhIGZvcm1hdAoKZGF0MSA8LSBkYXQKZGF0MiA8LSBkYXQKCmRhdDEkeWkgPC0gaWZlbHNlKGVmZmVjdF90eXBlID09ICJsb25nZXZpdHkiLCAKICAgICAgICAgICAgICAgICAgbG5ycm0oZGF0JENvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIGRhdCRPcHBvc2l0ZV9zZXhfbGlmZXNwYW5fdmFyaWFibGUsICAKICAgICAgICAgICAgICAgICAgICAgICAgZGF0JFNhbXBsZV9zaXplX2NvbnRyb2wsIGRhdCRTYW1wbGVfc2l6ZV9vcHBvc2l0ZV9zZXgsIAogICAgICAgICAgICAgICAgICAgICAgICBjdnNbWyJjdjJfY29udCJdXSxjdnNbWyJjdjJfb3BzdCJdXSlbWzFdXSwgCiAgICAgICAgICAgICAgICAgIGxucnJwKGRhdCRDb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLCBkYXQkT3Bwb3NpdGVfc2V4X2xpZmVzcGFuX3ZhcmlhYmxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgZGF0JFNhbXBsZV9zaXplX2NvbnRyb2wsICBkYXQkU2FtcGxlX3NpemVfb3Bwb3NpdGVfc2V4KVtbMV1dKQoKZGF0MSR2aSA8LWlmZWxzZShlZmZlY3RfdHlwZSA9PSAibG9uZ2V2aXR5IiwgCiAgICAgICAgICAgICAgICAgbG5ycm0oZGF0JENvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsZGF0JE9wcG9zaXRlX3NleF9saWZlc3Bhbl92YXJpYWJsZSwgIAogICAgICAgICAgICAgICAgICAgICAgIGRhdCRTYW1wbGVfc2l6ZV9jb250cm9sLCBkYXQkU2FtcGxlX3NpemVfb3Bwb3NpdGVfc2V4LCAKICAgICAgICAgICAgICAgICAgICAgICBjdnNbWyJjdjJfY29udCJdXSxjdnNbWyJjdjJfb3BzdCJdXSlbWzJdXSwgCiAgICAgICAgICAgICAgICAgbG5ycnAoZGF0JENvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIGRhdCRPcHBvc2l0ZV9zZXhfbGlmZXNwYW5fdmFyaWFibGUsIAogICAgICAgICAgICAgICAgICAgICAgIGRhdCRTYW1wbGVfc2l6ZV9jb250cm9sLCAgZGF0JFNhbXBsZV9zaXplX29wcG9zaXRlX3NleClbWzJdXSkKCiMgaGVyZSB3ZSBjcmVhdGUgQ00vRiBvciBDRi9NCmRhdDIkeWkgPC0gaWZlbHNlKGVmZmVjdF90eXBlID09ICJsb25nZXZpdHkiLCAKICAgICAgICAgICAgICAgICAgbG5ycm0oZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JE9wcG9zaXRlX3NleF9saWZlc3Bhbl92YXJpYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIGRhdCRTYW1wbGVfc2l6ZV9vcHBvc2l0ZV9zZXgsIAogICAgICAgICAgICAgICAgICAgICAgICBjdnNbWyJjdjJfdHJ0Il1dLGN2c1tbImN2Ml9vcHN0Il1dKVtbMV1dLCAKICAgICAgICAgICAgICAgICAgbG5ycnAoZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgZGF0JE9wcG9zaXRlX3NleF9saWZlc3Bhbl92YXJpYWJsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdCRTYW1wbGVfc2l6ZV9zdGVyaWxpemF0aW9uLCBkYXQkU2FtcGxlX3NpemVfb3Bwb3NpdGVfc2V4KVtbMV1dKQoKZGF0MiR2aSA8LSBpZmVsc2UoZWZmZWN0X3R5cGUgPT0gImxvbmdldml0eSIsIAogICAgICAgICAgICAgICAgICBsbnJybShkYXQkVHJlYXRtZW50X2xpZmVzcGFuX3ZhcmlhYmxlLCBkYXQkT3Bwb3NpdGVfc2V4X2xpZmVzcGFuX3ZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYXQkU2FtcGxlX3NpemVfc3RlcmlsaXphdGlvbiwgZGF0JFNhbXBsZV9zaXplX29wcG9zaXRlX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgIGN2c1tbImN2Ml90cnQiXV0sY3ZzW1siY3YyX29wc3QiXV0pW1syXV0sIAogICAgICAgICAgICAgICAgICBsbnJycChkYXQkVHJlYXRtZW50X2xpZmVzcGFuX3ZhcmlhYmxlLCBkYXQkT3Bwb3NpdGVfc2V4X2xpZmVzcGFuX3ZhcmlhYmxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIGRhdCRTYW1wbGVfc2l6ZV9vcHBvc2l0ZV9zZXgpW1syXV0pCgoKCgojIHB1dHRpbmcgdHdvIGRhdGEgZnJhbWVzCmRhdF9sb25nIDwtIHJiaW5kKGRhdDEsIGRhdDIpCgojIHB1dHQgMiBuZXcgY29sdW1uCgpkYXRfbG9uZyRPYnMgPC0gZmFjdG9yKDE6ZGltKGRhdF9sb25nKVtbMV1dKQpkYXRfbG9uZyRDb21wX3R5cGUgPC0gYXMuZmFjdG9yKHJlcChjKCJib3RoX25vcm1hbCIsICJvbmVfY2FzdHJhdGVkIiksIGVhY2ggPSBkaW0oZGF0X2xvbmcpW1sxXV0vMikpCgpkYXRfbG9uZyRDb21wX3R5cGVfU2V4IDwtIHBhc3RlKGRhdF9sb25nJENvbXBfdHlwZSwgZGF0X2xvbmckU2V4LCBzZXAgPSAiXyIpCgpkYXRfbG9uZyR5aSA8LSBpZmVsc2UoZGF0X2xvbmckQ29tcF90eXBlX1NleCA9PSAgIm9uZV9jYXN0cmF0ZWRfRmVtYWxlIiB8IGRhdF9sb25nJENvbXBfdHlwZV9TZXggPT0gImJvdGhfbm9ybWFsX0ZlbWFsZSIsIC0xKmRhdF9sb25nJHlpLCBkYXRfbG9uZyR5aSkKCmRhdF9sb25nICU+JSBmaWx0ZXIoIWlzLm5hKHlpKSwgIWlzLm5hKHZpKSkgLT4gZGF0X2xvbmcKCmRpbShkYXRfbG9uZykKYGBgCgojIyBSb2RlbnQgZGF0YQoKVGhpcyBkYXRhIGlzIGEgc3Vic2V0IG9mIHRoZSBtYWluIGRhdGEgb25seSBpbmNsdWRpbmcgZGF0YSBmcm9tIHJvZGVudHMuIFRoaXMgaXMgdXNlZCB0byB0ZXN0IHRoZSBlZmZlY3Qgb2Ygc3RlcmlsaXphdGlvbi9jYXN0cmF0aW9uIG9uIGxpZmUgc3RhZ2UgKGZvciB0aGVzZSBzcGVjaWVzLCB3ZSB3ZXJlIGFibGUgdG8gZ2V0IG1vcmUgZmluZSBzY2FsZSBkYXRhKS4gVGhpcyBkYXRhc2V0IGhhcyB0d28gbW9yZSB2YXJpYWJsZXM6IDEpIEFnZV9hdF90cmVhdG1lbnQgKGFnZSBpbiBkYXlzIHdoZW4gdHJlYXRtZW50IHdhcyBhcHBsaWVkKSBhbmQgMikgRGF5X3RvX21hdHVyaXR5IChhZ2UgaW4gZGF5cyB3aGVuIGFuaW1hbHMgYmVjb21lIG1hdHVyZSkuIEFzIGFsc28gbWVudGlvbmVkIGJlbG93LCB0aGUgYW5hbHlzZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0YSBzZXQgaXMgcG9zdC1ob2MgKG5vdCBwbGFubmVkIGJlZm9yZSBkYXRhIGNvbGxlY3Rpb24pLgoKYGBge3J9CiNzZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YTJfMTUwMjIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIApyZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YTNfMDUwNTIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIAoKcmRhdCA8LSByZGF0ICU+JSBmaWx0ZXIoaXMubmEoVHJlYXRtZW50X2xpZmVzcGFuX3ZhcmlhYmxlKSA9PSBGQUxTRSkgJT4lIAogICNmaWx0ZXIoVHlwZV9vZl9zdGVyaWxpemF0aW9uICE9ICJWYXNlY3RvbXkiKSAlPiUgCiAgbXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgYXMuZmFjdG9yKSAKCmRpbShyZGF0KQoKIyBzZXBhcmF0aW5nIHR3byBraW5kcwoKZWZmZWN0X3R5cGVfciA8LSBpZmVsc2Uoc3RyX2RldGVjdChyZGF0JExpZmVzcGFuX3BhcmFtZXRlciwgIk1lIiksICJsb25nZXZpdHkiLCAibW9ydGFsaXR5IikKCgojIGVmZmVjdC1sZXZlbCBJRAojZGF0JFNwZWNpZXNfTGF0aW4gPC0gZ3N1YigiTWFjYWNhIEZhc2NpY3VsYXJpcyIsICJNYWNhY2EgZmFzY2ljdWxhcmlzIiwgZGF0JFNwZWNpZXNfTGF0aW4pICNmaXggYSB0eXBvIGluIHNwZWNpZXMgbmFtZQpyZGF0JEVmZmVjdF9JRCA8LSAxOm5yb3cocmRhdCkKcmRhdCRQaHlsb2dlbnkgPC0gc3ViKCIgIiwgIl8iLCAgcmRhdCRTcGVjaWVzX0xhdGluKQpyZGF0JEVmZmVjdF90eXBlIDwtIGVmZmVjdF90eXBlX3IKCiMga2V5IHZhcmlhYmxlcwpuYW1lcyhyZGF0KQp1bmlxdWUocmRhdCRTcGVjaWVzX0xhdGluKQoKa2FibGUocmRhdCwgImh0bWwiKSAlPiUgCiAga2FibGVfc3R5bGluZygic3RyaXBlZCIsIHBvc2l0aW9uID0gImxlZnQiKSAlPiUgCiAgc2Nyb2xsX2JveCh3aWR0aCA9ICIxMDAlIiwgCiAgICBoZWlnaHQgPSAiMjUwcHgiKQpgYGAKCiMjIENhbGN1bGF0aW5nIGVmZmVjdCBzaXplIGZvciB0aGUgcm9kZW50IGRhdGEKCmBgYHtyfQojIGxldCdzIGdldCBDVnMKCnJkYXQgJT4lIGdyb3VwX2J5KFN0dWR5KSAlPiUgc3VtbWFyaXNlKGN2Ml9jb250ID0gbWVhbigoRXJyb3JfY29udHJvbF9TRC9Db250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlKV4yLCBuYS5ybSA9IFQpLCBjdjJfdHJ0ID0gbWVhbigoRXJyb3JfZXhwZXJpbWVudGFsX1NEL1RyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSleMiwgbmEucm0gPSBUKSwgY3YyX29wc3QgPSBtZWFuKChFcnJvcl9vcHBvc2l0ZV9zZXhfU0QvT3Bwb3NpdGVfc2V4X2xpZmVzcGFuX3ZhcmlhYmxlKV4yLCBuYS5ybSA9IFQpLCBuX2NvbnQgPSBtZWFuKFNhbXBsZV9zaXplX2NvbnRyb2wsIG5hLnJtID0gVCksIG5fdHJ0ID0gIG1lYW4oU2FtcGxlX3NpemVfc3RlcmlsaXphdGlvbiwgbmEucm0gPSBUKSwgbl9vcHN0ID0gIG1lYW4oU2FtcGxlX3NpemVfb3Bwb3NpdGVfc2V4LCBuYS5ybSA9IFQpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpc2UoY3YyX2NvbnQgPSB3ZWlnaHRlZC5tZWFuKGN2Ml9jb250LCBuX2NvbnQsIG5hLnJtID0gVCksIGN2Ml90cnQgPSB3ZWlnaHRlZC5tZWFuKGN2Ml90cnQsIG5fdHJ0LCBuYS5ybSA9IFQpLCBjdjJfb3BzdCA9IHdlaWdodGVkLm1lYW4oY3YyX29wc3QsIG5fb3BzdCwgbmEucm0gPSBUKSkgLT4gY3ZzCgojIGxuUlIKIyB1c2luZyBDVgpyZGF0JHlpIDwtIGlmZWxzZShlZmZlY3RfdHlwZV9yID09ICJsb25nZXZpdHkiLCBsbnJybShyZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgcmRhdCRDb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLCByZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIHJkYXQkU2FtcGxlX3NpemVfY29udHJvbCwgY3ZzW1siY3YyX3RydCJdXSxjdnNbWyJjdjJfY29udCJdXSlbWzFdXSwgbG5ycnAocmRhdCRUcmVhdG1lbnRfbGlmZXNwYW5fdmFyaWFibGUsIHJkYXQkQ29udHJvbF9saWZlc3Bhbl92YXJpYWJsZSwgcmRhdCRTYW1wbGVfc2l6ZV9zdGVyaWxpemF0aW9uLCByZGF0JFNhbXBsZV9zaXplX2NvbnRyb2wpW1sxXV0pCgpyZGF0JHZpIDwtIGlmZWxzZShlZmZlY3RfdHlwZV9yID09ICJsb25nZXZpdHkiLCBsbnJybShyZGF0JFRyZWF0bWVudF9saWZlc3Bhbl92YXJpYWJsZSwgcmRhdCRDb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLCByZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24sIHJkYXQkU2FtcGxlX3NpemVfY29udHJvbCwgY3ZzW1siY3YyX3RydCJdXSxjdnNbWyJjdjJfY29udCJdXSlbWzJdXSwgbG5ycnAocmRhdCRUcmVhdG1lbnRfbGlmZXNwYW5fdmFyaWFibGUsIHJkYXQkQ29udHJvbF9saWZlc3Bhbl92YXJpYWJsZSwgcmRhdCRTYW1wbGVfc2l6ZV9zdGVyaWxpemF0aW9uLCByZGF0JFNhbXBsZV9zaXplX2NvbnRyb2wpW1syXV0pCgpzdHIocmRhdCkKYGBgCgpUaGlzIGRhdGFzZXQgaXMgYSBwYXJ0IG9mIHRoZSBmdWxsIGRhdGEgYW5kIG9ubHkgaGFzIGRhdGEgZnJvbSByb2RlbnQgc3BlY2llcy4gCgojIyBBbGwtY29tYmluYXRpb24gZGF0YQoKVGhpcyBkYXRhIHNldHMgaXMgYSBzdWJzZXQgb2YgdGhlIG1haW4gZGF0YSBhbmQgdGhpcyBpbmNsdWRlcyBvbmx5IHN0dWR5IHdoaWNoIGhhcyBhbGwgNCBncm91cHM6IDEpIGNvbnRyb2wgZmVtYWxlcywgMikgY29udHJvbCBtYWxlcywgMykgdHJlYXRlZCBmZW1hbGVzIGFuZCA0KSB0cmVhdGVkIG1hbGVzLgoKYGBge3J9CiNzZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YTJfMTUwMjIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIApzZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YTJfMTkwNDIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIAplZmZlY3RfdHlwZV9zIDwtIGlmZWxzZShzdHJfZGV0ZWN0KHNkYXQkTGlmZXNwYW5fcGFyYW1ldGVyLCAiTWUiKSwgImxvbmdldml0eSIsICJtb3J0YWxpdHkiKQoKCiMgZWZmZWN0LWxldmVsIElECgpzZGF0JEVmZmVjdF9JRCA8LSAxOm5yb3coc2RhdCkKc2RhdCRQaHlsb2dlbnkgPC0gc3ViKCIgIiwgIl8iLCAgc2RhdCRTcGVjaWVzX0xhdGluKQpzZGF0JEVmZmVjdF90eXBlIDwtIGVmZmVjdF90eXBlX3MKCmthYmxlKHNkYXQsICJodG1sIikgJT4lIAogIGthYmxlX3N0eWxpbmcoInN0cmlwZWQiLCBwb3NpdGlvbiA9ICJsZWZ0IikgJT4lIAogIHNjcm9sbF9ib3god2lkdGggPSAiMTAwJSIsIAogICAgaGVpZ2h0ID0gIjI1MHB4IikKYGBgCgoKIyMgQ2FsY3VsYXRpbmcgZWZmZWN0IHNpemUgZm9yIHRoZSBtYXRjaGluZyBkYXRhCgpgYGB7cn0KIyB3ZSBjcmVhdGUgYSBsb25nZXIgZGF0YSBmb3JtYXQKCnNkYXQxIDwtIHNkYXQKc2RhdDIgPC0gc2RhdAojIGxuUlIKCiMgaGVyZSB3ZSBjcmVhdGUgdGhlIHJhdGlvIG9mIE0vRgpzZGF0MSR5aSA8LSBpZmVsc2UoZWZmZWN0X3R5cGVfcyA9PSAibG9uZ2V2aXR5IiwgCiAgICAgICAgICAgICAgICAgIGxucnJtKHNkYXQkTWFsZV9jb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLCBzZGF0JEZlbWFsZV9jb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfY29udHJvbCwgc2RhdCRTYW1wbGVfc2l6ZV9mZW1hbGVfY29udHJvbCwgCiAgICAgICAgICAgICAgICAgICAgICAgIGN2c1tbImN2Ml9jb250Il1dLGN2c1tbImN2Ml9jb250Il1dKVtbMV1dLCAKICAgICAgICAgICAgICAgICAgbG5ycnAoc2RhdCRNYWxlX2NvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX2NvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIAogICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfY29udHJvbCwgIHNkYXQkU2FtcGxlX3NpemVfZmVtYWxlX2NvbnRyb2wpW1sxXV0pCgpzZGF0MSR2aSA8LSBpZmVsc2UoZWZmZWN0X3R5cGVfcyA9PSAibG9uZ2V2aXR5IiwgCiAgICAgICAgICAgICAgICAgIGxucnJtKHNkYXQkTWFsZV9jb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLCBzZGF0JEZlbWFsZV9jb250cm9sX2xpZmVzcGFuX3ZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfY29udHJvbCwgc2RhdCRTYW1wbGVfc2l6ZV9mZW1hbGVfY29udHJvbCwgCiAgICAgICAgICAgICAgICAgICAgICAgIGN2c1tbImN2Ml9jb250Il1dLGN2c1tbImN2Ml9jb250Il1dKVtbMl1dLCAKICAgICAgICAgICAgICAgICAgbG5ycnAoc2RhdCRNYWxlX2NvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX2NvbnRyb2xfbGlmZXNwYW5fdmFyaWFibGUsIAogICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfY29udHJvbCwgIHNkYXQkU2FtcGxlX3NpemVfZmVtYWxlX2NvbnRyb2wpW1syXV0pCgojIGhlcmUgd2UgY3JlYXRlIENNL0NGCnNkYXQyJHlpIDwtIGlmZWxzZShlZmZlY3RfdHlwZV9zID09ICJsb25nZXZpdHkiLCAKICAgICAgICAgICAgICAgICAgbG5ycm0oc2RhdCRNYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNkYXQkU2FtcGxlX3NpemVfbWFsZV9zdGVyaWxpemF0aW9uLCBzZGF0JFNhbXBsZV9zaXplX2ZlbWFsZV9zdGVyaWxpemF0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAgY3ZzW1siY3YyX3RydCJdXSxjdnNbWyJjdjJfdHJ0Il1dKVtbMV1dLCAKICAgICAgICAgICAgICAgICAgbG5ycnAoc2RhdCRNYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIAogICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfc3RlcmlsaXphdGlvbiwgIHNkYXQkU2FtcGxlX3NpemVfZmVtYWxlX3N0ZXJpbGl6YXRpb24pW1sxXV0pCgpzZGF0MiR2aSA8LSAgaWZlbHNlKGVmZmVjdF90eXBlX3MgPT0gImxvbmdldml0eSIsIAogICAgICAgICAgICAgICAgICAgbG5ycm0oc2RhdCRNYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZGF0JFNhbXBsZV9zaXplX21hbGVfc3RlcmlsaXphdGlvbiwgc2RhdCRTYW1wbGVfc2l6ZV9mZW1hbGVfc3RlcmlsaXphdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjdnNbWyJjdjJfdHJ0Il1dLGN2c1tbImN2Ml90cnQiXV0pW1syXV0sIAogICAgICAgICAgICAgICAgICAgbG5ycnAoc2RhdCRNYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIHNkYXQkRmVtYWxlX3N0ZXJpbGl6YXRpb25fbGlmZXNwYW5fdmFyaWFibGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgc2RhdCRTYW1wbGVfc2l6ZV9tYWxlX3N0ZXJpbGl6YXRpb24sICBzZGF0JFNhbXBsZV9zaXplX2ZlbWFsZV9zdGVyaWxpemF0aW9uKVtbMl1dKQoKIyBtZXJnaW5nIHNkYXRhIGZyYW1lcwpzZGF0X2xvbmcgPC0gcmJpbmQoc2RhdDEsIHNkYXQyKQoKIyBwdXR0IDIgbmV3IGNvbHVtbgoKc2RhdF9sb25nJE9icyA8LSBmYWN0b3IoMTpkaW0oc2RhdF9sb25nKVtbMV1dKQpzZGF0X2xvbmckQ29tcF90eXBlIDwtIGFzLmZhY3RvcihyZXAoYygiYm90aF9ub3JtYWwiLCAiYm90aF9jYXN0cmF0ZWQiKSwgZWFjaCA9IGRpbShzZGF0X2xvbmcpW1sxXV0vMikpCgpgYGAKCiMjIE1ldGEtZGF0YQoKYGBge3J9CiNzZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YTJfMTUwMjIwMjIuY3N2IiksIG5hID0gYygiIiwgIk5BIikpIAptZGF0IDwtIHJlYWRfY3N2KGhlcmUoImRhdGEiLCAiZGF0YV9tZXRhLWRhdGEuY3N2IikpIAoKCmthYmxlKG1kYXQsICJodG1sIikgJT4lIAogIGthYmxlX3N0eWxpbmcoInN0cmlwZWQiLCBwb3NpdGlvbiA9ICJsZWZ0IikgJT4lIAogIHNjcm9sbF9ib3god2lkdGggPSAiMTAwJSIsIAogICAgaGVpZ2h0ID0gIjI1MHB4IikKYGBgCgojIFN1bW1hcmlzZSB0aGUgZGF0YXNldCB7LnRhYnNldCAudGFic2V0LXBpbGxzIC50YWJzZXQtZmFkZX0gCgojIyBWaXN1YWxpc2luZyBtaXNzaW5nIGRhdGEKCmBgYHtyIG1pc3NpbmcgZGF0YSwgZWNobyA9IEZBTFNFfQojdmlzX21pc3MoZGF0KSAjbW9zdGx5IGRhdGEgaXMgbWlzc2luZyBhdCBjb21tZW50IGZpZWxkcwoKdmlzX21pc3MoZGF0KSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAzKSwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4odCA9IDAuNSwgciA9IDIsIGIgPSAxLCBsID0gMSwgdW5pdCA9ICJjbSIpKSArCiAgZ2d0aXRsZSgiTWlzc2luZyBkYXRhIG92ZXJhbGwiKSAjbm8gbWlzaW5nIHZhbHVlcwpgYGAKCgojIyBHZW5lcmFsIHN1bW1hcnkgICAKCiAtIE51bWJlciBvZiBlZmZlY3Qgc2l6ZXM6IGByIGxlbmd0aCh1bmlxdWUoZGF0JEVmZmVjdF9JRCkpYCAgIAogLSBOdW1iZXIgb2Ygc3R1ZGllczogYHIgbGVuZ3RoKHVuaXF1ZShkYXQkU3R1ZHkpKWAgICAKIC0gUHVibGljYXRpb24geWVhcnM6IGZyb20gYHIgbWluKGRhdCRZZWFyLCBuYS5ybSA9IFRSVUUpYCB0byBgciBtYXgoZGF0JFllYXIsIG5hLnJtID0gVFJVRSlgICAgIAogLSBTaW1wbGUgbGlzdCBvZiBzdHVkaWVzIGFzIHNob3J0IHJlZmVyZW5jZXM6IGByIHVuaXF1ZShkYXQkU3R1ZHkpYCAgICAgCiAtIE51bWJlciBvZiBzcGVjaWVzOiBgciBsZW5ndGgodW5pcXVlKGRhdCRTcGVjaWVzX0xhdGluKSlgICAgICAKIC0gU2ltcGxlIGxpc3Qgb2Ygc3BlY2llcyBMYXRpbiBuYW1lcyAoYWxzbyBzdG9yZWQgaW4gIlBoeWxvZ2VueSIgdmFyaWFibGUpOiBgciB1bmlxdWUoZGF0JFNwZWNpZXNfTGF0aW4pYCAgICAKIC0gTnVtYmVyIG9mIGRhdGEgcG9pbnRzIGZvciBmZW1hbGVzOiBgciBsZW5ndGgod2hpY2goZGF0JFNleD09IkZlbWFsZSIpKWAsIGFuZCBkYXRhIHBvaW50cyBmb3JtIG1hbGVzOiBgciBsZW5ndGgod2hpY2goZGF0JFNleD09Ik1hbGUiKSlgICAgIAogCgpgYGB7ciBrZXkgdmFyaWFibGVzIHNpbXBsZSB0YWJsZXN9CiNLZXkgdmFyaWFibGVzOiBTZXgsIEdvbmFkc19yZW1vdmVkLCBXaWxkX29yX3NlbWlfd2lsZCwgQ29udHJvbGxlZF90cmVhdG1lbnRzLCBFZmZlY3RfdHlwZSwgTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwgKG9yZGluYWwgd2l0aCBOQSksIAojbmFtZXMoZGF0KQoKI2NoZWNrIGhvdyBjcm9zc2VkIHdpdGggU2V4IChyZWxldmFudCB0byBib3RoIHNleGVzIG9yIG5vdD8pCnRhYmxlKGRhdCRTcGVjaWVzX0xhdGluLCBkYXQkU2V4KQp0YWJsZShkYXQkV2lsZF9vcl9zZW1pX3dpbGQsIGRhdCRTZXgpCnRhYmxlKGRhdCRHb25hZHNfcmVtb3ZlZCwgZGF0JFNleCkgI2Fsd2F5cyBZZXMgaW4gTWFsZXMKdGFibGUoZGF0JENvbnRyb2xsZWRfdHJlYXRtZW50cywgZGF0JFNleCkKdGFibGUoZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsLCBkYXQkU2V4KSAjdGFibGUoZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudCkKdGFibGUoZGF0JEVmZmVjdF90eXBlLCBkYXQkU2V4KQoKI2NoZWNrIGhvdyBjcm9zc2VkIHdpdGggV2lsZF9vcl9zZW1pX3dpbGQKdGFibGUoZGF0JEdvbmFkc19yZW1vdmVkLCBkYXQkV2lsZF9vcl9zZW1pX3dpbGQpCnRhYmxlKGRhdCRDb250cm9sbGVkX3RyZWF0bWVudHMsIGRhdCRXaWxkX29yX3NlbWlfd2lsZCkKdGFibGUoZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsLCBkYXQkV2lsZF9vcl9zZW1pX3dpbGQpIAp0YWJsZShkYXQkRWZmZWN0X3R5cGUsIGRhdCRXaWxkX29yX3NlbWlfd2lsZCkKCiNjaGVjayBob3cgY3Jvc3NlZCB3aXRoIEdvbmFkc19yZW1vdmVkCnRhYmxlKGRhdCRXaWxkX29yX3NlbWlfd2lsZCwgZGF0JEdvbmFkc19yZW1vdmVkKQp0YWJsZShkYXQkQ29udHJvbGxlZF90cmVhdG1lbnRzLCBkYXQkR29uYWRzX3JlbW92ZWQpCnRhYmxlKGRhdCRNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgZGF0JEdvbmFkc19yZW1vdmVkKSAKdGFibGUoZGF0JEVmZmVjdF90eXBlLCBkYXQkR29uYWRzX3JlbW92ZWQpCgojY2hlY2sgaG93IGNyb3NzZWQgd2l0aCBDb250cm9sbGVkX3RyZWF0bWVudHMKdGFibGUoZGF0JFdpbGRfb3Jfc2VtaV93aWxkLCBkYXQkQ29udHJvbGxlZF90cmVhdG1lbnRzKQp0YWJsZShkYXQkR29uYWRzX3JlbW92ZWQsIGRhdCRDb250cm9sbGVkX3RyZWF0bWVudHMpCnRhYmxlKGRhdCRNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgZGF0JENvbnRyb2xsZWRfdHJlYXRtZW50cykKdGFibGUoZGF0JEVmZmVjdF90eXBlLCBkYXQkQ29udHJvbGxlZF90cmVhdG1lbnRzKQoKI2NoZWNrIGhvdyBjcm9zc2VkIHdpdGggRWZmZWN0X3R5cGUKdGFibGUoZGF0JFdpbGRfb3Jfc2VtaV93aWxkLCBkYXQkRWZmZWN0X3R5cGUpCnRhYmxlKGRhdCRHb25hZHNfcmVtb3ZlZCwgZGF0JEVmZmVjdF90eXBlKQp0YWJsZShkYXQkQ29udHJvbGxlZF90cmVhdG1lbnRzLCBkYXQkRWZmZWN0X3R5cGUpCnRhYmxlKGRhdCRNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgZGF0JEVmZmVjdF90eXBlKQpgYGAKCiMjIEtleSBwcmVkaWN0b3JzIChtb2RlcmF0b3JzKSAgIAoKVmlzdWFsaXNlIG1pc3NpbmcgZGF0YSBpbiA2IGtleSB2YXJpYWJsZXMgKG1vZGVyYXRvcnMpOiAgIAogLSBTZXgsICAgCiAtIFdpbGRfb3Jfc2VtaV93aWxkLCAgIAogLSBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgIAogLSBHb25hZHNfcmVtb3ZlZCwgICAKIC0gQ29udHJvbGxlZF90cmVhdG1lbnRzLCAgIAogLSBFZmZlY3RfdHlwZSAgCiAgCmBgYHtyIGtleSB2YXJpYWJsZXMgbWlzc2luZyB2YWx1ZXMsIGVjaG8gPSBGQUxTRX0KI2NyZWF0ZSBhIGRhdGEgc3Vic2V0IHd0aCBrZXkgdmFyaWFibGVzIG9ubHkKZGF0X2tleSA8LSBkYXQgJT4lIHNlbGVjdChTZXgsIFdpbGRfb3Jfc2VtaV93aWxkLCBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgR29uYWRzX3JlbW92ZWQsIENvbnRyb2xsZWRfdHJlYXRtZW50cywgRWZmZWN0X3R5cGUpCgp2aXNfbWlzcyhkYXRfa2V5KSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAzKSwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4odCA9IDAuNSwgciA9IDIsIGIgPSAxLCBsID0gMSwgdW5pdCA9ICJjbSIpKSArCiAgZ2d0aXRsZSgiTWlzc2luZyBkYXRhIGluIGtleSB2YXJpYWJsZXMiKSAjMzIlIG1pc2luZyB2YWx1ZXMgaW4gTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwgb25seQpgYGAKCiMjIFZpc3VhbGl6ZSBwYWlyd2lzZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiA2IGtleSB2YXJpYWJsZXM6ICAgCgpgYGB7ciBrZXkgdmFyaWFibGVzIGFzc29jaWF0aW9ucywgZWNobyA9IEZBTFNFfQojbmFtZXMoZGF0X2tleSkKI3VzZUdvb2RtYW4gYW5kIEtydXNrYWzigJlzIM+EIG1lYXN1cmUgb2YgYXNzb2NpYXRpb24gYmV0d2VlbiBjYXRlZ29yaWNhbCBwcmVkaWN0b3IgdmFyaWFibGVzIChmdW5jdGlvbiBmcm9tIHBhY2thZ2UgR29vZG1hbktydXNrYWw6IGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9Hb29kbWFuS3J1c2thbC92aWduZXR0ZXMvR29vZG1hbktydXNrYWwuaHRtbCkKR0ttYXRyaXggPC0gR0t0YXVEYXRhZnJhbWUoc3Vic2V0KGRhdF9rZXkpKQojcGFyKG1hcj1jKDEsMSwyLDQpKQpwbG90KEdLbWF0cml4KQpgYGAKCgpBbGx1dmlhbCBkaWFncmFtcyBmb3Iga2V5IHByZWRpY3RvciB2YXJpYWJsZXMgKG1vZGVyYXRvcnMpIC0gdHdvIGdyb3VwcyBvZiAzIG1vZGVyYXRvcnMsIGdyb3VwZWQgYnkgc2ltaWxhcml0eTogIAoKIyMgRm9yIFNleCwgR29uYWRzX3JlbW92ZWQsICQgTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwgKGNoYW5nZWQgTkEgdG8gMCkgIAoKCmBgYHtyIGFsbHV2aWFsIHBsb3RzIEEsIHJlc3VsdHMgPSAnaGlkZSd9CiN1c2UgZ2dhbGx1dmlhbCAoaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2dnYWxsdXZpYWwvdmlnbmV0dGVzL2dnYWxsdXZpYWwuaHRtbCkKCiMgY3JlYXRlIGEgZnJlcXVlbmN5IHRhYmxlIGZvciBmaXJzdCAzIG1vZGVyYXRvciB2YXJpYWJsZXMKIyBmcmVxXzEgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXQkU2V4LCBkYXQkR29uYWRzX3JlbW92ZWQsIGRhdCRNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCkpICU+JSByZW5hbWUoU2V4ID0gVmFyMSwgR29uYWRzX3JlbW92ZWQgPSBWYXIyLCBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCA9IFZhcjMpCiMgaXNfYWxsdXZpYV9mb3JtKGFzLmRhdGEuZnJhbWUoZnJlcV8xKSwgYXhlcyA9IDE6Mywgc2lsZW50ID0gVFJVRSkKIyAjZnJlcV8xICU+JSBmaWx0ZXIoRnJlcSAhPSAwKSAlPiUgYXJyYW5nZShkZXNjKEZyZXEpKSAjY29sbGFwZXNkIHRhYmxlIG9mIHZhbHVlcywgd2l0aG91dCAwcwoKIAojIGdncGxvdChkYXRhID0gZnJlcV8xLAojICAgYWVzKGF4aXMxID0gU2V4LCBheGlzMiA9IEdvbmFkc19yZW1vdmVkLCBheGlzMyA9IE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsLCB5ID0gRnJlcSkpICsKIyAgIGdlb21fYWxsdXZpdW0oYWVzKGZpbGwgPSBTZXgpKSArCiMgICBnZW9tX3N0cmF0dW0oYWVzKGZpbGwgPSBTZXgpKSsKIyAgIGdlb21fdGV4dChzdGF0ID0gInN0cmF0dW0iLCBhZXMobGFiZWwgPSBhZnRlcl9zdGF0KHN0cmF0dW0pKSkgKwojICN0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWVfdm9pZCgpICsKIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKIyAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHZqdXN0ID0gMyksCiMgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoKSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJTZXgiLCAiR29uYWRzIHJlbW92ZWQiLCAiTWF0dXJpdHkgY2xhc3MiKSwgZXhwYW5kID0gYygwLjE1LCAwLjA1KSwgcG9zaXRpb24gPSAidG9wIikgKwojICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQzIikgKwojICAgZ2d0aXRsZSgiQS4gU3ViamVjdHMgc2V4LCBtYW5pcHVsYXRpb24gdHlwZSBhbmQgbWF0dXJpdHkgY2xhc3MiKQoKI2FzIGFib3ZlIGJ1dCB3aXRoLCBidXQgd2l0aCBHb25hZHNfcmVtb3ZlZCBhcyBmaXJzdCBjb2x1bW4sIGFuZCBkaWZmZXJlbnQgY29sb3VycwojIGdncGxvdChkYXRhID0gZnJlcV8xLAojICAgYWVzKGF4aXMxID0gR29uYWRzX3JlbW92ZWQsIGF4aXMyID0gU2V4LCBheGlzMyA9IE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsLCB5ID0gRnJlcSkpICsKIyAgIGdlb21fYWxsdXZpdW0oYWVzKGZpbGwgPSBHb25hZHNfcmVtb3ZlZCkpICsKIyAgIGdlb21fc3RyYXR1bShhZXMoZmlsbCA9IEdvbmFkc19yZW1vdmVkKSkrCiMgICBnZW9tX3RleHQoc3RhdCA9ICJzdHJhdHVtIiwgYWVzKGxhYmVsID0gYWZ0ZXJfc3RhdChzdHJhdHVtKSkpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgIyAgdGhlbWVfdm9pZCgpICsKIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKIyAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHZqdXN0ID0gMyksCiMgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoKSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJHb25hZHNfcmVtb3ZlZCIsICJTZXgiLCAiTWF0dXJpdHkgY2xhc3MiKSwgZXhwYW5kID0gYygwLjE1LCAwLjA1KSwgcG9zaXRpb24gPSAidG9wIikgKwojICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYXN0ZWwyIikgKwojICAgZ2d0aXRsZSgiQS4gU3ViamVjdHMgc2V4LCBtYW5pcHVsYXRpb24gYW5kIG1hdHVyaXR5ICIpCgojTk9URTogYWxsIHJvd3Mgd2l0aCBOQSBpbiBNYXR1cml0eSBjbGFzcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBwbG90IAojcmVjb2RlIE5BIGFzIDAKZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsMiA8LSBkYXQkTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwKZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsMltpcy5uYShkYXQkTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwyKV0gPC0gMAojIGNyZWF0ZSBhIGZyZXF1ZW5jeSB0YWJsZSBmb3IgZmlyc3QgMyBtb2RlcmF0b3IgdmFyaWFibGVzCmZyZXFfMSA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKGRhdCRTZXgsIGRhdCRHb25hZHNfcmVtb3ZlZCwgZGF0JE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsMikpICU+JSByZW5hbWUoU2V4ID0gVmFyMSwgR29uYWRzX3JlbW92ZWQgPSBWYXIyLCBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCA9IFZhcjMpCmlzX2FsbHV2aWFfZm9ybShhcy5kYXRhLmZyYW1lKGZyZXFfMSksIGF4ZXMgPSAxOjMsIHNpbGVudCA9IFRSVUUpCiNmcmVxXzEgJT4lIGZpbHRlcihGcmVxICE9IDApICU+JSBhcnJhbmdlKGRlc2MoRnJlcSkpICNjb2xsYXBlc2QgdGFibGUgb2YgdmFsdWVzLCB3aXRob3V0IDBzCgogCiMgZ2dwbG90KGRhdGEgPSBmcmVxXzEsCiMgICBhZXMoYXhpczEgPSBTZXgsIGF4aXMyID0gR29uYWRzX3JlbW92ZWQsIGF4aXMzID0gTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwsIHkgPSBGcmVxKSkgKwojICAgZ2VvbV9hbGx1dml1bShhZXMoZmlsbCA9IFNleCkpICsKIyAgIGdlb21fc3RyYXR1bShhZXMoZmlsbCA9IFNleCkpKwojICAgZ2VvbV90ZXh0KHN0YXQgPSAic3RyYXR1bSIsIGFlcyhsYWJlbCA9IGFmdGVyX3N0YXQoc3RyYXR1bSkpKSArCiMgI3RoZW1lX21pbmltYWwoKSArCiMgICB0aGVtZV92b2lkKCkgKwojICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAojICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAzKSwKIyAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCgpLAojICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpKSArCiMgICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIlNleCIsICJHb25hZHMgcmVtb3ZlZCIsICJNYXR1cml0eSBjbGFzcyIpLCBleHBhbmQgPSBjKDAuMTUsIDAuMDUpLCBwb3NpdGlvbiA9ICJ0b3AiKSArCiMgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDMiKSArCiMgICBnZ3RpdGxlKCJBLiBTdWJqZWN0cyBzZXgsIG1hbmlwdWxhdGlvbiB0eXBlIGFuZCBtYXR1cml0eSBjbGFzcyIpCgojYXMgYWJvdmUgYnV0IHdpdGgsIGJ1dCB3aXRoIEdvbmFkc19yZW1vdmVkIGFzIGZpcnN0IGNvbHVtbiwgYW5kIGRpZmZlcmVudCBjb2xvdXJzCmdncGxvdChkYXRhID0gZnJlcV8xLAogIGFlcyhheGlzMSA9IEdvbmFkc19yZW1vdmVkLCBheGlzMiA9IFNleCwgYXhpczMgPSBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCwgeSA9IEZyZXEpKSArCiAgZ2VvbV9hbGx1dml1bShhZXMoZmlsbCA9IEdvbmFkc19yZW1vdmVkKSkgKwogIGdlb21fc3RyYXR1bShhZXMoZmlsbCA9IEdvbmFkc19yZW1vdmVkKSkrCiAgZ2VvbV90ZXh0KHN0YXQgPSAic3RyYXR1bSIsIGFlcyhsYWJlbCA9IGFmdGVyX3N0YXQoc3RyYXR1bSkpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKIyAgdGhlbWVfdm9pZCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAzKSwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIikpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIkdvbmFkc19yZW1vdmVkIiwgIlNleCIsICJNYXR1cml0eSBjbGFzcyIpLCBleHBhbmQgPSBjKDAuMTUsIDAuMDUpLCBwb3NpdGlvbiA9ICJ0b3AiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYXN0ZWwyIikgKwogIGdndGl0bGUoIkEuIFN1YmplY3RzIHNleCwgbWFuaXB1bGF0aW9uIGFuZCBtYXR1cml0eSAiKQpgYGAKCiMjIEZvciBXaWxkX29yX3NlbWlfd2lsZCwgQ29udHJvbGxlZF90cmVhdG1lbnRzLCAmIEVmZmVjdF90eXBlIChPdXRjb21lIHR5cGUpCgpgYGB7ciBhbGx1dmlhbCBwbG90cyBCLCByZXN1bHRzID0gJ2hpZGUnfQojIGNyZWF0ZSBhIGZyZXF1ZW5jeSB0YWJsZSBmb3IgbmV4dCAzIG1vZGVyYXRvciB2YXJpYWJsZXMKZnJlcV8yIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0JFdpbGRfb3Jfc2VtaV93aWxkLCBkYXQkQ29udHJvbGxlZF90cmVhdG1lbnRzLCBkYXQkRWZmZWN0X3R5cGUpKSAlPiUgcmVuYW1lKFdpbGRfb3Jfc2VtaV93aWxkID0gVmFyMSwgQ29udHJvbGxlZF90cmVhdG1lbnRzID0gVmFyMiwgRWZmZWN0X3R5cGUgPSBWYXIzKQppc19hbGx1dmlhX2Zvcm0oYXMuZGF0YS5mcmFtZShmcmVxXzIpLCBheGVzID0gMTozLCBzaWxlbnQgPSBUUlVFKQojZnJlcV8yICU+JSBmaWx0ZXIoRnJlcSAhPSAwKSAlPiUgYXJyYW5nZShkZXNjKEZyZXEpKSAjY29sbGFwZXNkIHRhYmxlIG9mIHZhbHVlcywgd2l0aG91dCAwcwoKZ2dwbG90KGRhdGEgPSBmcmVxXzIsCiAgYWVzKGF4aXMxID0gV2lsZF9vcl9zZW1pX3dpbGQsIGF4aXMyID0gQ29udHJvbGxlZF90cmVhdG1lbnRzLCBheGlzMyA9IEVmZmVjdF90eXBlLCB5ID0gRnJlcSkpICsKICBnZW9tX2FsbHV2aXVtKGFlcyhmaWxsID0gV2lsZF9vcl9zZW1pX3dpbGQpKSArCiAgZ2VvbV9zdHJhdHVtKGFlcyhmaWxsID0gV2lsZF9vcl9zZW1pX3dpbGQpKSsKICBnZW9tX3RleHQoc3RhdCA9ICJzdHJhdHVtIiwgYWVzKGxhYmVsID0gYWZ0ZXJfc3RhdChzdHJhdHVtKSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwojICB0aGVtZV92b2lkKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDMpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiKSkgKwogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiV2lsZF9vcl9zZW1pX3dpbGQiLCAiQ29udHJvbGxlZF90cmVhdG1lbnRzIiwgIk91dGNvbWUgdHlwZSIpLCBleHBhbmQgPSBjKDAuMTUsIDAuMDUpLCBwb3NpdGlvbiA9ICJ0b3AiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYXN0ZWwxIikgKwogIGdndGl0bGUoIkIuIEV4cGVyaW1lbnRhbCBzZXR0aW5ncyBhbmQgb3V0Y29tZSB0eXBlIikKCiNuYW1lcyhkYXRfa2V5KQpgYGAKCgojIyBGb3IgR29uYWRzX3JlbW92ZWQsIFdpbGRfb3Jfc2VtaV93aWxkLCBDb250cm9sbGVkX3RyZWF0bWVudHMsICYgRWZmZWN0X3R5cGUgKE91dGNvbWUgdHlwZSkgCgpgYGB7ciBhbGx1dmlhbCBwbG90cyBDLCByZXN1bHRzID0gJ2hpZGUnfQojIGNyZWF0ZSBhIGZyZXF1ZW5jeSB0YWJsZSBmb3IgbmV4dCAzIG1vZGVyYXRvciB2YXJpYWJsZXMKZnJlcV8zIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0JEdvbmFkc19yZW1vdmVkLCBkYXQkV2lsZF9vcl9zZW1pX3dpbGQsIGRhdCRFZmZlY3RfdHlwZSkpICU+JSByZW5hbWUoR29uYWRzX3JlbW92ZWQgPSBWYXIxLCBXaWxkX29yX3NlbWlfd2lsZCA9IFZhcjIsIEVmZmVjdF90eXBlID0gVmFyMykKaXNfYWxsdXZpYV9mb3JtKGFzLmRhdGEuZnJhbWUoZnJlcV8zKSwgYXhlcyA9IDE6Mywgc2lsZW50ID0gVFJVRSkKI2ZyZXFfMiAlPiUgZmlsdGVyKEZyZXEgIT0gMCkgJT4lIGFycmFuZ2UoZGVzYyhGcmVxKSkgI2NvbGxhcGVzZCB0YWJsZSBvZiB2YWx1ZXMsIHdpdGhvdXQgMHMKCmdncGxvdChkYXRhID0gZnJlcV8zLAogIGFlcyhheGlzMSA9IEdvbmFkc19yZW1vdmVkLCBheGlzMiA9IFdpbGRfb3Jfc2VtaV93aWxkLCBheGlzMyA9IEVmZmVjdF90eXBlLCB5ID0gRnJlcSkpICsKICBnZW9tX2FsbHV2aXVtKGFlcyhmaWxsID0gR29uYWRzX3JlbW92ZWQpKSArCiAgZ2VvbV9zdHJhdHVtKGFlcyhmaWxsID0gR29uYWRzX3JlbW92ZWQpKSsKICBnZW9tX3RleHQoc3RhdCA9ICJzdHJhdHVtIiwgYWVzKGxhYmVsID0gYWZ0ZXJfc3RhdChzdHJhdHVtKSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwojICB0aGVtZV92b2lkKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDMpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiKSkgKwogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiR29uYWRzX3JlbW92ZWQiLCAiV2lsZF9vcl9zZW1pX3dpbGQiLCAiT3V0Y29tZSB0eXBlIiksIGV4cGFuZCA9IGMoMC4xNSwgMC4wNSksIHBvc2l0aW9uID0gInRvcCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDMiKSArCiAgZ2d0aXRsZSgiQy4gTWFuaXB1bGF0aW9uLCBzdWJqZWN0IGFuZCBvdXRjb21lIHR5cGVzIikKCiNuYW1lcyhkYXRfa2V5KQpgYGAKClRoaXMganVzdCBzaG93cyBhIGRpZmZlcmVudCBjb21iaW5hdGlvbiBvZiBwcmVkaWN0b3IgdmFyaWFibGVzIChtb2RlcmF0b3JzKSBmcm9tIHBsb3RzIEEgYW5kIEIuICAgICAgCgojIEJ1aWxkaW5nIHBoeWxvZ2VuZXRpYyB0cmVlIHsudGFic2V0IC50YWJzZXQtcGlsbHMgLnRhYnNldC1mYWRlfQoKIyMgU2V0dGluZyB1cAoKYGBge3IgZ2V0IHNwZWNpZXMgbGlzdCwgbWVzc2FnZSA9IEZBTFNFLCBlY2hvID0gVFJVRSwgZXZhbCA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9Cm5hbWVzKGRhdCkKbXlzcGVjaWVzIDwtIGFzLmNoYXJhY3Rlcih1bmlxdWUoZGF0JFNwZWNpZXNfTGF0aW4pKSAjZ2V0IGxpc3Qgb2Ygc3BlY2llcwojc3RyX3NvcnQobXlzcGVjaWVzKSAjdmlzdWFsIGNoZWNrCiNsZW5ndGgobXlzcGVjaWVzKSAjMjMgc3BlY2llcwojbGVuZ3RoKHVuaXF1ZShteXNwZWNpZXMpKSAjMjMgdW5pcXVlIHNwZWNpZXMgbmFtZXMKYGBgCgpVc2luZyAqcm90bCogcGFja2FnZSB0byByZXRyaWV2ZSBzeW50aGV0aWMgc3BlY2llcyB0cmVlIGZyb20gT3BlbiBUcmVlIG9mIExpZmU6IFJvdGwgaXMgYW4gUiBwYWNrYWdlICg8aHR0cHM6Ly9wZWVyai5jb20vcHJlcHJpbnRzLzE0NzEvPikgYWxsb3dpbmcgYWNjZXNzIHRvIHN5bnRoZXRpYyBwaHlsb2dlbmV0aWMgdHJlZSBhdmFpbGFibGUgYXQgT3BlbiBUcmVlIG9mIExpZmUgZGF0YWJhc2UgKDxodHRwczovL29wZW50cmVlb2ZsaWZlLm9yZy8+KS4KCmBgYHtyIHJvdGwgZmluZCBzcGVjaWVzLCBtZXNzYWdlID0gRkFMU0UsIGVjaG8gPSBUUlVFLCBldmFsID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KdGF4YSA8LSB0bnJzX21hdGNoX25hbWVzKG5hbWVzID0gbXlzcGVjaWVzKQpkaW0odGF4YSkgIzQwIHNwZWNpYXMgLSBhbGwgbWF0Y2hlZAp0YWJsZSh0YXhhJGFwcHJveGltYXRlX21hdGNoKSAjMSBhcHByb3hpbWF0ZSBtYXRjaAp0YXhhW3RheGEkYXBwcm94aW1hdGVfbWF0Y2ggPT0gVFJVRSwgXSAjI2xhbXBlcnRhIGZsdXZpYXRpbGlzIChzZWFyY2hfc3RyaW5nKSB3aWxsIGJlIHByZXNlbnRlZCBhcyBQZXJjYSBmbHV2aWF0aWxpcyAodW5pcXV3X25hbWUpCmBgYAoKIyMgR2V0IHRoZSBpbml0aWFsIHRyZWUKCmBgYHtyIHJvdGwgc3BlY2llcyB0cmVlLCB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHM9RkFMU0UsIGV2YWw9IEZBTFNFLCBlY2hvID0gVFJVRX0KdHJlZSA8LSB0b2xfaW5kdWNlZF9zdWJ0cmVlKG90dF9pZHMgPSB0YXhhW1sib3R0X2lkIl1dLCBsYWJlbF9mb3JtYXQgPSAibmFtZSIpICAKIyBwbG90KHRyZWUsIGNleD0uNiwgbGFiZWwub2Zmc2V0ID0uMSwgbm8ubWFyZ2luID0gVFJVRSkgdmlzdWFsIGNoZWNrCmBgYAoKIyMgQ2hlY2sgbWF0Y2hpbmcgc3BlY2llcyAmIGxhYmVscwoKYGBge3IgcmUtY2hlY2sgdHJlZSBsYWJlbHMsIGV2YWw9RiwgZWNobz1UfQojY2hlY2sgb3ZlcmxhcCBhbmQgZGlmZmVyZW5jZXMgd2l0aCB0aGUgdGF4YSBsaXN0CmludGVyc2VjdChnc3ViKCJfIiwiICIsIHRyZWUkdGlwLmxhYmVsKSwgbXlzcGVjaWVzKSAjMjIKc2V0ZGlmZihnc3ViKCJfIiwiICIsIHRyZWUkdGlwLmxhYmVsKSwgbXlzcGVjaWVzKSAjICJQZXJjYSBmbHV2aWF0aWxpcyIgIApzZXRkaWZmKG15c3BlY2llcywgZ3N1YigiXyIsIiAiLCB0cmVlJHRpcC5sYWJlbCkpICMgIkxhbXBlcnRhIGZsdXZpYXRpbGlzIgp0cmVlJHRpcC5sYWJlbCA8LSBnc3ViKCJQZXJjYV9mbHV2aWF0aWxpcyIsICJMYW1wZXJ0YV9mbHV2aWF0aWxpcyIsIHRyZWUkdGlwLmxhYmVsKSAjcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lCgojdHJlZSA8LSBkcm9wLnRpcCh0cmVlLCAiRXF1dXNfY2FiYWxsdXMiKQojcmUtY2hlY2sgb3ZlcmxhcCBhbmQgZGlmZmVyZW5jZXMgd2l0aCBteXNwZWNpZXMgbGlzdAojaW50ZXJzZWN0KG15c3BlY2llcywgdHJlZTIkdGlwLmxhYmVsKSAjMjMKI3NldGRpZmYobXlzcGVjaWVzLCB0cmVlMiR0aXAubGFiZWwpICMwCiNzZXRkaWZmKHRyZWUyJHRpcC5sYWJlbCwgbXlzcGVjaWVzKSAjMAoKI2NoZWNrIGlmIHRoZSB0cmVlIGlzIHJlYWxseSBiaW5hcnkgCmlzLmJpbmFyeS50cmVlKHRyZWUpICNUUlVFCiMgdHJlZV9iaW5hcnkkbm9kZS5sYWJlbCA8LSBOVUxMICN5b3UgY2FuIGRlbGV0ZSBpbnRlcm5hbCBub2RlIGxhYmVscwojICpOT1RFOiogbm8gYnJhbmNoIGxlbmd0aHMgYXJlIGluY2x1ZGVkLCB0aGV5IGNhbiBiZSBjcmVhdGVkIGxhdGVyIHZpYSBzaW11bGF0aW9ucy4gIAoKd3JpdGUudHJlZSh0cmVlLCBmaWxlPWhlcmUoImRhdGEiLCAidHJlZV9yb3RsLnRyZSIpKSAjc2F2ZSB0aGUgdHJlZQoKIyAqTk9URToqIHVuZGVyc2NvcmVzIHdpdGhpbiBzcGVjaWVzIG5hbWVzIG9uIHRyZWUgdGlwIGxhYmFscyBhcmUgYWRkZWQgYXV0b21hdGljYWxseQojIHRyZWUgPC0gcmVhZC50cmVlKGZpbGU9InBsb3RfY29va2VkX2Zpc2hfTUEudHJlIikgI2lmIHlvdSBuZWVkIHRvIHJlYWQgaW4gdGhlIHRyZWUKIyB0cmVlJHRpcC5sYWJlbCA8LSBnc3ViKCJfIiwiICIsIHRyZWUkdGlwLmxhYmVsKSAjZ2V0IHJpZCBvZiB0aGUgdW5kZXJzY29yZXMKIyB0cmVlJG5vZGUubGFiZWwgPC0gTlVMTCAjeW91IGNhbiBkZWxldGUgaW50ZXJuYWwgbm9kZSBsYWJlbHMKYGBgCgojIyBQbG90IHBoeWxvZ2VuZXRpYyB0cmVlCgpgYGB7ciBwbG90IHBoeWxvZ2VuZXRpYyB0cmVlLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9MjAsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRX0KCnRyZWUgPC0gcmVhZC50cmVlKGhlcmUoImRhdGEvdHJlZV9yb3RsLnRyZSIpKQoKcGxvdCh0cmVlLCBjZXg9LjYsIGxhYmVsLm9mZnNldCA9LjEsIG5vLm1hcmdpbiA9IFRSVUUpCgojICNvciBwbG90IHRvIHBkZgojIHBkZihoZXJlKCJmaWdzL3JvdGxfdHJlZS5wZGYiKSwgd2lkdGg9OCwgaGVpZ2g9MTApCiMgcGxvdCh0cmVlLCBjZXg9MC42LCBsYWJlbC5vZmZzZXQgPS4xLCBuby5tYXJnaW4gPSBUUlVFKQojIGRldi5vZmYoKQpgYGAKCiMgTWV0YS1hbmFseXNpczogbWFpbiB7LnRhYnNldCAudGFic2V0LXBpbGxzIC50YWJzZXQtZmFkZX0KCiMjIE1haW4gbW9kZWwKCmBgYHtyfQojIFZDViBtYXRyaXggdG8gbW9kZWwgc2hhcmVkIGNvbnRyb2wgClZfbWF0cml4IDwtIGltcHV0ZV9jb3ZhcmlhbmNlX21hdHJpeCh2aSA9IGRhdCR2aSwgY2x1c3RlciA9IGRhdCRTaGFyZWRfY29udHJvbCwgciA9IDAuNSkKCiMgcGh5bG9nZW55IHRvIG1vZGVsCiN0cmVlIDwtIHJlYWQudHJlZShoZXJlKCJkYXRhL3RyZWVfcm90bC50cmUiKSkKdHJlZSA8LSBjb21wdXRlLmJybGVuKHRyZWUpCgpjb3JfdHJlZSA8LSB2Y3YodHJlZSwgY29yciA9IFRSVUUpCgojIGNoZWNraW5nIHRoZSBtYXRjaAptYXRjaCh1bmlxdWUoZGF0JFBoeWxvZ2VueSksIGNvbG5hbWVzKGNvcl90cmVlKSkKCgojIG1ldGEtYW5hbHlzaXMgYmFzaWNzCiMgcGh5bG9nZW5ldGljIG1vZGVsCm1vZCA8LSAgcm1hLm12KHlpLCBWID0gVl9tYXRyaXgsIG1vZCA9IH4gMSwgCiAgICAgICAgICAgICAgIHJhbmRvbSA9IGxpc3QofjF8UGh5bG9nZW55LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxTcGVjaWVzX0xhdGluLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxTdHVkeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8RWZmZWN0X0lEKSwgCiAgICAgICAgICAgICAgIFIgPSBsaXN0KFBoeWxvZ2VueSA9IGNvcl90cmVlKSwgCiAgICAgICAgICAgICAgIGRhdGEgPSBkYXQsIAogICAgICAgICAgICAgICB0ZXN0ID0gInQiLAogICAgICAgICAgICAgICBzcGFyc2UgPSBUUlVFLAogICAgICAgICAgICAgICBjb250cm9sPWxpc3Qob3B0aW1pemVyPSJvcHRpbSIsIG9wdG1ldGhvZD0iTmVsZGVyLU1lYWQiKQogICAgICAgICAgICAgICApCnN1bW1hcnkobW9kKSAKCnJvdW5kKGkyX21sKG1vZCksMikgIyBhbG1vc3Qgbm8gcGh5bG9nZW5ldGljIGVmZmVjdApgYGAKCmBgYHtyfQoKIyB2aXN1YWxpemluZyB0aGUgcmVzdWx0Cm9yY2hhcmRfcGxvdChtb2QsIHhsYWIgPSAibG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIGdyb3VwID0gIlN0dWR5IiwgZGF0YSA9IGRhdCkKYGBgCgpgYGB7cn0KIyByZWR1Y2VkIG1vZGVsIHdpdGhvdXQgcGh5bG9nZW55IAojIHdlIHVzZSB0aGlzIGFzIG91ciBiYXNlIG1vZGVsIGZvciBtZXRhLXJlZ3Jlc3Npb24KCm1vZDIgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4LCBtb2QgPSB+IDEsIAogICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCN+MXxQaHlsb2dlbnksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFNwZWNpZXNfTGF0aW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFN0dWR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxFZmZlY3RfSUQpLCAKICAgICAgICAgICAgICAgI1IgPSBsaXN0KFBoeWxvZ2VueSA9IGNvcl90cmVlKSwgCiAgICAgICAgICAgICAgIGRhdGEgPSBkYXQsIAogICAgICAgICAgICAgICB0ZXN0ID0gInQiLAogICAgICAgICAgICAgICBzcGFyc2UgPSBUUlVFLAogICAgICAgICAgICAgICBjb250cm9sPWxpc3Qob3B0aW1pemVyPSJvcHRpbSIsIG9wdG1ldGhvZD0iTmVsZGVyLU1lYWQiKQogICAgICAgICAgICAgICApCnN1bW1hcnkobW9kMikgCiMgd2Ugd2lsbCBub3QgdXNlIHJvYnVzdCBmb3IgdGhlIGFuYWx5c2lzIC0gdGhleSBkbyBub3Qgc2VlbSB0byBjaGFuZ2UgdGhlIHJlc3VsdHMKIyByb2IyLjIgPC0gcm9idXN0KG1vZDIsIGNsdXN0ZXIgPSBTdHVkeSwgYWRqdXN0PVRSVUUsIGNsdWJTYW5kd2ljaD1UUlVFLCB2ZXJib3NlPVRSVUUpCiMgcm9iMi4yCgphbm92YShtb2QsIG1vZDIpICMgdGhleSBhcmUgbm90IHNpZ25pZmljYW50bHkgZGlmZmVyZW50CgpgYGAKCiMjIFNleC13aXNlIHNwZWNpZXMtbGV2ZWwgZWZmZWN0IChGaWd1cmUgMUEpCgpgYGB7ciwgZXZhbD1GLCBlY2hvPVR9CiMgY3JlYXRpbmcgbW9kX3RhYmxlLSByZXN1bHRzIGZyb20gdGhlIG1vZGVsCgpyZXN1bHRzIDwtIG1vZF9yZXN1bHRzKG1vZCwgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0KVtbMV1dCgojIGNyZWF0ZSBhIG5ldyBjbHVzdGVyCmRhdCRQaHlsb19TZXggPC0gcGFzdGUoZGF0JFBoeWxvZ2VueSwgZGF0JFNleCAsIHNlcCA9ICJfIiApCgojIHJobyA9IDAuNSBpcyBhcyBpbiBOb2JsZSBldCBhbCAoTW9sIEVjb2wpCmRhdCA8LSBlc2NhbGMoeWk9eWksIHZpPXZpLCBkYXRhID0gZGF0KQpjZGF0IDwtIGFnZ3JlZ2F0ZShkYXQsIGNsdXN0ZXI9UGh5bG9fU2V4LCBzdHJ1Y3Q9IkNTIiwgcmhvID0gMC41KQoKZGltKGRhdCkKZGltKGNkYXQpCgojIENJCmNkYXQkbG93ZXIuY2kgPC0gY2RhdCR5aSAtIHNxcnQoY2RhdCR2aSkgKiBxbm9ybSgwLjk3NSkgCmNkYXQkdXBwZXIuY2kgPC0gY2RhdCR5aSArIHNxcnQoY2RhdCR2aSkgKiAgcW5vcm0oMC45NzUpCgojIGFkZGluZyBtb3JlIGluZm9ybWFpdGlvbgpjZGF0ICU+JSBzZWxlY3QoU3BlY2llc19MYXRpbiwgeWksIGxvd2VyLmNpLCB1cHBlci5jaSwgU2V4KSAtPiBkZGF0CgphZGRpdGlvbiA8LSBkYXRhLmZyYW1lKFNwZWNpZXNfTGF0aW4gPSAiT3ZlcmFsbCIsIHlpID0gIE5BLGxvd2VyLmNpID0gTkEsIHVwcGVyLmNpID0gTkEsIFNleCA9ICJGZW1hbGUiKQoKZGRhdCA8LSByYmluZChkZGF0LCBhZGRpdGlvbikKCnN1bV9kYXRhIDwtIGRhdGEuZnJhbWUoInguZGlhbW9uZCIgPSBjKHJlc3VsdHMkbG93ZXJDTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzJGVzdGltYXRlICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzJHVwcGVyQ0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyRlc3RpbWF0ZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgInkuZGlhbW9uZCIgPSBjKDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSArIDAuMjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gMC4yNSkKICApCgoKZGRhdCRTcGVjaWVzX0xhdGluIDwtICBmYWN0b3IoZGRhdCRTcGVjaWVzX0xhdGluLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiT3ZlcmFsbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYW1wZXJ0YSBmbHV2aWF0aWxpcyIsICMgZmlzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmNvcmh5bmNodXMgbmVya2EiLCAjIGZpc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25jb3JoeW5jaHVzIG1hc291IiAsICMgZmlzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbm9saXMgc2FncmVpIiAsICMgbGl6YXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBoYXNjb2xhcmN0b3MgY2luZXJldXMiLCAjbWFzcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmljaG9zdXJ1cyB2dWxwZWN1bGEiLCAjIG1hc3A/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9yeWN0b2xhZ3VzIGN1bmljdWx1cyIsICMgcmFiYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lc29jcmljZXR1cyBhdXJhdHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk15b2RlcyBnbGFyZW9sdXMiLCAjIHZvbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhdHR1cyBub3J2ZWdpY3VzIiwgIyByYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmF0dHVzIGFyZ2VudGl2ZW50ZXIiICwgI3JhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXMgbXVzY3VsdXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3ZpcyBhcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVxdXVzIGZlcnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2RvY29pbGV1cyB2aXJnaW5pYW51cyIgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnVscGVzIHZ1bHBlcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5pcyBsdXB1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZlbGlzIGNhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFyZWNpYSB2YXJpZWdhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYXJlY2lhIHJ1YnJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFjYWNhIGZhc2NpY3VsYXJpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhvbW8gc2FwaWVucyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgID0gYygiT3ZlcmFsbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYW1wZXJ0YSBmbHV2aWF0aWxpcyIsICMgZmlzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmNvcmh5bmNodXMgbmVya2EiLCAjIGZpc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25jb3JoeW5jaHVzIG1hc291IiAsICMgZmlzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbm9saXMgc2FncmVpIiAsICMgbGl6YXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBoYXNjb2xhcmN0b3MgY2luZXJldXMiLCAjbWFzcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmljaG9zdXJ1cyB2dWxwZWN1bGEiLCAjIG1hc3A/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9yeWN0b2xhZ3VzIGN1bmljdWx1cyIsICMgcmFiYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lc29jcmljZXR1cyBhdXJhdHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk15b2RlcyBnbGFyZW9sdXMiLCAjIHZvbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhdHR1cyBub3J2ZWdpY3VzIiwgIyByYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmF0dHVzIGFyZ2VudGl2ZW50ZXIiICwgI3JhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXMgbXVzY3VsdXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3ZpcyBhcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVxdXVzIGZlcnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2RvY29pbGV1cyB2aXJnaW5pYW51cyIgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnVscGVzIHZ1bHBlcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5pcyBsdXB1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZlbGlzIGNhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFyZWNpYSB2YXJpZWdhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYXJlY2lhIHJ1YnJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFjYWNhIGZhc2NpY3VsYXJpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhvbW8gc2FwaWVucyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQoKCnBoeV9zZXggPC0gZ2dwbG90KGRhdGEgPSBkZGF0LCBhZXMoeCA9IHlpLCB5ID0gU3BlY2llc19MYXRpbikpICsKICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBsb3dlci5jaSwgeG1heCA9IHVwcGVyLmNpLCBjb2xvdXIgPSBTZXgpLCAKICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMCwgc2hvdy5sZWdlbmQgPSBUUlVFLCBzaXplID0gNC41LCBhbHBoYSA9IDAuOCwgcG9zaXRpb24gPXBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43NSkpICsKICAgZ2VvbV9wb2ludChhZXMoY29sID0gU2V4KSwgZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAyLCBzaGFwZSA9IDIxLCBwb3NpdGlvbiA9cG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC43NSkpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9IDIsIGNvbG91ciA9ICJibGFjayIsIGFscGhhID0gMC4zKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbW9kJGIsIGxpbmV0eXBlID0gMSwgY29sb3VyID0gInJlZCIsIGFscGhhID0gMC4zKSArCiAgeGxpbSgtMS42LCAxLjYpICsKICAjY3JlYXRpbmcgOTUlIHByZWRpY3Rpb24gaW50ZXJ2YWxzCiAgZ2VvbV9zZWdtZW50KGRhdGEgPSByZXN1bHRzLCBnZ3Bsb3QyOjphZXMoeCA9IGxvd2VyUFIsIHkgPSAxLCB4ZW5kID0gdXBwZXJQUiwgeWVuZCA9IDEsIGdyb3VwID0gbmFtZSkpICsKICAgICMgY3JlYXRpbmcgZGlhbW9uc3RzICg5NSUgQ0kpCiAgICBnZ3Bsb3QyOjpnZW9tX3BvbHlnb24oZGF0YSA9IHN1bV9kYXRhLCBnZ3Bsb3QyOjphZXMoeCA9IHguZGlhbW9uZCwgeSA9IHkuZGlhbW9uZCksIGZpbGwgPSAicmVkIikgKwogIAogIHRoZW1lX2J3KCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjQ0M2Njc3IiwgIiM4OENDRUUiKSkgKwogICBsYWJzKHggPSAibG5SUiAoZWZmZWN0IHNpemUpIiwgeSA9ICIiLCBjb2xvdXIgPSAiU2V4IikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0gYygwLjk1LCAwLjg1KSwgbGVnZW5kLmp1c3RpZmljYXRpb24gPSBjKDEsIDApKSArCiAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSkgKwogICN0aGVtZShsZWdlbmQuZGlyZWN0aW9uPSJob3Jpem9udGFsIikgKwogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBjb2xvdXIgPSJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoanVzdCA9IDAuNSkpIAoKCiMgYWRkaW5nIGluY29ucwpmaWxlbmFtZXMgPC0gbGlzdC5maWxlcygiaWNvbnMiLCBwYXR0ZXJuPSIucG5nIiwgZnVsbC5uYW1lcz1UUlVFKQpsZGYgPC0gbGFwcGx5KGZpbGVuYW1lcywgcmVhZFBORykKbmFtZXMobGRmKSA8LSBzdWJzdHIoZmlsZW5hbWVzLCA3LCA2MCkKCnAwIDwtIHBoeV9zZXggKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJExhbXBldHJhX2ZsdXZpYXRpbGlzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxLjUsIHltYXggPSAyLjUpICsKICBhbm5vdGF0aW9uX2N1c3RvbShyYXN0ZXJHcm9iKGxkZiRPbmNvcmh5bmNodXNfbmVya2EucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDIuNSwgeW1heCA9IDMuNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJE9uY29yaHluY2h1c19tYXNvdS5wbmcpLCB4bWluID0gLTEuNSwgeG1heCA9IC0xLCB5bWluID0gMy41LCB5bWF4ID0gNC41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkQW5vbGlzX3NhZ3JlaS5wbmcpLCB4bWluID0gLTEuNSwgeG1heCA9IC0xLCB5bWluID0gNC41LCB5bWF4ID0gNS41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkUGhhc2NvbGFyY3Rvc19jaW5lcmV1cy5wbmcpLCB4bWluID0gLTEuNSwgeG1heCA9IC0xLCB5bWluID0gNS41LCB5bWF4ID0gNi41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkVHJpY2hvc3VydXNfdnVscGVjdWxhLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSA2LjUsIHltYXggPSA3LjUpICsKICBhbm5vdGF0aW9uX2N1c3RvbShyYXN0ZXJHcm9iKGxkZiRPcnljdG9sYWd1c19jdW5pY3VsdXMucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDcuNSwgeW1heCA9IDguNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJE1lc29jcmljZXR1c19hdXJhdHVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSA4LjUsIHltYXggPSA5LjUpICsKICBhbm5vdGF0aW9uX2N1c3RvbShyYXN0ZXJHcm9iKGxkZiRNeW9kZXNfZ2xhcmVvbHVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSA5LjUsIHltYXggPSAxMC41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkUmF0dHVzX25vcnZlZ2ljdXMucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDEwLjUsIHltYXggPSAxMS41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkUmF0dHVzX2FyZ2VudGl2ZW50ZXIucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDExLjUsIHltYXggPSAxMi41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkTXVzX211c2N1bHVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxMi41LCB5bWF4ID0gMTMuNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJE92aXNfYXJpZXMucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDEzLjUsIHltYXggPSAxNC41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkRXF1dXNfZmVydXMucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDE0LjUsIHltYXggPSAxNS41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkT2RvY29pbGV1c192aXJnaW5pYW51cy5wbmcpLCB4bWluID0gLTEuNSwgeG1heCA9IC0xLCB5bWluID0gMTUuNSwgeW1heCA9IDE2LjUpICsKICBhbm5vdGF0aW9uX2N1c3RvbShyYXN0ZXJHcm9iKGxkZiRWdWxwZXNfdnVscGVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxNi41LCB5bWF4ID0gMTcuNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJENhbmlzX2x1cHVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxNy41LCB5bWF4ID0gMTguNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJEZlbGlzX2NhdHVzLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxOC41LCB5bWF4ID0gMTkuNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJFZhcmVjaWFfdmFyaWVnYXRhLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAxOS41LCB5bWF4ID0gMjAuNSkgKwogIGFubm90YXRpb25fY3VzdG9tKHJhc3Rlckdyb2IobGRmJFZhcmVjaWFfcnVicmEucG5nKSwgeG1pbiA9IC0xLjUsIHhtYXggPSAtMSwgeW1pbiA9IDIwLjUsIHltYXggPSAyMS41KSArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkTWFjYWNhX0Zhc2NpY3VsYXJpcy5wbmcpLCB4bWluID0gLTEuNSwgeG1heCA9IC0xLCB5bWluID0gMjEuNSwgeW1heCA9IDIyLjUpICArCiAgYW5ub3RhdGlvbl9jdXN0b20ocmFzdGVyR3JvYihsZGYkSG9tb19zYXBpZW5zLnBuZyksIHhtaW4gPSAtMS41LCB4bWF4ID0gLTEsIHltaW4gPSAyMi41LCB5bWF4ID0gMjMuNSkgCgpwMApgYGAKCiFbXSguLi9maWdzL2ZpZzFhLnBuZykKCiMgTWV0YS1yZWdyZXNzaW9uOiBub24tZnVsbCBtb2RlbHMgey50YWJzZXQgLnRhYnNldC1waWxscyAudGFic2V0LWZhZGV9CgojIyBNb2RlbCBmdW5jdGlvbgoKYGBge3J9CgojIG5vIHBoeWxvZ2VueQoKbW9kX2Z1bmMgPC0gIGZ1bmN0aW9uKGZvcm11bGEpIHsKICAgICAgICBybWEubXYoeWksIAogICAgICAgICAgICAgICBWID0gVl9tYXRyaXgsCiAgICAgICAgICAgICAgIG1vZCA9IGZvcm11bGEsIAogICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCN+MXxQaHlsb2dlbnksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFNwZWNpZXNfTGF0aW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFN0dWR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxFZmZlY3RfSUQpLCAKICAgICAgICAgICAgICAgI1IgPSBsaXN0KFBoeWxvZ2VueSA9IGNvcl90cmVlKSwgCiAgICAgICAgICAgICAgIGRhdGEgPSBkYXQsIAogICAgICAgICAgICAgICB0ZXN0ID0gInQiLAogICAgICAgICAgICAgICBzcGFyc2UgPSBUUlVFLAogICAgICAgICAgICAgICBjb250cm9sPWxpc3Qob3B0aW1pemVyPSJvcHRpbSIsIG9wdG1ldGhvZD0iTmVsZGVyLU1lYWQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgI29wdG1ldGhvZD0iQkZHUyIpCiAgICAgICAgICAgICAgICkKfQoKYGBgCgojIyBTZXggZGlmZmVyZW5jZSAoYFNleGApCgpgYGB7cn0KbW9kX3NleCA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBTZXgtMSkKc3VtbWFyeShtb2Rfc2V4KQojIGNvbnRyYXN0Cm1vZF9zZXgxIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IFNleCkKc3VtbWFyeShtb2Rfc2V4MSkKcjJfbWwobW9kX3NleDEpCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KCiMgb3JjaGFyZCBwbG90CiN0ZXN0IDwtIG1vZF9yZXN1bHRzKG1vZF9zZXgxLCBtb2QgPSAiU2V4IiwgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0KQpwMSA8LSBvcmNoYXJkX3Bsb3QobW9kX3NleDEsIG1vZCA9ICJTZXgiLCAKICAgICAgICAgICAgICAgICAgIHhsYWIgPSAibG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIAogICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0LCBjYiA9IEYsCiAgICAgICAgICAgICAgICAgICBhbmdsZSA9IDApCgpwMQpgYGAKCiMjIEdvbmFkIFJlbW92YWwgKGBTZXhfR29uYWRzYCkKCmBgYHtyfQojIGNyZWF0aW5nIGEgbmV3IHZhcmlhYmxlIFNleCArIEdvbmFkIGJlY2F1c2UgCgpkYXQkU2V4X0dvbmFkcyA8LSBwYXN0ZShkYXQkU2V4LCBkYXQkR29uYWRzX3JlbW92ZWQsIHNlcCA9ICJfIikKCmRhdCRTZXhfR29uYWRzW2dyZXAoIk5BIiwgZGF0JFNleF9Hb25hZHMpXSA8LSBOQQoKCmRhdCRTZXhfR29uYWRzIDwtIGZhY3RvcihkYXQkU2V4X0dvbmFkcywgCiAgICAgICBsZXZlbHMgPSBjKCJGZW1hbGVfTm8iLCAiRmVtYWxlX1llcyIsICJNYWxlX1llcyIpLAogICAgICAgbGFiZWxzID0gYygiR29uYWRzIHJlbW92ZWQgXG4oZmVtYWxlKSIsICJHb25hZHMgbm90IHJlbW92ZWQgXG4oZmVtYWxlKSIsICJHb25hZHMgcmVtb3ZlZCBcbihtYWxlKSIpIAogICAgICAgKQoKCm1vZF9yZW0gPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gU2V4X0dvbmFkcy0xKQpzdW1tYXJ5KG1vZF9yZW0pCiMgY29udHJhc3QKbW9kX3JlbTEgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gU2V4X0dvbmFkcykKc3VtbWFyeShtb2RfcmVtMSkKcjJfbWwobW9kX3JlbTEpCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KIyBvcmNoYXJkIHBsb3QKcDIgPC0gb3JjaGFyZF9wbG90KG1vZF9yZW0sIG1vZCA9ICJTZXhfR29uYWRzIiwgCiAgICAgICAgICAgICAgICAgICB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCAKICAgICAgICAgICAgICAgICAgIGdyb3VwID0gIlN0dWR5IiwgZGF0YSA9IGRhdCwgY2IgPSBGLAogICAgICAgICAgICAgICAgICAgYW5nbGUgPSAwKSAKCnAyCmBgYAoKIyMgRW52aXJvbm1lbnRhbCAoYFdpbGRfb3Jfc2VtaV93aWxkYCkKCmBgYHtyfQoKZGF0JFdpbGRfb3Jfc2VtaV93aWxkIDwtIGZhY3RvcihkYXQkV2lsZF9vcl9zZW1pX3dpbGQsIAogICAgICAgbGV2ZWxzID0gYygiTm8iLCAiWWVzIiksCiAgICAgICBsYWJlbHMgPSBjKCJPdGhlcnMgXG4oZS5nLiwgbGFiLCBmYXJtKSIgLCAiV2lsZCBvciBcblNlbWktd2lsZCIpIAogICAgICAgKQoKCm1vZF9lbnYgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gV2lsZF9vcl9zZW1pX3dpbGQtMSkKc3VtbWFyeShtb2RfZW52KQojIGNvbnRyYXN0Cm1vZF9lbnYxIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IFdpbGRfb3Jfc2VtaV93aWxkKQpzdW1tYXJ5KG1vZF9lbnYxKQpyMl9tbChtb2RfZW52MSkKCmBgYAoKYGBge3IsIGV2YWwgPSBGfQojIG9yY2hhcmQgcGxvdApwMyA8LSBvcmNoYXJkX3Bsb3QobW9kX2VudjEsIG1vZCA9ICJXaWxkX29yX3NlbWlfd2lsZCIsIAogICAgICAgICAgICAgICAgICAgeGxhYiA9ICJsb2cgcmVzcG9uc2UgcmF0aW8gKGxuUlIpIiwgCiAgICAgICAgICAgICAgICAgICBncm91cCA9ICJTdHVkeSIsIGRhdGEgPSBkYXQpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjRDU1RTAwIiwgIiMwMDlFNzMiKSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygiI0Q1NUUwMCIsICIjMDA5RTczIikpIAoKcDMKYGBgCgojIyBDb250cm9sbGVkIHRyZWF0bWVudCAoYENvbnRyb2xsZWRfdHJlYXRtZW50c2ApCgpgYGB7cn0KCmRhdCRDb250cm9sbGVkX3RyZWF0bWVudHMgPC0gZmFjdG9yKGRhdCRDb250cm9sbGVkX3RyZWF0bWVudHMsIAogICAgICAgbGV2ZWxzID0gYygiTm8iLCAiWWVzIiksCiAgICAgICBsYWJlbHMgPSBjKCJOb3QgY29udHJvbGxlZCIgLCAiQ29udHJvbGxlZCIpIAogICAgICAgKQoKbW9kX2NvbiA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBDb250cm9sbGVkX3RyZWF0bWVudHMtMSkKc3VtbWFyeShtb2RfY29uKQojIGNvbnRyYXN0Cm1vZF9jb24xIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IENvbnRyb2xsZWRfdHJlYXRtZW50cykKc3VtbWFyeShtb2RfY29uMSkKcjJfbWwobW9kX2NvbjEpCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KIyBvcmNoYXJkIHBsb3QKcDQgPC0gb3JjaGFyZF9wbG90KG1vZF9jb24xLCBtb2QgPSAiQ29udHJvbGxlZF90cmVhdG1lbnRzIiwgCiAgICAgICAgICAgICAgICAgICB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLAogICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0KSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI0Q1NUUwMCIsICIjMDA5RTczIikpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoIiNENTVFMDAiLCAiIzAwOUU3MyIpKSAKCnA0CmBgYAoKIyMgU2hhbSAoYFNoYW10cmVhdG1lbnRfbW9kZXJhdG9yYCkKCmBgYHtyfQpkYXQkU2hhbXRyZWF0bWVudF9tb2RlcmF0b3IgPC0gZmFjdG9yKGRhdCRTaGFtdHJlYXRtZW50X21vZGVyYXRvciwgCiAgICAgICBsZXZlbHMgPSBjKCJObyIsICJZZXMiKSwKICAgICAgIGxhYmVscyA9IGMoIk5vIHNoYW0iICwgIlNoYW0tY29udHJvbGxlZCIpIAogICAgICAgKQoKbW9kX3NoYW0gPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gU2hhbXRyZWF0bWVudF9tb2RlcmF0b3ItMSkKc3VtbWFyeShtb2Rfc2hhbSkKIyBjb250cmFzdAptb2Rfc2hhbTEgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gU2hhbXRyZWF0bWVudF9tb2RlcmF0b3IpCnN1bW1hcnkobW9kX3NoYW0xKQpyMl9tbChtb2Rfc2hhbTEpCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KIyBvcmNoYXJkIHBsb3QKcDUgPC0gb3JjaGFyZF9wbG90KG1vZF9zaGFtLCBtb2QgPSAiU2hhbXRyZWF0bWVudF9tb2RlcmF0b3IiLCAKICAgICAgICAgICAgIHhsYWIgPSAibG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIAogICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0KSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI0Q1NUUwMCIsICIjMDA5RTczIikpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoIiNENTVFMDAiLCAiIzAwOUU3MyIpKSAKCnA1CmBgYAoKIyMgVHlwZSBvZiBlZmZlY3Qgc2l6ZXMgKGBFZmZlY3RfdHlwZWApCgpgYGB7cn0KZGF0JEVmZmVjdF90eXBlIDwtIGZhY3RvcihkYXQkRWZmZWN0X3R5cGUsIAogICAgICAgbGV2ZWxzID0gYygibG9uZ2V2aXR5IiwgIm1vcnRhbGl0eSIpLAogICAgICAgbGFiZWxzID0gYygiTWVhbiBvciBtZWFkaWFuIFxubG9uZ2V2aXR5IiAsICJNb3J0YWxpdHkgXG4oJSkiKSAKICAgICAgICkKCm1vZF9lZmYgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gRWZmZWN0X3R5cGUtMSkKc3VtbWFyeShtb2RfZWZmKQojIGNvbnRyYXN0Cm1vZF9lZmYxIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IEVmZmVjdF90eXBlKQpzdW1tYXJ5KG1vZF9lZmYxKQpyMl9tbChtb2RfZWZmMSkKCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KIyBvcmNoYXJkIHBsb3QKcDYgPC0gb3JjaGFyZF9wbG90KG1vZF9lZmYxLCBtb2QgPSAiRWZmZWN0X3R5cGUiLCAKICAgICAgICAgICAgIHhsYWIgPSAibG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIAogICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0LCBjYiA9IEYpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjRDU1RTAwIiwgIiMwMDlFNzMiKSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygiI0Q1NUUwMCIsICIjMDA5RTczIikpIApwNgpgYGAKCiMjIE1hdHVhcml0eSAoYE1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsYCkKCmBgYHtyfQoKbW9kX21hdCA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBNYXR1cml0eV9hdF90cmVhdG1lbnRfb3JkaW5hbCkKc3VtbWFyeShtb2RfbWF0KQpyMl9tbChtb2RfbWF0KQoKYGBgCgpgYGB7ciwgZXZhbCA9IEZ9CiMgYnViYmxlIHBsb3QKcDcgPC0gYnViYmxlX3Bsb3QobW9kX21hdCwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTGlmZS1jb3Vyc2Ugc3RhZ2VzIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJsblJSIChlZmZlY3Qgc2l6ZSkiLAogICAgICAgICAgICBtb2QgPSAiTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwiLCAKICAgICAgICAgICAgZGF0YSA9IGRhdCwgZ3JvdXAgPSAiU3R1ZHkiLCBjYiA9IEYpCgpwNwpgYGAKCiMjIFNleCB4IE1hdHVhcml0eQoKYGBge3J9CiMgaW50ZXJhY3Rpb24gd2l0aCBTZXgKbW9kX3NleF9tYXQgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gU2V4Kk1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsKQpzdW1tYXJ5KG1vZF9zZXhfbWF0KQpyMl9tbChtb2RfbWF0KQoKIyBkaWZmZXJlbnQgcmVmZXJlbmNlIChnaXZlcyB3aGV0aGVyIG1hbGUgc2xvcGUgaXMgc2lnbmlmaWNhbnQpCm1vZF9zZXhfbWF0MSA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiByZWxldmVsKFNleCxyZWYgPSAiTWFsZSIpKk1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsKQpzdW1tYXJ5KG1vZF9zZXhfbWF0MSkKCmBgYAoKYGBge3IsIGV2YWwgPSBGfQoKIyBidWJibGUgcGxvdApwOCA8LSBidWJibGVfcGxvdChtb2Rfc2V4X21hdCwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTGlmZS1jb3Vyc2Ugc3RhZ2VzIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJsblJSIChlZmZlY3Qgc2l6ZSkiLAogICAgICAgICAgICBtb2QgPSAiTWF0dXJpdHlfYXRfdHJlYXRtZW50X29yZGluYWwiLCAKICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0LCBieSA9ICJTZXgiKQoKcDgKYGBgCgojIyBGaWd1cmUgMQoKYGBge3IsIGV2YWw9RkFMU0V9CgpwMC8gKHAxIHwgcDIpICsgcGxvdF9sYXlvdXQobnJvdyA9IDIsIGhlaWdodHMgPSBjKDIuNSwxKSkgKyBwbG90X2Fubm90YXRpb24odGFnX2xldmVscyA9ICdBJykKCmBgYAoKIVtdKC4uL2ZpZ3MvZmlnMS5wbmcpCgojIyBGaWd1cmUgMgoKYGBge3IsIGV2YWw9RkFMU0V9CgoocDMgfCBwNCkgLyAocDUgfCBwNikgLyAocDcgfCBwOCkgKyBwbG90X2xheW91dChucm93ID0gMywgaGVpZ2h0cyA9IGMoMSwxLCAxLjUpKSArIHBsb3RfYW5ub3RhdGlvbih0YWdfbGV2ZWxzID0gJ0EnKQoKYGBgCgohW10oLi4vZmlncy9maWcyLnBuZykKCiMgTWV0YS1yZWdyZXNzaW9uOiBmdWxsIG1vZGVsIHsudGFic2V0IC50YWJzZXQtcGlsbHMgLnRhYnNldC1mYWRlfQoKIyMgRnVsbCBtb2RlbAoKYGBge3J9CiMgYXQgbGVhc3QgMTAgaW4gZWFjaCBncm91cCAoc2V4ICogd2lsZCA9IG1hbGUgd2lsZCBpcyB0b28gZmV3IC0gNCkKCm1vZF9mdWxsIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IFNleF9Hb25hZHMgKyBTZXgqQ29udHJvbGxlZF90cmVhdG1lbnRzICsgIFdpbGRfb3Jfc2VtaV93aWxkICsgU2V4Kk1hdHVyaXR5X2F0X3RyZWF0bWVudF9vcmRpbmFsKQpzdW1tYXJ5KG1vZF9mdWxsKQpyMl9tbChtb2RfZnVsbCkKYGBgCgojIyBBSUMgbW9kZWwgc2VsZWN0aW9uCgpgYGB7ciwgZXZhbCA9IEZBTFNFfQoKI3Jlc19tb2RfZnVsbCA8LSBkcmVkZ2UobW9kX2Z1bGwsIHRyYWNlPTIpCnJlc19tb2RfZnVsbCA8LSBkcmVkZ2UobW9kX2Z1bGwsIHRyYWNlPTIpCgpzYXZlUkRTKHJlc19tb2RfZnVsbCwgZmlsZSA9IGhlcmUoIlJkYXRhIiwgInJlc19tb2RfZnVsbCIpKQpgYGAKCmBgYHtyfQpyZXNfbW9kX2Z1bGwgPC0gcmVhZFJEUyhmaWxlID0gaGVyZSgiUmRhdGEiLCAicmVzX21vZF9mdWxsIikpCgojIGRlbHRhIEFJQyA9IDIKcmVzX21vZF9mdWxsMjwtIHN1YnNldChyZXNfbW9kX2Z1bGwsIGRlbHRhIDw9IDIpICMsIHJlY2FsYy53ZWlnaHRzPUZBTFNFKQoKIyB0aGUgYmVzdCBtb2RlbCBhY2NvcmRpbmcgdG8gdGhlIGRlbHRhIDIKYmVzdDIgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gQ29udHJvbGxlZF90cmVhdG1lbnRzICsgV2lsZF9vcl9zZW1pX3dpbGQpCiNzdW1tYXJ5KGJlc3QyKQoKIyBtb2RlbCB2YXJhZ2VkIGNvZWZmaXNlbnRzCmF2ZzIgPC0gbW9kZWwuYXZnKHJlc19tb2RfZnVsbDIpCnN1bW1hcnkoYXZnMikgIyBzaW1pbGFyIHRvIHRoZSBvcmlnbmFsIHJlc3VsZGUKCiMgbm90ZSAKIyBjb250cm9sbGluZyBhbmQgd2lsZC1zZW1pLXdpZGUgaXMgY29ycmVsYXRlZDogciA9IDAuMzQKI2Nvci50ZXN0KGFzLm51bWVyaWMoZGF0JENvbnRyb2xsZWRfdHJlYXRtZW50cyksYXMubnVtZXJpYyhkYXQkV2lsZF9vcl9zZW1pX3dpbGQpKQoKYGBgCgojIFB1YmxpY2F0aW9uIGJhaXMgJiBzZW5zaXRpdml0eSBhbmFseXNpcyB7LnRhYnNldCAudGFic2V0LXBpbGxzIC50YWJzZXQtZmFkZX0KCiMjIEZ1bm5lbCBwbG90CgpgYGB7cn0KIyByYXcgZnVubmVsIHBsb3QKIyBmdW5uZWwgcGxvdCAtIApmdW5uZWwobW9kKQoKIyByZXNpZHVhbCBmdW5uZWwgcGxvdApmdW5uZWwoYmVzdDIpCgpgYGAKCiMjIFNtYWxsLXN0dWR5IGVmZmVjdDogdW5pLW1vZGVyYW90b3IKCmBgYHtyfQoKZGF0JEVmZmVjdGl2ZV9OIDwtIDEvZGF0JFNhbXBsZV9zaXplX3N0ZXJpbGl6YXRpb24gKyAxL2RhdCRTYW1wbGVfc2l6ZV9jb250cm9sCgplZ2dlcl91bmkgPC0gbW9kX2Z1bmMoZm9ybXVsYSA9IH4gc3FydChFZmZlY3RpdmVfTikpCiNlZ2dlcl91bmkyIDwtIG1vZF9mdW5jKGZvcm11bGEgPSB+IEVmZmVjdGl2ZV9OKQoKc3VtbWFyeShlZ2dlcl91bmkpCgojZWdnZXJfdW5pMiA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBFZmZlY3RpdmVfTikKI3N1bW1hcnkoZWdnZXJfdW5pMikKYGBgCgojIyBEZWNsaW5lIGVmZmVjdCAodGltZSBsYWcgYmlhcyk6IHVuaS1tb2RlcmF0b3IKCmBgYHtyfQoKZGF0JFllYXIgPC0gYXMubnVtZXJpYyhzdHJfZXh0cmFjdChhcy5jaGFyYWN0ZXIoZGF0JFN0dWR5KSwiWzpkaWdpdDpdWzpkaWdpdDpdWzpkaWdpdDpdWzpkaWdpdDpdIikpCgpkZWNsaW5lX3VuaSA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBZZWFyKQpzdW1tYXJ5KGRlY2xpbmVfdW5pKQpgYGAKCiMjIE11bGl0LW1vZGVyYXRvciBtb2RlbCBmb3IgYm90aCB0aGUgc21hbGwtc3R1ZHkgJiBkZWNsaW5lIGVmZmVjdHMKCmBgYHtyfQoKZGF0JGNZZWFyIDwtIHNjYWxlKGRhdCRZZWFyLCBzY2FsZSA9IEYpCgpwdWJfYmlhcyA8LSBtb2RfZnVuYyhmb3JtdWxhID0gfiBFZmZlY3RpdmVfTiArIENvbnRyb2xsZWRfdHJlYXRtZW50cyArIFdpbGRfb3Jfc2VtaV93aWxkICsgY1llYXIpCiAgCnN1bW1hcnkocHViX2JpYXMpCgpwcmVwMSA8LSBxZHJnKG9iamVjdCA9IHB1Yl9iaWFzLCBkYXRhID0gZGF0LCBhdCA9IGxpc3QoRWZmZWN0aXZlX04gPSAwLCBjWWVhciA9IDApKQoKIyB0aGlzIHNlZW1zIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRvIHJlcG9ydAojIGVxdWFsIGF2ZXJhZ2luZwpyZXMxIDwtIGVtbWVhbnMocHJlcDEsIHNwZWNzID0gIjEiLCBkZiA9IHB1Yl9iaWFzJGRkZiwgd2VpZ2h0cyA9ICJlcXVhbCIpCnJlczEKCiMgcHJvcG9ydGlvbmFsIHRvIHdoYXQgd2UgaGF2ZQpyZXMyIDwtIGVtbWVhbnMocHJlcDEsIHNwZWNzID0gIjEiLCBkZiA9IHB1Yl9iaWFzJGRkZiwgd2VpZ2h0cyA9ICJwcm9wIikKcmVzMgpgYGAKCiMjIExlYXZlLW9uZS1zdHVkeS1vdXQgYW5hbHlzaXMKCmBgYHtyLCBldmFsID0gRkFMU0V9CiMgVGhlIGZ1bmN0aW9uIGZvciBsZWF2ZS1vbmUtc3R1ZHktb3V0CgpkYXQkU3R1ZHkgPC0gYXMuZmFjdG9yKGRhdCRTdHVkeSkKCkxlYXZlT25lT3V0X2VmZmVjdHNpemUgPC0gbGlzdCgpCmZvcihpIGluIDE6bGVuZ3RoKGxldmVscyhkYXQkU3R1ZHkpKSl7CiAgZGF0MSA8LSBkYXRbZGF0JFN0dWR5ICE9IGxldmVscyhkYXQkU3R1ZHkpW2ldLCBdCiAgVl9tYXRyaXggPC0gaW1wdXRlX2NvdmFyaWFuY2VfbWF0cml4KHZpID0gZGF0MSR2aSwgY2x1c3RlciA9IGRhdDEkU2hhcmVkX2NvbnRyb2wsIHIgPSAwLjUpCiAgCiAgTGVhdmVPbmVPdXRfZWZmZWN0c2l6ZVtbaV1dIDwtIHJtYS5tdih5aSwgCiAgICAgICAgICAgICAgIFYgPSBWX21hdHJpeCwKICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdCh+MXxTcGVjaWVzX0xhdGluLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxTdHVkeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8RWZmZWN0X0lEKSwgCiAgICAgICAgICAgICAgIHRlc3QgPSAidCIsCiAgICAgICAgICAgICAgIHNwYXJzZSA9IFRSVUUsCiAgICAgICAgICAgICAgIGNvbnRyb2w9bGlzdChvcHRpbWl6ZXI9Im9wdGltIiwgb3B0bWV0aG9kPSJCRkdTIiksCiAgICAgICAgICAgICAgIGRhdGEgPSBkYXQxKQogIH0KCgojIHdyaXRpbmcgZnVuY3Rpb24gZm9yIGV4dHJhY3RpbmcgZXN0LCBjaS5sYiwgYW5kIGNpLnViIGZyb20gYWxsIG1vZGVscwplc3QuZnVuYyA8LSBmdW5jdGlvbihtb2QpewogIGRmIDwtIGRhdGEuZnJhbWUoZXN0ID0gbW9kJGIsIGxvd2VyID0gbW9kJGNpLmxiLCB1cHBlciA9IG1vZCRjaS51YikKICByZXR1cm4oZGYpCn0KCiN1c2luZyBkcGx5ciB0byBmb3JtIGRhdGEgZnJhbWUKTUFfTE9PIDwtIGxhcHBseShMZWF2ZU9uZU91dF9lZmZlY3RzaXplLCBmdW5jdGlvbih4KSBlc3QuZnVuYyh4KSklPiUgYmluZF9yb3dzICU+JSBtdXRhdGUobGVmdF9vdXQgPSBsZXZlbHMoZGF0JFN0dWR5KSkKCgpzYXZlUkRTKE1BX0xPTyxmaWxlID0gaGVyZSgiUmRhdGEiLCAiTUFfTE9PLnJkcyIpKQpgYGAKCmBgYHtyfQojdGVsbGluZyBnZ3Bsb3QgdG8gc3RvcCByZW9yZGVyaW5nIGZhY3RvcnMKTUFfTE9PIDwtIHJlYWRSRFMoZmlsZSA9IGhlcmUoIlJkYXRhIiwgIk1BX0xPTy5yZHMiKSkKCk1BX0xPTyRsZWZ0X291dDwtIGFzLmZhY3RvcihNQV9MT08kbGVmdF9vdXQpCk1BX0xPTyRsZWZ0X291dDwtZmFjdG9yKE1BX0xPTyRsZWZ0X291dCwgbGV2ZWxzID0gTUFfTE9PJGxlZnRfb3V0KQoKCiNwbG90dGluZwpsZWF2ZW9uZW91dF9FIDwtIGdncGxvdChNQV9MT08pICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBsd2QgPSAxKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbW9kJGNpLmxiLCBsdHkgPSAzLCBsd2QgPSAwLjc1LCBjb2xvdXIgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbW9kJGIsIGx0eSA9IDEsIGx3ZCA9IDAuNzUsIGNvbG91ciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtb2QkY2kudWIsIGx0eSA9IDMsIGx3ZCA9IDAuNzUsIGNvbG91ciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHggPSBsZWZ0X291dCwgeSA9IGVzdCwgeW1pbiA9IGxvd2VyLCB5bWF4ID0gdXBwZXIpKSArCiAgeGxhYigiU3R1ZHkgbGVmdCBvdXQiKSArIAogIHlsYWIoImxuUlIsIDk1JSBDSSIpICsgCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZShwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSsKICB0aGVtZV9idygpICsgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSApICsKICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNikpCgpsZWF2ZW9uZW91dF9FCmBgYAoKIyBNZXRhLWFuYWx5c2lzOiByb2RlbnQgZGF0YSBvbmx5IHsudGFic2V0IC50YWJzZXQtcGlsbHMgLnRhYnNldC1mYWRlfQoKV2Ugbm90ZSB0aGF0IHRoZSBhbmFseXNlcyBiZWxvdyB1c2luZyByb2RlbnQgZGF0YSBhcmUgcG9zdC1ob3N0IGFuYWx5c2VzLiAKCiMjIE1haW4gbW9kZWwKCmBgYHtyfQojIHNoYXJlZCBjb250cm9sIAojIHRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrCiNWX21hdHJpeCA8LSBtYWtlX1ZDVl9tYXRyaXgoZGF0LCBWPSAidmkiLCBjbHVzdGVyID0gIlNoYXJlZF9jb250cm9sIiwgb2JzID0gIkVmZmVjdF9JRCIpClZfbWF0cml4IDwtIGltcHV0ZV9jb3ZhcmlhbmNlX21hdHJpeCh2aSA9IHJkYXQkdmksIGNsdXN0ZXIgPSByZGF0JFNoYXJlZF9jb250cm9sLCByID0gMC41KQoKIyBtZXRhLWFuYWx5c2lzIGJhc2ljcwojIHBoeWxvIG1vZGVsCnJtb2QgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4LCBtb2QgPSB+IDEsIAogICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KH4xfFNwZWNpZXNfTGF0aW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFN0dWR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxFZmZlY3RfSUQpLCAKICAgICAgICAgICAgICAgZGF0YSA9IHJkYXQsIAogICAgICAgICAgICAgICB0ZXN0ID0gInQiLAogICAgICAgICAgICAgICBzcGFyc2UgPSBUUlVFLAogICAgICAgICAgICAgICBjb250cm9sPWxpc3Qob3B0aW1pemVyPSJvcHRpbSIsIG9wdG1ldGhvZD0iTmVsZGVyLU1lYWQiKQogICAgICAgICAgICAgICApCnN1bW1hcnkocm1vZCkgCgppMl9tbChybW9kKSAKYGBgCgpgYGB7cn0KIyB2aXN1YWxpemluZyB0aGUgcmVzdWx0Cm9yY2hhcmRfcGxvdChybW9kLCB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCBncm91cCA9ICJTdHVkeSIsIGRhdGEgPSByZGF0KQoKYGBgCgojIyBTZXggZGlmZmVyZW5jZSAoYFNleGApCgpgYGB7cn0Kcm1vZF9zZXggPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4LCBtb2QgPSB+IFNleCwgCiAgICAgICAgICAgICAgIHJhbmRvbSA9IGxpc3QofjF8U3BlY2llc19MYXRpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8U3R1ZHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfEVmZmVjdF9JRCksIAogICAgICAgICAgICAgICBkYXRhID0gcmRhdCwgCiAgICAgICAgICAgICAgIHRlc3QgPSAidCIsCiAgICAgICAgICAgICAgIHNwYXJzZSA9IFRSVUUsCiAgICAgICAgICAgICAgIGNvbnRyb2w9bGlzdChvcHRpbWl6ZXI9Im9wdGltIiwgb3B0bWV0aG9kPSJOZWxkZXItTWVhZCIpCiAgICAgICAgICAgICAgICkKc3VtbWFyeShybW9kX3NleCkgCgpyMl9tbChybW9kX3NleCkgCmBgYAoKYGBge3J9CiMgdmlzdWFsaXppbmcgdGhlIHJlc3VsdApvcmNoYXJkX3Bsb3Qocm1vZF9zZXgsIG1vZCA9ICJTZXgiLCB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCBncm91cCA9ICJTdHVkeSIsIGRhdGEgPSByZGF0KQpgYGAKCiMjIE1hdHVyaXR5IChpbiBkYXlzKQoKYGBge3J9CgojIHR3byBtb3JlIHR5cGUgb2YgYWdlcwpyZGF0JGxuQWdlX1RydCA8LSBsb2cocmRhdCRBZ2VfYXRfdHJlYXRtZW50X2NvbnRpbnVvdXMpCnJkYXQkQWdlX3JhdGlvIDwtIChyZGF0JEFnZV9hdF90cmVhdG1lbnRfY29udGludW91cy9yZGF0JERheV90b19tYXR1YXJpdHkpCnJkYXQkbG5BZ2VfcmF0aW8gPC0gbG9nKHJkYXQkQWdlX2F0X3RyZWF0bWVudF9jb250aW51b3VzL3JkYXQkRGF5X3RvX21hdHVhcml0eSkKCgojIGp1c3QgcHVyZSBlZmZlY3QKcm1vZF9tYXQgPC0gcm1hLm12KHlpLCBWID0gVl9tYXRyaXgsIG1vZCA9IH4gbG5BZ2VfcmF0aW8qU2V4LCAKICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdCh+MXxTcGVjaWVzX0xhdGluLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxTdHVkeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8RWZmZWN0X0lEKSwgCiAgICAgICAgICAgICAgIGRhdGEgPSByZGF0LCAKICAgICAgICAgICAgICAgdGVzdCA9ICJ0IiwKICAgICAgICAgICAgICAgc3BhcnNlID0gVFJVRSwKICAgICAgICAgICAgICAgY29udHJvbD1saXN0KG9wdGltaXplcj0ib3B0aW0iLCBvcHRtZXRob2Q9Ik5lbGRlci1NZWFkIikKICAgICAgICAgICAgICAgKQpzdW1tYXJ5KHJtb2RfbWF0KQpyMl9tbChybW9kX21hdCkKCmBgYAoKYGBge3J9CiMgdmlzdWFsaXppbmcgdGhlIHJlc3VsdApidWJibGVfcGxvdChybW9kX21hdCwgbW9kID0gImxuQWdlX3JhdGlvIiwgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gcmRhdCwgYnkgPSAiU2V4IiwgeGxhYiA9ICJsbihUcmVhdG1lbnQgRGF5L0RheSB0byBzZXh1YWwgbWF0dXJpdHkpIFtSb2RlbnQgZGF0YSBvbmx5XSIsIHlsYWIgPSAibG4oUmVzcG9uc2UgcmF0aW8pIikKYGBgCgojIENvbnRyYXN0aW5nIHNleGVzOiBmdWxsIGRhdGEgey50YWJzZXQgLnRhYnNldC1waWxscyAudGFic2V0LWZhZGV9CgojIyBDYWxjdWF0aW5nIGFib3NsdXRlIGVmZmVjdCBzaXplcwoKYGBge3J9CgojIGZ1bGwgZGF0YQpkYXRfbG9uZyA8LSBkYXRfbG9uZyAlPiUgbXV0YXRlKGFic195aSA9IGZvbGRlZF9tdSh5aSwgdmkpLCAKICAgICAgICAgICAgICAgICAgICAgIGFic192aSA9IGZvbGRlZF92KHlpLCB2aSkpCgojIHBhcnRpYWwgZGF0YQpzZGF0X2xvbmcgPC0gc2RhdF9sb25nICU+JSBtdXRhdGUoYWJzX3lpID0gZm9sZGVkX211KHlpLCB2aSksIAogICAgICAgICAgICAgICAgICAgICAgYWJzX3ZpID0gZm9sZGVkX3YoeWksIHZpKSkKYGBgCgojIyBDb21wYXJpbmcgTS9GIHZzLiBNJFxzdGFyJC9GIG9yIE0vRiRcc3RhciQKCmBgYHtyfQojIHZhcmlhbmNlIGNvdmFyaWFuY2UgbWF0cml4ClZfbWF0cml4X2xvbmcgPC0gaW1wdXRlX2NvdmFyaWFuY2VfbWF0cml4KHZpID0gZGF0X2xvbmckdmksIGNsdXN0ZXIgPSBkYXRfbG9uZyRTaGFyZWRfY29udHJvbCwgciA9IDAuNSkKCiMgd2UgY2FuIHJ1biAtIHNvbWUgaGV0ZXJvc2NhZCBtb2RlbHMKIyB0aGlzIGRvZXMgbm90IGltcHJvdmUgbW9kZWwKbW9kX2NvbXAgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4X2xvbmcsIAogICAgICAgICAgICAgICAgIG1vZCA9IH4gQ29tcF90eXBlIC0gMSwgCiAgICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdCh+MXxTcGVjaWVzX0xhdGluLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfFN0dWR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4xfEVmZmVjdF9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxPYnMgKSwgCiAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdF9sb25nLCB0ZXN0ID0gInQiKQpzdW1tYXJ5KG1vZF9jb21wKSAKcjJfbWwobW9kX2NvbXApCmBgYAoKYGBge3J9CiMgdmlzdWFsaXppbmcgdGhlIHJlc3VsdApvcmNoYXJkX3Bsb3QobW9kX2NvbXAsIG1vZCA9ICJDb21wX3R5cGUiLCB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCAKICAgICAgICAgICAgIGdyb3VwID0gIlN0dWR5IiwgZGF0YSA9IGRhdF9sb25nLCBjYiA9IEYpCmBgYAoKIyMgU2VwYXJhdGluZyBieSBzZXggKE0vRiB2cy4gTSRcc3RhciQvRiBvciBNL0YkXHN0YXIkKQoKYGBge3J9CgojIG5hbWluZyBmYWN0b3JzCiMgZGF0X2xvbmckQ29tcF90eXBlIDwtICBmYWN0b3IoZGF0X2xvbmckQ29tcF90eXBlLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJvbmVfY2FzdHJhdGVkIiwgImJvdGhfbm9ybWFsIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygib25lX2Nhc3RyYXRlZCIsICJib3RoX25vcm1hbCIpICkKCmRhdF9sb25nJENvbXBfdHlwZV9TZXgxIDwtIGZhY3RvcihkYXRfbG9uZyRDb21wX3R5cGVfU2V4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygib25lX2Nhc3RyYXRlZF9NYWxlIiwgImJvdGhfbm9ybWFsX01hbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmVfY2FzdHJhdGVkX0ZlbWFsZSIsICJib3RoX25vcm1hbF9GZW1hbGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiTWFsZSBzdGVybGl6ZWQvXG5GZW1hbGUgbm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFsZSBub3JtYWwvXG5GZW1hbGUgbm9ybWFsIChCKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hbGUgbm9ybWFsL1xuRmVtYWxlIHN0ZXJsaXplZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hbGUgbm9ybWFsL1xuRmVtYWxlIG5vcm1hbCAoQSkiKSApCgptb2RfY29tcF9zZXggPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4X2xvbmcsIG1vZCA9IH4gQ29tcF90eXBlX1NleDEgLTEgLCByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfjF8RWZmZWN0X0lELCB+MXxPYnMgKSxkYXRhID0gZGF0X2xvbmcsIHRlc3QgPSAidCIpCnN1bW1hcnkobW9kX2NvbXBfc2V4KSAKcjJfbWwobW9kX2NvbXBfc2V4KQpgYGAKCmBgYHtyLCBldmFsID0gRkFMU0V9CgpkMCA8LSBvcmNoYXJkX3Bsb3QobW9kX2NvbXBfc2V4LCBtb2QgPSAiQ29tcF90eXBlX1NleDEiLCB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCAKICAgICAgICAgICAgICAgICAgIGdyb3VwID0gIlN0dWR5IiwgZGF0YSA9IGRhdF9sb25nLCBjYiA9IFQsIGFuZ2xlID0gOTApICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9Mi41LCBzaXplID0gMC4yKQoKZDAKYGBgCgojIyBBYnNvbHV0ZSBlZmZlY3Qgc2l6ZSBjb21wYXJhaW9uIChNL0Ygb3IgRi9NIHZzLiBNJFxzdGFyJC9GIG9yIEYkXHN0YXIkL00pCgpgYGB7cn0KCiMgVkNWIG1hdHJpeAphYnNfVl9tYXRyaXhfbG9uZyA8LSBpbXB1dGVfY292YXJpYW5jZV9tYXRyaXgodmkgPSBkYXRfbG9uZyRhYnNfdmksIGNsdXN0ZXIgPSBkYXRfbG9uZyRTaGFyZWRfY29udHJvbCwgciA9IDAuNSkKCmFic19tb2RfY29tcF9zZXgwIDwtICBybWEubXYoYWJzX3lpLCBWID0gYWJzX1ZfbWF0cml4X2xvbmcsIG1vZCA9IH4gQ29tcF90eXBlX1NleDEgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfjF8RWZmZWN0X0lELCB+MXxPYnMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0X2xvbmcsIHRlc3QgPSAidCIpCnN1bW1hcnkoYWJzX21vZF9jb21wX3NleDApIAoKYWJzX21vZF9jb21wX3NleCA8LSAgcm1hLm12KGFic195aSwgViA9IGFic19WX21hdHJpeF9sb25nLCBtb2QgPSB+IENvbXBfdHlwZV9TZXgxIC0xICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfjF8RWZmZWN0X0lELCB+MXxPYnMpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRfbG9uZywgdGVzdCA9ICJ0IikKc3VtbWFyeShhYnNfbW9kX2NvbXBfc2V4KSAKcjJfbWwoYWJzX21vZF9jb21wX3NleCkKYGBgCgpgYGB7ciwgZXZhbCA9IEZBTFNFfQojIHZpc3VhbGl6aW5nIHJlc3VsdHMKZDEgPC0gb3JjaGFyZF9wbG90KGFic19tb2RfY29tcF9zZXgsIG1vZCA9ICJDb21wX3R5cGVfU2V4MSIsIHhsYWIgPSAiYWJzb2x1dGUgbG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIAogICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAiU3R1ZHkiLCBkYXRhID0gZGF0X2xvbmcsIGNiID0gVCwgYW5nbGUgPSA5MCkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdD0yLjUsIHNpemUgPSAwLjIpCgpkMQpgYGAKCiMjIENvbnRyYXN0aW5nIE0vRiBhbmQgTS9GJFxzdGFyJAoKYGBge3J9CiMgZmVtYWxlCmZlbWFsZV9kYXRfbG9nIDwtIGRhdF9sb25nICU+JSBmaWx0ZXIoU2V4ID09ICJGZW1hbGUiKQpmX2RhdF9sb2c8LSBmZW1hbGVfZGF0X2xvZyAlPiUgZ3JvdXBfYnkoRWZmZWN0X0lEKSAlPiUgc3VtbWFyaXNlKHlpMiA9IGFic195aVsyXSAtIGFic195aVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aTIgPSBhYnNfdmlbMV0gKyBhYnNfdmlbMl0gLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41KnNxcnQoYWJzX3ZpWzFdKmFic192aVsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2llc19MYXRpbiA9IFNwZWNpZXNfTGF0aW5bMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZHkgPSBTdHVkeVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWRfY29udHJvbCA9IFNoYXJlZF9jb250cm9sWzFdKQoKIyB2YXJpYW5jZSBjb3ZhcmlhbmNlIG1hdHJpeApWX21hdHJpeF9sb25nMSA8LSBpbXB1dGVfY292YXJpYW5jZV9tYXRyaXgodmkgPSBmX2RhdF9sb2ckdmkyLCBjbHVzdGVyID0gZl9kYXRfbG9nJFNoYXJlZF9jb250cm9sLCByID0gMC41KQoKIyB3ZSBjYW4gcnVuIC0gc29tZSBoZXRlcm9zY2FkIG1vZGVscwojIHRoaXMgZG9lcyBub3QgaW1wcm92ZSBtb2RlbApmX21vZF9sb25nIDwtICBybWEubXYoeWkyLCBWID0gVl9tYXRyaXhfbG9uZzEsIAogICAgICAgICAgICAgICAgIHJhbmRvbSA9IGxpc3QofjF8U3BlY2llc19MYXRpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxTdHVkeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+MXxFZmZlY3RfSUQpLCAKICAgICAgICAgICAgICAgICBkYXRhID0gZl9kYXRfbG9nLCB0ZXN0ID0gInQiKQpzdW1tYXJ5KGZfbW9kX2xvbmcpIAppMl9tbChmX21vZF9sb25nKQpgYGAKCmBgYHtyLCBldmFsID0gRkFMU0V9CiMgUGFpciBmaWd1cmVzCmQyIDwtIGdncGxvdChmZW1hbGVfZGF0X2xvZywgYWVzKHggPSBDb21wX3R5cGUsIHkgPSBhYnNfeWkpKSArIAogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBzcXJ0KDEvYWJzX3ZpKSwgY29sID0gQ29tcF90eXBlKSwgYWxwaGEgPSAwLjUpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0gRWZmZWN0X0lEKSwgYWxwaGEgPSAwLjUpICsgCiAgbGFicyh5ID0gImFic29sdXRlIGxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCB4ID0gIiIsIHNpemUgPSAiUHJlY2lzaW9uICgxL1NFKSIpICsgCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJvbmVfY2FzdHJhdGVkIiA9Ik1hbGUgbm9ybWFsL1xuRmVtYWxlIHN0ZXJsaXplZCIsICJib3RoX25vcm1hbCIgPSAiTWFsZSBub3JtYWwvXG5GZW1hbGUgbm9ybWFsIikpICsKICAjeGxpbShjKCJvbmVfY2FzdHJhdGVkIiwiYm90aF9ub3JtYWwiKSkrCiAgeWxpbSgwLCAxLjI1KSArIAogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjRERDQzc3IiwgIiMxMTc3MzMiKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfYncoKSArCiAgZ3VpZGVzKGNvbG91ciA9ICJub25lIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0gYygxLCAwKSwgbGVnZW5kLmp1c3RpZmljYXRpb24gPSBjKDEsIDApKSArCgl0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSArCgl0aGVtZShsZWdlbmQuZGlyZWN0aW9uPSJob3Jpem9udGFsIikgKwoJdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpICsKCXRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgY29sb3VyID0iYmxhY2siLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoanVzdCA9IDAuNSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSA5MCkpCgpkMgpgYGAKCmBgYHtyLCBldmFsID0gRkFMU0V9CmQzIDwtIG9yY2hhcmRfcGxvdChmX21vZF9sb25nLCB4bGFiID0gImFic29sdXRlIGxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCBncm91cCA9ICJTdHVkeSIsIAogICAgICAgICAgICAgICAgICAgZGF0YSA9IGZfZGF0X2xvZywgY2IgPSBGLCBhbmdsZSA9IDkwKSArIAogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9ICAiIzk5OTkzMyIpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9ICAiIzk5OTkzMyIpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9ICJNYWxlIG5vcm1hbC9GZW1hbGUgc3RlcmxpemVkIHZzLiBcbk1hbGUgbm9ybWFsL0ZlbWFsZSBub3JtYWwiKSArCiAgeWxpbSgtMC45LCAwLjUpCmQzCmBgYAoKIyMgQ29udHJhc3RpbmcgTS9GIGFuZCBNJFxzdGFyJC9GCgpgYGB7cn0KIyBwYWlyIGZpZ3VyZSBtYWxlICAKbWFsZV9kYXRfbG9nIDwtIGRhdF9sb25nICU+JSBmaWx0ZXIoU2V4ID09ICJNYWxlIikKCm1fZGF0X2xvZzwtIG1hbGVfZGF0X2xvZyAlPiUgZ3JvdXBfYnkoRWZmZWN0X0lEKSAlPiUgc3VtbWFyaXNlKHlpMiA9IGFic195aVsyXSAtIGFic195aVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aTIgPSBhYnNfdmlbMV0gKyBhYnNfdmlbMl0gLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41KnNxcnQoYWJzX3ZpWzFdKmFic192aVsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2llc19MYXRpbiA9IFNwZWNpZXNfTGF0aW5bMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZHkgPSBTdHVkeVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWRfY29udHJvbCA9IFNoYXJlZF9jb250cm9sWzFdKQoKIyB2YXJpYW5jZSBjb3ZhcmlhbmNlIG1hdHJpeApWX21hdHJpeF9sb25nMiA8LSBpbXB1dGVfY292YXJpYW5jZV9tYXRyaXgodmkgPSBtX2RhdF9sb2ckdmkyLCBjbHVzdGVyID0gbV9kYXRfbG9nJFNoYXJlZF9jb250cm9sLCByID0gMC41KQoKIyB3ZSBjYW4gcnVuIC0gc29tZSBoZXRlcm8tc2NhZCBtb2RlbHMKIyB0aGlzIGRvZXMgbm90IGltcHJvdmUgbW9kZWwKbV9tb2RfbG9uZyA8LSAgcm1hLm12KHlpMiwgViA9IFZfbWF0cml4X2xvbmcyLCAKICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KH4xfFNwZWNpZXNfTGF0aW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8U3R1ZHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjF8RWZmZWN0X0lEKSwgCiAgICAgICAgICAgICAgICAgZGF0YSA9IG1fZGF0X2xvZywgdGVzdCA9ICJ0IikKc3VtbWFyeShtX21vZF9sb25nKSAKaTJfbWwobV9tb2RfbG9uZykKYGBgCgpgYGB7ciwgZXZhbCA9IEZBTFNFfQoKZDQgPC0gZ2dwbG90KG1hbGVfZGF0X2xvZywgYWVzKHggPUNvbXBfdHlwZSwgeSA9IGFic195aSkpICsgCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHNxcnQoMS9hYnNfdmkpLCBjb2wgPSBDb21wX3R5cGUpLCBhbHBoYSA9IDAuNSkgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBFZmZlY3RfSUQpLCBhbHBoYSA9IDAuNSkgKyAKICBsYWJzKHkgPSAiYWJzb2x1dGUgbG9nIHJlc3BvbnNlIHJhdGlvIChsblJSKSIsIHggPSAiIiwgc2l6ZSA9ICJQcmVjaXNpb24gKDEvU0UpIikgKyAKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIm9uZV9jYXN0cmF0ZWQiID0iTWFsZSBzdGVybGl6ZWQvXG5GZW1hbGUgbm9ybWFsIiwgImJvdGhfbm9ybWFsIiA9ICJNYWxlIG5vcm1hbC9cbkZlbWFsZSBub3JtYWwiKSkgKwogIHlsaW0oMCwgMS4yNSkgKyAKICAjY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAuNSwgMi41KSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjODhDQ0VFIiwgIiNDQzY2NzciKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfYncoKSArCiAgZ3VpZGVzKGNvbG91ciA9ICJub25lIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0gYygxLCAwKSwgbGVnZW5kLmp1c3RpZmljYXRpb24gPSBjKDEsIDApKSArCgl0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSArCgl0aGVtZShsZWdlbmQuZGlyZWN0aW9uPSJob3Jpem9udGFsIikgKwoJdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpICsKCXRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgY29sb3VyID0iYmxhY2siLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoanVzdCA9IDAuNSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSA5MCkpCgpkNCAKYGBgCgpgYGB7ciwgZXZhbCA9IEZBTFNFfQpkNSA8LSBvcmNoYXJkX3Bsb3QobV9tb2RfbG9uZywgeGxhYiA9ICJhYnNvbHV0ZSBsb2cgcmVzcG9uc2UgcmF0aW8gKGxuUlIpIiwgCiAgICAgICAgICAgICAgICAgICBncm91cCA9ICJTdHVkeSIsIGRhdGEgPSBtX2RhdF9sb2csIGNiID0gRiwgYW5nbGUgPSA5MCkgKyAKICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gIiMzMzIyODgiKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSAiIzMzMjI4OCIpICsKc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSAiTWFsZSBzdGVybGl6ZWQvRmVtYWxlIG5vcm1hbCB2cy4gXG5NYWxlIG5vcm1hbC9GZW1hbGUgbm9ybWFsIikgKwogIHlsaW0oLTAuOSwgMC41KQoKZDUKYGBgCgojIyBGaWd1cmUgNAoKYGBge3IsIGV2YWwgPSBGQUxTRX0KcGF0Y2ggPC0gZDAgKyBkMSArIHBsb3RfbGF5b3V0KCkKCnBhdGNoICsgIHBsb3RfYW5ub3RhdGlvbih0YWdfbGV2ZWxzID0gIkEiKQpgYGAKCiFbXSguLi9maWdzL2ZpZzRBLnBuZykKCiMjIEZpZ3VyZSBTMQoKUmVsYXRlZCBmaWd1cmVzIAoKYGBge3IsIGV2YWwgPSBGQUxTRX0KcGF0Y2gyIDwtIChkMi9kNCl8IChkMy9kNSkgKyBwbG90X2xheW91dCgpCgpwYXRjaDIgKyAgcGxvdF9hbm5vdGF0aW9uKHRhZ19sZXZlbHMgPSAiQSIpCmBgYAoKIVtdKC4uL2ZpZ3MvZmlnNEIucG5nKQoKIyBDb250cmFzdGluZyBzZXhlczogYWxsLWNvbWJpbmF0aW9uIGRhdGEgey50YWJzZXQgLnRhYnNldC1waWxscyAudGFic2V0LWZhZGV9CgojIyBDb21wYXJpbmcgTS9GIHZzLiBNJFxzdGFyJC9GJFxzdGFyJAoKYGBge3J9CgojIG5hbWluZyBmYWN0b3IKc2RhdF9sb25nJENvbXBfdHlwZSA8LSAgZmFjdG9yKHNkYXRfbG9uZyRDb21wX3R5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJib3RoX2Nhc3RyYXRlZCIsICJib3RoX25vcm1hbCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJNYWxlIHN0ZXJsaXplZC9cbkZlbWFsZSBzdGVybGl6ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWxlIG5vcm1hbC9cbkZlbWFsZSBub3JtYWwiKSApCgojIFZDViBtYXRyaXgKVl9tYXRyaXhfbG9uZyA8LSBpbXB1dGVfY292YXJpYW5jZV9tYXRyaXgodmkgPSBzZGF0X2xvbmckdmksIGNsdXN0ZXIgPSBzZGF0X2xvbmckU2hhcmVkX2NvbnRyb2wsIHIgPSAwLjUpCgojIGNvcnJlbGFpdG9uIG1hdHJpeCBmb3IgcGh5bG9nZW55CiMgdHJlZSA8LSByZWFkLnRyZWUoaGVyZSgiZGF0YS90cmVlX3JvdGwudHJlIikpCiMgdHJlZSA8LSBjb21wdXRlLmJybGVuKHRyZWUpCiMgY29yX3RyZWUgPC0gdmN2KHRyZWUsIGNvcnIgPSBUUlVFKQoKIyB3aXRob3V0IGhldGVyb3NjZWRhc3RpY2l0eQptb2RfY29tcDIgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4X2xvbmcsIG1vZCA9IH4gQ29tcF90eXBlIC0gMSwgcmFuZG9tID0gbGlzdCggfjF8U3BlY2llc19MYXRpbiwgfjF8U3R1ZHksIH4xfEVmZmVjdF9JRCwgfjF8T2JzKSxkYXRhID0gc2RhdF9sb25nLCB0ZXN0ID0gInQiKQpzdW1tYXJ5KG1vZF9jb21wMikgCgojIHdpdGhvdXQgaGV0ZXJvc2NlZGFzdGljaXR5Cm1vZF9jb21wMmIgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4X2xvbmcsIG1vZCA9IH4gQ29tcF90eXBlLCByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfjF8RWZmZWN0X0lELCB+MXxPYnMpLGRhdGEgPSBzZGF0X2xvbmcsIHRlc3QgPSAidCIpCnN1bW1hcnkobW9kX2NvbXAyYikgCnIyX21sKG1vZF9jb21wMmIpCgojIHdpdGggaGV0ZXJvc2NlZGFzdGljaXR5Cm1vZF9jb21wMmMgPC0gIHJtYS5tdih5aSwgViA9IFZfbWF0cml4X2xvbmcsIAogICAgICAgICAgICAgICAgICAgICBtb2QgPSB+IENvbXBfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IGxpc3QoIH4xfFNwZWNpZXNfTGF0aW4sIH4xfFN0dWR5LCB+Q29tcF90eXBlfEVmZmVjdF9JRCksCiAgICAgICAgICAgICAgICAgICAgcmhvID0gMCwgc3RydWN0ID0gIkhDUyIsCiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZGF0X2xvbmcsIHRlc3QgPSAidCIpCnN1bW1hcnkobW9kX2NvbXAyYykgCgojIENvbXBhcmluZyBtb2RlbHMgd2l0aCBhbmQgd2l0aG91dCBoZXRlcm9zY2VkYXN0aWNpdHkKQUlDKG1vZF9jb21wMiwgbW9kX2NvbXAyYykKCmBgYAoKYGBge3IsIGV2YWwgPSBGfQojIHZpc3VhbGl6aW5nIHJlc3VsdHMKZjEgPC0gb3JjaGFyZF9wbG90KG1vZF9jb21wMmMsIG1vZCA9ICJDb21wX3R5cGUiLCB4bGFiID0gImxvZyByZXNwb25zZSByYXRpbyAobG5SUikiLCBncm91cCA9ICJTdHVkeSIsIAogICAgICAgICAgICAgICAgICAgZGF0YSA9IHNkYXRfbG9uZywgYW5nbGUgPSA5MCkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNENTVFMDAiLCAiIzAwOUU3MyIpKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCIjRDU1RTAwIiwgIiMwMDlFNzMiKSkgCgpmMQpgYGAKCiMjIEFic29sdXRlIGVmZmVjdCBzaXplIGNvbXBhcmFpb24gKE0vRiB2cy4gTSRcc3RhciQvRiRcc3RhciQpCgpgYGB7cn0KCiMgVkNWIG1hdHJpeAphYnNfVl9tYXRyaXhfbG9uZyA8LSBpbXB1dGVfY292YXJpYW5jZV9tYXRyaXgodmkgPSBzZGF0X2xvbmckYWJzX3ZpLCBjbHVzdGVyID0gc2RhdF9sb25nJFNoYXJlZF9jb250cm9sLCByID0gMC41KQoKCiMgd2l0aCBoZXRlcm9zY2VkYXN0aWNpdHkKbW9kX2NvbXAzIDwtICBybWEubXYoYWJzX3lpLCBWID0gYWJzX1ZfbWF0cml4X2xvbmcsIAogICAgICAgICAgICAgICAgICAgICBtb2QgPSB+IENvbXBfdHlwZSAtIDEsIAogICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfkNvbXBfdHlwZXxFZmZlY3RfSUQpLAogICAgICAgICAgICAgICAgICAgIHJobyA9IDAsIHN0cnVjdCA9ICJIQ1MiLAogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2RhdF9sb25nLCB0ZXN0ID0gInQiKQpzdW1tYXJ5KG1vZF9jb21wMykgCgojIHdpdGggaGV0ZXJvc2NlZGFzdGljaXR5Cm1vZF9jb21wM2IgPC0gIHJtYS5tdihhYnNfeWksIFYgPSBhYnNfVl9tYXRyaXhfbG9uZywgCiAgICAgICAgICAgICAgICAgICAgICBtb2QgPSB+IENvbXBfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KCB+MXxTcGVjaWVzX0xhdGluLCB+MXxTdHVkeSwgfkNvbXBfdHlwZXxFZmZlY3RfSUQpLAogICAgICAgICAgICAgICAgICAgICAgcmhvID0gMCwgc3RydWN0ID0gIkhDUyIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2RhdF9sb25nLCB0ZXN0ID0gInQiKQpzdW1tYXJ5KG1vZF9jb21wM2IpIApyMl9tbChtb2RfY29tcDNiKQoKIyB3aXRob3V0IGhldGVyb3NjZWRhc3RpY2l0eQptb2RfY29tcDNjIDwtICBybWEubXYoYWJzX3lpLCBWID0gYWJzX1ZfbWF0cml4X2xvbmcsIAogICAgICAgICAgICAgICAgICAgICAgbW9kID0gfiBDb21wX3R5cGUsIAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdCggfjF8U3BlY2llc19MYXRpbiwgfjF8U3R1ZHksIH4xfEVmZmVjdF9JRCksCiAgICAgICAgICAgICAgICAgICAgICAjcmhvID0gMCwgc3RydWN0ID0gIkhDUyIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2RhdF9sb25nLCB0ZXN0ID0gInQiKQoKIyBDb21wYXJpbmcgbW9kZWxzIHdpdGggYW5kIHdpdGhvdXQgaGV0ZXJvc2NlZGFzdGljaXR5CkFJQyhtb2RfY29tcDMsIG1vZF9jb21wM2MpCgpgYGAKCmBgYHtyLCBldmFsID0gRn0KIyB2aXN1YWxpemluZyByZXN1bHRzCmYyIDwtIG9yY2hhcmRfcGxvdChtb2RfY29tcDNiLCBtb2QgPSAiQ29tcF90eXBlIiwgeGxhYiA9ICJhYnNvbHV0ZSBsb2cgcmVzcG9uc2UgcmF0aW8gKGxuUlIpIiwgCiAgICAgICAgICAgICBncm91cCA9ICJTdHVkeSIsIGRhdGEgPSBzZGF0X2xvbmcsIGFuZ2xlID0gOTApICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjRDU1RTAwIiwgIiMwMDlFNzMiKSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygiI0Q1NUUwMCIsICIjMDA5RTczIikpIAoKZjIKYGBgCgojIyBGaWd1cmUgNQoKYGBge3IsIGV2YWwgPSBGQUxTRX0KcGF0Y2gzIDwtIGYxL2YyICsgcGxvdF9sYXlvdXQoKQoKcGF0Y2gzICsgIHBsb3RfYW5ub3RhdGlvbih0YWdfbGV2ZWxzID0gIkEiKQpgYGAKCiFbXSguLi9maWdzL2ZpZzUucG5nKQoKIyBTb2Z0d2FyZSBhbmQgcGFja2FnZSB2ZXJzaW9ucwoKYGBge3J9CnNlc3Npb25JbmZvKCkgJT4lIHBhbmRlcigpCmBgYAo=