1. Defining malnutrition
1.1. Prerequisites
library(tidyverse)
library(zscorer)
library(readr)
library(dplyr)
library (lubridate)
library (ggplot2)
library (rmarkdown)
library(openxlsx)
library(writexl)
library(rstatix)
library(eeptools)
library(ggpubr)
library(readxl)
install.packages("BlandAltmanLeh")
G2;WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/g
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.6/BlandAltmanLeh_0.3.1.zip'
Content type 'application/zip' length 407426 bytes (397 KB)
downloaded 397 KB
package ‘BlandAltmanLeh’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\jader\AppData\Local\Temp\Rtmpm8sLw2\downloaded_packages
library(BlandAltmanLeh)
PSFI_df_malnutrition <- read_xlsx("Ben_cut_4_27.xlsx")
Sys.setenv(LANGUAGE = "en")
1.2. Anthroprometric analysis
# CREATE NEW CATEGORY THAT CALCULATES AGE IN YEARS BASED ON AGE IN DAYS
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(age_years = age_days_exact / 365.25)
summary(PSFI_df_malnutrition$age_years)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.08768 0.79176 1.65535 3.07854 4.00176 14.92786
# CREATES A SUMMARY OF CASES (ht=height, wt=weight, age_years= age in years, muac)
PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
select(ht, wt, age_years, muac) %>%
summary()
ht wt age_years muac
Min. : 20.00 Min. : 3.20 Min. : 0.08768 Min. : 9.00
1st Qu.: 67.00 1st Qu.: 7.00 1st Qu.: 0.73436 1st Qu.:14.00
Median : 78.00 Median : 9.50 Median : 1.40141 Median :15.00
Mean : 85.23 Mean :12.17 Mean : 2.83539 Mean :15.38
3rd Qu.: 98.00 3rd Qu.:14.00 3rd Qu.: 3.49267 3rd Qu.:17.00
Max. :192.00 Max. :72.00 Max. :14.92786 Max. :27.00
NAs :1 NAs :2
# CREATES A HISTOGRAM AND BOXPLOT OF HEIGHT (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$ht[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(0,200), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$ht[PSFI_df_malnutrition$case_control == 1]
, breaks=40 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Height (cm)", xlim=c(0,200))

# CREATES A HISTOGRAM AND BOXPLOT OF WEIGHT (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$wt[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(0,75), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$wt[PSFI_df_malnutrition$case_control == 1]
, breaks=40 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Weight (kg)", xlim=c(0,75))

# CREATES A HISTOGRAM AND BOXPLOT OF MUAC (CASES)
## BLUE LINE OUTLINES MODERATE MALNUTRITION (12.5cm)
## RED LINE OUTLINES SEVERE MALNUTRITION (11.5cm)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$muac[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(5,30), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$muac[PSFI_df_malnutrition$case_control == 1]
, breaks=20 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Mid-upper arm circumference (cm)", xlim=c(5,30))
abline(v = 11.5, col = "red", lwd = 2, lty = 2) # severe
abline(v = 12.5, col = "blue", lwd = 2, lty = 2) # moderate

# HISTOGRAM AND BOXPLOT OF AGE (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$age_years[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(0,15), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$age_years[PSFI_df_malnutrition$case_control == 1], breaks=40 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Age (years)", xlim=c(0,15))

1.3. Z-scorer
# CREATES A NEW CATEGORY DEFINING SEX AS 1/2, INSTEAD OF 0/1 (NECESSARY FOR ZSCORER PACKAGE)
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(sex_who = if_else(sex == 1, 1, 2))
summary(PSFI_df_malnutrition$sex_who)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.000 1.000 1.427 2.000 2.000
# CREATES A NEW CATEGORY CALCULATING AGE IN MONTHS BASED ON AGE IN DAYS
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(age_months = age_days_exact / 30.4375)
summary(PSFI_df_malnutrition$age_months)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.052 9.501 19.864 36.942 48.021 179.134
# CREATES A NEW CATEGORY (AGE<6M = 0, AGE 6M - 5J = 1, AGE > 5J = 2)
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
age_group = case_when(
age_months < 6 ~ 0L,
age_months >= 6 & age_years < 5 ~ 1L,
age_years >= 5 ~ 2L,
TRUE ~ NA_integer_
)
)
# ZSCORER PACKAGE CALCULATES ZSCORE OF WEIGHT FOR LENGTH (wflz), WEIGHT FOR AGE (wfaz), HEIGHT FOR AGE (hfaz), WEIGHT FOR HEIGHT (wfhz), BMI FOR AGE (baz)
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
wflz = addWGSR(
data = .,
sex = "sex_who",
firstPart = "wt",
secondPart = "ht",
index = "wfl"
)$wflz,
wfaz = addWGSR(
data = .,
sex = "sex_who",
firstPart = "wt",
secondPart = "age_days_exact",
index = "wfa"
)$wfaz,
hfaz = addWGSR(
data = .,
sex = "sex_who",
firstPart = "ht",
secondPart = "age_days_exact",
index = "hfa"
)$hfaz,
wfhz = addWGSR(
data = .,
sex = "sex_who",
firstPart = "wt",
secondPart = "ht",
index = "wfh"
)$wfhz,
baz = addWGSR(
data = .,
sex = "sex_who",
firstPart = "wt",
secondPart = "ht",
thirdPart = "age_days_exact",
index = "bfa"
)$bfaz
)
===========================================================================================================================================
===========================================================================================================================================
===========================================================================================================================================
===========================================================================================================================================
===========================================================================================================================================
# ASSIGNS Z-SCORE TO MUAC BASED ON THE 11.5 & 12.5CM LIMITS, THIS IS A PROXY AS LATER A Z-SCORE OF 0 WILL EQUAL NO MALNUTRITION, <-2 WILL EQUAL MODERATE MALNUTRITION AND <-3 WILL EQUAL SEVERE MALNUTRITION
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
muacz = case_when(
muac >= 12.5 ~ 0,
muac >= 11.5 & muac < 12.5 ~ -2.5,
muac < 11.5 ~ -4,
TRUE ~ NA_real_
)
)
# CREATE MALNUTRITION ZSCORE BASED ON MERGED WFHLZ, BAZ, MUACZ (to be defined later)
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
zscore_unified = case_when(
age_group == 1 & ht >= 45 & ht < 65 ~ wflz,
age_group == 1 & ht >= 65 & ht < 120 ~ wfhz,
age_group == 1 & (ht < 45 | ht >= 120 | is.na(ht)) ~ muacz,
age_group == 2 ~ baz,
TRUE ~ NA_real_
)
)
# CREATE MALNUTRITION CATEGORY BASED ON PREVIOUS Z SCORE
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
malnutrition = case_when(
is.na(zscore_unified) ~ NA_integer_,
zscore_unified < -3 ~ 2L,
zscore_unified >= -3 & zscore_unified < -2 ~ 1L,
TRUE ~ 0L
)
)
# ADD A MALNUTRITION SOURCE CATEGORY SO WE KNOW WHICH ANTHROPOMETRIC MEASURE IS BEING USED TO DEFINE MALNUTRITION
PSFI_df_malnutrition <- PSFI_df_malnutrition %>%
mutate(
malnutrition_source = case_when(
age_group == 1 & ht >= 45 & ht < 65 ~ "WFL",
age_group == 1 & ht >= 65 & ht < 120 ~ "WFH",
age_group == 1 & (ht < 45 | ht >= 120 | is.na(ht)) ~ "MUAC",
age_group == 2 ~ "BFA",
TRUE ~ NA_character_
)
)
1.4 Z score check
subset_wfaz <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
pull(wfaz)
# SUMMARY OF WEIGHT FOR AGE Z-SCORE (CASES)
summary(subset_wfaz)
Min. 1st Qu. Median Mean 3rd Qu. Max. NAs
-7.5400 -2.3050 -0.9700 -1.0971 0.0475 10.2500 49
# NUMBER OF CASES IN WEIGHT FOR AGE Z SCORE
length(subset_wfaz)
[1] 755
subset_wfaz1 <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfaz) %>%
pull(wfaz)
# NUMBER OF OUTLIERS IN WEIGHT FOR AGE Z SCORE
length(subset_wfaz1)
[1] 10
subset_hfaz <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
pull(hfaz)
# SUMMARY OF HEIGHT FOR AGE Z SCORE (CASES)
summary(subset_hfaz)
Min. 1st Qu. Median Mean 3rd Qu. Max. NAs
-18.2600 -2.8700 -1.1800 -0.9338 0.6350 44.5600 1
# NUMBER OF CASES IN HEIGHT FOR AGE Z SCORE
length(subset_hfaz)
[1] 755
subset_hfaz1 <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(hfaz) %>%
pull(hfaz)
# NUMBER OF OUTLIERS FOR HEIGHT FOR AGE Z SCORE
length(subset_hfaz1)
[1] 29
subset_wfhz <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
pull(wfhz)
# SUMMARY OF WEIGHT FOR HEIGHT Z SCORE (CASES)
summary(subset_wfhz)
Min. 1st Qu. Median Mean 3rd Qu. Max. NAs
-10.5900 -2.2300 -0.5700 -0.4132 1.1875 42.7700 93
# NUMBER OF CASES IN WEIGHT FOR HEIGHT Z SCORE
length(subset_wfhz)
[1] 755
subset_wfhz1 <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfhz) %>%
pull(wfhz)
# NUMBER OF OUTLIERS IN WEIGHT FOR HEIGHT Z SCORE
length(subset_wfhz1)
[1] 20
subset_baz <- PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >=2) %>%
pull(baz)
# SUMMARY OF BMI FOR AGE Z SCORE (CASES)
summary(subset_baz)
Min. 1st Qu. Median Mean 3rd Qu. Max. NAs
-12.5600 -2.1800 -0.7500 -0.6988 0.7100 32.6700 1
# NUMBER OF CASES IN BMI FOR AGE Z SCORE
length(subset_baz)
[1] 302
subset_baz1 <- PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >=2) %>%
identify_outliers(baz) %>%
pull(baz)
# NUMBER OF OUTLIERS IN BMI FOR AGE Z SCORE
length(subset_baz1)
[1] 17
subset_muac <- PSFI_df_malnutrition %>%
filter(age_group == 1 & case_control == 1) %>%
pull(muac)
# SUMMARY OF MUAC (CASES, 6-59 MONTHS)
summary(subset_muac)
Min. 1st Qu. Median Mean 3rd Qu. Max. NAs
9.00 14.00 15.00 15.02 16.00 23.00 2
# NUMBER OF CASES IN MUAC
length(subset_muac)
[1] 535
subset_muac1 <- PSFI_df_malnutrition %>%
filter(age_group == 1 & case_control == 1) %>%
identify_outliers(muac) %>%
pull(muac)
# NUMBER OF OUTLIERS IN MUAC
length(subset_muac1)
[1] 18
# CREATES BOXPLOT AND HISTOGRAM FOR WEIGHT FOR HEIGHT Z SCORE (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$wfhz[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(-11,43), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$wfhz[PSFI_df_malnutrition$case_control == 1]
, breaks=50 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Weight-for-height (z-score)", xlim=c(-11,43))

# CREATES BOXPLOT AND HISTOGRAM OF WEIGHT FOR AGE (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$wfaz[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(-8,11), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$wfaz[PSFI_df_malnutrition$case_control == 1]
, breaks=50 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Weight-for-age (z-score)", xlim=c(-8,11))

# CREATES BOXPLOT AND HISTOGRAM OF BMI FOR AGE (CASES)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$baz[PSFI_df_malnutrition$case_control == 1 & PSFI_df_malnutrition$age_years >=2] , horizontal=TRUE , ylim=c(-13,33), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$baz[PSFI_df_malnutrition$case_control == 1 & PSFI_df_malnutrition$age_years >=2]
, breaks=50 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="BMI-for-age (z-score)", xlim=c(-13,33))

# CREATE BOXPLOT AND HISTOGRAM OF HEIGHT FOR AGE
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$hfaz[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(-19,45), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$hfaz[PSFI_df_malnutrition$case_control == 1]
, breaks=50 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Height-for-age (z-score)", xlim=c(-19,45))

# CREATES HISTOGRAM AND BOXPLOT OF MUAC (CASES, 6-59 MONTHS)
layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(PSFI_df_malnutrition$muac[PSFI_df_malnutrition$case_control == 1] , horizontal=TRUE , ylim=c(5,30), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(PSFI_df_malnutrition$muac[PSFI_df_malnutrition$case_control == 1]
, breaks=20 , col=rgb(1,0.8,0.8,1) , border=F , main="" , xlab="Mid-upper arm circumference (cm)", xlim=c(5,30))
abline(v = 11.5, col = "red", lwd = 2, lty = 2) # severe
abline(v = 12.5, col = "blue", lwd = 2, lty = 2) # moderate

# MAKES A TABLE OF OUTLIERS FOR WEIGHT FOR HEIGHT
wfhz_outliers <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfhz) %>%
select(record_id, ht, wt, age_months, age_years, sex, wfhz, is.outlier, is.extreme)
wfhz_outliers
# MAKES A TABLE OF OUTLIERS FOR WEIGHT FOR AGE
wfaz_outliers <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfaz) %>%
select(record_id,ht, wt, age_months, age_years, sex, wfaz, is.outlier, is.extreme)
wfaz_outliers
# MAKES A TABLE OF OUTLIERS FOR HEIGHT FOR AGE
hfaz_outliers <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(hfaz) %>%
select(record_id, ht, wt, age_months, age_years, sex, hfaz, is.outlier, is.extreme)
hfaz_outliers
# MAKES A TABLE OF OUTLIERS FOR BMI FOR AGE
baz_outliers <- PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >=2) %>%
identify_outliers(baz) %>%
select(record_id, ht, wt, baz, age_months, age_years, sex, is.outlier, is.extreme)
baz_outliers
# MAKES A TABLE OF OUTLIERS FOR MUAC
muac_outliers <- PSFI_df_malnutrition %>%
filter(age_group == 1 & case_control == 1) %>%
identify_outliers(muac) %>%
select(record_id, ht, wt, age_months, age_years, sex, muac, is.outlier, is.extreme)
muac_outliers
# CREATE A SUMMARY TABLE OF OUTLIER STATUS FOR ALL ANTHROPOMETRIC INDICATORS
anthro_outlier_summary <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
mutate(
muac_outlier = if_else(
age_group == 1,
muac %in% (
PSFI_df_malnutrition %>%
filter(age_group == 1 & case_control == 1) %>%
identify_outliers(muac) %>%
filter(is.outlier) %>%
pull(muac)
),
FALSE
),
hfaz_outlier = hfaz %in% (
PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(hfaz) %>%
filter(is.outlier) %>%
pull(hfaz)
),
wfaz_outlier = wfaz %in% (
PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfaz) %>%
filter(is.outlier) %>%
pull(wfaz)
),
wfhz_outlier = wfhz %in% (
PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
identify_outliers(wfhz) %>%
filter(is.outlier) %>%
pull(wfhz)
),
baz_outlier = if_else(
age_years >= 2,
baz %in% (
PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >= 2) %>%
identify_outliers(baz) %>%
filter(is.outlier) %>%
pull(baz)
),
FALSE
)
) %>%
filter(
muac_outlier |
hfaz_outlier |
wfaz_outlier |
wfhz_outlier |
baz_outlier
) %>%
# select useful columns
select(
record_id,
age_months,
age_years,
sex,
ht,
wt,
muac,
muac_outlier,
hfaz,
hfaz_outlier,
wfaz,
wfaz_outlier,
wfhz,
wfhz_outlier,
baz,
baz_outlier
)
anthro_outlier_summary
# CREATES AN EXCEL FILE OF ALL OUTLIER TABLES
write.xlsx(
list(
WFHZ = wfhz_outliers,
WFAZ = wfaz_outliers,
HAZ = hfaz_outliers,
MUAC = muac_outliers,
BAZ = baz_outliers,
SUMMARY = anthro_outlier_summary
),
file = "anthropometric_outliers.xlsx"
)
# CREATE A TABLE OF ALL NA'S
na_table <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
mutate(
hfaz_missing = is.na(hfaz),
wfaz_missing = is.na(wfaz),
wfhz_missing = is.na(wfhz),
muac_missing = is.na (muac),
baz_missing = is.na (baz)
) %>%
filter(hfaz_missing | wfaz_missing | wfhz_missing | baz_missing | muac_missing) %>%
select(
record_id,
ht,
wt,
age_months,
hfaz,
wfaz,
wfhz,
baz,
muac,
hfaz_missing,
wfaz_missing,
wfhz_missing,
baz_missing,
muac_missing
)
na_table
# CREATES A TABLE THAT SUMMARIZES MISSINGNESS AND OUTLIERS DEPENDING ON ANTHROPOMETRIC MEASURE
anthro_vars <- c("hfaz", "wfaz", "wfhz", "baz", "muac")
cases_df <- PSFI_df_malnutrition %>%
filter(case_control == 1)
anthro_summary <- lapply(anthro_vars, function(var) {
df_var <- cases_df %>%
filter(
case_when(
var == "muac" ~ age_group == 1,
var == "baz" ~ age_years >= 2,
TRUE ~ TRUE
)
)
x <- df_var[[var]]
outlier_info <- df_var %>%
select(all_of(var)) %>%
identify_outliers(!!sym(var))
tibble(
measure = var,
n_eligible = nrow(df_var),
n = sum(!is.na(x)),
n_missing = sum(is.na(x)),
pct_missing = round(mean(is.na(x)) * 100, 2),
n_outliers = sum(outlier_info$is.outlier, na.rm = TRUE),
n_extreme_outliers = sum(outlier_info$is.extreme, na.rm = TRUE)
)
}) %>%
bind_rows()
anthro_summary
# MAKES EXCEL TABLE OF na_table AND anthro_summary
write.xlsx(
list(
Missing = na_table,
Summary = anthro_summary
),
file = "NA.xlsx")
1.5 Data check
# COMPARES MISSINGNESS ACROSS SCOTT'S Z-SCORES AND MINE
summary_df <- PSFI_df_malnutrition %>%
filter(case_control == 1)
missing_summary <- tibble(
comparison = c(
"Weight-for-height z-score",
"Weight-for-age z-score",
"BMI-for-age z-score"
),
n_total = c(
nrow(summary_df),
nrow(summary_df),
sum(summary_df$age_years >= 2, na.rm = TRUE)
),
missing_scott = c(
sum(is.na(summary_df$whz)),
sum(is.na(summary_df$waz)),
sum(is.na(summary_df$bmiz) & summary_df$age_years >= 2, na.rm = TRUE)
),
missing_benjamin = c(
sum(is.na(summary_df$wfhz)),
sum(is.na(summary_df$wfaz)),
sum(is.na(summary_df$baz) & summary_df$age_years >= 2, na.rm = TRUE)
),
missing_either = c(
sum(is.na(summary_df$whz) | is.na(summary_df$wfhz)),
sum(is.na(summary_df$waz) | is.na(summary_df$wfaz)),
sum(
(is.na(summary_df$bmiz) | is.na(summary_df$baz)) &
summary_df$age_years >= 2,
na.rm = TRUE
)
)
)
missing_summary
# CREATES BLAND-ALTMAN PLOT FOR SCOTTS' Z-SCORES AND MY Z-SCORES TO ASSESS DIFFERENCE IN OUR MEASUREMENTS
ba_wfh <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
filter(!is.na(whz), !is.na(wfhz)) %>%
mutate(
mean_z = (whz + wfhz) / 2,
diff_z = whz - wfhz
)
mean_diff <- mean(ba_wfh$diff_z)
sd_diff <- sd(ba_wfh$diff_z)
upper <- mean_diff + 1.96 * sd_diff
lower <- mean_diff - 1.96 * sd_diff
ggplot(ba_wfh, aes(x = mean_z, y = diff_z)) +
geom_point(alpha = 0.5) +
geom_hline(yintercept = mean_diff) +
geom_hline(yintercept = upper, linetype = "dashed") +
geom_hline(yintercept = lower, linetype = "dashed") +
theme_minimal() +
labs(
title = "Weight-for-height: WHZ (Scott) vs WFHZ (Benjamin)",
x = "Mean of WHZ and WFHZ",
y = "Difference (WHZ - WFHZ)"
)

ba_wfa <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
filter(!is.na(waz), !is.na(wfaz)) %>%
mutate(
mean_z = (waz + wfaz) / 2,
diff_z = waz - wfaz
)
mean_diff <- mean(ba_wfa$diff_z)
sd_diff <- sd(ba_wfa$diff_z)
upper <- mean_diff + 1.96 * sd_diff
lower <- mean_diff - 1.96 * sd_diff
ggplot(ba_wfa, aes(x = mean_z, y = diff_z)) +
geom_point(alpha = 0.5) +
geom_hline(yintercept = mean_diff) +
geom_hline(yintercept = upper, linetype = "dashed") +
geom_hline(yintercept = lower, linetype = "dashed") +
theme_minimal() +
labs(
title = "Weight-for-age: WAZ (Scott) vs WFAZ (Benjamin)",
x = "Mean of WAZ and WFAZ",
y = "Difference (WAZ - WFAZ)"
)

ba_baz <- PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >=2) %>%
filter(!is.na(bmiz), !is.na(baz)) %>%
mutate(
mean_z = (bmiz + baz) / 2,
diff_z = bmiz - baz
)
mean_diff <- mean(ba_baz$diff_z)
sd_diff <- sd(ba_baz$diff_z)
upper <- mean_diff + 1.96 * sd_diff
lower <- mean_diff - 1.96 * sd_diff
ggplot(ba_baz, aes(x = mean_z, y = diff_z)) +
geom_point(alpha = 0.5) +
geom_hline(yintercept = mean_diff) +
geom_hline(yintercept = upper, linetype = "dashed") +
geom_hline(yintercept = lower, linetype = "dashed") +
theme_minimal() +
labs(
title = "BMI-for-age: BMIZ (Scott) vs BAZ (Benjamin)",
x = "Mean of BMIZ and BAZ",
y = "Difference (BMIZ - BAZ)"
)

# CACLULATE MEAN DIFF AND CI
ba_wfh <- PSFI_df_malnutrition %>%
filter(case_control == 1, !is.na(whz), !is.na(wfhz))
bland.altman.stats(ba_wfh$whz, ba_wfh$wfhz)
$means
[1] -3.605445900 -3.488783450 2.439143850 1.267518250 -2.371564500 -2.321934250 -0.810732720 1.479451100 0.138198815
[10] -3.102076450 0.019295239 -2.628788300 -0.269554685 -0.973560270 -1.489720200 -1.502515250 -6.208495650 5.811026700
[19] -0.751110880 0.654646580 -3.070565950 1.620603450 -3.229475850 -1.029242650 -3.480320650 -1.511210500 10.814884150
[28] -0.630703305 3.797156400 -9.168009500 0.730485580 -3.966774050 1.427691700 2.188690650 -1.343790200 2.440360400
[37] -1.391675000 4.068104550 0.270611415 -5.612664850 2.957602500 -1.604430300 -0.385379310 -1.389025800 -3.355513850
[46] -3.960038000 -2.321623250 -2.577757050 -2.958679550 0.586913350 -5.098576650 0.640798190 2.679082350 -0.288762330
[55] -1.841541550 -2.110378100 -0.458781610 -7.641231750 -0.530507815 -7.316259700 2.650666750 -0.630703305 0.850440820
[64] -1.716355750 -1.437453150 -1.480461850 -0.857888570 1.311412000 -0.298176400 -1.580735050 2.278830650 -3.737506750
[73] -3.125076350 -1.723696000 -1.747956650 2.510750650 4.370479550 1.402039800 -2.140004100 0.339955995 1.478532600
[82] 0.238109440 1.328299850 -0.380465255 -2.613721100 -0.458781610 1.308976400 -0.810732720 -4.344589350 -1.619270450
[91] -7.825877250 -3.582077550 4.431358600 2.879932800 7.095248200 1.560975350 -0.439019010 -1.841541550 1.878539550
[100] -1.140028950 0.428720115 -3.227388000 -0.217198085 -4.922542200 29.140714000 -1.861673400 -8.708176100 -3.412840100
[109] -1.580735050 -2.650990300 0.420754355 2.009409800 0.233613420 -2.249018550 0.402137975 1.700302400 4.111547300
[118] 2.921231250 -4.835218200 2.977385950 4.135959950 -2.978071700 -0.973560270 -5.206489300 -1.067820900 1.174528950
[127] -0.451974175 0.444851245 0.529217825 -1.099916850 -0.529031915 -1.611205550 -3.671109600 1.451130800 1.513296600
[136] 0.049837973 -3.581829800 -4.558167500 0.978331825 3.504880300 1.640680450 3.114165850 1.008837900 0.338038265
[145] -1.732454900 0.402335475 1.339544000 1.228660950 2.895760950 0.750892935 -1.732454900 0.539495190 -2.311810400
[154] -0.042089251 -7.261357850 1.030466150 2.122472200 -0.816514980 -2.570313950 -3.207163000 -1.391675000 -1.542286050
[163] -2.909863300 -4.580637200 0.178115925 -0.080683912 0.721350060 -0.608532780 -6.270526850 -1.000748850 -1.208162300
[172] -2.140004100 -6.027845400 -1.140408450 -0.740779075 0.361390805 0.049837973 1.091234050 -6.071291650 1.540820200
[181] 5.585989250 -1.730213750 -5.882064350 -6.984400100 0.021903755 -2.321934250 -2.674345400 -3.827998800 -2.554303250
[190] -3.698397650 -4.922542200 -0.089808277 -5.585275100 1.054949950 -2.504464200 4.515932250 0.482041530 -1.029242650
[199] -0.392374435 3.098194050 -5.266718600 -0.467415440 -13.773105500 -2.950516250 -5.373898600 -3.388659950 -2.830741600
[208] -5.329690650 -2.402209250 -7.164492350 1.791588750 -0.857888570 -1.877921400 -0.269617270 -6.325081700 -2.231256100
[217] -1.321224400 -8.878845100 1.095828700 -0.849684880 -5.378911000 0.912055895 0.040662067 -1.702454000 1.628788000
[226] -1.480461850 -5.266718600 -1.982036000 2.743102650 2.665021600 -4.078937300 -3.966774050 -2.658411700 -0.694610220
[235] -2.418683650 1.311412000 -2.009895500 -2.440995300 -2.409759950 1.791588750 4.538283800 -2.304806200 -1.475040750
[244] 2.879938650 1.217814200 -1.990349050 -2.400372100 -1.439589650 0.912055895 1.970626750 1.478532600 -4.103004700
[253] 0.850586730 0.233613420 -0.979932240 1.118957300 -3.018650200 1.309299550 -2.593147600 -6.262337900 1.507333200
[262] 3.748610150 -0.458781610 -0.568736140 1.932088400 -3.033296850 5.994338800 4.166311500 -0.931092200 -3.999351450
[271] -1.851626850 -1.869831300 0.388569720 -0.661093280 -1.297035400 0.640798190 2.508052700 0.918884060 -0.661093280
[280] -1.297035400 -8.391170750 3.750956900 -0.317924175 0.489557940 -2.231256100 1.468012100 -0.499220460 -3.229475850
[289] -0.979932240 -1.088938150 -3.032471550 -1.353259150 -1.297035400 -1.279515400 -0.549191915 1.562281000 1.147676650
[298] -0.292254795 -0.090522924 -0.629145865 0.120804660 -0.912572825 1.451130800 -0.629145865 -5.065649750 0.621610280
[307] 1.259420200 0.699920660 -1.500309750 -1.132087000 -0.781791640 -5.987664900 -1.270950100 -0.443499590 -2.613007500
[316] 0.798143170 -0.549191915 0.049837973 0.798143170 3.067291400 -2.236626200 -2.409759950 -0.648613765 -1.161849200
[325] -2.318603200 -0.408859880 2.022092850 -1.130378800 -5.093157000 0.079012313 -4.782737550 0.869165565 0.417533985
[334] 1.507333200 0.950522160 -0.190856795 3.115070400 -1.877921400 0.818404470 1.421452600 1.228660950 0.066632200
[343] -4.634414250 -0.211327080 -2.562283450 1.180810400 -3.081438800 -0.810732720 -5.036577500 -3.576673650 -0.877744915
[352] -3.599990750 1.058282350 -3.102076450 -2.950067750 2.699937900 0.230497990 0.441340805 3.581538200 1.478532600
[361] 0.391863785 -1.315223050 -5.987664900 2.821296250 -2.692131600 -0.467415440 -2.381394550 1.420635500 1.970626750
[370] -1.798774450 -3.113388250 0.895728675 0.978074330 2.921231250 -0.661093280 -0.729815650 1.451130800 -1.861673400
[379] 3.201842300 -1.510117550 -1.987667750 -0.730086255 -0.221647500 0.747936755 -2.418245300 1.932088400 -2.071710500
[388] -0.949740535 2.511125700 0.381166160 1.218961700 -0.317924175 3.748610150 0.444851245 1.627499950 0.609413170
[397] 1.289043450 -1.401283100 1.719337850 -0.962101530 1.749893000 2.051749350 -0.100227427 -1.050803100 2.237533550
[406] 8.598023300 -0.322488775 -3.227388000 1.451130800 -2.831783350 -0.170787645 2.619483050 -0.760930720 1.852098400
[415] 4.135556800 -2.402209250 -5.987664900 2.250818750 2.999700650 5.445005400 1.147930650 2.767334300 -4.371986700
[424] 2.091036950 -1.671208400 2.430357300 -2.617866800 -3.585674450 -1.299441300 -1.812354750 1.089740800 1.828659950
[433] -0.865522775 3.097397250 11.537046200 7.914286550 1.778187150 7.159543900 2.448303900 -0.290552380 2.531168950
[442] -0.452313610 9.315947300 -2.570313950 8.898930450 -2.321623250 -0.811685860 1.149872800 0.758393710 2.531168950
[451] 6.353862050 2.132172550 4.823069550 0.402335475 2.439143850 0.548304135 -1.110352150 -4.386605200 4.424898500
[460] -2.411172750 -4.812188850 -3.744434150 -0.978614350 -2.992883600 -2.852325750 0.977797230 0.808422205 -1.951208500
[469] 3.875309900 -1.520197700 -1.401298100 1.891884050 0.008662369 1.301315450 1.144866900 -3.677478200 -0.889447160
[478] -0.857888570 0.798143170 4.466554550 0.621610280 3.577596250 1.059976950 -0.273423385 0.798143170 -1.029242650
[487] -2.700572100 -2.978071700 0.079012313 -3.931450200 -4.053061900 0.268100925 -0.120190215 -1.175229500 -1.930434600
[496] -0.352148090 -1.421879750 8.557303250 -1.562060800 -1.040012550 -1.299587800 -3.814904750 0.501168935 0.360329040
[505] -0.630703305 -1.840321500 -0.968004240 0.049837973 -1.841541550 -5.752892350 -1.611205550 0.798178280 3.507480400
[514] 1.228039200 1.540820200 4.368248550 -0.857888570 -2.401232300 -0.381964805 -2.300993250 -0.013780327 5.661159850
[523] -1.942339000 -0.260534035 4.368248550 0.992438580 0.189438290 -1.391675000 2.448835600 -3.677478200 -1.341393700
[532] -0.390008530 -0.230081795 -2.163587800 0.300735470 2.067915250 1.419812800 1.074134000 -0.089059541 -2.402033900
[541] -0.292254795 -0.980103185 -1.049230695 -6.027845400 -0.499519765 -2.088316150 1.308523700 -1.358265200 0.060410142
[550] -0.805803545 -0.575809170 -1.716355750 -0.390008530 -2.870621750 -1.953278950 1.569661650 2.679082350 -2.899061400
[559] -2.402209250 2.448303900 2.302377250 -2.607836650 -5.649663800 -4.734601200 1.728368350 1.774017000 -1.438459500
[568] 1.247536000 -1.063901580 -0.874100425 1.818120700 -1.030292650 -1.029242650 -0.865522775 -3.224903700 3.612140600
[577] 2.379918650 1.289043450 1.839949300 -0.816514980 1.735155550 0.611922645 -3.220219450 -1.819653500 -3.850708850
[586] 0.040662067 -2.231256100 -1.161849200 1.990043600 1.421452600 1.659446150 -0.450813080 -2.287649900 0.227413560
[595] -3.605445900 0.462078120 0.182067830 0.268100925 0.367552865 2.245474400 3.077738700 -2.039070400 2.701050600
[604] 0.444658070 2.049264200 2.448303900 7.346236650 -1.000748850 -3.343727750 1.050874900 0.760397470 -0.816514980
[613] -3.404069500 -1.447523550 -6.048216550 1.759816300 -0.771403950 0.361390805 0.270611415 -3.271023400 -2.600894400
[622] -0.203013375 -7.678023700 0.950522160 -5.583467900 -4.308483850 -4.881145400 -1.282258950 -5.486515450 -5.347951500
[631] -1.063901580 -0.408859880 1.139583550 0.528282270
$diffs
[1] -0.050891800 -0.037566900 -0.001712300 -0.004963500 0.156871000 -0.003868500 -0.001465440 -0.001097800 -0.003602370
[10] -0.004152900 -0.001409522 0.002423400 0.000890630 0.152879460 0.000559600 0.154969500 -0.716991300 -0.437946600
[19] -0.002221760 0.169293160 -0.001131900 0.001206900 -0.018951700 0.001514700 -0.040641300 0.157579000 -4.130231700
[28] -0.001406610 -0.085687200 -2.356019000 0.000971160 -0.113548100 -0.004616600 -0.002618700 0.152419600 0.000720800
[37] -0.003350000 -0.143790900 0.001222830 -0.545329700 -0.004795000 0.151139400 0.149241380 0.001948400 -0.031027700
[46] -0.100076000 -0.003246500 0.004485900 0.002640900 0.153826700 -0.337153300 0.001596380 -0.001835300 0.162475340
[55] -0.003083100 -0.000756200 0.002436780 -1.402463500 -0.001015630 -1.272519400 0.141333500 -0.001406610 0.000881640
[64] 0.147288500 0.185093700 -0.000923700 0.004222860 0.002824000 0.143647200 -0.001470100 -0.002338700 0.084986500
[73] -0.010152700 0.152608000 0.004086700 0.001501300 -0.219040900 0.004079600 -0.000008200 0.139911990 -0.002934800
[82] -0.003781120 -0.003400300 -0.000930510 0.152557800 0.002436780 -0.002047200 -0.001465440 -0.169178700 0.001459100
[91] -1.491754500 -0.044155100 -0.217282800 -0.000134400 -1.229503600 0.001950700 0.001961980 -0.003083100 -0.002920900
[100] -0.000057900 -0.002559770 -0.014776000 0.145603830 -0.325084400 -27.258572000 -0.003346800 -2.156352200 -0.025680200
[109] -0.001470100 -0.001980600 0.161508710 -0.001180400 0.147226840 0.001962900 0.004275950 0.000604800 -0.016905400
[118] 0.002462500 -0.130436400 0.134771900 -0.168080100 0.003856600 0.152879460 -0.412978600 0.004358200 0.149057900
[127] -0.003948350 0.149702490 -0.001564350 0.000166300 0.001936170 -0.002411100 -0.062219200 0.002261600 0.146593200
[136] -0.000324055 -0.043659600 -0.036335000 -0.003336350 -0.050239400 0.001360900 -0.011668300 -0.002324200 -0.003923470
[145] 0.155090200 0.004670950 -0.000912000 -0.002678100 0.151521900 0.001785870 0.155090200 -0.001009620 -0.003620800
[154] -0.004178501 -1.202715700 0.000932300 0.004944400 0.166970040 -0.000627900 0.165674000 -0.003350000 -0.004572100
[163] 0.000273400 -0.241274400 -0.003768150 0.178632176 0.002700120 0.002934440 -0.741053700 -0.001497700 0.003675400
[172] -0.000008200 -0.475690800 -0.000816900 0.158441850 0.142781610 -0.000324055 0.002468100 -0.722583300 0.001640400
[181] -0.448021500 -0.000427500 -0.644128700 -1.148800200 0.003807509 -0.003868500 0.171309200 -0.075997600 0.171393500
[190] 0.083204700 -0.325084400 0.140383446 -0.490550200 0.149899900 0.151071600 -0.228135500 0.004083060 0.001514700
[199] -0.004748870 -0.003611900 -0.193437200 0.145169120 -6.366211000 0.178967500 -0.427797200 0.122680100 0.158516800
[208] -0.279381300 -0.004418500 -0.948984700 0.003177500 0.004222860 0.004157200 0.000765460 -0.710163400 -0.002512200
[217] -0.002448800 -2.157690200 0.151657400 0.000630240 -0.337822000 0.004111790 0.001324135 -0.004908000 -0.002424000
[226] -0.000923700 -0.193437200 0.155928000 0.146205300 0.150043200 -0.117874600 -0.113548100 0.003176600 0.150779560
[235] 0.162632700 0.002824000 0.160209000 -0.001990600 0.000480100 0.003177500 -0.263432400 0.170387600 0.169918500
[244] -0.000122700 -0.004371600 -0.000698100 -0.000744200 0.000820700 0.004111790 0.001253500 -0.002934800 -0.126009400
[253] 0.001173460 0.147226840 0.000135520 -0.002085400 0.002699600 -0.001400900 0.153704800 -0.564675800 0.154666400
[262] -0.082779700 0.002436780 0.002527720 0.004176800 -0.006593700 -0.791322400 -0.167377000 -0.002184400 -0.118702900
[271] 0.156746300 0.000337400 -0.002860560 -0.002186560 0.145929200 0.001596380 -0.003894600 -0.002231880 -0.002186560
[280] 0.145929200 -1.822341500 -0.078086200 0.004151650 0.159115880 -0.002512200 -0.003975800 0.001559080 -0.018951700
[289] 0.000135520 0.002123700 -0.004943100 0.153481700 0.145929200 0.160969200 0.001616170 0.004562000 -0.004646700
[298] -0.004509590 -0.001045849 0.001708270 0.001609320 0.154854350 0.002261600 0.001708270 -0.211299500 0.003220560
[307] 0.138840400 -0.000158680 -0.000619500 -0.004174000 -0.003583280 -0.635329800 -0.001900200 0.153000820 0.153985000
[316] -0.003713660 0.001616170 -0.000324055 -0.003713660 -0.005417200 0.146747600 0.000480100 0.002772470 -0.003698400
[325] 0.002793600 0.002280240 0.004185700 -0.000757600 -0.386314000 -0.001975374 -0.285475100 -0.001668870 -0.004932030
[334] 0.154666400 0.001044320 -0.001713590 -0.009859200 0.004157200 -0.003191060 0.002905200 -0.002678100 0.153264400
[343] -0.108828500 0.157345840 -0.004566900 0.001620800 -0.002877600 -0.001465440 -0.333155000 -0.053347300 0.004510170
[352] -0.059981500 -0.003435300 -0.004152900 -0.000135500 -0.000124200 0.000995980 0.002681610 0.103076400 -0.002934800
[361] 0.003727570 0.149553900 -0.635329800 0.002592500 -0.004263200 0.145169120 -0.002789100 0.001271000 0.001253500
[370] 0.002451100 -0.006776500 0.171457350 -0.003851340 0.002462500 -0.002186560 0.000368700 0.002261600 -0.003346800
[379] -0.016315400 -0.000235100 0.004664500 -0.000172510 -0.003295000 -0.004126490 0.003509400 0.004176800 -0.003421000
[388] 0.000518930 0.002251400 0.002332320 -0.002076600 0.004151650 -0.082779700 0.149702490 -0.005000100 -0.001173660
[397] 0.158086900 -0.002566200 -0.001324300 -0.004203060 -0.000214000 0.003498700 0.159545146 -0.001606200 -0.004932900
[406] -2.323953400 -0.004977550 -0.014776000 0.002261600 0.156433300 -0.001575290 -0.001033900 -0.001861440 0.004196800
[415] -0.168886400 -0.004418500 -0.635329800 0.001637500 -0.000598700 -0.529989200 -0.004138700 0.134668600 -0.043973400
[424] 0.002073900 -0.002416800 0.000714600 0.004266400 -0.051348900 0.001117400 -0.004709500 -0.000518400 -0.002680100
[433] 0.148954450 -0.005205500 -4.465907600 -1.851426900 -0.003625700 -1.240912200 0.156607800 -0.001104760 0.002337900
[442] -0.004627220 -2.828105400 -0.000627900 -2.262139100 -0.003246500 -0.003371720 -0.000254400 -0.003212580 0.002337900
[451] -0.832275900 0.004345100 -0.193860900 0.004670950 -0.001712300 -0.003391730 0.159295700 -0.053210400 -0.210203000
[460] 0.197654500 -0.164377700 0.071131700 0.002771300 0.154232800 -0.004651500 -0.004405540 -0.003155590 0.157583000
[469] -0.109380200 -0.000395400 0.157403800 0.003768100 0.157324739 0.002630900 0.149733800 0.105043600 0.001105680
[478] 0.004222860 -0.003713660 -0.246890900 0.003220560 -0.064807500 -0.000046100 0.153153230 -0.003713660 0.001514700
[487] -0.001144200 0.003856600 -0.001975374 0.037099600 0.073876200 -0.003798150 -0.000380430 0.189541000 -0.000869200
[496] -0.004296180 -0.003759500 -2.085393500 0.155878400 -0.000025100 0.000824400 0.070190500 0.002337870 0.000658080
[505] -0.001406610 0.159357000 0.003991520 -0.000324055 -0.003083100 -0.605784700 -0.002411100 -0.003643440 -0.045039200
[514] -0.003921600 0.001640400 -0.203502900 0.004222860 -0.002464600 -0.003929610 0.178013500 0.152439345 -0.617680300
[523] 0.175322000 0.138931930 -0.203502900 0.004877160 0.158876580 -0.003350000 -0.002328800 0.105043600 -0.002787400
[532] -0.000017060 -0.000163590 0.152824400 0.001470940 -0.004169500 -0.000374400 0.148268000 0.001880918 0.155932200
[541] -0.004509590 -0.000206370 0.161538610 -0.475690800 0.000960470 0.003367700 -0.002952600 0.003469600 0.000820285
[550] 0.168392910 0.168381660 0.147288500 -0.000017060 -0.001243500 0.153442100 -0.000676700 -0.001835300 0.001877200
[559] -0.004418500 0.156607800 0.004754500 0.004326700 -0.359327600 -0.249202400 -0.003263300 0.168034000 0.003081000
[568] -0.004928000 0.152196840 0.151799150 -0.003758600 -0.000585300 0.001514700 0.148954450 -0.009807400 -0.055718800
[577] -0.000162700 0.158086900 -0.000101400 0.166970040 0.150311100 0.003845290 -0.020438900 0.000693000 -0.081417700
[586] 0.001324135 -0.002512200 -0.003698400 0.000087200 0.002905200 -0.001107700 0.138373840 0.004700200 0.154827120
[595] -0.050891800 0.004156240 0.164135660 -0.003798150 0.155105730 0.130948800 -0.004522600 0.001859200 0.002101200
[604] 0.149316140 0.138528400 0.156607800 -1.487526700 -0.001497700 -0.027455500 0.001749800 0.000794940 0.166970040
[613] -0.028139000 0.004952900 -0.716433100 -0.000367400 -0.002807900 0.142781610 0.001222830 -0.022046800 -0.001788800
[622] 0.173973250 -1.416047400 0.001044320 -0.406935800 -0.156967700 -0.122290800 -0.004517900 -0.333030900 -0.415903000
[631] 0.152196840 0.002280240 -0.000832900 -0.003435460
$groups
$based.on
[1] 634
$lower.limit
[1] -2.445097
$mean.diffs
[1] -0.1264553
$upper.limit
[1] 2.192186
$lines
lower.limit mean.diffs upper.limit
-2.4450968 -0.1264553 2.1921862
$CI.lines
lower.limit.ci.lower lower.limit.ci.upper mean.diff.ci.lower mean.diff.ci.upper upper.limit.ci.lower upper.limit.ci.upper
-2.60489536 -2.28529828 -0.21871505 -0.03419559 2.03238764 2.35198472
$two
[1] 1.96
$critical.diff
[1] 2.318641
ba_wfa <- PSFI_df_malnutrition %>%
filter(case_control == 1, !is.na(waz), !is.na(wfaz))
bland.altman.stats(ba_wfa$waz, ba_wfa$wfaz)
$means
[1] -3.116473850 -2.518940100 -0.531856555 0.220168515 -0.499548810 -1.199636600 -0.370679585 -3.248427500 -0.617832925 -3.575614600
[11] -2.137014350 -3.665235250 -0.414055920 -2.359610150 -1.880300400 -1.901312050 -5.516068000 -1.576399050 -0.180120075 -1.524588900
[21] 0.918708135 -2.708950600 1.153719300 -2.217808250 -6.054785700 -2.655139050 -3.593705550 0.151858445 2.718499400 -1.889994650
[31] -1.411957200 1.251132600 -7.656578350 -0.119144045 -4.091622250 0.380518125 0.241357015 -1.091128700 0.228198640 0.964102250
[41] -1.377591650 2.358227400 -1.682769100 -5.710771350 1.451046800 -0.780313625 -0.088078515 0.100272155 -4.890344850 -4.657062150
[51] -5.093215050 -1.108758900 -4.367212650 -3.596248900 -2.930396400 -3.044005050 1.219871700 0.461999115 0.150183420 -0.079325655
[61] 0.918914340 0.739850220 -3.870141900 -2.210916500 -0.008379305 -1.850973100 -2.203136300 -1.487959550 -4.858611700 -0.238673785
[71] -1.661142050 -1.300825150 0.548992480 -1.550641200 1.461874600 -2.312736300 -1.650860150 -1.380781950 -1.400412250 -1.559899400
[81] -0.020167951 -0.009465915 2.429252450 -2.521883950 -2.770610100 -2.611169750 -0.260904780 -2.391890350 -1.028390600 0.788953325
[91] 0.541587520 -1.492168300 -4.068876050 0.721278505 -3.560278900 -1.170166450 -0.450987675 -1.420555550 -1.202284500 -2.521430050
[101] -3.608457700 -2.110422650 -3.238140200 -2.478582750 -5.850438600 -0.850264955 -1.737381700 -2.549403550 -4.768705300 0.290742165
[111] 0.467450100 -2.457683400 0.231999505 -0.907120545 1.539493600 -1.628773100 -0.449585220 -3.812017900 -0.258950015 -3.123695450
[121] -3.975976450 -2.371564800 -0.069601894 -0.619954970 -2.632311900 -0.856610945 0.341705380 -0.178568785 -2.987438800 -0.259112735
[131] -2.210781550 -0.539055395 2.739756950 -5.331145050 2.612203650 -1.337309450 -3.501340500 -0.877905400 -3.021201250 0.018003906
[141] -0.061527448 1.043737500 0.530122145 2.008414650 -0.430444865 -0.838883175 -1.349970650 -0.634129945 -2.319073350 -2.515950100
[151] -1.108766250 -0.451210965 0.060640421 -3.668769050 -3.631757800 -0.246603780 -1.079121950 -3.144303500 -0.127024375 -0.299199680
[161] 1.668341600 -0.371249720 -2.029375200 -1.706133100 0.017043458 0.732344260 2.167700600 -1.228748800 -1.190597800 -1.977619750
[171] 3.278131500 -2.926208100 -2.837500600 0.448727255 -1.138411100 0.730475745 1.911720300 0.391747020 -3.719496450 -0.387653390
[181] -0.342618495 -1.849131450 -0.879276845 -1.677588800 -3.215758200 -2.682600100 -2.711924900 -1.499710200 1.451566450 -1.489541250
[191] -1.036792050 0.671663840 -4.054000150 -2.254390250 -2.404940800 -0.062554235 -3.621935750 -2.698748550 -1.221913750 0.412957060
[201] -0.880408530 -2.439422600 2.199590200 -1.782231300 -1.118095550 -1.260778050 -0.821956400 -0.426176930 -0.031519408 -2.879782150
[211] -1.280757200 -4.140901700 -0.839496090 -1.708052550 -3.243116750 -1.460013350 -2.738086350 -0.900499980 -3.418953950 1.130270850
[221] 0.047610804 0.729831805 -0.489728355 -0.566873615 -0.639563715 1.063155800 -1.530780550 -0.806841165 -8.812559000 -0.156707495
[231] -1.839359200 -3.595294650 -0.529336675 -2.558798800 -0.541148475 -1.030396600 -3.461170650 -1.059835500 -1.760776000 -5.609973200
[241] -0.769107380 -1.829670850 -4.154876000 -0.460009930 -7.161116500 -0.827550180 0.632633150 -1.340056200 -0.821252290 -0.307448280
[251] -0.779346240 -0.030106660 1.008727900 -0.617468505 -1.429971850 -2.901194400 -1.897622950 3.471180800 1.597462150 -5.385782750
[261] -3.777317150 -1.710466350 -1.191276300 -1.542825850 -3.724117250 -1.851062100 -1.549151750 -1.291094000 -1.606450950 1.585650300
[271] 1.522327150 0.801669950 -0.421245490 -0.487390035 3.692933100 3.127564350 -1.544430050 -2.610140250 0.158391685 -0.249900430
[281] -2.002525800 -0.450192740 1.350773100 -5.055116850 2.989662150 -0.754197750 0.458794215 -1.320394200 1.803357450 -4.337238650
[291] -0.368930310 -0.658462215 1.090802250 -3.512559900 -0.729626915 0.148266655 -1.561995100 -0.588452320 -0.187416785 -0.831656525
[301] -5.361693800 0.600626130 -2.750229950 -0.716428355 -2.862535400 0.041598764 -2.376738600 -0.083816369 0.483710295 -0.808317185
[311] 0.811367270 0.119911820 -2.928352300 -0.950135090 -1.747161200 -2.288194300 -2.578694250 0.859443210 -2.458694100 0.023099960
[321] -4.039680450 0.412933260 0.890721180 -2.220254050 0.249637485 -3.116356300 -3.549238550 -1.907977800 -1.498452550 -2.088483850
[331] -0.829471745 1.960492400 1.089070600 -3.158657250 -1.731109450 -3.256016950 -2.767368700 0.551003270 -0.691668245 -0.888421395
[341] -2.768028150 -3.376259600 0.300860550 -0.521385115 -2.618238250 -2.515407900 -0.290222155 -4.835332000 -0.219704800 -3.959506850
[351] -1.642418850 -0.820174550 -1.689715950 -1.209784150 -0.162950675 0.277824415 -0.565832290 -0.851183105 3.598751350 9.072235600
[361] -0.521494635 -2.580288200 0.049370086 -0.590049160 0.430286955 0.040797335 -1.017034950 -0.587675855 2.035786550 -1.241292100
[371] -5.096265150 -1.336614750 -4.602859100 0.580308505 1.187703600 -0.022127967 -4.428465150 2.050971650 -2.213248950 1.416628000
[381] -2.546249400 0.881341130 0.442014530 -1.772749600 0.960555655 0.339623880 0.540952195 0.412152275 -6.159179800 0.789241450
[391] -2.975373150 -1.070603800 -5.679970950 -1.517031500 -0.500882955 -1.442768050 0.186962120 -5.005421300 -2.080010950 1.541974900
[401] -2.770381950 -0.996896030 -0.221947320 3.764110250 -1.829429500 0.712743355 -3.686626250 -1.108022200 -4.671416650 -1.390113550
[411] -4.129297050 -1.409126200 -0.470586750 -1.799728650 1.201217850 -2.438406900 -2.002732650 1.297678950 -1.740388850 0.771758625
[421] 2.781292550 -0.009232445 -1.342399900 -1.039523450 -1.530213550 1.320687850 -1.330367550 -6.052032550 -2.895197100 -0.958523580
[431] -1.441842900 -1.949618600 1.620638800 -1.549517000 -0.839840425 1.080404000 -2.371121450 -0.100707580 -0.913151460 -6.477586600
[441] -1.748169800 0.736524490 -3.834731850 0.171812680 -2.508084400 0.769515525 -4.971036050 -0.303415335 0.338222530 0.007605564
[451] -2.770880600 0.569103570 -1.498121400 -5.157645100 -5.331661600 -0.378457815 -3.723643050 0.481787700 -0.409569370 0.356369695
[461] -1.142060400 0.112692965 0.250412345 -1.449186800 -4.099744800 0.678316200 -0.190166365 -1.675658850 -1.159693100 -0.022479127
[471] -1.148116650 -3.134650300 -0.445764170 -2.946214050 -0.859013135 0.419700210 -1.651613500 0.329005310 -0.777632400 -4.851798350
[481] -1.900498350 0.819786610 3.435924500 0.718939620 -1.391488850 0.980878940 -0.687725100 1.999449150 -2.247226850 0.028494449
[491] -1.681344250 -1.189059000 -0.609409740 -2.208798400 -0.961078955 -3.113369750 -0.879624905 -3.402750300 -1.301126700 -0.019816294
[501] 1.026875500 2.860641900 1.380579550 -2.200040550 2.009777200 -3.978455500 -2.599759150 -1.030135050 -3.136928000 -2.660416450
[511] 0.523474375 -0.649509620 -1.711853450 -4.207625450 -1.157692100 -1.437360950 1.695795500 -3.424169750 -1.077833000 0.024828300
[521] -0.281646845 -1.328150350 -0.659593835 -1.180522650 -1.509117250 -0.456834445 -0.789805400 1.494081900 1.370826250 -1.809963300
[531] 0.123567115 -1.696786800 0.368501645 -0.179370175 -1.098544250 0.228358515 0.919675760 -0.457454335 -2.931191750 -1.087012550
[541] -3.062612700 -2.696525900 -5.520356500 0.359550690 -0.818412010 -2.431679450 1.170457200 -3.515268700 -2.170511350 -1.049226350
[551] 0.130290945 -0.299644435 0.237098710 -1.329966500 -0.267049725 -1.703493450 -1.157323950 -0.749092460 -0.408019915 -0.799347605
[561] 0.232906885 -3.669187850 -0.058646886 -1.551697650 -6.074182200 -0.549455100 1.370259400 0.287345430 -0.238577505 -0.015384553
[571] 1.879072500 -1.403730900 -1.082711700 1.369403250 -4.696582250 -2.689090950 -0.318878685 -1.412206800 -0.163301510 -0.910073715
[581] -1.090343700 -1.747346050 -1.530527750 -0.640189955 0.360937305 -2.639288250 -1.089342450 -0.459727595 -1.709594000 -2.189123250
[591] -2.872572950 -1.238641400 -0.306212650 -2.309671050 1.344650000 1.440338600 -1.854720000 0.642469115 -0.141239220 -0.590229615
[601] -3.067723050 0.498513700 -3.028989450 -2.120337400 -3.792359700 0.620931710 -1.434687800 -0.681997745 -0.640126535 -0.866845905
[611] 0.500359000 -0.189768315 -0.600488710 -1.189853800 -2.340112000 -2.393474750 -1.550677900 0.369611380 1.320715200 -2.549793850
[621] -3.126263550 -1.837300350 1.399772700 -2.458979250 -3.133514000 -3.769080750 -0.095189686 1.152236600 -2.769023800 -2.966220150
[631] -2.338182000 -1.191461600 -0.516805240 -0.668263010 -1.561856250 -0.347942965 -1.829312300 1.242704700 2.219380950 -0.372650800
[641] -0.999552550 0.590237390 -0.649542435 0.110847190 -0.631771985 -3.365748100 -1.762826200 -2.831244850 -0.329124400 -1.647383700
[651] -1.280696800 1.860970800 -0.336776715 0.868136525 -0.607358480 0.018808737 0.521116715 -1.732145850 -0.138327315 -1.348063800
[661] -0.836565955 -0.977940105 0.468385920 2.628413000 -0.235135960 -0.660259025 2.071035900 0.677012230 1.389455100 1.019917700
[671] 2.839923650 3.210104800 -3.085439850 -3.930196100 -0.892046580 0.702990360 -0.420605800 -0.261096290 -2.897541950 -0.057454145
[681] -5.253086450 -0.055699686 -3.418928450 -0.090918811 0.909691825 -3.377824000 -1.747845400 0.348579560 0.437343180 -6.418149000
[691] 2.030777600 -2.309844150 -0.278167260 -2.266553050 -1.198931200 -0.801539685 0.278780580 -0.935947030 -0.120922215 -2.472311250
[701] -1.118067800 -0.140462025 -1.097714600 -1.929196850
$diffs
[1] -0.012947700 0.002119800 0.016286890 0.000337030 0.000902380 0.000726800 -0.001359170 -0.016855000 0.004334150 -0.051229200
[11] 0.005971300 -0.050470500 0.011888160 0.000779700 -0.000600800 -0.002624100 -0.492136000 0.007201900 -0.000240150 0.010822200
[21] -0.002583730 0.002098800 0.007438600 0.004383500 -0.769571400 0.009721900 -0.067411100 0.003716890 -0.003001200 0.000010700
[31] -0.003914400 0.002265200 -1.533156700 0.001711910 -0.163244500 0.001036250 0.002714030 -0.002257400 -0.003602720 0.008204500
[41] 0.004816700 -0.003545200 -0.005538200 -0.761542700 0.002093600 -0.000627250 0.003842969 0.000544310 -0.360689700 -0.414124300
[51] -0.366430100 0.002482200 -0.214425300 -0.032497800 -0.000792800 -0.008010100 -0.000256600 0.003998230 0.000366840 0.001348691
[61] -0.002171320 -0.000299560 -0.160283800 -0.001833000 0.003241391 -0.001946200 -0.006272600 0.004080900 -0.277223400 0.002652430
[71] -0.002284100 -0.001650300 -0.002015040 -0.001282400 0.003749200 -0.005472600 -0.001720300 -0.001563900 -0.000824500 0.000201200
[81] -0.000335903 0.001068171 -0.001495100 -0.003767900 -0.001220200 -0.002339500 -0.001809560 -0.003780700 0.003218800 -0.002093350
[91] 0.003175040 -0.004336600 -0.137752100 0.002557010 -0.060557800 -0.000332900 -0.001975350 -0.001111100 -0.004569000 -0.002860100
[101] -0.056915400 -0.000845300 -0.016280400 0.002834500 -0.580877200 -0.000529910 0.005236600 0.001192900 -0.277410600 0.001484330
[111] -0.005099800 0.004633200 0.003999010 0.005758910 -0.001012800 0.002453800 0.000829560 -0.104035800 0.002099970 -0.007390900
[121] -0.111952900 -0.003129600 0.000796213 0.000090060 -0.004623800 0.006778110 0.003410760 0.002862430 0.005122400 0.001774530
[131] -0.001563100 0.001889210 -0.000486100 -0.662290100 0.004407300 0.005381100 -0.042681000 0.004189200 -0.002402500 -0.003992189
[141] -0.003054897 0.007475000 0.000244290 -0.003170700 -0.000889730 0.002233650 0.000058700 -0.008259890 0.001853300 0.008099800
[151] 0.002467500 -0.002421930 0.001280843 -0.057538100 -0.063515600 0.006792440 0.001756100 -0.008607000 0.005951250 0.001600640
[161] -0.003316800 -0.002499440 0.001249600 0.007733800 -0.005913085 0.004688520 -0.004598800 0.002502400 -0.001195600 0.004760500
[171] -0.043737000 0.007583800 0.004998800 -0.002545490 0.003177800 0.000951490 0.003440600 0.003494040 -0.078992900 0.004693220
[181] -0.005236990 0.001737100 0.001446310 0.004822400 -0.011516400 -0.005200200 -0.003849800 0.000579600 0.003132900 0.000917500
[191] 0.006415900 0.003327680 -0.108000300 -0.008780500 -0.009881600 -0.005108471 -0.063871500 0.002502900 -0.003827500 0.005914120
[201] -0.000817060 0.001154800 -0.000819600 -0.004462600 0.003808900 -0.001556100 -0.003912800 0.007646140 -0.003038817 0.000435700
[211] -0.001514400 -0.181803400 0.001007820 0.003894900 -0.026233500 -0.000026700 0.003827300 -0.000999960 -0.037907900 0.000541700
[221] -0.004778392 -0.000336390 0.000543290 0.006252770 0.000872570 0.006311600 -0.001561100 0.006317670 -2.545118000 0.006585010
[231] 0.001281600 -0.050589300 0.001326650 0.002402400 -0.002296950 -0.000793200 -0.042341300 0.000329000 -0.001552000 -0.719946400
[241] 0.001785240 0.000658300 -0.189752000 -0.000019860 -1.222233000 0.004899640 0.005266300 -0.000112400 -0.002504580 0.005103440
[251] 0.001307520 -0.000213319 -0.002544200 0.005062990 0.000056300 -0.002388800 0.004754100 -0.037638400 -0.005075700 -0.571565500
[261] -0.094634300 -0.000932700 -0.002552600 -0.005651700 -0.088234500 -0.002124200 0.001696500 -0.002188000 0.007098100 -0.008699400
[271] 0.004654300 0.003339900 -0.002490980 0.005219930 -0.114133800 -0.004871300 -0.008860100 -0.000280500 -0.003216630 0.000199140
[281] -0.005051600 -0.000385480 0.001546200 -0.390233700 -0.000675700 0.011604500 -0.002411570 -0.000788400 0.006714900 -0.234477300
[291] 0.002139380 0.003075570 0.001604500 -0.045119800 0.000746170 -0.003466690 -0.003990200 0.003095360 0.005166430 -0.003313050
[301] -0.423387600 0.001252260 -0.000459900 0.007143290 -0.005070800 0.003197528 0.006522800 -0.007632738 0.007420590 0.003365630
[311] 0.002734540 -0.000176360 0.003295400 -0.000270180 0.005677600 0.003611400 0.002611500 -0.001113580 0.002611800 0.006199920
[321] -0.159360900 0.005866520 0.001442360 -0.000508100 -0.000725030 -0.012712600 -0.058477100 0.004044400 0.003094900 0.003032300
[331] 0.001056510 0.000984800 -0.001858800 0.002685500 -0.002218900 -0.012033900 0.005262600 0.002006540 -0.003336490 0.003157210
[341] 0.003943700 -0.032519200 0.001721100 -0.002770230 0.003523500 -0.010815800 -0.000444310 -0.270664000 0.000590400 -0.099013700
[351] -0.004837700 -0.000349100 0.000568100 0.000431700 -0.005901350 -0.004351170 0.008335420 -0.002366210 -0.062497300 -2.355528800
[361] -0.002989270 -0.000576400 -0.001259829 -0.000098320 0.000573910 0.001594669 0.005930100 0.004648290 -0.008426900 -0.002584200
[371] -0.452530300 0.006770500 -0.305718200 0.000617010 -0.004592800 -0.004255935 -0.236930300 0.001943300 -0.006497900 -0.006744000
[381] 0.007501200 0.002682260 0.004029060 -0.005499200 0.001111310 -0.000752240 0.001904390 0.004304550 -0.758359600 -0.001517100
[391] 0.009253700 -0.001207600 -0.519941900 0.005937000 -0.001765910 -0.005536100 -0.006075760 -0.330842600 -0.000021900 0.003949800
[401] -0.000763900 0.006207940 -0.003894640 -0.071779500 0.001141000 0.005486710 -0.053252500 0.003955600 -0.242833300 -0.000227100
[411] -0.138594100 0.001747600 -0.001173500 0.000542700 0.002435700 0.003186200 -0.005465300 -0.004642100 -0.000777700 0.003517250
[421] 0.002585100 0.001535110 0.015200200 0.000953100 -0.000427100 0.001375700 -0.000735100 -0.704065100 -0.010394200 0.002952840
[431] -0.003685800 0.000762800 0.001277600 0.000966000 0.000319150 0.000808000 -0.002242900 -0.001415160 -0.006302920 -1.015173200
[441] 0.003660400 -0.006951020 -0.109463700 0.003625360 0.003831200 -0.000968950 -0.502072100 -0.006830670 -0.003554940 -0.004788872
[451] -0.001761200 -0.001792860 0.003757200 -0.415290200 -0.563323200 0.003084370 -0.107286100 0.003575400 0.000861260 -0.007260610
[461] -0.024120800 0.005385930 0.000824690 0.001626400 -0.119489600 -0.003367600 -0.000332730 0.008682300 0.000613800 -0.004958253
[471] 0.003766700 -0.009300600 -0.011528340 0.007571900 0.001973730 -0.000599580 -0.003227000 -0.001989380 0.004735200 -0.383596700
[481] -0.000996700 -0.000426780 -0.028151000 -0.002120760 0.017022300 0.001757880 0.004549800 -0.001101700 -0.014453700 -0.003011101
[491] -0.002688500 0.001882000 0.001180520 0.002403200 -0.002157910 -0.006739500 0.000750190 -0.025500600 -0.002253400 0.000367411
[501] -0.006249000 0.001283800 0.001159100 -0.000081100 -0.000445600 -0.116911000 0.000481700 -0.000270100 -0.013856000 -0.000832900
[511] 0.006948750 0.000980760 -0.003706900 -0.255250900 0.004615800 0.005278100 -0.008409000 -0.048339500 0.004334000 -0.010343400
[521] -0.003293690 0.003699300 0.000812330 -0.001045300 0.001765500 0.006331110 0.000389200 0.008163800 0.001652500 0.000073400
[531] 0.007134230 0.006426400 -0.002996710 0.001259650 0.002911500 -0.003282970 -0.000648480 0.005091330 -0.002383500 0.005974900
[541] -0.005225400 0.006948200 -0.600713000 -0.000898620 0.003175980 -0.003358900 0.000914400 -0.030537400 -0.001022700 0.001547300
[551] 0.000581890 0.000711130 -0.005802580 0.000067000 0.005900550 0.013013100 0.005352100 0.001815080 0.003960170 0.001304790
[561] 0.005813770 -0.058375700 0.002706227 -0.003395300 -0.928364400 0.001089800 0.000518800 -0.005309140 0.002844990 0.009230894
[571] -0.001855000 0.012538200 -0.005423400 -0.001193500 -0.253164500 0.021818100 0.002242630 -0.004413600 0.013396980 -0.000147430
[581] -0.000687400 0.005307900 -0.001055500 -0.000379910 0.001874610 0.001423500 -0.018684900 0.000544810 0.000812000 0.001753500
[591] -0.005145900 0.002717200 0.007574700 0.000657900 -0.010700000 0.000677200 -0.009440000 0.004938230 -0.002478440 -0.000459230
[601] 0.004553900 -0.002972600 0.002021100 -0.000674800 -0.084719400 0.001863420 -0.009375600 -0.003995490 -0.000253070 0.006308190
[611] 0.000718000 0.000463370 -0.000977420 0.000292400 -0.000224000 -0.006949500 -0.001355800 -0.000777240 0.001430400 0.000412300
[621] -0.012527100 0.005399300 -0.000454600 0.002041500 -0.007028000 -0.058161500 0.009620628 0.004473200 0.001952400 0.007559700
[631] 0.003636000 -0.002923200 0.006389520 0.003473980 -0.003712500 0.004114070 0.001375400 0.005409400 -0.001238100 -0.005301600
[641] 0.000894900 0.000474780 0.000915130 0.001694380 -0.003543970 -0.031496200 0.014347600 -0.002489700 0.001751200 0.005232600
[651] -0.001393600 0.001941600 0.006446570 -0.003726950 0.005283040 -0.002382525 0.002233430 -0.004291700 0.003345370 0.003872400
[661] 0.006868090 0.004119790 -0.003228160 -0.003174000 0.009728080 -0.000518050 0.002071800 -0.005975540 -0.001089800 -0.000164600
[671] -0.000152700 -0.019790400 -0.010879700 -0.100392200 -0.004093160 0.005980720 -0.001211600 -0.002192580 0.004916100 0.005091709
[681] -0.566172900 0.008600627 -0.037856900 -0.001837622 -0.000616350 -0.035648000 0.004309200 -0.002840880 -0.005313640 -0.836298000
[691] 0.001555200 0.000311700 0.003665480 0.006893900 0.002137600 -0.003079370 -0.002438840 0.008105940 -0.001844430 -0.004622500
[701] 0.003864400 -0.000924050 0.004570800 0.001606300
$groups
$based.on
[1] 704
$lower.limit
[1] -0.4137443
$mean.diffs
[1] -0.04135858
$upper.limit
[1] 0.3310272
$lines
lower.limit mean.diffs upper.limit
-0.41374431 -0.04135858 0.33102715
$CI.lines
lower.limit.ci.lower lower.limit.ci.upper mean.diff.ci.lower mean.diff.ci.upper upper.limit.ci.lower upper.limit.ci.upper
-0.43809480 -0.38939382 -0.05541734 -0.02729982 0.30667666 0.35537764
$two
[1] 1.96
$critical.diff
[1] 0.3723857
ba_baz <- PSFI_df_malnutrition %>%
filter(case_control == 1 & age_years >=2, !is.na(bmiz), !is.na(baz))
bland.altman.stats(ba_baz$bmiz, ba_baz$baz)
$means
[1] -0.289481450 -2.857820100 3.237762800 -1.549559100 -1.140396900 -1.378233400 -0.310858860 3.576075150 -2.878530350
[10] -2.377455300 -3.757117000 -2.021557200 12.190738050 3.086471700 -2.128653700 -1.471786150 -0.041549705 0.711878755
[19] -5.896741200 -1.861275350 -0.500053375 -4.510908900 -2.050357150 -0.039737210 -0.649289085 -0.350493480 0.558736325
[28] -2.390777300 -1.650806500 -5.298624300 -4.493980800 -4.005476050 -11.351515000 2.130923950 -1.730422200 -1.372297050
[37] -0.460091215 -3.557517900 -2.781554950 -3.871787250 -2.139678300 -2.160076200 5.178409200 -2.120038100 -1.440610600
[46] 0.171814390 -4.207287000 2.481151550 -0.588119880 -3.009176950 -13.739497500 21.857132500 -0.328512750 11.019317000
[55] -2.320858400 -1.111482650 0.647557450 0.190391020 1.970207400 2.929363350 -4.626877900 2.931056600 -1.010389400
[64] 0.990483490 2.438884950 0.518724155 1.568883650 -4.548962200 -2.108619150 2.492128950 -1.870731700 5.294967450
[73] 0.312026650 1.559213150 0.572040025 -2.358298700 -0.749568760 -1.722402100 1.757847250 1.028420650 -0.420841550
[82] -2.758797750 -0.547973715 -0.041629935 -0.709395510 0.289532635 -5.509194950 3.043515700 2.472605700 -4.731819650
[91] 0.061847886 -2.181957350 -4.361164100 -0.177833310 1.018377750 1.130056800 -0.492472080 -15.477679500 -3.644266050
[100] -2.820847650 -0.068472654 -1.187452950 -2.011588100 1.388102250 -2.107662500 -3.583479200 -2.072532450 2.710963700
[109] -3.573556800 -0.641043340 -0.680048045 -0.020773979 -1.928410200 -2.131998700 -2.097474750 1.691867400 4.895192150
[118] 1.018064250 -3.320991200 -3.682266050 2.891117150 0.032023146 -0.351877470 -2.938089950 -3.071259900 -1.382451500
[127] 1.449634750 -1.360207450 -2.481342550 -1.931699050 -1.502191500 1.460743350 1.028388050 3.468621850 -1.280923100
[136] 0.188867445 0.531388685 -2.038334250 1.478874150 -3.575597050 -1.312371700 -1.368837700 -1.051020550 -1.417647700
[145] -0.289346280 -1.051265450 -0.289250585 -5.588076400 1.070799750 0.611053160 -0.529572085 -2.757784850 -1.050466250
[154] -1.038619400 -2.728733050 0.201616235 -0.819282685 -1.192398500 0.551429745 1.471839450 -19.572919000 -0.032119260
[163] -2.218806600 -0.509211930 -0.451058185 -16.601887500 -1.390988650 -0.419598630 -0.278126480 2.711381200 -8.153973550
[172] 0.890804300 -2.589047350 1.268954300 3.231962300 0.699938960 1.747984950 -0.980675240 1.229106950 -1.237753750
[181] -0.238768590 -0.190218250 8.673813300 0.472368865 -3.254289400 -2.099226500 2.600417550 -3.282628550 -4.800367800
[190] -2.161958900 -16.812655000 -1.258189900 -3.865866200 1.362366300 -0.278241185 3.154719200 -0.268786095 5.386812550
[199] -2.610065150 10.386390450 -0.911921160 0.298396535 4.259224350 1.418027550 0.748988600 -1.301140750 -4.955695050
[208] 0.510107790 -2.628130500 -5.132770350 -4.387832650 -1.841648100 -2.888080450 0.830486155 -2.050496500 -1.679653500
[217] 1.951553700 -1.407131650 2.279658350 -0.002395475 1.059851400 -4.181888050 -0.489113670 -0.100233060 -0.560416190
[226] -1.902259400 -4.617390050 -3.041435150 -0.912052765 0.181642605 -1.722112650 1.298295600 -5.347852350 0.549203600
[235] -2.190874550 2.489954800 -1.002207050 1.598766650 2.868578350 -0.111448585 -2.220886350 -0.322156670 1.379711400
[244] -1.290523750 0.072097663 -1.048448050 1.932317150 -1.602043300 -5.837745900 -4.226083250 -0.110019850 -2.082136650
[253] 0.990152415 -2.698421950 -4.260710550 -0.768966090 -6.628176750 -0.061843729 -8.121774150 -0.609234325 -1.919813700
[262] -2.042311950 1.302511200 -3.318993850 -6.276434600 1.787565200 1.088479600 -1.058804700 -1.581467300 -0.899537515
[271] -1.070103750 1.979451150 1.128782200 1.871999100 -3.335490750 -0.889992510 1.652269750 -3.472320400 -0.531628860
[280] -0.021059774 -2.058914800 0.699673985 0.300258630 0.299897890 0.360833100 2.111399100 2.211851100 0.199892745
[289] 1.961603500 2.291010300 2.981617550 -3.435343100 -0.408877240 -0.990246350 -6.614984550 0.350791995 -6.551284700
[298] -0.808432280 -6.310351600 -0.559475035 -1.148099100
$diffs
[1] 0.001037100 0.004359800 -0.084474400 0.000881800 -0.000793800 0.003533200 -0.001717720 -0.167849700 0.002939300
[10] 0.005089400 -0.074234000 -0.003114400 -6.058523900 -0.027056600 0.002692600 -0.003572300 -0.003099411 0.003757510
[19] -0.673482400 -0.002550700 -0.000106750 -0.321817800 -0.000714300 0.000525580 0.001421830 -0.000986960 -0.002527350
[28] -0.001554600 -0.001613000 -0.557248600 -0.387961600 -0.190952100 -4.903030000 0.001847900 -0.000844400 -0.004594100
[37] -0.000182430 -0.075035800 -0.003109900 -0.083574500 0.000643400 -0.000152400 -0.503181600 -0.000076200 -0.001221200
[46] 0.003628780 -0.274574000 0.002303100 0.003760240 0.001646100 -7.738995000 -21.625735000 0.002974500 -11.781366000
[55] -0.001716800 -0.002965300 -0.004885100 0.000782040 0.000414800 -0.001273300 -0.273755800 0.002113200 -0.000778800
[64] 0.000966980 -0.002230100 -0.002551690 -0.002232700 -0.197924400 0.002761700 0.004257900 -0.001463400 -1.110065100
[73] 0.004053300 -0.001573700 0.004080050 0.003402600 0.000862480 -0.004804200 -0.004305500 -0.003158700 -0.001683100
[82] 0.002404500 0.004052570 -0.003259870 0.001208980 -0.000934730 -0.658389900 -0.012968600 0.005211400 -0.303639300
[91] 0.003695773 -0.003914700 -0.182328200 0.004333380 -0.003244500 0.000113600 -0.004944160 -8.675359000 -0.088532100
[100] -0.001695300 0.003054693 0.005094100 -0.003176200 -0.003795500 0.004675000 -0.066958400 -0.005064900 0.001927400
[109] -0.047113600 -0.002086680 -0.000096090 -0.001547958 0.003179600 -0.003997400 0.005050500 0.003734800 -0.629615700
[118] -0.003871500 -0.041982400 -0.064532100 0.002234300 0.004046292 -0.003754940 0.003820100 -0.002519800 -0.004903000
[127] -0.000730500 -0.000414900 -0.002685100 -0.003398100 -0.004383000 0.001486700 -0.003223900 -0.042756300 -0.001846200
[136] -0.002265110 0.002777370 0.003331500 -0.002251700 -0.091194100 -0.004743400 0.002324600 -0.002041100 0.004704600
[145] 0.001307440 -0.002530900 0.001498830 -0.556152800 0.001599500 0.002106320 0.000855830 0.004430300 -0.000932500
[154] 0.002761200 0.002533900 0.003232470 0.001434630 -0.004797000 0.002859490 0.003678900 -14.025838000 -0.004238521
[163] 0.002386800 0.001576140 -0.002116370 -11.203775000 -0.001977300 0.000802740 0.003747040 0.002762400 -2.967947100
[172] 0.001608600 0.001905300 -0.002091400 -0.016075400 -0.000122080 -0.004030100 -0.001350480 -0.001786100 0.004492500
[181] 0.002462820 -0.000436500 -2.952373400 0.004737730 -0.028578800 0.001547000 0.000835100 -0.025257100 -0.300735600
[190] -0.003917800 -11.245310000 0.003620200 -0.151732400 0.004732600 0.003517630 -0.010561600 0.002427810 -1.626374900
[199] -0.000130300 -3.187219100 -0.003842320 -0.003206930 -0.241551300 -0.003944900 -0.002022800 -0.002281500 -0.351390100
[208] 0.000215580 0.003739000 -0.565540700 -0.195665300 -0.003296200 0.003839100 0.000972310 -0.000993000 0.000693000
[217] 0.003107400 0.005736700 -0.000683300 -0.004790949 -0.000297200 -0.143776100 0.001772660 -0.000466120 -0.000832380
[226] -0.004518800 -0.214780100 -0.002870300 -0.004105530 0.003285210 -0.004225300 -0.003408800 -0.795704700 -0.001592800
[235] -0.001749100 -0.000090400 -0.004414100 -0.002466700 -0.002843300 -0.002897170 -0.001772700 -0.004313340 -0.000577200
[244] -0.001047500 0.004195325 0.003103900 0.004634300 -0.004086600 -0.715491800 -0.152166500 -0.000039700 -0.004273300
[253] 0.000304830 0.003156100 -0.241421100 0.002067820 -0.936353500 -0.003687459 -2.403548300 0.001531350 0.000372600
[262] -0.004623900 0.005022400 -0.037987700 -0.752869200 -0.004869600 -0.003040800 0.002390600 -0.002934600 0.000924970
[271] -0.000207500 -0.001097700 -0.002435600 0.003998200 -0.050981500 0.000014980 0.004539500 -0.044640800 -0.003257720
[280] -0.002119548 0.002170400 -0.000652030 0.000517260 -0.000204220 0.001666200 0.002798200 0.003702200 -0.000214510
[289] 0.003207000 0.002020600 0.003235100 -0.070686200 0.002245520 -0.000492700 -0.989969100 0.001583990 -0.962569400
[298] 0.003135440 -1.160703200 0.001049930 0.003801800
$groups
$based.on
[1] 301
$lower.limit
[1] -4.414332
$mean.diffs
[1] -0.4230157
$upper.limit
[1] 3.568301
$lines
lower.limit mean.diffs upper.limit
-4.4143320 -0.4230157 3.5683007
$CI.lines
lower.limit.ci.lower lower.limit.ci.upper mean.diff.ci.lower mean.diff.ci.upper upper.limit.ci.lower upper.limit.ci.upper
-4.8144067 -4.0142572 -0.6539989 -0.1920324 3.1682259 3.9683754
$two
[1] 1.96
$critical.diff
[1] 3.991316
# MAKE A TABLE OF THE CASES WHERE THE DIFFERENCE BETWEEN OUR Z-SCORES IS HIGHER THAN 0.5
high_diff_rows <- PSFI_df_malnutrition %>%
filter(case_control == 1) %>%
mutate(
diff_wfh = whz - wfhz,
diff_wfa = waz - wfaz,
diff_baz = ifelse(
age_years >= 2,
bmiz - baz,
NA
)
) %>%
filter(
abs(diff_wfh) > 0.5 |
abs(diff_wfa) > 0.5 |
(age_years >= 2 & abs(diff_baz) > 0.5)
) %>%
select(
record_id, age_years, age_months, sex, ht, wt,
whz, wfhz, diff_wfh,
waz, wfaz, diff_wfa,
bmiz, baz, diff_baz
) %>%
arrange(
desc(
pmax(
abs(diff_wfh),
abs(diff_wfa),
abs(diff_baz),
na.rm = TRUE
)
)
)
high_diff_rows
# ASSESS HOW MANY OF THE CASES WITH Z-SCORE DIFFERENCES OVER 0.5 HAVE A Z-SCORE OVER 3
high_diff_rows %>%
summarise(
n_total = n(),
n_any_z_over_5 = sum(
abs(whz) > 5 |
abs(wfhz) > 5 |
abs(waz) > 5 |
abs(wfaz) > 5 |
abs(bmiz) > 5 |
abs(baz) > 5,
na.rm = TRUE
),
percent_any_z_over_5 = 100 * n_any_z_over_5 / n_total
)
write.xlsx(PSFI_df_malnutrition, file = "PSFI_final_malnutrition.xlsx")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIDEuIERlZmluaW5nIG1hbG51dHJpdGlvbg0KDQojIyAxLjEuIFByZXJlcXVpc2l0ZXMNCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoenNjb3JlcikNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSAobHVicmlkYXRlKQ0KbGlicmFyeSAoZ2dwbG90MikNCmxpYnJhcnkgKHJtYXJrZG93bikNCmxpYnJhcnkob3Blbnhsc3gpDQpsaWJyYXJ5KHdyaXRleGwpDQpsaWJyYXJ5KHJzdGF0aXgpDQpsaWJyYXJ5KGVlcHRvb2xzKQ0KbGlicmFyeShnZ3B1YnIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoQmxhbmRBbHRtYW5MZWgpDQpgYGANCg0KYGBge3J9DQpQU0ZJX2RmX21hbG51dHJpdGlvbiA8LSByZWFkX3hsc3goIkJlbl9jdXRfNF8yNy54bHN4IikNCmBgYA0KDQpgYGB7cn0NClN5cy5zZXRlbnYoTEFOR1VBR0UgPSAiZW4iKQ0KYGBgDQoNCiMjIDEuMi4gQW50aHJvcHJvbWV0cmljIGFuYWx5c2lzDQoNCmBgYHtyfQ0KIyBDUkVBVEUgTkVXIENBVEVHT1JZIFRIQVQgQ0FMQ1VMQVRFUyBBR0UgSU4gWUVBUlMgQkFTRUQgT04gQUdFIElOIERBWVMNClBTRklfZGZfbWFsbnV0cml0aW9uIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBtdXRhdGUoYWdlX3llYXJzID0gYWdlX2RheXNfZXhhY3QgLyAzNjUuMjUpDQoNCnN1bW1hcnkoUFNGSV9kZl9tYWxudXRyaXRpb24kYWdlX3llYXJzKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEEgU1VNTUFSWSBPRiBDQVNFUyAoaHQ9aGVpZ2h0LCB3dD13ZWlnaHQsIGFnZV95ZWFycz0gYWdlIGluIHllYXJzLCBtdWFjKQ0KUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIHNlbGVjdChodCwgd3QsIGFnZV95ZWFycywgbXVhYykgJT4lDQogIHN1bW1hcnkoKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEEgSElTVE9HUkFNIEFORCBCT1hQTE9UIE9GIEhFSUdIVCAoQ0FTRVMpDQpsYXlvdXQobWF0ID0gbWF0cml4KGMoMSwyKSwyLDEsIGJ5cm93PVRSVUUpLCAgaGVpZ2h0ID0gYygxLDgpKQ0KcGFyKG1hcj1jKDAsIDMuMSwgMS4xLCAyLjEpKQ0KYm94cGxvdChQU0ZJX2RmX21hbG51dHJpdGlvbiRodFtQU0ZJX2RmX21hbG51dHJpdGlvbiRjYXNlX2NvbnRyb2wgPT0gMV0gLCBob3Jpem9udGFsPVRSVUUgLCB5bGltPWMoMCwyMDApLCB4YXh0PSJuIiAsIGNvbD1yZ2IoMC44LDAuOCwwLDAuNSkgLCBmcmFtZT1GKQ0KcGFyKG1hcj1jKDQsIDMuMSwgMS4xLCAyLjEpKQ0KaGlzdChQU0ZJX2RmX21hbG51dHJpdGlvbiRodFtQU0ZJX2RmX21hbG51dHJpdGlvbiRjYXNlX2NvbnRyb2wgPT0gMV0NCiAgICAgLCBicmVha3M9NDAgLCBjb2w9cmdiKDEsMC44LDAuOCwxKSAsIGJvcmRlcj1GICwgbWFpbj0iIiAsIHhsYWI9IkhlaWdodCAoY20pIiwgeGxpbT1jKDAsMjAwKSkNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFUyBBIEhJU1RPR1JBTSBBTkQgQk9YUExPVCBPRiBXRUlHSFQgKENBU0VTKQ0KbGF5b3V0KG1hdCA9IG1hdHJpeChjKDEsMiksMiwxLCBieXJvdz1UUlVFKSwgIGhlaWdodCA9IGMoMSw4KSkNCiBwYXIobWFyPWMoMCwgMy4xLCAxLjEsIDIuMSkpDQpib3hwbG90KFBTRklfZGZfbWFsbnV0cml0aW9uJHd0W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXSAsIGhvcml6b250YWw9VFJVRSAsIHlsaW09YygwLDc1KSwgeGF4dD0ibiIgLCBjb2w9cmdiKDAuOCwwLjgsMCwwLjUpICwgZnJhbWU9RikNCnBhcihtYXI9Yyg0LCAzLjEsIDEuMSwgMi4xKSkNCmhpc3QoUFNGSV9kZl9tYWxudXRyaXRpb24kd3RbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdDQogICAgICwgYnJlYWtzPTQwICwgY29sPXJnYigxLDAuOCwwLjgsMSkgLCBib3JkZXI9RiAsIG1haW49IiIgLCB4bGFiPSJXZWlnaHQgKGtnKSIsIHhsaW09YygwLDc1KSkNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFUyBBIEhJU1RPR1JBTSBBTkQgQk9YUExPVCBPRiBNVUFDIChDQVNFUykNCiMjIEJMVUUgTElORSBPVVRMSU5FUyBNT0RFUkFURSBNQUxOVVRSSVRJT04gKDEyLjVjbSkNCiMjIFJFRCBMSU5FIE9VVExJTkVTIFNFVkVSRSBNQUxOVVRSSVRJT04gKDExLjVjbSkNCmxheW91dChtYXQgPSBtYXRyaXgoYygxLDIpLDIsMSwgYnlyb3c9VFJVRSksICBoZWlnaHQgPSBjKDEsOCkpDQpwYXIobWFyPWMoMCwgMy4xLCAxLjEsIDIuMSkpDQpib3hwbG90KFBTRklfZGZfbWFsbnV0cml0aW9uJG11YWNbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdICwgaG9yaXpvbnRhbD1UUlVFICwgeWxpbT1jKDUsMzApLCB4YXh0PSJuIiAsIGNvbD1yZ2IoMC44LDAuOCwwLDAuNSkgLCBmcmFtZT1GKQ0KcGFyKG1hcj1jKDQsIDMuMSwgMS4xLCAyLjEpKQ0KaGlzdChQU0ZJX2RmX21hbG51dHJpdGlvbiRtdWFjW1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXQ0KICAgICAsIGJyZWFrcz0yMCAsIGNvbD1yZ2IoMSwwLjgsMC44LDEpICwgYm9yZGVyPUYgLCBtYWluPSIiICwgeGxhYj0iTWlkLXVwcGVyIGFybSBjaXJjdW1mZXJlbmNlIChjbSkiLCB4bGltPWMoNSwzMCkpDQphYmxpbmUodiA9IDExLjUsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgICMgc2V2ZXJlDQphYmxpbmUodiA9IDEyLjUsIGNvbCA9ICJibHVlIiwgbHdkID0gMiwgbHR5ID0gMikgICMgbW9kZXJhdGUNCmBgYA0KDQpgYGB7cn0NCiMgSElTVE9HUkFNIEFORCBCT1hQTE9UIE9GIEFHRSAoQ0FTRVMpDQpsYXlvdXQobWF0ID0gbWF0cml4KGMoMSwyKSwyLDEsIGJ5cm93PVRSVUUpLCAgaGVpZ2h0ID0gYygxLDgpKQ0KIHBhcihtYXI9YygwLCAzLjEsIDEuMSwgMi4xKSkNCmJveHBsb3QoUFNGSV9kZl9tYWxudXRyaXRpb24kYWdlX3llYXJzW1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXSAsIGhvcml6b250YWw9VFJVRSAsIHlsaW09YygwLDE1KSwgeGF4dD0ibiIgLCBjb2w9cmdiKDAuOCwwLjgsMCwwLjUpICwgZnJhbWU9RikNCnBhcihtYXI9Yyg0LCAzLjEsIDEuMSwgMi4xKSkNCmhpc3QoUFNGSV9kZl9tYWxudXRyaXRpb24kYWdlX3llYXJzW1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXSwgYnJlYWtzPTQwICwgY29sPXJnYigxLDAuOCwwLjgsMSkgLCBib3JkZXI9RiAsIG1haW49IiIgLCB4bGFiPSJBZ2UgKHllYXJzKSIsIHhsaW09YygwLDE1KSkNCmBgYA0KDQojIyAxLjMuIFotc2NvcmVyDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEEgTkVXIENBVEVHT1JZIERFRklOSU5HIFNFWCBBUyAxLzIsIElOU1RFQUQgT0YgMC8xIChORUNFU1NBUlkgRk9SIFpTQ09SRVIgUEFDS0FHRSkNClBTRklfZGZfbWFsbnV0cml0aW9uIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBtdXRhdGUoc2V4X3dobyA9IGlmX2Vsc2Uoc2V4ID09IDEsIDEsIDIpKQ0KDQpzdW1tYXJ5KFBTRklfZGZfbWFsbnV0cml0aW9uJHNleF93aG8pDQpgYGANCg0KYGBge3J9DQojIENSRUFURVMgQSBORVcgQ0FURUdPUlkgQ0FMQ1VMQVRJTkcgQUdFIElOIE1PTlRIUyBCQVNFRCBPTiBBR0UgSU4gREFZUw0KUFNGSV9kZl9tYWxudXRyaXRpb24gPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIG11dGF0ZShhZ2VfbW9udGhzID0gYWdlX2RheXNfZXhhY3QgLyAzMC40Mzc1KQ0KDQpzdW1tYXJ5KFBTRklfZGZfbWFsbnV0cml0aW9uJGFnZV9tb250aHMpDQpgYGANCg0KYGBge3J9DQojIENSRUFURVMgQSBORVcgQ0FURUdPUlkgKEFHRTw2TSA9IDAsIEFHRSA2TSAtIDVKID0gMSwgQUdFID4gNUogPSAyKQ0KUFNGSV9kZl9tYWxudXRyaXRpb24gPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIG11dGF0ZSgNCiAgICBhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oDQogICAgICBhZ2VfbW9udGhzIDwgNiB+IDBMLA0KICAgICAgYWdlX21vbnRocyA+PSA2ICYgYWdlX3llYXJzIDwgNSB+IDFMLA0KICAgICAgYWdlX3llYXJzID49IDUgfiAyTCwNCiAgICAgIFRSVUUgfiBOQV9pbnRlZ2VyXw0KICAgICkNCiAgKQ0KDQpgYGANCg0KYGBge3J9DQojIFpTQ09SRVIgUEFDS0FHRSBDQUxDVUxBVEVTIFpTQ09SRSBPRiBXRUlHSFQgRk9SIExFTkdUSCAod2ZseiksIFdFSUdIVCBGT1IgQUdFICh3ZmF6KSwgSEVJR0hUIEZPUiBBR0UgKGhmYXopLCBXRUlHSFQgRk9SIEhFSUdIVCAod2ZoeiksIEJNSSBGT1IgQUdFIChiYXopDQpQU0ZJX2RmX21hbG51dHJpdGlvbiA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgbXV0YXRlKA0KICAgIHdmbHogPSBhZGRXR1NSKA0KICAgICAgZGF0YSA9IC4sDQogICAgICBzZXggPSAic2V4X3dobyIsDQogICAgICBmaXJzdFBhcnQgPSAid3QiLA0KICAgICAgc2Vjb25kUGFydCA9ICJodCIsDQogICAgICBpbmRleCA9ICJ3ZmwiDQogICAgKSR3Zmx6LA0KICAgIA0KICAgIHdmYXogPSBhZGRXR1NSKA0KICAgICAgZGF0YSA9IC4sDQogICAgICBzZXggPSAic2V4X3dobyIsDQogICAgICBmaXJzdFBhcnQgPSAid3QiLA0KICAgICAgc2Vjb25kUGFydCA9ICJhZ2VfZGF5c19leGFjdCIsDQogICAgICBpbmRleCA9ICJ3ZmEiDQogICAgKSR3ZmF6LA0KICAgIA0KICAgIGhmYXogPSBhZGRXR1NSKA0KICAgICAgZGF0YSA9IC4sDQogICAgICBzZXggPSAic2V4X3dobyIsDQogICAgICBmaXJzdFBhcnQgPSAiaHQiLA0KICAgICAgc2Vjb25kUGFydCA9ICJhZ2VfZGF5c19leGFjdCIsDQogICAgICBpbmRleCA9ICJoZmEiDQogICAgKSRoZmF6LA0KDQogICAgd2ZoeiA9IGFkZFdHU1IoDQogICAgICBkYXRhID0gLiwNCiAgICAgIHNleCA9ICJzZXhfd2hvIiwNCiAgICAgIGZpcnN0UGFydCA9ICJ3dCIsDQogICAgICBzZWNvbmRQYXJ0ID0gImh0IiwNCiAgICAgIGluZGV4ID0gIndmaCINCiAgICApJHdmaHosDQogICAgDQogICAgYmF6ID0gYWRkV0dTUigNCiAgICAgIGRhdGEgPSAuLA0KICAgICAgc2V4ID0gInNleF93aG8iLA0KICAgICAgZmlyc3RQYXJ0ID0gInd0IiwNCiAgICAgIHNlY29uZFBhcnQgPSAiaHQiLA0KICAgICAgdGhpcmRQYXJ0ID0gImFnZV9kYXlzX2V4YWN0IiwNCiAgICAgIGluZGV4ID0gImJmYSINCiAgICApJGJmYXoNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KIyBBU1NJR05TIFotU0NPUkUgVE8gTVVBQyBCQVNFRCBPTiBUSEUgMTEuNSAmIDEyLjVDTSBMSU1JVFMsIFRISVMgSVMgQSBQUk9YWSBBUyBMQVRFUiBBIFotU0NPUkUgT0YgMCBXSUxMIEVRVUFMIE5PIE1BTE5VVFJJVElPTiwgPC0yIFdJTEwgRVFVQUwgTU9ERVJBVEUgTUFMTlVUUklUSU9OIEFORCA8LTMgV0lMTCBFUVVBTCBTRVZFUkUgTUFMTlVUUklUSU9ODQpQU0ZJX2RmX21hbG51dHJpdGlvbiA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgbXV0YXRlKA0KICAgIG11YWN6ID0gY2FzZV93aGVuKA0KICAgICAgbXVhYyA+PSAxMi41IH4gMCwNCiAgICAgIG11YWMgPj0gMTEuNSAmIG11YWMgPCAxMi41IH4gLTIuNSwNCiAgICAgIG11YWMgPCAxMS41IH4gLTQsDQogICAgICBUUlVFIH4gTkFfcmVhbF8NCiAgICApDQogICkNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFIE1BTE5VVFJJVElPTiBaU0NPUkUgQkFTRUQgT04gTUVSR0VEIFdGSExaLCBCQVosIE1VQUNaICh0byBiZSBkZWZpbmVkIGxhdGVyKQ0KUFNGSV9kZl9tYWxudXRyaXRpb24gPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIG11dGF0ZSgNCiAgICB6c2NvcmVfdW5pZmllZCA9IGNhc2Vfd2hlbigNCiAgICAgIGFnZV9ncm91cCA9PSAxICYgaHQgPj0gNDUgJiBodCA8IDY1IH4gd2ZseiwNCiAgICAgIGFnZV9ncm91cCA9PSAxICYgaHQgPj0gNjUgJiBodCA8IDEyMCB+IHdmaHosDQogICAgICBhZ2VfZ3JvdXAgPT0gMSAmIChodCA8IDQ1IHwgaHQgPj0gMTIwIHwgaXMubmEoaHQpKSB+IG11YWN6LA0KICAgICAgYWdlX2dyb3VwID09IDIgfiBiYXosDQogICAgICBUUlVFIH4gTkFfcmVhbF8NCiAgICApDQogICkNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFIE1BTE5VVFJJVElPTiBDQVRFR09SWSBCQVNFRCBPTiBQUkVWSU9VUyBaIFNDT1JFDQpQU0ZJX2RmX21hbG51dHJpdGlvbiA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgbXV0YXRlKA0KICAgIG1hbG51dHJpdGlvbiA9IGNhc2Vfd2hlbigNCiAgaXMubmEoenNjb3JlX3VuaWZpZWQpIH4gTkFfaW50ZWdlcl8sDQogIHpzY29yZV91bmlmaWVkIDwgLTMgfiAyTCwNCiAgenNjb3JlX3VuaWZpZWQgPj0gLTMgJiB6c2NvcmVfdW5pZmllZCA8IC0yIH4gMUwsDQogIFRSVUUgfiAwTA0KICAgICkNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KIyBBREQgQSBNQUxOVVRSSVRJT04gU09VUkNFIENBVEVHT1JZIFNPIFdFIEtOT1cgV0hJQ0ggQU5USFJPUE9NRVRSSUMgTUVBU1VSRSBJUyBCRUlORyBVU0VEIFRPIERFRklORSBNQUxOVVRSSVRJT04NClBTRklfZGZfbWFsbnV0cml0aW9uIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBtdXRhdGUoDQogICAgbWFsbnV0cml0aW9uX3NvdXJjZSA9IGNhc2Vfd2hlbigNCiAgICAgIGFnZV9ncm91cCA9PSAxICYgaHQgPj0gNDUgJiBodCA8IDY1ICB+ICJXRkwiLA0KICAgICAgYWdlX2dyb3VwID09IDEgJiBodCA+PSA2NSAmIGh0IDwgMTIwIH4gIldGSCIsDQogICAgICBhZ2VfZ3JvdXAgPT0gMSAmIChodCA8IDQ1IHwgaHQgPj0gMTIwIHwgaXMubmEoaHQpKSB+ICJNVUFDIiwNCiAgICAgIGFnZV9ncm91cCA9PSAyIH4gIkJGQSIsDQogICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXw0KICAgICkNCiAgKQ0KYGBgDQoNCiMjIDEuNCBaIHNjb3JlIGNoZWNrDQoNCmBgYHtyfQ0Kc3Vic2V0X3dmYXogPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIHB1bGwod2ZheikNCg0KIyBTVU1NQVJZIE9GIFdFSUdIVCBGT1IgQUdFIFotU0NPUkUgKENBU0VTKQ0Kc3VtbWFyeShzdWJzZXRfd2ZheikNCiMgTlVNQkVSIE9GIENBU0VTIElOIFdFSUdIVCBGT1IgQUdFIFogU0NPUkUNCmxlbmd0aChzdWJzZXRfd2ZheikNCmBgYA0KDQpgYGB7cn0NCnN1YnNldF93ZmF6MSA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMod2ZheikgJT4lDQogIHB1bGwod2ZheikNCg0KIyBOVU1CRVIgT0YgT1VUTElFUlMgSU4gV0VJR0hUIEZPUiBBR0UgWiBTQ09SRQ0KbGVuZ3RoKHN1YnNldF93ZmF6MSkNCmBgYA0KDQpgYGB7cn0NCnN1YnNldF9oZmF6IDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBmaWx0ZXIoY2FzZV9jb250cm9sID09IDEpICU+JQ0KICBwdWxsKGhmYXopDQoNCiMgU1VNTUFSWSBPRiBIRUlHSFQgRk9SIEFHRSBaIFNDT1JFIChDQVNFUykNCnN1bW1hcnkoc3Vic2V0X2hmYXopDQojIE5VTUJFUiBPRiBDQVNFUyBJTiBIRUlHSFQgRk9SIEFHRSBaIFNDT1JFDQpsZW5ndGgoc3Vic2V0X2hmYXopDQpgYGANCg0KYGBge3J9DQpzdWJzZXRfaGZhejEgPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIGlkZW50aWZ5X291dGxpZXJzKGhmYXopICU+JQ0KICBwdWxsKGhmYXopDQoNCiMgTlVNQkVSIE9GIE9VVExJRVJTIEZPUiBIRUlHSFQgRk9SIEFHRSBaIFNDT1JFDQpsZW5ndGgoc3Vic2V0X2hmYXoxKQ0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0X3dmaHogPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIHB1bGwod2ZoeikNCg0KIyBTVU1NQVJZIE9GIFdFSUdIVCBGT1IgSEVJR0hUIFogU0NPUkUgKENBU0VTKQ0Kc3VtbWFyeShzdWJzZXRfd2ZoeikNCiMgTlVNQkVSIE9GIENBU0VTIElOIFdFSUdIVCBGT1IgSEVJR0hUIFogU0NPUkUNCmxlbmd0aChzdWJzZXRfd2ZoeikNCmBgYA0KDQpgYGB7cn0NCnN1YnNldF93Zmh6MSA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMod2ZoeikgJT4lDQogIHB1bGwod2ZoeikNCg0KIyBOVU1CRVIgT0YgT1VUTElFUlMgSU4gV0VJR0hUIEZPUiBIRUlHSFQgWiBTQ09SRQ0KbGVuZ3RoKHN1YnNldF93Zmh6MSkNCmBgYA0KDQpgYGB7cn0NCnN1YnNldF9iYXogPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSAmIGFnZV95ZWFycyA+PTIpICU+JQ0KICBwdWxsKGJheikNCg0KIyBTVU1NQVJZIE9GIEJNSSBGT1IgQUdFIFogU0NPUkUgKENBU0VTKQ0Kc3VtbWFyeShzdWJzZXRfYmF6KQ0KIyBOVU1CRVIgT0YgQ0FTRVMgSU4gQk1JIEZPUiBBR0UgWiBTQ09SRQ0KbGVuZ3RoKHN1YnNldF9iYXopDQpgYGANCg0KYGBge3J9DQpzdWJzZXRfYmF6MSA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxICYgYWdlX3llYXJzID49MikgJT4lDQogIGlkZW50aWZ5X291dGxpZXJzKGJheikgJT4lDQogIHB1bGwoYmF6KQ0KDQojIE5VTUJFUiBPRiBPVVRMSUVSUyBJTiBCTUkgRk9SIEFHRSBaIFNDT1JFDQpsZW5ndGgoc3Vic2V0X2JhejEpDQpgYGANCg0KYGBge3J9DQpzdWJzZXRfbXVhYyA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGFnZV9ncm91cCA9PSAxICYgY2FzZV9jb250cm9sID09IDEpICU+JQ0KICBwdWxsKG11YWMpDQoNCiMgU1VNTUFSWSBPRiBNVUFDIChDQVNFUywgNi01OSBNT05USFMpDQpzdW1tYXJ5KHN1YnNldF9tdWFjKQ0KIyBOVU1CRVIgT0YgQ0FTRVMgSU4gTVVBQw0KbGVuZ3RoKHN1YnNldF9tdWFjKQ0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0X211YWMxIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBmaWx0ZXIoYWdlX2dyb3VwID09IDEgJiBjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIGlkZW50aWZ5X291dGxpZXJzKG11YWMpICU+JQ0KICBwdWxsKG11YWMpDQoNCiMgTlVNQkVSIE9GIE9VVExJRVJTIElOIE1VQUMNCmxlbmd0aChzdWJzZXRfbXVhYzEpDQpgYGANCg0KYGBge3J9DQojIENSRUFURVMgQk9YUExPVCBBTkQgSElTVE9HUkFNIEZPUiBXRUlHSFQgRk9SIEhFSUdIVCBaIFNDT1JFIChDQVNFUykNCmxheW91dChtYXQgPSBtYXRyaXgoYygxLDIpLDIsMSwgYnlyb3c9VFJVRSksICBoZWlnaHQgPSBjKDEsOCkpDQogcGFyKG1hcj1jKDAsIDMuMSwgMS4xLCAyLjEpKQ0KYm94cGxvdChQU0ZJX2RmX21hbG51dHJpdGlvbiR3Zmh6W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXSAsIGhvcml6b250YWw9VFJVRSAsIHlsaW09YygtMTEsNDMpLCB4YXh0PSJuIiAsIGNvbD1yZ2IoMC44LDAuOCwwLDAuNSkgLCBmcmFtZT1GKQ0KcGFyKG1hcj1jKDQsIDMuMSwgMS4xLCAyLjEpKQ0KaGlzdChQU0ZJX2RmX21hbG51dHJpdGlvbiR3Zmh6W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXQ0KICAgICAsIGJyZWFrcz01MCAsIGNvbD1yZ2IoMSwwLjgsMC44LDEpICwgYm9yZGVyPUYgLCBtYWluPSIiICwgeGxhYj0iV2VpZ2h0LWZvci1oZWlnaHQgKHotc2NvcmUpIiwgeGxpbT1jKC0xMSw0MykpDQpgYGANCg0KYGBge3J9DQojIENSRUFURVMgQk9YUExPVCBBTkQgSElTVE9HUkFNIE9GIFdFSUdIVCBGT1IgQUdFIChDQVNFUykNCmxheW91dChtYXQgPSBtYXRyaXgoYygxLDIpLDIsMSwgYnlyb3c9VFJVRSksICBoZWlnaHQgPSBjKDEsOCkpDQogcGFyKG1hcj1jKDAsIDMuMSwgMS4xLCAyLjEpKQ0KYm94cGxvdChQU0ZJX2RmX21hbG51dHJpdGlvbiR3ZmF6W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxXSAsIGhvcml6b250YWw9VFJVRSAsIHlsaW09YygtOCwxMSksIHhheHQ9Im4iICwgY29sPXJnYigwLjgsMC44LDAsMC41KSAsIGZyYW1lPUYpDQpwYXIobWFyPWMoNCwgMy4xLCAxLjEsIDIuMSkpDQpoaXN0KFBTRklfZGZfbWFsbnV0cml0aW9uJHdmYXpbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdDQogICAgICwgYnJlYWtzPTUwICwgY29sPXJnYigxLDAuOCwwLjgsMSkgLCBib3JkZXI9RiAsIG1haW49IiIgLCB4bGFiPSJXZWlnaHQtZm9yLWFnZSAoei1zY29yZSkiLCB4bGltPWMoLTgsMTEpKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEJPWFBMT1QgQU5EIEhJU1RPR1JBTSBPRiBCTUkgRk9SIEFHRSAoQ0FTRVMpDQpsYXlvdXQobWF0ID0gbWF0cml4KGMoMSwyKSwyLDEsIGJ5cm93PVRSVUUpLCAgaGVpZ2h0ID0gYygxLDgpKQ0KIHBhcihtYXI9YygwLCAzLjEsIDEuMSwgMi4xKSkNCmJveHBsb3QoUFNGSV9kZl9tYWxudXRyaXRpb24kYmF6W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxICYgUFNGSV9kZl9tYWxudXRyaXRpb24kYWdlX3llYXJzID49Ml0gLCBob3Jpem9udGFsPVRSVUUgLCB5bGltPWMoLTEzLDMzKSwgeGF4dD0ibiIgLCBjb2w9cmdiKDAuOCwwLjgsMCwwLjUpICwgZnJhbWU9RikNCnBhcihtYXI9Yyg0LCAzLjEsIDEuMSwgMi4xKSkNCmhpc3QoUFNGSV9kZl9tYWxudXRyaXRpb24kYmF6W1BTRklfZGZfbWFsbnV0cml0aW9uJGNhc2VfY29udHJvbCA9PSAxICYgUFNGSV9kZl9tYWxudXRyaXRpb24kYWdlX3llYXJzID49Ml0NCiAgICAgLCBicmVha3M9NTAgLCBjb2w9cmdiKDEsMC44LDAuOCwxKSAsIGJvcmRlcj1GICwgbWFpbj0iIiAsIHhsYWI9IkJNSS1mb3ItYWdlICh6LXNjb3JlKSIsIHhsaW09YygtMTMsMzMpKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEUgQk9YUExPVCBBTkQgSElTVE9HUkFNIE9GIEhFSUdIVCBGT1IgQUdFIA0KbGF5b3V0KG1hdCA9IG1hdHJpeChjKDEsMiksMiwxLCBieXJvdz1UUlVFKSwgIGhlaWdodCA9IGMoMSw4KSkNCiBwYXIobWFyPWMoMCwgMy4xLCAxLjEsIDIuMSkpDQpib3hwbG90KFBTRklfZGZfbWFsbnV0cml0aW9uJGhmYXpbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdICwgaG9yaXpvbnRhbD1UUlVFICwgeWxpbT1jKC0xOSw0NSksIHhheHQ9Im4iICwgY29sPXJnYigwLjgsMC44LDAsMC41KSAsIGZyYW1lPUYpDQpwYXIobWFyPWMoNCwgMy4xLCAxLjEsIDIuMSkpDQpoaXN0KFBTRklfZGZfbWFsbnV0cml0aW9uJGhmYXpbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdDQogICAgICwgYnJlYWtzPTUwICwgY29sPXJnYigxLDAuOCwwLjgsMSkgLCBib3JkZXI9RiAsIG1haW49IiIgLCB4bGFiPSJIZWlnaHQtZm9yLWFnZSAoei1zY29yZSkiLCB4bGltPWMoLTE5LDQ1KSkNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFUyBISVNUT0dSQU0gQU5EIEJPWFBMT1QgT0YgTVVBQyAoQ0FTRVMsIDYtNTkgTU9OVEhTKQ0KbGF5b3V0KG1hdCA9IG1hdHJpeChjKDEsMiksMiwxLCBieXJvdz1UUlVFKSwgIGhlaWdodCA9IGMoMSw4KSkNCnBhcihtYXI9YygwLCAzLjEsIDEuMSwgMi4xKSkNCmJveHBsb3QoUFNGSV9kZl9tYWxudXRyaXRpb24kbXVhY1tQU0ZJX2RmX21hbG51dHJpdGlvbiRjYXNlX2NvbnRyb2wgPT0gMV0gLCBob3Jpem9udGFsPVRSVUUgLCB5bGltPWMoNSwzMCksIHhheHQ9Im4iICwgY29sPXJnYigwLjgsMC44LDAsMC41KSAsIGZyYW1lPUYpDQpwYXIobWFyPWMoNCwgMy4xLCAxLjEsIDIuMSkpDQpoaXN0KFBTRklfZGZfbWFsbnV0cml0aW9uJG11YWNbUFNGSV9kZl9tYWxudXRyaXRpb24kY2FzZV9jb250cm9sID09IDFdDQogICAgICwgYnJlYWtzPTIwICwgY29sPXJnYigxLDAuOCwwLjgsMSkgLCBib3JkZXI9RiAsIG1haW49IiIgLCB4bGFiPSJNaWQtdXBwZXIgYXJtIGNpcmN1bWZlcmVuY2UgKGNtKSIsIHhsaW09Yyg1LDMwKSkNCmFibGluZSh2ID0gMTEuNSwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAgIyBzZXZlcmUNCmFibGluZSh2ID0gMTIuNSwgY29sID0gImJsdWUiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBtb2RlcmF0ZQ0KYGBgDQoNCmBgYHtyfQ0KIyBNQUtFUyBBIFRBQkxFIE9GIE9VVExJRVJTIEZPUiBXRUlHSFQgRk9SIEhFSUdIVA0Kd2Zoel9vdXRsaWVycyA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMod2ZoeikgJT4lDQogIHNlbGVjdChyZWNvcmRfaWQsIGh0LCB3dCwgYWdlX21vbnRocywgYWdlX3llYXJzLCBzZXgsIHdmaHosIGlzLm91dGxpZXIsIGlzLmV4dHJlbWUpDQoNCndmaHpfb3V0bGllcnMNCmBgYA0KYGBge3J9DQojIE1BS0VTIEEgVEFCTEUgT0YgT1VUTElFUlMgRk9SIFdFSUdIVCBGT1IgQUdFDQp3ZmF6X291dGxpZXJzIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBmaWx0ZXIoY2FzZV9jb250cm9sID09IDEpICU+JQ0KICBpZGVudGlmeV9vdXRsaWVycyh3ZmF6KSAlPiUNCiAgc2VsZWN0KHJlY29yZF9pZCxodCwgd3QsIGFnZV9tb250aHMsIGFnZV95ZWFycywgc2V4LCB3ZmF6LCBpcy5vdXRsaWVyLCBpcy5leHRyZW1lKQ0KDQp3ZmF6X291dGxpZXJzDQpgYGANCmBgYHtyfQ0KIyBNQUtFUyBBIFRBQkxFIE9GIE9VVExJRVJTIEZPUiBIRUlHSFQgRk9SIEFHRQ0KaGZhel9vdXRsaWVycyA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMoaGZheikgJT4lDQogIHNlbGVjdChyZWNvcmRfaWQsIGh0LCB3dCwgYWdlX21vbnRocywgYWdlX3llYXJzLCBzZXgsIGhmYXosIGlzLm91dGxpZXIsIGlzLmV4dHJlbWUpDQoNCmhmYXpfb3V0bGllcnMNCmBgYA0KYGBge3J9DQojIE1BS0VTIEEgVEFCTEUgT0YgT1VUTElFUlMgRk9SIEJNSSBGT1IgQUdFDQpiYXpfb3V0bGllcnMgPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSAmIGFnZV95ZWFycyA+PTIpICU+JQ0KICBpZGVudGlmeV9vdXRsaWVycyhiYXopICU+JQ0KICBzZWxlY3QocmVjb3JkX2lkLCBodCwgd3QsIGJheiwgYWdlX21vbnRocywgYWdlX3llYXJzLCBzZXgsIGlzLm91dGxpZXIsIGlzLmV4dHJlbWUpDQoNCmJhel9vdXRsaWVycw0KYGBgDQoNCmBgYHtyfQ0KIyBNQUtFUyBBIFRBQkxFIE9GIE9VVExJRVJTIEZPUiBNVUFDDQoNCm11YWNfb3V0bGllcnMgPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihhZ2VfZ3JvdXAgPT0gMSAmIGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMobXVhYykgJT4lDQogIHNlbGVjdChyZWNvcmRfaWQsIGh0LCB3dCwgYWdlX21vbnRocywgYWdlX3llYXJzLCBzZXgsIG11YWMsIGlzLm91dGxpZXIsIGlzLmV4dHJlbWUpDQoNCm11YWNfb3V0bGllcnMNCmBgYA0KDQpgYGB7cn0NCiMgQ1JFQVRFIEEgU1VNTUFSWSBUQUJMRSBPRiBPVVRMSUVSIFNUQVRVUyBGT1IgQUxMIEFOVEhST1BPTUVUUklDIElORElDQVRPUlMNCg0KYW50aHJvX291dGxpZXJfc3VtbWFyeSA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgDQogIG11dGF0ZSgNCiAgICAgICAgbXVhY19vdXRsaWVyID0gaWZfZWxzZSgNCiAgICAgIGFnZV9ncm91cCA9PSAxLA0KICAgICAgbXVhYyAlaW4lICgNCiAgICAgICAgUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogICAgICAgICAgZmlsdGVyKGFnZV9ncm91cCA9PSAxICYgY2FzZV9jb250cm9sID09IDEpICU+JQ0KICAgICAgICAgIGlkZW50aWZ5X291dGxpZXJzKG11YWMpICU+JQ0KICAgICAgICAgIGZpbHRlcihpcy5vdXRsaWVyKSAlPiUNCiAgICAgICAgICBwdWxsKG11YWMpDQogICAgICApLA0KICAgICAgRkFMU0UNCiAgICApLA0KICAgIGhmYXpfb3V0bGllciA9IGhmYXogJWluJSAoDQogICAgICBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgICAgICAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgICAgICAgaWRlbnRpZnlfb3V0bGllcnMoaGZheikgJT4lDQogICAgICAgIGZpbHRlcihpcy5vdXRsaWVyKSAlPiUNCiAgICAgICAgcHVsbChoZmF6KQ0KICAgICksDQogICAgICAgIHdmYXpfb3V0bGllciA9IHdmYXogJWluJSAoDQogICAgICBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgICAgICAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgICAgICAgaWRlbnRpZnlfb3V0bGllcnMod2ZheikgJT4lDQogICAgICAgIGZpbHRlcihpcy5vdXRsaWVyKSAlPiUNCiAgICAgICAgcHVsbCh3ZmF6KQ0KICAgICksDQogICAgICAgIHdmaHpfb3V0bGllciA9IHdmaHogJWluJSAoDQogICAgICBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgICAgICAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgICAgICAgaWRlbnRpZnlfb3V0bGllcnMod2ZoeikgJT4lDQogICAgICAgIGZpbHRlcihpcy5vdXRsaWVyKSAlPiUNCiAgICAgICAgcHVsbCh3Zmh6KQ0KICAgICksDQogICAgICAgIGJhel9vdXRsaWVyID0gaWZfZWxzZSgNCiAgICAgIGFnZV95ZWFycyA+PSAyLA0KICAgICAgYmF6ICVpbiUgKA0KICAgICAgICBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgICAgICAgICBmaWx0ZXIoY2FzZV9jb250cm9sID09IDEgJiBhZ2VfeWVhcnMgPj0gMikgJT4lDQogICAgICAgICAgaWRlbnRpZnlfb3V0bGllcnMoYmF6KSAlPiUNCiAgICAgICAgICBmaWx0ZXIoaXMub3V0bGllcikgJT4lDQogICAgICAgICAgcHVsbChiYXopDQogICAgICApLA0KICAgICAgRkFMU0UNCiAgICApDQogICkgJT4lDQoNCiAgZmlsdGVyKA0KICAgIG11YWNfb3V0bGllciB8DQogICAgaGZhel9vdXRsaWVyIHwNCiAgICB3ZmF6X291dGxpZXIgfA0KICAgIHdmaHpfb3V0bGllciB8DQogICAgYmF6X291dGxpZXINCiAgKSAlPiUNCiAgDQogICMgc2VsZWN0IHVzZWZ1bCBjb2x1bW5zDQogIHNlbGVjdCgNCiAgICByZWNvcmRfaWQsDQogICAgYWdlX21vbnRocywNCiAgICBhZ2VfeWVhcnMsDQogICAgc2V4LA0KICAgIGh0LA0KICAgIHd0LA0KICAgIA0KICAgIG11YWMsDQogICAgbXVhY19vdXRsaWVyLA0KICAgIA0KICAgIGhmYXosDQogICAgaGZhel9vdXRsaWVyLA0KICAgIA0KICAgIHdmYXosDQogICAgd2Zhel9vdXRsaWVyLA0KICAgIA0KICAgIHdmaHosDQogICAgd2Zoel9vdXRsaWVyLA0KICAgIA0KICAgIGJheiwNCiAgICBiYXpfb3V0bGllcg0KICApDQoNCmFudGhyb19vdXRsaWVyX3N1bW1hcnkNCmBgYA0KDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEFOIEVYQ0VMIEZJTEUgT0YgQUxMIE9VVExJRVIgVEFCTEVTDQp3cml0ZS54bHN4KA0KICBsaXN0KA0KICAgIFdGSFogPSB3Zmh6X291dGxpZXJzLA0KICAgIFdGQVogPSB3ZmF6X291dGxpZXJzLA0KICAgIEhBWiA9IGhmYXpfb3V0bGllcnMsDQogICAgTVVBQyA9IG11YWNfb3V0bGllcnMsIA0KICAgIEJBWiA9IGJhel9vdXRsaWVycywgDQogICAgU1VNTUFSWSA9IGFudGhyb19vdXRsaWVyX3N1bW1hcnkNCiAgKSwNCiAgZmlsZSA9ICJhbnRocm9wb21ldHJpY19vdXRsaWVycy54bHN4Ig0KKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEUgQSBUQUJMRSBPRiBBTEwgTkEnUw0KbmFfdGFibGUgPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSkgJT4lDQogIG11dGF0ZSgNCiAgICBoZmF6X21pc3NpbmcgPSBpcy5uYShoZmF6KSwNCiAgICB3ZmF6X21pc3NpbmcgID0gaXMubmEod2ZheiksDQogICAgd2Zoel9taXNzaW5nID0gaXMubmEod2ZoeiksIA0KICAgIG11YWNfbWlzc2luZyA9IGlzLm5hIChtdWFjKSwgDQogICAgYmF6X21pc3NpbmcgPSBpcy5uYSAoYmF6KQ0KICApICU+JQ0KICBmaWx0ZXIoaGZhel9taXNzaW5nIHwgd2Zhel9taXNzaW5nIHwgd2Zoel9taXNzaW5nIHwgYmF6X21pc3NpbmcgfCBtdWFjX21pc3NpbmcpICU+JQ0KICBzZWxlY3QoDQogICAgcmVjb3JkX2lkLA0KICAgIGh0LA0KICAgIHd0LA0KICAgIGFnZV9tb250aHMsDQogICAgaGZheiwNCiAgICB3ZmF6LA0KICAgIHdmaHosDQogICAgYmF6LA0KICAgIG11YWMsIA0KICAgIGhmYXpfbWlzc2luZywNCiAgICB3ZmF6X21pc3NpbmcsDQogICAgd2Zoel9taXNzaW5nLCANCiAgICBiYXpfbWlzc2luZywNCiAgICBtdWFjX21pc3NpbmcNCiAgKQ0KDQpuYV90YWJsZQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEEgVEFCTEUgVEhBVCBTVU1NQVJJWkVTIE1JU1NJTkdORVNTIEFORCBPVVRMSUVSUyBERVBFTkRJTkcgT04gQU5USFJPUE9NRVRSSUMgTUVBU1VSRQ0KYW50aHJvX3ZhcnMgPC0gYygiaGZheiIsICJ3ZmF6IiwgIndmaHoiLCAiYmF6IiwgIm11YWMiKQ0KDQpjYXNlc19kZiA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKQ0KDQphbnRocm9fc3VtbWFyeSA8LSBsYXBwbHkoYW50aHJvX3ZhcnMsIGZ1bmN0aW9uKHZhcikgew0KDQogIGRmX3ZhciA8LSBjYXNlc19kZiAlPiUNCiAgICBmaWx0ZXIoDQogICAgICBjYXNlX3doZW4oDQogICAgICAgIHZhciA9PSAibXVhYyIgfiBhZ2VfZ3JvdXAgPT0gMSwNCiAgICAgICAgdmFyID09ICJiYXoiICB+IGFnZV95ZWFycyA+PSAyLA0KICAgICAgICBUUlVFIH4gVFJVRQ0KICAgICAgKQ0KICAgICkNCg0KICB4IDwtIGRmX3ZhcltbdmFyXV0NCiAgDQogIG91dGxpZXJfaW5mbyA8LSBkZl92YXIgJT4lDQogICAgc2VsZWN0KGFsbF9vZih2YXIpKSAlPiUNCiAgICBpZGVudGlmeV9vdXRsaWVycyghIXN5bSh2YXIpKQ0KDQogIHRpYmJsZSgNCiAgICBtZWFzdXJlID0gdmFyLA0KICAgIG5fZWxpZ2libGUgPSBucm93KGRmX3ZhciksDQogICAgbiA9IHN1bSghaXMubmEoeCkpLA0KICAgIG5fbWlzc2luZyA9IHN1bShpcy5uYSh4KSksDQogICAgcGN0X21pc3NpbmcgPSByb3VuZChtZWFuKGlzLm5hKHgpKSAqIDEwMCwgMiksDQogICAgbl9vdXRsaWVycyA9IHN1bShvdXRsaWVyX2luZm8kaXMub3V0bGllciwgbmEucm0gPSBUUlVFKSwNCiAgICBuX2V4dHJlbWVfb3V0bGllcnMgPSBzdW0ob3V0bGllcl9pbmZvJGlzLmV4dHJlbWUsIG5hLnJtID0gVFJVRSkNCiAgKQ0KfSkgJT4lDQogIGJpbmRfcm93cygpDQoNCmFudGhyb19zdW1tYXJ5DQpgYGANCg0KDQpgYGB7cn0NCiMgTUFLRVMgRVhDRUwgVEFCTEUgT0YgbmFfdGFibGUgQU5EIGFudGhyb19zdW1tYXJ5DQp3cml0ZS54bHN4KA0KICBsaXN0KA0KICAgIE1pc3NpbmcgPSBuYV90YWJsZSwNCiAgICBTdW1tYXJ5ID0gYW50aHJvX3N1bW1hcnkNCiAgKSwNCiAgZmlsZSA9ICJOQS54bHN4IikNCmBgYA0KDQoNCiMjIDEuNSBEYXRhIGNoZWNrDQoNCmBgYHtyfQ0KIyBDT01QQVJFUyBNSVNTSU5HTkVTUyBBQ1JPU1MgU0NPVFQnUyBaLVNDT1JFUyBBTkQgTUlORQ0Kc3VtbWFyeV9kZiA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKQ0KDQptaXNzaW5nX3N1bW1hcnkgPC0gdGliYmxlKA0KDQogIGNvbXBhcmlzb24gPSBjKA0KICAgICJXZWlnaHQtZm9yLWhlaWdodCB6LXNjb3JlIiwNCiAgICAiV2VpZ2h0LWZvci1hZ2Ugei1zY29yZSIsDQogICAgIkJNSS1mb3ItYWdlIHotc2NvcmUiDQogICksDQoNCiAgbl90b3RhbCA9IGMoDQogICAgbnJvdyhzdW1tYXJ5X2RmKSwNCiAgICBucm93KHN1bW1hcnlfZGYpLA0KICAgIHN1bShzdW1tYXJ5X2RmJGFnZV95ZWFycyA+PSAyLCBuYS5ybSA9IFRSVUUpDQogICksDQoNCiAgbWlzc2luZ19zY290dCA9IGMoDQogICAgc3VtKGlzLm5hKHN1bW1hcnlfZGYkd2h6KSksDQogICAgc3VtKGlzLm5hKHN1bW1hcnlfZGYkd2F6KSksDQogICAgc3VtKGlzLm5hKHN1bW1hcnlfZGYkYm1peikgJiBzdW1tYXJ5X2RmJGFnZV95ZWFycyA+PSAyLCBuYS5ybSA9IFRSVUUpDQogICksDQoNCiAgbWlzc2luZ19iZW5qYW1pbiA9IGMoDQogICAgc3VtKGlzLm5hKHN1bW1hcnlfZGYkd2ZoeikpLA0KICAgIHN1bShpcy5uYShzdW1tYXJ5X2RmJHdmYXopKSwNCiAgICBzdW0oaXMubmEoc3VtbWFyeV9kZiRiYXopICYgc3VtbWFyeV9kZiRhZ2VfeWVhcnMgPj0gMiwgbmEucm0gPSBUUlVFKQ0KICApLA0KDQogIG1pc3NpbmdfZWl0aGVyID0gYygNCiAgICBzdW0oaXMubmEoc3VtbWFyeV9kZiR3aHopIHwgaXMubmEoc3VtbWFyeV9kZiR3Zmh6KSksDQogICAgc3VtKGlzLm5hKHN1bW1hcnlfZGYkd2F6KSB8IGlzLm5hKHN1bW1hcnlfZGYkd2ZheikpLA0KICAgIHN1bSgNCiAgICAgIChpcy5uYShzdW1tYXJ5X2RmJGJtaXopIHwgaXMubmEoc3VtbWFyeV9kZiRiYXopKSAmDQogICAgICBzdW1tYXJ5X2RmJGFnZV95ZWFycyA+PSAyLA0KICAgICAgbmEucm0gPSBUUlVFDQogICAgKQ0KICApDQopDQoNCm1pc3Npbmdfc3VtbWFyeQ0KYGBgDQoNCmBgYHtyfQ0KIyBDUkVBVEVTIEJMQU5ELUFMVE1BTiBQTE9UIEZPUiBTQ09UVFMnIFotU0NPUkVTIEFORCBNWSBaLVNDT1JFUyBUTyBBU1NFU1MgRElGRkVSRU5DRSBJTiBPVVIgTUVBU1VSRU1FTlRTDQoNCmJhX3dmaCA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh3aHopLCAhaXMubmEod2ZoeikpICU+JQ0KICBtdXRhdGUoDQogICAgbWVhbl96ID0gKHdoeiArIHdmaHopIC8gMiwNCiAgICBkaWZmX3ogPSB3aHogLSB3Zmh6DQogICkNCg0KbWVhbl9kaWZmIDwtIG1lYW4oYmFfd2ZoJGRpZmZfeikNCnNkX2RpZmYgPC0gc2QoYmFfd2ZoJGRpZmZfeikNCg0KdXBwZXIgPC0gbWVhbl9kaWZmICsgMS45NiAqIHNkX2RpZmYNCmxvd2VyIDwtIG1lYW5fZGlmZiAtIDEuOTYgKiBzZF9kaWZmDQoNCmdncGxvdChiYV93ZmgsIGFlcyh4ID0gbWVhbl96LCB5ID0gZGlmZl96KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC41KSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IG1lYW5fZGlmZikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSB1cHBlciwgbGluZXR5cGUgPSAiZGFzaGVkIikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBsb3dlciwgbGluZXR5cGUgPSAiZGFzaGVkIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIldlaWdodC1mb3ItaGVpZ2h0OiBXSFogKFNjb3R0KSB2cyBXRkhaIChCZW5qYW1pbikiLA0KICAgIHggPSAiTWVhbiBvZiBXSFogYW5kIFdGSFoiLA0KICAgIHkgPSAiRGlmZmVyZW5jZSAoV0haIC0gV0ZIWikiDQogICkNCg0KYmFfd2ZhIDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBmaWx0ZXIoY2FzZV9jb250cm9sID09IDEpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHdheiksICFpcy5uYSh3ZmF6KSkgJT4lDQogIG11dGF0ZSgNCiAgICBtZWFuX3ogPSAod2F6ICsgd2ZheikgLyAyLA0KICAgIGRpZmZfeiA9IHdheiAtIHdmYXoNCiAgKQ0KDQptZWFuX2RpZmYgPC0gbWVhbihiYV93ZmEkZGlmZl96KQ0Kc2RfZGlmZiA8LSBzZChiYV93ZmEkZGlmZl96KQ0KDQp1cHBlciA8LSBtZWFuX2RpZmYgKyAxLjk2ICogc2RfZGlmZg0KbG93ZXIgPC0gbWVhbl9kaWZmIC0gMS45NiAqIHNkX2RpZmYNCg0KZ2dwbG90KGJhX3dmYSwgYWVzKHggPSBtZWFuX3osIHkgPSBkaWZmX3opKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWVhbl9kaWZmKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IHVwcGVyLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IGxvd2VyLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiV2VpZ2h0LWZvci1hZ2U6IFdBWiAoU2NvdHQpIHZzIFdGQVogKEJlbmphbWluKSIsDQogICAgeCA9ICJNZWFuIG9mIFdBWiBhbmQgV0ZBWiIsDQogICAgeSA9ICJEaWZmZXJlbmNlIChXQVogLSBXRkFaKSINCiAgKQ0KDQpiYV9iYXogPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSAmIGFnZV95ZWFycyA+PTIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGJtaXopLCAhaXMubmEoYmF6KSkgJT4lDQogIG11dGF0ZSgNCiAgICBtZWFuX3ogPSAoYm1peiArIGJheikgLyAyLA0KICAgIGRpZmZfeiA9IGJtaXogLSBiYXoNCiAgKQ0KDQptZWFuX2RpZmYgPC0gbWVhbihiYV9iYXokZGlmZl96KQ0Kc2RfZGlmZiA8LSBzZChiYV9iYXokZGlmZl96KQ0KDQp1cHBlciA8LSBtZWFuX2RpZmYgKyAxLjk2ICogc2RfZGlmZg0KbG93ZXIgPC0gbWVhbl9kaWZmIC0gMS45NiAqIHNkX2RpZmYNCg0KZ2dwbG90KGJhX2JheiwgYWVzKHggPSBtZWFuX3osIHkgPSBkaWZmX3opKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWVhbl9kaWZmKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IHVwcGVyLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IGxvd2VyLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQk1JLWZvci1hZ2U6IEJNSVogKFNjb3R0KSB2cyBCQVogKEJlbmphbWluKSIsDQogICAgeCA9ICJNZWFuIG9mIEJNSVogYW5kIEJBWiIsDQogICAgeSA9ICJEaWZmZXJlbmNlIChCTUlaIC0gQkFaKSINCiAgKQ0KYGBgDQpgYGB7cn0NCiMgQ0FDTFVMQVRFIE1FQU4gRElGRiBBTkQgQ0kgDQpiYV93ZmggPC0gUFNGSV9kZl9tYWxudXRyaXRpb24gJT4lDQogIGZpbHRlcihjYXNlX2NvbnRyb2wgPT0gMSwgIWlzLm5hKHdoeiksICFpcy5uYSh3Zmh6KSkNCg0KYmxhbmQuYWx0bWFuLnN0YXRzKGJhX3dmaCR3aHosIGJhX3dmaCR3Zmh6KQ0KDQoNCmJhX3dmYSA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxLCAhaXMubmEod2F6KSwgIWlzLm5hKHdmYXopKQ0KDQpibGFuZC5hbHRtYW4uc3RhdHMoYmFfd2ZhJHdheiwgYmFfd2ZhJHdmYXopDQoNCg0KYmFfYmF6IDwtIFBTRklfZGZfbWFsbnV0cml0aW9uICU+JQ0KICBmaWx0ZXIoY2FzZV9jb250cm9sID09IDEgJiBhZ2VfeWVhcnMgPj0yLCAhaXMubmEoYm1peiksICFpcy5uYShiYXopKQ0KDQpibGFuZC5hbHRtYW4uc3RhdHMoYmFfYmF6JGJtaXosIGJhX2JheiRiYXopDQoNCmBgYA0KYGBge3J9DQojIE1BS0UgQSBUQUJMRSBPRiBUSEUgQ0FTRVMgV0hFUkUgVEhFIERJRkZFUkVOQ0UgQkVUV0VFTiBPVVIgWi1TQ09SRVMgSVMgSElHSEVSIFRIQU4gMC41DQpoaWdoX2RpZmZfcm93cyA8LSBQU0ZJX2RmX21hbG51dHJpdGlvbiAlPiUNCiAgZmlsdGVyKGNhc2VfY29udHJvbCA9PSAxKSAlPiUNCiAgbXV0YXRlKA0KICAgIGRpZmZfd2ZoID0gd2h6IC0gd2ZoeiwNCiAgICBkaWZmX3dmYSA9IHdheiAtIHdmYXosDQogICAgZGlmZl9iYXogPSBpZmVsc2UoDQogICAgICBhZ2VfeWVhcnMgPj0gMiwNCiAgICAgIGJtaXogLSBiYXosDQogICAgICBOQQ0KICAgICkNCiAgKSAlPiUNCiAgZmlsdGVyKA0KICAgIGFicyhkaWZmX3dmaCkgPiAwLjUgfA0KICAgIGFicyhkaWZmX3dmYSkgPiAwLjUgfA0KICAgIChhZ2VfeWVhcnMgPj0gMiAmIGFicyhkaWZmX2JheikgPiAwLjUpDQogICkgJT4lDQogIHNlbGVjdCgNCiAgICByZWNvcmRfaWQsIGFnZV95ZWFycywgYWdlX21vbnRocywgc2V4LCBodCwgd3QsDQogICAgd2h6LCB3Zmh6LCBkaWZmX3dmaCwNCiAgICB3YXosIHdmYXosIGRpZmZfd2ZhLA0KICAgIGJtaXosIGJheiwgZGlmZl9iYXoNCiAgKSAlPiUNCiAgYXJyYW5nZSgNCiAgICBkZXNjKA0KICAgICAgcG1heCgNCiAgICAgICAgYWJzKGRpZmZfd2ZoKSwNCiAgICAgICAgYWJzKGRpZmZfd2ZhKSwNCiAgICAgICAgYWJzKGRpZmZfYmF6KSwNCiAgICAgICAgbmEucm0gPSBUUlVFDQogICAgICApDQogICAgKQ0KICApDQoNCmhpZ2hfZGlmZl9yb3dzDQpgYGANCmBgYHtyfSANCiMgQVNTRVNTIEhPVyBNQU5ZIE9GIFRIRSBDQVNFUyBXSVRIIFotU0NPUkUgRElGRkVSRU5DRVMgT1ZFUiAwLjUgSEFWRSBBIFotU0NPUkUgT1ZFUiAzDQpoaWdoX2RpZmZfcm93cyAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG5fdG90YWwgPSBuKCksDQoNCiAgICBuX2FueV96X292ZXJfNSA9IHN1bSgNCiAgICAgIGFicyh3aHopICA+IDUgfA0KICAgICAgYWJzKHdmaHopID4gNSB8DQogICAgICBhYnMod2F6KSAgPiA1IHwNCiAgICAgIGFicyh3ZmF6KSA+IDUgfA0KICAgICAgYWJzKGJtaXopID4gNSB8DQogICAgICBhYnMoYmF6KSAgPiA1LA0KICAgICAgbmEucm0gPSBUUlVFDQogICAgKSwNCg0KICAgIHBlcmNlbnRfYW55X3pfb3Zlcl81ID0gMTAwICogbl9hbnlfel9vdmVyXzUgLyBuX3RvdGFsDQogICkNCmBgYA0KDQoNCmBgYHtyfQ0Kd3JpdGUueGxzeChQU0ZJX2RmX21hbG51dHJpdGlvbiwgZmlsZSA9ICJQU0ZJX2ZpbmFsX21hbG51dHJpdGlvbi54bHN4IikNCmBgYA0K