Introduction

This document outlines the analyses from Study 1 and 2 in Does Smartphone Presence Impact Different Aspects of Cognition? (Ruiz Pardo & Minda, October 2021 preprint, <>). The rising prevalence of smartphones has prompted research about how they can impact cognitive abilities. Therefore, the purpose of this study was to investigate what aspects of cognition, if any, are affected by smartphones. To do so, we examined a variety of cognitive mechanisms using the 12 Cambridge Brain Sciences (CBS) Tasks. These short, computer-based tasks assess various aspects of cognition, such as: reasoning, memory, attention, and verbal ability (Hampshire et al., 2012).

For this study, we conducted two studies and explored: (1) individual differences in how people feel towards and interact with their smartphones, (2) how smartphones affect different aspects of cognition, and (3) interactions between individual differences and these effects.

Study 1: Guaging Typical Smartphone Use

There were two goals for study 1: (1) to determine the design of study 2 and (2) individual differences in how people feel towards and interact with their smartphones. Therefore, participants completed four questionnaires in an online survey:

  1. The Smartphone Attachment and Dependency Questionnaire (Ward et al., 2017)
    • Measures the level to which someone feels attached and or dependent on their smartphone
  2. The Mobile Phone Involvement Questionnaire (MPIQ; Walsh et al., 2010)
    • Measures the level of connection to one’s phone, it makes a distinction between phone involvement and frequency of phone use
  3. The Nomophobia Questionnaire (NMP-Q; Yildirim & Correia, 2015)
    • Measures people’s severity of nomophobia
    • Nomophobia is the modern fear of not being able to communicate through a mobile phone or the internet. It is a situational phobia that refers to a group of symptoms or behaviours that are associated with mobile phone use.
  4. A Smartphone Use Questionnaire (revised from Ruiz Pardo & Minda, 2021A)
    • Designed for study 1 to measure typical smartphone use, frequency of use, and to make a paradigm decision for study 2.

Results will demonstrate how participants tend to use their smartphones with respect to their (1) power (i.e., either turned ON or OFF) and (2) location (i.e., either on their desk, in their pocket/bag, or outside of the room) during a typical day. This information will be used to determine the design for study 2. We predict that, as seen in Ward et al. and our replication study, the smartphone power conditions are not necessary. For smartphone location, participants’ typical smartphone use (including placement) will be assessed to determine if all three locations should be used. This leaves two most likely possible outcomes for smartphone location: using two locations or using three locations. For both outcomes, the “other room” location will be used because it will allow us to see how a non-typical situation can impact people. Two locations will be used if participants report only “on desk” or “in pocket/bag” as typical. Then, the most used location would be implemented alongside the “other room” location (i.e., either “on desk” and “other room” or “in pocket/bag” and “other room”). Three locations will be used if participants report both “on desk” or “in pocket/bag” as typical.

Additionally, results will assess individual difference measures (i.e., Smartphone Attachment and Dependency Questionnaire, MPIQ, and NMP-Q). These will give insight to how participants feel and interact with their smartphones and provide an opportunity to explore possible relationships between these measures.

A total of 122 participants were included in study 1.

Study 2: What Aspects of Cognition are Affected by Smartphones?

The goals for study 2 were to: (1) investigate how smartphones affect different aspects of cognition and (2) explore interactions between individual differences and these effects.

Participants were randomly assigned to their condition (i.e., design was decided using study 1) and then randomly completed all 12 CBS tasks. Therefore, participants placed their smartphones in one of three locations: (1) on the participant’s desk, (2) in their pocket/bag, or (3) outside the testing room. All participants were instructed to keep their phones on “silent” (i.e., to prevent any notifications) and those in the “on desk” location condition kept their devices facing down.

As in study 1, participants completed three questionnaires to determine how individual differences may be moderating the smartphone effects: (1) the Smartphone Attachment and Dependency Questionnaire, (2) the MPIQ, and (3) the NMP-Q. Finally, to check that study 2’s participants are similar to study 1, all participants will complete the same Smartphone Use Questionnaire from study 1. Our predictions for this study were mainly exploratory: we investigated which aspects of cognition were affected by smartphones and, therefore, we did not have explicit predictions for each aspect of cognition. We think that using the CBS tasks will help to answer this question because they cover a variety of measures of cognition. The only specific predictions we have are with respect to the attention-demanding tasks (e.g. Double Trouble), where we predict lower performance with smartphone presence (e.g., Stothart et al., 2015).

A total of 237 participants were included in study 2.

Cambridge Brain Science (CBS) Tasks

The CBS tasks consisted of 12 cognitive tasks: Double Trouble Task, Odd One Out Task, Digit Span Task, Feature Match Task, Polygons Task, Paired Associates Task, Monkey Ladder Task, Grammatical Reasoning Task, Rotations Task, Spatial Span Task, Token Search Task, and the Spatial Planning Task. These 12 tasks measure four fundamental cognitive areas, which are described as follows by Hampshire et al. (2012): memory, reasoning, verbal ability, and concentration. The following task descriptions are from the CBS Website (<www.cambridgebrainsciences.com>). (click to see details)

Memory

Visuospatial Working Memory Task (Monkey Ladder) - A variant on a task from the non-human primate literature (Inoue & Matsuzawa, 2007). Sets of numbered squares are displayed on the screen at random locations. After a variable interval of time, the numbers disappear leaving just the blank squares and participants must respond by clicking the squares in ascending numerical sequence. Difficulty is increased or decreased by one numbered box depending on whether the participant got the previous trial correct. After three errors, the task will end.

Spatial Short-Term Memory (Spatial Span Task) - A variant on the CorsiBlock Tapping Task (Corsi, 1972), used for measuring spatial short-term memory capacity. 16 squares are displayed in a 4 x 4 grid. A sub-set of the squares will flash in a random sequence at a rate of 1 flash every 900 ms. Subsequently, participants must repeat the sequence by clicking on the squares in the same order in which they flashed. Difficulty is increased or decreased by one box depending on whether the participant got the previous trial correct. After three errors, the task will end.

Working Memory (Token Search) - Based on a test that is used to measure strategy during search behaviours (Collins et al., 1998). Boxes are displayed in random locations. Participants must find a hidden “token” by clicking on the boxes one at a time. When the token is found, it is hidden within another box. The token will not appear within the same box twice, thus, participants must search the boxes until the token has been found once in each box. If they search the same empty box twice, or search a box in which the token has previously been found, this is an error and the trial ends. Difficulty is increased or decreased by one box depending on whether the participant got the previous trial correct. After three errors, the task will end. Outcome measure is the maximum level completed (e.g. the problem with the most tokens that the user successfully completed).

Episodic Memory (Paired Associates Task) - A variant on a paradigm that is commonly used to assess memory impairments in aging clinical populations (Gould et al., 2005). Boxes are displayed at random locations on the screen. The boxes are opened one after another to reveal an enclosed object. Subsequently, the objects are displayed in random order in the centre of the screen and participants must determine which box contains the object that is presented. Difficulty is increased or decreased by one box depending on whether the participant got the previous trial correct. After three errors, the task will end.

Reasoning

Mental Rotation (Rotations) - Often used for measuring the ability to manipulate objects spatially in mind (Silverman et al., 2000). Two grids of coloured squared are displayed to either side of the screen with one of the grids rotated by a multiple of 90 degrees. When rotated, the grids are either identical or differ by the position of just one square. Participants must indicate whether or not the grids are identical. Participants have 90 seconds to solve as many problems as possible. Primary outcome measure is overall score - the sum of the difficulties of all successfully answered problems, minus the sum of the difficulties of all incorrectly answered problems.

Visuospatial Processing (Polygons) - Based on the Interlocking Pentagons Task, which is often used in the assessment of age- related disorders (Folstein et al., 1975). A pair of overlapping polygons is displayed on one side of the screen. Participants must indicate whether a polygon displayed on the other side of the screen is identical to one of the interlocking polygons. Difficulty is increased by making the differences between the polygons more subtle or decreased by making the differences between the polygons more pronounced. Participants have 90 seconds to solve as many problems as possible. Primary outcome measure is overall score - the sum of the difficulties of all successfully answered problems, minus the sum of the difficulties of all incorrectly answered problems.

Deductive Reasoning (Odd One Out) - Based on a sub-set of problems from the Cattell Culture Fair Intelligence Test (Cattell, 1949). Nine patterns will appear on the screen. The features that make up the patterns are colour, shape, and number and are related to each other according to a set of rules. Participants must deduce the rules that relate the object features and select the pattern that do not correspond to those rules. Difficulty is increased or decreased depending on whether the participant got the previous trial correct. Participants have 3 minutes to solve as many problems as possible. Primary outcome measure is the number of correctly answered problems, minus the number of incorrectly answered problems.

Planning (Spatial Planning) - A direct descendant of the “Tower of London” task, Spatial Planning is a classic neuropsychological test of planning (Shallice, 1982). When the test begins, numbered beads are positioned on a tree-shaped frame. Participants must reposition the beads so they are configured in ascending numerical order, in as few moves as possible. Problems become progressively harder, and participants have three minutes to solve as many as possible. The primary outcome measure is the overall score, calculated by subtracting the number of moves made from twice the minimum number of moves required.

Verbal Ability

Verbal Reasoning (Grammatical Reasoning) - Based on Alan Baddeley’s three minute grammatical reasoning test (Baddeley, 1968). Short sentences describing the relationship of two shapes along with an image of the shapes are displayed on the screen. Participants must indicate whether the sentence correctly describes the pair of objects displayed on the screen. Participants have 90 seconds to solve as many problems as possible. Primary outcome measure is the number of problems solved correctly, minus the number of problems answered incorrectly.

Verbal Short-Term Memory (Digit Span) - A variant on the verbal working memory component of the WAIS-R intelligent test (Weschler, 1981). A sequence of numbers will appear on the screen one after another. Once the sequence is complete, participants must repeat the sequence. Difficulty is increased or decreased by one number depending on whether the participant got the previous trial correct. After three errors, the task ends. Primary outcome measure is the maximum level (i.e. the problem with the highest number of digits) that the player successfully completed.

Concentration

Attention (Feature Match) - Based on the classical feature search tasks that have been used to measure attentional processing (Treisman & Gelade, 1980). Two grids are displayed on the screen, each containing an array of abstract shapes. In half of the trials the grids differ by just one shape. Participants must indicate whether or not the grid’s contents are identical. Difficulty is increased or decreased by one shape depending on whether the participant got the previous trial correct. Participants have 90 seconds to solve as many problems as possible. Primary outcome measure is overall score - the sum of the difficulties of all successfully answered problems, minus the sum of the difficulties of all incorrectly answered problems.

Response Inhibition (Double Trouble, Colour-Word Remapping Task) - A variant on the Stroop test (Stroop, 1935). Three coloured words are displayed on the screen: one at the top and two at the bottom. Participants must indicate which of two coloured words at the bottom of the screen correctly describes the colour that the word at the top of the screen is written in. The colour word mappings may be congruent, incongruent, or doubly incongruent, depending on whether or not the colour of the top word matches the colour that it is written in. Participants have 90 seconds to solve as many problems as possible.

A total of ### undergraduate students participated in this study.

Analysis Prep

Load Libraries

Before importing the raw data, the required libraries were loaded.

Additional Functions

Rounding p-values

This rounding function was adapted from Dr. Emily Nielsen’s Rpubs. The function (“p_round(x)”) was created to assess and print p-values. If \(p \ge .005\), the function will display “$p = $” and the value rounded to two decimal places. If $ .0005 p <.005\(, the function will display “\)p = $" and the value rounded to three decimal places. If \(p < .0005\), the function will display “\(p < .001\)”. (click to expand)


p_round <- function(x){
  if(x > .005)
    {x1 = (paste("= ", gsub("0\\.","\\.", round(x, digits = 2)), sep = ''))
  }  
  else if(x == .005){x1 = (paste("=", gsub("0\\.","\\.", 0.01)))
  }
  else if(x > .0005 & x < .005)
    {x1 = (paste("= ", gsub("0\\.","\\.", round(x, digits = 3)), sep = ''))
  }  
  else if(x == .0005){x1 = (paste("=", gsub("0\\.","\\.", 0.001)))
  }
  else{x1 = (paste("<", gsub("0\\.","\\.", 0.001)))
  } 
  (x1)
}

Flatten Correlation Output

The following takes a correlation output and flattens it to a long format. Originally from STHDA’s “Correlation matrix : Formatting and visualization” (http://www.sthda.com/english/wiki/correlation-matrix-formatting-and-visualization#.YW4IOfbtntM.link).

# ++++++++++++++++++++++++++++
# flattenCorrMatrix
# ++++++++++++++++++++++++++++
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor  =(cormat)[ut],
    p = pmat[ut]
    )
}

Import Raw Data Files

There are four raw data files for the analyses.

Study 1

  1. Study 1 - Survey Data
    • csv file exported from Qualtrics
    • data collected online

Study 2

  1. Study 2 - Survey Data
    • csv file exported from Qualtrics
    • data collected in-person
  2. Study 2 - Test Tracking Sheet
    • excel file, collected manually from each participant by experimenter
    • data collected in-person
  3. Study 2- CBS data
    • csv file exported from online platform
    • data collected in-person

NOTE: To avoid confusion, the naming convention for the two studies was as follows for all data, analyses, visualizations, etc.: Study 1 = “pilot” and Study 2 = “main”

1. Study 1 Data

First, the raw data was imported.

# this will import the raw excel data file for study 1
  # this file has been anonymized, so any identifiable information has been removed
pilot_survey_raw <- read.csv("Pilot_survey_data(june7).csv", header = TRUE)

After importing the raw data, the file is cleaned by removing participants based on several criteria:

  • Testing Data: experimenter data (i.e., testing prior to data collection), any irrelevant rows

  • Incomplete Data: participants who did not complete the study

    • 4 removed
  • Unnecessary Variables: columns which are not relevant to the analyses (e.g., distribution type, distribution langauge)

# clean the data
pilot_sur_data_temp <- 
  # start with removing experimenter and irrelevant rows from the data
    # there is no need to count the ps removed at this stage 
  pilot_survey_raw %>% 
  # remove row 1 & 2 -- not data
  slice(3:nrow(pilot_survey_raw)) %>% 
  # remove testing data
  filter(DistributionChannel != "test") %>% 

  # next, remove ps w/ incomplete data -- include only thos who have finished (i.e., "1")
  filter(Finished == 1) %>% 
  
  # remove unnecessary columns
    # should be done after others since columns used to filter
  select(-c(Status:IPAddress, ResponseId:ExternalReference, DistributionChannel:Q1.2, SC0))

Additionally, a “participant” column was added to denote the participant ID, the columns were renamed for easier reference, any unclear or inappropriate responses (e.g., non-numeric response for items requiring a numeric response) were removed, and all variables were formatted as numeric or factor as appropriate.

# add a participant column to data
pilot_sur_data <- 
  cbind(data.frame("participant" = c(1:nrow(pilot_sur_data_temp))), pilot_sur_data_temp)

pilot_sur_data <- 
  # change data file type to tibble 
  as.tibble(pilot_sur_data) %>% 
  # rename columns...
  dplyr::rename(duration_sec = Duration..in.seconds., age = Q1.3, gender = Q1.4, genderO = Q1.5, lang = Q1.6, langO = Q1.7, prof = Q1.8, 
                program = Q2.1, programO = Q2.2, year = Q2.3, 
                age_first_phone = Q3.1, app_most_used = Q3.2, app_most_usedO = Q3.3, app_most_used_text = Q3.4, 
                iphone = Q4.1, ST_app_most_used = Q4.2, ST_app_most_usedO = Q4.3, ST_app_text_mess = Q4.4, ST_weekly_tot_hours = Q4.5, ST_daily_pickups = Q4.6, ST_daily_not = Q4.7, 
                phone_value = Q5.1, phantom = Q5.2, dist_daily = Q5.3_1, dist_study = Q5.3_2, dist_device = Q5.4, dist_deviceO = Q5.5, dist_device_studywork = Q5.6, dist_device_studyworkO = Q5.7, 
                dist_device_social = Q5.8, dist_device_socialO = Q5.9, 
                pow_not_using = Q6.1_1, pow_notifications_on = Q6.1_2, pow_vibrate = Q6.1_3, pow_study = Q6.1_4, pow_exam = Q6.1_5, pow_lec = Q6.1_6, pow_sleep = Q6.1_7, loc_typical = Q6.2, loc_study = Q6.3, 
                loc_exam = Q6.4, loc_lec = Q6.5, loc_social = Q6.6, com_gen = Q6.7_1, com_unattended = Q6.7_2, com_leave_with_others = Q6.7_3, com_locked = Q6.7_4, com_room_task = Q6.7_5, 
                communicate = Q7.1, communicateO = Q7.2, phone_use = Q7.3, phone_useO = Q7.4, 
                NMPQ_1 = Q8.1_1, NMPQ_2 = Q8.1_2, NMPQ_3 = Q8.1_3, NMPQ_4 = Q8.1_4, NMPQ_5 = Q8.1_5, NMPQ_6 = Q8.1_6, NMPQ_7 = Q8.1_7, NMPQ_8 = Q8.1_8, NMPQ_9 = Q8.1_9, NMPQ_10 = Q8.2_1, NMPQ_11 = Q8.2_2, 
                NMPQ_12 = Q8.2_3, 
                NMPQ_13 = Q8.2_4, NMPQ_14 = Q8.2_5, NMPQ_15 = Q8.2_6, NMPQ_16 = Q8.2_7, NMPQ_17 = Q8.2_8, NMPQ_18 = Q8.2_9, NMPQ_19 = Q8.2_10, NMPQ_20 = Q8.2_11, 
                MPIQ_1 = Q9.1_1, MPIQ_2 = Q9.1_2, MPIQ_3 = Q9.1_3, MPIQ_4 = Q9.1_4, MPIQ_5 = Q9.1_5, MPIQ_6 = Q9.1_6, MPIQ_7 = Q9.1_7, MPIQ_8 = Q9.1_8, MPIQ_SI_1 = Q9.2_1, MPIQ_SI_2 = Q9.2_2, MPIQ_SI_3 = Q9.2_3, 
                MPIQ_VFO_1 = Q9.3_1, MPIQ_VFO_2 = Q9.3_2, MPIQ_VFO_3 = Q9.3_3, 
                SAD_1 = Q10.1_1, SAD_2 = Q10.1_2, SAD_3 = Q10.1_3, SAD_4 = Q10.1_4, SAD_5 = Q10.1_5, SAD_6 = Q10.1_6, SAD_7 = Q10.1_7, SAD_8 = Q10.1_8, SAD_9 = Q10.1_9, SAD_10 = Q10.1_10, SAD_11 = Q10.1_11, 
                SAD_12 = Q10.1_12, SAD_13 = Q10.1_13
                ) %>% 
  
# replace unclear/inappropriate responses
  # remove non-numeric responses to "age_first_phone"
    # this will force all non-numeric value to "NA"
  mutate(age_first_phone = as.numeric(age_first_phone)) %>% 
  
  # change variables to numeric or factor as needed
  mutate(age = as.numeric(age), age = as.numeric(age), gender = factor(gender, levels = c(1:4), labels = c("Male", "Female", "Prefer not to say", "Other")), lang = factor(lang, levels = c(1:2), labels = c("English", "Other")), prof = factor(prof, levels = c(1:3), labels = c("Low", "Moderate", "High")), program = factor(program, levels = c(1:13), labels = c("Arts & Humanities", "Music", "Education", "Engineering", "Haalth Science", "Information & Media Studies", "Law", "Business", "Science", "Social Science", "Schulich Dentistry", "Graduate Studies", "Other")), year = factor(year, levels = c(1:6), labels = c("First Year", "Second Year", "Third Year", "Fourth Year", "Fifth Year+", "Graduate Student")), app_most_used = factor(app_most_used, levels = c(1:4), labels = c("Games", "Social Networking", "Entertainment", "Other")), iphone = factor(iphone, levels = c(1:2), labels = c("yes", "no")), ST_app_most_used = factor(ST_app_most_used, levels = c(1:4), labels = c("Games", "Social Networking", "Entertainment", "Other")), ST_app_text_mess = factor(ST_app_text_mess, levels = c(1:2), labels = c("yes", "no")), ST_weekly_tot_hours = factor(ST_weekly_tot_hours, levels = c(1:5), labels = c("0-10", "11-20", "21-30", "31-40", "40+")), ST_daily_pickups = factor(ST_daily_pickups, levels = c(1:5), labels = c("0-50", "51-100", "101-150", "151-200", "200+")), ST_daily_not = factor(ST_daily_not, levels = c(1:5), labels = c("0-50", "51-100", "101-150", "151-200", "200+")), phone_value = factor(phone_value, levels = c(1:4), labels = c("$0-$20", "$21-$40", "$41-$60", ">$60")), phantom = factor(phantom, levels = c(1:2), labels = c("yes", "no")), dist_daily = as.numeric(dist_daily), dist_study = as.numeric(dist_study), dist_device = factor(dist_device, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), dist_device_studywork = factor(dist_device_studywork, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), dist_device_social = factor(dist_device_social, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), pow_not_using = as.numeric(pow_not_using), pow_notifications_on = as.numeric(pow_notifications_on), pow_vibrate = as.numeric(pow_vibrate), pow_study = as.numeric(pow_study), pow_exam = as.numeric(pow_exam), pow_lec = as.numeric(pow_lec), pow_sleep = as.numeric(pow_sleep), loc_typical = factor(loc_typical, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_study = factor(loc_study, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_exam = factor(loc_exam, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_lec = factor(loc_lec, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_social = factor(loc_social, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), com_gen = as.numeric(com_gen), com_unattended = as.numeric(com_unattended), com_leave_with_others = as.numeric(com_leave_with_others), com_locked = as.numeric(com_locked), com_room_task = as.numeric(com_room_task), communicate = factor(communicate, levels = c(1:4), labels = c("Family", "Friends", "Work", "Other")), phone_use = factor(phone_use, levels = c(1,2, 5, 3, 4), labels = c("Calling/Texting", "Social Media", "Games", "Email", "Other"))
         ) %>% 
  mutate_at(vars(starts_with("NMPQ")),funs(as.numeric)) %>% 
  mutate_at(vars(starts_with("MPIQ")),funs(as.numeric)) %>% 
  mutate_at(vars(starts_with("SAD")),funs(as.numeric)) %>% 
  
  # reverse code items...
  mutate(MPIQ_VFO_2R = 8-MPIQ_VFO_2) %>% 
  
  # add scores for each questionnaire... rowwise() %>% dplyr::mutate(SAD_score = sum(c_across(SAD_1:SAD_13)))
  # for each p....
  # get NMPQ score -- SUM
  rowwise() %>% dplyr::mutate(NMPQ_sum = sum(c_across(NMPQ_1:NMPQ_20))) %>% 
  # get NMPQ score -- MEAN
  rowwise() %>% dplyr::mutate(mean(c_across(NMPQ_1:NMPQ_20))) %>% 
  
  # get MPIQ score -- SUM
  rowwise() %>% dplyr::mutate(MPIQ_sum = sum(c_across(MPIQ_1:MPIQ_8))) %>% 
  # get MPIQ score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_mean = mean(c_across(MPIQ_1:MPIQ_8))) %>% 
  
  # get MPIQ_SI score -- SUM
  rowwise() %>% dplyr::mutate(MPIQ_SI_sum = sum(c_across(MPIQ_SI_1:MPIQ_SI_3))) %>% 
  # get MPIQ_SI score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_SI_mean = mean(c_across(MPIQ_SI_1:MPIQ_SI_3))) %>% 
  
  # get MPIQ_VFO score -- SUM  
  rowwise() %>% dplyr::mutate(MPIQ_VFO_sum = sum(MPIQ_VFO_1, MPIQ_VFO_2R, MPIQ_VFO_3)) %>% 
  # get MPIQ_VFO score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_VFO_mean = mean(MPIQ_VFO_1, MPIQ_VFO_2R, MPIQ_VFO_3)) %>% 
  
  # get SAD score -- SUM  
  rowwise() %>% dplyr::mutate(SAD_sum = sum(c_across(SAD_1:SAD_13))) %>% 
  # get SAD score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_mean = mean(c_across(SAD_1:SAD_13))) %>% 
    
  # get SAD_dep score -- SUM
  rowwise() %>% dplyr::mutate(SAD_dep_sum = sum(c_across(SAD_1:SAD_3))) %>% 
  # get SAD_dep score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_dep_mean = mean(c_across(SAD_1:SAD_3))) %>% 
    
  # get SAD_ea score -- SUM
  rowwise() %>% dplyr::mutate(SAD_ea_sum = sum(c_across(SAD_8:SAD_11))) %>% 
  # get SAD_ea score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_ea_mean = mean(c_across(SAD_8:SAD_11))) %>% 
  
  # get SAD_access score -- SUM
  rowwise() %>% dplyr::mutate(SAD_access_sum = sum(c_across(SAD_5:SAD_7))) %>% 
  # get SAD_access score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_access_mean = mean(c_across(SAD_5:SAD_7))) %>% 
  
  # get SAD_dist score -- SUM
  rowwise() %>% dplyr::mutate(SAD_dist_sum = sum(c_across(SAD_12:SAD_13))) %>% 
  # get SAD_dist score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_dist_mean = mean(c_across(SAD_12:SAD_13))) %>% 
  
  # from WARD -- get "Wdep" and "Wea"
  rowwise() %>% dplyr::mutate(SAD_Wdep_sum = sum(c_across(SAD_1:SAD_6))) %>% 
  rowwise() %>% dplyr::mutate(SAD_Wea_sum = sum(c_across(SAD_8:SAD_12)))

This is the primary data file for study 1. It contains responses to the 4 pilot questionnaires: - (1) A Smartphone Use Questionnaire (made for the present study) - (2) The Nomophobia Questionnaire (NMP-Q; Yildirim & Correia, 2015) - (3) The Mobile Phone Involvement Questionnaire (MPIQ; Walsh et al., 2010) - (4) The Smartphone Attachment and Dependency Questionnaire (SAD; Ward et al., 2017)

(1) Smartphone Use Questionnaire - General Notes:

  • participant denotes participant number.

  • StartDate denotes the date participants started study 1.

  • End Date denotes the date participants ended study 1.

  • Progress denotes how much of study 1 the participant has completed (i.e., out of 100%).

  • DurationInSec denotes how long participants took to complete study 1 in seconds.

  • Finished denotes if participants completed the study. This was coded as follows:

    • 1 = TRUE
    • 2 = FALSE
  • RecordedDate denotes the date participants’ data was recorded.

  • Age shows each participant’s self-reported age.

  • Gender refers to participant’s self-reported gender. This was coded as follows:

    • 1 = Male
    • 2 = Female
    • 3 = Other
  • GenderOther refers to participant’s gender if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • FirstLanguage refers to self-reported first language. This was coded as follows:

    • 1 = English
    • 2 = Any other language
  • FirstLanguageOther refers to participant’s first language if ‘any other language’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • EnglishProficiency refers to participant’s self-reported proficiency in English. This was asked of all participants, regarless of their first language. This was coded as follows:

    • 1 = Low
    • 2 = Moderate
    • 3 = High
  • Program refers to participant’s program of study. This was coded as follows:

                                   |                        

    ———————————|————————- 1 = Arts & Humanities | 8 = Business 2 = Music | 9 = Science 3 = Education | 10 = Social Science 4 = Engineering | 11 = Schulich Dentistry 5 = Health Science | 12 = Graduate Studies 6 = Information & Media Studies | 13 = Other 7 = Law |

  • ProgramOther refers to participant’s program if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • YearOfStudy refers to which year of study participants were in during testing. This was coded as follows:

    • 1 = First Year
    • 2 = Second Year
    • 3 = Third Year
    • 4 = fourth Year
    • 5 = 5th+ Year
    • 6 = Graduate Student
  • AgeFirstPhone refers to the self-reported age when participants got their first smartphone. This was a open response item, where “NA” denotes no response.

  • AppMostUsedCat refers to participant’s most used smartphone application, chosen from (and coded as) the following categories:

    • 1 = Games (e.g., candy crush, clash of clans)
    • 2 = Social Networking (e.g., Instagram, Facebook, Snapchat)
    • 3 = Entertainment (e.g., music, YouTube)
    • 4 = Other
  • AppMostUsedCatOther refers to participant’s most used smartphone application (from a category) if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • AppMostUsedFree refers to participant’s most used smartphone application. Here, participant specified the specific application they use the most on their smartphone. This was a open response item, where “NA” denotes no response.

  • Other refers to participant’s if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

Paradigm Decision Questions
  • These questions asked participants to report their general smartphone use with respect to (1) Power, (2) Location, and (3) Comfort Level. These are the key questions in study 1 that were used to decide the design of study 2.
Power Questions
  • All power questions were answered on a 7-point likert scale as follows:

    • 1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • PD_P_1: “I tend to turn my phone off when I am not using it.”.

  • PD_P_2: “I tend to have my notifications turned on.”

  • PD_P_3: “I tend to have my phone on vibrate.”

  • PD_P_4: “When I study, I typically keep my phone on.”

  • PD_P_5: “When I write an exam, I tend to keep my phone on.”

  • PD_P_6: “When I am in a lecture, I tend to keep my phone on.”

  • PD_P_7: “When I sleep, I tend to keep my phone turned on.”

Location Questions
  • All power questions were coded as follows:

    • 1 = Desk 2 = Pocket/Bag 3 = Other Room
  • PD_L_1: “Typically, I keep my phone:”

  • PD_L_2: “When I study, I keep my phone:”

  • PD_L_3: “When I write an exam, I keep my phone:”

  • PD_L_4: “When I am in a lecture, I keep my phone:”

  • PD_L_5: “When I am in a social setting (i.e., with friends, family), I keep my phone:”

Comfort Level Questions
  • All comfort level questions were answered on a 7-point likert scale as follows:

    • 1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • PD_C_1: “I am comfortable with letting others use my phone.”

  • PD_C_2: “I leave my phone unattended.”

  • PD_C_3: “I leave my phone with other people.”

  • PD_C_4: “I make sure my phone is locked when it is not in my hands.”

  • PD_C_5: “I would feel comfortable leaving my phone in another room while completing a task.”"

Exploratory Questions
  • The following provides some notes on the exploratory quesitons in the study
Screen Time Questions
  • Screentime (ST) is an Apple application which tracks your device usage over time. This includes, but is not limited to: total hours used, notifications received, most used application, etc. The following provides some notes on the ST-specific questions (7 items in total).

  • ST_1 refers to whether a participant reported currently owning an iPhone. Note: it was assumed that all iPhone users had access to the ST application on their smartphone. This was coded as follows:

    • 1 = Yes
    • 2 = No
  • ST_2 refers to participant’s mosted used application (according to ST). This was coded as follows:

    • 1 = Games (e.g., candy crush, clash of clans)
    • 2 = Social Networking (e.g., Instagram, Facebook, Snapchat)
    • 3 = Entertainment (e.g., music, YouTube)
    • 4 = Other
  • ST_3 refers to participant’s most used application was ‘other’ (according to ST). This was a open response item, where “NA” denotes “other” was not chosen.

  • ST_4 refers to whether a participant’s most used application was their text / messenger application (according to ST). This was coded as follows:

    • 1 = Yes
    • 2 = No
  • ST_5 refers to participant’s weekly total screen time in hours (according to ST). This was coded as follows:

    • 1 = 0-10
    • 2 = 11-20
    • 3 = 21-30
    • 4 = 31-40
    • 5 = 40+
  • ST_6 refers to participant’s total “Pick-ups” per day (according to ST). “Pick-ups” refers to the number of times someone picks up their smartphone, regarless of whether the smartphone was used. This was coded as follows:

    • 1 = 0-50
    • 2 = 51-100
    • 3 = 101-150
    • 4 = 151-200
    • 5 = 200+
  • ST_7 refers to participant’s average notifications per day (according to ST). This was coded as follows:

    • 1 = 0-50
    • 2 = 51-100
    • 3 = 101-150
    • 4 = 151-200
    • 5 = 200+
Distraction Questions
  • These explored how participants report feeling or being distracted by their smartphones during various settings.

  • Distr_1 shows the response to the question: “I find my phone can distract me from my daily activities (e.g., work, school, social interactions).”. This was coded as follows:

    • 1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • Distr_2 shows the response to the question: “I find my phone distracting during this study.”. This was coded as follows:

    • 1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • Distr_3 shows the response to the question: “In general, I find the following the most distracting electronic device:”. This was coded as follows:

    • 1 = Computer
    • 2 = Phone
    • 3 = iPad / Tablet
    • 4 = Smartwatch
    • 5 = Other
  • Distr_4 shows refers Distr_3 if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • Distr_5 shows the response to the question: “I find the following the most distracting when I am studying/working:”. This was coded as follows:

    • 1 = Computer
    • 2 = Phone
    • 3 = iPad / Tablet
    • 4 = Smartwatch
    • 5 = Other
  • Distr_6 shows refers Distr_5 if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • Distr_7 shows the response to the question: “I find the following the most distracting when I am in a social context (e.g., with friends):”. This was coded as follows:

    • 1 = Computer
    • 2 = Phone
    • 3 = iPad / Tablet
    • 4 = Smartwatch
    • 5 = Other
  • Distr_8 shows refers Distr_7 if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

General Exploratory Questions
  • Exp_1 shows the response to the question: “How much money would it take for you to give up your phone for a full day?”. This was coded as follows:

    • 1 = $0-20
    • 2 = $21-40
    • 3 = $41-60
    • 4 = >$60
  • Exp_2 shows the response to the question: “Have you ever thought you heard your phone ring or thought you felt it vibrate, only to find out you were wrong?”. This was coded as follows:

    • 1 = Yes
    • 2 = No
  • Exp_3 shows the response to the question: “Who do you mostly communicate with on your phone?”. This was coded as follows:

    • 1 = Family
    • 2 = Friends
    • 3 = Work
    • 4 = Other
  • Exp_4 shows refers to Exp_3 if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

  • Exp_5: shows the response to the question: “What do you use your phone for the most?”. This was coded as follows:

    • 1 = Calling / Texting
    • 2 = Social Media (e.g., Facebook, Instagram, Twitter, Snapchat)
    • 3 = Email
    • 4 = Other
    • 5 = Games (e.g., candy crush, clash of clans)
  • Exp_6 shows refers to Exp_5 if ‘other’ was selected. This was a open response item, where “NA” denotes “other” was not chosen.

(2) The Nomophobia Questionnaire (NMP-Q; Yildirim & Correia, 2015)

  • NMP_Q_1 - NMP_Q_20 shows the responses to the 20 items in the NMP-Q. Participants were asked to indicate how much they agree or disagree to the statements on a 7-point likert scale (where, “1” = Strongly Disagree, and 7 = “Strongly Agree”).

  • The score was the sum of all responses (range is from 20–140), with higher scores corresponding to greater nomophobia severity. This range was interpreted as follows: 20 = absence of nomophobia, 21–59 = mild level of nomophobia, 60–99 = moderate level of nomophobia, ≥ 100 = severe nomophobia. This was coded as follows:

    • For Q12 – Q24, coding was as follows:
      1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • The items were as follows:

    • NMP_Q_1: I would feel uncomfortable without constant access to information through my smartphone.
    • NMP_Q_2: I would be annoyed if I could not look information up on my smartphone when I wanted to do so.
    • NMP_Q_3: Being unable to get the news(e.g., happenings, weather, etc.) on my smartphone would make me nervous.
    • NMP_Q_4: I would be annoyed if I could not use my smartphone and/or its capabilities when I wanted to do so.
    • NMP_Q_5: Running out of battery in my smartphone would scare me.
    • NMP_Q_6: If I were to run out of credits or hit my monthly data limit, I would panic.
    • NMP_Q_7: If I did not have a data signal or could not connect to Wi-Fi, then I would constantly check to see if I had a signal or could find a Wi-Fi Network.
    • NMP_Q_8: If I could not use my smartphone, I would be afraid of getting stranded somewhere.
    • NMP_Q_9: If I could not check my smartphone for a while, I would feel a desire to check it.

    If I did not have my smartphone with me,

    • NMP_Q_10: I would feel anxious because I could not instantly communicate with my family and/or friends.
    • NMP_Q_11: I would be worried because my family and/or friends could not reach me.
    • NMP_Q_12: I would feel nervous because I would not be able to receive text messages and calls.
    • NMP_Q_13: I would be anxious because I could not keep in touch with my family and/or friends.
    • NMP_Q_14: I would be nervous because I could not know if someone had tried to get a hold of me.
    • NMP_Q_15: I would feel anxious because my constant connection to my family and friends would be broken.
    • NMP_Q_16: I would be nervous because I would be disconnected from my online identity.
    • NMP_Q_17: I would be uncomfortable because I could not stay up-to-date with social media and online networks.
    • NMP_Q_18: I would feel awkward because I could not check my notifications for updates from myconnections and online networks.
    • NMP_Q_19: I would feel anxious because I could not check my email messages.
    • NMP_Q_20: I would feel weird because I would not know what to do.

(3) The Mobile Phone Involvement Questionnaire (MPIQ; Walsh et al., 2010)

  • The MPIQ consists of 14 items and has three subscales, which measure: (1) The MPIQ, (2) The Self-Identity, and (3) Validation from Others. For each subscale, participants were asked to indicate how much they agree or disagree to the statements on a 7-point likert scale (where, “1” = Strongly Disagree, and 7 = “Strongly Agree”). The score was the average for each subscale. Each subscale was coded as follows:
    • For Q12 – Q24, coding was as follows:
      1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • MPIQ_1 - MPIQ_8 shows the responses to the 8 items in the MPIQ subscale. The items were as follows:
    • MPIQ_1: I often think about my mobile phone when I am not using it. [cognitive salience]
    • MPIQ_2: I often use my mobile phone for no particular reason. [behavioural salience]
    • MPIQ_3: Arguments have arisen with others because of my mobile phone use. [interpersonal conflict]
    • MPIQ_4: I interrupt whatever else I am doing when I am contacted on my mobile phone. [conflict with other activities]
    • MPIQ_5: I feel connected to others when I use my mobile phone. [euphoria]
    • MPIQ_6: I lose track of how much I am using my mobile phone. [loss of control]
    • MPIQ_7: The thought of being without my mobile phone makes me feel distressed. [withdrawal]
    • MPIQ_8: I have been unable to reduce my mobile phone use. [relapse & reinstatement]
  • MPIQ_SI_1 - MPIQ_SI_3 shows the responses to the 3 items in the Self-Identity subscale. The items were as follows:
    • MPIQ_self_ID_1: Using a mobile phone is very important to me.
    • MPIQ_self_ID_2: I feel as though a part of me is missing when I am without my mobile phone.
    • MPIQ_self_ID_3: I cannot imagine life without my mobile phone.
  • MPIQ_VFO_1 - MPIQ_VFO_3 shows the responses to the 8 items in the Validation from Others subscale. The items were as follows:
    • MPIQ_Validation_1: I feel valued when I receive lots of mobile calls or messages.
    • MPIQ_Validation_2_rev: Receiving mobile phone calls or messages does not make me feel special.
      • Note, here MPIQ_Validation_2_rev denotes that this item should be reverse coded for final analysis.
    • MPIQ_Validation_3: Receiving a mobile phone call makes me feel loved.

(4) The Smartphone Attachment and Dependency Questionnaire (SAD; Ward et al., 2017)

  • SAD_1 - SAD_13 shows the responses to the 13 items in the SAD. Participants were asked to indicate how much they agree or disagree to the statements on a 7-point likert scale (where, “1” = Strongly Disagree, and 7 = “Strongly Agree”).

  • The score was the sum of all responses (range is from 13–91), with higher scores corresponding to greater smartphone attachment and dependency. This range was interpreted (for the pirposes of this study) as follows: 13 = absence of attachment & dependency, 14–39 = mild level of attachment & dependency, 40–65 = moderate level of attachment & dependency, ≥ 66 = severe attachment & dependency.

    • For Q12 – Q24, coding was as follows:
      1 = Strongly Disagree 2 = Disagree 3 = Somewhat Disagree 4 = Neutral 5 = Somewhat Agree 6 = Agree 7 = Strongly Agree
  • The items were as follows:

    • Q12: I would have trouble getting through a normal day without my smartphone.
    • Q13: It would be painful for me to give up my smartphone for a day.
    • Q14: I feel like I could not live without my smartphone.
    • Q15: If I forgot to bring my smartphone with me, I would feel anxious.
    • Q16: It drives me crazy when my smartphone runs out of battery.
    • Q17: I am upset and annoyed when I find I do not have reception on my smartphone.
    • Q18: I feel impatient when the Internet connection speed on my smartphone is slow.
    • Q19: I feel lonely when my smartphone does not ring or vibrate for several hours.
    • Q20: Using my smartphone relieves me of my stress.
    • Q21: I feel excited when I have a new message or notification.
    • Q22: Using my smartphone makes me feel happy.
    • Q23: I find it tough to focus whenever my smartphone is nearby.
    • Q24: I become less attentive to my surroundings when I’m using my smartphone.

2. Main Study Data

Import data

Import raw data for main study…

#this will import the raw excel data file for study 2
  #this file has been anonymized, so any identifiable information has been removed
main_survey_raw <- read.csv("Main_survey_data(june7).csv", header = TRUE)

CBS_raw <- read.csv("CBS_data(june7).csv", header = TRUE)

#this file contains the condition information for each participant in study 2
tracking_raw <- read.csv("Tracking_data(june7).csv", header = TRUE)

Clean data

After importing the raw data, the file is cleaned by removing participants based on several criteria:

  • Testing Data: experimenter data (i.e., testing prior to data collection), any irrelevant rows
    • 5 removed for being testing data
  • Incomplete Data: participants who did not complete the study
    • 0 removed from the survey data
    • 20 removed from the tracking data for either only completing part of the study (2), the CBS link did not work (7), or being excluded due to experimental error (e.g., external distractor like construction, inaccurate condition assignment; 11)
  • Unnecessary Variables: columns which are not relevant to the analyses (e.g., distribution type, distribution language) – none removed (not needed)
# clean the data
  # survey data
main_sur_data_temp <- 
  # start with removing experimenter and irrelevant rows from the data
    # there is no need to count the ps removed at this stage 
  main_survey_raw %>% 
  # remove row 1 & 2 -- not data
  slice(3:nrow(main_survey_raw)) %>% 
  # remove testing data
  filter(DistributionChannel != "test") %>% 

  # next, remove ps w/ incomplete data -- include only those who have finished (i.e., "1")
  filter(Finished == 1) %>% 
  
  # remove unnecessary columns
    # should be done after others since columns used to filter
  select(-c(Status:IPAddress, ResponseId:ExternalReference, DistributionChannel:UserLanguage, SC0))
# clean the data
  # survey data
tracking_data_temp <- 
  # start with removing experimenter and irrelevant rows from the data
    # there is no need to count the ps removed at this stage 
  tracking_raw %>% 
  # remove testing data
  filter(type != "OTHER") %>% 

  # next, remove ps w/ incomplete data -- include only those who have valid as "1"
  filter(valid == 1) %>% 
  
  # name condition a factor
  mutate(condition = factor(condition, levels = c(1:3), labels = c("desk", "pocket/bag", "outside")))

Additionally, the columns were renamed for easier reference, any unclear or inappropriate responses (e.g., non-numeric response for items requiring a numeric response) were removed, and all variables were formatted as numeric or factor as appropriate.

# rename columns in main survey data
main_sur_data <- 
  # change data file type to tibble 
  as.tibble(main_sur_data_temp) %>% 
# rename columns...
  dplyr::rename(duration_sec = Duration..in.seconds., date_sur = Q59, participant = Q56, type = Q58, CBS_know = Q60, CBS_done_tasks = Q61, age = Q1.3, gender = Q1.4, genderO = Q1.5, lang = Q1.6, langO = Q1.7, prof = Q1.8, 
                program = Q2.1, programO = Q2.2, year = Q2.3, age_first_phone = Q3.1, app_most_used = Q3.2, app_most_usedO = Q3.3, app_most_used_text = Q3.4, iphone = Q4.1, ST_app_most_used = Q4.2, ST_app_most_usedO = Q4.3, ST_app_text_mess = Q4.4, ST_weekly_tot_hours = Q4.5, ST_daily_pickups = Q4.6, ST_daily_not = Q4.7, phone_value = Q5.1, phantom = Q5.2, dist_daily = Q5.3_1, dist_study = Q5.3_2, dist_device = Q5.4, dist_deviceO = Q5.5, dist_device_studywork = Q5.6, dist_device_studyworkO = Q5.7, dist_device_social = Q5.8, dist_device_socialO = Q5.9, pow_not_using = Q6.1_1, pow_notifications_on = Q6.1_2, pow_vibrate = Q6.1_3, pow_study = Q6.1_4, pow_exam = Q6.1_5, pow_lec = Q6.1_6, pow_sleep = Q6.1_7, loc_typical = Q6.2, loc_study = Q6.3, loc_exam = Q6.4, loc_lec = Q6.5, loc_social = Q6.6, com_gen = Q6.7_1, com_unattended = Q6.7_2, com_leave_with_other = Q6.7_3, com_locked = Q6.7_4, com_room_task = Q6.7_5, communicate = Q7.1, communicateO = Q7.2, phone_use = Q7.3, phone_useO = Q7.4, NMPQ_1 = Q8.1_1, NMPQ_2 = Q8.1_2, NMPQ_3 = Q8.1_3, NMPQ_4 = Q8.1_4, NMPQ_5 = Q8.1_5, NMPQ_6 = Q8.1_6, NMPQ_7 = Q8.1_7, NMPQ_8 = Q8.1_8, NMPQ_9 = Q8.1_9, NMPQ_10 = Q8.2_1, NMPQ_11 = Q8.2_2, NMPQ_12 = Q8.2_3, NMPQ_13 = Q8.2_4, NMPQ_14 = Q8.2_5, NMPQ_15 = Q8.2_6, NMPQ_16 = Q8.2_7, NMPQ_17 = Q8.2_8, NMPQ_18 = Q8.2_9, NMPQ_19 = Q8.2_10, NMPQ_20 = Q8.2_11, MPIQ_1 = Q9.1_1, MPIQ_2 = Q9.1_2, MPIQ_3 = Q9.1_3, MPIQ_4 = Q9.1_4, MPIQ_5 = Q9.1_5, MPIQ_6 = Q9.1_6, MPIQ_7 = Q9.1_7, MPIQ_8 = Q9.1_8, MPIQ_SI_1 = Q9.2_1, MPIQ_SI_2 = Q9.2_2, MPIQ_SI_3 = Q9.2_3, MPIQ_VFO_1 = Q9.3_1, MPIQ_VFO_2 = Q9.3_2, MPIQ_VFO_3 = Q9.3_3, SAD_1 = Q10.1_1, SAD_2 = Q10.1_2, SAD_3 = Q10.1_3, SAD_4 = Q10.1_4, SAD_5 = Q10.1_5, SAD_6 = Q10.1_6, SAD_7 = Q10.1_7, SAD_8 = Q10.1_8, SAD_9 = Q10.1_9, SAD_10 = Q10.1_10, SAD_11 = Q10.1_11, SAD_12 = Q10.1_12, SAD_13 = Q10.1_13) %>% 
  
  # replace unclear/inappropriate responses
  # remove non-numeric responses to "age_first_phone"
    # this will force all non-numeric value to "NA"
  mutate(age_first_phone = as.numeric(age_first_phone)) %>% 

  # remove any responses longer than 2 digits from "age_first_phone"
  mutate_at("age_first_phone", ~replace(., nchar(as.integer(age_first_phone)) > 2, NA)) %>% 
  
  # change variables to numeric or factor as needed
  mutate(participant = as.numeric(participant), age = as.numeric(age), CBS_know = factor(CBS_know, levels = c(1:2), labels = c("yes", "no")), CBS_done_tasks = factor(CBS_done_tasks, levels = c(1:2), labels = c("yes", "no")), age = as.numeric(age), gender = factor(gender, levels = c(1:4), labels = c("Male", "Female", "Prefer not to say", "Other")), lang = factor(lang, levels = c(1:2), labels = c("English", "Other")), prof = factor(prof, levels = c(1:3), labels = c("Low", "Moderate", "High")), program = factor(program, levels = c(1:13), labels = c("Arts & Humanities", "Music", "Education", "Engineering", "Haalth Science", "Information & Media Studies", "Law", "Business", "Science", "Social Science", "Schulich Dentistry", "Graduate Studies", "Other")), year = factor(year, levels = c(1:6), labels = c("First Year", "Second Year", "Third Year", "Fourth Year", "Fifth Year+", "Graduate Student")), app_most_used = factor(app_most_used, levels = c(1:4), labels = c("Games", "Social Networking", "Entertainment", "Other")), iphone = factor(iphone, levels = c(1:2), labels = c("yes", "no")), ST_app_most_used = factor(ST_app_most_used, levels = c(1:4), labels = c("Games", "Social Networking", "Entertainment", "Other")), ST_app_text_mess = factor(ST_app_text_mess, levels = c(1:2), labels = c("yes", "no")), ST_weekly_tot_hours = factor(ST_weekly_tot_hours, levels = c(1:5), labels = c("0-10", "11-20", "21-30", "31-40", "40+")), ST_daily_pickups = factor(ST_daily_pickups, levels = c(1:5), labels = c("0-50", "51-100", "101-150", "151-200", "200+")), ST_daily_not = factor(ST_daily_not, levels = c(1:5), labels = c("0-50", "51-100", "101-150", "151-200", "200+")), phone_value = factor(phone_value, levels = c(1:4), labels = c("$0-$20", "$21-$40", "$41-$60", ">$60")), phantom = factor(phantom, levels = c(1:2), labels = c("yes", "no")), dist_daily = as.numeric(dist_daily), dist_study = as.numeric(dist_study), dist_device = factor(dist_device, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), dist_device_studywork = factor(dist_device_studywork, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), dist_device_social = factor(dist_device_social, levels = c(1:5), labels = c("Computer", "Phone", "iPad/Tablet", "Smartwatch", "Other")), pow_not_using = as.numeric(pow_not_using), pow_notifications_on = as.numeric(pow_notifications_on), pow_vibrate = as.numeric(pow_vibrate), pow_study = as.numeric(pow_study), pow_exam = as.numeric(pow_exam), pow_lec = as.numeric(pow_lec), pow_sleep = as.numeric(pow_sleep), loc_typical = factor(loc_typical, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_study = factor(loc_study, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_exam = factor(loc_exam, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_lec = factor(loc_lec, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), loc_social = factor(loc_social, levels = c(1:3), labels = c("On my desk", "In my pocket or bag", "In another room")), com_gen = as.numeric(com_gen), com_unattended = as.numeric(com_unattended), com_leave_with_other = as.numeric(com_leave_with_other), com_locked = as.numeric(com_locked), com_room_task = as.numeric(com_room_task), communicate = factor(communicate, levels = c(1:4), labels = c("Family", "Friends", "Work", "Other")), phone_use = factor(phone_use, levels = c(1,2, 5, 3, 4), labels = c("Calling/Texting", "Social Media", "Games", "Email", "Other"))
         ) %>% 
  mutate_at(vars(starts_with("NMPQ")),funs(as.numeric)) %>% 
  mutate_at(vars(starts_with("MPIQ")),funs(as.numeric)) %>% 
  mutate_at(vars(starts_with("SAD")),funs(as.numeric)) %>% 
  
  # reverse code items...
  mutate(MPIQ_VFO_2R = 8-MPIQ_VFO_2) %>% 
  
  # add scores for each questionnaire... 
  # for each p....
  # get NMPQ score -- SUM
  rowwise() %>% dplyr::mutate(NMPQ_sum = sum(c_across(NMPQ_1:NMPQ_20))) %>% 
  # get NMPQ score -- MEAN
  rowwise() %>% dplyr::mutate(mean(c_across(NMPQ_1:NMPQ_20))) %>% 
  
  # get MPIQ score -- SUM
  rowwise() %>% dplyr::mutate(MPIQ_sum = sum(c_across(MPIQ_1:MPIQ_8))) %>% 
  # get MPIQ score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_mean = mean(c_across(MPIQ_1:MPIQ_8))) %>% 
  
  # get MPIQ_SI score -- SUM
  rowwise() %>% dplyr::mutate(MPIQ_SI_sum = sum(c_across(MPIQ_SI_1:MPIQ_SI_3))) %>% 
  # get MPIQ_SI score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_SI_mean = mean(c_across(MPIQ_SI_1:MPIQ_SI_3))) %>% 
  
  # get MPIQ_VFO score -- SUM  
  rowwise() %>% dplyr::mutate(MPIQ_VFO_sum = sum(MPIQ_VFO_1, MPIQ_VFO_2R, MPIQ_VFO_3)) %>% 
  # get MPIQ_VFO score -- MEAN
  rowwise() %>% dplyr::mutate(MPIQ_VFO_mean = mean(MPIQ_VFO_1, MPIQ_VFO_2R, MPIQ_VFO_3)) %>% 
  
  # get SAD score -- SUM  
  rowwise() %>% dplyr::mutate(SAD_sum = sum(c_across(SAD_1:SAD_13))) %>% 
  # get SAD score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_mean = mean(c_across(SAD_1:SAD_13))) %>% 
    
  # get SAD_dep score -- SUM
  rowwise() %>% dplyr::mutate(SAD_dep_sum = sum(c_across(SAD_1:SAD_3))) %>% 
  # get SAD_dep score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_dep_mean = mean(c_across(SAD_1:SAD_3))) %>% 
    
  # get SAD_ea score -- SUM
  rowwise() %>% dplyr::mutate(SAD_ea_sum = sum(c_across(SAD_8:SAD_11))) %>% 
  # get SAD_ea score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_ea_mean = mean(c_across(SAD_8:SAD_11))) %>% 
  
  # get SAD_access score -- SUM
  rowwise() %>% dplyr::mutate(SAD_access_sum = sum(c_across(SAD_5:SAD_7))) %>% 
  # get SAD_access score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_access_mean = mean(c_across(SAD_5:SAD_7))) %>% 
  
  # get SAD_dist score -- SUM
  rowwise() %>% dplyr::mutate(SAD_dist_sum = sum(c_across(SAD_12:SAD_13))) %>% 
  # get SAD_dist score -- MEAN
  rowwise() %>% dplyr::mutate(SAD_dist_mean = mean(c_across(SAD_12:SAD_13))) %>%  
  
  # from WARD -- get "Wdep" and "Wea"
  rowwise() %>% dplyr::mutate(SAD_Wdep_sum = sum(c_across(SAD_1:SAD_6))) %>% 
  rowwise() %>% dplyr::mutate(SAD_Wea_sum = sum(c_across(SAD_8:SAD_12)))

Organize CBS data …

CBS_data <- 
  # change data file type to tibble 
  as.tibble(CBS_raw) %>% 
  # make Valid a factor -- true vs false
  mutate(Valid = factor(Valid)) %>% 
  # make test name a factor
  mutate(Test.Name = factor(Test.Name)) %>% 
  # remove email domain to get participant numbers
  mutate_at("User.Email", str_replace, "@researcher-159542.autoregister.com", "") %>% 
  # make list as numeric
  mutate(User.Email = as.numeric(User.Email)) %>% 
  # make all scores & raw scores numeric
  mutate_at(vars(starts_with("Score")),funs(as.numeric)) %>% 
  # make all percentiles numeric
  mutate(Percentile = as.numeric(Percentile))

Removing Non-Valid Scores: CBS

Remove non-valid data from CBS scores.

  • 30 scores were removed for being invalid.
# get dataframe with ps with non-valid CBS scores
CBS_ex_notvalid <- CBS_data %>% filter(Valid == "false")

# get list of non-valid ps
CBS_ex_notvalid_list <- CBS_ex_notvalid$User.Email

# make frequency table
CBS_ex_notvalid_t <- plyr::count(CBS_ex_notvalid$Test.Name)

# show table using kable
kable(CBS_ex_notvalid_t, caption = "Frequency table of CBS Tasks with Non-Valid Scores", align = rep('c'), col.names = c("Task", "Non-Valid Scores"), row.names = TRUE) %>% 
  footnote(general = "Participants who had any non-valid scores were removed form the final analyses. Not all tasks had a non-valid score.") %>% 
  column_spec(2, bold = T) %>%
  row_spec(0, bold = T) %>% 
  # column_spec(9, border_left = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency table of CBS Tasks with Non-Valid Scores
Task Non-Valid Scores
1 Digit Span 3
2 Double Trouble 3
3 Monkey Ladder 5
4 Paired Associates 4
5 Polygons 4
6 Rotations 4
7 Spatial Planning 2
8 Spatial Span 1
9 Token Search 4
Note:
Participants who had any non-valid scores were removed form the final analyses. Not all tasks had a non-valid score.
  • To maintain only ps who completed all 12 CBS tasks, r ps were removed, leaving a total of r who completed all 12 CBS trials with a valid score

Removing Ouliers: CBS

This code cleaned all_data based on (1) exclusion criteria, (2) outliers, and (3) incomplete/missing data. (click to see code)

# get list of ps to remove for various reasons...

# Exclude ps with non-valid CBS scores -- grabbed from above
# CBS_ex_notvalid <- CBS_data %>% filter(Valid == "false")

# Outliers -- remove ps who are greater than 3 SDs away from the M for each task
  # the tasks & their acronyms:
    # Digit Span (DS), Double Trouble (DT), Feature Match (FM), Grammatical Reasoning (GR), Monkey Ladder (ML), Odd One Out (OOO), 
    # Paired Associates (PA), Polygons (P), Rotations (R), Spatial Planning (SP), Spatial Span (SS), Token Search (TS)
# Digit Span (DS)
CBS_ex_out_DS <- 
  CBS_data %>% 
  # select the task in question
  filter(Test.Name == "Digit Span") %>% 
  # remove ps that have > 3SD from the mean
  filter(Score > (mean(Score) + 3*sd(Score)) | 
  # remove ps that have < 3SD from the mean
         Score < (mean(Score) - 3*sd(Score)))
# Double Trouble (DT)
CBS_ex_out_DT <- CBS_data %>% filter(Test.Name == "Double Trouble") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Feature Match (FM) 
CBS_ex_out_FM <- CBS_data %>% filter(Test.Name == "Feature Match") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Grammatical Reasoning (GR)
CBS_ex_out_GR <- CBS_data %>% filter(Test.Name == "Grammatical Reasoning") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Monkey Ladder (ML)
CBS_ex_out_ML <- CBS_data %>% filter(Test.Name == "Monkey Ladder") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Odd One Out (OOO)
CBS_ex_out_OOO <- CBS_data %>% filter(Test.Name == "Odd One Out") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Paired Associates (PA)
CBS_ex_out_PA <- CBS_data %>% filter(Test.Name == "Paired Associates") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Polygons (P)
CBS_ex_out_P <- CBS_data %>% filter(Test.Name == "Polygons") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Rotations (R)
CBS_ex_out_R <- CBS_data %>% filter(Test.Name == "Rotations") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Spatial Planning (SP)
CBS_ex_out_SP <- CBS_data %>% filter(Test.Name == "Spatial Planning") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Spatial Span (SS)
CBS_ex_out_SS <- CBS_data %>% filter(Test.Name == "Spatial Span") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))

# Token Search (TS)
CBS_ex_out_TS <- CBS_data %>% filter(Test.Name == "Token Search") %>% filter(Score > (mean(Score) + 3*sd(Score)) | Score < (mean(Score) - 3*sd(Score)))
    
# create list of ps to remove with reason for removal -- CBS_remove
CBS_remove <- 
  # bind the ps who will be removed
  rbind(CBS_ex_out_DS, CBS_ex_out_DT, CBS_ex_out_FM, CBS_ex_out_GR, CBS_ex_out_ML, CBS_ex_out_OOO, 
        CBS_ex_out_PA, CBS_ex_out_P, CBS_ex_out_R, CBS_ex_out_SP, CBS_ex_out_SS, CBS_ex_out_TS) %>% 
  # group by task
  group_by(Test.Name) %>% 
  # count by participant number
  dplyr::count(User.Email) %>% 
  select(-n)


# create list of ps to remove without duplicates to use to filter final data
CBS_remove_list <- 
  CBS_remove %>% 
  # based on User.Email
  select(User.Email) %>% 
  # remove any duplicated participant IDs
  distinct()
Adding missing grouping variables: `Test.Name`
# show table of outliers by task using kable
kable(plyr::count(CBS_remove$Test.Name), caption = "Frequency table of CBS Tasks with Outlier Scores", align = rep('c'), col.names = c("Task", "Outlier Scores"), row.names = TRUE) %>% 
  footnote(general = "Participants who had any non-valid scores were removed form the final analyses. Not all tasks had a non-valid score.") %>% 
  column_spec(2, bold = T) %>%
  row_spec(0, bold = T) %>% 
  # column_spec(9, border_left = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency table of CBS Tasks with Outlier Scores
Task Outlier Scores
1 Digit Span 3
2 Grammatical Reasoning 1
3 Monkey Ladder 2
4 Odd One Out 3
5 Polygons 1
6 Rotations 2
7 Spatial Planning 2
8 Spatial Span 2
9 Token Search 7
Note:
Participants who had any non-valid scores were removed form the final analyses. Not all tasks had a non-valid score.

Make Final CBS Removal List (validity & outliers)

# clean CBS_data using CBS_remove_list
CBS_data_noout <- 
  # no outliers removed + valid & invalid
    # CBS_data
  # outliers removed + valid & invalid
    # CBS_data %>% filter(!User.Email %in% CBS_remove_list$User.Email)
  # no outliers removed + valid only
    # CBS_data %>% filter(!User.Email %in% CBS_ex_notvalid_list)
  # outliers removed + valid only
    CBS_data %>% filter(!User.Email %in% CBS_remove_list$User.Email) %>% filter(!User.Email %in% CBS_ex_notvalid_list)

# get list of ps with all 12 tasks after removing outliers
  # get frequency counts of number of tasks per p
  CBS_tasknum_p_freq <- CBS_data_noout %>% dplyr::count(User.Email) %>% filter(n != 12)
  # remove any ps with less than 12 tasks
  CBS_data_final <- 
    CBS_data_noout %>%
    filter(!User.Email %in% CBS_tasknum_p_freq$User.Email)


# compare frequency tables form before to after p removal
# get frequency tables
  # before removal
  CBS_p_freq <- plyr::count(CBS_data$Test.Name)
  # after outlier removal
  CBS_noout_p_freq <- plyr::count(CBS_data_noout$Test.Name)
  # after removing incomplete ps
  CBS_final_p_freq <- plyr::count(CBS_data_final$Test.Name)
# join into 1 table
CBS_compare_p_freq_t <- 
  data.frame("task" = CBS_p_freq$x, "freq_intitial" = CBS_p_freq$freq, "freq_noout" = CBS_noout_p_freq$freq, "freq_final" = CBS_final_p_freq$freq, "removed" = (CBS_p_freq$freq - CBS_noout_p_freq$freq), "missing" = (CBS_noout_p_freq$freq - CBS_final_p_freq$freq))

# show table using kable
kable(CBS_compare_p_freq_t, caption = "Frequency table of CBS Tasks before and after extreme outliers removed.", align = rep('rccccc'),
      col.names = c("Task", "Initial", "No Outliers", "Final", "Outliers", "Missing Task(s)"), row.names = TRUE) %>% 
  footnote(general = "Extreme outlier defined as any score that was >3SD from the mean. Final sample size ensured all participants completed all 12 CBS tasks.") %>% 
  add_header_above(c(" " = 2, "Sample Size" = 3, "Removed N" = 2), bold = T) %>% 
  column_spec(2, bold = T) %>%
  column_spec(5, border_right = T) %>% 
  row_spec(0, bold = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency table of CBS Tasks before and after extreme outliers removed.
Sample Size
Removed N
Task Initial No Outliers Final Outliers Missing Task(s)
1 Digit Span 295 259 258 36 1
2 Double Trouble 296 260 258 36 2
3 Feature Match 295 259 258 36 1
4 Grammatical Reasoning 293 259 258 34 1
5 Monkey Ladder 293 259 258 34 1
6 Odd One Out 295 259 258 36 1
7 Paired Associates 295 259 258 36 1
8 Polygons 295 259 258 36 1
9 Rotations 293 259 258 34 1
10 Spatial Planning 295 259 258 36 1
11 Spatial Span 293 259 258 34 1
12 Token Search 295 259 258 36 1
Note:
Extreme outlier defined as any score that was >3SD from the mean. Final sample size ensured all participants completed all 12 CBS tasks.

Linking Main Study Data

Next, we linked the data between the different data sets: “main_sur_data”, “tracking_data_temp”, “CBS_data_final”

  • main_sur_data has the following variables: StartDate, EndDate, Progress, duration_sec, Finished, RecordedDate, LocationLatitude, LocationLongitude, date_sur, participant, type, CBS_know, CBS_done_tasks, age, gender, genderO, lang, langO, prof, program, programO, year, age_first_phone, app_most_used, app_most_usedO, app_most_used_text, iphone, ST_app_most_used, ST_app_most_usedO, ST_app_text_mess, ST_weekly_tot_hours, ST_daily_pickups, ST_daily_not, phone_value, phantom, dist_daily, dist_study, dist_device, dist_deviceO, dist_device_studywork, dist_device_studyworkO, dist_device_social, dist_device_socialO, pow_not_using, pow_notifications_on, pow_vibrate, pow_study, pow_exam, pow_lec, pow_sleep, loc_typical, loc_study, loc_exam, loc_lec, loc_social, com_gen, com_unattended, com_leave_with_other, com_locked, com_room_task, communicate, communicateO, phone_use, phone_useO, NMPQ_1, NMPQ_2, NMPQ_3, NMPQ_4, NMPQ_5, NMPQ_6, NMPQ_7, NMPQ_8, NMPQ_9, NMPQ_10, NMPQ_11, NMPQ_12, NMPQ_13, NMPQ_14, NMPQ_15, NMPQ_16, NMPQ_17, NMPQ_18, NMPQ_19, NMPQ_20, MPIQ_1, MPIQ_2, MPIQ_3, MPIQ_4, MPIQ_5, MPIQ_6, MPIQ_7, MPIQ_8, MPIQ_SI_1, MPIQ_SI_2, MPIQ_SI_3, MPIQ_VFO_1, MPIQ_VFO_2, MPIQ_VFO_3, SAD_1, SAD_2, SAD_3, SAD_4, SAD_5, SAD_6, SAD_7, SAD_8, SAD_9, SAD_10, SAD_11, SAD_12, SAD_13, MPIQ_VFO_2R, NMPQ_sum, mean(c_across(NMPQ_1:NMPQ_20)), MPIQ_sum, MPIQ_mean, MPIQ_SI_sum, MPIQ_SI_mean, MPIQ_VFO_sum, MPIQ_VFO_mean, SAD_sum, SAD_mean, SAD_dep_sum, SAD_dep_mean, SAD_ea_sum, SAD_ea_mean, SAD_access_sum, SAD_access_mean, SAD_dist_sum, SAD_dist_mean, SAD_Wdep_sum, SAD_Wea_sum
    • At this point, this file has 295 participants
  • tracking_data_temp has the following variables: date, time, participant, type, condition, valid, exp_initials_main, exp_initials_secondary
    • At this point, this file has 275 participants
  • CBS_data_final has the following variables: Id, User, User.Email, Test, Test.Name, Locale, Skipped, Version, Tutorial.Version, Trial, Trial.Name, Batch, Batch.Name, Batch.Page, Time.Point, Load.Count, User.Agent, Device.Type, Browser, Os, Screen.Height, Screen.Width, Created.At, Updated.At, Score, Raw.Score, Percentile, Valid, Legacy.Raw.Score, Legacy.Raw.Data, Session.Data, Report
    • At this point, this file has 258 participants
# start by removing unwanted columns from CBS_final_data to make things more simple...
CBS_data_final_simple <- 
  CBS_data_final %>% 
  select(User.Email, Test.Name, Score, Raw.Score, Percentile)

# next, change CBS data to wide format
CBS_data_finalW <- 
  # use simplified data
  CBS_data_final_simple %>% 
  # perform the long>wide function for each participant
  group_by(User.Email) %>% 
  # make data wide
  pivot_wider(names_from = Test.Name, # Variable whose values will be converted to column names -- enter multiple with "c()"
              values_from = c(Score, Raw.Score, Percentile)) %>%  # Variable whose values will populate the table’s block of cell values.
  # rename "User.Email" as "participant" to link files
  dplyr::rename(participant = User.Email) 
  
  # change scores to numeric 


# since CBS has been reduced the most, use a list from CBS_data_final
  # create freq list from CBS_data_final
  # note: this list may include ps who were remove either in tracking or survey components
# main_all_participants <- plyr::count(c(main_sur_data$participant, CBS_data_finalW$participant, tracking_data_temp$participant)) %>% filter(freq == 3) ##fix to use later... 

# link all data b/w the 3 data files
main_all_data <- 
  main_sur_data %>% inner_join(CBS_data_finalW, by = "participant") %>% inner_join(tracking_data_temp, by = "participant")

Get z scores for CBs tasks…

# get z score for each CBS tasks

# Digit Span (DS)
ZScore_DS = as.numeric(scale(main_all_data$`Score_Digit Span`))
ZRaw_DS = as.numeric(scale(main_all_data$`Raw.Score_Digit Span`))

# Double Trouble (DT)
ZScore_DT = as.numeric(scale(main_all_data$`Score_Double Trouble`))
ZRaw_DT = as.numeric(scale(main_all_data$`Raw.Score_Double Trouble`))

# Feature Match (FM)
ZScore_FM = as.numeric(scale(main_all_data$`Score_Feature Match`))
ZRaw_FM = as.numeric(scale(main_all_data$`Raw.Score_Feature Match`))

# Grammatical Reasoning (GR)
ZScore_GR = as.numeric(scale(main_all_data$`Score_Grammatical Reasoning`))
ZRaw_GR = as.numeric(scale(main_all_data$`Raw.Score_Grammatical Reasoning`))

# Monkey Ladder (ML)
ZScore_ML = as.numeric(scale(main_all_data$`Score_Monkey Ladder`))
ZRaw_ML = as.numeric(scale(main_all_data$`Raw.Score_Monkey Ladder`))

# Odd One Out (OOO)
ZScore_OOO = as.numeric(scale(main_all_data$`Score_Odd One Out`))
ZRaw_OOO = as.numeric(scale(main_all_data$`Raw.Score_Odd One Out`))

# Paired Associates (PA)
ZScore_PA = as.numeric(scale(main_all_data$`Score_Paired Associates`))
ZRaw_PA = as.numeric(scale(main_all_data$`Raw.Score_Paired Associates`))

# Polygons (P)
ZScore_P = as.numeric(scale(main_all_data$Score_Polygons))
ZRaw_P = as.numeric(scale(main_all_data$Raw.Score_Polygons))

# Rotations (R)
ZScore_R = as.numeric(scale(main_all_data$Score_Rotations))
ZRaw_R = as.numeric(scale(main_all_data$Raw.Score_Rotations))

# Spatial Planning (SP)
ZScore_SP = as.numeric(scale(main_all_data$`Score_Spatial Planning`))
ZRaw_SP = as.numeric(scale(main_all_data$`Raw.Score_Spatial Planning`))

# Spatial Span (SS)
ZScore_SS = as.numeric(scale(main_all_data$`Score_Spatial Span`))
ZRaw_SS = as.numeric(scale(main_all_data$`Raw.Score_Spatial Planning`))

# Token Search (TS)
ZScore_TS = as.numeric(scale(main_all_data$`Score_Token Search`))
ZRaw_TS = as.numeric(scale(main_all_data$`Raw.Score_Token Search`))

# add z-score all CBS scores (& Raw scores) to main data -- creating "main_data_final"
  # mutate_at(var(starts_with("Score")), funs(scale)) ## wont work, needs "selecting" function...
  # mutate(ScoreZ_DS = scale(`Score_Digit Span`))
  # mutate_at(vars(starts_with("Score")), list(z = ~as.vector(scale(.))))
main_all_data_final <- 
  # join main data & new zscores
  cbind(main_all_data, ZScore_DS, ZRaw_DS, ZScore_DT, ZRaw_DT, ZScore_FM, ZRaw_FM, ZScore_GR, ZRaw_GR, ZScore_ML, ZRaw_ML, ZScore_OOO, ZRaw_OOO, ZScore_PA, ZRaw_PA, ZScore_P, ZRaw_P, ZScore_R, ZRaw_R, ZScore_SP, ZRaw_SP, ZScore_SS, ZRaw_SS, ZScore_TS, ZRaw_TS) %>%
  
  # for each p...
  rowwise() %>% 
  # add composite score -- overall CBS score
  dplyr::mutate(CBS_overall = (sum(ZScore_DS, ZScore_DT, ZScore_FM, ZScore_GR, ZScore_ML, ZScore_OOO, ZScore_PA, ZScore_P, ZScore_R, ZScore_SP, ZScore_SS, ZScore_TS))/12) %>% 
  # add composite score -- overall CBS raw score
  dplyr::mutate(CBS_overallR = (sum(ZRaw_DS, ZRaw_DT, ZRaw_FM, ZRaw_GR, ZRaw_ML, ZRaw_OOO, ZRaw_PA, ZRaw_P, ZRaw_R, ZRaw_SP, ZRaw_SS, ZRaw_TS))/12) %>% 
  
  ## FROM HAMPSHIRE ET AL. (2012) --PCA (DATA-DRIVEN)
  # add composite score -- STM CBS score
  dplyr::mutate(CBS_STM = (sum(ZScore_ML, ZScore_PA, ZScore_SS, ZScore_TS))/4) %>%
  # add composite score -- STM CBS raw score
  dplyr::mutate(CBS_STMR = (sum(ZRaw_ML, ZRaw_PA, ZRaw_SS, ZRaw_TS))/4) %>%

  # add composite score -- Reasoning CBS score
  dplyr::mutate(CBS_reason = (sum(ZScore_FM, ZScore_OOO, ZScore_P, ZScore_R, ZScore_SP))/5) %>%
  # add composite score -- Reasoning CBS raw score
  dplyr::mutate(CBS_reasonR = (sum(ZRaw_FM, ZRaw_OOO, ZRaw_P, ZRaw_R, ZRaw_SP))/5) %>%

  # add composite score -- Verbal CBS score
  dplyr::mutate(CBS_verbal = (sum(ZScore_GR, ZScore_DS, ZScore_DT))/3) %>%
  # add composite score -- Verbal CBS raw score
  dplyr::mutate(CBS_verbalR = (sum(ZRaw_DS, ZRaw_DT, ZRaw_GR))/3) %>%
  
  ## FROM CBS TASK SELECTION GUIDE --CONCEPTS (FOR CLINICAL APPS)
  # add composite score -- MEMORY CBS score
  dplyr::mutate(CBS_ts_memory = (sum(ZScore_ML, ZScore_SS, ZScore_TS, ZScore_PA))/4) %>% 
  # add composite score -- MEMORY CBS raw score
  dplyr::mutate(CBS_ts_memoryR = (sum(ZRaw_ML, ZRaw_SS, ZRaw_TS, ZRaw_PA))/4) %>% 
  
  # add composite score -- REASONING CBS score
  dplyr::mutate(CBS_ts_reason = (sum(ZScore_P, ZScore_R, ZScore_OOO, ZScore_SP))/4) %>% 
  # add composite score -- REASONING CBS raw score
  dplyr::mutate(CBS_ts_reasonR = (sum(ZRaw_P, ZRaw_R, ZRaw_OOO, ZRaw_SP))/4) %>% 
  
  # add composite score -- VERBAL ABILITY CBS score
  dplyr::mutate(CBS_ts_verbalab = (sum(ZScore_GR, ZScore_DS))/2) %>% 
  # add composite score -- VERBAL ABILITY CBS raw score
  dplyr::mutate(CBS_ts_verbalabR = (sum(ZRaw_GR, ZRaw_DS))/2) %>% 
  
  # add composite score -- CONCENTRATION CBS score
  dplyr::mutate(CBS_ts_con = (sum(ZScore_FM, ZScore_DT))/2) %>% 
  # add composite score -- CONCENTRATION CBS raw score
  dplyr::mutate(CBS_ts_conR = (sum(ZRaw_FM, ZRaw_DT))/2)

Matrix Composite Scores (Alternative)

These scores were calculated as in Wild et al. (2018), where the normalized scores for each CBS test are then transformed into 3 separate composite scores using the formula:

\[Y = X (Ar^+)^T\] where:

  • \(Y\) = \(N\) x 3 matrix of the composite scores (STM, Reasoning, Verbal)
  • \(X\) = \(N\) x 12 matrix of the 12 CBS test z-scores
  • \(Ar\) = 12 x 3 matrix of varimax-rotated factor weights / loading from Hampshire et al. (2012).

The factor structure used was as follows:

Factor structure used in Wild et al. (2018) from Hampshire et al. (2012)

Therefore, each composite score encompasses all 12 CBS tests, weighted by their respective factor loading.

# # add composite scores based on matrix calculations -- FOR NOW THEY REPLACE THE ORIGINAL STM, REASON, and VERBAL
# get data from main_all_data_final
  # this is the "X" in the eq
matrix_scoreX <-
  # use "contains()" to use a string to select based on that pattern
  main_all_data_final %>% dplyr::select(contains("ZScore_")) %>%
  # re order variables to match Hampshire et al. (2012) for easier comparison...
  select(ZScore_SS, ZScore_ML, ZScore_TS, ZScore_PA, ZScore_SP, ZScore_R, ZScore_FM, ZScore_P, ZScore_OOO, ZScore_DS, ZScore_GR, ZScore_DT)

# transpose the matrix so that it is 12 rows by N cols 
  # this replaces the original
matrix_scoreX <- t(as.matrix(matrix_scoreX))

# make matrix with factor structure 
  # result is a matrix with 12 rows and 3 columns, which depict the loadings for STM, Reasoning, and Verbal
  # this is the "Ar+" in the eq
matrix_factorAr <- cbind(c(.70, .70, .60, .60, .40, .12, .00, .20, .17, .22, .06, .27), 
                         c(.21, .23, .18, -.03, .46, .67, .52, .55, .55, .35, .32, -.21), 
                         c(.06, .05, .18, .23, .04, .09, .34, -.11, .22, .53, .66, .71))

# calculate the composite scores using the equation
  # this used matrix multiplication (i.e., a dot product b/w the 2 matrices)
  # this is the "Y" in the eq
scoresY <- t(t(matrix_factorAr) %*% matrix_scoreX)
  # make scores a tibble
  scoresY <- as.tibble(scoresY)
  # rename cols
  colnames(scoresY) <- c("CBS_STM", "CBS_reason", "CBS_verbal")

# make new main data file to be used with this data (if needed)
  # named: "main_all_data_final_wild"

  # first, copy the final data set
  main_all_data_final_wild <- main_all_data_final
  
  # next, replace the existing CBS_STM, CBS_reason, and CBS_verbal with new versions
  main_all_data_final_wild$CBS_STM = scoresY$CBS_STM
  main_all_data_final_wild$CBS_reason = scoresY$CBS_reason
  main_all_data_final_wild$CBS_verbal = scoresY$CBS_verbal

# use to quickly view all composite scores from final & final temp data files (to visually inspect)
  # cbind(main_all_data_final$participant, 
  #       main_all_data_final$CBS_STM, 
  #       main_all_data_final_wild$CBS_STM,
  #       main_all_data_final$CBS_reason, 
  #       main_all_data_final_wild$CBS_reason,
  #       main_all_data_final$CBS_verbal, 
  #       main_all_data_final_wild$CBS_verbal)

Descriptives

NOMINAL (study 1 & study 2)

Demographic & Typical Smartphone Use


# output is a list of tibbles, each with: $xxx = var name, x = level(s), n = count, pct = percentage

## FOR PILOT DATA
pilot_nom_demo <- 
  pilot_sur_data %>% 
  # get subset of data with only nominal vars
  select(gender, lang, prof, program, year, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
  # get freq & proportion for each var
  purrr::map(~ count(tibble(x = .x), x) %>% 
               mutate(pct = (n / sum(n) * 100)))

# make list into 1 long data frame to show as table...
pilot_nom_demo_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(pilot_nom_demo, bind_rows, .id = "tib")

# ## FOR PILOT DATA
# pilot_nom_demo <- 
#   pilot_sur_data %>% 
#   # get subset of data with only nominal vars
#   select(gender, lang, prof, program, year, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
#   summarise(across(gender:phone_use, count))
#   map(count) %>% 
#   lapply(x, mutate(percent = (freq/sum(freq)*100)))
#   map(x, mutate(percent = (freq/sum(freq)*100)))
#   mutate(percent = )
#   
#   
#   summarise(n = n())
#   # get freq & proportion for each var
#   # purrr::map(~ count(tibble(x = .x), x) %>% 
#   #              mutate(pct = (n / sum(n) * 100)))
# 
# # y <- x %>% 
#   purrr::map(count, )
# 
# # make list into 1 long data frame to show as table...
# pilot_nom_demo_t <- 
#   # this keeps the var name in the 1st column (using-- .id = "tib")
#   map_dfr(pilot_nom_demo, bind_rows, .id = "tib")



## FOR MAIN DATA -- OVERALL
main_nom_demo <- 
main_all_data_final %>% 
  # get subset of nominal vars
  select(condition, gender, lang, prof, program, year, CBS_know, CBS_done_tasks, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
  purrr::map(~ count(tibble(x = .x), x) %>%
               mutate(pct = (n / sum(n) * 100)))
# make list into 1 long data frame to show as table...
main_nom_demo_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(main_nom_demo, bind_rows, .id = "tib")

## FOR MAIN DATA -- DESK
main_nom_demo_desk <- 
main_all_data_final %>% 
  # get subset of nominal vars
  select(condition, gender, lang, prof, program, year, CBS_know, CBS_done_tasks, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
  # for desk condition
  filter(condition == "desk") %>% 
  purrr::map(~ count(tibble(x = .x), x) %>%
               mutate(pct = (n / sum(n) * 100)))
# make list into 1 long data frame to show as table...
main_nom_demo_desk_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(main_nom_demo_desk, bind_rows, .id = "tib")

## FOR MAIN DATA -- POCKET/BAG
main_nom_demo_pb <- 
main_all_data_final %>% 
  # get subset of nominal vars
  select(condition, gender, lang, prof, program, year, CBS_know, CBS_done_tasks, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
  # for pocket/bag condition
  filter(condition == "pocket/bag") %>% 
  purrr::map(~ count(tibble(x = .x), x) %>%
               mutate(pct = (n / sum(n) * 100)))
# make list into 1 long data frame to show as table...
main_nom_demo_pb_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(main_nom_demo_pb, bind_rows, .id = "tib")

## FOR MAIN DATA -- OUTSIDE
main_nom_demo_out <- 
main_all_data_final %>% 
  # get subset of nominal vars
  select(condition, gender, lang, prof, program, year, CBS_know, CBS_done_tasks, app_most_used, iphone, ST_app_most_used, ST_app_text_mess:phantom, dist_device, dist_device_studywork, dist_device_social, loc_typical:loc_social, communicate, phone_use) %>% 
  # for pocket/bag condition
  filter(condition == "outside") %>% 
  purrr::map(~ count(tibble(x = .x), x) %>%
               mutate(pct = (n / sum(n) * 100)))
# make list into 1 long data frame to show as table...
main_nom_demo_out_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(main_nom_demo_out, bind_rows, .id = "tib")
kable(pilot_nom_demo_t, caption = "Frequency & percentage for nominal vars - demo- STUDY 1.", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - demo- STUDY 1.
Var level n %
1 gender Male 59 48.3606557
2 gender Female 63 51.6393443
3 lang English 85 69.6721311
4 lang Other 37 30.3278689
5 prof Moderate 23 18.8524590
6 prof High 99 81.1475410
7 program Arts & Humanities 4 3.2786885
8 program Music 2 1.6393443
9 program Engineering 1 0.8196721
10 program Haalth Science 11 9.0163934
11 program Information & Media Studies 2 1.6393443
12 program Business 21 17.2131148
13 program Science 45 36.8852459
14 program Social Science 36 29.5081967
15 year First Year 88 72.1311475
16 year Second Year 14 11.4754098
17 year Third Year 5 4.0983607
18 year Fourth Year 10 8.1967213
19 year Fifth Year+ 4 3.2786885
20 year Graduate Student 1 0.8196721
21 app_most_used Games 4 3.2786885
22 app_most_used Social Networking 101 82.7868852
23 app_most_used Entertainment 17 13.9344262
24 iphone yes 97 79.5081967
25 iphone no 25 20.4918033
26 ST_app_most_used Games 7 5.7377049
27 ST_app_most_used Social Networking 75 61.4754098
28 ST_app_most_used Entertainment 15 12.2950820
29 ST_app_most_used NA 25 20.4918033
30 ST_app_text_mess yes 39 31.9672131
31 ST_app_text_mess no 58 47.5409836
32 ST_app_text_mess NA 25 20.4918033
33 ST_weekly_tot_hours 0-10 8 6.5573770
34 ST_weekly_tot_hours 11-20 21 17.2131148
35 ST_weekly_tot_hours 21-30 24 19.6721311
36 ST_weekly_tot_hours 31-40 18 14.7540984
37 ST_weekly_tot_hours 40+ 26 21.3114754
38 ST_weekly_tot_hours NA 25 20.4918033
39 ST_daily_pickups 0-50 11 9.0163934
40 ST_daily_pickups 51-100 33 27.0491803
41 ST_daily_pickups 101-150 30 24.5901639
42 ST_daily_pickups 151-200 15 12.2950820
43 ST_daily_pickups 200+ 8 6.5573770
44 ST_daily_pickups NA 25 20.4918033
45 ST_daily_not 0-50 16 13.1147541
46 ST_daily_not 51-100 15 12.2950820
47 ST_daily_not 101-150 13 10.6557377
48 ST_daily_not 151-200 15 12.2950820
49 ST_daily_not 200+ 38 31.1475410
50 ST_daily_not NA 25 20.4918033
51 phone_value $0-$20 38 31.1475410
52 phone_value $21-$40 26 21.3114754
53 phone_value $41-$60 22 18.0327869
54 phone_value >$60 36 29.5081967
55 phantom yes 100 81.9672131
56 phantom no 22 18.0327869
57 dist_device Computer 10 8.1967213
58 dist_device Phone 107 87.7049180
59 dist_device iPad/Tablet 4 3.2786885
60 dist_device Other 1 0.8196721
61 dist_device_studywork Computer 14 11.4754098
62 dist_device_studywork Phone 104 85.2459016
63 dist_device_studywork iPad/Tablet 4 3.2786885
64 dist_device_social Computer 4 3.2786885
65 dist_device_social Phone 117 95.9016393
66 dist_device_social Smartwatch 1 0.8196721
67 loc_typical On my desk 53 43.4426230
68 loc_typical In my pocket or bag 69 56.5573770
69 loc_study On my desk 85 69.6721311
70 loc_study In my pocket or bag 33 27.0491803
71 loc_study In another room 4 3.2786885
72 loc_exam On my desk 3 2.4590164
73 loc_exam In my pocket or bag 111 90.9836066
74 loc_exam In another room 8 6.5573770
75 loc_lec On my desk 41 33.6065574
76 loc_lec In my pocket or bag 80 65.5737705
77 loc_lec In another room 1 0.8196721
78 loc_social On my desk 35 28.6885246
79 loc_social In my pocket or bag 87 71.3114754
80 communicate Family 11 9.0163934
81 communicate Friends 110 90.1639344
82 communicate Work 1 0.8196721
83 phone_use Calling/Texting 21 17.2131148
84 phone_use Social Media 95 77.8688525
85 phone_use Games 2 1.6393443
86 phone_use Other 4 3.2786885
Note:
There was no task completed during study 1.

kable(plyr::count(as.factor(pilot_sur_data$langO)), caption = "Frequency for nominal vars - LANG OTHER- STUDY 1.", align = rep('crcc'), col.names = c("Language", "freq"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency for nominal vars - LANG OTHER- STUDY 1.
Language freq
1 85
2 arabic 1
3 Arabic 1
4 Bangla 1
5 chinese 2
6 Chinese 18
7 Chinese 2
8 Farsi 1
9 korean 1
10 Mandarin 5
11 Mandarin 1
12 Mandarin Chinese 1
13 Persian 1
14 Russian 2
Note:
There was no task completed during study 1.

kable(main_nom_demo_t, caption = "Frequency & percentage for nominal vars - demo- STUDY 2 OVERALL", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - demo- STUDY 2 OVERALL
Var level n %
1 condition desk 75 31.6455696
2 condition pocket/bag 85 35.8649789
3 condition outside 77 32.4894515
4 gender Male 73 30.8016878
5 gender Female 164 69.1983122
6 lang English 181 76.3713080
7 lang Other 56 23.6286920
8 prof Moderate 24 10.1265823
9 prof High 213 89.8734177
10 program Arts & Humanities 5 2.1097046
11 program Music 1 0.4219409
12 program Haalth Science 36 15.1898734
13 program Information & Media Studies 8 3.3755274
14 program Business 35 14.7679325
15 program Science 81 34.1772152
16 program Social Science 70 29.5358650
17 program Other 1 0.4219409
18 year First Year 200 84.3881857
19 year Second Year 22 9.2827004
20 year Third Year 6 2.5316456
21 year Fourth Year 8 3.3755274
22 year Fifth Year+ 1 0.4219409
23 CBS_know yes 27 11.3924051
24 CBS_know no 210 88.6075949
25 CBS_done_tasks yes 49 20.6751055
26 CBS_done_tasks no 188 79.3248945
27 app_most_used Games 2 0.8438819
28 app_most_used Social Networking 179 75.5274262
29 app_most_used Entertainment 53 22.3628692
30 app_most_used Other 3 1.2658228
31 iphone yes 158 66.6666667
32 iphone no 79 33.3333333
33 ST_app_most_used Games 3 1.2658228
34 ST_app_most_used Social Networking 117 49.3670886
35 ST_app_most_used Entertainment 34 14.3459916
36 ST_app_most_used Other 4 1.6877637
37 ST_app_most_used NA 79 33.3333333
38 ST_app_text_mess yes 43 18.1434599
39 ST_app_text_mess no 115 48.5232068
40 ST_app_text_mess NA 79 33.3333333
41 ST_weekly_tot_hours 0-10 35 14.7679325
42 ST_weekly_tot_hours 11-20 34 14.3459916
43 ST_weekly_tot_hours 21-30 45 18.9873418
44 ST_weekly_tot_hours 31-40 29 12.2362869
45 ST_weekly_tot_hours 40+ 15 6.3291139
46 ST_weekly_tot_hours NA 79 33.3333333
47 ST_daily_pickups 0-50 20 8.4388186
48 ST_daily_pickups 51-100 43 18.1434599
49 ST_daily_pickups 101-150 52 21.9409283
50 ST_daily_pickups 151-200 24 10.1265823
51 ST_daily_pickups 200+ 19 8.0168776
52 ST_daily_pickups NA 79 33.3333333
53 ST_daily_not 0-50 14 5.9071730
54 ST_daily_not 51-100 32 13.5021097
55 ST_daily_not 101-150 29 12.2362869
56 ST_daily_not 151-200 20 8.4388186
57 ST_daily_not 200+ 63 26.5822785
58 ST_daily_not NA 79 33.3333333
59 phone_value $0-$20 88 37.1308017
60 phone_value $21-$40 54 22.7848101
61 phone_value $41-$60 48 20.2531646
62 phone_value >$60 47 19.8312236
63 phantom yes 181 76.3713080
64 phantom no 56 23.6286920
65 dist_device Computer 14 5.9071730
66 dist_device Phone 216 91.1392405
67 dist_device iPad/Tablet 4 1.6877637
68 dist_device Smartwatch 3 1.2658228
69 dist_device_studywork Computer 24 10.1265823
70 dist_device_studywork Phone 208 87.7637131
71 dist_device_studywork iPad/Tablet 2 0.8438819
72 dist_device_studywork Smartwatch 3 1.2658228
73 dist_device_social Computer 4 1.6877637
74 dist_device_social Phone 229 96.6244726
75 dist_device_social iPad/Tablet 1 0.4219409
76 dist_device_social Smartwatch 2 0.8438819
77 dist_device_social Other 1 0.4219409
78 loc_typical On my desk 79 33.3333333
79 loc_typical In my pocket or bag 158 66.6666667
80 loc_study On my desk 178 75.1054852
81 loc_study In my pocket or bag 43 18.1434599
82 loc_study In another room 16 6.7510549
83 loc_exam On my desk 1 0.4219409
84 loc_exam In my pocket or bag 216 91.1392405
85 loc_exam In another room 20 8.4388186
86 loc_lec On my desk 76 32.0675105
87 loc_lec In my pocket or bag 161 67.9324895
88 loc_social On my desk 36 15.1898734
89 loc_social In my pocket or bag 198 83.5443038
90 loc_social In another room 3 1.2658228
91 communicate Family 35 14.7679325
92 communicate Friends 200 84.3881857
93 communicate Work 1 0.4219409
94 communicate Other 1 0.4219409
95 phone_use Calling/Texting 59 24.8945148
96 phone_use Social Media 166 70.0421941
97 phone_use Games 5 2.1097046
98 phone_use Email 2 0.8438819
99 phone_use Other 5 2.1097046
Note:
There was no task completed during study 1.

kable(main_nom_demo_desk_t, caption = "Frequency & percentage for nominal vars - demo- STUDY 2 - DESK", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - demo- STUDY 2 - DESK
Var level n %
1 condition desk 75 100.000000
2 gender Male 26 34.666667
3 gender Female 49 65.333333
4 lang English 60 80.000000
5 lang Other 15 20.000000
6 prof Moderate 8 10.666667
7 prof High 67 89.333333
8 program Arts & Humanities 1 1.333333
9 program Haalth Science 18 24.000000
10 program Information & Media Studies 1 1.333333
11 program Business 14 18.666667
12 program Science 26 34.666667
13 program Social Science 14 18.666667
14 program Other 1 1.333333
15 year First Year 62 82.666667
16 year Second Year 6 8.000000
17 year Third Year 4 5.333333
18 year Fourth Year 3 4.000000
19 CBS_know yes 9 12.000000
20 CBS_know no 66 88.000000
21 CBS_done_tasks yes 15 20.000000
22 CBS_done_tasks no 60 80.000000
23 app_most_used Social Networking 53 70.666667
24 app_most_used Entertainment 22 29.333333
25 iphone yes 56 74.666667
26 iphone no 19 25.333333
27 ST_app_most_used Games 1 1.333333
28 ST_app_most_used Social Networking 39 52.000000
29 ST_app_most_used Entertainment 15 20.000000
30 ST_app_most_used Other 1 1.333333
31 ST_app_most_used NA 19 25.333333
32 ST_app_text_mess yes 15 20.000000
33 ST_app_text_mess no 41 54.666667
34 ST_app_text_mess NA 19 25.333333
35 ST_weekly_tot_hours 0-10 13 17.333333
36 ST_weekly_tot_hours 11-20 10 13.333333
37 ST_weekly_tot_hours 21-30 15 20.000000
38 ST_weekly_tot_hours 31-40 12 16.000000
39 ST_weekly_tot_hours 40+ 6 8.000000
40 ST_weekly_tot_hours NA 19 25.333333
41 ST_daily_pickups 0-50 8 10.666667
42 ST_daily_pickups 51-100 12 16.000000
43 ST_daily_pickups 101-150 22 29.333333
44 ST_daily_pickups 151-200 10 13.333333
45 ST_daily_pickups 200+ 4 5.333333
46 ST_daily_pickups NA 19 25.333333
47 ST_daily_not 0-50 5 6.666667
48 ST_daily_not 51-100 11 14.666667
49 ST_daily_not 101-150 12 16.000000
50 ST_daily_not 151-200 8 10.666667
51 ST_daily_not 200+ 20 26.666667
52 ST_daily_not NA 19 25.333333
53 phone_value $0-$20 30 40.000000
54 phone_value $21-$40 17 22.666667
55 phone_value $41-$60 16 21.333333
56 phone_value >$60 12 16.000000
57 phantom yes 59 78.666667
58 phantom no 16 21.333333
59 dist_device Computer 5 6.666667
60 dist_device Phone 68 90.666667
61 dist_device Smartwatch 2 2.666667
62 dist_device_studywork Computer 8 10.666667
63 dist_device_studywork Phone 65 86.666667
64 dist_device_studywork Smartwatch 2 2.666667
65 dist_device_social Phone 74 98.666667
66 dist_device_social Smartwatch 1 1.333333
67 loc_typical On my desk 26 34.666667
68 loc_typical In my pocket or bag 49 65.333333
69 loc_study On my desk 55 73.333333
70 loc_study In my pocket or bag 16 21.333333
71 loc_study In another room 4 5.333333
72 loc_exam On my desk 1 1.333333
73 loc_exam In my pocket or bag 68 90.666667
74 loc_exam In another room 6 8.000000
75 loc_lec On my desk 19 25.333333
76 loc_lec In my pocket or bag 56 74.666667
77 loc_social On my desk 12 16.000000
78 loc_social In my pocket or bag 61 81.333333
79 loc_social In another room 2 2.666667
80 communicate Family 9 12.000000
81 communicate Friends 66 88.000000
82 phone_use Calling/Texting 17 22.666667
83 phone_use Social Media 56 74.666667
84 phone_use Games 1 1.333333
85 phone_use Email 1 1.333333
Note:
There was no task completed during study 1.

kable(main_nom_demo_pb_t, caption = "Frequency & percentage for nominal vars - demo- STUDY 2 - POCKET/BAG", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - demo- STUDY 2 - POCKET/BAG
Var level n %
1 condition pocket/bag 85 100.000000
2 gender Male 31 36.470588
3 gender Female 54 63.529412
4 lang English 61 71.764706
5 lang Other 24 28.235294
6 prof Moderate 5 5.882353
7 prof High 80 94.117647
8 program Arts & Humanities 2 2.352941
9 program Music 1 1.176471
10 program Haalth Science 10 11.764706
11 program Information & Media Studies 4 4.705882
12 program Business 11 12.941176
13 program Science 30 35.294118
14 program Social Science 27 31.764706
15 year First Year 74 87.058824
16 year Second Year 7 8.235294
17 year Fourth Year 3 3.529412
18 year Fifth Year+ 1 1.176471
19 CBS_know yes 10 11.764706
20 CBS_know no 75 88.235294
21 CBS_done_tasks yes 20 23.529412
22 CBS_done_tasks no 65 76.470588
23 app_most_used Games 1 1.176471
24 app_most_used Social Networking 61 71.764706
25 app_most_used Entertainment 21 24.705882
26 app_most_used Other 2 2.352941
27 iphone yes 50 58.823529
28 iphone no 35 41.176471
29 ST_app_most_used Social Networking 38 44.705882
30 ST_app_most_used Entertainment 11 12.941176
31 ST_app_most_used Other 1 1.176471
32 ST_app_most_used NA 35 41.176471
33 ST_app_text_mess yes 14 16.470588
34 ST_app_text_mess no 36 42.352941
35 ST_app_text_mess NA 35 41.176471
36 ST_weekly_tot_hours 0-10 10 11.764706
37 ST_weekly_tot_hours 11-20 14 16.470588
38 ST_weekly_tot_hours 21-30 13 15.294118
39 ST_weekly_tot_hours 31-40 11 12.941176
40 ST_weekly_tot_hours 40+ 2 2.352941
41 ST_weekly_tot_hours NA 35 41.176471
42 ST_daily_pickups 0-50 5 5.882353
43 ST_daily_pickups 51-100 14 16.470588
44 ST_daily_pickups 101-150 16 18.823529
45 ST_daily_pickups 151-200 8 9.411765
46 ST_daily_pickups 200+ 7 8.235294
47 ST_daily_pickups NA 35 41.176471
48 ST_daily_not 0-50 6 7.058823
49 ST_daily_not 51-100 9 10.588235
50 ST_daily_not 101-150 11 12.941176
51 ST_daily_not 151-200 3 3.529412
52 ST_daily_not 200+ 21 24.705882
53 ST_daily_not NA 35 41.176471
54 phone_value $0-$20 36 42.352941
55 phone_value $21-$40 15 17.647059
56 phone_value $41-$60 16 18.823529
57 phone_value >$60 18 21.176471
58 phantom yes 59 69.411765
59 phantom no 26 30.588235
60 dist_device Computer 6 7.058823
61 dist_device Phone 77 90.588235
62 dist_device iPad/Tablet 2 2.352941
63 dist_device_studywork Computer 11 12.941176
64 dist_device_studywork Phone 72 84.705882
65 dist_device_studywork iPad/Tablet 2 2.352941
66 dist_device_social Computer 3 3.529412
67 dist_device_social Phone 81 95.294118
68 dist_device_social Other 1 1.176471
69 loc_typical On my desk 25 29.411765
70 loc_typical In my pocket or bag 60 70.588235
71 loc_study On my desk 66 77.647059
72 loc_study In my pocket or bag 16 18.823529
73 loc_study In another room 3 3.529412
74 loc_exam In my pocket or bag 78 91.764706
75 loc_exam In another room 7 8.235294
76 loc_lec On my desk 25 29.411765
77 loc_lec In my pocket or bag 60 70.588235
78 loc_social On my desk 11 12.941176
79 loc_social In my pocket or bag 73 85.882353
80 loc_social In another room 1 1.176471
81 communicate Family 13 15.294118
82 communicate Friends 70 82.352941
83 communicate Work 1 1.176471
84 communicate Other 1 1.176471
85 phone_use Calling/Texting 24 28.235294
86 phone_use Social Media 53 62.352941
87 phone_use Games 3 3.529412
88 phone_use Email 1 1.176471
89 phone_use Other 4 4.705882
Note:
There was no task completed during study 1.

kable(main_nom_demo_out_t, caption = "Frequency & percentage for nominal vars - demo- STUDY 2 - OUTSIDE", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - demo- STUDY 2 - OUTSIDE
Var level n %
1 condition outside 77 100.000000
2 gender Male 16 20.779221
3 gender Female 61 79.220779
4 lang English 60 77.922078
5 lang Other 17 22.077922
6 prof Moderate 11 14.285714
7 prof High 66 85.714286
8 program Arts & Humanities 2 2.597403
9 program Haalth Science 8 10.389610
10 program Information & Media Studies 3 3.896104
11 program Business 10 12.987013
12 program Science 25 32.467532
13 program Social Science 29 37.662338
14 year First Year 64 83.116883
15 year Second Year 9 11.688312
16 year Third Year 2 2.597403
17 year Fourth Year 2 2.597403
18 CBS_know yes 8 10.389610
19 CBS_know no 69 89.610390
20 CBS_done_tasks yes 14 18.181818
21 CBS_done_tasks no 63 81.818182
22 app_most_used Games 1 1.298701
23 app_most_used Social Networking 65 84.415584
24 app_most_used Entertainment 10 12.987013
25 app_most_used Other 1 1.298701
26 iphone yes 52 67.532467
27 iphone no 25 32.467532
28 ST_app_most_used Games 2 2.597403
29 ST_app_most_used Social Networking 40 51.948052
30 ST_app_most_used Entertainment 8 10.389610
31 ST_app_most_used Other 2 2.597403
32 ST_app_most_used NA 25 32.467532
33 ST_app_text_mess yes 14 18.181818
34 ST_app_text_mess no 38 49.350649
35 ST_app_text_mess NA 25 32.467532
36 ST_weekly_tot_hours 0-10 12 15.584416
37 ST_weekly_tot_hours 11-20 10 12.987013
38 ST_weekly_tot_hours 21-30 17 22.077922
39 ST_weekly_tot_hours 31-40 6 7.792208
40 ST_weekly_tot_hours 40+ 7 9.090909
41 ST_weekly_tot_hours NA 25 32.467532
42 ST_daily_pickups 0-50 7 9.090909
43 ST_daily_pickups 51-100 17 22.077922
44 ST_daily_pickups 101-150 14 18.181818
45 ST_daily_pickups 151-200 6 7.792208
46 ST_daily_pickups 200+ 8 10.389610
47 ST_daily_pickups NA 25 32.467532
48 ST_daily_not 0-50 3 3.896104
49 ST_daily_not 51-100 12 15.584416
50 ST_daily_not 101-150 6 7.792208
51 ST_daily_not 151-200 9 11.688312
52 ST_daily_not 200+ 22 28.571429
53 ST_daily_not NA 25 32.467532
54 phone_value $0-$20 22 28.571429
55 phone_value $21-$40 22 28.571429
56 phone_value $41-$60 16 20.779221
57 phone_value >$60 17 22.077922
58 phantom yes 63 81.818182
59 phantom no 14 18.181818
60 dist_device Computer 3 3.896104
61 dist_device Phone 71 92.207792
62 dist_device iPad/Tablet 2 2.597403
63 dist_device Smartwatch 1 1.298701
64 dist_device_studywork Computer 5 6.493506
65 dist_device_studywork Phone 71 92.207792
66 dist_device_studywork Smartwatch 1 1.298701
67 dist_device_social Computer 1 1.298701
68 dist_device_social Phone 74 96.103896
69 dist_device_social iPad/Tablet 1 1.298701
70 dist_device_social Smartwatch 1 1.298701
71 loc_typical On my desk 28 36.363636
72 loc_typical In my pocket or bag 49 63.636364
73 loc_study On my desk 57 74.025974
74 loc_study In my pocket or bag 11 14.285714
75 loc_study In another room 9 11.688312
76 loc_exam In my pocket or bag 70 90.909091
77 loc_exam In another room 7 9.090909
78 loc_lec On my desk 32 41.558442
79 loc_lec In my pocket or bag 45 58.441558
80 loc_social On my desk 13 16.883117
81 loc_social In my pocket or bag 64 83.116883
82 communicate Family 13 16.883117
83 communicate Friends 64 83.116883
84 phone_use Calling/Texting 18 23.376623
85 phone_use Social Media 57 74.025974
86 phone_use Games 1 1.298701
87 phone_use Other 1 1.298701
Note:
There was no task completed during study 1.

kable(plyr::count(as.factor(main_all_data_final$langO)), 
  caption = "Frequency for nominal vars - LANG OTHER- STUDY 2", align = rep('crcc'), col.names = c("Language", "freq"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency for nominal vars - LANG OTHER- STUDY 2
Language freq
1 181
2 arabic 1
3 Arabic 2
4 arabic 1
5 bambara 1
6 Cantonese 2
7 chinese 1
8 Chinese 15
9 Chinese (Mandarin) 1
10 Farsi 1
11 french 1
12 Gujarati 3
13 Korean 1
14 KOREAN 1
15 korean, german 1
16 Lithuanian 1
17 Madarin 1
18 Mandarin 7
19 MANDARIN 1
20 Mandarin Chinese 1
21 MANDARIN CHINESE 1
22 Portuguese 1
23 Punjabi 1
24 Russian 1
25 Serbian 1
26 Tamil 2
27 Thai 1
28 Urdu 2
29 vietnamese 1
30 Vietnamese 2
Note:
There was no task completed during study 1.

kable(plyr::count(main_all_data_final %>% select(CBS_know, CBS_done_tasks)), 
  caption = "Frequency for nominal vars - demo- STUDY 2 - CBS KNOW/DONE ques mixed", align = rep('crcc'), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency for nominal vars - demo- STUDY 2 - CBS KNOW/DONE ques mixed
CBS_know CBS_done_tasks freq
1 yes yes 15
2 yes no 12
3 no yes 34
4 no no 176
Note:
There was no task completed during study 1.

kable(plyr::count(main_all_data_final %>% select(CBS_know)), 
  caption = "Frequency for nominal vars - demo- STUDY 2 - CBS KNOW", align = rep('crcc'), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency for nominal vars - demo- STUDY 2 - CBS KNOW
CBS_know freq
1 yes 27
2 no 210
Note:
There was no task completed during study 1.

kable(plyr::count(main_all_data_final %>% select(CBS_done_tasks)), 
  caption = "Frequency for nominal vars - demo- STUDY 2 - CBS DONE", align = rep('crcc'), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency for nominal vars - demo- STUDY 2 - CBS DONE
CBS_done_tasks freq
1 yes 49
2 no 188
Note:
There was no task completed during study 1.

# export tables as csv files
  # write.csv(pilot_nom_demo_t,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_nom_demo_t.csv", row.names = FALSE)
  # write.csv(plyr::count(as.factor(pilot_sur_data$langO)),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_nom_demo_t_lang_count.csv", row.names = FALSE)
  # write.csv(main_nom_demo_t,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_nom_demo_t.csv", row.names = FALSE)
  # write.csv(main_nom_demo_desk_t,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_nom_demo_desk_t.csv", row.names = FALSE)
  # write.csv(main_nom_demo_pb_t,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_nom_demo_pb_t.csv", row.names = FALSE)
  # write.csv(main_nom_demo_out_t,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_nom_demo_out_t.csv", row.names = FALSE)

Questionnaires (levels)


# output is a list of tibbles, each with: $xxx = var name, x = level(s), n = count, pct = percentage

## FOR PILOT DATA
pilot_nom_ques <- 
  pilot_sur_data %>% 
  # get subset of data with only nominal vars
  select(NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum) %>% 
  # divide sum scores into L>M>H
   # details provided for 1st instance... 
  mutate(NMPQ_sum = # name of var, this replaces existing b/c its the same
           cut(NMPQ_sum, # state var 
               breaks = seq(20, 140, 40), # this is providing a seq from 20 >> 140, with breaks of 40 (40 det by breaking up the range into 3: 140-20 = 120, 120/3 = 40)
               labels = c("low", "moderate", "high"))) %>% # state the new labels for the levels
  mutate(MPIQ_sum = cut(MPIQ_sum, breaks = seq(8, 56, 16), labels = c("low", "moderate", "high"))) %>% 
  mutate(MPIQ_SI_sum = cut(MPIQ_SI_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(MPIQ_VFO_sum = cut(MPIQ_VFO_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_sum = cut(SAD_sum, breaks = seq(13, 91, 26), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_dep_sum = cut(SAD_dep_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_ea_sum = cut(SAD_ea_sum, breaks = seq(4, 28, 8), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_access_sum = cut(SAD_access_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>%
  mutate(SAD_dist_sum = cut(SAD_dist_sum, breaks = seq(2, 14, 4), labels = c("low", "moderate", "high"))) %>% 
  # get freq & proportion for each var
  purrr::map(~ count(tibble(x = .x), x) %>% 
               mutate(pct = (n / sum(n) * 100)))

# make list into 1 long data frame to show as table...
pilot_nom_ques_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(pilot_nom_ques, bind_rows, .id = "tib")


## FOR MAIN DATA
main_nom_ques <- 
  main_all_data_final %>% 
  # get subset of data with only nominal vars
  select(NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum) %>% 
  # divide sum scores into L>M>H
   # details provided for 1st instance... 
  mutate(NMPQ_sum = # name of var, this replaces existing b/c its the same
           cut(NMPQ_sum, # state var 
               breaks = seq(20, 140, 40), # this is providing a seq from 20 >> 140, with breaks of 40 (40 det by breaking up the range into 3: 140-20 = 120, 120/3 = 40)
               labels = c("low", "moderate", "high"))) %>% # state the new labels for the levels
  mutate(MPIQ_sum = cut(MPIQ_sum, breaks = seq(8, 56, 16), labels = c("low", "moderate", "high"))) %>% 
  mutate(MPIQ_SI_sum = cut(MPIQ_SI_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(MPIQ_VFO_sum = cut(MPIQ_VFO_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_sum = cut(SAD_sum, breaks = seq(13, 91, 26), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_dep_sum = cut(SAD_dep_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_ea_sum = cut(SAD_ea_sum, breaks = seq(4, 28, 8), labels = c("low", "moderate", "high"))) %>% 
  mutate(SAD_access_sum = cut(SAD_access_sum, breaks = seq(3, 21, 6), labels = c("low", "moderate", "high"))) %>%
  mutate(SAD_dist_sum = cut(SAD_dist_sum, breaks = seq(2, 14, 4), labels = c("low", "moderate", "high"))) %>%  
  # get freq & proportion for each var
  purrr::map(~ count(tibble(x = .x), x) %>% 
               mutate(pct = (n / sum(n) * 100)))

# make list into 1 long data frame to show as table...
main_nom_ques_t <- 
  # this keeps the var name in the 1st column (using-- .id = "tib")
  map_dfr(main_nom_ques, bind_rows, .id = "tib")
kable(pilot_nom_ques_t, caption = "Frequency & percentage for nominal vars - ques- STUDY 1.", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - ques- STUDY 1.
Var level n %
1 NMPQ_sum low 16 13.1147541
2 NMPQ_sum moderate 73 59.8360656
3 NMPQ_sum high 33 27.0491803
4 MPIQ_sum low 17 13.9344262
5 MPIQ_sum moderate 72 59.0163934
6 MPIQ_sum high 33 27.0491803
7 MPIQ_SI_sum low 19 15.5737705
8 MPIQ_SI_sum moderate 57 46.7213115
9 MPIQ_SI_sum high 42 34.4262295
10 MPIQ_SI_sum NA 4 3.2786885
11 MPIQ_VFO_sum low 10 8.1967213
12 MPIQ_VFO_sum moderate 78 63.9344262
13 MPIQ_VFO_sum high 31 25.4098361
14 MPIQ_VFO_sum NA 3 2.4590164
15 SAD_sum low 12 9.8360656
16 SAD_sum moderate 74 60.6557377
17 SAD_sum high 36 29.5081967
18 SAD_dep_sum low 27 22.1311475
19 SAD_dep_sum moderate 59 48.3606557
20 SAD_dep_sum high 33 27.0491803
21 SAD_dep_sum NA 3 2.4590164
22 SAD_ea_sum low 19 15.5737705
23 SAD_ea_sum moderate 69 56.5573770
24 SAD_ea_sum high 34 27.8688525
25 SAD_access_sum low 12 9.8360656
26 SAD_access_sum moderate 58 47.5409836
27 SAD_access_sum high 51 41.8032787
28 SAD_access_sum NA 1 0.8196721
29 SAD_dist_sum low 10 8.1967213
30 SAD_dist_sum moderate 64 52.4590164
31 SAD_dist_sum high 47 38.5245902
32 SAD_dist_sum NA 1 0.8196721
Note:
There was no task completed during study 1.

kable(main_nom_ques_t, caption = "Frequency & percentage for nominal vars - ques- STUDY 2 - OVERALL", align = rep('crcc'), col.names = c("Var", "level" ,"n", "%"), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Frequency & percentage for nominal vars - ques- STUDY 2 - OVERALL
Var level n %
1 NMPQ_sum low 37 15.6118143
2 NMPQ_sum moderate 139 58.6497890
3 NMPQ_sum high 61 25.7383966
4 MPIQ_sum low 48 20.2531646
5 MPIQ_sum moderate 152 64.1350211
6 MPIQ_sum high 37 15.6118143
7 MPIQ_SI_sum low 38 16.0337553
8 MPIQ_SI_sum moderate 135 56.9620253
9 MPIQ_SI_sum high 61 25.7383966
10 MPIQ_SI_sum NA 3 1.2658228
11 MPIQ_VFO_sum low 37 15.6118143
12 MPIQ_VFO_sum moderate 124 52.3206751
13 MPIQ_VFO_sum high 70 29.5358650
14 MPIQ_VFO_sum NA 6 2.5316456
15 SAD_sum low 28 11.8143460
16 SAD_sum moderate 139 58.6497890
17 SAD_sum high 70 29.5358650
18 SAD_dep_sum low 63 26.5822785
19 SAD_dep_sum moderate 104 43.8818565
20 SAD_dep_sum high 57 24.0506329
21 SAD_dep_sum NA 13 5.4852321
22 SAD_ea_sum low 44 18.5654008
23 SAD_ea_sum moderate 141 59.4936709
24 SAD_ea_sum high 50 21.0970464
25 SAD_ea_sum NA 2 0.8438819
26 SAD_access_sum low 38 16.0337553
27 SAD_access_sum moderate 118 49.7890295
28 SAD_access_sum high 81 34.1772152
29 SAD_dist_sum low 33 13.9240506
30 SAD_dist_sum moderate 107 45.1476793
31 SAD_dist_sum high 96 40.5063291
32 SAD_dist_sum NA 1 0.4219409
Note:
There was no task completed during study 1.

CONTINUOUS data (pilot & main)

Demographic & Typical Smartphone Use

## FOR PILOT
pilot_cont_demo <- 
  pilot_sur_data %>% 
  # select continuous vars
  select(age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task) %>% 
  # apply describe fn for: n  mean   sd median trimmed  mad min max range  skew kurtosis   se
  psych::describe()

## FOR MAIN -- OVERALL
main_cont_demo <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task) %>% 
  psych::describe()

## FOR MAIN -- DESK
main_cont_demo_desk <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task) %>% 
  # only desk condition
  filter(condition == "desk") %>% 
  psych::describe()

## FOR MAIN -- POCKET/BAG
main_cont_demo_pb <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task) %>% 
  # only pocket/bag condition
  filter(condition == "pocket/bag") %>% 
  psych::describe()

## FOR MAIN -- OUTSIDE
main_cont_demo_out <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task) %>% 
  # only outside condition
  filter(condition == "outside") %>% 
  psych::describe()
  
# show all with kable 
## PILOT
kable(pilot_cont_demo, caption = "Descriptive statistics for continuous vars - demo- STUDY 1", align = rep('crcc'), row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic() 
Descriptive statistics for continuous vars - demo- STUDY 1
vars n mean sd median trimmed mad min max range skew kurtosis se
age 1 122 19.090164 1.488269 19 18.775510 1.4826 17 25 8 1.8609705 3.4123846 0.1347415
age_first_phone 2 120 12.941667 1.843890 13 12.937500 1.4826 9 18 9 0.0369901 -0.4600805 0.1683233
dist_daily 3 122 5.500000 1.560091 6 5.765306 1.4826 1 7 6 -1.3599747 1.4439088 0.1412440
dist_study 4 122 4.024590 2.074892 4 4.030612 2.9652 1 7 6 -0.0765562 -1.3657817 0.1878519
pow_not_using 5 122 2.688525 1.928824 2 2.418367 1.4826 1 7 6 0.9347415 -0.4592356 0.1746275
pow_notifications_on 6 122 4.754098 2.054270 6 4.938776 1.4826 1 7 6 -0.5895247 -1.1078307 0.1859848
pow_vibrate 7 122 5.147541 2.119068 6 5.428571 1.4826 1 7 6 -0.8742264 -0.7488319 0.1918514
pow_study 8 122 5.303279 1.650892 6 5.551020 1.4826 1 7 6 -1.0974979 0.4437636 0.1494647
pow_exam 9 122 2.672131 2.030522 2 2.408163 1.4826 1 7 6 0.9036955 -0.7282956 0.1838348
pow_lec 10 122 5.549180 1.554000 6 5.795918 1.4826 1 7 6 -1.1851904 0.5378671 0.1406926
pow_sleep 11 122 5.336066 1.856909 6 5.612245 1.4826 1 7 6 -1.0987358 -0.0765820 0.1681166
com_gen 12 122 3.795082 1.700455 4 3.806122 1.4826 1 7 6 0.0485743 -1.1976140 0.1539519
com_unattended 13 122 3.352459 1.661037 3 3.285714 1.4826 1 7 6 0.4447403 -0.8941459 0.1503832
com_leave_with_others 14 122 3.254098 1.603516 3 3.173469 1.4826 1 7 6 0.4449798 -0.8645136 0.1451755
com_locked 15 122 5.393443 1.561719 6 5.622449 1.4826 1 7 6 -1.1658448 0.8218282 0.1413914
com_room_task 16 122 4.557377 1.725114 5 4.612245 1.4826 1 7 6 -0.2351056 -1.0941452 0.1561845
Note:
There was no task completed during study 1.

## FOR MAIN -- OVERALL
kable(main_cont_demo, caption = "Descriptive statistics for continuous vars - demo- STUDY 2 - OVERALL", align = rep('crcc'), row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - demo- STUDY 2 - OVERALL
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 237 2.008439 0.8024938 2 2.010471 1.4826 1 3 2 -0.0150864 -1.4536023 0.0521276
age 2 237 18.573840 1.2212070 18 18.335079 0.0000 17 27 10 2.7831742 11.4778086 0.0793259
age_first_phone 3 232 13.357759 1.6583855 13 13.360215 1.4826 8 19 11 -0.0089609 0.5667043 0.1088783
dist_daily 4 237 5.696203 1.4053870 6 5.952880 1.4826 1 7 6 -1.4509543 1.9752922 0.0912897
dist_study 5 237 2.603375 1.9339926 2 2.329843 1.4826 1 7 6 1.0144112 -0.3989769 0.1256263
pow_not_using 6 237 2.578059 1.6439487 2 2.340314 1.4826 1 7 6 1.0248723 -0.0326494 0.1067859
pow_notifications_on 7 237 4.632911 1.9409321 5 4.759162 1.4826 1 7 6 -0.4790641 -1.1237128 0.1260771
pow_vibrate 8 237 4.991561 2.2246530 6 5.230366 1.4826 1 7 6 -0.7482391 -1.0407028 0.1445067
pow_study 9 237 5.189873 1.7227979 6 5.413613 1.4826 1 7 6 -1.0410603 0.0191644 0.1119077
pow_exam 10 237 2.185654 1.7537263 1 1.837696 0.0000 1 7 6 1.4067267 0.6685910 0.1139168
pow_lec 11 237 5.379747 1.6821883 6 5.638744 1.4826 1 7 6 -1.2443134 0.4627642 0.1092699
pow_sleep 12 237 5.105485 1.9488837 6 5.350785 1.4826 1 7 6 -0.9718568 -0.4698303 0.1265936
com_gen 13 237 4.417721 1.6819651 5 4.554974 1.4826 1 7 6 -0.5789978 -0.7974271 0.1092554
com_unattended 14 237 3.767933 1.8229194 4 3.790576 2.9652 1 7 6 0.0180749 -1.3344122 0.1184113
com_leave_with_other 15 237 3.658228 1.8403625 3 3.643979 2.9652 1 7 6 0.1205022 -1.3084119 0.1195444
com_locked 16 237 5.468354 1.4943575 6 5.685864 1.4826 1 7 6 -1.1832791 0.6410248 0.0970690
com_room_task 17 237 5.063291 1.7222997 6 5.256545 1.4826 1 7 6 -0.8506575 -0.3602172 0.1118754

## FOR MAIN -- DESK
kable(main_cont_demo_desk, caption = "Descriptive statistics for continuous vars - demo- STUDY 2 - DESK", align = rep('crcc'), row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - demo- STUDY 2 - DESK
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 75 1.000000 0.0000000 1 1.000000 0.0000 1 1 0 NaN NaN 0.0000000
age 2 75 18.586667 0.9599174 18 18.409836 0.0000 17 22 5 1.5202075 1.8312543 0.1108417
age_first_phone 3 72 13.291667 1.5783527 13 13.344828 1.4826 8 17 9 -0.4788082 0.7829113 0.1860106
dist_daily 4 75 5.680000 1.3168349 6 5.901639 1.4826 2 7 5 -1.2983509 1.3089563 0.1520550
dist_study 5 75 2.613333 1.9444539 2 2.360656 1.4826 1 7 6 0.9682695 -0.5263666 0.2245262
pow_not_using 6 75 2.653333 1.7513958 2 2.409836 1.4826 1 7 6 1.0354294 0.0294107 0.2022338
pow_notifications_on 7 75 4.546667 2.0019810 5 4.672131 1.4826 1 7 6 -0.5012669 -1.2003735 0.2311689
pow_vibrate 8 75 4.746667 2.3370884 6 4.918033 1.4826 1 7 6 -0.5625727 -1.3824435 0.2698637
pow_study 9 75 5.026667 1.7473790 6 5.229508 1.4826 1 7 6 -0.9848241 -0.0952058 0.2017699
pow_exam 10 75 2.026667 1.6601313 1 1.672131 0.0000 1 7 6 1.6018564 1.2558920 0.1916955
pow_lec 11 75 5.240000 1.8442020 6 5.508197 1.4826 1 7 6 -1.2164558 0.1792087 0.2129501
pow_sleep 12 75 5.066667 2.0489505 6 5.311475 1.4826 1 7 6 -0.9163178 -0.6999502 0.2365924
com_gen 13 75 4.533333 1.6711651 5 4.688525 1.4826 1 7 6 -0.6914739 -0.6997685 0.1929695
com_unattended 14 75 4.013333 1.7358955 4 4.081967 2.9652 1 7 6 -0.1578325 -1.3817284 0.2004440
com_leave_with_other 15 75 4.000000 1.7782469 4 4.000000 2.9652 1 7 6 0.0142270 -1.3598802 0.2053343
com_locked 16 75 5.346667 1.5465160 6 5.557377 0.0000 1 7 6 -1.2299083 0.5299301 0.1785763
com_room_task 17 75 5.360000 1.6244750 6 5.590164 1.4826 1 7 6 -1.1427223 0.4558234 0.1875782

## FOR MAIN -- POCKET/BAG
kable(main_cont_demo_pb, caption = "Descriptive statistics for continuous vars - demo- STUDY 2 - POCKET/BAG", align = rep('crcc'), row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - demo- STUDY 2 - POCKET/BAG
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 85 2.000000 0.000000 2 2.000000 0.0000 2 2 0 NaN NaN 0.0000000
age 2 85 18.494118 1.508891 18 18.188406 0.0000 17 27 10 3.2473619 12.6252817 0.1636622
age_first_phone 3 83 13.445783 1.754805 13 13.507463 1.4826 8 18 10 -0.1918417 0.3061742 0.1926149
dist_daily 4 85 5.752941 1.299321 6 5.956522 1.4826 1 7 6 -1.2475594 1.5441499 0.1409312
dist_study 5 85 2.470588 1.924703 2 2.173913 1.4826 1 7 6 1.1877422 -0.0600346 0.2087634
pow_not_using 6 85 2.564706 1.650736 2 2.333333 1.4826 1 7 6 0.9858180 -0.2019055 0.1790475
pow_notifications_on 7 85 4.764706 1.743335 5 4.884058 1.4826 1 7 6 -0.5877171 -0.8782890 0.1890912
pow_vibrate 8 85 5.235294 2.119339 6 5.521739 1.4826 1 7 6 -0.9657649 -0.5811701 0.2298746
pow_study 9 85 5.294118 1.682002 6 5.507246 1.4826 1 7 6 -1.0701385 -0.0099391 0.1824388
pow_exam 10 85 2.388235 1.786818 2 2.101449 1.4826 1 7 6 1.0964251 -0.1159257 0.1938076
pow_lec 11 85 5.317647 1.641803 6 5.536232 1.4826 1 7 6 -1.0673214 -0.0155339 0.1780786
pow_sleep 12 85 5.188235 1.769410 6 5.391304 1.4826 1 7 6 -0.9452171 -0.3581575 0.1919195
com_gen 13 85 4.341177 1.708194 5 4.492754 1.4826 1 7 6 -0.6307903 -0.7734615 0.1852797
com_unattended 14 85 3.517647 1.887375 3 3.463768 2.9652 1 7 6 0.1986688 -1.2905844 0.2047146
com_leave_with_other 15 85 3.200000 1.837441 3 3.086956 1.4826 1 7 6 0.4820009 -1.0766866 0.1992985
com_locked 16 85 5.400000 1.505545 6 5.579710 1.4826 1 7 6 -0.9581189 0.0127743 0.1632993
com_room_task 17 85 4.623529 1.825588 5 4.724638 1.4826 1 7 6 -0.4278776 -1.0987721 0.1980129

## FOR MAIN -- OUTSIDE
kable(main_cont_demo_out, caption = "Descriptive statistics for continuous vars - demo- STUDY 2 - OUTSIDE", align = rep('crcc'), row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - demo- STUDY 2 - OUTSIDE
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 77 3.000000 0.000000 3 3.000000 0.0000 3 3 0 NaN NaN 0.0000000
age 2 77 18.649351 1.097440 18 18.444444 0.0000 17 23 6 1.7156513 3.0275218 0.1250649
age_first_phone 3 77 13.324675 1.641898 13 13.253968 1.4826 10 19 9 0.5891705 0.5199855 0.1871117
dist_daily 4 77 5.649351 1.603994 6 5.952381 1.4826 1 7 6 -1.5420155 1.8428537 0.1827920
dist_study 5 77 2.740260 1.949376 2 2.507937 1.4826 1 7 6 0.8457121 -0.6851474 0.2221521
pow_not_using 6 77 2.519480 1.544177 2 2.333333 1.4826 1 6 5 0.9691890 -0.3047558 0.1759754
pow_notifications_on 7 77 4.571429 2.099051 5 4.698413 2.9652 1 7 6 -0.3179306 -1.3882458 0.2392091
pow_vibrate 8 77 4.961039 2.226879 6 5.174603 1.4826 1 7 6 -0.6785056 -1.1581406 0.2537764
pow_study 9 77 5.233766 1.753914 6 5.460318 1.4826 1 7 6 -1.0324832 -0.0051747 0.1998770
pow_exam 10 77 2.116883 1.806232 1 1.761905 0.0000 1 7 6 1.5469812 1.0368642 0.2058393
pow_lec 11 77 5.584416 1.558936 6 5.841270 1.4826 1 7 6 -1.3581107 0.9440685 0.1776572
pow_sleep 12 77 5.051948 2.057695 6 5.285714 1.4826 1 7 6 -0.9631781 -0.6043301 0.2344961
com_gen 13 77 4.389610 1.679253 5 4.476191 1.4826 1 7 6 -0.3868370 -1.0256807 0.1913686
com_unattended 14 77 3.805195 1.821212 4 3.825397 2.9652 1 7 6 0.0148078 -1.3580874 0.2075464
com_leave_with_other 15 77 3.831169 1.823838 4 3.857143 2.9652 1 7 6 -0.1254120 -1.3190715 0.2078456
com_locked 16 77 5.662338 1.429118 6 5.904762 1.4826 1 7 6 -1.3517337 1.3914298 0.1628631
com_room_task 17 77 5.259740 1.617361 6 5.476191 1.4826 1 7 6 -1.0997383 0.3316248 0.1843154

# export tables as csv files
  # write.csv(cbind(rownames(pilot_cont_demo), pilot_cont_demo),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_cont_demo.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_demo), main_cont_demo),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_demo.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_demo_desk), main_cont_demo_desk),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_demo_desk.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_demo_pb), main_cont_demo_pb),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_demo_pb.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_demo_out), main_cont_demo_out),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_demo_out.csv", row.names = FALSE)
  # 
  

Questionnaires

## FOR PILOT
pilot_cont_ques <- 
  pilot_sur_data %>% 
  # select continuous vars
  select(NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum) %>% 
  # apply describe fn for: n  mean   sd median trimmed  mad min max range  skew kurtosis   se
  psych::describe()

## FOR MAIN - overall
main_cont_ques <- 
  main_all_data_final %>% 
  select(condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum) %>% 
  psych::describe()

## FOR MAIN -- DESK
main_cont_ques_desk <- 
  main_all_data_final %>% 
  select(condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum) %>% 
  # only desk condition
  filter(condition == "desk") %>% 
  psych::describe()

## FOR MAIN -- POCKET/BAG
main_cont_ques_pb <- 
  main_all_data_final %>% 
  select(condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum) %>% 
  # only pocket/bag condition
  filter(condition == "pocket/bag") %>% 
  psych::describe()

## FOR MAIN -- OUTSIDE
main_cont_ques_out <- 
  main_all_data_final %>% 
  select(condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum) %>% 
  # only outside condition
  filter(condition == "outside") %>% 
  psych::describe()
# show all with kable
## PILOT
kable(pilot_cont_ques, caption = "Descriptive statistics for continuous vars - ques- STUDY 1", row.names = TRUE) %>% 
  footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - ques- STUDY 1
vars n mean sd median trimmed mad min max range skew kurtosis se
NMPQ_sum 1 122 87.032787 22.170986 85.5 87.275510 20.0151 30 140 110 -0.0869208 -0.1863144 2.0072668
MPIQ_sum 2 122 34.336066 9.438457 34.0 34.561225 8.8956 9 56 47 -0.2020979 -0.2370061 0.8545178
MPIQ_SI_sum 3 122 13.524590 4.533098 13.0 13.704082 4.4478 3 21 18 -0.2858652 -0.5536398 0.4104074
MPIQ_VFO_sum 4 122 13.491803 3.526162 14.0 13.755102 2.9652 3 21 18 -0.7957214 1.1647707 0.3192437
SAD_sum 5 122 58.524590 13.931481 56.0 58.438775 10.3782 21 91 70 0.1042368 -0.2226007 1.2612970
SAD_dep_sum 6 122 12.557377 4.414569 12.0 12.571429 4.4478 3 21 18 0.0289467 -0.7147642 0.3996763
SAD_ea_sum 7 122 17.516393 5.096156 17.0 17.622449 4.4478 6 28 22 -0.1213889 -0.4571027 0.4613843
SAD_dist_sum 8 122 9.672131 2.484473 10.0 9.765306 2.9652 2 14 12 -0.3383619 -0.1037727 0.2249336
Note:
There was no task completed during study 1.

## FOR MAIN -- OVERALL
kable(main_cont_ques, caption = "Descriptive statistics for continuous vars - ques- STUDY 2 - OVERALL", row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - ques- STUDY 2 - OVERALL
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 237 2.008439 0.8024938 2 2.010471 1.4826 1 3 2 -0.0150864 -1.4536023 0.0521276
NMPQ_sum 2 237 83.320675 21.6747558 85 84.041885 25.2042 28 132 104 -0.2711290 -0.7179497 1.4079267
MPIQ_sum 3 237 32.143460 8.4900546 33 32.356021 8.8956 12 52 40 -0.2264792 -0.5168270 0.5514883
MPIQ_SI_sum 4 237 13.033755 3.8837613 13 13.198953 2.9652 3 21 18 -0.3443232 -0.1072319 0.2522774
MPIQ_VFO_sum 5 237 12.932490 3.9278017 13 13.151832 4.4478 3 21 18 -0.4836939 -0.1372785 0.2551381
SAD_sum 6 237 56.215190 14.5593504 56 56.790576 14.8260 18 91 73 -0.2852329 -0.3446198 0.9457314
SAD_dep_sum 7 237 11.902954 4.5644017 12 12.015707 4.4478 3 21 18 -0.1645865 -0.7670470 0.2964897
SAD_ea_sum 8 237 16.540084 4.7473763 17 16.654450 4.4478 4 28 24 -0.1604742 -0.3174316 0.3083752
SAD_dist_sum 9 237 9.590717 2.6080868 10 9.712042 2.9652 2 14 12 -0.4280382 -0.3960102 0.1694134

## FOR MAIN -- DESK
kable(main_cont_ques_desk, caption = "Descriptive statistics for continuous vars - ques- STUDY 2 - DESK", row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - ques- STUDY 2 - DESK
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 75 1.00000 0.000000 1 1.000000 0.0000 1 1 0 NaN NaN 0.0000000
NMPQ_sum 2 75 79.56000 22.323324 80 79.770492 23.7216 34 132 98 -0.0719687 -0.6915467 2.5776755
MPIQ_sum 3 75 30.85333 8.792954 31 30.852459 8.8956 12 49 37 -0.0226202 -0.5977396 1.0153228
MPIQ_SI_sum 4 75 12.49333 4.044928 13 12.573771 2.9652 3 21 18 -0.2695463 -0.1025581 0.4670680
MPIQ_VFO_sum 5 75 13.20000 3.756076 14 13.557377 2.9652 3 19 16 -0.8152308 0.0179938 0.4337143
SAD_sum 6 75 54.02667 15.177306 54 54.360656 14.8260 21 91 70 -0.1155332 -0.3091053 1.7525244
SAD_dep_sum 7 75 11.01333 4.628038 11 10.950820 4.4478 3 21 18 0.1651220 -0.6446241 0.5343998
SAD_ea_sum 8 75 16.73333 4.685612 17 16.868852 4.4478 4 28 24 -0.2126705 0.1829989 0.5410478
SAD_dist_sum 9 75 9.36000 2.576610 9 9.442623 2.9652 4 14 10 -0.2502696 -0.7226586 0.2975213

## FOR MAIN -- POCKET/BAG
kable(main_cont_ques_pb, caption = "Descriptive statistics for continuous vars - ques- STUDY 2 - POCKET/BAG", row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - ques- STUDY 2 - POCKET/BAG
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 85 2.000000 0.000000 2 2.000000 0.0000 2 2 0 NaN NaN 0.0000000
NMPQ_sum 2 85 83.988235 21.838419 85 84.956522 25.2042 28 119 91 -0.3787837 -0.6973513 2.3687091
MPIQ_sum 3 85 32.541176 8.571205 33 32.826087 8.8956 12 50 38 -0.2893765 -0.6555354 0.9296777
MPIQ_SI_sum 4 85 13.129412 3.948442 14 13.376812 4.4478 3 21 18 -0.4540237 -0.2666901 0.4282687
MPIQ_VFO_sum 5 85 12.670588 3.793441 13 12.826087 4.4478 3 20 17 -0.3479315 -0.5793814 0.4114565
SAD_sum 6 85 57.505882 14.344921 59 58.376812 14.8260 18 84 66 -0.5338581 -0.3140793 1.5559251
SAD_dep_sum 7 85 12.517647 4.524041 13 12.710145 4.4478 3 21 18 -0.3145499 -0.6346264 0.4907011
SAD_ea_sum 8 85 16.647059 4.684589 17 16.927536 4.4478 4 24 20 -0.4415455 -0.6244917 0.5081151
SAD_dist_sum 9 85 9.564706 2.625185 10 9.666667 2.9652 2 14 12 -0.4252980 -0.3438078 0.2847413

## FOR MAIN -- OUTSIDE
kable(main_cont_ques_out, caption = "Descriptive statistics for continuous vars - ques- STUDY 2 - OUTSIDE", row.names = TRUE) %>% 
  # footnote(general = "There was no task completed during study 1.") %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - ques- STUDY 2 - OUTSIDE
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 77 3.000000 0.000000 3 3.00000 0.0000 3 3 0 NaN NaN 0.0000000
NMPQ_sum 2 77 86.246753 20.576018 90 86.93651 22.2390 39 121 82 -0.3034460 -0.8755893 2.3448549
MPIQ_sum 3 77 32.961039 8.053181 34 33.25397 7.4130 14 52 38 -0.3332273 -0.2683968 0.9177452
MPIQ_SI_sum 4 77 13.454546 3.632983 13 13.52381 4.4478 4 21 17 -0.2004469 -0.2167113 0.4140168
MPIQ_VFO_sum 5 77 12.961039 4.256393 13 13.14286 4.4478 3 21 18 -0.3533476 -0.0369432 0.4850610
SAD_sum 6 77 56.922078 14.121434 56 57.20635 14.8260 21 85 64 -0.1427965 -0.4835128 1.6092868
SAD_dep_sum 7 77 12.090909 4.469728 12 12.28571 5.9304 3 20 17 -0.3236135 -0.8928404 0.5093728
SAD_ea_sum 8 77 16.233766 4.920141 16 16.14286 4.4478 5 27 22 0.1732360 -0.4745005 0.5607022
SAD_dist_sum 9 77 9.844156 2.631114 10 10.01587 2.9652 3 14 11 -0.5987254 -0.1741830 0.2998433

# export tables as csv files
  # write.csv(cbind(rownames(pilot_cont_ques), pilot_cont_ques),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_cont_ques.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_ques), main_cont_ques),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_ques.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_ques_desk), main_cont_ques_desk),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_ques_desk.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_ques_pb), main_cont_ques_pb),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_ques_pb.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_ques_out), main_cont_ques_out),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_ques_out.csv", row.names = FALSE)

Task Data


## FOR MAIN - overall
main_cont_task <- 
  main_all_data_final %>% 
  select(condition, `Score_Double Trouble`:`Score_Monkey Ladder`) %>% 
  psych::describe()

## FOR MAIN -- DESK
main_cont_task_desk <- 
  main_all_data_final %>% 
  select(condition, `Score_Double Trouble`:`Score_Monkey Ladder`) %>% 
  # only desk condition
  filter(condition == "desk") %>% 
  psych::describe()

## FOR MAIN -- POCKET/BAG
main_cont_task_pb <- 
  main_all_data_final %>% 
  select(condition, `Score_Double Trouble`:`Score_Monkey Ladder`) %>% 
  # only pocket/bag condition
  filter(condition == "pocket/bag") %>% 
  psych::describe()

## FOR MAIN -- OUTSIDE
main_cont_task_out <- 
  main_all_data_final %>% 
  select(condition, `Score_Double Trouble`:`Score_Monkey Ladder`) %>% 
  # only outside condition
  filter(condition == "outside") %>% 
  psych::describe()
## FOR MAIN -- OVERALL
kable(main_cont_task, caption = "Descriptive statistics for continuous vars - task- STUDY 2 - OVERALL", row.names = TRUE) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - task- STUDY 2 - OVERALL
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 237 2.008439 0.8024938 2 2.010471 1.4826 1 3 2 -0.0150864 -1.4536023 0.0521276
Score_Double Trouble 2 237 25.447257 14.4451902 28 26.068063 13.3434 -5 59 64 -0.4229905 -0.7245326 0.9383159
Score_Odd One Out 3 237 10.080169 3.3531397 11 10.214660 2.9652 0 18 18 -0.3829022 -0.2896082 0.2178098
Score_Digit Span 4 237 6.886076 1.4699303 7 6.806283 1.4826 3 11 8 0.4910510 0.3889094 0.0954822
Score_Feature Match 5 237 127.122363 27.5342200 126 127.471204 26.6868 57 192 135 -0.0513722 -0.5540446 1.7885398
Score_Polygons 6 237 45.632911 25.4196193 46 44.623037 25.2042 -7 114 121 0.3009381 -0.2269226 1.6511817
Score_Paired Associates 7 237 4.974684 1.0247945 5 4.942408 1.4826 2 8 6 0.2149521 0.0322009 0.0665676
Score_Token Search 8 237 8.092827 1.7466163 8 8.068063 1.4826 3 13 10 0.0343009 0.0615228 0.1134549
Score_Spatial Planning 9 237 19.729958 7.4306732 19 19.534031 7.4130 2 41 39 0.2200719 -0.3124199 0.4826741
Score_Rotations 10 237 85.215190 33.4466452 84 85.193717 34.0998 -4 193 197 0.0409025 -0.0350348 2.1725931
Score_Spatial Span 11 237 6.033755 0.9994277 6 5.989529 1.4826 4 9 5 0.3386380 -0.0245435 0.0649198
Score_Grammatical Reasoning 12 237 17.911392 4.9425253 18 18.015707 4.4478 2 32 30 -0.1514002 0.3168444 0.3210515
Score_Monkey Ladder 13 237 7.915612 1.2252849 8 7.921466 1.4826 4 11 7 -0.0462374 0.1188172 0.0795908

## FOR MAIN -- DESK
kable(main_cont_task_desk, caption = "Descriptive statistics for continuous vars - task- STUDY 2 - DESK", row.names = TRUE) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - task- STUDY 2 - DESK
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 75 1.000000 0.0000000 1 1.000000 0.0000 1 1 0 NaN NaN 0.0000000
Score_Double Trouble 2 75 26.693333 14.2799929 30 27.606557 13.3434 -3 51 54 -0.5364839 -0.5672170 1.6489116
Score_Odd One Out 3 75 9.973333 3.4247641 11 10.163934 2.9652 0 15 15 -0.5691152 -0.4089818 0.3954577
Score_Digit Span 4 75 6.560000 1.3380098 6 6.459016 1.4826 4 11 7 0.7250700 0.6590470 0.1545001
Score_Feature Match 5 75 129.226667 28.5290622 127 130.278688 25.2042 61 182 121 -0.1893996 -0.6339637 3.2942523
Score_Polygons 6 75 43.413333 25.0238229 46 42.868853 22.2390 -7 114 121 0.1915529 -0.1111305 2.8895022
Score_Paired Associates 7 75 5.066667 1.0310495 5 5.016393 1.4826 3 7 4 0.2341022 -0.5958666 0.1190553
Score_Token Search 8 75 8.066667 1.6051718 8 8.016393 1.4826 5 12 7 0.2026007 -0.2019708 0.1853493
Score_Spatial Planning 9 75 20.306667 8.0655647 20 20.196721 7.4130 4 41 37 0.1996348 -0.4641480 0.9313312
Score_Rotations 10 75 88.320000 35.9692662 87 90.426230 32.6172 -4 148 152 -0.4388302 -0.2574956 4.1533731
Score_Spatial Span 11 75 5.986667 0.9655321 6 5.950820 1.4826 4 9 5 0.3815737 0.2877179 0.1114900
Score_Grammatical Reasoning 12 75 17.026667 5.4474723 17 17.163934 4.4478 2 29 27 -0.2637474 -0.0335520 0.6290199
Score_Monkey Ladder 13 75 7.773333 1.2144772 8 7.803279 1.4826 4 10 6 -0.3268156 0.1094688 0.1402358

## FOR MAIN -- POCKET/BAG
kable(main_cont_task_pb, caption = "Descriptive statistics for continuous vars - task- STUDY 2 - POCKET/BAG", row.names = TRUE) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - task- STUDY 2 - POCKET/BAG
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 85 2.000000 0.000000 2 2.000000 0.0000 2 2 0 NaN NaN 0.0000000
Score_Double Trouble 2 85 24.564706 15.024145 29 25.159420 13.3434 -5 49 54 -0.4732606 -1.0588718 1.6295973
Score_Odd One Out 3 85 10.200000 3.425395 11 10.347826 4.4478 1 18 17 -0.3263919 -0.2999289 0.3715363
Score_Digit Span 4 85 7.152941 1.451648 7 7.057971 1.4826 4 11 7 0.6133377 0.1382514 0.1574534
Score_Feature Match 5 85 127.905882 30.121430 132 128.362319 35.5824 57 192 135 -0.0827733 -0.7782029 3.2671278
Score_Polygons 6 85 47.058824 25.951582 45 46.101449 25.2042 -5 107 112 0.2928090 -0.4651406 2.8148443
Score_Paired Associates 7 85 4.894118 1.046804 5 4.884058 1.4826 2 8 6 0.1470671 0.1437644 0.1135418
Score_Token Search 8 85 8.258824 1.878151 8 8.260870 1.4826 3 13 10 -0.0844323 0.1804047 0.2037141
Score_Spatial Planning 9 85 19.529412 7.114017 20 19.405797 7.4130 4 38 34 0.1403955 -0.2614742 0.7716235
Score_Rotations 10 85 84.494118 33.343316 83 83.043478 28.1694 10 193 183 0.5041172 0.4551419 3.6165904
Score_Spatial Span 11 85 6.129412 1.044125 6 6.072464 1.4826 4 9 5 0.3644500 0.0242127 0.1132512
Score_Grammatical Reasoning 12 85 18.600000 4.843257 19 18.768116 4.4478 7 32 25 -0.1868204 0.1715010 0.5253250
Score_Monkey Ladder 13 85 8.070588 1.270435 8 8.043478 1.4826 5 11 6 0.1449283 0.0566053 0.1377980

## FOR MAIN -- OUTSIDE
kable(main_cont_task_out, caption = "Descriptive statistics for continuous vars - task- STUDY 2 - OUTSIDE", row.names = TRUE) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Descriptive statistics for continuous vars - task- STUDY 2 - OUTSIDE
vars n mean sd median trimmed mad min max range skew kurtosis se
condition* 1 77 3.000000 0.0000000 3 3.000000 0.0000 3 3 0 NaN NaN 0.0000000
Score_Double Trouble 2 77 25.207792 14.0519128 27 25.460317 13.3434 -3 59 62 -0.2063753 -0.5642871 1.6013641
Score_Odd One Out 3 77 10.051948 3.2399484 10 10.095238 2.9652 3 17 14 -0.2292418 -0.3527072 0.3692264
Score_Digit Span 4 77 6.909091 1.5659352 7 6.888889 1.4826 3 11 8 0.1890069 0.2787430 0.1784549
Score_Feature Match 5 77 124.207792 23.3504974 121 123.920635 29.6520 72 182 110 0.0735429 -0.3618576 2.6610361
Score_Polygons 6 77 46.220779 25.3951007 46 44.936508 23.7216 -5 108 113 0.3901586 -0.2549511 2.8940403
Score_Paired Associates 7 77 4.974026 0.9996582 5 4.952381 1.4826 3 8 5 0.2849594 0.3548428 0.1139216
Score_Token Search 8 77 7.935065 1.7346140 8 7.920635 1.4826 4 12 8 0.0088788 -0.1996724 0.1976776
Score_Spatial Planning 9 77 19.389610 7.1894584 19 19.142857 7.4130 2 37 35 0.2612673 -0.4580062 0.8193148
Score_Rotations 10 77 82.987013 31.1467213 84 82.476191 35.5824 6 157 151 0.0462504 -0.3974072 3.5494983
Score_Spatial Span 11 77 5.974026 0.9864080 6 5.936508 1.4826 4 8 4 0.2133011 -0.6496221 0.1124116
Score_Grammatical Reasoning 12 77 18.012987 4.4411162 18 17.968254 4.4478 9 32 23 0.2957251 0.3924292 0.5061122
Score_Monkey Ladder 13 77 7.883117 1.1807003 8 7.888889 1.4826 5 11 6 -0.0609634 -0.2822305 0.1345533

# export tables as csv files
  # write.csv(cbind(rownames(main_cont_task), main_cont_task),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_task.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_task_desk), main_cont_task_desk),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_task_desk.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_task_pb), main_cont_task_pb),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_task_pb.csv", row.names = FALSE)
  # write.csv(cbind(rownames(main_cont_task_out), main_cont_task_out),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_cont_task_out.csv", row.names = FALSE)

Study 1 Analyses

Correlations

Get correlations b/w all cont vars

pilot_corr <- 
  pilot_sur_data %>% 
  select(age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum) %>% 
  as.matrix() %>% 
  rcorr(type = "pearson")

# create new pilot_corr to shown only lower triangle... 
pilot_corr2 <- pilot_corr
# round to 4 decimals... 
pilot_corr2$r <- round(pilot_corr2$r, 4)
pilot_corr2$P <- round(pilot_corr2$P, 4)
pilot_corr2$n <- round(pilot_corr2$n, 4)
# remove upper triangle form r, p, and n
pilot_corr2$r[upper.tri(pilot_corr2$r)] <- "-"
pilot_corr2$P[upper.tri(pilot_corr2$P)] <- "-"
pilot_corr2$n[upper.tri(pilot_corr2$n)] <- "-"

# show corr table with flattenCorr

kable(flattenCorrMatrix(pilot_corr$r, pilot_corr$P), caption = "Pilot Study - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Pilot Study - Correlation: r values
row column cor p
age age_first_phone 0.1248959 0.1740915
age dist_daily -0.1050039 0.2497111
age_first_phone dist_daily -0.0016244 0.9859512
age dist_study -0.0863661 0.3442029
age_first_phone dist_study -0.1550098 0.0909308
dist_daily dist_study 0.5246638 0.0000000
age pow_not_using -0.2290923 0.0111421
age_first_phone pow_not_using 0.0587022 0.5242099
dist_daily pow_not_using -0.0576755 0.5280313
dist_study pow_not_using 0.0205149 0.8225353
age pow_notifications_on 0.0235310 0.7969716
age_first_phone pow_notifications_on -0.0499547 0.5879308
dist_daily pow_notifications_on 0.1934053 0.0328071
dist_study pow_notifications_on 0.1584835 0.0812421
pow_not_using pow_notifications_on 0.0201396 0.8257302
age pow_vibrate -0.0068735 0.9401035
age_first_phone pow_vibrate 0.1053979 0.2519253
dist_daily pow_vibrate 0.1524929 0.0935774
dist_study pow_vibrate -0.0139894 0.8784494
pow_not_using pow_vibrate -0.0958286 0.2937253
pow_notifications_on pow_vibrate 0.3900032 0.0000090
age pow_study 0.0560521 0.5397276
age_first_phone pow_study 0.0221158 0.8105166
dist_daily pow_study 0.2518928 0.0051280
dist_study pow_study -0.0335601 0.7136412
pow_not_using pow_study -0.2062700 0.0226407
pow_notifications_on pow_study 0.2512409 0.0052481
pow_vibrate pow_study 0.2871269 0.0013433
age pow_exam 0.1247248 0.1710618
age_first_phone pow_exam -0.1231801 0.1801291
dist_daily pow_exam 0.0130445 0.8866030
dist_study pow_exam 0.0509696 0.5771556
pow_not_using pow_exam -0.1043662 0.2526144
pow_notifications_on pow_exam 0.0340068 0.7099981
pow_vibrate pow_exam -0.0712552 0.4354322
pow_study pow_exam 0.2591909 0.0039413
age pow_lec -0.0537475 0.5565494
age_first_phone pow_lec 0.1656650 0.0705613
dist_daily pow_lec 0.1619225 0.0747722
dist_study pow_lec -0.0554851 0.5438428
pow_not_using pow_lec -0.2236961 0.0132551
pow_notifications_on pow_lec 0.2316380 0.0102523
pow_vibrate pow_lec 0.3441144 0.0001040
pow_study pow_lec 0.4274167 0.0000009
pow_exam pow_lec 0.2094440 0.0205959
age pow_sleep 0.0637073 0.4857185
age_first_phone pow_sleep 0.1413648 0.1235335
dist_daily pow_sleep 0.0385130 0.6736327
dist_study pow_sleep 0.0343025 0.7075907
pow_not_using pow_sleep -0.1735880 0.0558574
pow_notifications_on pow_sleep 0.2861608 0.0013968
pow_vibrate pow_sleep 0.2351292 0.0091337
pow_study pow_sleep 0.3169463 0.0003752
pow_exam pow_sleep 0.2530362 0.0049232
pow_lec pow_sleep 0.5655930 0.0000000
age com_gen 0.0334862 0.7142441
age_first_phone com_gen -0.0599383 0.5154963
dist_daily com_gen -0.0015576 0.9864145
dist_study com_gen -0.0594615 0.5153124
pow_not_using com_gen -0.0674962 0.4600966
pow_notifications_on com_gen 0.2527997 0.0049649
pow_vibrate com_gen 0.2630418 0.0034201
pow_study com_gen 0.0782561 0.3915646
pow_exam com_gen -0.0220128 0.8098145
pow_lec com_gen 0.1617845 0.0750236
pow_sleep com_gen 0.1162139 0.2024034
age com_unattended -0.0363635 0.6908924
age_first_phone com_unattended -0.0421182 0.6478472
dist_daily com_unattended -0.0430546 0.6377293
dist_study com_unattended 0.0286378 0.7541874
pow_not_using com_unattended 0.0732421 0.4227064
pow_notifications_on com_unattended -0.0034544 0.9698775
pow_vibrate com_unattended 0.0625866 0.4934407
pow_study com_unattended -0.1025933 0.2608077
pow_exam com_unattended 0.0590494 0.5182332
pow_lec com_unattended -0.0692045 0.4487930
pow_sleep com_unattended -0.0896296 0.3262094
com_gen com_unattended 0.3300833 0.0002048
age com_leave_with_others 0.0388033 0.6713149
age_first_phone com_leave_with_others -0.0625506 0.4973277
dist_daily com_leave_with_others -0.1470115 0.1061221
dist_study com_leave_with_others -0.0813805 0.3728743
pow_not_using com_leave_with_others 0.0658820 0.4709201
pow_notifications_on com_leave_with_others 0.1119546 0.2195547
pow_vibrate com_leave_with_others 0.1445355 0.1122039
pow_study com_leave_with_others -0.0543266 0.5522986
pow_exam com_leave_with_others 0.0384898 0.6738185
pow_lec com_leave_with_others 0.0563003 0.5379315
pow_sleep com_leave_with_others 0.0682287 0.4552303
com_gen com_leave_with_others 0.5132959 0.0000000
com_unattended com_leave_with_others 0.4904806 0.0000000
age com_locked -0.1362841 0.1344444
age_first_phone com_locked 0.1439653 0.1167090
dist_daily com_locked 0.1424660 0.1174927
dist_study com_locked 0.1423652 0.1177552
pow_not_using com_locked 0.2083779 0.0212642
pow_notifications_on com_locked -0.0314194 0.7311843
pow_vibrate com_locked -0.0176856 0.8466861
pow_study com_locked -0.0114031 0.9007936
pow_exam com_locked -0.0423824 0.6429927
pow_lec com_locked 0.0839054 0.3581759
pow_sleep com_locked -0.0174728 0.8485088
com_gen com_locked -0.1498887 0.0993826
com_unattended com_locked -0.0762005 0.4041617
com_leave_with_others com_locked -0.0996548 0.2747833
age com_room_task -0.0229549 0.8018390
age_first_phone com_room_task 0.0735384 0.4247411
dist_daily com_room_task 0.0399200 0.6624266
dist_study com_room_task -0.2001155 0.0271052
pow_not_using com_room_task -0.0020358 0.9822444
pow_notifications_on com_room_task -0.1312451 0.1495939
pow_vibrate com_room_task 0.1174847 0.1974780
pow_study com_room_task 0.1316784 0.1482430
pow_exam com_room_task 0.0266489 0.7707701
pow_lec com_room_task 0.1130024 0.2152430
pow_sleep com_room_task -0.0821768 0.3681993
com_gen com_room_task 0.3378902 0.0001411
com_unattended com_room_task 0.3577289 0.0000523
com_leave_with_others com_room_task 0.3517050 0.0000712
com_locked com_room_task -0.0268538 0.7690566
age NMPQ_sum -0.0759814 0.4055184
age_first_phone NMPQ_sum -0.2159165 0.0178604
dist_daily NMPQ_sum 0.4169415 0.0000018
dist_study NMPQ_sum 0.4568396 0.0000001
pow_not_using NMPQ_sum -0.0051704 0.9549261
pow_notifications_on NMPQ_sum 0.2054056 0.0232269
pow_vibrate NMPQ_sum -0.0335263 0.7139169
pow_study NMPQ_sum 0.1087842 0.2329732
pow_exam NMPQ_sum 0.2010757 0.0263629
pow_lec NMPQ_sum 0.0692757 0.4483258
pow_sleep NMPQ_sum -0.0135188 0.8825084
com_gen NMPQ_sum -0.1530496 0.0923720
com_unattended NMPQ_sum -0.1962300 0.0302940
com_leave_with_others NMPQ_sum -0.1359954 0.1352793
com_locked NMPQ_sum 0.1595439 0.0792010
com_room_task NMPQ_sum -0.2813839 0.0016913
age MPIQ_sum -0.1492613 0.1008227
age_first_phone MPIQ_sum -0.2358903 0.0094946
dist_daily MPIQ_sum 0.4363792 0.0000005
dist_study MPIQ_sum 0.4515425 0.0000002
pow_not_using MPIQ_sum 0.0471080 0.6063750
pow_notifications_on MPIQ_sum 0.2101722 0.0201499
pow_vibrate MPIQ_sum 0.0260118 0.7761039
pow_study MPIQ_sum 0.1541130 0.0901037
pow_exam MPIQ_sum 0.1278341 0.1605566
pow_lec MPIQ_sum 0.0870452 0.3404080
pow_sleep MPIQ_sum 0.0708361 0.4381445
com_gen MPIQ_sum -0.2109147 0.0197037
com_unattended MPIQ_sum -0.1457311 0.1092342
com_leave_with_others MPIQ_sum -0.0930585 0.3079670
com_locked MPIQ_sum 0.1770996 0.0510040
com_room_task MPIQ_sum -0.2562478 0.0043865
NMPQ_sum MPIQ_sum 0.7988664 0.0000000
age MPIQ_SI_sum -0.0817942 0.3704406
age_first_phone MPIQ_SI_sum -0.1638628 0.0737199
dist_daily MPIQ_SI_sum 0.3295480 0.0002101
dist_study MPIQ_SI_sum 0.3667785 0.0000325
pow_not_using MPIQ_SI_sum 0.0481436 0.5984753
pow_notifications_on MPIQ_SI_sum 0.2642384 0.0032713
pow_vibrate MPIQ_SI_sum 0.0082227 0.9283754
pow_study MPIQ_SI_sum 0.0889986 0.3296408
pow_exam MPIQ_SI_sum 0.1328696 0.1445758
pow_lec MPIQ_SI_sum 0.0631792 0.4893493
pow_sleep MPIQ_SI_sum 0.0613553 0.5019990
com_gen MPIQ_SI_sum -0.1028031 0.2598286
com_unattended MPIQ_SI_sum -0.1323226 0.1462510
com_leave_with_others MPIQ_SI_sum -0.1196793 0.1891771
com_locked MPIQ_SI_sum 0.2227614 0.0136547
com_room_task MPIQ_SI_sum -0.2437793 0.0068128
NMPQ_sum MPIQ_SI_sum 0.8045381 0.0000000
MPIQ_sum MPIQ_SI_sum 0.7912808 0.0000000
age MPIQ_VFO_sum -0.1911987 0.0348910
age_first_phone MPIQ_VFO_sum -0.0392036 0.6707477
dist_daily MPIQ_VFO_sum 0.0751160 0.4109035
dist_study MPIQ_VFO_sum 0.2615255 0.0036175
pow_not_using MPIQ_VFO_sum 0.1551571 0.0879199
pow_notifications_on MPIQ_VFO_sum 0.1377707 0.1302067
pow_vibrate MPIQ_VFO_sum -0.0175333 0.8479906
pow_study MPIQ_VFO_sum 0.0011404 0.9900534
pow_exam MPIQ_VFO_sum 0.2062346 0.0226645
pow_lec MPIQ_VFO_sum -0.0134997 0.8826736
pow_sleep MPIQ_VFO_sum 0.0540669 0.5542032
com_gen MPIQ_VFO_sum -0.0616173 0.5001714
com_unattended MPIQ_VFO_sum -0.1159118 0.2035871
com_leave_with_others MPIQ_VFO_sum -0.0193607 0.8323691
com_locked MPIQ_VFO_sum 0.2977398 0.0008664
com_room_task MPIQ_VFO_sum -0.1432553 0.1154532
NMPQ_sum MPIQ_VFO_sum 0.4091118 0.0000029
MPIQ_sum MPIQ_VFO_sum 0.4106803 0.0000026
MPIQ_SI_sum MPIQ_VFO_sum 0.4433675 0.0000003
age SAD_sum -0.1314461 0.1489660
age_first_phone SAD_sum -0.2106250 0.0209381
dist_daily SAD_sum 0.4836759 0.0000000
dist_study SAD_sum 0.4715794 0.0000000
pow_not_using SAD_sum -0.0403100 0.6593326
pow_notifications_on SAD_sum 0.1281404 0.1595482
pow_vibrate SAD_sum 0.0541854 0.5533340
pow_study SAD_sum 0.1216671 0.1818804
pow_exam SAD_sum 0.1709045 0.0598170
pow_lec SAD_sum 0.0621671 0.4963477
pow_sleep SAD_sum 0.0004766 0.9958432
com_gen SAD_sum -0.2047413 0.0236862
com_unattended SAD_sum -0.2191257 0.0153103
com_leave_with_others SAD_sum -0.2050498 0.0234720
com_locked SAD_sum 0.2483548 0.0058106
com_room_task SAD_sum -0.1958955 0.0305828
NMPQ_sum SAD_sum 0.8091196 0.0000000
MPIQ_sum SAD_sum 0.7974291 0.0000000
MPIQ_SI_sum SAD_sum 0.7832805 0.0000000
MPIQ_VFO_sum SAD_sum 0.4125993 0.0000023
age SAD_dep_sum -0.0844441 0.3550875
age_first_phone SAD_dep_sum -0.1716865 0.0607936
dist_daily SAD_dep_sum 0.3575960 0.0000526
dist_study SAD_dep_sum 0.3485676 0.0000834
pow_not_using SAD_dep_sum -0.0056485 0.9507637
pow_notifications_on SAD_dep_sum 0.1646942 0.0698658
pow_vibrate SAD_dep_sum 0.0565118 0.5364030
pow_study SAD_dep_sum 0.0922804 0.3120466
pow_exam SAD_dep_sum 0.0832497 0.3619577
pow_lec SAD_dep_sum 0.0574104 0.5299326
pow_sleep SAD_dep_sum 0.0414839 0.6500569
com_gen SAD_dep_sum -0.1630104 0.0728142
com_unattended SAD_dep_sum -0.1983256 0.0285367
com_leave_with_others SAD_dep_sum -0.1661089 0.0674640
com_locked SAD_dep_sum 0.0925975 0.3103801
com_room_task SAD_dep_sum -0.2266994 0.0120396
NMPQ_sum SAD_dep_sum 0.7741987 0.0000000
MPIQ_sum SAD_dep_sum 0.7501771 0.0000000
MPIQ_SI_sum SAD_dep_sum 0.7996688 0.0000000
MPIQ_VFO_sum SAD_dep_sum 0.3061023 0.0006060
SAD_sum SAD_dep_sum 0.8612744 0.0000000
age SAD_ea_sum -0.1859833 0.0402634
age_first_phone SAD_ea_sum -0.1506059 0.1006074
dist_daily SAD_ea_sum 0.3175654 0.0003649
dist_study SAD_ea_sum 0.3731687 0.0000230
pow_not_using SAD_ea_sum 0.0408809 0.6548151
pow_notifications_on SAD_ea_sum 0.1622217 0.0742295
pow_vibrate SAD_ea_sum 0.1260473 0.1665330
pow_study SAD_ea_sum 0.1531374 0.0921831
pow_exam SAD_ea_sum 0.2001898 0.0270472
pow_lec SAD_ea_sum 0.0630332 0.4903553
pow_sleep SAD_ea_sum -0.0202371 0.8249000
com_gen SAD_ea_sum -0.1707964 0.0599811
com_unattended SAD_ea_sum -0.2003459 0.0269255
com_leave_with_others SAD_ea_sum -0.1951975 0.0311929
com_locked SAD_ea_sum 0.2141339 0.0178662
com_room_task SAD_ea_sum -0.1683780 0.0637521
NMPQ_sum SAD_ea_sum 0.6817102 0.0000000
MPIQ_sum SAD_ea_sum 0.7032252 0.0000000
MPIQ_SI_sum SAD_ea_sum 0.6993791 0.0000000
MPIQ_VFO_sum SAD_ea_sum 0.5017657 0.0000000
SAD_sum SAD_ea_sum 0.8497567 0.0000000
SAD_dep_sum SAD_ea_sum 0.6762548 0.0000000
age SAD_access_sum -0.0282237 0.7576308
age_first_phone SAD_access_sum -0.1992581 0.0291210
dist_daily SAD_access_sum 0.4524365 0.0000002
dist_study SAD_access_sum 0.4057227 0.0000035
pow_not_using SAD_access_sum -0.0644102 0.4809080
pow_notifications_on SAD_access_sum 0.1103065 0.2264603
pow_vibrate SAD_access_sum 0.0007874 0.9931322
pow_study SAD_access_sum 0.0567316 0.5348168
pow_exam SAD_access_sum 0.1179205 0.1958092
pow_lec SAD_access_sum 0.0454467 0.6191439
pow_sleep SAD_access_sum 0.0591106 0.5177986
com_gen SAD_access_sum -0.1880161 0.0380923
com_unattended SAD_access_sum -0.2327903 0.0098704
com_leave_with_others SAD_access_sum -0.1650209 0.0693050
com_locked SAD_access_sum 0.2895187 0.0012186
com_room_task SAD_access_sum -0.1824689 0.0442613
NMPQ_sum SAD_access_sum 0.6610052 0.0000000
MPIQ_sum SAD_access_sum 0.6314661 0.0000000
MPIQ_SI_sum SAD_access_sum 0.6308681 0.0000000
MPIQ_VFO_sum SAD_access_sum 0.3239038 0.0002732
SAD_sum SAD_access_sum 0.8329526 0.0000000
SAD_dep_sum SAD_access_sum 0.6233865 0.0000000
SAD_ea_sum SAD_access_sum 0.5486525 0.0000000
age SAD_dist_sum -0.2154500 0.0171589
age_first_phone SAD_dist_sum -0.1209287 0.1882828
dist_daily SAD_dist_sum 0.5032021 0.0000000
dist_study SAD_dist_sum 0.3815329 0.0000145
pow_not_using SAD_dist_sum -0.1111658 0.2228408
pow_notifications_on SAD_dist_sum -0.1503279 0.0983840
pow_vibrate SAD_dist_sum -0.0346893 0.7044460
pow_study SAD_dist_sum 0.0546676 0.5498035
pow_exam SAD_dist_sum 0.1488902 0.1016821
pow_lec SAD_dist_sum 0.0127732 0.8889458
pow_sleep SAD_dist_sum -0.1048990 0.2501869
com_gen SAD_dist_sum -0.2136116 0.0181539
com_unattended SAD_dist_sum -0.0979320 0.2832081
com_leave_with_others SAD_dist_sum -0.2071069 0.0220854
com_locked SAD_dist_sum 0.2103103 0.0200662
com_room_task SAD_dist_sum 0.0063537 0.9446255
NMPQ_sum SAD_dist_sum 0.3292256 0.0002133
MPIQ_sum SAD_dist_sum 0.3836056 0.0000129
MPIQ_SI_sum SAD_dist_sum 0.1731678 0.0564627
MPIQ_VFO_sum SAD_dist_sum 0.1025171 0.2611637
SAD_sum SAD_dist_sum 0.5642139 0.0000000
SAD_dep_sum SAD_dist_sum 0.3038890 0.0006669
SAD_ea_sum SAD_dist_sum 0.3228797 0.0002864
SAD_access_sum SAD_dist_sum 0.4837855 0.0000000

# print tables using kable
kable(as.data.frame(format(pilot_corr2$r, scientific = FALSE)), caption = "Pilot Study - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Pilot Study - Correlation: r values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_others com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum
age 1 - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.1249 1 - - - - - - - - - - - - - - - - - - - - - - -
dist_daily -0.105 -0.0016 1 - - - - - - - - - - - - - - - - - - - - - -
dist_study -0.0864 -0.155 0.5247 1 - - - - - - - - - - - - - - - - - - - - -
pow_not_using -0.2291 0.0587 -0.0577 0.0205 1 - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.0235 -0.05 0.1934 0.1585 0.0201 1 - - - - - - - - - - - - - - - - - - -
pow_vibrate -0.0069 0.1054 0.1525 -0.014 -0.0958 0.39 1 - - - - - - - - - - - - - - - - - -
pow_study 0.0561 0.0221 0.2519 -0.0336 -0.2063 0.2512 0.2871 1 - - - - - - - - - - - - - - - - -
pow_exam 0.1247 -0.1232 0.013 0.051 -0.1044 0.034 -0.0713 0.2592 1 - - - - - - - - - - - - - - - -
pow_lec -0.0537 0.1657 0.1619 -0.0555 -0.2237 0.2316 0.3441 0.4274 0.2094 1 - - - - - - - - - - - - - - -
pow_sleep 0.0637 0.1414 0.0385 0.0343 -0.1736 0.2862 0.2351 0.3169 0.253 0.5656 1 - - - - - - - - - - - - - -
com_gen 0.0335 -0.0599 -0.0016 -0.0595 -0.0675 0.2528 0.263 0.0783 -0.022 0.1618 0.1162 1 - - - - - - - - - - - - -
com_unattended -0.0364 -0.0421 -0.0431 0.0286 0.0732 -0.0035 0.0626 -0.1026 0.059 -0.0692 -0.0896 0.3301 1 - - - - - - - - - - - -
com_leave_with_others 0.0388 -0.0626 -0.147 -0.0814 0.0659 0.112 0.1445 -0.0543 0.0385 0.0563 0.0682 0.5133 0.4905 1 - - - - - - - - - - -
com_locked -0.1363 0.144 0.1425 0.1424 0.2084 -0.0314 -0.0177 -0.0114 -0.0424 0.0839 -0.0175 -0.1499 -0.0762 -0.0997 1 - - - - - - - - - -
com_room_task -0.023 0.0735 0.0399 -0.2001 -0.002 -0.1312 0.1175 0.1317 0.0266 0.113 -0.0822 0.3379 0.3577 0.3517 -0.0269 1 - - - - - - - - -
NMPQ_sum -0.076 -0.2159 0.4169 0.4568 -0.0052 0.2054 -0.0335 0.1088 0.2011 0.0693 -0.0135 -0.153 -0.1962 -0.136 0.1595 -0.2814 1 - - - - - - - -
MPIQ_sum -0.1493 -0.2359 0.4364 0.4515 0.0471 0.2102 0.026 0.1541 0.1278 0.087 0.0708 -0.2109 -0.1457 -0.0931 0.1771 -0.2562 0.7989 1 - - - - - - -
MPIQ_SI_sum -0.0818 -0.1639 0.3295 0.3668 0.0481 0.2642 0.0082 0.089 0.1329 0.0632 0.0614 -0.1028 -0.1323 -0.1197 0.2228 -0.2438 0.8045 0.7913 1 - - - - - -
MPIQ_VFO_sum -0.1912 -0.0392 0.0751 0.2615 0.1552 0.1378 -0.0175 0.0011 0.2062 -0.0135 0.0541 -0.0616 -0.1159 -0.0194 0.2977 -0.1433 0.4091 0.4107 0.4434 1 - - - - -
SAD_sum -0.1314 -0.2106 0.4837 0.4716 -0.0403 0.1281 0.0542 0.1217 0.1709 0.0622 5e-04 -0.2047 -0.2191 -0.205 0.2484 -0.1959 0.8091 0.7974 0.7833 0.4126 1 - - - -
SAD_dep_sum -0.0844 -0.1717 0.3576 0.3486 -0.0056 0.1647 0.0565 0.0923 0.0832 0.0574 0.0415 -0.163 -0.1983 -0.1661 0.0926 -0.2267 0.7742 0.7502 0.7997 0.3061 0.8613 1 - - -
SAD_ea_sum -0.186 -0.1506 0.3176 0.3732 0.0409 0.1622 0.126 0.1531 0.2002 0.063 -0.0202 -0.1708 -0.2003 -0.1952 0.2141 -0.1684 0.6817 0.7032 0.6994 0.5018 0.8498 0.6763 1 - -
SAD_access_sum -0.0282 -0.1993 0.4524 0.4057 -0.0644 0.1103 8e-04 0.0567 0.1179 0.0454 0.0591 -0.188 -0.2328 -0.165 0.2895 -0.1825 0.661 0.6315 0.6309 0.3239 0.833 0.6234 0.5487 1 -
SAD_dist_sum -0.2155 -0.1209 0.5032 0.3815 -0.1112 -0.1503 -0.0347 0.0547 0.1489 0.0128 -0.1049 -0.2136 -0.0979 -0.2071 0.2103 0.0064 0.3292 0.3836 0.1732 0.1025 0.5642 0.3039 0.3229 0.4838 1
  

kable(as.data.frame(format(pilot_corr2$P, scientific = FALSE)), caption = "Pilot Study - Correlation: p values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Pilot Study - Correlation: p values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_others com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum
age NA - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.1741 NA - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 0.2497 0.986 NA - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.3442 0.0909 0 NA - - - - - - - - - - - - - - - - - - - - -
pow_not_using 0.0111 0.5242 0.528 0.8225 NA - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.797 0.5879 0.0328 0.0812 0.8257 NA - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.9401 0.2519 0.0936 0.8784 0.2937 0 NA - - - - - - - - - - - - - - - - - -
pow_study 0.5397 0.8105 0.0051 0.7136 0.0226 0.0052 0.0013 NA - - - - - - - - - - - - - - - - -
pow_exam 0.1711 0.1801 0.8866 0.5772 0.2526 0.71 0.4354 0.0039 NA - - - - - - - - - - - - - - - -
pow_lec 0.5565 0.0706 0.0748 0.5438 0.0133 0.0103 1e-04 0 0.0206 NA - - - - - - - - - - - - - - -
pow_sleep 0.4857 0.1235 0.6736 0.7076 0.0559 0.0014 0.0091 4e-04 0.0049 0 NA - - - - - - - - - - - - - -
com_gen 0.7142 0.5155 0.9864 0.5153 0.4601 0.005 0.0034 0.3916 0.8098 0.075 0.2024 NA - - - - - - - - - - - - -
com_unattended 0.6909 0.6478 0.6377 0.7542 0.4227 0.9699 0.4934 0.2608 0.5182 0.4488 0.3262 2e-04 NA - - - - - - - - - - - -
com_leave_with_others 0.6713 0.4973 0.1061 0.3729 0.4709 0.2196 0.1122 0.5523 0.6738 0.5379 0.4552 0 0 NA - - - - - - - - - - -
com_locked 0.1344 0.1167 0.1175 0.1178 0.0213 0.7312 0.8467 0.9008 0.643 0.3582 0.8485 0.0994 0.4042 0.2748 NA - - - - - - - - - -
com_room_task 0.8018 0.4247 0.6624 0.0271 0.9822 0.1496 0.1975 0.1482 0.7708 0.2152 0.3682 1e-04 1e-04 1e-04 0.7691 NA - - - - - - - - -
NMPQ_sum 0.4055 0.0179 0 0 0.9549 0.0232 0.7139 0.233 0.0264 0.4483 0.8825 0.0924 0.0303 0.1353 0.0792 0.0017 NA - - - - - - - -
MPIQ_sum 0.1008 0.0095 0 0 0.6064 0.0201 0.7761 0.0901 0.1606 0.3404 0.4381 0.0197 0.1092 0.308 0.051 0.0044 0 NA - - - - - - -
MPIQ_SI_sum 0.3704 0.0737 2e-04 0 0.5985 0.0033 0.9284 0.3296 0.1446 0.4893 0.502 0.2598 0.1463 0.1892 0.0137 0.0068 0 0 NA - - - - - -
MPIQ_VFO_sum 0.0349 0.6707 0.4109 0.0036 0.0879 0.1302 0.848 0.9901 0.0227 0.8827 0.5542 0.5002 0.2036 0.8324 9e-04 0.1155 0 0 0 NA - - - - -
SAD_sum 0.149 0.0209 0 0 0.6593 0.1595 0.5533 0.1819 0.0598 0.4963 0.9958 0.0237 0.0153 0.0235 0.0058 0.0306 0 0 0 0 NA - - - -
SAD_dep_sum 0.3551 0.0608 1e-04 1e-04 0.9508 0.0699 0.5364 0.312 0.362 0.5299 0.6501 0.0728 0.0285 0.0675 0.3104 0.012 0 0 0 6e-04 0 NA - - -
SAD_ea_sum 0.0403 0.1006 4e-04 0 0.6548 0.0742 0.1665 0.0922 0.027 0.4904 0.8249 0.06 0.0269 0.0312 0.0179 0.0638 0 0 0 0 0 0 NA - -
SAD_access_sum 0.7576 0.0291 0 0 0.4809 0.2265 0.9931 0.5348 0.1958 0.6191 0.5178 0.0381 0.0099 0.0693 0.0012 0.0443 0 0 0 3e-04 0 0 0 NA -
SAD_dist_sum 0.0172 0.1883 0 0 0.2228 0.0984 0.7044 0.5498 0.1017 0.8889 0.2502 0.0182 0.2832 0.0221 0.0201 0.9446 2e-04 0 0.0565 0.2612 0 7e-04 3e-04 0 NA

kable(as.data.frame(format(pilot_corr2$n, scientific = FALSE)), caption = "Pilot Study - Correlation: n values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Pilot Study - Correlation: n values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_others com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum
age 122 - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 120 120 - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 122 120 122 - - - - - - - - - - - - - - - - - - - - - -
dist_study 122 120 122 122 - - - - - - - - - - - - - - - - - - - - -
pow_not_using 122 120 122 122 122 - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 122 120 122 122 122 122 - - - - - - - - - - - - - - - - - - -
pow_vibrate 122 120 122 122 122 122 122 - - - - - - - - - - - - - - - - - -
pow_study 122 120 122 122 122 122 122 122 - - - - - - - - - - - - - - - - -
pow_exam 122 120 122 122 122 122 122 122 122 - - - - - - - - - - - - - - - -
pow_lec 122 120 122 122 122 122 122 122 122 122 - - - - - - - - - - - - - - -
pow_sleep 122 120 122 122 122 122 122 122 122 122 122 - - - - - - - - - - - - - -
com_gen 122 120 122 122 122 122 122 122 122 122 122 122 - - - - - - - - - - - - -
com_unattended 122 120 122 122 122 122 122 122 122 122 122 122 122 - - - - - - - - - - - -
com_leave_with_others 122 120 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - - - - - - -
com_locked 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - - - - - -
com_room_task 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - - - - -
NMPQ_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - - - -
MPIQ_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - - -
MPIQ_SI_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - - -
MPIQ_VFO_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - - -
SAD_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - - -
SAD_dep_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - - -
SAD_ea_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 - -
SAD_access_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 -
SAD_dist_sum 122 120 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122 122

# print corr matrix 
# chart.Correlation(pilot_all_data_final %>% select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_overall, CBS_STM, CBS_reason, CBS_verbal, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% select(-condition), histogram=F, pch=19)
# library(corrr)

#gives corr matrix
# I like corrplot more... 
# pilot_corr$r %>% rplot(shape = 15, colours = (colorRampPalette(c("purple", "grey", "blue"))(50)), print_cor = F) + theme(axis.text.x = element_text(angle = 60, hjust = 1))

# give hist of each var
  # as.tibble(pilot_corr$r) %>%
  #   select(age:CBS_ts_con) %>% 
  #   gather() %>% 
  #   ggplot(aes(value)) +
  #     geom_histogram() +
  #     facet_wrap(~key)

# whole matrix
corrplot(pilot_corr$r, method = "circle", col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),  
         type = "upper",
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation & size
         # add corr numbers -- edit size
         # addCoef.col = "black", cl.cex = .01, cl.length = 2, 
         # grid colour
         addgrid.col = "white",
         # addCoefasPercent = T,
         # Combine with significance level
         p.mat = pilot_corr$P, sig.level = 0.05, 
         insig = "blank",
         # insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1, 
         col.lim=c(-1, 1) # set limits for r-values
         )
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used
Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt = tl.srt,  :
  "col.lim" is not a graphical parameter
Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col = tl.col,  :
  "col.lim" is not a graphical parameter
Warning in title(title, ...) : "col.lim" is not a graphical parameter

#questionnaires only
corrplot(pilot_corr$r[17:25,17:25], method = "circle", col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),  
         type = "upper",
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation & size
         # add corr numbers -- edit size
         # addCoef.col = "black", cl.cex = .01, cl.length = 2, 
         # grid colour
         addgrid.col = "white",
         # addCoefasPercent = T,
         # Combine with significance level
         p.mat = pilot_corr$P, sig.level = 0.05, 
         insig = "blank",
         # insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1, 
         col.lim=c(-1, 1) # set limits for r-values
         )
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used
Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt = tl.srt,  :
  "col.lim" is not a graphical parameter
Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col = tl.col,  :
  "col.lim" is not a graphical parameter
Warning in title(title, ...) : "col.lim" is not a graphical parameter

# create new matrix for r & p vals with different col names
pilot_corr_r <- pilot_corr$r[c(17:20, 22:25),c(17:20, 22:25)]
  colnames(pilot_corr_r) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
  rownames(pilot_corr_r) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
  
pilot_corr_p <- pilot_corr$P[c(17:20, 22:25),c(17:20, 22:25)]
  colnames(pilot_corr_p) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
  rownames(pilot_corr_p) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")


corr_plot_pilot_ques <- {
  corrplot(pilot_corr_r, method = 'color',
         col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         # type = "upper", 
         diag = F, # remove central diagonal
         tl.col = "black", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         p.mat = pilot_corr_p, sig.level = c(.001, .01, .05),
         insig = "label_sig", pch.cex = .5, pch.col = "black"
         # insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_pilot_ques_final_oct4", plot = replayPlot(corr_plot_pilot_ques), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

# export csv files of R values & p values
  # write.csv(pilot_corr$r,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_corr_r(sept30).csv", row.names = FALSE)
  # 
  # write.csv(pilot_corr$P,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/pilot_corr_p(sept30).csv", row.names = FALSE)

Study 2 Analysis

Correlations

Get Correlations b/w all cont vars

Across conditions…

# get data from main data frame
main_corr <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_overall, CBS_STM, CBS_reason, CBS_verbal, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% 
  select(-condition) %>% 
  as.matrix() %>% 
  rcorr(type = "pearson")

# create new main_corr to shown only lower triangle... 
main_corr2 <- main_corr
# round to 4 decimals... 
main_corr2$r <- round(main_corr2$r, 4)
main_corr2$P <- round(main_corr2$P, 4)
main_corr2$n <- round(main_corr2$n, 4)
# remove upper triangle form r, p, and n
main_corr2$r[upper.tri(main_corr2$r)] <- "-"
main_corr2$P[upper.tri(main_corr2$P)] <- "-"
main_corr2$n[upper.tri(main_corr2$n)] <- "-"

# show corr table with flattenCorr

kable(flattenCorrMatrix(main_corr$r, main_corr$P), caption = "Study 2 - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: r values
row column cor p
age age_first_phone 0.2813776 0.0000136
age dist_daily -0.1794481 0.0055973
age_first_phone dist_daily -0.1031473 0.1171641
age dist_study -0.0270173 0.6790186
age_first_phone dist_study 0.0086531 0.8957034
dist_daily dist_study 0.1503516 0.0205815
age pow_not_using -0.1300481 0.0455022
age_first_phone pow_not_using 0.0565034 0.3916268
dist_daily pow_not_using -0.0575510 0.3777584
dist_study pow_not_using -0.0595234 0.3616030
age pow_notifications_on -0.0555537 0.3945617
age_first_phone pow_notifications_on -0.0100961 0.8784356
dist_daily pow_notifications_on 0.1453505 0.0252400
dist_study pow_notifications_on 0.0513539 0.4313267
pow_not_using pow_notifications_on -0.1217869 0.0612139
age pow_vibrate 0.0672967 0.3022069
age_first_phone pow_vibrate 0.0392499 0.5519527
dist_daily pow_vibrate -0.0672323 0.3026710
dist_study pow_vibrate 0.0277795 0.6704864
pow_not_using pow_vibrate -0.0878735 0.1775771
pow_notifications_on pow_vibrate 0.1690497 0.0091200
age pow_study 0.0245252 0.7071988
age_first_phone pow_study -0.0626735 0.3419123
dist_daily pow_study 0.3214386 0.0000004
dist_study pow_study 0.0583069 0.3715153
pow_not_using pow_study -0.4922412 0.0000000
pow_notifications_on pow_study 0.2338215 0.0002823
pow_vibrate pow_study -0.0051081 0.9376510
age pow_exam 0.0351205 0.5905901
age_first_phone pow_exam -0.0304758 0.6442294
dist_daily pow_exam 0.0762766 0.2420978
dist_study pow_exam 0.0043120 0.9473529
pow_not_using pow_exam -0.2945850 0.0000040
pow_notifications_on pow_exam 0.0873284 0.1802922
pow_vibrate pow_exam -0.0093715 0.8858853
pow_study pow_exam 0.3332894 0.0000001
age pow_lec 0.1121138 0.0850191
age_first_phone pow_lec -0.0996659 0.1301178
dist_daily pow_lec 0.1870147 0.0038602
dist_study pow_lec -0.0238396 0.7150232
pow_not_using pow_lec -0.4244676 0.0000000
pow_notifications_on pow_lec 0.1804415 0.0053350
pow_vibrate pow_lec 0.1197486 0.0657114
pow_study pow_lec 0.5320773 0.0000000
pow_exam pow_lec 0.2934277 0.0000043
age pow_sleep 0.0866226 0.1838521
age_first_phone pow_sleep -0.0921613 0.1617660
dist_daily pow_sleep 0.0581615 0.3727116
dist_study pow_sleep -0.0518085 0.4272547
pow_not_using pow_sleep -0.4079441 0.0000000
pow_notifications_on pow_sleep 0.0270831 0.6782807
pow_vibrate pow_sleep 0.1321453 0.0421013
pow_study pow_sleep 0.5442520 0.0000000
pow_exam pow_sleep 0.2880707 0.0000066
pow_lec pow_sleep 0.5473780 0.0000000
age com_gen -0.0037341 0.9543997
age_first_phone com_gen 0.0881345 0.1809687
dist_daily com_gen -0.0751516 0.2491329
dist_study com_gen -0.1598754 0.0137355
pow_not_using com_gen 0.0134428 0.8368971
pow_notifications_on com_gen 0.0341905 0.6004687
pow_vibrate com_gen 0.0541700 0.4064616
pow_study com_gen 0.0017585 0.9785171
pow_exam com_gen 0.0425498 0.5144795
pow_lec com_gen 0.0784819 0.2287120
pow_sleep com_gen 0.1364495 0.0357873
age com_unattended 0.1324031 0.0416984
age_first_phone com_unattended 0.1198444 0.0684355
dist_daily com_unattended -0.0325976 0.6175584
dist_study com_unattended -0.0045844 0.9440315
pow_not_using com_unattended 0.1283766 0.0483750
pow_notifications_on com_unattended -0.0553168 0.3965839
pow_vibrate com_unattended -0.0182476 0.7798949
pow_study com_unattended -0.1167853 0.0727291
pow_exam com_unattended 0.0506462 0.4377111
pow_lec com_unattended -0.0595749 0.3611865
pow_sleep com_unattended -0.0634501 0.3307431
com_gen com_unattended 0.4242346 0.0000000
age com_leave_with_other 0.0404995 0.5349677
age_first_phone com_leave_with_other 0.0154739 0.8146492
dist_daily com_leave_with_other -0.0026337 0.9678293
dist_study com_leave_with_other -0.0227702 0.7272883
pow_not_using com_leave_with_other 0.1005909 0.1225135
pow_notifications_on com_leave_with_other -0.0115471 0.8596406
pow_vibrate com_leave_with_other 0.0479355 0.4626569
pow_study com_leave_with_other -0.0462680 0.4783863
pow_exam com_leave_with_other 0.0696321 0.2857001
pow_lec com_leave_with_other 0.0092518 0.8873336
pow_sleep com_leave_with_other -0.0548830 0.4003033
com_gen com_leave_with_other 0.5596496 0.0000000
com_unattended com_leave_with_other 0.6507215 0.0000000
age com_locked -0.0712736 0.2744673
age_first_phone com_locked -0.0264224 0.6888987
dist_daily com_locked 0.1426885 0.0280706
dist_study com_locked 0.0484201 0.4581406
pow_not_using com_locked -0.0089080 0.8914940
pow_notifications_on com_locked 0.0215438 0.7414399
pow_vibrate com_locked 0.0177636 0.7855889
pow_study com_locked 0.0821692 0.2075169
pow_exam com_locked -0.0252353 0.6991269
pow_lec com_locked 0.0216570 0.7401301
pow_sleep com_locked 0.0542567 0.4057096
com_gen com_locked -0.3327294 0.0000002
com_unattended com_locked -0.3223596 0.0000004
com_leave_with_other com_locked -0.3267350 0.0000003
age com_room_task 0.1639736 0.0114672
age_first_phone com_room_task 0.0478469 0.4682918
dist_daily com_room_task -0.0602955 0.3553975
dist_study com_room_task -0.0916563 0.1595660
pow_not_using com_room_task 0.0394028 0.5460924
pow_notifications_on com_room_task -0.0221743 0.7341533
pow_vibrate com_room_task -0.0374607 0.5660675
pow_study com_room_task -0.0054953 0.9329352
pow_exam com_room_task 0.0564167 0.3872470
pow_lec com_room_task 0.1686352 0.0092943
pow_sleep com_room_task 0.0800579 0.2194730
com_gen com_room_task 0.4223383 0.0000000
com_unattended com_room_task 0.4406256 0.0000000
com_leave_with_other com_room_task 0.4185967 0.0000000
com_locked com_room_task -0.1119941 0.0853545
age NMPQ_sum -0.1878750 0.0036972
age_first_phone NMPQ_sum -0.1112762 0.0908351
dist_daily NMPQ_sum 0.4031341 0.0000000
dist_study NMPQ_sum 0.2247224 0.0004904
pow_not_using NMPQ_sum -0.1323471 0.0417857
pow_notifications_on NMPQ_sum 0.1833035 0.0046399
pow_vibrate NMPQ_sum -0.0877320 0.1782789
pow_study NMPQ_sum 0.2365461 0.0002382
pow_exam NMPQ_sum 0.0271873 0.6771117
pow_lec NMPQ_sum 0.0946145 0.1464653
pow_sleep NMPQ_sum 0.0619904 0.3420113
com_gen NMPQ_sum -0.2633469 0.0000404
com_unattended NMPQ_sum -0.2370445 0.0002309
com_leave_with_other NMPQ_sum -0.1833486 0.0046296
com_locked NMPQ_sum 0.2121147 0.0010174
com_room_task NMPQ_sum -0.2839745 0.0000090
age MPIQ_sum -0.1440656 0.0265741
age_first_phone MPIQ_sum -0.1730238 0.0082629
dist_daily MPIQ_sum 0.4774052 0.0000000
dist_study MPIQ_sum 0.2468317 0.0001233
pow_not_using MPIQ_sum -0.2042119 0.0015747
pow_notifications_on MPIQ_sum 0.1631495 0.0118948
pow_vibrate MPIQ_sum -0.1574254 0.0152719
pow_study MPIQ_sum 0.3240383 0.0000003
pow_exam MPIQ_sum 0.1214300 0.0619827
pow_lec MPIQ_sum 0.2542896 0.0000752
pow_sleep MPIQ_sum 0.1445403 0.0260744
com_gen MPIQ_sum -0.2273548 0.0004189
com_unattended MPIQ_sum -0.1402081 0.0309486
com_leave_with_other MPIQ_sum -0.1023417 0.1161062
com_locked MPIQ_sum 0.1496493 0.0211871
com_room_task MPIQ_sum -0.2107143 0.0011006
NMPQ_sum MPIQ_sum 0.7483785 0.0000000
age MPIQ_SI_sum -0.0630658 0.3336866
age_first_phone MPIQ_SI_sum -0.2302739 0.0004060
dist_daily MPIQ_SI_sum 0.2402163 0.0001890
dist_study MPIQ_SI_sum 0.1902100 0.0032858
pow_not_using MPIQ_SI_sum -0.1636754 0.0116203
pow_notifications_on MPIQ_SI_sum 0.2332421 0.0002925
pow_vibrate MPIQ_SI_sum -0.0313541 0.6310448
pow_study MPIQ_SI_sum 0.2282882 0.0003960
pow_exam MPIQ_SI_sum 0.0171175 0.7932089
pow_lec MPIQ_SI_sum 0.2198426 0.0006536
pow_sleep MPIQ_SI_sum 0.1299660 0.0456400
com_gen MPIQ_SI_sum -0.3504992 0.0000000
com_unattended MPIQ_SI_sum -0.3035281 0.0000019
com_leave_with_other MPIQ_SI_sum -0.2947954 0.0000039
com_locked MPIQ_SI_sum 0.1922005 0.0029684
com_room_task MPIQ_SI_sum -0.2568765 0.0000631
NMPQ_sum MPIQ_SI_sum 0.7097637 0.0000000
MPIQ_sum MPIQ_SI_sum 0.6635884 0.0000000
age MPIQ_VFO_sum -0.0130905 0.8411143
age_first_phone MPIQ_VFO_sum 0.0264850 0.6882006
dist_daily MPIQ_VFO_sum 0.1927778 0.0028816
dist_study MPIQ_VFO_sum 0.1420477 0.0287913
pow_not_using MPIQ_VFO_sum -0.1186127 0.0683330
pow_notifications_on MPIQ_VFO_sum 0.1707047 0.0084528
pow_vibrate MPIQ_VFO_sum -0.0243118 0.7096309
pow_study MPIQ_VFO_sum 0.1102327 0.0904169
pow_exam MPIQ_VFO_sum 0.0190513 0.7704650
pow_lec MPIQ_VFO_sum 0.1725594 0.0077568
pow_sleep MPIQ_VFO_sum 0.0463249 0.4778447
com_gen MPIQ_VFO_sum -0.1188599 0.0677552
com_unattended MPIQ_VFO_sum -0.1347594 0.0381638
com_leave_with_other MPIQ_VFO_sum -0.0196187 0.7638282
com_locked MPIQ_VFO_sum 0.0797666 0.2211599
com_room_task MPIQ_VFO_sum -0.1302767 0.0451208
NMPQ_sum MPIQ_VFO_sum 0.4475057 0.0000000
MPIQ_sum MPIQ_VFO_sum 0.4433694 0.0000000
MPIQ_SI_sum MPIQ_VFO_sum 0.3770844 0.0000000
age SAD_dep_sum -0.1640475 0.0114295
age_first_phone SAD_dep_sum -0.1885549 0.0039470
dist_daily SAD_dep_sum 0.3250008 0.0000003
dist_study SAD_dep_sum 0.1199435 0.0652700
pow_not_using SAD_dep_sum -0.1935245 0.0027729
pow_notifications_on SAD_dep_sum 0.2174113 0.0007525
pow_vibrate SAD_dep_sum -0.0326299 0.6172101
pow_study SAD_dep_sum 0.2297489 0.0003624
pow_exam SAD_dep_sum 0.0313746 0.6308223
pow_lec SAD_dep_sum 0.1460964 0.0244924
pow_sleep SAD_dep_sum 0.0630800 0.3335770
com_gen SAD_dep_sum -0.2358924 0.0002481
com_unattended SAD_dep_sum -0.2548002 0.0000726
com_leave_with_other SAD_dep_sum -0.1890910 0.0034775
com_locked SAD_dep_sum 0.1837413 0.0045410
com_room_task SAD_dep_sum -0.2735706 0.0000195
NMPQ_sum SAD_dep_sum 0.7196060 0.0000000
MPIQ_sum SAD_dep_sum 0.6486594 0.0000000
MPIQ_SI_sum SAD_dep_sum 0.7404601 0.0000000
MPIQ_VFO_sum SAD_dep_sum 0.4293163 0.0000000
age SAD_ea_sum -0.0785339 0.2284027
age_first_phone SAD_ea_sum -0.1088231 0.0982281
dist_daily SAD_ea_sum 0.3054081 0.0000017
dist_study SAD_ea_sum 0.1586518 0.0144850
pow_not_using SAD_ea_sum -0.1840496 0.0044726
pow_notifications_on SAD_ea_sum 0.1779593 0.0060120
pow_vibrate SAD_ea_sum -0.0156150 0.8110016
pow_study SAD_ea_sum 0.2578483 0.0000590
pow_exam SAD_ea_sum 0.0255676 0.6953602
pow_lec SAD_ea_sum 0.1530184 0.0184167
pow_sleep SAD_ea_sum 0.1041899 0.1096295
com_gen SAD_ea_sum -0.2284329 0.0003925
com_unattended SAD_ea_sum -0.2434901 0.0001532
com_leave_with_other SAD_ea_sum -0.1785984 0.0058307
com_locked SAD_ea_sum 0.1445726 0.0260406
com_room_task SAD_ea_sum -0.2539870 0.0000767
NMPQ_sum SAD_ea_sum 0.6352729 0.0000000
MPIQ_sum SAD_ea_sum 0.6661664 0.0000000
MPIQ_SI_sum SAD_ea_sum 0.5917046 0.0000000
MPIQ_VFO_sum SAD_ea_sum 0.5525662 0.0000000
SAD_dep_sum SAD_ea_sum 0.6201611 0.0000000
age SAD_access_sum -0.1404508 0.0306563
age_first_phone SAD_access_sum -0.1201113 0.0678178
dist_daily SAD_access_sum 0.3125006 0.0000009
dist_study SAD_access_sum 0.1804631 0.0053294
pow_not_using SAD_access_sum -0.2089479 0.0012143
pow_notifications_on SAD_access_sum 0.1981843 0.0021742
pow_vibrate SAD_access_sum -0.0686398 0.2926388
pow_study SAD_access_sum 0.1632860 0.0118230
pow_exam SAD_access_sum -0.0540276 0.4076977
pow_lec SAD_access_sum 0.1511994 0.0198706
pow_sleep SAD_access_sum -0.0114087 0.8613059
com_gen SAD_access_sum -0.2478221 0.0001156
com_unattended SAD_access_sum -0.3194872 0.0000005
com_leave_with_other SAD_access_sum -0.2621109 0.0000440
com_locked SAD_access_sum 0.1909130 0.0031704
com_room_task SAD_access_sum -0.2821947 0.0000103
NMPQ_sum SAD_access_sum 0.7172551 0.0000000
MPIQ_sum SAD_access_sum 0.6442698 0.0000000
MPIQ_SI_sum SAD_access_sum 0.6671410 0.0000000
MPIQ_VFO_sum SAD_access_sum 0.4354078 0.0000000
SAD_dep_sum SAD_access_sum 0.7228541 0.0000000
SAD_ea_sum SAD_access_sum 0.5639275 0.0000000
age SAD_dist_sum -0.0496732 0.4465754
age_first_phone SAD_dist_sum -0.1608060 0.0142036
dist_daily SAD_dist_sum 0.4722758 0.0000000
dist_study SAD_dist_sum 0.1743358 0.0071386
pow_not_using SAD_dist_sum -0.1877013 0.0037296
pow_notifications_on SAD_dist_sum 0.1844813 0.0043783
pow_vibrate SAD_dist_sum -0.1481192 0.0225600
pow_study SAD_dist_sum 0.2663321 0.0000327
pow_exam SAD_dist_sum 0.0037135 0.9546519
pow_lec SAD_dist_sum 0.1939687 0.0027100
pow_sleep SAD_dist_sum 0.0718867 0.2703496
com_gen SAD_dist_sum -0.1965499 0.0023693
com_unattended SAD_dist_sum -0.1733571 0.0074735
com_leave_with_other SAD_dist_sum -0.2040610 0.0015876
com_locked SAD_dist_sum 0.1711591 0.0082773
com_room_task SAD_dist_sum -0.1526859 0.0186754
NMPQ_sum SAD_dist_sum 0.5035685 0.0000000
MPIQ_sum SAD_dist_sum 0.6368362 0.0000000
MPIQ_SI_sum SAD_dist_sum 0.4435388 0.0000000
MPIQ_VFO_sum SAD_dist_sum 0.3439167 0.0000001
SAD_dep_sum SAD_dist_sum 0.4764623 0.0000000
SAD_ea_sum SAD_dist_sum 0.4563194 0.0000000
SAD_access_sum SAD_dist_sum 0.5220742 0.0000000
age Score_Double Trouble -0.0729797 0.2631144
age_first_phone Score_Double Trouble -0.0782409 0.2351826
dist_daily Score_Double Trouble -0.0849077 0.1927183
dist_study Score_Double Trouble -0.1729015 0.0076342
pow_not_using Score_Double Trouble -0.0844480 0.1951471
pow_notifications_on Score_Double Trouble 0.0553007 0.3967218
pow_vibrate Score_Double Trouble -0.0219021 0.7372958
pow_study Score_Double Trouble 0.1329569 0.0408437
pow_exam Score_Double Trouble 0.0388589 0.5516513
pow_lec Score_Double Trouble 0.0069309 0.9154731
pow_sleep Score_Double Trouble 0.0285705 0.6616757
com_gen Score_Double Trouble -0.0514967 0.4300453
com_unattended Score_Double Trouble -0.0880852 0.1765313
com_leave_with_other Score_Double Trouble 0.0150190 0.8180880
com_locked Score_Double Trouble 0.0304954 0.6404307
com_room_task Score_Double Trouble -0.0120429 0.8536808
NMPQ_sum Score_Double Trouble -0.0614420 0.3463067
MPIQ_sum Score_Double Trouble -0.0597795 0.3595370
MPIQ_SI_sum Score_Double Trouble 0.0340198 0.6022901
MPIQ_VFO_sum Score_Double Trouble 0.0022521 0.9724883
SAD_dep_sum Score_Double Trouble 0.0396063 0.5440201
SAD_ea_sum Score_Double Trouble 0.0464499 0.4766560
SAD_access_sum Score_Double Trouble -0.0313527 0.6310602
SAD_dist_sum Score_Double Trouble 0.0368214 0.5727186
age Score_Odd One Out -0.0019691 0.9759441
age_first_phone Score_Odd One Out -0.0584897 0.3751672
dist_daily Score_Odd One Out 0.1130902 0.0823211
dist_study Score_Odd One Out -0.0695641 0.2861726
pow_not_using Score_Odd One Out 0.0707319 0.2781404
pow_notifications_on Score_Odd One Out -0.0149910 0.8184207
pow_vibrate Score_Odd One Out -0.0817058 0.2101000
pow_study Score_Odd One Out 0.0354960 0.5866232
pow_exam Score_Odd One Out -0.1300822 0.0454453
pow_lec Score_Odd One Out 0.0065992 0.9195044
pow_sleep Score_Odd One Out -0.1005065 0.1228293
com_gen Score_Odd One Out 0.0563958 0.3874228
com_unattended Score_Odd One Out -0.0101145 0.8769066
com_leave_with_other Score_Odd One Out 0.0326113 0.6174104
com_locked Score_Odd One Out 0.0203808 0.7549400
com_room_task Score_Odd One Out 0.0497440 0.4459269
NMPQ_sum Score_Odd One Out 0.0188844 0.7724207
MPIQ_sum Score_Odd One Out 0.0868158 0.1828727
MPIQ_SI_sum Score_Odd One Out 0.0671439 0.3033086
MPIQ_VFO_sum Score_Odd One Out -0.0343338 0.5989422
SAD_dep_sum Score_Odd One Out 0.0567121 0.3847624
SAD_ea_sum Score_Odd One Out 0.0087145 0.8938371
SAD_access_sum Score_Odd One Out 0.1114885 0.0867840
SAD_dist_sum Score_Odd One Out 0.1311974 0.0436112
Score_Double Trouble Score_Odd One Out 0.0758024 0.2450463
age Score_Digit Span -0.0295211 0.6511490
age_first_phone Score_Digit Span -0.1532844 0.0194929
dist_daily Score_Digit Span -0.0291314 0.6554560
dist_study Score_Digit Span 0.0227917 0.7270415
pow_not_using Score_Digit Span -0.0024416 0.9701750
pow_notifications_on Score_Digit Span -0.0518499 0.4268848
pow_vibrate Score_Digit Span -0.0197318 0.7625064
pow_study Score_Digit Span -0.0081544 0.9006238
pow_exam Score_Digit Span -0.0673720 0.3016655
pow_lec Score_Digit Span -0.1332292 0.0404291
pow_sleep Score_Digit Span -0.0623480 0.3392286
com_gen Score_Digit Span -0.1966161 0.0023611
com_unattended Score_Digit Span -0.2439459 0.0001488
com_leave_with_other Score_Digit Span -0.1742214 0.0071771
com_locked Score_Digit Span 0.0629740 0.3343923
com_room_task Score_Digit Span -0.1728803 0.0076417
NMPQ_sum Score_Digit Span 0.0786879 0.2274890
MPIQ_sum Score_Digit Span 0.0325521 0.6180501
MPIQ_SI_sum Score_Digit Span 0.1246289 0.0553688
MPIQ_VFO_sum Score_Digit Span -0.0556470 0.3937671
SAD_dep_sum Score_Digit Span 0.1372861 0.0346582
SAD_ea_sum Score_Digit Span 0.1126871 0.0834265
SAD_access_sum Score_Digit Span 0.0823684 0.2064135
SAD_dist_sum Score_Digit Span 0.0728920 0.2636898
Score_Double Trouble Score_Digit Span 0.1628541 0.0120515
Score_Odd One Out Score_Digit Span 0.0551613 0.3979143
age Score_Feature Match -0.1869626 0.0038702
age_first_phone Score_Feature Match -0.0647730 0.3259543
dist_daily Score_Feature Match -0.0707586 0.2779587
dist_study Score_Feature Match -0.0801686 0.2188336
pow_not_using Score_Feature Match 0.0868931 0.1824815
pow_notifications_on Score_Feature Match -0.0198500 0.7611272
pow_vibrate Score_Feature Match -0.1709160 0.0083708
pow_study Score_Feature Match -0.1624410 0.0122735
pow_exam Score_Feature Match -0.1697446 0.0088344
pow_lec Score_Feature Match -0.1245096 0.0556047
pow_sleep Score_Feature Match -0.1201879 0.0647199
com_gen Score_Feature Match -0.0834540 0.2004747
com_unattended Score_Feature Match -0.0306674 0.6385455
com_leave_with_other Score_Feature Match -0.1241836 0.0562530
com_locked Score_Feature Match -0.0326022 0.6175088
com_room_task Score_Feature Match -0.0298290 0.6477532
NMPQ_sum Score_Feature Match -0.0278485 0.6697157
MPIQ_sum Score_Feature Match -0.0296029 0.6502463
MPIQ_SI_sum Score_Feature Match 0.0361779 0.5794497
MPIQ_VFO_sum Score_Feature Match 0.0242117 0.7107736
SAD_dep_sum Score_Feature Match 0.0196162 0.7638565
SAD_ea_sum Score_Feature Match 0.0675014 0.3007356
SAD_access_sum Score_Feature Match 0.0149880 0.8184572
SAD_dist_sum Score_Feature Match 0.0446005 0.4944008
Score_Double Trouble Score_Feature Match 0.1997213 0.0020043
Score_Odd One Out Score_Feature Match 0.0218769 0.7375872
Score_Digit Span Score_Feature Match 0.1943424 0.0026580
age Score_Polygons -0.0767228 0.2393459
age_first_phone Score_Polygons -0.0523644 0.4272962
dist_daily Score_Polygons 0.0513073 0.4317459
dist_study Score_Polygons 0.0299510 0.6464104
pow_not_using Score_Polygons -0.1193163 0.0666993
pow_notifications_on Score_Polygons 0.0923300 0.1565078
pow_vibrate Score_Polygons -0.0327995 0.6153810
pow_study Score_Polygons 0.0552020 0.3975661
pow_exam Score_Polygons 0.0404112 0.5358600
pow_lec Score_Polygons 0.0579733 0.3742626
pow_sleep Score_Polygons -0.0105909 0.8711581
com_gen Score_Polygons -0.0255356 0.6957227
com_unattended Score_Polygons -0.1000562 0.1245238
com_leave_with_other Score_Polygons -0.0706256 0.2788654
com_locked Score_Polygons 0.0960152 0.1405552
com_room_task Score_Polygons 0.0310204 0.6346858
NMPQ_sum Score_Polygons 0.1238038 0.0570162
MPIQ_sum Score_Polygons 0.1764208 0.0064693
MPIQ_SI_sum Score_Polygons 0.1485457 0.0221698
MPIQ_VFO_sum Score_Polygons 0.0847144 0.1937366
SAD_dep_sum Score_Polygons 0.0986984 0.1297445
SAD_ea_sum Score_Polygons 0.1726842 0.0077119
SAD_access_sum Score_Polygons 0.1767037 0.0063829
SAD_dist_sum Score_Polygons 0.1456854 0.0249020
Score_Double Trouble Score_Polygons 0.1437956 0.0268620
Score_Odd One Out Score_Polygons 0.0508548 0.4358235
Score_Digit Span Score_Polygons 0.1772580 0.0062167
Score_Feature Match Score_Polygons 0.2271520 0.0004240
age Score_Paired Associates -0.0425154 0.5148201
age_first_phone Score_Paired Associates 0.0121408 0.8540676
dist_daily Score_Paired Associates 0.0475947 0.4658480
dist_study Score_Paired Associates -0.1012953 0.1199035
pow_not_using Score_Paired Associates 0.0565112 0.3864513
pow_notifications_on Score_Paired Associates -0.0025618 0.9687076
pow_vibrate Score_Paired Associates -0.0874489 0.1796891
pow_study Score_Paired Associates 0.0219345 0.7369223
pow_exam Score_Paired Associates -0.1341206 0.0390961
pow_lec Score_Paired Associates 0.0744236 0.2537607
pow_sleep Score_Paired Associates -0.0219949 0.7362241
com_gen Score_Paired Associates 0.0774519 0.2348973
com_unattended Score_Paired Associates 0.1533484 0.0181631
com_leave_with_other Score_Paired Associates 0.1346891 0.0382654
com_locked Score_Paired Associates -0.0060592 0.9260720
com_room_task Score_Paired Associates 0.1497566 0.0210935
NMPQ_sum Score_Paired Associates -0.0730772 0.2624752
MPIQ_sum Score_Paired Associates -0.0458471 0.4824022
MPIQ_SI_sum Score_Paired Associates -0.0902779 0.1659628
MPIQ_VFO_sum Score_Paired Associates -0.0488503 0.4541518
SAD_dep_sum Score_Paired Associates -0.0766208 0.2399731
SAD_ea_sum Score_Paired Associates -0.0320160 0.6238510
SAD_access_sum Score_Paired Associates -0.0793548 0.2235611
SAD_dist_sum Score_Paired Associates -0.0736492 0.2587481
Score_Double Trouble Score_Paired Associates 0.1095387 0.0924762
Score_Odd One Out Score_Paired Associates 0.0499173 0.4443425
Score_Digit Span Score_Paired Associates 0.0768385 0.2386363
Score_Feature Match Score_Paired Associates 0.1283540 0.0484148
Score_Polygons Score_Paired Associates 0.0837372 0.1989462
age Score_Token Search -0.0489179 0.4535262
age_first_phone Score_Token Search -0.0470984 0.4752870
dist_daily Score_Token Search 0.0115372 0.8597596
dist_study Score_Token Search 0.0209807 0.7479663
pow_not_using Score_Token Search -0.0010585 0.9870671
pow_notifications_on Score_Token Search 0.0700901 0.2825355
pow_vibrate Score_Token Search -0.0815855 0.2107741
pow_study Score_Token Search 0.0476283 0.4655328
pow_exam Score_Token Search -0.0540670 0.4073558
pow_lec Score_Token Search -0.0178172 0.7849584
pow_sleep Score_Token Search -0.0638847 0.3274350
com_gen Score_Token Search -0.0709495 0.2766614
com_unattended Score_Token Search -0.0517620 0.4276699
com_leave_with_other Score_Token Search -0.0454535 0.4861735
com_locked Score_Token Search 0.0287287 0.6599188
com_room_task Score_Token Search -0.0230900 0.7236130
NMPQ_sum Score_Token Search -0.0310100 0.6347988
MPIQ_sum Score_Token Search 0.0085278 0.8960984
MPIQ_SI_sum Score_Token Search 0.0039087 0.9522707
MPIQ_VFO_sum Score_Token Search -0.1108769 0.0885383
SAD_dep_sum Score_Token Search -0.0440431 0.4998173
SAD_ea_sum Score_Token Search 0.0061926 0.9244493
SAD_access_sum Score_Token Search 0.0136298 0.8346607
SAD_dist_sum Score_Token Search 0.0827902 0.2040911
Score_Double Trouble Score_Token Search 0.2900680 0.0000056
Score_Odd One Out Score_Token Search 0.2128801 0.0009744
Score_Digit Span Score_Token Search 0.1955849 0.0024918
Score_Feature Match Score_Token Search 0.1005589 0.1226330
Score_Polygons Score_Token Search 0.2269589 0.0004290
Score_Paired Associates Score_Token Search 0.2356814 0.0002514
age Score_Spatial Planning -0.0795096 0.2226565
age_first_phone Score_Spatial Planning 0.0156360 0.8127427
dist_daily Score_Spatial Planning 0.0513511 0.4313520
dist_study Score_Spatial Planning -0.0340213 0.6022745
pow_not_using Score_Spatial Planning -0.0946980 0.1461078
pow_notifications_on Score_Spatial Planning -0.0500908 0.4427590
pow_vibrate Score_Spatial Planning 0.0262634 0.6874984
pow_study Score_Spatial Planning 0.0632709 0.3321135
pow_exam Score_Spatial Planning 0.0610918 0.3490680
pow_lec Score_Spatial Planning 0.0753585 0.2478287
pow_sleep Score_Spatial Planning 0.0089978 0.8904072
com_gen Score_Spatial Planning 0.0134712 0.8365568
com_unattended Score_Spatial Planning 0.0022359 0.9726860
com_leave_with_other Score_Spatial Planning 0.0446581 0.4938427
com_locked Score_Spatial Planning -0.0072600 0.9114760
com_room_task Score_Spatial Planning 0.0702087 0.2817203
NMPQ_sum Score_Spatial Planning 0.0069331 0.9154475
MPIQ_sum Score_Spatial Planning 0.0171395 0.7929486
MPIQ_SI_sum Score_Spatial Planning -0.0457866 0.4829802
MPIQ_VFO_sum Score_Spatial Planning -0.0511503 0.4331580
SAD_dep_sum Score_Spatial Planning -0.0365067 0.5760058
SAD_ea_sum Score_Spatial Planning -0.0375289 0.5653607
SAD_access_sum Score_Spatial Planning -0.0219047 0.7372660
SAD_dist_sum Score_Spatial Planning 0.0135135 0.8360511
Score_Double Trouble Score_Spatial Planning 0.1832737 0.0046467
Score_Odd One Out Score_Spatial Planning 0.1001890 0.1240224
Score_Digit Span Score_Spatial Planning 0.0580779 0.3734005
Score_Feature Match Score_Spatial Planning 0.0697903 0.2846044
Score_Polygons Score_Spatial Planning 0.2518911 0.0000883
Score_Paired Associates Score_Spatial Planning 0.1677016 0.0096977
Score_Token Search Score_Spatial Planning 0.2807572 0.0000114
age Score_Rotations -0.1124817 0.0839942
age_first_phone Score_Rotations -0.0841773 0.2014281
dist_daily Score_Rotations 0.0080674 0.9016788
dist_study Score_Rotations -0.0449876 0.4906575
pow_not_using Score_Rotations -0.0492805 0.4501824
pow_notifications_on Score_Rotations 0.0580737 0.3734352
pow_vibrate Score_Rotations -0.0289617 0.6573354
pow_study Score_Rotations 0.1368006 0.0353097
pow_exam Score_Rotations 0.0996564 0.1260438
pow_lec Score_Rotations 0.1248387 0.0549564
pow_sleep Score_Rotations 0.1232906 0.0580611
com_gen Score_Rotations 0.0569201 0.3830183
com_unattended Score_Rotations 0.0321658 0.6222275
com_leave_with_other Score_Rotations -0.0427191 0.5128060
com_locked Score_Rotations -0.0310189 0.6347015
com_room_task Score_Rotations 0.0389687 0.5505271
NMPQ_sum Score_Rotations -0.0335229 0.6076057
MPIQ_sum Score_Rotations -0.0327434 0.6159854
MPIQ_SI_sum Score_Rotations -0.0325782 0.6177680
MPIQ_VFO_sum Score_Rotations -0.0153064 0.8146686
SAD_dep_sum Score_Rotations -0.1169360 0.0723581
SAD_ea_sum Score_Rotations -0.0383888 0.5564780
SAD_access_sum Score_Rotations -0.0091597 0.8884473
SAD_dist_sum Score_Rotations 0.0261758 0.6884866
Score_Double Trouble Score_Rotations 0.2115840 0.0010482
Score_Odd One Out Score_Rotations -0.1115355 0.0866502
Score_Digit Span Score_Rotations 0.0522988 0.4228878
Score_Feature Match Score_Rotations 0.2230837 0.0005404
Score_Polygons Score_Rotations 0.1935321 0.0027718
Score_Paired Associates Score_Rotations 0.0953492 0.1433422
Score_Token Search Score_Rotations 0.1632194 0.0118580
Score_Spatial Planning Score_Rotations 0.2037867 0.0016114
age Score_Spatial Span -0.1791096 0.0056892
age_first_phone Score_Spatial Span -0.0618448 0.3483460
dist_daily Score_Spatial Span 0.0163821 0.8019043
dist_study Score_Spatial Span 0.0398390 0.5416544
pow_not_using Score_Spatial Span -0.0222424 0.7333682
pow_notifications_on Score_Spatial Span 0.0544710 0.4038546
pow_vibrate Score_Spatial Span -0.0208350 0.7496587
pow_study Score_Spatial Span 0.0700903 0.2825345
pow_exam Score_Spatial Span 0.0544305 0.4042049
pow_lec Score_Spatial Span 0.0906371 0.1642776
pow_sleep Score_Spatial Span 0.0351470 0.5903105
com_gen Score_Spatial Span 0.0041799 0.9489635
com_unattended Score_Spatial Span -0.1259259 0.0528592
com_leave_with_other Score_Spatial Span -0.0628133 0.3356291
com_locked Score_Spatial Span -0.0531876 0.4150380
com_room_task Score_Spatial Span 0.0553717 0.3961142
NMPQ_sum Score_Spatial Span -0.0842212 0.1963534
MPIQ_sum Score_Spatial Span -0.0380262 0.5602156
MPIQ_SI_sum Score_Spatial Span -0.0472358 0.4692220
MPIQ_VFO_sum Score_Spatial Span -0.0533876 0.4132830
SAD_dep_sum Score_Spatial Span -0.0410778 0.5291482
SAD_ea_sum Score_Spatial Span -0.0494049 0.4490375
SAD_access_sum Score_Spatial Span -0.0057482 0.9298571
SAD_dist_sum Score_Spatial Span 0.0053227 0.9350376
Score_Double Trouble Score_Spatial Span 0.1674209 0.0098220
Score_Odd One Out Score_Spatial Span -0.0071329 0.9130194
Score_Digit Span Score_Spatial Span 0.1093477 0.0930496
Score_Feature Match Score_Spatial Span 0.2375941 0.0002230
Score_Polygons Score_Spatial Span 0.2660180 0.0000334
Score_Paired Associates Score_Spatial Span 0.1042663 0.1093682
Score_Token Search Score_Spatial Span 0.3380316 0.0000001
Score_Spatial Planning Score_Spatial Span 0.2950758 0.0000038
Score_Rotations Score_Spatial Span 0.2336550 0.0002852
age Score_Grammatical Reasoning -0.0364695 0.5763947
age_first_phone Score_Grammatical Reasoning -0.0212426 0.7475695
dist_daily Score_Grammatical Reasoning 0.0168489 0.7963822
dist_study Score_Grammatical Reasoning -0.1295855 0.0462827
pow_not_using Score_Grammatical Reasoning -0.1073555 0.0991994
pow_notifications_on Score_Grammatical Reasoning 0.1105539 0.0894762
pow_vibrate Score_Grammatical Reasoning 0.0238246 0.7151954
pow_study Score_Grammatical Reasoning 0.0781213 0.2308644
pow_exam Score_Grammatical Reasoning 0.0214600 0.7424102
pow_lec Score_Grammatical Reasoning 0.1304552 0.0448246
pow_sleep Score_Grammatical Reasoning 0.0234093 0.7199500
com_gen Score_Grammatical Reasoning -0.0755530 0.2466065
com_unattended Score_Grammatical Reasoning -0.0676631 0.2995761
com_leave_with_other Score_Grammatical Reasoning 0.0031783 0.9611815
com_locked Score_Grammatical Reasoning 0.0004793 0.9941439
com_room_task Score_Grammatical Reasoning 0.0265457 0.6843184
NMPQ_sum Score_Grammatical Reasoning 0.0020067 0.9754851
MPIQ_sum Score_Grammatical Reasoning -0.0204973 0.7535839
MPIQ_SI_sum Score_Grammatical Reasoning 0.0332679 0.6103415
MPIQ_VFO_sum Score_Grammatical Reasoning 0.0512017 0.4326951
SAD_dep_sum Score_Grammatical Reasoning 0.0106989 0.8698556
SAD_ea_sum Score_Grammatical Reasoning 0.0323867 0.6198371
SAD_access_sum Score_Grammatical Reasoning 0.1137169 0.0806261
SAD_dist_sum Score_Grammatical Reasoning -0.0449005 0.4914984
Score_Double Trouble Score_Grammatical Reasoning 0.2805082 0.0000117
Score_Odd One Out Score_Grammatical Reasoning 0.0883825 0.1750698
Score_Digit Span Score_Grammatical Reasoning 0.1129184 0.0827907
Score_Feature Match Score_Grammatical Reasoning 0.1690876 0.0091043
Score_Polygons Score_Grammatical Reasoning 0.2542057 0.0000756
Score_Paired Associates Score_Grammatical Reasoning 0.2505262 0.0000967
Score_Token Search Score_Grammatical Reasoning 0.1624438 0.0122720
Score_Spatial Planning Score_Grammatical Reasoning 0.2279032 0.0004053
Score_Rotations Score_Grammatical Reasoning 0.2258590 0.0004582
Score_Spatial Span Score_Grammatical Reasoning 0.2442242 0.0001461
age Score_Monkey Ladder -0.0694447 0.2870024
age_first_phone Score_Monkey Ladder -0.0116181 0.8602851
dist_daily Score_Monkey Ladder -0.1182995 0.0690706
dist_study Score_Monkey Ladder -0.0821327 0.2077194
pow_not_using Score_Monkey Ladder 0.0327345 0.6160821
pow_notifications_on Score_Monkey Ladder 0.0368073 0.5728658
pow_vibrate Score_Monkey Ladder -0.0593331 0.3631426
pow_study Score_Monkey Ladder -0.0004065 0.9950327
pow_exam Score_Monkey Ladder 0.0191534 0.7692692
pow_lec Score_Monkey Ladder 0.0197251 0.7625854
pow_sleep Score_Monkey Ladder -0.0228732 0.7261036
com_gen Score_Monkey Ladder -0.0588968 0.3666882
com_unattended Score_Monkey Ladder -0.0543347 0.4050341
com_leave_with_other Score_Monkey Ladder -0.0109653 0.8666450
com_locked Score_Monkey Ladder -0.0477482 0.4644097
com_room_task Score_Monkey Ladder 0.0467155 0.4741372
NMPQ_sum Score_Monkey Ladder -0.1154482 0.0760894
MPIQ_sum Score_Monkey Ladder -0.1369143 0.0351562
MPIQ_SI_sum Score_Monkey Ladder -0.0741947 0.2552276
MPIQ_VFO_sum Score_Monkey Ladder -0.1288531 0.0475411
SAD_dep_sum Score_Monkey Ladder -0.0954188 0.1430490
SAD_ea_sum Score_Monkey Ladder -0.0751744 0.2489892
SAD_access_sum Score_Monkey Ladder -0.0677746 0.2987793
SAD_dist_sum Score_Monkey Ladder -0.0638920 0.3273795
Score_Double Trouble Score_Monkey Ladder 0.2681170 0.0000288
Score_Odd One Out Score_Monkey Ladder 0.0284683 0.6628113
Score_Digit Span Score_Monkey Ladder 0.1522660 0.0190065
Score_Feature Match Score_Monkey Ladder 0.1555449 0.0165513
Score_Polygons Score_Monkey Ladder 0.1525957 0.0187460
Score_Paired Associates Score_Monkey Ladder 0.1096511 0.0921403
Score_Token Search Score_Monkey Ladder 0.2571090 0.0000621
Score_Spatial Planning Score_Monkey Ladder 0.2827743 0.0000098
Score_Rotations Score_Monkey Ladder 0.0988768 0.1290491
Score_Spatial Span Score_Monkey Ladder 0.3310537 0.0000002
Score_Grammatical Reasoning Score_Monkey Ladder 0.2849309 0.0000084
age CBS_overall -0.1604204 0.0134128
age_first_phone CBS_overall -0.1030529 0.1175014
dist_daily CBS_overall 0.0022406 0.9726286
dist_study CBS_overall -0.1029547 0.1139259
pow_not_using CBS_overall -0.0400741 0.5392696
pow_notifications_on CBS_overall 0.0579407 0.3745319
pow_vibrate CBS_overall -0.0950822 0.1444712
pow_study CBS_overall 0.0805865 0.2164344
pow_exam CBS_overall -0.0377368 0.5632062
pow_lec CBS_overall 0.0533338 0.4137547
pow_sleep CBS_overall -0.0313391 0.6312090
com_gen CBS_overall -0.0606469 0.3525956
com_unattended CBS_overall -0.1001647 0.1241140
com_leave_with_other CBS_overall -0.0515251 0.4297908
com_locked CBS_overall 0.0104818 0.8724744
com_room_task CBS_overall 0.0394779 0.5453272
NMPQ_sum CBS_overall -0.0336142 0.6066275
MPIQ_sum CBS_overall -0.0071859 0.9123754
MPIQ_SI_sum CBS_overall 0.0269969 0.6792479
MPIQ_VFO_sum CBS_overall -0.0575540 0.3777337
SAD_dep_sum CBS_overall -0.0082189 0.8998421
SAD_ea_sum CBS_overall 0.0366714 0.5742845
SAD_access_sum CBS_overall 0.0509727 0.4347595
SAD_dist_sum CBS_overall 0.0644962 0.3228163
Score_Double Trouble CBS_overall 0.5297112 0.0000000
Score_Odd One Out CBS_overall 0.2680280 0.0000290
Score_Digit Span CBS_overall 0.4019824 0.0000000
Score_Feature Match CBS_overall 0.4670954 0.0000000
Score_Polygons CBS_overall 0.5186320 0.0000000
Score_Paired Associates CBS_overall 0.4130493 0.0000000
Score_Token Search CBS_overall 0.5931887 0.0000000
Score_Spatial Planning CBS_overall 0.5345989 0.0000000
Score_Rotations CBS_overall 0.4435622 0.0000000
Score_Spatial Span CBS_overall 0.5685693 0.0000000
Score_Grammatical Reasoning CBS_overall 0.5653895 0.0000000
Score_Monkey Ladder CBS_overall 0.5346275 0.0000000
age CBS_STM -0.1308459 0.0441823
age_first_phone CBS_STM -0.0416703 0.5276810
dist_daily CBS_STM -0.0164662 0.8009095
dist_study CBS_STM -0.0471864 0.4696877
pow_not_using CBS_STM 0.0253792 0.6974951
pow_notifications_on CBS_STM 0.0611175 0.3488646
pow_vibrate CBS_STM -0.0959068 0.1410058
pow_study CBS_STM 0.0535897 0.4115143
pow_exam CBS_STM -0.0441058 0.4992065
pow_lec CBS_STM 0.0642587 0.3246052
pow_sleep CBS_STM -0.0283276 0.6643761
com_gen CBS_STM -0.0185556 0.7762773
com_unattended CBS_STM -0.0302782 0.6428137
com_leave_with_other CBS_STM 0.0059487 0.9274167
com_locked CBS_STM -0.0301212 0.6445387
com_room_task CBS_STM 0.0880370 0.1767686
NMPQ_sum CBS_STM -0.1169022 0.0724411
MPIQ_sum CBS_STM -0.0816892 0.2101927
MPIQ_SI_sum CBS_STM -0.0799728 0.2199648
MPIQ_VFO_sum CBS_STM -0.1316080 0.0429516
SAD_dep_sum CBS_STM -0.0989695 0.1286888
SAD_ea_sum CBS_STM -0.0578832 0.3750069
SAD_access_sum CBS_STM -0.0535902 0.4115102
SAD_dist_sum CBS_STM -0.0190228 0.7707993
Score_Double Trouble CBS_STM 0.3214096 0.0000004
Score_Odd One Out CBS_STM 0.1093499 0.0930429
Score_Digit Span CBS_STM 0.2055268 0.0014659
Score_Feature Match CBS_STM 0.2393998 0.0001990
Score_Polygons CBS_STM 0.2806785 0.0000115
Score_Paired Associates CBS_STM 0.5578853 0.0000000
Score_Token Search CBS_STM 0.7046009 0.0000000
Score_Spatial Planning CBS_STM 0.3949801 0.0000000
Score_Rotations CBS_STM 0.2274879 0.0004155
Score_Spatial Span CBS_STM 0.6824832 0.0000000
Score_Grammatical Reasoning CBS_STM 0.3625815 0.0000000
Score_Monkey Ladder CBS_STM 0.6534121 0.0000000
CBS_overall CBS_STM 0.8118264 0.0000000
age CBS_reason -0.1675421 0.0097681
age_first_phone CBS_reason -0.0888959 0.1772146
dist_daily CBS_reason 0.0560336 0.3904837
dist_study CBS_reason -0.0727764 0.2644501
pow_not_using CBS_reason -0.0386852 0.5534326
pow_notifications_on CBS_reason 0.0239689 0.7135452
pow_vibrate CBS_reason -0.1054793 0.1052820
pow_study CBS_reason 0.0469805 0.4716304
pow_exam CBS_reason -0.0361217 0.5800394
pow_lec CBS_reason 0.0513486 0.4313745
pow_sleep CBS_reason -0.0362423 0.5787741
com_gen CBS_reason 0.0065156 0.9205213
com_unattended CBS_reason -0.0389659 0.5505556
com_leave_with_other CBS_reason -0.0586701 0.3685390
com_locked CBS_reason 0.0166628 0.7985828
com_room_task CBS_reason 0.0586166 0.3689765
NMPQ_sum CBS_reason 0.0323079 0.6206899
MPIQ_sum CBS_reason 0.0798197 0.2208516
MPIQ_SI_sum CBS_reason 0.0635185 0.3302208
MPIQ_VFO_sum CBS_reason 0.0029784 0.9636216
SAD_dep_sum CBS_reason 0.0079018 0.9036868
SAD_ea_sum CBS_reason 0.0633281 0.3316760
SAD_access_sum CBS_reason 0.0996204 0.1261817
SAD_dist_sum CBS_reason 0.1322237 0.0419785
Score_Double Trouble CBS_reason 0.2980666 0.0000030
Score_Odd One Out CBS_reason 0.3885684 0.0000000
Score_Digit Span CBS_reason 0.1966439 0.0023576
Score_Feature Match CBS_reason 0.5644838 0.0000000
Score_Polygons CBS_reason 0.6309400 0.0000000
Score_Paired Associates CBS_reason 0.1922219 0.0029651
Score_Token Search CBS_reason 0.3603751 0.0000000
Score_Spatial Planning CBS_reason 0.5951458 0.0000000
Score_Rotations CBS_reason 0.5523895 0.0000000
Score_Spatial Span CBS_reason 0.3753248 0.0000000
Score_Grammatical Reasoning CBS_reason 0.3534425 0.0000000
Score_Monkey Ladder CBS_reason 0.2629518 0.0000415
CBS_overall CBS_reason 0.8170947 0.0000000
CBS_STM CBS_reason 0.4583136 0.0000000
age CBS_verbal -0.0685276 0.2934300
age_first_phone CBS_verbal -0.1243266 0.0586509
dist_daily CBS_verbal -0.0479255 0.4627511
dist_study CBS_verbal -0.1379205 0.0338221
pow_not_using CBS_verbal -0.0957842 0.1415171
pow_notifications_on CBS_verbal 0.0562168 0.3889334
pow_vibrate CBS_verbal -0.0087820 0.8930193
pow_study CBS_verbal 0.1000638 0.1244953
pow_exam CBS_verbal -0.0034779 0.9575254
pow_lec CBS_verbal 0.0020499 0.9749582
pow_sleep CBS_verbal -0.0051127 0.9375952
com_gen CBS_verbal -0.1596029 0.0138994
com_unattended CBS_verbal -0.1970932 0.0023027
com_leave_with_other CBS_verbal -0.0769370 0.2380329
com_locked CBS_verbal 0.0463270 0.4778247
com_room_task CBS_verbal -0.0780975 0.2310068
NMPQ_sum CBS_verbal 0.0094936 0.8844083
MPIQ_sum CBS_verbal -0.0235335 0.7185265
MPIQ_SI_sum CBS_verbal 0.0946360 0.1463732
MPIQ_VFO_sum CBS_verbal -0.0010814 0.9867872
SAD_dep_sum CBS_verbal 0.0925031 0.1557289
SAD_ea_sum CBS_verbal 0.0944423 0.1472050
SAD_access_sum CBS_verbal 0.0812313 0.2127689
SAD_dist_sum CBS_verbal 0.0319599 0.6244598
Score_Double Trouble CBS_verbal 0.7117364 0.0000000
Score_Odd One Out CBS_verbal 0.1081618 0.0966727
Score_Digit Span CBS_verbal 0.6290961 0.0000000
Score_Feature Match CBS_verbal 0.2776955 0.0000144
Score_Polygons CBS_verbal 0.2836661 0.0000092
Score_Paired Associates CBS_verbal 0.2154415 0.0008425
Score_Token Search CBS_verbal 0.3195830 0.0000005
Score_Spatial Planning CBS_verbal 0.2313942 0.0003278
Score_Rotations CBS_verbal 0.2414966 0.0001741
Score_Spatial Span CBS_verbal 0.2569067 0.0000629
Score_Grammatical Reasoning CBS_verbal 0.6871126 0.0000000
Score_Monkey Ladder CBS_verbal 0.3477973 0.0000000
CBS_overall CBS_verbal 0.7382266 0.0000000
CBS_STM CBS_verbal 0.4386302 0.0000000
CBS_reason CBS_verbal 0.4182327 0.0000000
age CBS_ts_memory -0.1308459 0.0441823
age_first_phone CBS_ts_memory -0.0416703 0.5276810
dist_daily CBS_ts_memory -0.0164662 0.8009095
dist_study CBS_ts_memory -0.0471864 0.4696877
pow_not_using CBS_ts_memory 0.0253792 0.6974951
pow_notifications_on CBS_ts_memory 0.0611175 0.3488646
pow_vibrate CBS_ts_memory -0.0959068 0.1410058
pow_study CBS_ts_memory 0.0535897 0.4115143
pow_exam CBS_ts_memory -0.0441058 0.4992065
pow_lec CBS_ts_memory 0.0642587 0.3246052
pow_sleep CBS_ts_memory -0.0283276 0.6643761
com_gen CBS_ts_memory -0.0185556 0.7762773
com_unattended CBS_ts_memory -0.0302782 0.6428137
com_leave_with_other CBS_ts_memory 0.0059487 0.9274167
com_locked CBS_ts_memory -0.0301212 0.6445387
com_room_task CBS_ts_memory 0.0880370 0.1767686
NMPQ_sum CBS_ts_memory -0.1169022 0.0724411
MPIQ_sum CBS_ts_memory -0.0816892 0.2101927
MPIQ_SI_sum CBS_ts_memory -0.0799728 0.2199648
MPIQ_VFO_sum CBS_ts_memory -0.1316080 0.0429516
SAD_dep_sum CBS_ts_memory -0.0989695 0.1286888
SAD_ea_sum CBS_ts_memory -0.0578832 0.3750069
SAD_access_sum CBS_ts_memory -0.0535902 0.4115102
SAD_dist_sum CBS_ts_memory -0.0190228 0.7707993
Score_Double Trouble CBS_ts_memory 0.3214096 0.0000004
Score_Odd One Out CBS_ts_memory 0.1093499 0.0930429
Score_Digit Span CBS_ts_memory 0.2055268 0.0014659
Score_Feature Match CBS_ts_memory 0.2393998 0.0001990
Score_Polygons CBS_ts_memory 0.2806785 0.0000115
Score_Paired Associates CBS_ts_memory 0.5578853 0.0000000
Score_Token Search CBS_ts_memory 0.7046009 0.0000000
Score_Spatial Planning CBS_ts_memory 0.3949801 0.0000000
Score_Rotations CBS_ts_memory 0.2274879 0.0004155
Score_Spatial Span CBS_ts_memory 0.6824832 0.0000000
Score_Grammatical Reasoning CBS_ts_memory 0.3625815 0.0000000
Score_Monkey Ladder CBS_ts_memory 0.6534121 0.0000000
CBS_overall CBS_ts_memory 0.8118264 0.0000000
CBS_STM CBS_ts_memory 1.0000000 0.0000000
CBS_reason CBS_ts_memory 0.4583136 0.0000000
CBS_verbal CBS_ts_memory 0.4386302 0.0000000
age CBS_ts_reason -0.1167277 0.0728715
age_first_phone CBS_ts_reason -0.0766763 0.2447065
dist_daily CBS_ts_reason 0.0965169 0.1384830
dist_study CBS_ts_reason -0.0511538 0.4331270
pow_not_using CBS_ts_reason -0.0830395 0.2027274
pow_notifications_on CBS_ts_reason 0.0367936 0.5730083
pow_vibrate CBS_ts_reason -0.0505421 0.4386550
pow_study CBS_ts_reason 0.1253895 0.0538855
pow_exam CBS_ts_reason 0.0306509 0.6387269
pow_lec CBS_ts_reason 0.1141776 0.0793982
pow_sleep CBS_ts_reason 0.0091382 0.8887069
com_gen CBS_ts_reason 0.0436631 0.5035278
com_unattended CBS_ts_reason -0.0326741 0.6167329
com_leave_with_other CBS_ts_reason -0.0155569 0.8116926
com_locked CBS_ts_reason 0.0336867 0.6058513
com_room_task CBS_ts_reason 0.0819092 0.2089631
NMPQ_sum CBS_ts_reason 0.0500655 0.4429897
MPIQ_sum CBS_ts_reason 0.1067875 0.1010108
MPIQ_SI_sum CBS_ts_reason 0.0592190 0.3640675
MPIQ_VFO_sum CBS_ts_reason -0.0069326 0.9154536
SAD_dep_sum CBS_ts_reason 0.0008486 0.9896324
SAD_ea_sum CBS_ts_reason 0.0454869 0.4858524
SAD_access_sum CBS_ts_reason 0.1108821 0.0885234
SAD_dist_sum CBS_ts_reason 0.1365164 0.0356958
Score_Double Trouble CBS_ts_reason 0.2649738 0.0000360
Score_Odd One Out CBS_ts_reason 0.4482707 0.0000000
Score_Digit Span CBS_ts_reason 0.1478251 0.0228325
Score_Feature Match CBS_ts_reason 0.2336866 0.0002846
Score_Polygons CBS_ts_reason 0.6452450 0.0000000
Score_Paired Associates CBS_ts_reason 0.1710725 0.0083105
Score_Token Search CBS_ts_reason 0.3811308 0.0000000
Score_Spatial Planning CBS_ts_reason 0.6709417 0.0000000
Score_Rotations CBS_ts_reason 0.5544727 0.0000000
Score_Spatial Span CBS_ts_reason 0.3396462 0.0000001
Score_Grammatical Reasoning CBS_ts_reason 0.3434128 0.0000001
Score_Monkey Ladder CBS_ts_reason 0.2426615 0.0001616
CBS_overall CBS_ts_reason 0.7610498 0.0000000
CBS_STM CBS_ts_reason 0.4366222 0.0000000
CBS_reason CBS_ts_reason 0.9345015 0.0000000
CBS_verbal CBS_ts_reason 0.3728955 0.0000000
CBS_ts_memory CBS_ts_reason 0.4366222 0.0000000
age CBS_ts_verbalab -0.0442319 0.4979794
age_first_phone CBS_ts_verbalab -0.1165764 0.0763787
dist_daily CBS_ts_verbalab -0.0082327 0.8996747
dist_study CBS_ts_verbalab -0.0715813 0.2723958
pow_not_using CBS_ts_verbalab -0.0735943 0.2591043
pow_notifications_on CBS_ts_verbalab 0.0393479 0.5466527
pow_vibrate CBS_ts_verbalab 0.0027433 0.9664916
pow_study CBS_ts_verbalab 0.0468971 0.4724181
pow_exam CBS_ts_verbalab -0.0307737 0.6373825
pow_lec CBS_ts_verbalab -0.0018593 0.9772854
pow_sleep CBS_ts_verbalab -0.0260996 0.6893461
com_gen CBS_ts_verbalab -0.1824283 0.0048432
com_unattended CBS_ts_verbalab -0.2088639 0.0012200
com_leave_with_other CBS_ts_verbalab -0.1146460 0.0781651
com_locked CBS_ts_verbalab 0.0425312 0.5146644
com_room_task CBS_ts_verbalab -0.0980845 0.1321594
NMPQ_sum CBS_ts_verbalab 0.0540876 0.4071763
MPIQ_sum CBS_ts_verbalab 0.0080800 0.9015255
MPIQ_SI_sum CBS_ts_verbalab 0.1058344 0.1041087
MPIQ_VFO_sum CBS_ts_verbalab -0.0029795 0.9636078
SAD_dep_sum CBS_ts_verbalab 0.0991907 0.1278323
SAD_ea_sum CBS_ts_verbalab 0.0972394 0.1355403
SAD_access_sum CBS_ts_verbalab 0.1314311 0.0432346
SAD_dist_sum CBS_ts_verbalab 0.0187620 0.7738557
Score_Double Trouble CBS_ts_verbalab 0.2971749 0.0000032
Score_Odd One Out CBS_ts_verbalab 0.0962139 0.1397316
Score_Digit Span CBS_ts_verbalab 0.7459619 0.0000000
Score_Feature Match CBS_ts_verbalab 0.2435982 0.0001522
Score_Polygons CBS_ts_verbalab 0.2891996 0.0000060
Score_Paired Associates CBS_ts_verbalab 0.2194246 0.0006697
Score_Token Search CBS_ts_verbalab 0.2399778 0.0001918
Score_Spatial Planning CBS_ts_verbalab 0.1916861 0.0030476
Score_Rotations CBS_ts_verbalab 0.1864423 0.0039721
Score_Spatial Span CBS_ts_verbalab 0.2369906 0.0002317
Score_Grammatical Reasoning CBS_ts_verbalab 0.7459619 0.0000000
Score_Monkey Ladder CBS_ts_verbalab 0.2930423 0.0000045
CBS_overall CBS_ts_verbalab 0.6484057 0.0000000
CBS_STM CBS_ts_verbalab 0.3807891 0.0000000
CBS_reason CBS_ts_verbalab 0.3687095 0.0000000
CBS_verbal CBS_ts_verbalab 0.8822225 0.0000000
CBS_ts_memory CBS_ts_verbalab 0.3807891 0.0000000
CBS_ts_reason CBS_ts_verbalab 0.3292647 0.0000002
age CBS_ts_con -0.1678115 0.0096494
age_first_phone CBS_ts_con -0.0927362 0.1591541
dist_daily CBS_ts_con -0.1004939 0.1228765
dist_study CBS_ts_con -0.1633750 0.0117764
pow_not_using CBS_ts_con 0.0015785 0.9807150
pow_notifications_on CBS_ts_con 0.0228860 0.7259573
pow_vibrate CBS_ts_con -0.1244780 0.0556672
pow_study CBS_ts_con -0.0190341 0.7706664
pow_exam CBS_ts_con -0.0844962 0.1948914
pow_lec CBS_ts_con -0.0759055 0.2444029
pow_sleep CBS_ts_con -0.0591457 0.3646629
com_gen CBS_ts_con -0.0871205 0.1813356
com_unattended CBS_ts_con -0.0766634 0.2397113
com_leave_with_other CBS_ts_con -0.0704736 0.2799037
com_locked CBS_ts_con -0.0013601 0.9833826
com_room_task CBS_ts_con -0.0270313 0.6788614
NMPQ_sum CBS_ts_con -0.0576435 0.3769915
MPIQ_sum CBS_ts_con -0.0577028 0.3765002
MPIQ_SI_sum CBS_ts_con 0.0453177 0.4874783
MPIQ_VFO_sum CBS_ts_con 0.0170843 0.7936009
SAD_dep_sum CBS_ts_con 0.0382324 0.5580888
SAD_ea_sum CBS_ts_con 0.0735638 0.2593023
SAD_access_sum CBS_ts_con -0.0105646 0.8714751
SAD_dist_sum CBS_ts_con 0.0525637 0.4205389
Score_Double Trouble CBS_ts_con 0.7745067 0.0000000
Score_Odd One Out CBS_ts_con 0.0630590 0.3337385
Score_Digit Span CBS_ts_con 0.2305961 0.0003442
Score_Feature Match CBS_ts_con 0.7745067 0.0000000
Score_Polygons CBS_ts_con 0.2394734 0.0001981
Score_Paired Associates CBS_ts_con 0.1535770 0.0179893
Score_Token Search CBS_ts_con 0.2521779 0.0000866
Score_Spatial Planning CBS_ts_con 0.1633711 0.0117784
Score_Rotations CBS_ts_con 0.2806094 0.0000116
Score_Spatial Span CBS_ts_con 0.2614664 0.0000460
Score_Grammatical Reasoning CBS_ts_con 0.2902466 0.0000056
Score_Monkey Ladder CBS_ts_con 0.2735043 0.0000195
CBS_overall CBS_ts_con 0.6435106 0.0000000
CBS_STM CBS_ts_con 0.3620429 0.0000000
CBS_reason CBS_ts_con 0.5568385 0.0000000
CBS_verbal CBS_ts_con 0.6387497 0.0000000
CBS_ts_memory CBS_ts_con 0.3620429 0.0000000
CBS_ts_reason CBS_ts_con 0.3219213 0.0000004
CBS_ts_verbalab CBS_ts_con 0.3491081 0.0000000

# print tables using kable
kable(as.data.frame(format(main_corr2$r, scientific = FALSE)), caption = "Study 2 - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: r values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.2814 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily -0.1794 -0.1031 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study -0.027 0.0087 0.1504 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using -0.13 0.0565 -0.0576 -0.0595 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on -0.0556 -0.0101 0.1454 0.0514 -0.1218 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.0673 0.0392 -0.0672 0.0278 -0.0879 0.169 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.0245 -0.0627 0.3214 0.0583 -0.4922 0.2338 -0.0051 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.0351 -0.0305 0.0763 0.0043 -0.2946 0.0873 -0.0094 0.3333 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.1121 -0.0997 0.187 -0.0238 -0.4245 0.1804 0.1197 0.5321 0.2934 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.0866 -0.0922 0.0582 -0.0518 -0.4079 0.0271 0.1321 0.5443 0.2881 0.5474 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen -0.0037 0.0881 -0.0752 -0.1599 0.0134 0.0342 0.0542 0.0018 0.0425 0.0785 0.1364 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.1324 0.1198 -0.0326 -0.0046 0.1284 -0.0553 -0.0182 -0.1168 0.0506 -0.0596 -0.0635 0.4242 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.0405 0.0155 -0.0026 -0.0228 0.1006 -0.0115 0.0479 -0.0463 0.0696 0.0093 -0.0549 0.5596 0.6507 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked -0.0713 -0.0264 0.1427 0.0484 -0.0089 0.0215 0.0178 0.0822 -0.0252 0.0217 0.0543 -0.3327 -0.3224 -0.3267 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.164 0.0478 -0.0603 -0.0917 0.0394 -0.0222 -0.0375 -0.0055 0.0564 0.1686 0.0801 0.4223 0.4406 0.4186 -0.112 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum -0.1879 -0.1113 0.4031 0.2247 -0.1323 0.1833 -0.0877 0.2365 0.0272 0.0946 0.062 -0.2633 -0.237 -0.1833 0.2121 -0.284 1 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum -0.1441 -0.173 0.4774 0.2468 -0.2042 0.1631 -0.1574 0.324 0.1214 0.2543 0.1445 -0.2274 -0.1402 -0.1023 0.1496 -0.2107 0.7484 1 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum -0.0631 -0.2303 0.2402 0.1902 -0.1637 0.2332 -0.0314 0.2283 0.0171 0.2198 0.13 -0.3505 -0.3035 -0.2948 0.1922 -0.2569 0.7098 0.6636 1 - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum -0.0131 0.0265 0.1928 0.142 -0.1186 0.1707 -0.0243 0.1102 0.0191 0.1726 0.0463 -0.1189 -0.1348 -0.0196 0.0798 -0.1303 0.4475 0.4434 0.3771 1 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum -0.164 -0.1886 0.325 0.1199 -0.1935 0.2174 -0.0326 0.2297 0.0314 0.1461 0.0631 -0.2359 -0.2548 -0.1891 0.1837 -0.2736 0.7196 0.6487 0.7405 0.4293 1 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum -0.0785 -0.1088 0.3054 0.1587 -0.184 0.178 -0.0156 0.2578 0.0256 0.153 0.1042 -0.2284 -0.2435 -0.1786 0.1446 -0.254 0.6353 0.6662 0.5917 0.5526 0.6202 1 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum -0.1405 -0.1201 0.3125 0.1805 -0.2089 0.1982 -0.0686 0.1633 -0.054 0.1512 -0.0114 -0.2478 -0.3195 -0.2621 0.1909 -0.2822 0.7173 0.6443 0.6671 0.4354 0.7229 0.5639 1 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum -0.0497 -0.1608 0.4723 0.1743 -0.1877 0.1845 -0.1481 0.2663 0.0037 0.194 0.0719 -0.1965 -0.1734 -0.2041 0.1712 -0.1527 0.5036 0.6368 0.4435 0.3439 0.4765 0.4563 0.5221 1 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble -0.073 -0.0782 -0.0849 -0.1729 -0.0844 0.0553 -0.0219 0.133 0.0389 0.0069 0.0286 -0.0515 -0.0881 0.015 0.0305 -0.012 -0.0614 -0.0598 0.034 0.0023 0.0396 0.0464 -0.0314 0.0368 1 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out -0.002 -0.0585 0.1131 -0.0696 0.0707 -0.015 -0.0817 0.0355 -0.1301 0.0066 -0.1005 0.0564 -0.0101 0.0326 0.0204 0.0497 0.0189 0.0868 0.0671 -0.0343 0.0567 0.0087 0.1115 0.1312 0.0758 1 - - - - - - - - - - - - - - - - - -
Score_Digit Span -0.0295 -0.1533 -0.0291 0.0228 -0.0024 -0.0518 -0.0197 -0.0082 -0.0674 -0.1332 -0.0623 -0.1966 -0.2439 -0.1742 0.063 -0.1729 0.0787 0.0326 0.1246 -0.0556 0.1373 0.1127 0.0824 0.0729 0.1629 0.0552 1 - - - - - - - - - - - - - - - - -
Score_Feature Match -0.187 -0.0648 -0.0708 -0.0802 0.0869 -0.0198 -0.1709 -0.1624 -0.1697 -0.1245 -0.1202 -0.0835 -0.0307 -0.1242 -0.0326 -0.0298 -0.0278 -0.0296 0.0362 0.0242 0.0196 0.0675 0.015 0.0446 0.1997 0.0219 0.1943 1 - - - - - - - - - - - - - - - -
Score_Polygons -0.0767 -0.0524 0.0513 0.03 -0.1193 0.0923 -0.0328 0.0552 0.0404 0.058 -0.0106 -0.0255 -0.1001 -0.0706 0.096 0.031 0.1238 0.1764 0.1485 0.0847 0.0987 0.1727 0.1767 0.1457 0.1438 0.0509 0.1773 0.2272 1 - - - - - - - - - - - - - - -
Score_Paired Associates -0.0425 0.0121 0.0476 -0.1013 0.0565 -0.0026 -0.0874 0.0219 -0.1341 0.0744 -0.022 0.0775 0.1533 0.1347 -0.0061 0.1498 -0.0731 -0.0458 -0.0903 -0.0489 -0.0766 -0.032 -0.0794 -0.0736 0.1095 0.0499 0.0768 0.1284 0.0837 1 - - - - - - - - - - - - - -
Score_Token Search -0.0489 -0.0471 0.0115 0.021 -0.0011 0.0701 -0.0816 0.0476 -0.0541 -0.0178 -0.0639 -0.0709 -0.0518 -0.0455 0.0287 -0.0231 -0.031 0.0085 0.0039 -0.1109 -0.044 0.0062 0.0136 0.0828 0.2901 0.2129 0.1956 0.1006 0.227 0.2357 1 - - - - - - - - - - - - -
Score_Spatial Planning -0.0795 0.0156 0.0514 -0.034 -0.0947 -0.0501 0.0263 0.0633 0.0611 0.0754 0.009 0.0135 0.0022 0.0447 -0.0073 0.0702 0.0069 0.0171 -0.0458 -0.0512 -0.0365 -0.0375 -0.0219 0.0135 0.1833 0.1002 0.0581 0.0698 0.2519 0.1677 0.2808 1 - - - - - - - - - - - -
Score_Rotations -0.1125 -0.0842 0.0081 -0.045 -0.0493 0.0581 -0.029 0.1368 0.0997 0.1248 0.1233 0.0569 0.0322 -0.0427 -0.031 0.039 -0.0335 -0.0327 -0.0326 -0.0153 -0.1169 -0.0384 -0.0092 0.0262 0.2116 -0.1115 0.0523 0.2231 0.1935 0.0953 0.1632 0.2038 1 - - - - - - - - - - -
Score_Spatial Span -0.1791 -0.0618 0.0164 0.0398 -0.0222 0.0545 -0.0208 0.0701 0.0544 0.0906 0.0351 0.0042 -0.1259 -0.0628 -0.0532 0.0554 -0.0842 -0.038 -0.0472 -0.0534 -0.0411 -0.0494 -0.0057 0.0053 0.1674 -0.0071 0.1093 0.2376 0.266 0.1043 0.338 0.2951 0.2337 1 - - - - - - - - - -
Score_Grammatical Reasoning -0.0365 -0.0212 0.0168 -0.1296 -0.1074 0.1106 0.0238 0.0781 0.0215 0.1305 0.0234 -0.0756 -0.0677 0.0032 5e-04 0.0265 0.002 -0.0205 0.0333 0.0512 0.0107 0.0324 0.1137 -0.0449 0.2805 0.0884 0.1129 0.1691 0.2542 0.2505 0.1624 0.2279 0.2259 0.2442 1 - - - - - - - - -
Score_Monkey Ladder -0.0694 -0.0116 -0.1183 -0.0821 0.0327 0.0368 -0.0593 -4e-04 0.0192 0.0197 -0.0229 -0.0589 -0.0543 -0.011 -0.0477 0.0467 -0.1154 -0.1369 -0.0742 -0.1289 -0.0954 -0.0752 -0.0678 -0.0639 0.2681 0.0285 0.1523 0.1555 0.1526 0.1097 0.2571 0.2828 0.0989 0.3311 0.2849 1 - - - - - - - -
CBS_overall -0.1604 -0.1031 0.0022 -0.103 -0.0401 0.0579 -0.0951 0.0806 -0.0377 0.0533 -0.0313 -0.0606 -0.1002 -0.0515 0.0105 0.0395 -0.0336 -0.0072 0.027 -0.0576 -0.0082 0.0367 0.051 0.0645 0.5297 0.268 0.402 0.4671 0.5186 0.413 0.5932 0.5346 0.4436 0.5686 0.5654 0.5346 1 - - - - - - -
CBS_STM -0.1308 -0.0417 -0.0165 -0.0472 0.0254 0.0611 -0.0959 0.0536 -0.0441 0.0643 -0.0283 -0.0186 -0.0303 0.0059 -0.0301 0.088 -0.1169 -0.0817 -0.08 -0.1316 -0.099 -0.0579 -0.0536 -0.019 0.3214 0.1093 0.2055 0.2394 0.2807 0.5579 0.7046 0.395 0.2275 0.6825 0.3626 0.6534 0.8118 1 - - - - - -
CBS_reason -0.1675 -0.0889 0.056 -0.0728 -0.0387 0.024 -0.1055 0.047 -0.0361 0.0513 -0.0362 0.0065 -0.039 -0.0587 0.0167 0.0586 0.0323 0.0798 0.0635 0.003 0.0079 0.0633 0.0996 0.1322 0.2981 0.3886 0.1966 0.5645 0.6309 0.1922 0.3604 0.5951 0.5524 0.3753 0.3534 0.263 0.8171 0.4583 1 - - - - -
CBS_verbal -0.0685 -0.1243 -0.0479 -0.1379 -0.0958 0.0562 -0.0088 0.1001 -0.0035 0.002 -0.0051 -0.1596 -0.1971 -0.0769 0.0463 -0.0781 0.0095 -0.0235 0.0946 -0.0011 0.0925 0.0944 0.0812 0.032 0.7117 0.1082 0.6291 0.2777 0.2837 0.2154 0.3196 0.2314 0.2415 0.2569 0.6871 0.3478 0.7382 0.4386 0.4182 1 - - - -
CBS_ts_memory -0.1308 -0.0417 -0.0165 -0.0472 0.0254 0.0611 -0.0959 0.0536 -0.0441 0.0643 -0.0283 -0.0186 -0.0303 0.0059 -0.0301 0.088 -0.1169 -0.0817 -0.08 -0.1316 -0.099 -0.0579 -0.0536 -0.019 0.3214 0.1093 0.2055 0.2394 0.2807 0.5579 0.7046 0.395 0.2275 0.6825 0.3626 0.6534 0.8118 1 0.4583 0.4386 1 - - -
CBS_ts_reason -0.1167 -0.0767 0.0965 -0.0512 -0.083 0.0368 -0.0505 0.1254 0.0307 0.1142 0.0091 0.0437 -0.0327 -0.0156 0.0337 0.0819 0.0501 0.1068 0.0592 -0.0069 8e-04 0.0455 0.1109 0.1365 0.265 0.4483 0.1478 0.2337 0.6452 0.1711 0.3811 0.6709 0.5545 0.3396 0.3434 0.2427 0.761 0.4366 0.9345 0.3729 0.4366 1 - -
CBS_ts_verbalab -0.0442 -0.1166 -0.0082 -0.0716 -0.0736 0.0393 0.0027 0.0469 -0.0308 -0.0019 -0.0261 -0.1824 -0.2089 -0.1146 0.0425 -0.0981 0.0541 0.0081 0.1058 -0.003 0.0992 0.0972 0.1314 0.0188 0.2972 0.0962 0.746 0.2436 0.2892 0.2194 0.24 0.1917 0.1864 0.237 0.746 0.293 0.6484 0.3808 0.3687 0.8822 0.3808 0.3293 1 -
CBS_ts_con -0.1678 -0.0927 -0.1005 -0.1634 0.0016 0.0229 -0.1245 -0.019 -0.0845 -0.0759 -0.0591 -0.0871 -0.0767 -0.0705 -0.0014 -0.027 -0.0576 -0.0577 0.0453 0.0171 0.0382 0.0736 -0.0106 0.0526 0.7745 0.0631 0.2306 0.7745 0.2395 0.1536 0.2522 0.1634 0.2806 0.2615 0.2902 0.2735 0.6435 0.362 0.5568 0.6387 0.362 0.3219 0.3491 1
  

kable(as.data.frame(format(main_corr2$P, scientific = FALSE)), caption = "Study 2 - Correlation: p values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: p values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 0.0056 0.1172 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.679 0.8957 0.0206 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 0.0455 0.3916 0.3778 0.3616 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.3946 0.8784 0.0252 0.4313 0.0612 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.3022 0.552 0.3027 0.6705 0.1776 0.0091 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.7072 0.3419 0 0.3715 0 3e-04 0.9377 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.5906 0.6442 0.2421 0.9474 0 0.1803 0.8859 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.085 0.1301 0.0039 0.715 0 0.0053 0.0657 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.1839 0.1618 0.3727 0.4273 0 0.6783 0.0421 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 0.9544 0.181 0.2491 0.0137 0.8369 0.6005 0.4065 0.9785 0.5145 0.2287 0.0358 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.0417 0.0684 0.6176 0.944 0.0484 0.3966 0.7799 0.0727 0.4377 0.3612 0.3307 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.535 0.8146 0.9678 0.7273 0.1225 0.8596 0.4627 0.4784 0.2857 0.8873 0.4003 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 0.2745 0.6889 0.0281 0.4581 0.8915 0.7414 0.7856 0.2075 0.6991 0.7401 0.4057 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.0115 0.4683 0.3554 0.1596 0.5461 0.7342 0.5661 0.9329 0.3872 0.0093 0.2195 0 0 0 0.0854 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 0.0037 0.0908 0 5e-04 0.0418 0.0046 0.1783 2e-04 0.6771 0.1465 0.342 0 2e-04 0.0046 0.001 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 0.0266 0.0083 0 1e-04 0.0016 0.0119 0.0153 0 0.062 1e-04 0.0261 4e-04 0.0309 0.1161 0.0212 0.0011 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 0.3337 4e-04 2e-04 0.0033 0.0116 3e-04 0.631 4e-04 0.7932 7e-04 0.0456 0 0 0 0.003 1e-04 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 0.8411 0.6882 0.0029 0.0288 0.0683 0.0085 0.7096 0.0904 0.7705 0.0078 0.4778 0.0678 0.0382 0.7638 0.2212 0.0451 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 0.0114 0.0039 0 0.0653 0.0028 8e-04 0.6172 4e-04 0.6308 0.0245 0.3336 2e-04 1e-04 0.0035 0.0045 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 0.2284 0.0982 0 0.0145 0.0045 0.006 0.811 1e-04 0.6954 0.0184 0.1096 4e-04 2e-04 0.0058 0.026 1e-04 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 0.0307 0.0678 0 0.0053 0.0012 0.0022 0.2926 0.0118 0.4077 0.0199 0.8613 1e-04 0 0 0.0032 0 0 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 0.4466 0.0142 0 0.0071 0.0037 0.0044 0.0226 0 0.9547 0.0027 0.2703 0.0024 0.0075 0.0016 0.0083 0.0187 0 0 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 0.2631 0.2352 0.1927 0.0076 0.1951 0.3967 0.7373 0.0408 0.5517 0.9155 0.6617 0.43 0.1765 0.8181 0.6404 0.8537 0.3463 0.3595 0.6023 0.9725 0.544 0.4767 0.6311 0.5727 NA - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 0.9759 0.3752 0.0823 0.2862 0.2781 0.8184 0.2101 0.5866 0.0454 0.9195 0.1228 0.3874 0.8769 0.6174 0.7549 0.4459 0.7724 0.1829 0.3033 0.5989 0.3848 0.8938 0.0868 0.0436 0.245 NA - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.6511 0.0195 0.6555 0.727 0.9702 0.4269 0.7625 0.9006 0.3017 0.0404 0.3392 0.0024 1e-04 0.0072 0.3344 0.0076 0.2275 0.6181 0.0554 0.3938 0.0347 0.0834 0.2064 0.2637 0.0121 0.3979 NA - - - - - - - - - - - - - - - - -
Score_Feature Match 0.0039 0.326 0.278 0.2188 0.1825 0.7611 0.0084 0.0123 0.0088 0.0556 0.0647 0.2005 0.6385 0.0563 0.6175 0.6478 0.6697 0.6502 0.5794 0.7108 0.7639 0.3007 0.8185 0.4944 0.002 0.7376 0.0027 NA - - - - - - - - - - - - - - - -
Score_Polygons 0.2393 0.4273 0.4317 0.6464 0.0667 0.1565 0.6154 0.3976 0.5359 0.3743 0.8712 0.6957 0.1245 0.2789 0.1406 0.6347 0.057 0.0065 0.0222 0.1937 0.1297 0.0077 0.0064 0.0249 0.0269 0.4358 0.0062 4e-04 NA - - - - - - - - - - - - - - -
Score_Paired Associates 0.5148 0.8541 0.4658 0.1199 0.3865 0.9687 0.1797 0.7369 0.0391 0.2538 0.7362 0.2349 0.0182 0.0383 0.9261 0.0211 0.2625 0.4824 0.166 0.4542 0.24 0.6239 0.2236 0.2587 0.0925 0.4443 0.2386 0.0484 0.1989 NA - - - - - - - - - - - - - -
Score_Token Search 0.4535 0.4753 0.8598 0.748 0.9871 0.2825 0.2108 0.4655 0.4074 0.785 0.3274 0.2767 0.4277 0.4862 0.6599 0.7236 0.6348 0.8961 0.9523 0.0885 0.4998 0.9244 0.8347 0.2041 0 0.001 0.0025 0.1226 4e-04 3e-04 NA - - - - - - - - - - - - -
Score_Spatial Planning 0.2227 0.8127 0.4314 0.6023 0.1461 0.4428 0.6875 0.3321 0.3491 0.2478 0.8904 0.8366 0.9727 0.4938 0.9115 0.2817 0.9154 0.7929 0.483 0.4332 0.576 0.5654 0.7373 0.8361 0.0046 0.124 0.3734 0.2846 1e-04 0.0097 0 NA - - - - - - - - - - - -
Score_Rotations 0.084 0.2014 0.9017 0.4907 0.4502 0.3734 0.6573 0.0353 0.126 0.055 0.0581 0.383 0.6222 0.5128 0.6347 0.5505 0.6076 0.616 0.6178 0.8147 0.0724 0.5565 0.8884 0.6885 0.001 0.0867 0.4229 5e-04 0.0028 0.1433 0.0119 0.0016 NA - - - - - - - - - - -
Score_Spatial Span 0.0057 0.3483 0.8019 0.5417 0.7334 0.4039 0.7497 0.2825 0.4042 0.1643 0.5903 0.949 0.0529 0.3356 0.415 0.3961 0.1964 0.5602 0.4692 0.4133 0.5291 0.449 0.9299 0.935 0.0098 0.913 0.093 2e-04 0 0.1094 0 0 3e-04 NA - - - - - - - - - -
Score_Grammatical Reasoning 0.5764 0.7476 0.7964 0.0463 0.0992 0.0895 0.7152 0.2309 0.7424 0.0448 0.7199 0.2466 0.2996 0.9612 0.9941 0.6843 0.9755 0.7536 0.6103 0.4327 0.8699 0.6198 0.0806 0.4915 0 0.1751 0.0828 0.0091 1e-04 1e-04 0.0123 4e-04 5e-04 1e-04 NA - - - - - - - - -
Score_Monkey Ladder 0.287 0.8603 0.0691 0.2077 0.6161 0.5729 0.3631 0.995 0.7693 0.7626 0.7261 0.3667 0.405 0.8666 0.4644 0.4741 0.0761 0.0352 0.2552 0.0475 0.143 0.249 0.2988 0.3274 0 0.6628 0.019 0.0166 0.0187 0.0921 1e-04 0 0.129 0 0 NA - - - - - - - -
CBS_overall 0.0134 0.1175 0.9726 0.1139 0.5393 0.3745 0.1445 0.2164 0.5632 0.4138 0.6312 0.3526 0.1241 0.4298 0.8725 0.5453 0.6066 0.9124 0.6792 0.3777 0.8998 0.5743 0.4348 0.3228 0 0 0 0 0 0 0 0 0 0 0 0 NA - - - - - - -
CBS_STM 0.0442 0.5277 0.8009 0.4697 0.6975 0.3489 0.141 0.4115 0.4992 0.3246 0.6644 0.7763 0.6428 0.9274 0.6445 0.1768 0.0724 0.2102 0.22 0.043 0.1287 0.375 0.4115 0.7708 0 0.093 0.0015 2e-04 0 0 0 0 4e-04 0 0 0 0 NA - - - - - -
CBS_reason 0.0098 0.1772 0.3905 0.2645 0.5534 0.7135 0.1053 0.4716 0.58 0.4314 0.5788 0.9205 0.5506 0.3685 0.7986 0.369 0.6207 0.2209 0.3302 0.9636 0.9037 0.3317 0.1262 0.042 0 0 0.0024 0 0 0.003 0 0 0 0 0 0 0 0 NA - - - - -
CBS_verbal 0.2934 0.0587 0.4628 0.0338 0.1415 0.3889 0.893 0.1245 0.9575 0.975 0.9376 0.0139 0.0023 0.238 0.4778 0.231 0.8844 0.7185 0.1464 0.9868 0.1557 0.1472 0.2128 0.6245 0 0.0967 0 0 0 8e-04 0 3e-04 2e-04 1e-04 0 0 0 0 0 NA - - - -
CBS_ts_memory 0.0442 0.5277 0.8009 0.4697 0.6975 0.3489 0.141 0.4115 0.4992 0.3246 0.6644 0.7763 0.6428 0.9274 0.6445 0.1768 0.0724 0.2102 0.22 0.043 0.1287 0.375 0.4115 0.7708 0 0.093 0.0015 2e-04 0 0 0 0 4e-04 0 0 0 0 0 0 0 NA - - -
CBS_ts_reason 0.0729 0.2447 0.1385 0.4331 0.2027 0.573 0.4387 0.0539 0.6387 0.0794 0.8887 0.5035 0.6167 0.8117 0.6059 0.209 0.443 0.101 0.3641 0.9155 0.9896 0.4859 0.0885 0.0357 0 0 0.0228 3e-04 0 0.0083 0 0 0 0 0 2e-04 0 0 0 0 0 NA - -
CBS_ts_verbalab 0.498 0.0764 0.8997 0.2724 0.2591 0.5467 0.9665 0.4724 0.6374 0.9773 0.6893 0.0048 0.0012 0.0782 0.5147 0.1322 0.4072 0.9015 0.1041 0.9636 0.1278 0.1355 0.0432 0.7739 0 0.1397 0 2e-04 0 7e-04 2e-04 0.003 0.004 2e-04 0 0 0 0 0 0 0 0 NA -
CBS_ts_con 0.0096 0.1592 0.1229 0.0118 0.9807 0.726 0.0557 0.7707 0.1949 0.2444 0.3647 0.1813 0.2397 0.2799 0.9834 0.6789 0.377 0.3765 0.4875 0.7936 0.5581 0.2593 0.8715 0.4205 0 0.3337 3e-04 0 2e-04 0.018 1e-04 0.0118 0 0 0 0 0 0 0 0 0 0 0 NA

kable(as.data.frame(format(main_corr2$n, scientific = FALSE)), caption = "Study 2 - Correlation: n values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: n values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 232 232 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 237 232 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 237 232 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 237 232 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 237 232 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 237 232 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 237 232 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 237 232 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 237 232 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 237 232 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 237 232 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 237 232 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 237 232 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - - -
Score_Digit Span 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - - -
Score_Feature Match 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - - -
Score_Polygons 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - - -
Score_Paired Associates 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - - -
Score_Token Search 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - - -
Score_Spatial Planning 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - - -
Score_Rotations 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - - -
Score_Spatial Span 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - - -
Score_Grammatical Reasoning 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - - -
Score_Monkey Ladder 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - - -
CBS_overall 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - - -
CBS_STM 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - - -
CBS_reason 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - - -
CBS_verbal 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - - -
CBS_ts_memory 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - - -
CBS_ts_reason 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 - -
CBS_ts_verbalab 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 -
CBS_ts_con 237 232 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237


# use this method to create a "recorded plot" of the corr matrix called "corr_plot_main" in this case
  # must have "recordPlot()" within the {} or will not work
  # the ggsave() function is used after by calling to the recorded plot using "replayPlot()"

# whole original matrix
corr_plot_main_all <- {
  corrplot(main_corr$r, method = "circle", col = (colorRampPalette(c("purple", "white", "blue"))(50)),  
         type = "upper",  
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .45, #Text label color and rotation
         # Combine with significance level
         p.mat = main_corr$P, sig.level = 0.05, 
         addgrid.col = "white",
         insig = "blank",# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1, 
         is.corr = F
         )
  recordPlot()
}


#$ create new df for corrplor with cleaned up colnames
  # for r-values
  main_corr_r <- main_corr$r[c(17:36, 41:44), c(17:36, 41:44)]
  
  colnames(main_corr_r) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.", "DT", "OOO", "DS", "FM", "P", "PA", "TS", "SP", "R", "SS", "GR", "ML", "Memory", "Reasoning", "Verbal Ability", "Concentration")
  
  rownames(main_corr_r) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.", "DT", "OOO", "DS", "FM", "P", "PA", "TS", "SP", "R", "SS", "GR", "ML", "Memory", "Reasoning", "Verbal Ability", "Concentration")
  
  # add ro names to match cols
  rownames(main_corr_r) <- c(colnames(main_corr_r))
  
  # for p-values
  main_corr_p <- main_corr$P[c(17:36, 41:44), c(17:36, 41:44)]
  
  colnames(main_corr_p) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.", "DT", "OOO", "DS", "FM", "P", "PA", "TS", "SP", "R", "SS", "GR", "ML", "Memory", "Reasoning", "Verbal Ability", "Concentration")
  
  rownames(main_corr_p) <- c("NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.", "DT", "OOO", "DS", "FM", "P", "PA", "TS", "SP", "R", "SS", "GR", "ML", "Memory", "Reasoning", "Verbal Ability", "Concentration")
  
  # add ro names to match cols
  rownames(main_corr_p) <- c(colnames(main_corr_p))


### show corrplots

# ques + tests + composites
corr_plot_main_ques_CBS_all <- {
  corrplot(main_corr_r[c(1:8, 9:20, 21:24), c(1:8, 9:20, 21:24)], method = 'color',
         col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         # type = "upper", 
         diag = F, # remove central diagonal
         tl.col = "black", tl.srt = 90, tl.cex = .5, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         p.mat = main_corr_p[c(1:8, 9:20, 21:24), c(1:8, 9:20, 21:24)], sig.level = c(.001, .01, .05),
         insig = "label_sig", pch.cex = .5, pch.col = "black"
         # insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_main_ques_CBS_all_final_oct4", plot = replayPlot(corr_plot_main_ques_CBS_all), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

# tests + composites
corr_plot_main_CBS_comp <- {
  corrplot(main_corr_r[c(9:20, 21:24), c(9:20, 21:24)], method = 'color',
         col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         # type = "upper", 
         diag = F, # remove central diagonal
         tl.col = "black", tl.srt = 90, tl.cex = .5, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         p.mat = main_corr_p[c(9:20, 21:24), c(9:20, 21:24)], sig.level = c(.001, .01, .05),
         insig = "label_sig", pch.cex = .5, pch.col = "black"
         # insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_main_CBS_comp_final_oct4", plot = replayPlot(corr_plot_main_CBS_comp), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

# ques + composites
corr_plot_main_ques_comp <- {
  corrplot(main_corr_r[c(1:8, 21:24), c(1:8, 21:24)], col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         # type = "upper", 
         diag = F, # remove central diagonal
         tl.col = "black", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         # p.mat = main_corr_p[c(1:8, 9:20, 21:24), c(1:8, 9:20, 21:24)], sig.level = .05
         insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# ques
corr_plot_main_ques <- {
  corrplot(main_corr_r[c(1:8), c(1:8)], method = 'color',
         col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         # type = "upper", 
         diag = F, # remove central diagonal
         tl.col = "black", tl.srt = 90, tl.cex = .5, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         p.mat = main_corr_p[c(1:8), c(1:8)], sig.level = c(.001, .01, .05),
         insig = "label_sig", pch.cex = .5, pch.col = "black"
         # insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_main_ques_final_oct4", plot = replayPlot(corr_plot_main_ques), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

# tests
corr_plot_main_CBS <- {
  corrplot(main_corr_r[c(9:20), c(9:20)], col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         type = "upper",
         diag = F, # remove central diagonal
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         # p.mat = main_corr_p[c(1:8, 9:20, 21:24), c(1:8, 9:20, 21:24)], sig.level = .05
         insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# composites
corr_plot_main_comp <- {
  corrplot(main_corr_r[c(21:24), c(21:24)], col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),
         type = "upper",
         diag = F, # remove central diagonal
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         addgrid.col = NA, # add grid colour
         # addCoef.col = "black", # Add coefficient of correlation
         # addCoefasPercent = T # add as coefficient as percent
         # number.cex = .25, # size of the coeff
         # number.digits = 2, # num decimals in coeff
         p.mat = main_corr_p[c(21:24), c(21:24)], sig.level = .05,
         insig = "blank"# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_main_comp_oct4", plot = replayPlot(corr_plot_main_comp), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

# export csv files of R values & p values
  # write.csv(main_corr_r,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_corr_r(sept30).csv", row.names = FALSE)
  # 
  # write.csv(main_corr_p,"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/main_corr_p(sept30).csv", row.names = FALSE)

Pilot & Main Correlations

Create join corr plot with study 1 & Study 2 for easy comparison. This only compares the items that were asked in both studies: no CBS scores.


# TO JOIN W/ PILOT DATA 
# get data from main data frame
# for pilot
pilot_corr_join <- 
  pilot_sur_data %>% 
  select(age, age_first_phone, dist_daily, dist_study, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum,) %>% 
  as.matrix() %>% 
  rcorr(type = "pearson")

# for study 2
main_corr_join <- 
  main_all_data_final %>% 
  select(age, age_first_phone, dist_daily, dist_study, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% 
  as.matrix() %>% 
  rcorr(type = "pearson")

# export
  # pilot study 
  # write.csv(cbind(colnames(pilot_corr_join$r), pilot_corr_join$r),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/JOIN_pilot_corr_r(oct4).csv", row.names = FALSE)
  # write.csv(cbind(colnames(pilot_corr_join$P), pilot_corr_join$P),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/JOIN_pilot_corr_p(oct4).csv", row.names = FALSE)
  
  # study 2
  # write.csv(cbind(colnames(main_corr_join$r), main_corr_join$r),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/JOIN_main_corr_r(oct4).csv", row.names = FALSE)
  # write.csv(cbind(colnames(main_corr_join$P), main_corr_join$P),"/Users/anaceciliaruizpardo/RStudio/Smartphone_study/Study 2- CBS Trials/Dissertation (06:07:21)/Excel Outputs/JOIN_main_corr_p(oct4).csv", row.names = FALSE)


# corrplot(M, p.mat = testRes$p, method = 'color', diag = FALSE, type = 'upper',
#          sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9, 
#          insig = 'label_sig', pch.col = 'grey20', order = 'AOE')
  
# upload edited csvs to make joint corr plot
# for r-values
  joint_corr_r <- read.csv("JOINT_corr_r(oct4).csv", header = T) %>% select(-X)
    # rename columns & rows
    colnames(joint_corr_r) <- c("Age", "First Phone", "Daily Dist.", "Study Dist.", "NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
    rownames(joint_corr_r) <- c("Age", "First Phone", "Daily Dist.", "Study Dist.", "NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
    
    # colnames(joint_corr_r) <- c("Age", "Age of first phone", "Dist. daily", "Dist. durring study", "NMPQ", "Involvement", "Self-Identity", "Validation from Others", "Dependence", "Emotional Attachment", "Accessibility", "Distractability")
    # rownames(joint_corr_r) <- c("Age", "Age of first phone", "Dist. daily", "Dist. durring study", "NMPQ", "Involvement", "Self-Identity", "Validation from Others", "Dependence", "Emotional Attachment", "Accessibility", "Distractability")
 
# for p-values
  joint_corr_p <- read.csv("JOINT_corr_p(oct4).csv", header = T) %>% select(-X)
    # rename columns & rows
    colnames(joint_corr_p) <- c("Age", "First Phone", "Daily Dist.", "Study Dist.", "NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
    rownames(joint_corr_p) <- c("Age", "First Phone", "Daily Dist.", "Study Dist.", "NMPQ", "MPIQ: I", "MPIQ: SI", "MPIQ: VFO", "SAD: Dep.", "SAD: EA", "SAD: A", "SAD: Dist.")
    
    # colnames(joint_corr_p) <- c("Age", "Age of first phone", "Dist. daily", "Dist. durring study", "NMPQ", "Involvement", "Self-Identity", "Validation from Others", "Dependence", "Emotional Attachment", "Accessibility", "Distractability")
    # rownames(joint_corr_p) <- c("Age", "Age of first phone", "Dist. daily", "Dist. durring study", "NMPQ", "Involvement", "Self-Identity", "Validation from Others", "Dependence", "Emotional Attachment", "Accessibility", "Distractability")
  
  # corrplot(as.matrix(joint_corr_r))
  
corr_plot_joint <- {
  corrplot(as.matrix(joint_corr_r), method = "color", 
         col = (colorRampPalette(c("darkslateblue", "purple3", "darkorchid", "white", "lightseagreen", "darkcyan", "deepskyblue4"))(5000)),  
         # type = "upper",
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "black", tl.srt = 90, tl.cex = .8, #Text label color and rotation & size
         # add corr numbers -- edit size
         # addCoef.col = "black", cl.cex = .01, cl.length = 2, 
         # grid colour
         addgrid.col = "white",
         # addCoefasPercent = T,
         # Combine with significance level
         p.mat = as.matrix(joint_corr_p), sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9, 
         insig = 'pch', pch.col = "grey20",
         # insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE
         # win.asp = 1, 
         # col.lim=c(-1, 1) # set limits for r-values
         )
  recordPlot()
}
Warning in ind1:ind2 :
  numerical expression has 24 elements: only the first used

# export corr matric using ggsave() & replayPlot() to call on previously made plot
# ggsave(filename="corr_plot_joint_short_oct4", plot = replayPlot(corr_plot_joint), device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)

For Desk…

main_corr_desk <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_overall, CBS_STM, CBS_reason, CBS_verbal, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% 
  filter(condition == "desk") %>% 
  select(-condition) %>% 
  as.matrix() %>%
  rcorr(type = "pearson")

# create new main_corr_desk to shown only lower triangle... 
main_corr_desk2 <- main_corr_desk
# round to 4 decimals... 
main_corr_desk2$r <- round(main_corr_desk2$r, 4)
main_corr_desk2$P <- round(main_corr_desk2$P, 4)
main_corr_desk2$n <- round(main_corr_desk2$n, 4)
# remove upper triangle form r, p, and n
main_corr_desk2$r[upper.tri(main_corr_desk2$r)] <- "-"
main_corr_desk2$P[upper.tri(main_corr_desk2$P)] <- "-"
main_corr_desk2$n[upper.tri(main_corr_desk2$n)] <- "-"

# show corr table with flattenCorr

kable(flattenCorrMatrix(main_corr_desk$r, main_corr_desk$P), caption = "Study 2 - Correlation") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation
row column cor p
age age_first_phone 0.2401696 0.0421448
age dist_daily -0.1915760 0.0996567
age_first_phone dist_daily -0.0783298 0.5130966
age dist_study -0.1374629 0.2395704
age_first_phone dist_study -0.0962906 0.4210357
dist_daily dist_study 0.1937947 0.0957219
age pow_not_using -0.1587245 0.1737835
age_first_phone pow_not_using 0.0857905 0.4736587
dist_daily pow_not_using -0.2714071 0.0185042
dist_study pow_not_using -0.0637018 0.5871576
age pow_notifications_on 0.0840081 0.4736332
age_first_phone pow_notifications_on -0.0016735 0.9888684
dist_daily pow_notifications_on 0.1082607 0.3552056
dist_study pow_notifications_on -0.0456380 0.6974235
pow_not_using pow_notifications_on -0.2651113 0.0215239
age pow_vibrate 0.0370253 0.7524797
age_first_phone pow_vibrate -0.0154483 0.8975188
dist_daily pow_vibrate -0.1935546 0.0961419
dist_study pow_vibrate 0.0911535 0.4367020
pow_not_using pow_vibrate -0.0217458 0.8530858
pow_notifications_on pow_vibrate 0.2119583 0.0679129
age pow_study -0.0416790 0.7225574
age_first_phone pow_study -0.0465782 0.6976291
dist_daily pow_study 0.3796219 0.0007820
dist_study pow_study 0.0269393 0.8185393
pow_not_using pow_study -0.5356505 0.0000007
pow_notifications_on pow_study 0.2623213 0.0229909
pow_vibrate pow_study -0.0446504 0.7036642
age pow_exam -0.0608293 0.6041584
age_first_phone pow_exam -0.1649759 0.1660901
dist_daily pow_exam 0.0904973 0.4400242
dist_study pow_exam 0.0241688 0.8369297
pow_not_using pow_exam -0.3871875 0.0005998
pow_notifications_on pow_exam 0.1622599 0.1642719
pow_vibrate pow_exam 0.1271519 0.2769960
pow_study pow_exam 0.4050342 0.0003127
age pow_lec -0.0195419 0.8678337
age_first_phone pow_lec -0.1307698 0.2735567
dist_daily pow_lec 0.3381008 0.0030096
dist_study pow_lec -0.1433516 0.2198382
pow_not_using pow_lec -0.5177925 0.0000020
pow_notifications_on pow_lec 0.1909138 0.1008552
pow_vibrate pow_lec 0.1177634 0.3143012
pow_study pow_lec 0.7276495 0.0000000
pow_exam pow_lec 0.3068507 0.0074130
age pow_sleep 0.0691654 0.5554349
age_first_phone pow_sleep -0.1157322 0.3329985
dist_daily pow_sleep 0.1532593 0.1892697
dist_study pow_sleep -0.0884147 0.4506616
pow_not_using pow_sleep -0.4717241 0.0000194
pow_notifications_on pow_sleep 0.2216036 0.0560381
pow_vibrate pow_sleep 0.1587862 0.1736140
pow_study pow_sleep 0.6335985 0.0000000
pow_exam pow_sleep 0.3331837 0.0034897
pow_lec pow_sleep 0.6608917 0.0000000
age com_gen 0.1813954 0.1193526
age_first_phone com_gen 0.1091489 0.3614104
dist_daily com_gen -0.2775595 0.0159115
dist_study com_gen -0.1893567 0.1037177
pow_not_using com_gen -0.1206589 0.3024661
pow_notifications_on com_gen 0.2630827 0.0225824
pow_vibrate com_gen 0.0419811 0.7206289
pow_study com_gen -0.0419575 0.7207797
pow_exam com_gen 0.1409305 0.2278081
pow_lec com_gen 0.0894480 0.4453661
pow_sleep com_gen 0.1789102 0.1245864
age com_unattended 0.3682936 0.0011499
age_first_phone com_unattended 0.0224951 0.8512211
dist_daily com_unattended -0.0394902 0.7365823
dist_study com_unattended 0.0055516 0.9622971
pow_not_using com_unattended -0.0695772 0.5530770
pow_notifications_on com_unattended 0.0484251 0.6799203
pow_vibrate com_unattended 0.1041036 0.3740892
pow_study com_unattended -0.0803106 0.4933841
pow_exam com_unattended 0.1264844 0.2795465
pow_lec com_unattended -0.0558887 0.6338937
pow_sleep com_unattended -0.1560280 0.1813041
com_gen com_unattended 0.3003036 0.0088513
age com_leave_with_other 0.1108333 0.3438202
age_first_phone com_leave_with_other -0.0427473 0.7214382
dist_daily com_leave_with_other -0.0981056 0.4023835
dist_study com_leave_with_other 0.0508068 0.6650951
pow_not_using com_leave_with_other -0.0911195 0.4368738
pow_notifications_on com_leave_with_other 0.0911019 0.4369625
pow_vibrate com_leave_with_other 0.1040521 0.3743269
pow_study com_leave_with_other 0.0304430 0.7954224
pow_exam com_leave_with_other 0.3021188 0.0084299
pow_lec com_leave_with_other 0.0412067 0.7255765
pow_sleep com_leave_with_other -0.0519246 0.6581812
com_gen com_leave_with_other 0.4911121 0.0000077
com_unattended com_leave_with_other 0.5340875 0.0000008
age com_locked -0.2116729 0.0682929
age_first_phone com_locked 0.0337937 0.7780886
dist_daily com_locked -0.1106824 0.3444818
dist_study com_locked 0.0092273 0.9373743
pow_not_using com_locked 0.0599367 0.6094850
pow_notifications_on com_locked -0.1275073 0.2756446
pow_vibrate com_locked 0.0769706 0.5115902
pow_study com_locked -0.0134684 0.9086939
pow_exam com_locked -0.1615532 0.1661420
pow_lec com_locked -0.0437802 0.7091796
pow_sleep com_locked 0.0096665 0.9343999
com_gen com_locked -0.3130254 0.0062488
com_unattended com_locked -0.4145112 0.0002179
com_leave_with_other com_locked -0.3881941 0.0005787
age com_room_task 0.1313774 0.2612126
age_first_phone com_room_task -0.0339371 0.7771712
dist_daily com_room_task -0.0528117 0.6527139
dist_study com_room_task -0.1478534 0.2055444
pow_not_using com_room_task -0.1882802 0.1057335
pow_notifications_on com_room_task 0.0674810 0.5651269
pow_vibrate com_room_task -0.0326044 0.7812478
pow_study com_room_task 0.0251363 0.8304967
pow_exam com_room_task 0.1216638 0.2984275
pow_lec com_room_task 0.1782640 0.1259755
pow_sleep com_room_task -0.0438478 0.7087506
com_gen com_room_task 0.4808538 0.0000126
com_unattended com_room_task 0.4583226 0.0000355
com_leave_with_other com_room_task 0.5052275 0.0000038
com_locked com_room_task -0.1955801 0.0926450
age NMPQ_sum -0.0338271 0.7732602
age_first_phone NMPQ_sum -0.0884799 0.4598531
dist_daily NMPQ_sum 0.5279422 0.0000011
dist_study NMPQ_sum 0.1797083 0.1228868
pow_not_using NMPQ_sum -0.2711345 0.0186269
pow_notifications_on NMPQ_sum 0.1403153 0.2298650
pow_vibrate NMPQ_sum -0.1446267 0.2157205
pow_study NMPQ_sum 0.2996251 0.0090135
pow_exam NMPQ_sum 0.0998682 0.3939413
pow_lec NMPQ_sum 0.2261360 0.0510745
pow_sleep NMPQ_sum 0.1758494 0.1312711
com_gen NMPQ_sum -0.3004375 0.0088196
com_unattended NMPQ_sum -0.2742949 0.0172453
com_leave_with_other NMPQ_sum -0.2348910 0.0425066
com_locked NMPQ_sum 0.1504817 0.1975118
com_room_task NMPQ_sum -0.2418919 0.0365443
age MPIQ_sum 0.0295444 0.8013355
age_first_phone MPIQ_sum -0.3306444 0.0045573
dist_daily MPIQ_sum 0.6377882 0.0000000
dist_study MPIQ_sum 0.2819654 0.0142528
pow_not_using MPIQ_sum -0.3201252 0.0051120
pow_notifications_on MPIQ_sum 0.0921304 0.4317821
pow_vibrate MPIQ_sum -0.2293603 0.0477676
pow_study MPIQ_sum 0.3872474 0.0005985
pow_exam MPIQ_sum 0.0993262 0.3965261
pow_lec MPIQ_sum 0.2955376 0.0100466
pow_sleep MPIQ_sum 0.2188205 0.0592761
com_gen MPIQ_sum -0.3164761 0.0056711
com_unattended MPIQ_sum -0.1574606 0.1772797
com_leave_with_other MPIQ_sum -0.1547015 0.1850897
com_locked MPIQ_sum 0.0107458 0.9270946
com_room_task MPIQ_sum -0.1182958 0.3121028
NMPQ_sum MPIQ_sum 0.7731443 0.0000000
age MPIQ_SI_sum 0.0288637 0.8058214
age_first_phone MPIQ_SI_sum -0.2848588 0.0152965
dist_daily MPIQ_SI_sum 0.4207416 0.0001709
dist_study MPIQ_SI_sum 0.2101406 0.0703628
pow_not_using MPIQ_SI_sum -0.2712010 0.0185969
pow_notifications_on MPIQ_SI_sum 0.1397988 0.2316018
pow_vibrate MPIQ_SI_sum -0.0637936 0.5866180
pow_study MPIQ_SI_sum 0.2753424 0.0168072
pow_exam MPIQ_SI_sum 0.0463121 0.6931750
pow_lec MPIQ_SI_sum 0.3190492 0.0052716
pow_sleep MPIQ_SI_sum 0.2340339 0.0432890
com_gen MPIQ_SI_sum -0.3333194 0.0034756
com_unattended MPIQ_SI_sum -0.2549928 0.0272549
com_leave_with_other MPIQ_SI_sum -0.2630228 0.0226143
com_locked MPIQ_SI_sum 0.0932650 0.4261080
com_room_task MPIQ_SI_sum -0.1980893 0.0884528
NMPQ_sum MPIQ_SI_sum 0.7594043 0.0000000
MPIQ_sum MPIQ_SI_sum 0.7357390 0.0000000
age MPIQ_VFO_sum 0.0869537 0.4582087
age_first_phone MPIQ_VFO_sum -0.0410401 0.7321355
dist_daily MPIQ_VFO_sum 0.1825068 0.1170674
dist_study MPIQ_VFO_sum 0.0588387 0.6160652
pow_not_using MPIQ_VFO_sum -0.2173378 0.0610624
pow_notifications_on MPIQ_VFO_sum 0.1452062 0.2138672
pow_vibrate MPIQ_VFO_sum -0.1219225 0.2973935
pow_study MPIQ_VFO_sum 0.3039017 0.0080332
pow_exam MPIQ_VFO_sum 0.1465002 0.2097698
pow_lec MPIQ_VFO_sum 0.3441311 0.0025018
pow_sleep MPIQ_VFO_sum 0.2827016 0.0139907
com_gen MPIQ_VFO_sum -0.1097955 0.3483853
com_unattended MPIQ_VFO_sum -0.1641480 0.1593526
com_leave_with_other MPIQ_VFO_sum 0.0161857 0.8903771
com_locked MPIQ_VFO_sum 0.0367567 0.7542186
com_room_task MPIQ_VFO_sum -0.0385363 0.7427220
NMPQ_sum MPIQ_VFO_sum 0.3512787 0.0020003
MPIQ_sum MPIQ_VFO_sum 0.4096566 0.0002625
MPIQ_SI_sum MPIQ_VFO_sum 0.3918931 0.0005069
age SAD_sum 0.0341588 0.7710973
age_first_phone SAD_sum -0.2545348 0.0309532
dist_daily SAD_sum 0.5569032 0.0000002
dist_study SAD_sum 0.2329701 0.0442766
pow_not_using SAD_sum -0.3361957 0.0031881
pow_notifications_on SAD_sum 0.1449462 0.2146974
pow_vibrate SAD_sum -0.1514357 0.1946524
pow_study SAD_sum 0.2598431 0.0243644
pow_exam SAD_sum 0.0224972 0.8480686
pow_lec SAD_sum 0.2715833 0.0184252
pow_sleep SAD_sum 0.1863650 0.1093946
com_gen SAD_sum -0.3319623 0.0036191
com_unattended SAD_sum -0.2805811 0.0147571
com_leave_with_other SAD_sum -0.2498516 0.0306299
com_locked SAD_sum 0.1343217 0.2505816
com_room_task SAD_sum -0.1971629 0.0899828
NMPQ_sum SAD_sum 0.8124223 0.0000000
MPIQ_sum SAD_sum 0.8403881 0.0000000
MPIQ_SI_sum SAD_sum 0.8336037 0.0000000
MPIQ_VFO_sum SAD_sum 0.4905978 0.0000079
age SAD_dep_sum -0.0017846 0.9878765
age_first_phone SAD_dep_sum -0.1425734 0.2321976
dist_daily SAD_dep_sum 0.4796635 0.0000134
dist_study SAD_dep_sum 0.2348407 0.0425522
pow_not_using SAD_dep_sum -0.2878472 0.0122727
pow_notifications_on SAD_dep_sum 0.1581810 0.1752807
pow_vibrate SAD_dep_sum -0.1471109 0.2078553
pow_study SAD_dep_sum 0.2489389 0.0312643
pow_exam SAD_dep_sum -0.0106000 0.9280811
pow_lec SAD_dep_sum 0.2022822 0.0817829
pow_sleep SAD_dep_sum 0.1566640 0.1795094
com_gen SAD_dep_sum -0.3171819 0.0055590
com_unattended SAD_dep_sum -0.2422426 0.0362650
com_leave_with_other SAD_dep_sum -0.2512295 0.0296925
com_locked SAD_dep_sum 0.1409503 0.2277419
com_room_task SAD_dep_sum -0.2145444 0.0645461
NMPQ_sum SAD_dep_sum 0.7658999 0.0000000
MPIQ_sum SAD_dep_sum 0.7326068 0.0000000
MPIQ_SI_sum SAD_dep_sum 0.7821538 0.0000000
MPIQ_VFO_sum SAD_dep_sum 0.4281844 0.0001270
SAD_sum SAD_dep_sum 0.9046004 0.0000000
age SAD_ea_sum 0.1163732 0.3200878
age_first_phone SAD_ea_sum -0.3035306 0.0095440
dist_daily SAD_ea_sum 0.4218198 0.0001638
dist_study SAD_ea_sum 0.2228779 0.0546043
pow_not_using SAD_ea_sum -0.3094721 0.0068973
pow_notifications_on SAD_ea_sum 0.1468447 0.2086882
pow_vibrate SAD_ea_sum 0.0110240 0.9252123
pow_study SAD_ea_sum 0.2649599 0.0216014
pow_exam SAD_ea_sum 0.0408830 0.7276477
pow_lec SAD_ea_sum 0.3578076 0.0016232
pow_sleep SAD_ea_sum 0.2496094 0.0307971
com_gen SAD_ea_sum -0.2956817 0.0100085
com_unattended SAD_ea_sum -0.2221867 0.0553782
com_leave_with_other SAD_ea_sum -0.1443444 0.2166275
com_locked SAD_ea_sum 0.1527947 0.1906309
com_room_task SAD_ea_sum -0.1523268 0.1920086
NMPQ_sum SAD_ea_sum 0.6922486 0.0000000
MPIQ_sum SAD_ea_sum 0.7521144 0.0000000
MPIQ_SI_sum SAD_ea_sum 0.7342978 0.0000000
MPIQ_VFO_sum SAD_ea_sum 0.5774115 0.0000001
SAD_sum SAD_ea_sum 0.8751595 0.0000000
SAD_dep_sum SAD_ea_sum 0.6956215 0.0000000
age SAD_access_sum 0.0141941 0.9037970
age_first_phone SAD_access_sum -0.1204821 0.3134015
dist_daily SAD_access_sum 0.4844615 0.0000106
dist_study SAD_access_sum 0.1653979 0.1561565
pow_not_using SAD_access_sum -0.2776015 0.0158949
pow_notifications_on SAD_access_sum 0.1272897 0.2764715
pow_vibrate SAD_access_sum -0.1847702 0.1125177
pow_study SAD_access_sum 0.1415131 0.2258721
pow_exam SAD_access_sum -0.0277910 0.8129044
pow_lec SAD_access_sum 0.1296213 0.2676964
pow_sleep SAD_access_sum 0.0424668 0.7175318
com_gen SAD_access_sum -0.2514548 0.0295416
com_unattended SAD_access_sum -0.3105440 0.0066957
com_leave_with_other SAD_access_sum -0.2332783 0.0439886
com_locked SAD_access_sum 0.1137482 0.3311993
com_room_task SAD_access_sum -0.1778803 0.1268061
NMPQ_sum SAD_access_sum 0.7314794 0.0000000
MPIQ_sum SAD_access_sum 0.6632569 0.0000000
MPIQ_SI_sum SAD_access_sum 0.7261541 0.0000000
MPIQ_VFO_sum SAD_access_sum 0.3586204 0.0015811
SAD_sum SAD_access_sum 0.8884728 0.0000000
SAD_dep_sum SAD_access_sum 0.7660078 0.0000000
SAD_ea_sum SAD_access_sum 0.6757221 0.0000000
age SAD_dist_sum 0.0609747 0.6032926
age_first_phone SAD_dist_sum -0.3138290 0.0072637
dist_daily SAD_dist_sum 0.5561579 0.0000002
dist_study SAD_dist_sum 0.1306550 0.2638668
pow_not_using SAD_dist_sum -0.2714283 0.0184946
pow_notifications_on SAD_dist_sum -0.0177095 0.8801299
pow_vibrate SAD_dist_sum -0.2292584 0.0478693
pow_study SAD_dist_sum 0.1899324 0.1026522
pow_exam SAD_dist_sum 0.0198398 0.8658373
pow_lec SAD_dist_sum 0.2147697 0.0642592
pow_sleep SAD_dist_sum 0.1336161 0.2531022
com_gen SAD_dist_sum -0.2931211 0.0107047
com_unattended SAD_dist_sum -0.1249616 0.2854229
com_leave_with_other SAD_dist_sum -0.2801890 0.0149027
com_locked SAD_dist_sum 0.0191269 0.8706157
com_room_task SAD_dist_sum -0.0830381 0.4787730
NMPQ_sum SAD_dist_sum 0.4921754 0.0000073
MPIQ_sum SAD_dist_sum 0.7044011 0.0000000
MPIQ_SI_sum SAD_dist_sum 0.5065590 0.0000035
MPIQ_VFO_sum SAD_dist_sum 0.1670000 0.1521298
SAD_sum SAD_dist_sum 0.6915646 0.0000000
SAD_dep_sum SAD_dist_sum 0.5152171 0.0000022
SAD_ea_sum SAD_dist_sum 0.5632406 0.0000001
SAD_access_sum SAD_dist_sum 0.5279130 0.0000011
age Score_Double Trouble 0.2183570 0.0598299
age_first_phone Score_Double Trouble 0.0199188 0.8680979
dist_daily Score_Double Trouble -0.0577496 0.6226224
dist_study Score_Double Trouble -0.1172377 0.3164812
pow_not_using Score_Double Trouble 0.0075790 0.9485448
pow_notifications_on Score_Double Trouble 0.1789494 0.1245024
pow_vibrate Score_Double Trouble 0.2171053 0.0613464
pow_study Score_Double Trouble 0.0274106 0.8154203
pow_exam Score_Double Trouble 0.0220108 0.8513158
pow_lec Score_Double Trouble 0.1064858 0.3631949
pow_sleep Score_Double Trouble -0.0542530 0.6438707
com_gen Score_Double Trouble -0.0485479 0.6791526
com_unattended Score_Double Trouble 0.1162843 0.3204601
com_leave_with_other Score_Double Trouble 0.0729069 0.5341946
com_locked Score_Double Trouble 0.0109980 0.9253882
com_room_task Score_Double Trouble 0.1784210 0.1256370
NMPQ_sum Score_Double Trouble -0.0383696 0.7437965
MPIQ_sum Score_Double Trouble -0.0144617 0.9019926
MPIQ_SI_sum Score_Double Trouble 0.1278197 0.2744602
MPIQ_VFO_sum Score_Double Trouble -0.0132019 0.9104931
SAD_sum Score_Double Trouble 0.0484852 0.6795445
SAD_dep_sum Score_Double Trouble 0.0515908 0.6602428
SAD_ea_sum Score_Double Trouble 0.0860097 0.4631214
SAD_access_sum Score_Double Trouble 0.0005479 0.9962775
SAD_dist_sum Score_Double Trouble 0.0309540 0.7920652
age Score_Odd One Out -0.0486145 0.6787365
age_first_phone Score_Odd One Out -0.1277611 0.2848419
dist_daily Score_Odd One Out 0.1359187 0.2449409
dist_study Score_Odd One Out -0.1963793 0.0912932
pow_not_using Score_Odd One Out 0.0389912 0.7397922
pow_notifications_on Score_Odd One Out 0.0198935 0.8654771
pow_vibrate Score_Odd One Out -0.1342351 0.2508902
pow_study Score_Odd One Out 0.0588320 0.6161055
pow_exam Score_Odd One Out 0.0286485 0.8072413
pow_lec Score_Odd One Out 0.0502374 0.6686280
pow_sleep Score_Odd One Out 0.0638074 0.5865364
com_gen Score_Odd One Out 0.0521021 0.6570857
com_unattended Score_Odd One Out -0.0704048 0.5483545
com_leave_with_other Score_Odd One Out -0.0576924 0.6229673
com_locked Score_Odd One Out 0.0145261 0.9015579
com_room_task Score_Odd One Out 0.0721894 0.5382365
NMPQ_sum Score_Odd One Out 0.0549929 0.6393496
MPIQ_sum Score_Odd One Out 0.1542378 0.1864263
MPIQ_SI_sum Score_Odd One Out 0.0546149 0.6416574
MPIQ_VFO_sum Score_Odd One Out 0.0876131 0.4547937
SAD_sum Score_Odd One Out 0.1209054 0.3014723
SAD_dep_sum Score_Odd One Out -0.0306705 0.7939269
SAD_ea_sum Score_Odd One Out 0.1317629 0.2598035
SAD_access_sum Score_Odd One Out 0.1739875 0.1354685
SAD_dist_sum Score_Odd One Out 0.1756823 0.1316436
Score_Double Trouble Score_Odd One Out -0.0021037 0.9857086
age Score_Digit Span -0.2066410 0.0752793
age_first_phone Score_Digit Span -0.2527338 0.0322024
dist_daily Score_Digit Span 0.0110443 0.9250748
dist_study Score_Digit Span 0.1726523 0.1385406
pow_not_using Score_Digit Span 0.0320627 0.7847939
pow_notifications_on Score_Digit Span -0.0906057 0.4394745
pow_vibrate Score_Digit Span 0.0070872 0.9518791
pow_study Score_Digit Span 0.0050863 0.9654549
pow_exam Score_Digit Span -0.0615669 0.5997726
pow_lec Score_Digit Span -0.0223440 0.8490911
pow_sleep Score_Digit Span 0.0059151 0.9598308
com_gen Score_Digit Span -0.1232877 0.2919761
com_unattended Score_Digit Span -0.2476207 0.0322000
com_leave_with_other Score_Digit Span -0.1022326 0.3827832
com_locked Score_Digit Span -0.0101878 0.9308710
com_room_task Score_Digit Span -0.2680864 0.0200483
NMPQ_sum Score_Digit Span 0.0508892 0.6645847
MPIQ_sum Score_Digit Span 0.0805868 0.4918943
MPIQ_SI_sum Score_Digit Span -0.0017978 0.9877868
MPIQ_VFO_sum Score_Digit Span -0.0118312 0.9197541
SAD_sum Score_Digit Span 0.0950792 0.4171239
SAD_dep_sum Score_Digit Span 0.1340798 0.2514439
SAD_ea_sum Score_Digit Span 0.0801836 0.4940702
SAD_access_sum Score_Digit Span 0.0219795 0.8515243
SAD_dist_sum Score_Digit Span 0.0073692 0.9499674
Score_Double Trouble Score_Digit Span 0.0614470 0.6004843
Score_Odd One Out Score_Digit Span -0.0556776 0.6351779
age Score_Feature Match -0.1756566 0.1317011
age_first_phone Score_Feature Match -0.1475323 0.2161895
dist_daily Score_Feature Match 0.0001583 0.9989247
dist_study Score_Feature Match -0.2254370 0.0518156
pow_not_using Score_Feature Match 0.0467600 0.6903574
pow_notifications_on Score_Feature Match -0.1046481 0.3715821
pow_vibrate Score_Feature Match -0.0921561 0.4316530
pow_study Score_Feature Match -0.1221078 0.2966544
pow_exam Score_Feature Match -0.1399381 0.2311323
pow_lec Score_Feature Match 0.1242928 0.2880296
pow_sleep Score_Feature Match -0.1456739 0.2123798
com_gen Score_Feature Match -0.0654936 0.5766638
com_unattended Score_Feature Match -0.1032070 0.3782403
com_leave_with_other Score_Feature Match -0.1049506 0.3701934
com_locked Score_Feature Match -0.0698004 0.5518015
com_room_task Score_Feature Match 0.0200845 0.8641981
NMPQ_sum Score_Feature Match -0.0107690 0.9269377
MPIQ_sum Score_Feature Match 0.0228674 0.8455991
MPIQ_SI_sum Score_Feature Match 0.0652985 0.5778021
MPIQ_VFO_sum Score_Feature Match 0.0169743 0.8850717
SAD_sum Score_Feature Match 0.0714555 0.5423863
SAD_dep_sum Score_Feature Match 0.0672201 0.5666349
SAD_ea_sum Score_Feature Match 0.0322010 0.7838878
SAD_access_sum Score_Feature Match 0.0704232 0.5482492
SAD_dist_sum Score_Feature Match 0.0992497 0.3968916
Score_Double Trouble Score_Feature Match 0.0577570 0.6225776
Score_Odd One Out Score_Feature Match 0.0913466 0.4357270
Score_Digit Span Score_Feature Match 0.2235533 0.0538567
age Score_Polygons -0.1677525 0.1502653
age_first_phone Score_Polygons -0.1592634 0.1814544
dist_daily Score_Polygons 0.1923012 0.0983569
dist_study Score_Polygons -0.0272209 0.8166753
pow_not_using Score_Polygons -0.0916552 0.4341714
pow_notifications_on Score_Polygons 0.0520753 0.6572508
pow_vibrate Score_Polygons -0.0376979 0.7481312
pow_study Score_Polygons 0.0272499 0.8164834
pow_exam Score_Polygons 0.1119565 0.3389218
pow_lec Score_Polygons 0.0877182 0.4542507
pow_sleep Score_Polygons 0.0774697 0.5088478
com_gen Score_Polygons 0.0851375 0.4676863
com_unattended Score_Polygons -0.0467926 0.6901525
com_leave_with_other Score_Polygons 0.0078958 0.9463969
com_locked Score_Polygons 0.0713230 0.5431373
com_room_task Score_Polygons 0.1465489 0.2096165
NMPQ_sum Score_Polygons 0.1901576 0.1022376
MPIQ_sum Score_Polygons 0.2175682 0.0607820
MPIQ_SI_sum Score_Polygons 0.2098337 0.0707833
MPIQ_VFO_sum Score_Polygons 0.0413781 0.7244802
SAD_sum Score_Polygons 0.2212853 0.0564009
SAD_dep_sum Score_Polygons 0.1230552 0.2928942
SAD_ea_sum Score_Polygons 0.2152062 0.0637066
SAD_access_sum Score_Polygons 0.2528315 0.0286333
SAD_dist_sum Score_Polygons 0.1410190 0.2275131
Score_Double Trouble Score_Polygons 0.0765607 0.5138478
Score_Odd One Out Score_Polygons 0.1325838 0.2568203
Score_Digit Span Score_Polygons 0.1290079 0.2699865
Score_Feature Match Score_Polygons 0.1393925 0.2329744
age Score_Paired Associates -0.0263974 0.8221287
age_first_phone Score_Paired Associates 0.0132402 0.9121040
dist_daily Score_Paired Associates 0.0855965 0.4652812
dist_study Score_Paired Associates -0.1891829 0.1040411
pow_not_using Score_Paired Associates -0.0768305 0.5123609
pow_notifications_on Score_Paired Associates -0.1226433 0.2945251
pow_vibrate Score_Paired Associates -0.1891790 0.1040484
pow_study Score_Paired Associates 0.1040097 0.3745230
pow_exam Score_Paired Associates -0.1747403 0.1337593
pow_lec Score_Paired Associates 0.2615340 0.0234200
pow_sleep Score_Paired Associates 0.0170579 0.8845093
com_gen Score_Paired Associates 0.0182998 0.8761654
com_unattended Score_Paired Associates 0.0598992 0.6097095
com_leave_with_other Score_Paired Associates -0.0073705 0.9499583
com_locked Score_Paired Associates -0.0570643 0.6267634
com_room_task Score_Paired Associates 0.2920682 0.0110030
NMPQ_sum Score_Paired Associates -0.0779701 0.5061063
MPIQ_sum Score_Paired Associates 0.0309046 0.7923893
MPIQ_SI_sum Score_Paired Associates -0.1246415 0.2866686
MPIQ_VFO_sum Score_Paired Associates -0.0837463 0.4750176
SAD_sum Score_Paired Associates -0.0812901 0.4881105
SAD_dep_sum Score_Paired Associates -0.0766525 0.5133415
SAD_ea_sum Score_Paired Associates -0.0662002 0.5725491
SAD_access_sum Score_Paired Associates -0.1216815 0.2983566
SAD_dist_sum Score_Paired Associates 0.1078390 0.3570939
Score_Double Trouble Score_Paired Associates 0.0463809 0.6927423
Score_Odd One Out Score_Paired Associates 0.1229742 0.2932146
Score_Digit Span Score_Paired Associates -0.0274276 0.8153078
Score_Feature Match Score_Paired Associates 0.1758931 0.1311737
Score_Polygons Score_Paired Associates 0.0560078 0.6331701
age Score_Token Search -0.1748207 0.1335778
age_first_phone Score_Token Search -0.1646537 0.1669304
dist_daily Score_Token Search 0.2979212 0.0094323
dist_study Score_Token Search -0.1561547 0.1809456
pow_not_using Score_Token Search -0.1358742 0.2450969
pow_notifications_on Score_Token Search 0.0894306 0.4454549
pow_vibrate Score_Token Search -0.0062439 0.9575998
pow_study Score_Token Search 0.1679848 0.1496931
pow_exam Score_Token Search -0.0513874 0.6615003
pow_lec Score_Token Search 0.2182057 0.0600115
pow_sleep Score_Token Search 0.0273920 0.8155430
com_gen Score_Token Search -0.1091489 0.3512487
com_unattended Score_Token Search 0.0384750 0.7431170
com_leave_with_other Score_Token Search -0.0804829 0.4924544
com_locked Score_Token Search 0.0722194 0.5380670
com_room_task Score_Token Search 0.1046852 0.3714117
NMPQ_sum Score_Token Search 0.0445764 0.7041324
MPIQ_sum Score_Token Search 0.0457018 0.6970206
MPIQ_SI_sum Score_Token Search 0.1093380 0.3504102
MPIQ_VFO_sum Score_Token Search -0.1008614 0.3892311
SAD_sum Score_Token Search 0.1441460 0.2172665
SAD_dep_sum Score_Token Search 0.1090230 0.3518079
SAD_ea_sum Score_Token Search 0.0383300 0.7440518
SAD_access_sum Score_Token Search 0.2138886 0.0653869
SAD_dist_sum Score_Token Search 0.2228345 0.0546526
Score_Double Trouble Score_Token Search 0.2096038 0.0710998
Score_Odd One Out Score_Token Search 0.1994414 0.0862565
Score_Digit Span Score_Token Search 0.0138424 0.9061703
Score_Feature Match Score_Token Search 0.1221293 0.2965690
Score_Polygons Score_Token Search 0.2287491 0.0483806
Score_Paired Associates Score_Token Search 0.3402170 0.0028218
age Score_Spatial Planning -0.2906006 0.0114309
age_first_phone Score_Spatial Planning -0.0138369 0.9081595
dist_daily Score_Spatial Planning 0.2561978 0.0265110
dist_study Score_Spatial Planning -0.1121077 0.3382659
pow_not_using Score_Spatial Planning -0.0909064 0.4379510
pow_notifications_on Score_Spatial Planning -0.0029905 0.9796851
pow_vibrate Score_Spatial Planning -0.0546086 0.6416959
pow_study Score_Spatial Planning 0.2247394 0.0525639
pow_exam Score_Spatial Planning 0.0367226 0.7544395
pow_lec Score_Spatial Planning 0.1067306 0.3620866
pow_sleep Score_Spatial Planning -0.0045247 0.9692675
com_gen Score_Spatial Planning -0.1255884 0.2829941
com_unattended Score_Spatial Planning -0.0417989 0.7217921
com_leave_with_other Score_Spatial Planning -0.0009422 0.9935990
com_locked Score_Spatial Planning 0.0563644 0.6310043
com_room_task Score_Spatial Planning 0.0533432 0.6494472
NMPQ_sum Score_Spatial Planning 0.0531473 0.6506502
MPIQ_sum Score_Spatial Planning 0.0890559 0.4473716
MPIQ_SI_sum Score_Spatial Planning -0.0440501 0.7074674
MPIQ_VFO_sum Score_Spatial Planning -0.1755716 0.1318910
SAD_sum Score_Spatial Planning 0.0468490 0.6897980
SAD_dep_sum Score_Spatial Planning 0.0103877 0.9295181
SAD_ea_sum Score_Spatial Planning -0.0138978 0.9057965
SAD_access_sum Score_Spatial Planning 0.0730415 0.5334381
SAD_dist_sum Score_Spatial Planning 0.1441749 0.2171733
Score_Double Trouble Score_Spatial Planning 0.1086529 0.3534549
Score_Odd One Out Score_Spatial Planning 0.0032354 0.9780222
Score_Digit Span Score_Spatial Planning 0.0564993 0.6301859
Score_Feature Match Score_Spatial Planning 0.0857305 0.4645801
Score_Polygons Score_Spatial Planning 0.3280432 0.0040635
Score_Paired Associates Score_Spatial Planning 0.2493837 0.0309537
Score_Token Search Score_Spatial Planning 0.3908635 0.0005260
age Score_Rotations 0.0203206 0.8626168
age_first_phone Score_Rotations 0.0613492 0.6086948
dist_daily Score_Rotations -0.0186360 0.8739091
dist_study Score_Rotations -0.1483344 0.2040573
pow_not_using Score_Rotations -0.0331808 0.7774793
pow_notifications_on Score_Rotations -0.0169121 0.8854898
pow_vibrate Score_Rotations 0.0385938 0.7423515
pow_study Score_Rotations 0.2073427 0.0742722
pow_exam Score_Rotations 0.1673209 0.1513325
pow_lec Score_Rotations 0.2225083 0.0550170
pow_sleep Score_Rotations 0.0829522 0.4792298
com_gen Score_Rotations 0.0517515 0.6592500
com_unattended Score_Rotations 0.1908201 0.1010257
com_leave_with_other Score_Rotations -0.0312684 0.7900008
com_locked Score_Rotations -0.1606549 0.1685413
com_room_task Score_Rotations 0.1210387 0.3009357
NMPQ_sum Score_Rotations -0.1019284 0.3842080
MPIQ_sum Score_Rotations -0.1186305 0.3107260
MPIQ_SI_sum Score_Rotations -0.0808843 0.4902916
MPIQ_VFO_sum Score_Rotations -0.0436903 0.7097501
SAD_sum Score_Rotations -0.1509646 0.1960607
SAD_dep_sum Score_Rotations -0.1433868 0.2197239
SAD_ea_sum Score_Rotations -0.1453357 0.2134546
SAD_access_sum Score_Rotations -0.1223752 0.2955899
SAD_dist_sum Score_Rotations -0.0143827 0.9025250
Score_Double Trouble Score_Rotations 0.1221897 0.2963282
Score_Odd One Out Score_Rotations 0.0652319 0.5781908
Score_Digit Span Score_Rotations 0.0961865 0.4116951
Score_Feature Match Score_Rotations 0.2400236 0.0380627
Score_Polygons Score_Rotations 0.0613916 0.6008138
Score_Paired Associates Score_Rotations 0.2985748 0.0092697
Score_Token Search Score_Rotations 0.2498287 0.0306456
Score_Spatial Planning Score_Rotations 0.2565007 0.0263267
age Score_Spatial Span -0.2393120 0.0386547
age_first_phone Score_Spatial Span 0.0200872 0.8669929
dist_daily Score_Spatial Span 0.1985396 0.0877165
dist_study Score_Spatial Span -0.0099810 0.9322704
pow_not_using Score_Spatial Span -0.0507181 0.6656451
pow_notifications_on Score_Spatial Span 0.0108128 0.9266412
pow_vibrate Score_Spatial Span -0.0194830 0.8682284
pow_study Score_Spatial Span 0.1043393 0.3730029
pow_exam Score_Spatial Span 0.0508085 0.6650847
pow_lec Score_Spatial Span 0.1611935 0.1670996
pow_sleep Score_Spatial Span -0.0200369 0.8645166
com_gen Score_Spatial Span 0.0547163 0.6410380
com_unattended Score_Spatial Span 0.0404208 0.7306091
com_leave_with_other Score_Spatial Span 0.1023182 0.3823829
com_locked Score_Spatial Span 0.1117370 0.3398758
com_room_task Score_Spatial Span 0.1926462 0.0977434
NMPQ_sum Score_Spatial Span -0.0222196 0.8499213
MPIQ_sum Score_Spatial Span -0.0193341 0.8692264
MPIQ_SI_sum Score_Spatial Span -0.0432745 0.7123912
MPIQ_VFO_sum Score_Spatial Span -0.0663265 0.5718154
SAD_sum Score_Spatial Span -0.0138078 0.9064033
SAD_dep_sum Score_Spatial Span 0.0302819 0.7964814
SAD_ea_sum Score_Spatial Span -0.0963805 0.4107479
SAD_access_sum Score_Spatial Span 0.0238919 0.8387726
SAD_dist_sum Score_Spatial Span -0.0360679 0.7586829
Score_Double Trouble Score_Spatial Span 0.0026398 0.9820674
Score_Odd One Out Score_Spatial Span -0.0287158 0.8067977
Score_Digit Span Score_Spatial Span 0.2046026 0.0782674
Score_Feature Match Score_Spatial Span 0.2503094 0.0303157
Score_Polygons Score_Spatial Span 0.3223903 0.0047900
Score_Paired Associates Score_Spatial Span 0.2452450 0.0339459
Score_Token Search Score_Spatial Span 0.3406327 0.0027861
Score_Spatial Planning Score_Spatial Span 0.2660283 0.0210595
Score_Rotations Score_Spatial Span 0.2717218 0.0183633
age Score_Grammatical Reasoning 0.0202263 0.8632486
age_first_phone Score_Grammatical Reasoning -0.0103527 0.9312199
dist_daily Score_Grammatical Reasoning 0.0727912 0.5348453
dist_study Score_Grammatical Reasoning -0.2898911 0.0116428
pow_not_using Score_Grammatical Reasoning -0.0216805 0.8535217
pow_notifications_on Score_Grammatical Reasoning 0.1002531 0.3921121
pow_vibrate Score_Grammatical Reasoning 0.0238896 0.8387878
pow_study Score_Grammatical Reasoning 0.0822649 0.4828915
pow_exam Score_Grammatical Reasoning 0.1149796 0.3259569
pow_lec Score_Grammatical Reasoning 0.1769117 0.1289208
pow_sleep Score_Grammatical Reasoning -0.0219543 0.8516929
com_gen Score_Grammatical Reasoning -0.0015834 0.9892432
com_unattended Score_Grammatical Reasoning 0.0728438 0.5345495
com_leave_with_other Score_Grammatical Reasoning 0.1408973 0.2279188
com_locked Score_Grammatical Reasoning -0.0620662 0.5968115
com_room_task Score_Grammatical Reasoning 0.1699328 0.1449596
NMPQ_sum Score_Grammatical Reasoning 0.0311019 0.7910942
MPIQ_sum Score_Grammatical Reasoning -0.0182552 0.8764646
MPIQ_SI_sum Score_Grammatical Reasoning -0.0392421 0.7381780
MPIQ_VFO_sum Score_Grammatical Reasoning -0.0134731 0.9086621
SAD_sum Score_Grammatical Reasoning -0.0367844 0.7540391
SAD_dep_sum Score_Grammatical Reasoning -0.0664801 0.5709237
SAD_ea_sum Score_Grammatical Reasoning -0.0097768 0.9336534
SAD_access_sum Score_Grammatical Reasoning 0.0131994 0.9105103
SAD_dist_sum Score_Grammatical Reasoning -0.0555713 0.6358245
Score_Double Trouble Score_Grammatical Reasoning 0.2306306 0.0465142
Score_Odd One Out Score_Grammatical Reasoning 0.1572205 0.1779497
Score_Digit Span Score_Grammatical Reasoning 0.0776463 0.5078796
Score_Feature Match Score_Grammatical Reasoning 0.1939533 0.0954456
Score_Polygons Score_Grammatical Reasoning 0.2086928 0.0723646
Score_Paired Associates Score_Grammatical Reasoning 0.3822315 0.0007141
Score_Token Search Score_Grammatical Reasoning 0.2671548 0.0205007
Score_Spatial Planning Score_Grammatical Reasoning 0.2335616 0.0437252
Score_Rotations Score_Grammatical Reasoning 0.4236205 0.0001525
Score_Spatial Span Score_Grammatical Reasoning 0.2081778 0.0730875
age Score_Monkey Ladder -0.0119008 0.9192837
age_first_phone Score_Monkey Ladder -0.1456924 0.2220357
dist_daily Score_Monkey Ladder -0.0206176 0.8606294
dist_study Score_Monkey Ladder -0.1463419 0.2102681
pow_not_using Score_Monkey Ladder -0.0120288 0.9184183
pow_notifications_on Score_Monkey Ladder -0.0261597 0.8237048
pow_vibrate Score_Monkey Ladder -0.0014601 0.9900809
pow_study Score_Monkey Ladder 0.1557148 0.1821929
pow_exam Score_Monkey Ladder -0.0639865 0.5854844
pow_lec Score_Monkey Ladder 0.1875217 0.1071720
pow_sleep Score_Monkey Ladder 0.0550300 0.6391231
com_gen Score_Monkey Ladder 0.0736845 0.5298311
com_unattended Score_Monkey Ladder -0.1716160 0.1409609
com_leave_with_other Score_Monkey Ladder 0.0688303 0.5573566
com_locked Score_Monkey Ladder 0.0711815 0.5439395
com_room_task Score_Monkey Ladder 0.1789118 0.1245829
NMPQ_sum Score_Monkey Ladder 0.0201971 0.8634439
MPIQ_sum Score_Monkey Ladder 0.0348082 0.7668674
MPIQ_SI_sum Score_Monkey Ladder 0.1028454 0.3799225
MPIQ_VFO_sum Score_Monkey Ladder -0.0995368 0.3955205
SAD_sum Score_Monkey Ladder 0.0677808 0.5633958
SAD_dep_sum Score_Monkey Ladder 0.0029492 0.9799655
SAD_ea_sum Score_Monkey Ladder 0.1008465 0.3893014
SAD_access_sum Score_Monkey Ladder 0.0674249 0.5654506
SAD_dist_sum Score_Monkey Ladder 0.0264291 0.8219191
Score_Double Trouble Score_Monkey Ladder 0.3707346 0.0010594
Score_Odd One Out Score_Monkey Ladder 0.1187397 0.3102776
Score_Digit Span Score_Monkey Ladder 0.1706463 0.1432543
Score_Feature Match Score_Monkey Ladder 0.1758437 0.1312839
Score_Polygons Score_Monkey Ladder 0.2703634 0.0189781
Score_Paired Associates Score_Monkey Ladder 0.0769825 0.5115247
Score_Token Search Score_Monkey Ladder 0.3267274 0.0042233
Score_Spatial Planning Score_Monkey Ladder 0.2458580 0.0334880
Score_Rotations Score_Monkey Ladder 0.1291342 0.2695139
Score_Spatial Span Score_Monkey Ladder 0.1472029 0.2075679
Score_Grammatical Reasoning Score_Monkey Ladder 0.2439957 0.0348953
age CBS_overall -0.1790821 0.1242188
age_first_phone CBS_overall -0.1448115 0.2248736
dist_daily CBS_overall 0.1925125 0.0979808
dist_study CBS_overall -0.2524223 0.0289008
pow_not_using CBS_overall -0.0646752 0.5814457
pow_notifications_on CBS_overall 0.0150485 0.8980367
pow_vibrate CBS_overall -0.0428926 0.7148204
pow_study CBS_overall 0.1779698 0.1266119
pow_exam CBS_overall 0.0116019 0.9213041
pow_lec CBS_overall 0.2855131 0.0130279
pow_sleep CBS_overall 0.0133612 0.9094180
com_gen CBS_overall -0.0216568 0.8536804
com_unattended CBS_overall -0.0218560 0.8523492
com_leave_with_other CBS_overall 0.0042580 0.9710780
com_locked CBS_overall 0.0036444 0.9752442
com_room_task CBS_overall 0.2174736 0.0608970
NMPQ_sum CBS_overall 0.0307839 0.7931818
MPIQ_sum CBS_overall 0.0823618 0.4823745
MPIQ_SI_sum CBS_overall 0.0521741 0.6566414
MPIQ_VFO_sum CBS_overall -0.0783069 0.5042651
SAD_sum CBS_overall 0.0840317 0.4735088
SAD_dep_sum CBS_overall 0.0286998 0.8069033
SAD_ea_sum CBS_overall 0.0553908 0.6369236
SAD_access_sum CBS_overall 0.1081313 0.3557846
SAD_dist_sum CBS_overall 0.1409893 0.2276121
Score_Double Trouble CBS_overall 0.3831467 0.0006916
Score_Odd One Out CBS_overall 0.3074133 0.0072995
Score_Digit Span CBS_overall 0.3136631 0.0061383
Score_Feature Match CBS_overall 0.4679768 0.0000230
Score_Polygons CBS_overall 0.4944075 0.0000065
Score_Paired Associates CBS_overall 0.5066912 0.0000035
Score_Token Search CBS_overall 0.6150772 0.0000000
Score_Spatial Planning CBS_overall 0.5526095 0.0000003
Score_Rotations CBS_overall 0.5562741 0.0000002
Score_Spatial Span CBS_overall 0.5383926 0.0000006
Score_Grammatical Reasoning CBS_overall 0.6273052 0.0000000
Score_Monkey Ladder CBS_overall 0.5482259 0.0000004
age CBS_STM -0.1685616 0.1482798
age_first_phone CBS_STM -0.1033677 0.3875489
dist_daily CBS_STM 0.2081621 0.0731097
dist_study CBS_STM -0.1914146 0.0999478
pow_not_using CBS_STM -0.1030815 0.3788238
pow_notifications_on CBS_STM -0.0222103 0.8499838
pow_vibrate CBS_STM -0.0847645 0.4696458
pow_study CBS_STM 0.2014556 0.0830653
pow_exam CBS_STM -0.0930036 0.4274114
pow_lec CBS_STM 0.3155082 0.0058282
pow_sleep CBS_STM 0.0303742 0.7958743
com_gen CBS_STM 0.0172384 0.8832960
com_unattended CBS_STM -0.0138812 0.9059085
com_leave_with_other CBS_STM 0.0335743 0.7749093
com_locked CBS_STM 0.0734483 0.5311546
com_room_task CBS_STM 0.2952301 0.0101283
NMPQ_sum CBS_STM -0.0152518 0.8966668
MPIQ_sum CBS_STM 0.0348385 0.7666708
MPIQ_SI_sum CBS_STM 0.0137967 0.9064787
MPIQ_VFO_sum CBS_STM -0.1330924 0.2549836
SAD_sum CBS_STM 0.0409558 0.7271818
SAD_dep_sum CBS_STM 0.0216482 0.8537378
SAD_ea_sum CBS_STM -0.0096123 0.9347670
SAD_access_sum CBS_STM 0.0642783 0.5837719
SAD_dist_sum CBS_STM 0.1193598 0.3077398
Score_Double Trouble CBS_STM 0.2387327 0.0391423
Score_Odd One Out CBS_STM 0.1555348 0.1827051
Score_Digit Span CBS_STM 0.1378898 0.2380999
Score_Feature Match CBS_STM 0.2763503 0.0163948
Score_Polygons CBS_STM 0.3314743 0.0036720
Score_Paired Associates CBS_STM 0.6394328 0.0000000
Score_Token Search CBS_STM 0.7500159 0.0000000
Score_Spatial Planning CBS_STM 0.4352264 0.0000953
Score_Rotations CBS_STM 0.3606588 0.0014797
Score_Spatial Span CBS_STM 0.6550185 0.0000000
Score_Grammatical Reasoning CBS_STM 0.4204292 0.0001730
Score_Monkey Ladder CBS_STM 0.5920672 0.0000000
CBS_overall CBS_STM 0.8379132 0.0000000
age CBS_reason -0.2371736 0.0404799
age_first_phone CBS_reason -0.1314014 0.2712262
dist_daily CBS_reason 0.2014333 0.0831000
dist_study CBS_reason -0.2549652 0.0272721
pow_not_using CBS_reason -0.0468290 0.6899239
pow_notifications_on CBS_reason -0.0200217 0.8646187
pow_vibrate CBS_reason -0.0987583 0.3992453
pow_study CBS_reason 0.1468022 0.2088214
pow_exam CBS_reason 0.0736147 0.5302221
pow_lec CBS_reason 0.2135424 0.0658342
pow_sleep CBS_reason 0.0256950 0.8267873
com_gen CBS_reason -0.0039498 0.9731704
com_unattended CBS_reason -0.0223533 0.8490290
com_leave_with_other CBS_reason -0.0668344 0.5688683
com_locked CBS_reason -0.0339645 0.7723639
com_room_task CBS_reason 0.1466511 0.2092955
NMPQ_sum CBS_reason 0.0619336 0.5975972
MPIQ_sum CBS_reason 0.1252196 0.2844216
MPIQ_SI_sum CBS_reason 0.0670623 0.5675484
MPIQ_VFO_sum CBS_reason -0.0308338 0.7928541
SAD_sum CBS_reason 0.1043914 0.3727627
SAD_dep_sum CBS_reason 0.0056809 0.9614196
SAD_ea_sum CBS_reason 0.0715996 0.5415702
SAD_access_sum CBS_reason 0.1536479 0.1881369
SAD_dist_sum CBS_reason 0.1931129 0.0969179
Score_Double Trouble CBS_reason 0.1313732 0.2612280
Score_Odd One Out CBS_reason 0.4535434 0.0000438
Score_Digit Span CBS_reason 0.1602738 0.1695669
Score_Feature Match CBS_reason 0.5557968 0.0000002
Score_Polygons CBS_reason 0.5793415 0.0000001
Score_Paired Associates CBS_reason 0.3280056 0.0040680
Score_Token Search CBS_reason 0.4288672 0.0001235
Score_Spatial Planning CBS_reason 0.6102565 0.0000000
Score_Rotations CBS_reason 0.5941921 0.0000000
Score_Spatial Span CBS_reason 0.3876442 0.0005901
Score_Grammatical Reasoning CBS_reason 0.4383866 0.0000836
Score_Monkey Ladder CBS_reason 0.3350808 0.0032969
CBS_overall CBS_reason 0.8532359 0.0000000
CBS_STM CBS_reason 0.5605877 0.0000002
age CBS_verbal 0.0257140 0.8266615
age_first_phone CBS_verbal -0.1144478 0.3384281
dist_daily CBS_verbal 0.0170505 0.8845589
dist_study CBS_verbal -0.1429346 0.2211968
pow_not_using CBS_verbal 0.0065661 0.9554141
pow_notifications_on CBS_verbal 0.1052688 0.3687360
pow_vibrate CBS_verbal 0.1270906 0.2772298
pow_study CBS_verbal 0.0628746 0.5920310
pow_exam CBS_verbal 0.0474881 0.6857863
pow_lec CBS_verbal 0.1437914 0.2184118
pow_sleep CBS_verbal -0.0372150 0.7512525
com_gen CBS_verbal -0.0831988 0.4779195
com_unattended CBS_verbal -0.0154918 0.8950497
com_leave_with_other CBS_verbal 0.0689933 0.5564215
com_locked CBS_verbal -0.0343192 0.7700518
com_room_task CBS_verbal 0.0614626 0.6003916
NMPQ_sum CBS_verbal 0.0219197 0.8519237
MPIQ_sum CBS_verbal 0.0200023 0.8647489
MPIQ_SI_sum CBS_verbal 0.0418510 0.7214591
MPIQ_VFO_sum CBS_verbal -0.0198646 0.8656710
SAD_sum CBS_verbal 0.0482539 0.6809909
SAD_dep_sum CBS_verbal 0.0512543 0.6623234
SAD_ea_sum CBS_verbal 0.0756357 0.5189615
SAD_access_sum CBS_verbal 0.0180290 0.8779840
SAD_dist_sum CBS_verbal -0.0122984 0.9165962
Score_Double Trouble CBS_verbal 0.6671322 0.0000000
Score_Odd One Out CBS_verbal 0.0619119 0.5977256
Score_Digit Span CBS_verbal 0.5427602 0.0000005
Score_Feature Match CBS_verbal 0.2436746 0.0351429
Score_Polygons CBS_verbal 0.2173598 0.0610355
Score_Paired Associates CBS_verbal 0.2271393 0.0500260
Score_Token Search CBS_verbal 0.2641712 0.0220091
Score_Spatial Planning CBS_verbal 0.2138325 0.0654591
Score_Rotations CBS_verbal 0.3468714 0.0022976
Score_Spatial Span CBS_verbal 0.2148772 0.0641227
Score_Grammatical Reasoning CBS_verbal 0.7196041 0.0000000
Score_Monkey Ladder CBS_verbal 0.4062054 0.0002992
CBS_overall CBS_verbal 0.6964038 0.0000000
CBS_STM CBS_verbal 0.4237480 0.0001517
CBS_reason CBS_verbal 0.3898621 0.0005452
age CBS_ts_memory -0.1685616 0.1482798
age_first_phone CBS_ts_memory -0.1033677 0.3875489
dist_daily CBS_ts_memory 0.2081621 0.0731097
dist_study CBS_ts_memory -0.1914146 0.0999478
pow_not_using CBS_ts_memory -0.1030815 0.3788238
pow_notifications_on CBS_ts_memory -0.0222103 0.8499838
pow_vibrate CBS_ts_memory -0.0847645 0.4696458
pow_study CBS_ts_memory 0.2014556 0.0830653
pow_exam CBS_ts_memory -0.0930036 0.4274114
pow_lec CBS_ts_memory 0.3155082 0.0058282
pow_sleep CBS_ts_memory 0.0303742 0.7958743
com_gen CBS_ts_memory 0.0172384 0.8832960
com_unattended CBS_ts_memory -0.0138812 0.9059085
com_leave_with_other CBS_ts_memory 0.0335743 0.7749093
com_locked CBS_ts_memory 0.0734483 0.5311546
com_room_task CBS_ts_memory 0.2952301 0.0101283
NMPQ_sum CBS_ts_memory -0.0152518 0.8966668
MPIQ_sum CBS_ts_memory 0.0348385 0.7666708
MPIQ_SI_sum CBS_ts_memory 0.0137967 0.9064787
MPIQ_VFO_sum CBS_ts_memory -0.1330924 0.2549836
SAD_sum CBS_ts_memory 0.0409558 0.7271818
SAD_dep_sum CBS_ts_memory 0.0216482 0.8537378
SAD_ea_sum CBS_ts_memory -0.0096123 0.9347670
SAD_access_sum CBS_ts_memory 0.0642783 0.5837719
SAD_dist_sum CBS_ts_memory 0.1193598 0.3077398
Score_Double Trouble CBS_ts_memory 0.2387327 0.0391423
Score_Odd One Out CBS_ts_memory 0.1555348 0.1827051
Score_Digit Span CBS_ts_memory 0.1378898 0.2380999
Score_Feature Match CBS_ts_memory 0.2763503 0.0163948
Score_Polygons CBS_ts_memory 0.3314743 0.0036720
Score_Paired Associates CBS_ts_memory 0.6394328 0.0000000
Score_Token Search CBS_ts_memory 0.7500159 0.0000000
Score_Spatial Planning CBS_ts_memory 0.4352264 0.0000953
Score_Rotations CBS_ts_memory 0.3606588 0.0014797
Score_Spatial Span CBS_ts_memory 0.6550185 0.0000000
Score_Grammatical Reasoning CBS_ts_memory 0.4204292 0.0001730
Score_Monkey Ladder CBS_ts_memory 0.5920672 0.0000000
CBS_overall CBS_ts_memory 0.8379132 0.0000000
CBS_STM CBS_ts_memory 1.0000000 0.0000000
CBS_reason CBS_ts_memory 0.5605877 0.0000002
CBS_verbal CBS_ts_memory 0.4237480 0.0001517
age CBS_ts_reason -0.2042660 0.0787698
age_first_phone CBS_ts_reason -0.0929796 0.4372560
dist_daily CBS_ts_reason 0.2355285 0.0419324
dist_study CBS_ts_reason -0.2043501 0.0786441
pow_not_using CBS_ts_reason -0.0742380 0.5267364
pow_notifications_on CBS_ts_reason 0.0201502 0.8637578
pow_vibrate CBS_ts_reason -0.0771399 0.5106590
pow_study CBS_ts_reason 0.2225347 0.0549875
pow_exam CBS_ts_reason 0.1443585 0.2165821
pow_lec CBS_ts_reason 0.1980110 0.0885812
pow_sleep CBS_ts_reason 0.0907000 0.4389962
com_gen CBS_ts_reason 0.0226468 0.8470705
com_unattended CBS_ts_reason 0.0168233 0.8860872
com_leave_with_other CBS_ts_reason -0.0344755 0.7690338
com_locked CBS_ts_reason -0.0106650 0.9276413
com_room_task CBS_ts_reason 0.1631600 0.1619131
NMPQ_sum CBS_ts_reason 0.0769203 0.5118670
MPIQ_sum CBS_ts_reason 0.1369353 0.2413961
MPIQ_SI_sum CBS_ts_reason 0.0512501 0.6623498
MPIQ_VFO_sum CBS_ts_reason -0.0431297 0.7133118
SAD_sum CBS_ts_reason 0.0923466 0.4306978
SAD_dep_sum CBS_ts_reason -0.0213410 0.8557910
SAD_ea_sum CBS_ts_reason 0.0703361 0.5487453
SAD_access_sum CBS_ts_reason 0.1503862 0.1977997
SAD_dist_sum CBS_ts_reason 0.1845429 0.1129682
Score_Double Trouble CBS_ts_reason 0.1296072 0.2677492
Score_Odd One Out CBS_ts_reason 0.4924301 0.0000072
Score_Digit Span CBS_ts_reason 0.0943842 0.4205529
Score_Feature Match CBS_ts_reason 0.2337311 0.0435683
Score_Polygons CBS_ts_reason 0.6195595 0.0000000
Score_Paired Associates CBS_ts_reason 0.3104036 0.0067218
Score_Token Search CBS_ts_reason 0.4507534 0.0000494
Score_Spatial Planning CBS_ts_reason 0.6780582 0.0000000
Score_Rotations CBS_ts_reason 0.5950337 0.0000000
Score_Spatial Span CBS_ts_reason 0.3491751 0.0021376
Score_Grammatical Reasoning CBS_ts_reason 0.4319853 0.0001088
Score_Monkey Ladder CBS_ts_reason 0.3186993 0.0053244
CBS_overall CBS_ts_reason 0.8031064 0.0000000
CBS_STM CBS_ts_reason 0.5406066 0.0000006
CBS_reason CBS_ts_reason 0.9381987 0.0000000
CBS_verbal CBS_ts_reason 0.3545314 0.0018036
CBS_ts_memory CBS_ts_reason 0.5406066 0.0000006
age CBS_ts_verbalab -0.1118067 0.3395726
age_first_phone CBS_ts_verbalab -0.1610692 0.1764898
dist_daily CBS_ts_verbalab 0.0608796 0.6038592
dist_study CBS_ts_verbalab -0.1094782 0.3497889
pow_not_using CBS_ts_verbalab 0.0035670 0.9757700
pow_notifications_on CBS_ts_verbalab 0.0188956 0.8721670
pow_vibrate CBS_ts_verbalab 0.0221057 0.8506821
pow_study CBS_ts_verbalab 0.0642635 0.5838583
pow_exam CBS_ts_verbalab 0.0476652 0.6846763
pow_lec CBS_ts_verbalab 0.1177704 0.3142721
pow_sleep CBS_ts_verbalab -0.0126863 0.9139756
com_gen CBS_ts_verbalab -0.0768527 0.5122391
com_unattended CBS_ts_verbalab -0.0978539 0.4035976
com_leave_with_other CBS_ts_verbalab 0.0419667 0.7207211
com_locked CBS_ts_verbalab -0.0523826 0.6553559
com_room_task CBS_ts_verbalab -0.0382569 0.7445236
NMPQ_sum CBS_ts_verbalab 0.0543523 0.6432632
MPIQ_sum CBS_ts_verbalab 0.0358976 0.7597878
MPIQ_SI_sum CBS_ts_verbalab -0.0302692 0.7965647
MPIQ_VFO_sum CBS_ts_verbalab -0.0172757 0.8830449
SAD_sum CBS_ts_verbalab 0.0310219 0.7916189
SAD_dep_sum CBS_ts_verbalab 0.0328905 0.7793767
SAD_ea_sum CBS_ts_verbalab 0.0419516 0.7208175
SAD_access_sum CBS_ts_verbalab 0.0233015 0.8427052
SAD_dist_sum CBS_ts_verbalab -0.0367788 0.7540755
Score_Double Trouble CBS_ts_verbalab 0.2091279 0.0717583
Score_Odd One Out CBS_ts_verbalab 0.0826747 0.4807065
Score_Digit Span CBS_ts_verbalab 0.6715240 0.0000000
Score_Feature Match CBS_ts_verbalab 0.2813716 0.0144672
Score_Polygons CBS_ts_verbalab 0.2342931 0.0430512
Score_Paired Associates CBS_ts_verbalab 0.2672492 0.0204545
Score_Token Search CBS_ts_verbalab 0.2070532 0.0746864
Score_Spatial Planning CBS_ts_verbalab 0.2082693 0.0729586
Score_Rotations CBS_ts_verbalab 0.3738867 0.0009522
Score_Spatial Span CBS_ts_verbalab 0.2803115 0.0148571
Score_Grammatical Reasoning CBS_ts_verbalab 0.7908871 0.0000000
Score_Monkey Ladder CBS_ts_verbalab 0.2860894 0.0128378
CBS_overall CBS_ts_verbalab 0.6587611 0.0000000
CBS_STM CBS_ts_verbalab 0.3971131 0.0004194
CBS_reason CBS_ts_verbalab 0.4241991 0.0001490
CBS_verbal CBS_ts_verbalab 0.8679834 0.0000000
CBS_ts_memory CBS_ts_verbalab 0.3971131 0.0004194
CBS_ts_reason CBS_ts_verbalab 0.3789974 0.0007991
age CBS_ts_con 0.0229879 0.8447957
age_first_phone CBS_ts_con -0.0928338 0.4379784
dist_daily CBS_ts_con -0.0386509 0.7419834
dist_study CBS_ts_con -0.2372887 0.0403799
pow_not_using CBS_ts_con 0.0379833 0.7462889
pow_notifications_on CBS_ts_con 0.0464922 0.6920415
pow_vibrate CBS_ts_con 0.0808911 0.4902550
pow_study CBS_ts_con -0.0675058 0.5649837
pow_exam CBS_ts_con -0.0836740 0.4754003
pow_lec CBS_ts_con 0.1589159 0.1732584
pow_sleep CBS_ts_con -0.1388984 0.2346512
com_gen CBS_ts_con -0.0786614 0.5023311
com_unattended CBS_ts_con 0.0054443 0.9630251
com_leave_with_other CBS_ts_con -0.0248977 0.8320820
com_locked CBS_ts_con -0.0417233 0.7222748
com_room_task CBS_ts_con 0.1338881 0.2521283
NMPQ_sum CBS_ts_con -0.0333303 0.7765027
MPIQ_sum CBS_ts_con 0.0063806 0.9566723
MPIQ_SI_sum CBS_ts_con 0.1317324 0.2599148
MPIQ_VFO_sum CBS_ts_con 0.0030803 0.9790755
SAD_sum CBS_ts_con 0.0828136 0.4799671
SAD_dep_sum CBS_ts_con 0.0819185 0.4847429
SAD_ea_sum CBS_ts_con 0.0803846 0.4929848
SAD_access_sum CBS_ts_con 0.0499112 0.6706549
SAD_dist_sum CBS_ts_con 0.0905999 0.4395037
Score_Double Trouble CBS_ts_con 0.7118458 0.0000000
Score_Odd One Out CBS_ts_con 0.0628512 0.5921691
Score_Digit Span CBS_ts_con 0.1985161 0.0877548
Score_Feature Match CBS_ts_con 0.7422775 0.0000000
Score_Polygons CBS_ts_con 0.1494526 0.2006297
Score_Paired Associates CBS_ts_con 0.1548740 0.1845941
Score_Token Search CBS_ts_con 0.2266080 0.0505790
Score_Spatial Planning CBS_ts_con 0.1332416 0.2544468
Score_Rotations CBS_ts_con 0.2508744 0.0299318
Score_Spatial Span CBS_ts_con 0.1778671 0.1268346
Score_Grammatical Reasoning CBS_ts_con 0.2912504 0.0112397
Score_Monkey Ladder CBS_ts_con 0.3725498 0.0009964
CBS_overall CBS_ts_con 0.5863996 0.0000000
CBS_STM CBS_ts_con 0.3546558 0.0017964
CBS_reason CBS_ts_con 0.4791881 0.0000137
CBS_verbal CBS_ts_con 0.6192155 0.0000000
CBS_ts_memory CBS_ts_con 0.3546558 0.0017964
CBS_ts_reason CBS_ts_con 0.2514262 0.0295607
CBS_ts_verbalab CBS_ts_con 0.3383172 0.0029899

# print tables using kable
kable(as.data.frame(format(main_corr_desk2$r, scientific = FALSE)), caption = "Study 2 - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: r values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.2402 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily -0.1916 -0.0783 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study -0.1375 -0.0963 0.1938 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using -0.1587 0.0858 -0.2714 -0.0637 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.084 -0.0017 0.1083 -0.0456 -0.2651 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.037 -0.0154 -0.1936 0.0912 -0.0217 0.212 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study -0.0417 -0.0466 0.3796 0.0269 -0.5357 0.2623 -0.0447 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam -0.0608 -0.165 0.0905 0.0242 -0.3872 0.1623 0.1272 0.405 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec -0.0195 -0.1308 0.3381 -0.1434 -0.5178 0.1909 0.1178 0.7276 0.3069 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.0692 -0.1157 0.1533 -0.0884 -0.4717 0.2216 0.1588 0.6336 0.3332 0.6609 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 0.1814 0.1091 -0.2776 -0.1894 -0.1207 0.2631 0.042 -0.042 0.1409 0.0894 0.1789 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.3683 0.0225 -0.0395 0.0056 -0.0696 0.0484 0.1041 -0.0803 0.1265 -0.0559 -0.156 0.3003 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.1108 -0.0427 -0.0981 0.0508 -0.0911 0.0911 0.1041 0.0304 0.3021 0.0412 -0.0519 0.4911 0.5341 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked -0.2117 0.0338 -0.1107 0.0092 0.0599 -0.1275 0.077 -0.0135 -0.1616 -0.0438 0.0097 -0.313 -0.4145 -0.3882 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.1314 -0.0339 -0.0528 -0.1479 -0.1883 0.0675 -0.0326 0.0251 0.1217 0.1783 -0.0438 0.4809 0.4583 0.5052 -0.1956 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum -0.0338 -0.0885 0.5279 0.1797 -0.2711 0.1403 -0.1446 0.2996 0.0999 0.2261 0.1758 -0.3004 -0.2743 -0.2349 0.1505 -0.2419 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 0.0295 -0.3306 0.6378 0.282 -0.3201 0.0921 -0.2294 0.3872 0.0993 0.2955 0.2188 -0.3165 -0.1575 -0.1547 0.0107 -0.1183 0.7731 1 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 0.0289 -0.2849 0.4207 0.2101 -0.2712 0.1398 -0.0638 0.2753 0.0463 0.319 0.234 -0.3333 -0.255 -0.263 0.0933 -0.1981 0.7594 0.7357 1 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 0.087 -0.041 0.1825 0.0588 -0.2173 0.1452 -0.1219 0.3039 0.1465 0.3441 0.2827 -0.1098 -0.1641 0.0162 0.0368 -0.0385 0.3513 0.4097 0.3919 1 - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 0.0342 -0.2545 0.5569 0.233 -0.3362 0.1449 -0.1514 0.2598 0.0225 0.2716 0.1864 -0.332 -0.2806 -0.2499 0.1343 -0.1972 0.8124 0.8404 0.8336 0.4906 1 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum -0.0018 -0.1426 0.4797 0.2348 -0.2878 0.1582 -0.1471 0.2489 -0.0106 0.2023 0.1567 -0.3172 -0.2422 -0.2512 0.141 -0.2145 0.7659 0.7326 0.7822 0.4282 0.9046 1 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 0.1164 -0.3035 0.4218 0.2229 -0.3095 0.1468 0.011 0.265 0.0409 0.3578 0.2496 -0.2957 -0.2222 -0.1443 0.1528 -0.1523 0.6922 0.7521 0.7343 0.5774 0.8752 0.6956 1 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 0.0142 -0.1205 0.4845 0.1654 -0.2776 0.1273 -0.1848 0.1415 -0.0278 0.1296 0.0425 -0.2515 -0.3105 -0.2333 0.1137 -0.1779 0.7315 0.6633 0.7262 0.3586 0.8885 0.766 0.6757 1 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 0.061 -0.3138 0.5562 0.1307 -0.2714 -0.0177 -0.2293 0.1899 0.0198 0.2148 0.1336 -0.2931 -0.125 -0.2802 0.0191 -0.083 0.4922 0.7044 0.5066 0.167 0.6916 0.5152 0.5632 0.5279 1 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 0.2184 0.0199 -0.0577 -0.1172 0.0076 0.1789 0.2171 0.0274 0.022 0.1065 -0.0543 -0.0485 0.1163 0.0729 0.011 0.1784 -0.0384 -0.0145 0.1278 -0.0132 0.0485 0.0516 0.086 5e-04 0.031 1 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out -0.0486 -0.1278 0.1359 -0.1964 0.039 0.0199 -0.1342 0.0588 0.0286 0.0502 0.0638 0.0521 -0.0704 -0.0577 0.0145 0.0722 0.055 0.1542 0.0546 0.0876 0.1209 -0.0307 0.1318 0.174 0.1757 -0.0021 1 - - - - - - - - - - - - - - - - - -
Score_Digit Span -0.2066 -0.2527 0.011 0.1727 0.0321 -0.0906 0.0071 0.0051 -0.0616 -0.0223 0.0059 -0.1233 -0.2476 -0.1022 -0.0102 -0.2681 0.0509 0.0806 -0.0018 -0.0118 0.0951 0.1341 0.0802 0.022 0.0074 0.0614 -0.0557 1 - - - - - - - - - - - - - - - - -
Score_Feature Match -0.1757 -0.1475 2e-04 -0.2254 0.0468 -0.1046 -0.0922 -0.1221 -0.1399 0.1243 -0.1457 -0.0655 -0.1032 -0.105 -0.0698 0.0201 -0.0108 0.0229 0.0653 0.017 0.0715 0.0672 0.0322 0.0704 0.0992 0.0578 0.0913 0.2236 1 - - - - - - - - - - - - - - - -
Score_Polygons -0.1678 -0.1593 0.1923 -0.0272 -0.0917 0.0521 -0.0377 0.0272 0.112 0.0877 0.0775 0.0851 -0.0468 0.0079 0.0713 0.1465 0.1902 0.2176 0.2098 0.0414 0.2213 0.1231 0.2152 0.2528 0.141 0.0766 0.1326 0.129 0.1394 1 - - - - - - - - - - - - - - -
Score_Paired Associates -0.0264 0.0132 0.0856 -0.1892 -0.0768 -0.1226 -0.1892 0.104 -0.1747 0.2615 0.0171 0.0183 0.0599 -0.0074 -0.0571 0.2921 -0.078 0.0309 -0.1246 -0.0837 -0.0813 -0.0767 -0.0662 -0.1217 0.1078 0.0464 0.123 -0.0274 0.1759 0.056 1 - - - - - - - - - - - - - -
Score_Token Search -0.1748 -0.1647 0.2979 -0.1562 -0.1359 0.0894 -0.0062 0.168 -0.0514 0.2182 0.0274 -0.1091 0.0385 -0.0805 0.0722 0.1047 0.0446 0.0457 0.1093 -0.1009 0.1441 0.109 0.0383 0.2139 0.2228 0.2096 0.1994 0.0138 0.1221 0.2287 0.3402 1 - - - - - - - - - - - - -
Score_Spatial Planning -0.2906 -0.0138 0.2562 -0.1121 -0.0909 -0.003 -0.0546 0.2247 0.0367 0.1067 -0.0045 -0.1256 -0.0418 -9e-04 0.0564 0.0533 0.0531 0.0891 -0.0441 -0.1756 0.0468 0.0104 -0.0139 0.073 0.1442 0.1087 0.0032 0.0565 0.0857 0.328 0.2494 0.3909 1 - - - - - - - - - - - -
Score_Rotations 0.0203 0.0613 -0.0186 -0.1483 -0.0332 -0.0169 0.0386 0.2073 0.1673 0.2225 0.083 0.0518 0.1908 -0.0313 -0.1607 0.121 -0.1019 -0.1186 -0.0809 -0.0437 -0.151 -0.1434 -0.1453 -0.1224 -0.0144 0.1222 0.0652 0.0962 0.24 0.0614 0.2986 0.2498 0.2565 1 - - - - - - - - - - -
Score_Spatial Span -0.2393 0.0201 0.1985 -0.01 -0.0507 0.0108 -0.0195 0.1043 0.0508 0.1612 -0.02 0.0547 0.0404 0.1023 0.1117 0.1926 -0.0222 -0.0193 -0.0433 -0.0663 -0.0138 0.0303 -0.0964 0.0239 -0.0361 0.0026 -0.0287 0.2046 0.2503 0.3224 0.2452 0.3406 0.266 0.2717 1 - - - - - - - - - -
Score_Grammatical Reasoning 0.0202 -0.0104 0.0728 -0.2899 -0.0217 0.1003 0.0239 0.0823 0.115 0.1769 -0.022 -0.0016 0.0728 0.1409 -0.0621 0.1699 0.0311 -0.0183 -0.0392 -0.0135 -0.0368 -0.0665 -0.0098 0.0132 -0.0556 0.2306 0.1572 0.0776 0.194 0.2087 0.3822 0.2672 0.2336 0.4236 0.2082 1 - - - - - - - - -
Score_Monkey Ladder -0.0119 -0.1457 -0.0206 -0.1463 -0.012 -0.0262 -0.0015 0.1557 -0.064 0.1875 0.055 0.0737 -0.1716 0.0688 0.0712 0.1789 0.0202 0.0348 0.1028 -0.0995 0.0678 0.0029 0.1008 0.0674 0.0264 0.3707 0.1187 0.1706 0.1758 0.2704 0.077 0.3267 0.2459 0.1291 0.1472 0.244 1 - - - - - - - -
CBS_overall -0.1791 -0.1448 0.1925 -0.2524 -0.0647 0.015 -0.0429 0.178 0.0116 0.2855 0.0134 -0.0217 -0.0219 0.0043 0.0036 0.2175 0.0308 0.0824 0.0522 -0.0783 0.084 0.0287 0.0554 0.1081 0.141 0.3831 0.3074 0.3137 0.468 0.4944 0.5067 0.6151 0.5526 0.5563 0.5384 0.6273 0.5482 1 - - - - - - -
CBS_STM -0.1686 -0.1034 0.2082 -0.1914 -0.1031 -0.0222 -0.0848 0.2015 -0.093 0.3155 0.0304 0.0172 -0.0139 0.0336 0.0734 0.2952 -0.0153 0.0348 0.0138 -0.1331 0.041 0.0216 -0.0096 0.0643 0.1194 0.2387 0.1555 0.1379 0.2764 0.3315 0.6394 0.75 0.4352 0.3607 0.655 0.4204 0.5921 0.8379 1 - - - - - -
CBS_reason -0.2372 -0.1314 0.2014 -0.255 -0.0468 -0.02 -0.0988 0.1468 0.0736 0.2135 0.0257 -0.0039 -0.0224 -0.0668 -0.034 0.1467 0.0619 0.1252 0.0671 -0.0308 0.1044 0.0057 0.0716 0.1536 0.1931 0.1314 0.4535 0.1603 0.5558 0.5793 0.328 0.4289 0.6103 0.5942 0.3876 0.4384 0.3351 0.8532 0.5606 1 - - - - -
CBS_verbal 0.0257 -0.1144 0.0171 -0.1429 0.0066 0.1053 0.1271 0.0629 0.0475 0.1438 -0.0372 -0.0832 -0.0155 0.069 -0.0343 0.0615 0.0219 0.02 0.0419 -0.0199 0.0483 0.0513 0.0756 0.018 -0.0123 0.6671 0.0619 0.5428 0.2437 0.2174 0.2271 0.2642 0.2138 0.3469 0.2149 0.7196 0.4062 0.6964 0.4237 0.3899 1 - - - -
CBS_ts_memory -0.1686 -0.1034 0.2082 -0.1914 -0.1031 -0.0222 -0.0848 0.2015 -0.093 0.3155 0.0304 0.0172 -0.0139 0.0336 0.0734 0.2952 -0.0153 0.0348 0.0138 -0.1331 0.041 0.0216 -0.0096 0.0643 0.1194 0.2387 0.1555 0.1379 0.2764 0.3315 0.6394 0.75 0.4352 0.3607 0.655 0.4204 0.5921 0.8379 1 0.5606 0.4237 1 - - -
CBS_ts_reason -0.2043 -0.093 0.2355 -0.2044 -0.0742 0.0202 -0.0771 0.2225 0.1444 0.198 0.0907 0.0226 0.0168 -0.0345 -0.0107 0.1632 0.0769 0.1369 0.0513 -0.0431 0.0923 -0.0213 0.0703 0.1504 0.1845 0.1296 0.4924 0.0944 0.2337 0.6196 0.3104 0.4508 0.6781 0.595 0.3492 0.432 0.3187 0.8031 0.5406 0.9382 0.3545 0.5406 1 - -
CBS_ts_verbalab -0.1118 -0.1611 0.0609 -0.1095 0.0036 0.0189 0.0221 0.0643 0.0477 0.1178 -0.0127 -0.0769 -0.0979 0.042 -0.0524 -0.0383 0.0544 0.0359 -0.0303 -0.0173 0.031 0.0329 0.042 0.0233 -0.0368 0.2091 0.0827 0.6715 0.2814 0.2343 0.2672 0.2071 0.2083 0.3739 0.2803 0.7909 0.2861 0.6588 0.3971 0.4242 0.868 0.3971 0.379 1 -
CBS_ts_con 0.023 -0.0928 -0.0387 -0.2373 0.038 0.0465 0.0809 -0.0675 -0.0837 0.1589 -0.1389 -0.0787 0.0054 -0.0249 -0.0417 0.1339 -0.0333 0.0064 0.1317 0.0031 0.0828 0.0819 0.0804 0.0499 0.0906 0.7118 0.0629 0.1985 0.7423 0.1495 0.1549 0.2266 0.1332 0.2509 0.1779 0.2913 0.3725 0.5864 0.3547 0.4792 0.6192 0.3547 0.2514 0.3383 1
  

kable(as.data.frame(format(main_corr_desk2$P, scientific = FALSE)), caption = "Study 2 - Correlation: p values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: p values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.0421 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 0.0997 0.5131 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.2396 0.421 0.0957 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 0.1738 0.4737 0.0185 0.5872 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.4736 0.9889 0.3552 0.6974 0.0215 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.7525 0.8975 0.0961 0.4367 0.8531 0.0679 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.7226 0.6976 8e-04 0.8185 0 0.023 0.7037 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.6042 0.1661 0.44 0.8369 6e-04 0.1643 0.277 3e-04 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.8678 0.2736 0.003 0.2198 0 0.1009 0.3143 0 0.0074 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.5554 0.333 0.1893 0.4507 0 0.056 0.1736 0 0.0035 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 0.1194 0.3614 0.0159 0.1037 0.3025 0.0226 0.7206 0.7208 0.2278 0.4454 0.1246 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.0011 0.8512 0.7366 0.9623 0.5531 0.6799 0.3741 0.4934 0.2795 0.6339 0.1813 0.0089 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.3438 0.7214 0.4024 0.6651 0.4369 0.437 0.3743 0.7954 0.0084 0.7256 0.6582 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 0.0683 0.7781 0.3445 0.9374 0.6095 0.2756 0.5116 0.9087 0.1661 0.7092 0.9344 0.0062 2e-04 6e-04 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.2612 0.7772 0.6527 0.2055 0.1057 0.5651 0.7812 0.8305 0.2984 0.126 0.7088 0 0 0 0.0926 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 0.7733 0.4599 0 0.1229 0.0186 0.2299 0.2157 0.009 0.3939 0.0511 0.1313 0.0088 0.0172 0.0425 0.1975 0.0365 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 0.8013 0.0046 0 0.0143 0.0051 0.4318 0.0478 6e-04 0.3965 0.01 0.0593 0.0057 0.1773 0.1851 0.9271 0.3121 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 0.8058 0.0153 2e-04 0.0704 0.0186 0.2316 0.5866 0.0168 0.6932 0.0053 0.0433 0.0035 0.0273 0.0226 0.4261 0.0885 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 0.4582 0.7321 0.1171 0.6161 0.0611 0.2139 0.2974 0.008 0.2098 0.0025 0.014 0.3484 0.1594 0.8904 0.7542 0.7427 0.002 3e-04 5e-04 NA - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 0.7711 0.031 0 0.0443 0.0032 0.2147 0.1947 0.0244 0.8481 0.0184 0.1094 0.0036 0.0148 0.0306 0.2506 0.09 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 0.9879 0.2322 0 0.0426 0.0123 0.1753 0.2079 0.0313 0.9281 0.0818 0.1795 0.0056 0.0363 0.0297 0.2277 0.0645 0 0 0 1e-04 0 NA - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 0.3201 0.0095 2e-04 0.0546 0.0069 0.2087 0.9252 0.0216 0.7276 0.0016 0.0308 0.01 0.0554 0.2166 0.1906 0.192 0 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 0.9038 0.3134 0 0.1562 0.0159 0.2765 0.1125 0.2259 0.8129 0.2677 0.7175 0.0295 0.0067 0.044 0.3312 0.1268 0 0 0 0.0016 0 0 0 NA - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 0.6033 0.0073 0 0.2639 0.0185 0.8801 0.0479 0.1027 0.8658 0.0643 0.2531 0.0107 0.2854 0.0149 0.8706 0.4788 0 0 0 0.1521 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 0.0598 0.8681 0.6226 0.3165 0.9485 0.1245 0.0613 0.8154 0.8513 0.3632 0.6439 0.6792 0.3205 0.5342 0.9254 0.1256 0.7438 0.902 0.2745 0.9105 0.6795 0.6602 0.4631 0.9963 0.7921 NA - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 0.6787 0.2848 0.2449 0.0913 0.7398 0.8655 0.2509 0.6161 0.8072 0.6686 0.5865 0.6571 0.5484 0.623 0.9016 0.5382 0.6393 0.1864 0.6417 0.4548 0.3015 0.7939 0.2598 0.1355 0.1316 0.9857 NA - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.0753 0.0322 0.9251 0.1385 0.7848 0.4395 0.9519 0.9655 0.5998 0.8491 0.9598 0.292 0.0322 0.3828 0.9309 0.02 0.6646 0.4919 0.9878 0.9198 0.4171 0.2514 0.4941 0.8515 0.95 0.6005 0.6352 NA - - - - - - - - - - - - - - - - -
Score_Feature Match 0.1317 0.2162 0.9989 0.0518 0.6904 0.3716 0.4317 0.2967 0.2311 0.288 0.2124 0.5767 0.3782 0.3702 0.5518 0.8642 0.9269 0.8456 0.5778 0.8851 0.5424 0.5666 0.7839 0.5482 0.3969 0.6226 0.4357 0.0539 NA - - - - - - - - - - - - - - - -
Score_Polygons 0.1503 0.1815 0.0984 0.8167 0.4342 0.6573 0.7481 0.8165 0.3389 0.4543 0.5088 0.4677 0.6902 0.9464 0.5431 0.2096 0.1022 0.0608 0.0708 0.7245 0.0564 0.2929 0.0637 0.0286 0.2275 0.5138 0.2568 0.27 0.233 NA - - - - - - - - - - - - - - -
Score_Paired Associates 0.8221 0.9121 0.4653 0.104 0.5124 0.2945 0.104 0.3745 0.1338 0.0234 0.8845 0.8762 0.6097 0.95 0.6268 0.011 0.5061 0.7924 0.2867 0.475 0.4881 0.5133 0.5725 0.2984 0.3571 0.6927 0.2932 0.8153 0.1312 0.6332 NA - - - - - - - - - - - - - -
Score_Token Search 0.1336 0.1669 0.0094 0.1809 0.2451 0.4455 0.9576 0.1497 0.6615 0.06 0.8155 0.3512 0.7431 0.4925 0.5381 0.3714 0.7041 0.697 0.3504 0.3892 0.2173 0.3518 0.7441 0.0654 0.0547 0.0711 0.0863 0.9062 0.2966 0.0484 0.0028 NA - - - - - - - - - - - - -
Score_Spatial Planning 0.0114 0.9082 0.0265 0.3383 0.438 0.9797 0.6417 0.0526 0.7544 0.3621 0.9693 0.283 0.7218 0.9936 0.631 0.6494 0.6507 0.4474 0.7075 0.1319 0.6898 0.9295 0.9058 0.5334 0.2172 0.3535 0.978 0.6302 0.4646 0.0041 0.031 5e-04 NA - - - - - - - - - - - -
Score_Rotations 0.8626 0.6087 0.8739 0.2041 0.7775 0.8855 0.7424 0.0743 0.1513 0.055 0.4792 0.6592 0.101 0.79 0.1685 0.3009 0.3842 0.3107 0.4903 0.7098 0.1961 0.2197 0.2135 0.2956 0.9025 0.2963 0.5782 0.4117 0.0381 0.6008 0.0093 0.0306 0.0263 NA - - - - - - - - - - -
Score_Spatial Span 0.0387 0.867 0.0877 0.9323 0.6656 0.9266 0.8682 0.373 0.6651 0.1671 0.8645 0.641 0.7306 0.3824 0.3399 0.0977 0.8499 0.8692 0.7124 0.5718 0.9064 0.7965 0.4107 0.8388 0.7587 0.9821 0.8068 0.0783 0.0303 0.0048 0.0339 0.0028 0.0211 0.0184 NA - - - - - - - - - -
Score_Grammatical Reasoning 0.8632 0.9312 0.5348 0.0116 0.8535 0.3921 0.8388 0.4829 0.326 0.1289 0.8517 0.9892 0.5345 0.2279 0.5968 0.145 0.7911 0.8765 0.7382 0.9087 0.754 0.5709 0.9337 0.9105 0.6358 0.0465 0.1779 0.5079 0.0954 0.0724 7e-04 0.0205 0.0437 2e-04 0.0731 NA - - - - - - - - -
Score_Monkey Ladder 0.9193 0.222 0.8606 0.2103 0.9184 0.8237 0.9901 0.1822 0.5855 0.1072 0.6391 0.5298 0.141 0.5574 0.5439 0.1246 0.8634 0.7669 0.3799 0.3955 0.5634 0.98 0.3893 0.5655 0.8219 0.0011 0.3103 0.1433 0.1313 0.019 0.5115 0.0042 0.0335 0.2695 0.2076 0.0349 NA - - - - - - - -
CBS_overall 0.1242 0.2249 0.098 0.0289 0.5814 0.898 0.7148 0.1266 0.9213 0.013 0.9094 0.8537 0.8523 0.9711 0.9752 0.0609 0.7932 0.4824 0.6566 0.5043 0.4735 0.8069 0.6369 0.3558 0.2276 7e-04 0.0073 0.0061 0 0 0 0 0 0 0 0 0 NA - - - - - - -
CBS_STM 0.1483 0.3875 0.0731 0.0999 0.3788 0.85 0.4696 0.0831 0.4274 0.0058 0.7959 0.8833 0.9059 0.7749 0.5312 0.0101 0.8967 0.7667 0.9065 0.255 0.7272 0.8537 0.9348 0.5838 0.3077 0.0391 0.1827 0.2381 0.0164 0.0037 0 0 1e-04 0.0015 0 2e-04 0 0 NA - - - - - -
CBS_reason 0.0405 0.2712 0.0831 0.0273 0.6899 0.8646 0.3992 0.2088 0.5302 0.0658 0.8268 0.9732 0.849 0.5689 0.7724 0.2093 0.5976 0.2844 0.5675 0.7929 0.3728 0.9614 0.5416 0.1881 0.0969 0.2612 0 0.1696 0 0 0.0041 1e-04 0 0 6e-04 1e-04 0.0033 0 0 NA - - - - -
CBS_verbal 0.8267 0.3384 0.8846 0.2212 0.9554 0.3687 0.2772 0.592 0.6858 0.2184 0.7513 0.4779 0.895 0.5564 0.7701 0.6004 0.8519 0.8647 0.7215 0.8657 0.681 0.6623 0.519 0.878 0.9166 0 0.5977 0 0.0351 0.061 0.05 0.022 0.0655 0.0023 0.0641 0 3e-04 0 2e-04 5e-04 NA - - - -
CBS_ts_memory 0.1483 0.3875 0.0731 0.0999 0.3788 0.85 0.4696 0.0831 0.4274 0.0058 0.7959 0.8833 0.9059 0.7749 0.5312 0.0101 0.8967 0.7667 0.9065 0.255 0.7272 0.8537 0.9348 0.5838 0.3077 0.0391 0.1827 0.2381 0.0164 0.0037 0 0 1e-04 0.0015 0 2e-04 0 0 0 0 2e-04 NA - - -
CBS_ts_reason 0.0788 0.4373 0.0419 0.0786 0.5267 0.8638 0.5107 0.055 0.2166 0.0886 0.439 0.8471 0.8861 0.769 0.9276 0.1619 0.5119 0.2414 0.6623 0.7133 0.4307 0.8558 0.5487 0.1978 0.113 0.2677 0 0.4206 0.0436 0 0.0067 0 0 0 0.0021 1e-04 0.0053 0 0 0 0.0018 0 NA - -
CBS_ts_verbalab 0.3396 0.1765 0.6039 0.3498 0.9758 0.8722 0.8507 0.5839 0.6847 0.3143 0.914 0.5122 0.4036 0.7207 0.6554 0.7445 0.6433 0.7598 0.7966 0.883 0.7916 0.7794 0.7208 0.8427 0.7541 0.0718 0.4807 0 0.0145 0.0431 0.0205 0.0747 0.073 0.001 0.0149 0 0.0128 0 4e-04 1e-04 0 4e-04 8e-04 NA -
CBS_ts_con 0.8448 0.438 0.742 0.0404 0.7463 0.692 0.4903 0.565 0.4754 0.1733 0.2347 0.5023 0.963 0.8321 0.7223 0.2521 0.7765 0.9567 0.2599 0.9791 0.48 0.4847 0.493 0.6707 0.4395 0 0.5922 0.0878 0 0.2006 0.1846 0.0506 0.2544 0.0299 0.1268 0.0112 0.001 0 0.0018 0 0 0.0018 0.0296 0.003 NA

kable(as.data.frame(format(main_corr_desk2$n, scientific = FALSE)), caption = "Study 2 - Correlation: n values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: n values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 72 72 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 75 72 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 75 72 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 75 72 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 75 72 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 75 72 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 75 72 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 75 72 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 75 72 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 75 72 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 75 72 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 75 72 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 75 72 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - - -
Score_Digit Span 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - - -
Score_Feature Match 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - - -
Score_Polygons 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - - -
Score_Paired Associates 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - - -
Score_Token Search 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - - -
Score_Spatial Planning 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - - -
Score_Rotations 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - - -
Score_Spatial Span 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - - -
Score_Grammatical Reasoning 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - - -
Score_Monkey Ladder 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - - -
CBS_overall 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - - -
CBS_STM 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - - -
CBS_reason 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - - -
CBS_verbal 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - - -
CBS_ts_memory 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - - -
CBS_ts_reason 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - -
CBS_ts_verbalab 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 -
CBS_ts_con 75 72 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75

corrplot(main_corr_desk$r, method = "circle", col = (colorRampPalette(c("purple", "grey", "blue"))(50)),  
         type = "upper",  
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         # Combine with significance level
         p.mat = main_corr_desk$P, sig.level = 0.05, 
         addgrid.col = "white",
         insig = "blank",# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1
         )

For Pocket/Bag….

main_corr_pb <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_access_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_overall, CBS_STM, CBS_reason, CBS_verbal, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% 
  filter(condition == "pocket/bag") %>% 
  select(-condition) %>% 
  as.matrix() %>%
  rcorr(type = "pearson")

# create new main_corr_pb to shown only lower triangle... 
main_corr_pb2 <- main_corr_pb
# round to 4 decimals... 
main_corr_pb2$r <- round(main_corr_pb2$r, 4)
main_corr_pb2$P <- round(main_corr_pb2$P, 4)
main_corr_pb2$n <- round(main_corr_pb2$n, 4)
# remove upper triangle form r, p, and n
main_corr_pb2$r[upper.tri(main_corr_pb2$r)] <- "-"
main_corr_pb2$P[upper.tri(main_corr_pb2$P)] <- "-"
main_corr_pb2$n[upper.tri(main_corr_pb2$n)] <- "-"

# show corr table with flattenCorr

kable(flattenCorrMatrix(main_corr_pb$r, main_corr_pb$P), caption = "Study 2 - Correlation") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation
row column cor p
age age_first_phone 0.4016153 0.0001678
age dist_daily -0.2709633 0.0121320
age_first_phone dist_daily -0.1045673 0.3468132
age dist_study 0.0091629 0.9336696
age_first_phone dist_study -0.0188999 0.8653327
dist_daily dist_study 0.1660528 0.1288054
age pow_not_using -0.1993908 0.0673261
age_first_phone pow_not_using -0.0376078 0.7357051
dist_daily pow_not_using 0.0436198 0.6918178
dist_study pow_not_using -0.1296008 0.2371413
age pow_notifications_on -0.0457891 0.6773207
age_first_phone pow_notifications_on -0.1513560 0.1719734
dist_daily pow_notifications_on 0.0843990 0.4425046
dist_study pow_notifications_on 0.0724197 0.5101164
pow_not_using pow_notifications_on -0.0815189 0.4582845
age pow_vibrate 0.1046747 0.3403945
age_first_phone pow_vibrate 0.1139323 0.3050918
dist_daily pow_vibrate -0.0132239 0.9043896
dist_study pow_vibrate 0.0396570 0.7185872
pow_not_using pow_vibrate -0.2051718 0.0596089
pow_notifications_on pow_vibrate 0.0667165 0.5440733
age pow_study 0.2281881 0.0356903
age_first_phone pow_study 0.0213550 0.8480365
dist_daily pow_study 0.1807207 0.0978938
dist_study pow_study 0.0008652 0.9937294
pow_not_using pow_study -0.5021562 0.0000010
pow_notifications_on pow_study 0.2431153 0.0249629
pow_vibrate pow_study 0.1005807 0.3597173
age pow_exam 0.2724122 0.0116615
age_first_phone pow_exam 0.1843409 0.0952590
dist_daily pow_exam -0.0351098 0.7497252
dist_study pow_exam -0.0191406 0.8619671
pow_not_using pow_exam -0.2689473 0.0128139
pow_notifications_on pow_exam 0.0908222 0.4084343
pow_vibrate pow_exam -0.1187206 0.2791741
pow_study pow_exam 0.3259738 0.0023311
age pow_lec 0.2290262 0.0349995
age_first_phone pow_lec -0.0342348 0.7586502
dist_daily pow_lec 0.1823224 0.0949054
dist_study pow_lec 0.1291979 0.2386149
pow_not_using pow_lec -0.5238049 0.0000003
pow_notifications_on pow_lec 0.2967773 0.0058144
pow_vibrate pow_lec 0.0090566 0.9344379
pow_study pow_lec 0.6253414 0.0000000
pow_exam pow_lec 0.3308042 0.0019864
age pow_sleep 0.2189092 0.0441310
age_first_phone pow_sleep 0.1689572 0.1267785
dist_daily pow_sleep 0.0722506 0.5111073
dist_study pow_sleep 0.0750538 0.4948092
pow_not_using pow_sleep -0.4566352 0.0000112
pow_notifications_on pow_sleep -0.0240640 0.8269569
pow_vibrate pow_sleep 0.1372557 0.2103381
pow_study pow_sleep 0.5931842 0.0000000
pow_exam pow_sleep 0.2100654 0.0536538
pow_lec pow_sleep 0.4504416 0.0000152
age com_gen -0.0846592 0.4410939
age_first_phone com_gen 0.1971332 0.0740499
dist_daily com_gen -0.0903000 0.4111457
dist_study com_gen -0.1616637 0.1393704
pow_not_using com_gen 0.0701825 0.5233056
pow_notifications_on com_gen -0.1446202 0.1866533
pow_vibrate com_gen 0.0235990 0.8302503
pow_study com_gen -0.0311974 0.7768428
pow_exam com_gen -0.0244116 0.8244973
pow_lec com_gen -0.0348577 0.7514636
pow_sleep com_gen -0.0018072 0.9869036
age com_unattended -0.0490813 0.6555419
age_first_phone com_unattended 0.2925034 0.0072883
dist_daily com_unattended -0.0637369 0.5622419
dist_study com_unattended 0.0140725 0.8982853
pow_not_using com_unattended 0.2183853 0.0446531
pow_notifications_on com_unattended -0.1977191 0.0697023
pow_vibrate com_unattended -0.2004558 0.0658467
pow_study com_unattended -0.0822803 0.4540829
pow_exam com_unattended -0.0144110 0.8958528
pow_lec com_unattended -0.1266909 0.2479263
pow_sleep com_unattended 0.0417710 0.7042625
com_gen com_unattended 0.5723003 0.0000000
age com_leave_with_other -0.0661257 0.5476530
age_first_phone com_leave_with_other 0.1715452 0.1209810
dist_daily com_leave_with_other -0.0837722 0.4459124
dist_study com_leave_with_other -0.0942544 0.3908768
pow_not_using com_leave_with_other 0.2095901 0.0542099
pow_notifications_on com_leave_with_other -0.1560902 0.1537144
pow_vibrate com_leave_with_other -0.0427991 0.6973321
pow_study com_leave_with_other -0.1271144 0.2463363
pow_exam com_leave_with_other -0.0565655 0.6071132
pow_lec com_leave_with_other -0.1949454 0.0737934
pow_sleep com_leave_with_other -0.1398756 0.2016790
com_gen com_leave_with_other 0.6720998 0.0000000
com_unattended com_leave_with_other 0.6666505 0.0000000
age com_locked -0.0513565 0.6406566
age_first_phone com_locked -0.0331980 0.7657460
dist_daily com_locked 0.3188906 0.0029340
dist_study com_locked 0.1725490 0.1143044
pow_not_using com_locked 0.0182026 0.8686698
pow_notifications_on com_locked -0.0544286 0.6207807
pow_vibrate com_locked 0.0746202 0.4973119
pow_study com_locked 0.0752177 0.4938643
pow_exam com_locked 0.0389430 0.7234476
pow_lec com_locked 0.0539416 0.6239141
pow_sleep com_locked 0.1144032 0.2971538
com_gen com_locked -0.3360673 0.0016637
com_unattended com_locked -0.2790249 0.0097105
com_leave_with_other com_locked -0.3003785 0.0052196
age com_room_task 0.1634132 0.1350835
age_first_phone com_room_task 0.0702176 0.5281778
dist_daily com_room_task -0.1300169 0.2356263
dist_study com_room_task -0.0370696 0.7362522
pow_not_using com_room_task 0.1661953 0.1284730
pow_notifications_on com_room_task -0.0094614 0.9315138
pow_vibrate com_room_task -0.0537558 0.6251114
pow_study com_room_task 0.0519969 0.6364919
pow_exam com_room_task 0.0672373 0.5409271
pow_lec com_room_task 0.1078951 0.3256625
pow_sleep com_room_task 0.1180208 0.2820382
com_gen com_room_task 0.3890720 0.0002332
com_unattended com_room_task 0.4476580 0.0000174
com_leave_with_other com_room_task 0.3492203 0.0010538
com_locked com_room_task 0.0164592 0.8811518
age NMPQ_sum -0.2715027 0.0119549
age_first_phone NMPQ_sum -0.2034145 0.0651213
dist_daily NMPQ_sum 0.3724562 0.0004477
dist_study NMPQ_sum 0.2646680 0.0143728
pow_not_using NMPQ_sum -0.0509998 0.6429811
pow_notifications_on NMPQ_sum 0.1553351 0.1557397
pow_vibrate NMPQ_sum 0.0124069 0.9102709
pow_study NMPQ_sum 0.1443178 0.1875860
pow_exam NMPQ_sum -0.0947627 0.3883155
pow_lec NMPQ_sum 0.0668437 0.5433043
pow_sleep NMPQ_sum -0.0113412 0.9179507
com_gen NMPQ_sum -0.3605036 0.0007010
com_unattended NMPQ_sum -0.4244296 0.0000516
com_leave_with_other NMPQ_sum -0.3520980 0.0009511
com_locked NMPQ_sum 0.3365181 0.0016384
com_room_task NMPQ_sum -0.3906874 0.0002184
age MPIQ_sum -0.1948957 0.0738684
age_first_phone MPIQ_sum -0.1142012 0.3039442
dist_daily MPIQ_sum 0.4546988 0.0000123
dist_study MPIQ_sum 0.1965383 0.0714210
pow_not_using MPIQ_sum -0.2414613 0.0259972
pow_notifications_on MPIQ_sum 0.2189536 0.0440870
pow_vibrate MPIQ_sum -0.0457594 0.6775181
pow_study MPIQ_sum 0.2910551 0.0068833
pow_exam MPIQ_sum 0.1431362 0.1912629
pow_lec MPIQ_sum 0.3099554 0.0038919
pow_sleep MPIQ_sum 0.1486262 0.1746127
com_gen MPIQ_sum -0.2420538 0.0256226
com_unattended MPIQ_sum -0.2463890 0.0230186
com_leave_with_other MPIQ_sum -0.2170950 0.0459609
com_locked MPIQ_sum 0.2496392 0.0212175
com_room_task MPIQ_sum -0.3634253 0.0006292
NMPQ_sum MPIQ_sum 0.7085393 0.0000000
age MPIQ_SI_sum -0.0967830 0.3782341
age_first_phone MPIQ_SI_sum -0.2843394 0.0091826
dist_daily MPIQ_SI_sum 0.2174702 0.0455774
dist_study MPIQ_SI_sum 0.1908369 0.0802054
pow_not_using MPIQ_SI_sum -0.1428530 0.1921520
pow_notifications_on MPIQ_SI_sum 0.1635879 0.1346607
pow_vibrate MPIQ_SI_sum -0.0150632 0.8911671
pow_study MPIQ_SI_sum 0.2003425 0.0660029
pow_exam MPIQ_SI_sum 0.0451029 0.6818942
pow_lec MPIQ_SI_sum 0.2066089 0.0578068
pow_sleep MPIQ_SI_sum 0.0220316 0.8413729
com_gen MPIQ_SI_sum -0.5008389 0.0000011
com_unattended MPIQ_SI_sum -0.4947316 0.0000015
com_leave_with_other MPIQ_SI_sum -0.5369017 0.0000001
com_locked MPIQ_SI_sum 0.2875779 0.0076144
com_room_task MPIQ_SI_sum -0.3267740 0.0022705
NMPQ_sum MPIQ_SI_sum 0.6958497 0.0000000
MPIQ_sum MPIQ_SI_sum 0.6321389 0.0000000
age MPIQ_VFO_sum -0.0294603 0.7889710
age_first_phone MPIQ_VFO_sum -0.0527515 0.6357636
dist_daily MPIQ_VFO_sum 0.2948654 0.0061539
dist_study MPIQ_VFO_sum 0.2269287 0.0367498
pow_not_using MPIQ_VFO_sum -0.1771621 0.1047973
pow_notifications_on MPIQ_VFO_sum 0.0151424 0.8905988
pow_vibrate MPIQ_VFO_sum 0.0689864 0.5304274
pow_study MPIQ_VFO_sum -0.0070241 0.9491286
pow_exam MPIQ_VFO_sum -0.0037400 0.9729008
pow_lec MPIQ_VFO_sum 0.1049282 0.3392199
pow_sleep MPIQ_VFO_sum 0.0448202 0.6837813
com_gen MPIQ_VFO_sum -0.1624926 0.1373267
com_unattended MPIQ_VFO_sum -0.2203253 0.0427449
com_leave_with_other MPIQ_VFO_sum -0.0775407 0.4805812
com_locked MPIQ_VFO_sum 0.1775960 0.1039358
com_room_task MPIQ_VFO_sum -0.2519093 0.0200323
NMPQ_sum MPIQ_VFO_sum 0.4573597 0.0000108
MPIQ_sum MPIQ_VFO_sum 0.4584615 0.0000102
MPIQ_SI_sum MPIQ_VFO_sum 0.3168287 0.0031340
age SAD_sum -0.1519366 0.1651007
age_first_phone SAD_sum -0.2479689 0.0238045
dist_daily SAD_sum 0.3951232 0.0001823
dist_study SAD_sum 0.2038468 0.0613108
pow_not_using SAD_sum -0.2042551 0.0607822
pow_notifications_on SAD_sum 0.1823786 0.0948018
pow_vibrate SAD_sum 0.0093519 0.9323048
pow_study SAD_sum 0.2276299 0.0361568
pow_exam SAD_sum 0.0372984 0.7346848
pow_lec SAD_sum 0.2387576 0.0277661
pow_sleep SAD_sum 0.0914153 0.4053678
com_gen SAD_sum -0.4123106 0.0000882
com_unattended SAD_sum -0.4763175 0.0000041
com_leave_with_other SAD_sum -0.4383786 0.0000271
com_locked SAD_sum 0.3912593 0.0002134
com_room_task SAD_sum -0.4094998 0.0000996
NMPQ_sum SAD_sum 0.8280351 0.0000000
MPIQ_sum SAD_sum 0.7850186 0.0000000
MPIQ_SI_sum SAD_sum 0.7842828 0.0000000
MPIQ_VFO_sum SAD_sum 0.4973019 0.0000013
age SAD_dep_sum -0.1739446 0.1113604
age_first_phone SAD_dep_sum -0.2527871 0.0211298
dist_daily SAD_dep_sum 0.2893480 0.0072341
dist_study SAD_dep_sum 0.1084105 0.3233431
pow_not_using SAD_dep_sum -0.1575724 0.1497965
pow_notifications_on SAD_dep_sum 0.1197778 0.2748846
pow_vibrate SAD_dep_sum -0.0153378 0.8891954
pow_study SAD_dep_sum 0.1002182 0.3614604
pow_exam SAD_dep_sum 0.0204965 0.8522957
pow_lec SAD_dep_sum 0.1122321 0.3064765
pow_sleep SAD_dep_sum -0.0390868 0.7224679
com_gen SAD_dep_sum -0.3928413 0.0002001
com_unattended SAD_dep_sum -0.4291127 0.0000417
com_leave_with_other SAD_dep_sum -0.3906835 0.0002185
com_locked SAD_dep_sum 0.3380312 0.0015560
com_room_task SAD_dep_sum -0.3667488 0.0005558
NMPQ_sum SAD_dep_sum 0.7019522 0.0000000
MPIQ_sum SAD_dep_sum 0.5723242 0.0000000
MPIQ_SI_sum SAD_dep_sum 0.7952802 0.0000000
MPIQ_VFO_sum SAD_dep_sum 0.3249862 0.0024078
SAD_sum SAD_dep_sum 0.8668939 0.0000000
age SAD_ea_sum -0.0811384 0.4603921
age_first_phone SAD_ea_sum -0.1100990 0.3217569
dist_daily SAD_ea_sum 0.2769235 0.0102970
dist_study SAD_ea_sum 0.1625570 0.1371687
pow_not_using SAD_ea_sum -0.2294717 0.0346369
pow_notifications_on SAD_ea_sum 0.1209034 0.2703663
pow_vibrate SAD_ea_sum 0.0720154 0.5124870
pow_study SAD_ea_sum 0.2580895 0.0170889
pow_exam SAD_ea_sum 0.1872320 0.0861905
pow_lec SAD_ea_sum 0.2670491 0.0134863
pow_sleep SAD_ea_sum 0.1818929 0.0956996
com_gen SAD_ea_sum -0.2912369 0.0068469
com_unattended SAD_ea_sum -0.3035854 0.0047360
com_leave_with_other SAD_ea_sum -0.2821408 0.0088947
com_locked SAD_ea_sum 0.2464383 0.0229903
com_room_task SAD_ea_sum -0.3108305 0.0037871
NMPQ_sum SAD_ea_sum 0.6480040 0.0000000
MPIQ_sum SAD_ea_sum 0.7516672 0.0000000
MPIQ_SI_sum SAD_ea_sum 0.5688763 0.0000000
MPIQ_VFO_sum SAD_ea_sum 0.5360060 0.0000001
SAD_sum SAD_ea_sum 0.8167113 0.0000000
SAD_dep_sum SAD_ea_sum 0.5828047 0.0000000
age SAD_access_sum -0.1679059 0.1245330
age_first_phone SAD_access_sum -0.2232043 0.0425282
dist_daily SAD_access_sum 0.3355252 0.0016946
dist_study SAD_access_sum 0.1836976 0.0923972
pow_not_using SAD_access_sum -0.1359732 0.2146716
pow_notifications_on SAD_access_sum 0.1564844 0.1526652
pow_vibrate SAD_access_sum 0.0036849 0.9732994
pow_study SAD_access_sum 0.1098505 0.3169192
pow_exam SAD_access_sum -0.1491598 0.1730528
pow_lec SAD_access_sum 0.1986588 0.0683584
pow_sleep SAD_access_sum 0.0134216 0.9029666
com_gen SAD_access_sum -0.3639620 0.0006168
com_unattended SAD_access_sum -0.4829785 0.0000028
com_leave_with_other SAD_access_sum -0.4141507 0.0000814
com_locked SAD_access_sum 0.3579435 0.0007699
com_room_task SAD_access_sum -0.3813722 0.0003168
NMPQ_sum SAD_access_sum 0.7733328 0.0000000
MPIQ_sum SAD_access_sum 0.6487122 0.0000000
MPIQ_SI_sum SAD_access_sum 0.7101028 0.0000000
MPIQ_VFO_sum SAD_access_sum 0.4040518 0.0001256
SAD_sum SAD_access_sum 0.8714448 0.0000000
SAD_dep_sum SAD_access_sum 0.7329192 0.0000000
SAD_ea_sum SAD_access_sum 0.5469192 0.0000001
age SAD_dist_sum -0.0923190 0.4007216
age_first_phone SAD_dist_sum -0.2157567 0.0501168
dist_daily SAD_dist_sum 0.4881285 0.0000021
dist_study SAD_dist_sum 0.2460064 0.0232389
pow_not_using SAD_dist_sum -0.1761088 0.1069118
pow_notifications_on SAD_dist_sum 0.2686925 0.0129024
pow_vibrate SAD_dist_sum -0.0926380 0.3990887
pow_study SAD_dist_sum 0.3555665 0.0008394
pow_exam SAD_dist_sum 0.0643740 0.5583333
pow_lec SAD_dist_sum 0.2893383 0.0072362
pow_sleep SAD_dist_sum 0.2613257 0.0157020
com_gen SAD_dist_sum -0.2770934 0.0102485
com_unattended SAD_dist_sum -0.2399042 0.0270039
com_leave_with_other SAD_dist_sum -0.3371305 0.0016046
com_locked SAD_dist_sum 0.3096422 0.0039301
com_room_task SAD_dist_sum -0.2084837 0.0555228
NMPQ_sum SAD_dist_sum 0.5319183 0.0000002
MPIQ_sum SAD_dist_sum 0.6513063 0.0000000
MPIQ_SI_sum SAD_dist_sum 0.4270027 0.0000459
MPIQ_VFO_sum SAD_dist_sum 0.3619930 0.0006635
SAD_sum SAD_dist_sum 0.6776887 0.0000000
SAD_dep_sum SAD_dist_sum 0.4161428 0.0000746
SAD_ea_sum SAD_dist_sum 0.4868626 0.0000023
SAD_access_sum SAD_dist_sum 0.5363182 0.0000001
age Score_Double Trouble -0.0922760 0.4009420
age_first_phone Score_Double Trouble -0.1328399 0.2312329
dist_daily Score_Double Trouble -0.1805981 0.0981255
dist_study Score_Double Trouble -0.3370022 0.0016116
pow_not_using Score_Double Trouble 0.1012320 0.3565991
pow_notifications_on Score_Double Trouble -0.1412211 0.1973326
pow_vibrate Score_Double Trouble -0.1044221 0.3415673
pow_study Score_Double Trouble 0.0508224 0.6441387
pow_exam Score_Double Trouble -0.0348713 0.7513698
pow_lec Score_Double Trouble -0.1386326 0.2057549
pow_sleep Score_Double Trouble -0.0188242 0.8642269
com_gen Score_Double Trouble 0.0420373 0.7024650
com_unattended Score_Double Trouble -0.0263850 0.8105644
com_leave_with_other Score_Double Trouble 0.1454999 0.1839591
com_locked Score_Double Trouble -0.1158923 0.2908689
com_room_task Score_Double Trouble 0.0173922 0.8744681
NMPQ_sum Score_Double Trouble -0.1664122 0.1279683
MPIQ_sum Score_Double Trouble -0.1722251 0.1149961
MPIQ_SI_sum Score_Double Trouble -0.0993793 0.3655136
MPIQ_VFO_sum Score_Double Trouble -0.1566996 0.1520946
SAD_sum Score_Double Trouble -0.1213720 0.2685001
SAD_dep_sum Score_Double Trouble -0.0432347 0.6944036
SAD_ea_sum Score_Double Trouble -0.1128297 0.3038915
SAD_access_sum Score_Double Trouble -0.1713893 0.1167961
SAD_dist_sum Score_Double Trouble -0.0914883 0.4049916
age Score_Odd One Out -0.1322100 0.2277516
age_first_phone Score_Odd One Out -0.0756716 0.4965539
dist_daily Score_Odd One Out 0.0433320 0.6937501
dist_study Score_Odd One Out -0.0541711 0.6224368
pow_not_using Score_Odd One Out 0.1924325 0.0776643
pow_notifications_on Score_Odd One Out -0.0079742 0.9422586
pow_vibrate Score_Odd One Out -0.1082315 0.3241476
pow_study Score_Odd One Out -0.0392588 0.7212964
pow_exam Score_Odd One Out -0.1976166 0.0698500
pow_lec Score_Odd One Out -0.0516510 0.6387398
pow_sleep Score_Odd One Out -0.2773423 0.0101777
com_gen Score_Odd One Out 0.0777206 0.4795606
com_unattended Score_Odd One Out -0.0088388 0.9360109
com_leave_with_other Score_Odd One Out 0.0049178 0.9643714
com_locked Score_Odd One Out 0.0073870 0.9465045
com_room_task Score_Odd One Out 0.0959484 0.3823795
NMPQ_sum Score_Odd One Out -0.0450058 0.6825423
MPIQ_sum Score_Odd One Out -0.0215715 0.8446436
MPIQ_SI_sum Score_Odd One Out 0.0746415 0.4971892
MPIQ_VFO_sum Score_Odd One Out -0.1836007 0.0925722
SAD_sum Score_Odd One Out -0.0108055 0.9218132
SAD_dep_sum Score_Odd One Out 0.0431738 0.6948131
SAD_ea_sum Score_Odd One Out -0.0741888 0.4998088
SAD_access_sum Score_Odd One Out -0.0045806 0.9668130
SAD_dist_sum Score_Odd One Out 0.0111206 0.9195408
Score_Double Trouble Score_Odd One Out 0.2006502 0.0655795
age Score_Digit Span 0.0031331 0.9772965
age_first_phone Score_Digit Span -0.2028106 0.0659400
dist_daily Score_Digit Span -0.1627663 0.1366569
dist_study Score_Digit Span -0.1240657 0.2579412
pow_not_using Score_Digit Span 0.0976650 0.3738830
pow_notifications_on Score_Digit Span -0.1173263 0.2848995
pow_vibrate Score_Digit Span 0.0462068 0.6745420
pow_study Score_Digit Span -0.0673987 0.5399540
pow_exam Score_Digit Span 0.0043737 0.9683113
pow_lec Score_Digit Span -0.0406067 0.7121396
pow_sleep Score_Digit Span -0.0947680 0.3882887
com_gen Score_Digit Span -0.2949443 0.0061396
com_unattended Score_Digit Span -0.3116724 0.0036887
com_leave_with_other Score_Digit Span -0.2303008 0.0339704
com_locked Score_Digit Span 0.1078526 0.3258542
com_room_task Score_Digit Span -0.1307486 0.2329780
NMPQ_sum Score_Digit Span 0.0879301 0.4235809
MPIQ_sum Score_Digit Span 0.0018798 0.9863772
MPIQ_SI_sum Score_Digit Span 0.1709726 0.1177017
MPIQ_VFO_sum Score_Digit Span -0.1831470 0.0933951
SAD_sum Score_Digit Span 0.1271575 0.2461749
SAD_dep_sum Score_Digit Span 0.1763252 0.1064747
SAD_ea_sum Score_Digit Span 0.0500467 0.6492093
SAD_access_sum Score_Digit Span 0.1290427 0.2391841
SAD_dist_sum Score_Digit Span -0.0260571 0.8128755
Score_Double Trouble Score_Digit Span 0.3098539 0.0039042
Score_Odd One Out Score_Digit Span 0.0584169 0.5953796
age Score_Feature Match -0.2192488 0.0437952
age_first_phone Score_Feature Match -0.0605652 0.5865054
dist_daily Score_Feature Match -0.1015885 0.3548992
dist_study Score_Feature Match -0.1109339 0.3121406
pow_not_using Score_Feature Match 0.1725091 0.1143894
pow_notifications_on Score_Feature Match 0.0038807 0.9718816
pow_vibrate Score_Feature Match -0.1777425 0.1036462
pow_study Score_Feature Match -0.2292510 0.0348161
pow_exam Score_Feature Match -0.2607592 0.0159375
pow_lec Score_Feature Match -0.2153200 0.0478116
pow_sleep Score_Feature Match -0.1004016 0.3605780
com_gen Score_Feature Match -0.0900657 0.4123655
com_unattended Score_Feature Match 0.0796034 0.4689483
com_leave_with_other Score_Feature Match -0.0521392 0.6355679
com_locked Score_Feature Match -0.0485125 0.6592853
com_room_task Score_Feature Match 0.0502236 0.6480510
NMPQ_sum Score_Feature Match -0.1404219 0.1999061
MPIQ_sum Score_Feature Match -0.1521507 0.1644991
MPIQ_SI_sum Score_Feature Match -0.0472421 0.6676749
MPIQ_VFO_sum Score_Feature Match -0.1419683 0.1949482
SAD_sum Score_Feature Match -0.0960987 0.3816308
SAD_dep_sum Score_Feature Match -0.0245362 0.8236161
SAD_ea_sum Score_Feature Match -0.0812307 0.4598802
SAD_access_sum Score_Feature Match -0.1261616 0.2499239
SAD_dist_sum Score_Feature Match -0.0389149 0.7236390
Score_Double Trouble Score_Feature Match 0.2707290 0.0122095
Score_Odd One Out Score_Feature Match 0.0539522 0.6238460
Score_Digit Span Score_Feature Match 0.0934460 0.3949711
age Score_Polygons 0.0171860 0.8759446
age_first_phone Score_Polygons -0.0725497 0.5145332
dist_daily Score_Polygons 0.0438617 0.6901959
dist_study Score_Polygons 0.0895309 0.4151576
pow_not_using Score_Polygons -0.2333819 0.0315872
pow_notifications_on Score_Polygons 0.1231929 0.2613311
pow_vibrate Score_Polygons 0.0122994 0.9110452
pow_study Score_Polygons 0.0822356 0.4543288
pow_exam Score_Polygons 0.0195266 0.8592118
pow_lec Score_Polygons 0.1677587 0.1248683
pow_sleep Score_Polygons 0.0492738 0.6542771
com_gen Score_Polygons -0.0984776 0.3699015
com_unattended Score_Polygons -0.1002803 0.3611616
com_leave_with_other Score_Polygons -0.0704032 0.5219969
com_locked Score_Polygons 0.1526514 0.1630981
com_room_task Score_Polygons 0.0725897 0.5091212
NMPQ_sum Score_Polygons 0.0203557 0.8532991
MPIQ_sum Score_Polygons 0.1541530 0.1589499
MPIQ_SI_sum Score_Polygons 0.0309449 0.7786025
MPIQ_VFO_sum Score_Polygons 0.0737228 0.5025133
SAD_sum Score_Polygons 0.1070153 0.3296463
SAD_dep_sum Score_Polygons 0.0290416 0.7919017
SAD_ea_sum Score_Polygons 0.1164076 0.2887144
SAD_access_sum Score_Polygons 0.1149488 0.2948410
SAD_dist_sum Score_Polygons 0.1151857 0.2938400
Score_Double Trouble Score_Polygons 0.1821032 0.0953100
Score_Odd One Out Score_Polygons -0.0554430 0.6142765
Score_Digit Span Score_Polygons 0.1419611 0.1949712
Score_Feature Match Score_Polygons 0.1887597 0.0836123
age Score_Paired Associates 0.0109065 0.9210853
age_first_phone Score_Paired Associates 0.0827950 0.4567931
dist_daily Score_Paired Associates 0.0505593 0.6458561
dist_study Score_Paired Associates -0.0399706 0.7164558
pow_not_using Score_Paired Associates 0.2348050 0.0305350
pow_notifications_on Score_Paired Associates -0.0399079 0.7168816
pow_vibrate Score_Paired Associates -0.1174219 0.2845046
pow_study Score_Paired Associates -0.1038055 0.3444412
pow_exam Score_Paired Associates -0.1750656 0.1090386
pow_lec Score_Paired Associates -0.0217584 0.8433146
pow_sleep Score_Paired Associates -0.0276751 0.8014879
com_gen Score_Paired Associates 0.2201710 0.0428941
com_unattended Score_Paired Associates 0.2269154 0.0367612
com_leave_with_other Score_Paired Associates 0.2587130 0.0168138
com_locked Score_Paired Associates 0.0347472 0.7522263
com_room_task Score_Paired Associates 0.1159418 0.2906612
NMPQ_sum Score_Paired Associates -0.1411800 0.1974645
MPIQ_sum Score_Paired Associates -0.1129518 0.3033652
MPIQ_SI_sum Score_Paired Associates -0.1608194 0.1414759
MPIQ_VFO_sum Score_Paired Associates -0.0718446 0.5134905
SAD_sum Score_Paired Associates -0.1343357 0.2202964
SAD_dep_sum Score_Paired Associates -0.0913541 0.4056839
SAD_ea_sum Score_Paired Associates -0.1436590 0.1896296
SAD_access_sum Score_Paired Associates -0.0788773 0.4730256
SAD_dist_sum Score_Paired Associates -0.1729260 0.1135031
Score_Double Trouble Score_Paired Associates 0.0787849 0.4735463
Score_Odd One Out Score_Paired Associates -0.0006640 0.9951878
Score_Digit Span Score_Paired Associates 0.0186177 0.8657022
Score_Feature Match Score_Paired Associates 0.0850075 0.4392099
Score_Polygons Score_Paired Associates -0.0155439 0.8877164
age Score_Token Search 0.0047444 0.9656265
age_first_phone Score_Token Search -0.1352168 0.2229170
dist_daily Score_Token Search -0.0710519 0.5181602
dist_study Score_Token Search 0.0153040 0.8894384
pow_not_using Score_Token Search 0.1903655 0.0809687
pow_notifications_on Score_Token Search 0.0624516 0.5701676
pow_vibrate Score_Token Search -0.1052064 0.3379336
pow_study Score_Token Search 0.0170689 0.8767829
pow_exam Score_Token Search 0.0122698 0.9112584
pow_lec Score_Token Search -0.0926120 0.3992216
pow_sleep Score_Token Search -0.1330508 0.2247819
com_gen Score_Token Search 0.1205751 0.2716789
com_unattended Score_Token Search 0.0524305 0.6336782
com_leave_with_other Score_Token Search 0.1676537 0.1251080
com_locked Score_Token Search 0.0345231 0.7537729
com_room_task Score_Token Search 0.0252848 0.8183255
NMPQ_sum Score_Token Search -0.0872895 0.4269792
MPIQ_sum Score_Token Search -0.0006699 0.9951450
MPIQ_SI_sum Score_Token Search -0.0334664 0.7610808
MPIQ_VFO_sum Score_Token Search -0.1650087 0.1312615
SAD_sum Score_Token Search -0.0636861 0.5625544
SAD_dep_sum Score_Token Search -0.1126305 0.3047514
SAD_ea_sum Score_Token Search -0.0084368 0.9389157
SAD_access_sum Score_Token Search -0.1229867 0.2621363
SAD_dist_sum Score_Token Search 0.0472677 0.6675050
Score_Double Trouble Score_Token Search 0.3196148 0.0028665
Score_Odd One Out Score_Token Search 0.3175388 0.0030638
Score_Digit Span Score_Token Search 0.2822270 0.0088731
Score_Feature Match Score_Token Search 0.0208478 0.8497938
Score_Polygons Score_Token Search 0.1520930 0.1646609
Score_Paired Associates Score_Token Search 0.2442006 0.0243034
age Score_Spatial Planning -0.0734577 0.5040552
age_first_phone Score_Spatial Planning -0.0542197 0.6263774
dist_daily Score_Spatial Planning -0.0178794 0.8709814
dist_study Score_Spatial Planning 0.1380883 0.2075580
pow_not_using Score_Spatial Planning -0.0409672 0.7096973
pow_notifications_on Score_Spatial Planning 0.0658377 0.5494021
pow_vibrate Score_Spatial Planning -0.0115188 0.9166699
pow_study Score_Spatial Planning 0.0544854 0.6204160
pow_exam Score_Spatial Planning 0.0454497 0.6795814
pow_lec Score_Spatial Planning 0.0047965 0.9652494
pow_sleep Score_Spatial Planning -0.0004451 0.9967746
com_gen Score_Spatial Planning 0.0192471 0.8612065
com_unattended Score_Spatial Planning -0.0587790 0.5930962
com_leave_with_other Score_Spatial Planning 0.0154825 0.8881571
com_locked Score_Spatial Planning 0.0766939 0.4854009
com_room_task Score_Spatial Planning 0.0796945 0.4684382
NMPQ_sum Score_Spatial Planning -0.0201125 0.8550329
MPIQ_sum Score_Spatial Planning 0.0838834 0.4453071
MPIQ_SI_sum Score_Spatial Planning 0.0509330 0.6434166
MPIQ_VFO_sum Score_Spatial Planning -0.0238992 0.8281240
SAD_sum Score_Spatial Planning 0.0350243 0.7503146
SAD_dep_sum Score_Spatial Planning 0.0294829 0.7888131
SAD_ea_sum Score_Spatial Planning 0.1028370 0.3489859
SAD_access_sum Score_Spatial Planning -0.0450340 0.6823541
SAD_dist_sum Score_Spatial Planning -0.0219358 0.8420536
Score_Double Trouble Score_Spatial Planning 0.2246122 0.0387674
Score_Odd One Out Score_Spatial Planning 0.3126620 0.0035759
Score_Digit Span Score_Spatial Planning 0.1119547 0.3076809
Score_Feature Match Score_Spatial Planning 0.0278466 0.8002833
Score_Polygons Score_Spatial Planning 0.2444115 0.0241770
Score_Paired Associates Score_Spatial Planning 0.0971386 0.3764763
Score_Token Search Score_Spatial Planning 0.3050348 0.0045308
age Score_Rotations -0.1908951 0.0801116
age_first_phone Score_Rotations -0.2879511 0.0082971
dist_daily Score_Rotations 0.0973779 0.3752962
dist_study Score_Rotations -0.0774961 0.4808343
pow_not_using Score_Rotations 0.0004936 0.9964224
pow_notifications_on Score_Rotations 0.1287955 0.2400931
pow_vibrate Score_Rotations -0.0353580 0.7480146
pow_study Score_Rotations 0.1117905 0.3083955
pow_exam Score_Rotations -0.0246386 0.8228919
pow_lec Score_Rotations -0.0285622 0.7952615
pow_sleep Score_Rotations 0.0750821 0.4946460
com_gen Score_Rotations 0.0726679 0.5086637
com_unattended Score_Rotations 0.1273608 0.2454142
com_leave_with_other Score_Rotations 0.0706517 0.5205257
com_locked Score_Rotations -0.0793969 0.4701061
com_room_task Score_Rotations 0.1020523 0.3526951
NMPQ_sum Score_Rotations -0.0467337 0.6710439
MPIQ_sum Score_Rotations 0.0064678 0.9531526
MPIQ_SI_sum Score_Rotations -0.0759959 0.4893930
MPIQ_VFO_sum Score_Rotations -0.0768168 0.4846998
SAD_sum Score_Rotations -0.0797517 0.4681183
SAD_dep_sum Score_Rotations -0.1598709 0.1438697
SAD_ea_sum Score_Rotations -0.0370539 0.7363597
SAD_access_sum Score_Rotations -0.0183670 0.8674941
SAD_dist_sum Score_Rotations 0.0193510 0.8604651
Score_Double Trouble Score_Rotations 0.2598914 0.0163042
Score_Odd One Out Score_Rotations -0.1522205 0.1643033
Score_Digit Span Score_Rotations 0.0131772 0.9047251
Score_Feature Match Score_Rotations 0.1588800 0.1464027
Score_Polygons Score_Rotations 0.3330829 0.0018403
Score_Paired Associates Score_Rotations -0.0169011 0.8779846
Score_Token Search Score_Rotations 0.0739734 0.5010582
Score_Spatial Planning Score_Rotations 0.1795597 0.1001058
age Score_Spatial Span -0.1090778 0.3203561
age_first_phone Score_Spatial Span -0.1966877 0.0747187
dist_daily Score_Spatial Span -0.0726784 0.5086021
dist_study Score_Spatial Span -0.0247408 0.8221690
pow_not_using Score_Spatial Span 0.1228637 0.2626175
pow_notifications_on Score_Spatial Span 0.2000516 0.0664050
pow_vibrate Score_Spatial Span -0.0300637 0.7847521
pow_study Score_Spatial Span 0.0322982 0.7691843
pow_exam Score_Spatial Span 0.0110354 0.9201557
pow_lec Score_Spatial Span 0.0174024 0.8743952
pow_sleep Score_Spatial Span 0.0124327 0.9100854
com_gen Score_Spatial Span -0.1585435 0.1472704
com_unattended Score_Spatial Span -0.0827264 0.4516310
com_leave_with_other Score_Spatial Span -0.0508825 0.6437459
com_locked Score_Spatial Span -0.0408948 0.7101872
com_room_task Score_Spatial Span 0.0508455 0.6439875
NMPQ_sum Score_Spatial Span -0.0839893 0.4447305
MPIQ_sum Score_Spatial Span 0.0000626 0.9995463
MPIQ_SI_sum Score_Spatial Span -0.0156612 0.8868748
MPIQ_VFO_sum Score_Spatial Span -0.1063285 0.3327775
SAD_sum Score_Spatial Span -0.0155505 0.8876693
SAD_dep_sum Score_Spatial Span -0.0697958 0.5256027
SAD_ea_sum Score_Spatial Span 0.0678619 0.5371658
SAD_access_sum Score_Spatial Span -0.0773798 0.4814948
SAD_dist_sum Score_Spatial Span 0.0338258 0.7585933
Score_Double Trouble Score_Spatial Span 0.2874585 0.0076407
Score_Odd One Out Score_Spatial Span 0.0525914 0.6326355
Score_Digit Span Score_Spatial Span 0.1281635 0.2424269
Score_Feature Match Score_Spatial Span 0.3641529 0.0006124
Score_Polygons Score_Spatial Span 0.2883646 0.0074433
Score_Paired Associates Score_Spatial Span 0.0889290 0.4183132
Score_Token Search Score_Spatial Span 0.3105335 0.0038224
Score_Spatial Planning Score_Spatial Span 0.3528778 0.0009248
Score_Rotations Score_Spatial Span 0.2460535 0.0232118
age Score_Grammatical Reasoning -0.0296481 0.7876573
age_first_phone Score_Grammatical Reasoning -0.0562230 0.6136661
dist_daily Score_Grammatical Reasoning 0.0314033 0.7754087
dist_study Score_Grammatical Reasoning -0.0625771 0.5693913
pow_not_using Score_Grammatical Reasoning -0.1992331 0.0675473
pow_notifications_on Score_Grammatical Reasoning 0.0789570 0.4725776
pow_vibrate Score_Grammatical Reasoning -0.0336342 0.7599192
pow_study Score_Grammatical Reasoning 0.1709789 0.1176880
pow_exam Score_Grammatical Reasoning -0.1070243 0.3296051
pow_lec Score_Grammatical Reasoning 0.1134831 0.3010817
pow_sleep Score_Grammatical Reasoning 0.1603099 0.1427578
com_gen Score_Grammatical Reasoning -0.0336714 0.7596612
com_unattended Score_Grammatical Reasoning -0.1841511 0.0915817
com_leave_with_other Score_Grammatical Reasoning 0.0184607 0.8668242
com_locked Score_Grammatical Reasoning 0.0222038 0.8401488
com_room_task Score_Grammatical Reasoning 0.0137335 0.9007234
NMPQ_sum Score_Grammatical Reasoning -0.0248070 0.8217014
MPIQ_sum Score_Grammatical Reasoning -0.0509312 0.6434282
MPIQ_SI_sum Score_Grammatical Reasoning -0.0065988 0.9522054
MPIQ_VFO_sum Score_Grammatical Reasoning -0.0415992 0.7054227
SAD_sum Score_Grammatical Reasoning 0.0337903 0.7588387
SAD_dep_sum Score_Grammatical Reasoning 0.0084758 0.9386335
SAD_ea_sum Score_Grammatical Reasoning 0.0278091 0.8005462
SAD_access_sum Score_Grammatical Reasoning 0.0600574 0.5850684
SAD_dist_sum Score_Grammatical Reasoning -0.0297749 0.7867706
Score_Double Trouble Score_Grammatical Reasoning 0.3609427 0.0006898
Score_Odd One Out Score_Grammatical Reasoning 0.1003182 0.3609792
Score_Digit Span Score_Grammatical Reasoning 0.0917743 0.4035184
Score_Feature Match Score_Grammatical Reasoning 0.0936642 0.3938633
Score_Polygons Score_Grammatical Reasoning 0.2871763 0.0077031
Score_Paired Associates Score_Grammatical Reasoning 0.1347813 0.2187554
Score_Token Search Score_Grammatical Reasoning 0.0481616 0.6615985
Score_Spatial Planning Score_Grammatical Reasoning 0.2411702 0.0261829
Score_Rotations Score_Grammatical Reasoning 0.1160913 0.2900353
Score_Spatial Span Score_Grammatical Reasoning 0.2198759 0.0431807
age Score_Monkey Ladder -0.0743040 0.4991413
age_first_phone Score_Monkey Ladder -0.1259538 0.2565361
dist_daily Score_Monkey Ladder -0.1768196 0.1054812
dist_study Score_Monkey Ladder -0.0721699 0.5115806
pow_not_using Score_Monkey Ladder 0.1624184 0.1375087
pow_notifications_on Score_Monkey Ladder 0.0828399 0.4510083
pow_vibrate Score_Monkey Ladder -0.2626880 0.0151479
pow_study Score_Monkey Ladder -0.0933980 0.3952150
pow_exam Score_Monkey Ladder -0.0699035 0.5249626
pow_lec Score_Monkey Ladder -0.0508305 0.6440858
pow_sleep Score_Monkey Ladder 0.0046105 0.9665960
com_gen Score_Monkey Ladder -0.1264289 0.2489136
com_unattended Score_Monkey Ladder -0.0898938 0.4132619
com_leave_with_other Score_Monkey Ladder -0.0469183 0.6698194
com_locked Score_Monkey Ladder -0.1207469 0.2709915
com_room_task Score_Monkey Ladder 0.0218602 0.8425905
NMPQ_sum Score_Monkey Ladder -0.1617361 0.1391910
MPIQ_sum Score_Monkey Ladder -0.2364158 0.0293797
MPIQ_SI_sum Score_Monkey Ladder -0.0682936 0.5345740
MPIQ_VFO_sum Score_Monkey Ladder -0.2050860 0.0597179
SAD_sum Score_Monkey Ladder -0.1842356 0.0914304
SAD_dep_sum Score_Monkey Ladder -0.1617802 0.1390818
SAD_ea_sum Score_Monkey Ladder -0.1877935 0.0852356
SAD_access_sum Score_Monkey Ladder -0.1435094 0.1900960
SAD_dist_sum Score_Monkey Ladder -0.1049015 0.3393432
Score_Double Trouble Score_Monkey Ladder 0.2866616 0.0078181
Score_Odd One Out Score_Monkey Ladder 0.0924643 0.3999772
Score_Digit Span Score_Monkey Ladder 0.1554554 0.1554158
Score_Feature Match Score_Monkey Ladder 0.2247860 0.0386129
Score_Polygons Score_Monkey Ladder 0.1439438 0.1887443
Score_Paired Associates Score_Monkey Ladder 0.1220583 0.2657827
Score_Token Search Score_Monkey Ladder 0.1868338 0.0868729
Score_Spatial Planning Score_Monkey Ladder 0.3224827 0.0026127
Score_Rotations Score_Monkey Ladder 0.2194977 0.0435504
Score_Spatial Span Score_Monkey Ladder 0.5135592 0.0000005
Score_Grammatical Reasoning Score_Monkey Ladder 0.2967946 0.0058114
age CBS_overall -0.1509540 0.1678832
age_first_phone CBS_overall -0.2220579 0.0436300
dist_daily CBS_overall -0.0897713 0.4139014
dist_study CBS_overall -0.1138314 0.2995907
pow_not_using CBS_overall 0.1412892 0.1971146
pow_notifications_on CBS_overall 0.0741338 0.5001277
pow_vibrate CBS_overall -0.1603322 0.1427017
pow_study CBS_overall -0.0066452 0.9518695
pow_exam CBS_overall -0.1339510 0.2216326
pow_lec CBS_overall -0.0611204 0.5784305
pow_sleep CBS_overall -0.0623951 0.5705173
com_gen CBS_overall -0.0415089 0.7060330
com_unattended CBS_overall -0.0595422 0.5882977
com_leave_with_other CBS_overall 0.0406137 0.7120918
com_locked CBS_overall 0.0028095 0.9796413
com_room_task CBS_overall 0.0872920 0.4269659
NMPQ_sum CBS_overall -0.1400686 0.2010516
MPIQ_sum CBS_overall -0.0879116 0.4236790
MPIQ_SI_sum CBS_overall -0.0328833 0.7651225
MPIQ_VFO_sum CBS_overall -0.2188717 0.0441681
SAD_sum CBS_overall -0.0715270 0.5153586
SAD_dep_sum CBS_overall -0.0663199 0.5464751
SAD_ea_sum CBS_overall -0.0502697 0.6477496
SAD_access_sum CBS_overall -0.0860147 0.4337876
SAD_dist_sum CBS_overall -0.0436731 0.6914607
Score_Double Trouble CBS_overall 0.6407705 0.0000000
Score_Odd One Out CBS_overall 0.3346608 0.0017449
Score_Digit Span CBS_overall 0.4034253 0.0001290
Score_Feature Match CBS_overall 0.4481073 0.0000170
Score_Polygons CBS_overall 0.4861933 0.0000024
Score_Paired Associates CBS_overall 0.3116717 0.0036887
Score_Token Search CBS_overall 0.5560776 0.0000000
Score_Spatial Planning CBS_overall 0.5687960 0.0000000
Score_Rotations CBS_overall 0.4078294 0.0001070
Score_Spatial Span CBS_overall 0.6556140 0.0000000
Score_Grammatical Reasoning CBS_overall 0.4980097 0.0000012
Score_Monkey Ladder CBS_overall 0.6034213 0.0000000
age CBS_STM -0.0634828 0.5638050
age_first_phone CBS_STM -0.1442488 0.1932395
dist_daily CBS_STM -0.1031753 0.3473939
dist_study CBS_STM -0.0454261 0.6797385
pow_not_using CBS_STM 0.2692931 0.0126946
pow_notifications_on CBS_STM 0.1167103 0.2874536
pow_vibrate CBS_STM -0.1950190 0.0736825
pow_study CBS_STM -0.0547724 0.6185733
pow_exam CBS_STM -0.0823096 0.4539219
pow_lec CBS_STM -0.0567912 0.6056774
pow_sleep CBS_STM -0.0557871 0.6120767
com_gen CBS_STM 0.0210089 0.8486467
com_unattended CBS_STM 0.0394272 0.7201503
com_leave_with_other CBS_STM 0.1245070 0.2562389
com_locked CBS_STM -0.0346206 0.7531002
com_room_task CBS_STM 0.0804293 0.4643342
NMPQ_sum CBS_STM -0.1792778 0.1006487
MPIQ_sum CBS_STM -0.1311972 0.2313650
MPIQ_SI_sum CBS_STM -0.1044142 0.3416042
MPIQ_VFO_sum CBS_STM -0.2087144 0.0552470
SAD_sum CBS_STM -0.1500192 0.1705625
SAD_dep_sum CBS_STM -0.1653178 0.1305308
SAD_ea_sum CBS_STM -0.1015812 0.3549340
SAD_access_sum CBS_STM -0.1607299 0.1417003
SAD_dist_sum CBS_STM -0.0723775 0.5103636
Score_Double Trouble CBS_STM 0.3711490 0.0004706
Score_Odd One Out CBS_STM 0.1785775 0.1020074
Score_Digit Span CBS_STM 0.2243449 0.0390060
Score_Feature Match CBS_STM 0.2625537 0.0152018
Score_Polygons CBS_STM 0.2172978 0.0457533
Score_Paired Associates CBS_STM 0.5461813 0.0000001
Score_Token Search CBS_STM 0.6694604 0.0000000
Score_Spatial Planning CBS_STM 0.4105837 0.0000950
Score_Rotations CBS_STM 0.1986787 0.0683301
Score_Spatial Span CBS_STM 0.7272454 0.0000000
Score_Grammatical Reasoning CBS_STM 0.2640598 0.0146071
Score_Monkey Ladder CBS_STM 0.6898273 0.0000000
CBS_overall CBS_STM 0.8089612 0.0000000
age CBS_reason -0.2209306 0.0421635
age_first_phone CBS_reason -0.1991721 0.0710499
dist_daily CBS_reason 0.0206885 0.8509278
dist_study CBS_reason -0.0108480 0.9215070
pow_not_using CBS_reason 0.0387177 0.7249838
pow_notifications_on CBS_reason 0.1120032 0.3074704
pow_vibrate CBS_reason -0.1210934 0.2696088
pow_study CBS_reason -0.0154909 0.8880969
pow_exam CBS_reason -0.1602473 0.1429159
pow_lec CBS_reason -0.0503813 0.6470198
pow_sleep CBS_reason -0.0959607 0.3823179
com_gen CBS_reason -0.0102963 0.9254868
com_unattended CBS_reason 0.0165764 0.8803113
com_leave_with_other CBS_reason -0.0138118 0.9001598
com_locked CBS_reason 0.0373923 0.7340414
com_room_task CBS_reason 0.1448223 0.1860317
NMPQ_sum CBS_reason -0.0874630 0.4260574
MPIQ_sum CBS_reason 0.0198953 0.8565815
MPIQ_SI_sum CBS_reason 0.0104255 0.9245550
MPIQ_VFO_sum CBS_reason -0.1312221 0.2312757
SAD_sum CBS_reason -0.0189063 0.8636401
SAD_dep_sum CBS_reason -0.0301149 0.7843944
SAD_ea_sum CBS_reason 0.0056155 0.9593206
SAD_access_sum CBS_reason -0.0310185 0.7780892
SAD_dist_sum CBS_reason 0.0302710 0.7833044
Score_Double Trouble CBS_reason 0.4151178 0.0000780
Score_Odd One Out CBS_reason 0.4188251 0.0000663
Score_Digit Span CBS_reason 0.1527056 0.1629469
Score_Feature Match CBS_reason 0.5458368 0.0000001
Score_Polygons CBS_reason 0.6209102 0.0000000
Score_Paired Associates CBS_reason 0.0545530 0.6199819
Score_Token Search CBS_reason 0.3103932 0.0038392
Score_Spatial Planning CBS_reason 0.6205325 0.0000000
Score_Rotations CBS_reason 0.5459594 0.0000001
Score_Spatial Span CBS_reason 0.4753352 0.0000043
Score_Grammatical Reasoning CBS_reason 0.3019964 0.0049704
Score_Monkey Ladder CBS_reason 0.3628148 0.0006436
CBS_overall CBS_reason 0.8149385 0.0000000
CBS_STM CBS_reason 0.4585399 0.0000102
age CBS_verbal -0.0570554 0.6039984
age_first_phone CBS_verbal -0.1838251 0.0962051
dist_daily CBS_verbal -0.1487093 0.1743693
dist_study CBS_verbal -0.2500367 0.0210058
pow_not_using CBS_verbal 0.0030453 0.9779332
pow_notifications_on CBS_verbal -0.0867426 0.4298924
pow_vibrate CBS_verbal -0.0448898 0.6833165
pow_study CBS_verbal 0.0719873 0.5126522
pow_exam CBS_verbal -0.0640236 0.5604815
pow_lec CBS_verbal -0.0341991 0.7560116
pow_sleep CBS_verbal 0.0205523 0.8518982
com_gen CBS_verbal -0.1312759 0.2310826
com_unattended CBS_verbal -0.2413048 0.0260969
com_leave_with_other CBS_verbal -0.0271467 0.8052021
com_locked CBS_verbal 0.0036180 0.9737844
com_room_task CBS_verbal -0.0456581 0.6781929
NMPQ_sum CBS_verbal -0.0517310 0.6382195
MPIQ_sum CBS_verbal -0.1063031 0.3328937
MPIQ_SI_sum CBS_verbal 0.0276158 0.8019047
MPIQ_VFO_sum CBS_verbal -0.1799700 0.0993196
SAD_sum CBS_verbal 0.0151847 0.8902952
SAD_dep_sum CBS_verbal 0.0643258 0.5586288
SAD_ea_sum CBS_verbal -0.0190338 0.8627297
SAD_access_sum CBS_verbal 0.0037577 0.9727727
SAD_dist_sum CBS_verbal -0.0702192 0.5230882
Score_Double Trouble CBS_verbal 0.7953664 0.0000000
Score_Odd One Out CBS_verbal 0.1706457 0.1184159
Score_Digit Span CBS_verbal 0.6549858 0.0000000
Score_Feature Match CBS_verbal 0.2178877 0.0451538
Score_Polygons CBS_verbal 0.2859049 0.0079899
Score_Paired Associates CBS_verbal 0.1087472 0.3218338
Score_Token Search CBS_verbal 0.3080519 0.0041289
Score_Spatial Planning CBS_verbal 0.2716320 0.0119128
Score_Rotations CBS_verbal 0.1858040 0.0886571
Score_Spatial Span CBS_verbal 0.2999442 0.0052883
Score_Grammatical Reasoning CBS_verbal 0.6765998 0.0000000
Score_Monkey Ladder CBS_verbal 0.3474374 0.0011224
CBS_overall CBS_verbal 0.7266256 0.0000000
CBS_STM CBS_verbal 0.4053801 0.0001187
CBS_reason CBS_verbal 0.4110688 0.0000931
age CBS_ts_memory -0.0634828 0.5638050
age_first_phone CBS_ts_memory -0.1442488 0.1932395
dist_daily CBS_ts_memory -0.1031753 0.3473939
dist_study CBS_ts_memory -0.0454261 0.6797385
pow_not_using CBS_ts_memory 0.2692931 0.0126946
pow_notifications_on CBS_ts_memory 0.1167103 0.2874536
pow_vibrate CBS_ts_memory -0.1950190 0.0736825
pow_study CBS_ts_memory -0.0547724 0.6185733
pow_exam CBS_ts_memory -0.0823096 0.4539219
pow_lec CBS_ts_memory -0.0567912 0.6056774
pow_sleep CBS_ts_memory -0.0557871 0.6120767
com_gen CBS_ts_memory 0.0210089 0.8486467
com_unattended CBS_ts_memory 0.0394272 0.7201503
com_leave_with_other CBS_ts_memory 0.1245070 0.2562389
com_locked CBS_ts_memory -0.0346206 0.7531002
com_room_task CBS_ts_memory 0.0804293 0.4643342
NMPQ_sum CBS_ts_memory -0.1792778 0.1006487
MPIQ_sum CBS_ts_memory -0.1311972 0.2313650
MPIQ_SI_sum CBS_ts_memory -0.1044142 0.3416042
MPIQ_VFO_sum CBS_ts_memory -0.2087144 0.0552470
SAD_sum CBS_ts_memory -0.1500192 0.1705625
SAD_dep_sum CBS_ts_memory -0.1653178 0.1305308
SAD_ea_sum CBS_ts_memory -0.1015812 0.3549340
SAD_access_sum CBS_ts_memory -0.1607299 0.1417003
SAD_dist_sum CBS_ts_memory -0.0723775 0.5103636
Score_Double Trouble CBS_ts_memory 0.3711490 0.0004706
Score_Odd One Out CBS_ts_memory 0.1785775 0.1020074
Score_Digit Span CBS_ts_memory 0.2243449 0.0390060
Score_Feature Match CBS_ts_memory 0.2625537 0.0152018
Score_Polygons CBS_ts_memory 0.2172978 0.0457533
Score_Paired Associates CBS_ts_memory 0.5461813 0.0000001
Score_Token Search CBS_ts_memory 0.6694604 0.0000000
Score_Spatial Planning CBS_ts_memory 0.4105837 0.0000950
Score_Rotations CBS_ts_memory 0.1986787 0.0683301
Score_Spatial Span CBS_ts_memory 0.7272454 0.0000000
Score_Grammatical Reasoning CBS_ts_memory 0.2640598 0.0146071
Score_Monkey Ladder CBS_ts_memory 0.6898273 0.0000000
CBS_overall CBS_ts_memory 0.8089612 0.0000000
CBS_STM CBS_ts_memory 1.0000000 0.0000000
CBS_reason CBS_ts_memory 0.4585399 0.0000102
CBS_verbal CBS_ts_memory 0.4053801 0.0001187
age CBS_ts_reason -0.1586567 0.1469783
age_first_phone CBS_ts_reason -0.2056210 0.0622000
dist_daily CBS_ts_reason 0.0709085 0.5190071
dist_study CBS_ts_reason 0.0381859 0.7286134
pow_not_using CBS_ts_reason -0.0337397 0.7591887
pow_notifications_on CBS_ts_reason 0.1296683 0.2368950
pow_vibrate CBS_ts_reason -0.0605363 0.5820735
pow_study CBS_ts_reason 0.0870431 0.4282905
pow_exam CBS_ts_reason -0.0683846 0.5340285
pow_lec CBS_ts_reason 0.0397007 0.7182901
pow_sleep CBS_ts_reason -0.0665386 0.5451499
com_gen CBS_ts_reason 0.0292551 0.7904073
com_unattended CBS_ts_reason -0.0170826 0.8766850
com_leave_with_other CBS_ts_reason 0.0077214 0.9440866
com_locked CBS_ts_reason 0.0661511 0.5474986
com_room_task CBS_ts_reason 0.1469148 0.1796850
NMPQ_sum CBS_ts_reason -0.0381966 0.7285407
MPIQ_sum CBS_ts_reason 0.0931850 0.3962987
MPIQ_SI_sum CBS_ts_reason 0.0339191 0.7579472
MPIQ_VFO_sum CBS_ts_reason -0.0888435 0.4187629
SAD_sum CBS_ts_reason 0.0219193 0.8421710
SAD_dep_sum CBS_ts_reason -0.0240818 0.8268314
SAD_ea_sum CBS_ts_reason 0.0438744 0.6901105
SAD_access_sum CBS_ts_reason 0.0215026 0.8451331
SAD_dist_sum CBS_ts_reason 0.0533882 0.6274824
Score_Double Trouble CBS_ts_reason 0.3629305 0.0006409
Score_Odd One Out CBS_ts_reason 0.4667795 0.0000067
Score_Digit Span CBS_ts_reason 0.1363283 0.2134655
Score_Feature Match CBS_ts_reason 0.1816185 0.0962097
Score_Polygons CBS_ts_reason 0.6420762 0.0000000
Score_Paired Associates CBS_ts_reason 0.0250072 0.8202866
Score_Token Search CBS_ts_reason 0.3547158 0.0008656
Score_Spatial Planning CBS_ts_reason 0.7154902 0.0000000
Score_Rotations CBS_ts_reason 0.5678266 0.0000000
Score_Spatial Span CBS_ts_reason 0.3907226 0.0002181
Score_Grammatical Reasoning CBS_ts_reason 0.3114392 0.0037157
Score_Monkey Ladder CBS_ts_reason 0.3226337 0.0025999
CBS_overall CBS_ts_reason 0.7507548 0.0000000
CBS_STM CBS_ts_reason 0.4176440 0.0000698
CBS_reason CBS_ts_reason 0.9230907 0.0000000
CBS_verbal CBS_ts_reason 0.3824320 0.0003039
CBS_ts_memory CBS_ts_reason 0.4176440 0.0000698
age CBS_ts_verbalab -0.0178573 0.8711396
age_first_phone CBS_ts_verbalab -0.1760609 0.1113556
dist_daily CBS_ts_verbalab -0.0894081 0.4158005
dist_study CBS_ts_verbalab -0.1264687 0.2487637
pow_not_using CBS_ts_verbalab -0.0679533 0.5366166
pow_notifications_on CBS_ts_verbalab -0.0264820 0.8098813
pow_vibrate CBS_ts_verbalab 0.0087183 0.9368814
pow_study CBS_ts_verbalab 0.0694689 0.5275489
pow_exam CBS_ts_verbalab -0.0691738 0.5293080
pow_lec CBS_ts_verbalab 0.0489124 0.6566525
pow_sleep CBS_ts_verbalab 0.0436833 0.6913919
com_gen CBS_ts_verbalab -0.2230716 0.0401597
com_unattended CBS_ts_verbalab -0.3358744 0.0016746
com_leave_with_other CBS_ts_verbalab -0.1440130 0.1885295
com_locked CBS_ts_verbalab 0.0882385 0.4219508
com_room_task CBS_ts_verbalab -0.0795678 0.4691481
NMPQ_sum CBS_ts_verbalab 0.0430139 0.6958874
MPIQ_sum CBS_ts_verbalab -0.0330557 0.7639268
MPIQ_SI_sum CBS_ts_verbalab 0.1117039 0.3087731
MPIQ_VFO_sum CBS_ts_verbalab -0.1524649 0.1636187
SAD_sum CBS_ts_verbalab 0.1091639 0.3199720
SAD_dep_sum CBS_ts_verbalab 0.1255020 0.2524284
SAD_ea_sum CBS_ts_verbalab 0.0527459 0.6316350
SAD_access_sum CBS_ts_verbalab 0.1281513 0.2424724
SAD_dist_sum CBS_ts_verbalab -0.0377735 0.7314327
Score_Double Trouble CBS_ts_verbalab 0.4538142 0.0000129
Score_Odd One Out CBS_ts_verbalab 0.1073107 0.3283053
Score_Digit Span CBS_ts_verbalab 0.7412260 0.0000000
Score_Feature Match CBS_ts_verbalab 0.1266227 0.2481833
Score_Polygons CBS_ts_verbalab 0.2900284 0.0070924
Score_Paired Associates CBS_ts_verbalab 0.1035043 0.3458506
Score_Token Search CBS_ts_verbalab 0.2241997 0.0391362
Score_Spatial Planning CBS_ts_verbalab 0.2386306 0.0278517
Score_Rotations CBS_ts_verbalab 0.0872093 0.4274056
Score_Spatial Span CBS_ts_verbalab 0.2352878 0.0301848
Score_Grammatical Reasoning CBS_ts_verbalab 0.7364482 0.0000000
Score_Monkey Ladder CBS_ts_verbalab 0.3056796 0.0044421
CBS_overall CBS_ts_verbalab 0.6097799 0.0000000
CBS_STM CBS_ts_verbalab 0.3304140 0.0020124
CBS_reason CBS_ts_verbalab 0.3073181 0.0042236
CBS_verbal CBS_ts_verbalab 0.9010679 0.0000000
CBS_ts_memory CBS_ts_verbalab 0.3304140 0.0020124
CBS_ts_reason CBS_ts_verbalab 0.3025574 0.0048865
age CBS_ts_con -0.1973869 0.0701823
age_first_phone CBS_ts_con -0.1199622 0.2800353
dist_daily CBS_ts_con -0.1757253 0.1076898
dist_study CBS_ts_con -0.2773481 0.0101761
pow_not_using CBS_ts_con 0.1728085 0.1137525
pow_notifications_on CBS_ts_con -0.0838368 0.4455606
pow_vibrate CBS_ts_con -0.1781237 0.1028954
pow_study CBS_ts_con -0.1163387 0.2890019
pow_exam CBS_ts_con -0.1889851 0.0832372
pow_lec CBS_ts_con -0.2231997 0.0400424
pow_sleep CBS_ts_con -0.0760656 0.4889938
com_gen CBS_ts_con -0.0322135 0.7697726
com_unattended CBS_ts_con 0.0350549 0.7501035
com_leave_with_other CBS_ts_con 0.0554224 0.6144079
com_locked CBS_ts_con -0.1020412 0.3527477
com_room_task CBS_ts_con 0.0429259 0.6964792
NMPQ_sum CBS_ts_con -0.1920228 0.0783106
MPIQ_sum CBS_ts_con -0.2031180 0.0622636
MPIQ_SI_sum CBS_ts_con -0.0911296 0.4068434
MPIQ_VFO_sum CBS_ts_con -0.1870796 0.0864512
SAD_sum CBS_ts_con -0.1359890 0.2146180
SAD_dep_sum CBS_ts_con -0.0422071 0.7013194
SAD_ea_sum CBS_ts_con -0.1212068 0.2691573
SAD_access_sum CBS_ts_con -0.1858961 0.0884964
SAD_dist_sum CBS_ts_con -0.0809513 0.4614306
Score_Double Trouble CBS_ts_con 0.7854033 0.0000000
Score_Odd One Out CBS_ts_con 0.1573537 0.1503701
Score_Digit Span CBS_ts_con 0.2495070 0.0212884
Score_Feature Match CBS_ts_con 0.8085002 0.0000000
Score_Polygons CBS_ts_con 0.2326962 0.0321051
Score_Paired Associates CBS_ts_con 0.1028228 0.3490529
Score_Token Search CBS_ts_con 0.2087937 0.0551523
Score_Spatial Planning CBS_ts_con 0.1552164 0.1560598
Score_Rotations CBS_ts_con 0.2610375 0.0158214
Score_Spatial Span CBS_ts_con 0.4098798 0.0000980
Score_Grammatical Reasoning CBS_ts_con 0.2808792 0.0092175
Score_Monkey Ladder CBS_ts_con 0.3197802 0.0028513
CBS_overall CBS_ts_con 0.6798508 0.0000000
CBS_STM CBS_ts_con 0.3957140 0.0001779
CBS_reason CBS_ts_con 0.6047433 0.0000000
CBS_verbal CBS_ts_con 0.6263287 0.0000000
CBS_ts_memory CBS_ts_con 0.3957140 0.0001779
CBS_ts_reason CBS_ts_con 0.3386487 0.0015234
CBS_ts_verbalab CBS_ts_con 0.3588461 0.0007449

# print tables using kable
kable(as.data.frame(format(main_corr_pb2$r, scientific = FALSE)), caption = "Study 2 - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: r values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.4016 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily -0.271 -0.1046 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.0092 -0.0189 0.1661 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using -0.1994 -0.0376 0.0436 -0.1296 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on -0.0458 -0.1514 0.0844 0.0724 -0.0815 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.1047 0.1139 -0.0132 0.0397 -0.2052 0.0667 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.2282 0.0214 0.1807 9e-04 -0.5022 0.2431 0.1006 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.2724 0.1843 -0.0351 -0.0191 -0.2689 0.0908 -0.1187 0.326 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.229 -0.0342 0.1823 0.1292 -0.5238 0.2968 0.0091 0.6253 0.3308 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.2189 0.169 0.0723 0.0751 -0.4566 -0.0241 0.1373 0.5932 0.2101 0.4504 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen -0.0847 0.1971 -0.0903 -0.1617 0.0702 -0.1446 0.0236 -0.0312 -0.0244 -0.0349 -0.0018 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended -0.0491 0.2925 -0.0637 0.0141 0.2184 -0.1977 -0.2005 -0.0823 -0.0144 -0.1267 0.0418 0.5723 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other -0.0661 0.1715 -0.0838 -0.0943 0.2096 -0.1561 -0.0428 -0.1271 -0.0566 -0.1949 -0.1399 0.6721 0.6667 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked -0.0514 -0.0332 0.3189 0.1725 0.0182 -0.0544 0.0746 0.0752 0.0389 0.0539 0.1144 -0.3361 -0.279 -0.3004 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.1634 0.0702 -0.13 -0.0371 0.1662 -0.0095 -0.0538 0.052 0.0672 0.1079 0.118 0.3891 0.4477 0.3492 0.0165 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum -0.2715 -0.2034 0.3725 0.2647 -0.051 0.1553 0.0124 0.1443 -0.0948 0.0668 -0.0113 -0.3605 -0.4244 -0.3521 0.3365 -0.3907 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum -0.1949 -0.1142 0.4547 0.1965 -0.2415 0.219 -0.0458 0.2911 0.1431 0.31 0.1486 -0.2421 -0.2464 -0.2171 0.2496 -0.3634 0.7085 1 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum -0.0968 -0.2843 0.2175 0.1908 -0.1429 0.1636 -0.0151 0.2003 0.0451 0.2066 0.022 -0.5008 -0.4947 -0.5369 0.2876 -0.3268 0.6958 0.6321 1 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum -0.0295 -0.0528 0.2949 0.2269 -0.1772 0.0151 0.069 -0.007 -0.0037 0.1049 0.0448 -0.1625 -0.2203 -0.0775 0.1776 -0.2519 0.4574 0.4585 0.3168 1 - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum -0.1519 -0.248 0.3951 0.2038 -0.2043 0.1824 0.0094 0.2276 0.0373 0.2388 0.0914 -0.4123 -0.4763 -0.4384 0.3913 -0.4095 0.828 0.785 0.7843 0.4973 1 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum -0.1739 -0.2528 0.2893 0.1084 -0.1576 0.1198 -0.0153 0.1002 0.0205 0.1122 -0.0391 -0.3928 -0.4291 -0.3907 0.338 -0.3667 0.702 0.5723 0.7953 0.325 0.8669 1 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum -0.0811 -0.1101 0.2769 0.1626 -0.2295 0.1209 0.072 0.2581 0.1872 0.267 0.1819 -0.2912 -0.3036 -0.2821 0.2464 -0.3108 0.648 0.7517 0.5689 0.536 0.8167 0.5828 1 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum -0.1679 -0.2232 0.3355 0.1837 -0.136 0.1565 0.0037 0.1099 -0.1492 0.1987 0.0134 -0.364 -0.483 -0.4142 0.3579 -0.3814 0.7733 0.6487 0.7101 0.4041 0.8714 0.7329 0.5469 1 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum -0.0923 -0.2158 0.4881 0.246 -0.1761 0.2687 -0.0926 0.3556 0.0644 0.2893 0.2613 -0.2771 -0.2399 -0.3371 0.3096 -0.2085 0.5319 0.6513 0.427 0.362 0.6777 0.4161 0.4869 0.5363 1 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble -0.0923 -0.1328 -0.1806 -0.337 0.1012 -0.1412 -0.1044 0.0508 -0.0349 -0.1386 -0.0188 0.042 -0.0264 0.1455 -0.1159 0.0174 -0.1664 -0.1722 -0.0994 -0.1567 -0.1214 -0.0432 -0.1128 -0.1714 -0.0915 1 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out -0.1322 -0.0757 0.0433 -0.0542 0.1924 -0.008 -0.1082 -0.0393 -0.1976 -0.0517 -0.2773 0.0777 -0.0088 0.0049 0.0074 0.0959 -0.045 -0.0216 0.0746 -0.1836 -0.0108 0.0432 -0.0742 -0.0046 0.0111 0.2007 1 - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.0031 -0.2028 -0.1628 -0.1241 0.0977 -0.1173 0.0462 -0.0674 0.0044 -0.0406 -0.0948 -0.2949 -0.3117 -0.2303 0.1079 -0.1307 0.0879 0.0019 0.171 -0.1831 0.1272 0.1763 0.05 0.129 -0.0261 0.3099 0.0584 1 - - - - - - - - - - - - - - - - -
Score_Feature Match -0.2192 -0.0606 -0.1016 -0.1109 0.1725 0.0039 -0.1777 -0.2293 -0.2608 -0.2153 -0.1004 -0.0901 0.0796 -0.0521 -0.0485 0.0502 -0.1404 -0.1522 -0.0472 -0.142 -0.0961 -0.0245 -0.0812 -0.1262 -0.0389 0.2707 0.054 0.0934 1 - - - - - - - - - - - - - - - -
Score_Polygons 0.0172 -0.0725 0.0439 0.0895 -0.2334 0.1232 0.0123 0.0822 0.0195 0.1678 0.0493 -0.0985 -0.1003 -0.0704 0.1527 0.0726 0.0204 0.1542 0.0309 0.0737 0.107 0.029 0.1164 0.1149 0.1152 0.1821 -0.0554 0.142 0.1888 1 - - - - - - - - - - - - - - -
Score_Paired Associates 0.0109 0.0828 0.0506 -0.04 0.2348 -0.0399 -0.1174 -0.1038 -0.1751 -0.0218 -0.0277 0.2202 0.2269 0.2587 0.0347 0.1159 -0.1412 -0.113 -0.1608 -0.0718 -0.1343 -0.0914 -0.1437 -0.0789 -0.1729 0.0788 -7e-04 0.0186 0.085 -0.0155 1 - - - - - - - - - - - - - -
Score_Token Search 0.0047 -0.1352 -0.0711 0.0153 0.1904 0.0625 -0.1052 0.0171 0.0123 -0.0926 -0.1331 0.1206 0.0524 0.1677 0.0345 0.0253 -0.0873 -7e-04 -0.0335 -0.165 -0.0637 -0.1126 -0.0084 -0.123 0.0473 0.3196 0.3175 0.2822 0.0208 0.1521 0.2442 1 - - - - - - - - - - - - -
Score_Spatial Planning -0.0735 -0.0542 -0.0179 0.1381 -0.041 0.0658 -0.0115 0.0545 0.0454 0.0048 -4e-04 0.0192 -0.0588 0.0155 0.0767 0.0797 -0.0201 0.0839 0.0509 -0.0239 0.035 0.0295 0.1028 -0.045 -0.0219 0.2246 0.3127 0.112 0.0278 0.2444 0.0971 0.305 1 - - - - - - - - - - - -
Score_Rotations -0.1909 -0.288 0.0974 -0.0775 5e-04 0.1288 -0.0354 0.1118 -0.0246 -0.0286 0.0751 0.0727 0.1274 0.0707 -0.0794 0.1021 -0.0467 0.0065 -0.076 -0.0768 -0.0798 -0.1599 -0.0371 -0.0184 0.0194 0.2599 -0.1522 0.0132 0.1589 0.3331 -0.0169 0.074 0.1796 1 - - - - - - - - - - -
Score_Spatial Span -0.1091 -0.1967 -0.0727 -0.0247 0.1229 0.2001 -0.0301 0.0323 0.011 0.0174 0.0124 -0.1585 -0.0827 -0.0509 -0.0409 0.0508 -0.084 1e-04 -0.0157 -0.1063 -0.0156 -0.0698 0.0679 -0.0774 0.0338 0.2875 0.0526 0.1282 0.3642 0.2884 0.0889 0.3105 0.3529 0.2461 1 - - - - - - - - - -
Score_Grammatical Reasoning -0.0296 -0.0562 0.0314 -0.0626 -0.1992 0.079 -0.0336 0.171 -0.107 0.1135 0.1603 -0.0337 -0.1842 0.0185 0.0222 0.0137 -0.0248 -0.0509 -0.0066 -0.0416 0.0338 0.0085 0.0278 0.0601 -0.0298 0.3609 0.1003 0.0918 0.0937 0.2872 0.1348 0.0482 0.2412 0.1161 0.2199 1 - - - - - - - - -
Score_Monkey Ladder -0.0743 -0.126 -0.1768 -0.0722 0.1624 0.0828 -0.2627 -0.0934 -0.0699 -0.0508 0.0046 -0.1264 -0.0899 -0.0469 -0.1207 0.0219 -0.1617 -0.2364 -0.0683 -0.2051 -0.1842 -0.1618 -0.1878 -0.1435 -0.1049 0.2867 0.0925 0.1555 0.2248 0.1439 0.1221 0.1868 0.3225 0.2195 0.5136 0.2968 1 - - - - - - - -
CBS_overall -0.151 -0.2221 -0.0898 -0.1138 0.1413 0.0741 -0.1603 -0.0066 -0.134 -0.0611 -0.0624 -0.0415 -0.0595 0.0406 0.0028 0.0873 -0.1401 -0.0879 -0.0329 -0.2189 -0.0715 -0.0663 -0.0503 -0.086 -0.0437 0.6408 0.3347 0.4034 0.4481 0.4862 0.3117 0.5561 0.5688 0.4078 0.6556 0.498 0.6034 1 - - - - - - -
CBS_STM -0.0635 -0.1442 -0.1032 -0.0454 0.2693 0.1167 -0.195 -0.0548 -0.0823 -0.0568 -0.0558 0.021 0.0394 0.1245 -0.0346 0.0804 -0.1793 -0.1312 -0.1044 -0.2087 -0.15 -0.1653 -0.1016 -0.1607 -0.0724 0.3711 0.1786 0.2243 0.2626 0.2173 0.5462 0.6695 0.4106 0.1987 0.7272 0.2641 0.6898 0.809 1 - - - - - -
CBS_reason -0.2209 -0.1992 0.0207 -0.0108 0.0387 0.112 -0.1211 -0.0155 -0.1602 -0.0504 -0.096 -0.0103 0.0166 -0.0138 0.0374 0.1448 -0.0875 0.0199 0.0104 -0.1312 -0.0189 -0.0301 0.0056 -0.031 0.0303 0.4151 0.4188 0.1527 0.5458 0.6209 0.0546 0.3104 0.6205 0.546 0.4753 0.302 0.3628 0.8149 0.4585 1 - - - - -
CBS_verbal -0.0571 -0.1838 -0.1487 -0.25 0.003 -0.0867 -0.0449 0.072 -0.064 -0.0342 0.0206 -0.1313 -0.2413 -0.0271 0.0036 -0.0457 -0.0517 -0.1063 0.0276 -0.18 0.0152 0.0643 -0.019 0.0038 -0.0702 0.7954 0.1706 0.655 0.2179 0.2859 0.1087 0.3081 0.2716 0.1858 0.2999 0.6766 0.3474 0.7266 0.4054 0.4111 1 - - - -
CBS_ts_memory -0.0635 -0.1442 -0.1032 -0.0454 0.2693 0.1167 -0.195 -0.0548 -0.0823 -0.0568 -0.0558 0.021 0.0394 0.1245 -0.0346 0.0804 -0.1793 -0.1312 -0.1044 -0.2087 -0.15 -0.1653 -0.1016 -0.1607 -0.0724 0.3711 0.1786 0.2243 0.2626 0.2173 0.5462 0.6695 0.4106 0.1987 0.7272 0.2641 0.6898 0.809 1 0.4585 0.4054 1 - - -
CBS_ts_reason -0.1587 -0.2056 0.0709 0.0382 -0.0337 0.1297 -0.0605 0.087 -0.0684 0.0397 -0.0665 0.0293 -0.0171 0.0077 0.0662 0.1469 -0.0382 0.0932 0.0339 -0.0888 0.0219 -0.0241 0.0439 0.0215 0.0534 0.3629 0.4668 0.1363 0.1816 0.6421 0.025 0.3547 0.7155 0.5678 0.3907 0.3114 0.3226 0.7508 0.4176 0.9231 0.3824 0.4176 1 - -
CBS_ts_verbalab -0.0179 -0.1761 -0.0894 -0.1265 -0.068 -0.0265 0.0087 0.0695 -0.0692 0.0489 0.0437 -0.2231 -0.3359 -0.144 0.0882 -0.0796 0.043 -0.0331 0.1117 -0.1525 0.1092 0.1255 0.0527 0.1282 -0.0378 0.4538 0.1073 0.7412 0.1266 0.29 0.1035 0.2242 0.2386 0.0872 0.2353 0.7364 0.3057 0.6098 0.3304 0.3073 0.9011 0.3304 0.3026 1 -
CBS_ts_con -0.1974 -0.12 -0.1757 -0.2773 0.1728 -0.0838 -0.1781 -0.1163 -0.189 -0.2232 -0.0761 -0.0322 0.0351 0.0554 -0.102 0.0429 -0.192 -0.2031 -0.0911 -0.1871 -0.136 -0.0422 -0.1212 -0.1859 -0.081 0.7854 0.1574 0.2495 0.8085 0.2327 0.1028 0.2088 0.1552 0.261 0.4099 0.2809 0.3198 0.6799 0.3957 0.6047 0.6263 0.3957 0.3386 0.3588 1
  

kable(as.data.frame(format(main_corr_pb2$P, scientific = FALSE)), caption = "Study 2 - Correlation: p values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: p values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 2e-04 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 0.0121 0.3468 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.9337 0.8653 0.1288 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 0.0673 0.7357 0.6918 0.2371 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.6773 0.172 0.4425 0.5101 0.4583 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.3404 0.3051 0.9044 0.7186 0.0596 0.5441 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.0357 0.848 0.0979 0.9937 0 0.025 0.3597 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.0117 0.0953 0.7497 0.862 0.0128 0.4084 0.2792 0.0023 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.035 0.7587 0.0949 0.2386 0 0.0058 0.9344 0 0.002 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.0441 0.1268 0.5111 0.4948 0 0.827 0.2103 0 0.0537 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 0.4411 0.074 0.4111 0.1394 0.5233 0.1867 0.8303 0.7768 0.8245 0.7515 0.9869 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.6555 0.0073 0.5622 0.8983 0.0447 0.0697 0.0658 0.4541 0.8959 0.2479 0.7043 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.5477 0.121 0.4459 0.3909 0.0542 0.1537 0.6973 0.2463 0.6071 0.0738 0.2017 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 0.6407 0.7657 0.0029 0.1143 0.8687 0.6208 0.4973 0.4939 0.7234 0.6239 0.2972 0.0017 0.0097 0.0052 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.1351 0.5282 0.2356 0.7363 0.1285 0.9315 0.6251 0.6365 0.5409 0.3257 0.282 2e-04 0 0.0011 0.8812 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 0.012 0.0651 4e-04 0.0144 0.643 0.1557 0.9103 0.1876 0.3883 0.5433 0.918 7e-04 1e-04 0.001 0.0016 2e-04 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 0.0739 0.3039 0 0.0714 0.026 0.0441 0.6775 0.0069 0.1913 0.0039 0.1746 0.0256 0.023 0.046 0.0212 6e-04 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 0.3782 0.0092 0.0456 0.0802 0.1922 0.1347 0.8912 0.066 0.6819 0.0578 0.8414 0 0 0 0.0076 0.0023 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 0.789 0.6358 0.0062 0.0367 0.1048 0.8906 0.5304 0.9491 0.9729 0.3392 0.6838 0.1373 0.0427 0.4806 0.1039 0.02 0 0 0.0031 NA - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 0.1651 0.0238 2e-04 0.0613 0.0608 0.0948 0.9323 0.0362 0.7347 0.0278 0.4054 1e-04 0 0 2e-04 1e-04 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 0.1114 0.0211 0.0072 0.3233 0.1498 0.2749 0.8892 0.3615 0.8523 0.3065 0.7225 2e-04 0 2e-04 0.0016 6e-04 0 0 0 0.0024 0 NA - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 0.4604 0.3218 0.0103 0.1372 0.0346 0.2704 0.5125 0.0171 0.0862 0.0135 0.0957 0.0068 0.0047 0.0089 0.023 0.0038 0 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 0.1245 0.0425 0.0017 0.0924 0.2147 0.1527 0.9733 0.3169 0.1731 0.0684 0.903 6e-04 0 1e-04 8e-04 3e-04 0 0 0 1e-04 0 0 0 NA - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 0.4007 0.0501 0 0.0232 0.1069 0.0129 0.3991 8e-04 0.5583 0.0072 0.0157 0.0102 0.027 0.0016 0.0039 0.0555 0 0 0 7e-04 0 1e-04 0 0 NA - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 0.4009 0.2312 0.0981 0.0016 0.3566 0.1973 0.3416 0.6441 0.7514 0.2058 0.8642 0.7025 0.8106 0.184 0.2909 0.8745 0.128 0.115 0.3655 0.1521 0.2685 0.6944 0.3039 0.1168 0.405 NA - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 0.2278 0.4966 0.6938 0.6224 0.0777 0.9423 0.3241 0.7213 0.0699 0.6387 0.0102 0.4796 0.936 0.9644 0.9465 0.3824 0.6825 0.8446 0.4972 0.0926 0.9218 0.6948 0.4998 0.9668 0.9195 0.0656 NA - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.9773 0.0659 0.1367 0.2579 0.3739 0.2849 0.6745 0.54 0.9683 0.7121 0.3883 0.0061 0.0037 0.034 0.3259 0.233 0.4236 0.9864 0.1177 0.0934 0.2462 0.1065 0.6492 0.2392 0.8129 0.0039 0.5954 NA - - - - - - - - - - - - - - - - -
Score_Feature Match 0.0438 0.5865 0.3549 0.3121 0.1144 0.9719 0.1036 0.0348 0.0159 0.0478 0.3606 0.4124 0.4689 0.6356 0.6593 0.6481 0.1999 0.1645 0.6677 0.1949 0.3816 0.8236 0.4599 0.2499 0.7236 0.0122 0.6238 0.395 NA - - - - - - - - - - - - - - - -
Score_Polygons 0.8759 0.5145 0.6902 0.4152 0.0316 0.2613 0.911 0.4543 0.8592 0.1249 0.6543 0.3699 0.3612 0.522 0.1631 0.5091 0.8533 0.1589 0.7786 0.5025 0.3296 0.7919 0.2887 0.2948 0.2938 0.0953 0.6143 0.195 0.0836 NA - - - - - - - - - - - - - - -
Score_Paired Associates 0.9211 0.4568 0.6459 0.7165 0.0305 0.7169 0.2845 0.3444 0.109 0.8433 0.8015 0.0429 0.0368 0.0168 0.7522 0.2907 0.1975 0.3034 0.1415 0.5135 0.2203 0.4057 0.1896 0.473 0.1135 0.4735 0.9952 0.8657 0.4392 0.8877 NA - - - - - - - - - - - - - -
Score_Token Search 0.9656 0.2229 0.5182 0.8894 0.081 0.5702 0.3379 0.8768 0.9113 0.3992 0.2248 0.2717 0.6337 0.1251 0.7538 0.8183 0.427 0.9951 0.7611 0.1313 0.5626 0.3048 0.9389 0.2621 0.6675 0.0029 0.0031 0.0089 0.8498 0.1647 0.0243 NA - - - - - - - - - - - - -
Score_Spatial Planning 0.5041 0.6264 0.871 0.2076 0.7097 0.5494 0.9167 0.6204 0.6796 0.9652 0.9968 0.8612 0.5931 0.8882 0.4854 0.4684 0.855 0.4453 0.6434 0.8281 0.7503 0.7888 0.349 0.6824 0.8421 0.0388 0.0036 0.3077 0.8003 0.0242 0.3765 0.0045 NA - - - - - - - - - - - -
Score_Rotations 0.0801 0.0083 0.3753 0.4808 0.9964 0.2401 0.748 0.3084 0.8229 0.7953 0.4946 0.5087 0.2454 0.5205 0.4701 0.3527 0.671 0.9532 0.4894 0.4847 0.4681 0.1439 0.7364 0.8675 0.8605 0.0163 0.1643 0.9047 0.1464 0.0018 0.878 0.5011 0.1001 NA - - - - - - - - - - -
Score_Spatial Span 0.3204 0.0747 0.5086 0.8222 0.2626 0.0664 0.7848 0.7692 0.9202 0.8744 0.9101 0.1473 0.4516 0.6437 0.7102 0.644 0.4447 0.9995 0.8869 0.3328 0.8877 0.5256 0.5372 0.4815 0.7586 0.0076 0.6326 0.2424 6e-04 0.0074 0.4183 0.0038 9e-04 0.0232 NA - - - - - - - - - -
Score_Grammatical Reasoning 0.7877 0.6137 0.7754 0.5694 0.0675 0.4726 0.7599 0.1177 0.3296 0.3011 0.1428 0.7597 0.0916 0.8668 0.8401 0.9007 0.8217 0.6434 0.9522 0.7054 0.7588 0.9386 0.8005 0.5851 0.7868 7e-04 0.361 0.4035 0.3939 0.0077 0.2188 0.6616 0.0262 0.29 0.0432 NA - - - - - - - - -
Score_Monkey Ladder 0.4991 0.2565 0.1055 0.5116 0.1375 0.451 0.0151 0.3952 0.525 0.6441 0.9666 0.2489 0.4133 0.6698 0.271 0.8426 0.1392 0.0294 0.5346 0.0597 0.0914 0.1391 0.0852 0.1901 0.3393 0.0078 0.4 0.1554 0.0386 0.1887 0.2658 0.0869 0.0026 0.0436 0 0.0058 NA - - - - - - - -
CBS_overall 0.1679 0.0436 0.4139 0.2996 0.1971 0.5001 0.1427 0.9519 0.2216 0.5784 0.5705 0.706 0.5883 0.7121 0.9796 0.427 0.2011 0.4237 0.7651 0.0442 0.5154 0.5465 0.6477 0.4338 0.6915 0 0.0017 1e-04 0 0 0.0037 0 0 1e-04 0 0 0 NA - - - - - - -
CBS_STM 0.5638 0.1932 0.3474 0.6797 0.0127 0.2875 0.0737 0.6186 0.4539 0.6057 0.6121 0.8486 0.7202 0.2562 0.7531 0.4643 0.1006 0.2314 0.3416 0.0552 0.1706 0.1305 0.3549 0.1417 0.5104 5e-04 0.102 0.039 0.0152 0.0458 0 0 1e-04 0.0683 0 0.0146 0 0 NA - - - - - -
CBS_reason 0.0422 0.071 0.8509 0.9215 0.725 0.3075 0.2696 0.8881 0.1429 0.647 0.3823 0.9255 0.8803 0.9002 0.734 0.186 0.4261 0.8566 0.9246 0.2313 0.8636 0.7844 0.9593 0.7781 0.7833 1e-04 1e-04 0.1629 0 0 0.62 0.0038 0 0 0 0.005 6e-04 0 0 NA - - - - -
CBS_verbal 0.604 0.0962 0.1744 0.021 0.9779 0.4299 0.6833 0.5127 0.5605 0.756 0.8519 0.2311 0.0261 0.8052 0.9738 0.6782 0.6382 0.3329 0.8019 0.0993 0.8903 0.5586 0.8627 0.9728 0.5231 0 0.1184 0 0.0452 0.008 0.3218 0.0041 0.0119 0.0887 0.0053 0 0.0011 0 1e-04 1e-04 NA - - - -
CBS_ts_memory 0.5638 0.1932 0.3474 0.6797 0.0127 0.2875 0.0737 0.6186 0.4539 0.6057 0.6121 0.8486 0.7202 0.2562 0.7531 0.4643 0.1006 0.2314 0.3416 0.0552 0.1706 0.1305 0.3549 0.1417 0.5104 5e-04 0.102 0.039 0.0152 0.0458 0 0 1e-04 0.0683 0 0.0146 0 0 0 0 1e-04 NA - - -
CBS_ts_reason 0.147 0.0622 0.519 0.7286 0.7592 0.2369 0.5821 0.4283 0.534 0.7183 0.5451 0.7904 0.8767 0.9441 0.5475 0.1797 0.7285 0.3963 0.7579 0.4188 0.8422 0.8268 0.6901 0.8451 0.6275 6e-04 0 0.2135 0.0962 0 0.8203 9e-04 0 0 2e-04 0.0037 0.0026 0 1e-04 0 3e-04 1e-04 NA - -
CBS_ts_verbalab 0.8711 0.1114 0.4158 0.2488 0.5366 0.8099 0.9369 0.5275 0.5293 0.6567 0.6914 0.0402 0.0017 0.1885 0.422 0.4691 0.6959 0.7639 0.3088 0.1636 0.32 0.2524 0.6316 0.2425 0.7314 0 0.3283 0 0.2482 0.0071 0.3459 0.0391 0.0279 0.4274 0.0302 0 0.0044 0 0.002 0.0042 0 0.002 0.0049 NA -
CBS_ts_con 0.0702 0.28 0.1077 0.0102 0.1138 0.4456 0.1029 0.289 0.0832 0.04 0.489 0.7698 0.7501 0.6144 0.3527 0.6965 0.0783 0.0623 0.4068 0.0865 0.2146 0.7013 0.2692 0.0885 0.4614 0 0.1504 0.0213 0 0.0321 0.3491 0.0552 0.1561 0.0158 1e-04 0.0092 0.0029 0 2e-04 0 0 2e-04 0.0015 7e-04 NA

kable(as.data.frame(format(main_corr_pb2$n, scientific = FALSE)), caption = "Study 2 - Correlation: n values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: n values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_access_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 83 83 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 85 83 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 85 83 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 85 83 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 85 83 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 85 83 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 85 83 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 85 83 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 85 83 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 85 83 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 85 83 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 85 83 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 85 83 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - - -
SAD_access_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - - -
Score_Digit Span 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - - -
Score_Feature Match 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - - -
Score_Polygons 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - - -
Score_Paired Associates 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - - -
Score_Token Search 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - - -
Score_Spatial Planning 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - - -
Score_Rotations 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - - -
Score_Spatial Span 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - - -
Score_Grammatical Reasoning 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - - -
Score_Monkey Ladder 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - - -
CBS_overall 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - - -
CBS_STM 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - - -
CBS_reason 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - - -
CBS_verbal 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - - -
CBS_ts_memory 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - - -
CBS_ts_reason 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 - -
CBS_ts_verbalab 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 -
CBS_ts_con 85 83 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85

corrplot(main_corr_pb$r, method = "circle", col = (colorRampPalette(c("purple", "grey", "blue"))(50)),  
         type = "upper",  
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         # Combine with significance level
         p.mat = main_corr_pb$P, sig.level = 0.05, 
         addgrid.col = "white",
         insig = "blank",# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1
         )

For Outside…

main_corr_out <- 
  main_all_data_final %>% 
  select(condition, age, age_first_phone, dist_daily, dist_study, pow_not_using:pow_sleep, com_gen:com_room_task, condition, NMPQ_sum, MPIQ_sum, MPIQ_SI_sum, MPIQ_VFO_sum, SAD_sum, SAD_dep_sum, SAD_ea_sum, SAD_dist_sum, `Score_Double Trouble`:`Score_Monkey Ladder`, CBS_overall, CBS_STM, CBS_reason, CBS_verbal, CBS_ts_memory, CBS_ts_reason, CBS_ts_verbalab, CBS_ts_con) %>% 
  filter(condition == "outside") %>% 
  select(-condition) %>% 
  as.matrix() %>%
  rcorr(type = "pearson")

# create new main_corr_out to shown only lower triangle... 
main_corr_out2 <- main_corr_out
# round to 4 decimals... 
main_corr_out2$r <- round(main_corr_out2$r, 4)
main_corr_out2$P <- round(main_corr_out2$P, 4)
main_corr_out2$n <- round(main_corr_out2$n, 4)
# remove upper triangle form r, p, and n
main_corr_out2$r[upper.tri(main_corr_out2$r)] <- "-"
main_corr_out2$P[upper.tri(main_corr_out2$P)] <- "-"
main_corr_out2$n[upper.tri(main_corr_out2$n)] <- "-"

# show corr table with flattenCorr

kable(flattenCorrMatrix(main_corr_out$r, main_corr_out$P), caption = "Study 2 - Correlation") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation
row column cor p
age age_first_phone 0.1808503 0.1154857
age dist_daily -0.0707685 0.5408017
age_first_phone dist_daily -0.1260723 0.2745910
age dist_study -0.0000799 0.9994499
age_first_phone dist_study 0.1335799 0.2467884
dist_daily dist_study 0.1093565 0.3437678
age pow_not_using 0.0002017 0.9986111
age_first_phone pow_not_using 0.1453792 0.2071121
dist_daily pow_not_using 0.0373244 0.7472438
dist_study pow_not_using 0.0279298 0.8094610
age pow_notifications_on -0.1803337 0.1165464
age_first_phone pow_notifications_on 0.1134442 0.3259212
dist_daily pow_notifications_on 0.2166180 0.0584565
dist_study pow_notifications_on 0.1300038 0.2597805
pow_not_using pow_notifications_on -0.0115984 0.9202536
age pow_vibrate 0.0589449 0.6105966
age_first_phone pow_vibrate -0.0000935 0.9993563
dist_daily pow_vibrate -0.0149263 0.8974825
dist_study pow_vibrate -0.0387346 0.7380321
pow_not_using pow_vibrate -0.0284745 0.8058170
pow_notifications_on pow_vibrate 0.2075002 0.0701736
age pow_study -0.2097830 0.0670762
age_first_phone pow_study -0.1774833 0.1225340
dist_daily pow_study 0.3990103 0.0003250
dist_study pow_study 0.1526873 0.1849393
pow_not_using pow_study -0.4340889 0.0000801
pow_notifications_on pow_study 0.1955492 0.0883125
pow_vibrate pow_study -0.0885964 0.4435439
age pow_exam -0.2312927 0.0429782
age_first_phone pow_exam -0.1638146 0.1545644
dist_daily pow_exam 0.1596643 0.1654270
dist_study pow_exam 0.0236835 0.8380007
pow_not_using pow_exam -0.2343454 0.0402282
pow_notifications_on pow_exam 0.0099157 0.9317935
pow_vibrate pow_exam -0.0479220 0.6789668
pow_study pow_exam 0.2695400 0.0177606
age pow_lec 0.0598292 0.6052428
age_first_phone pow_lec -0.1470739 0.2018094
dist_daily pow_lec 0.0619829 0.5922923
dist_study pow_lec -0.0749552 0.5170601
pow_not_using pow_lec -0.1769671 0.1236432
pow_notifications_on pow_lec 0.0654850 0.5715040
pow_vibrate pow_lec 0.2454275 0.0314435
pow_study pow_lec 0.2092400 0.0678028
pow_exam pow_lec 0.2511218 0.0275966
age pow_sleep -0.0559214 0.6290526
age_first_phone pow_sleep -0.3360961 0.0028040
dist_daily pow_sleep -0.0302878 0.7937167
dist_study pow_sleep -0.1310830 0.2558116
pow_not_using pow_sleep -0.2943357 0.0093667
pow_notifications_on pow_sleep -0.1166324 0.3124196
pow_vibrate pow_sleep 0.0952070 0.4101403
pow_study pow_sleep 0.4158621 0.0001690
pow_exam pow_sleep 0.3205061 0.0044859
pow_lec pow_sleep 0.5318524 0.0000006
age com_gen -0.0391301 0.7354546
age_first_phone com_gen -0.0512553 0.6579841
dist_daily com_gen 0.1002384 0.3857291
dist_study com_gen -0.1334795 0.2471468
pow_not_using com_gen 0.0883713 0.4447074
pow_notifications_on com_gen -0.0042662 0.9706258
pow_vibrate com_gen 0.1131902 0.3270125
pow_study com_gen 0.0892915 0.4399616
pow_exam com_gen 0.0411835 0.7221223
pow_lec com_gen 0.2084252 0.0689049
pow_sleep com_gen 0.2339653 0.0405623
age com_unattended 0.2221229 0.0521892
age_first_phone com_unattended 0.0126294 0.9131916
dist_daily com_unattended 0.0078386 0.9460569
dist_study com_unattended -0.0477957 0.6797667
pow_not_using com_unattended 0.2236072 0.0505972
pow_notifications_on com_unattended 0.0019668 0.9864554
pow_vibrate com_unattended 0.0921904 0.4251977
pow_study com_unattended -0.1709219 0.1372097
pow_exam com_unattended 0.0910114 0.4311680
pow_lec com_unattended 0.0174544 0.8802376
pow_sleep com_unattended -0.0745086 0.5195676
com_gen com_unattended 0.3607302 0.0012691
age com_leave_with_other 0.1212319 0.2935868
age_first_phone com_leave_with_other -0.0869087 0.4523094
dist_daily com_leave_with_other 0.1594081 0.1661155
dist_study com_leave_with_other -0.0421035 0.7161756
pow_not_using com_leave_with_other 0.1763832 0.1249069
pow_notifications_on com_leave_with_other 0.0564647 0.6257192
pow_vibrate com_leave_with_other 0.1441452 0.2110351
pow_study com_leave_with_other -0.0039531 0.9727809
pow_exam com_leave_with_other 0.0619875 0.5922652
pow_lec com_leave_with_other 0.2063866 0.0717256
pow_sleep com_leave_with_other 0.0374283 0.7465639
com_gen com_leave_with_other 0.5072301 0.0000025
com_unattended com_leave_with_other 0.7228117 0.0000000
age com_locked 0.0074089 0.9490096
age_first_phone com_locked -0.0760294 0.5110552
dist_daily com_locked 0.2059709 0.0723122
dist_study com_locked -0.0649573 0.5746149
pow_not_using com_locked -0.1162281 0.3141116
pow_notifications_on com_locked 0.2493907 0.0287216
pow_vibrate com_locked -0.1116849 0.3335287
pow_study com_locked 0.1841382 0.1089085
pow_exam com_locked 0.0358801 0.7567158
pow_lec com_locked 0.0365862 0.7520802
pow_sleep com_locked 0.0463132 0.6891828
com_gen com_locked -0.3501869 0.0017956
com_unattended com_locked -0.2935429 0.0095684
com_leave_with_other com_locked -0.3300964 0.0033694
age com_room_task 0.1780101 0.1214100
age_first_phone com_room_task 0.1214267 0.2928061
dist_daily com_room_task 0.0152818 0.8950544
dist_study com_room_task -0.1410805 0.2210051
pow_not_using com_room_task 0.1191215 0.3021332
pow_notifications_on com_room_task -0.0908034 0.4322259
pow_vibrate com_room_task 0.0284197 0.8061838
pow_study com_room_task -0.0727089 0.5297321
pow_exam com_room_task 0.0435199 0.7070525
pow_lec com_room_task 0.2416806 0.0342131
pow_sleep com_room_task 0.1856676 0.1059498
com_gen com_room_task 0.4128027 0.0001908
com_unattended com_room_task 0.3837004 0.0005716
com_leave_with_other com_room_task 0.3540673 0.0015825
com_locked com_room_task -0.2177237 0.0571508
age NMPQ_sum -0.2198743 0.0546793
age_first_phone NMPQ_sum -0.0327816 0.7771551
dist_daily NMPQ_sum 0.3447220 0.0021396
dist_study NMPQ_sum 0.2266557 0.0474520
pow_not_using NMPQ_sum -0.0575091 0.6193316
pow_notifications_on NMPQ_sum 0.2562547 0.0244774
pow_vibrate NMPQ_sum -0.1620345 0.1591565
pow_study NMPQ_sum 0.2597989 0.0225029
pow_exam NMPQ_sum 0.0848913 0.4629120
pow_lec NMPQ_sum -0.0648544 0.5752222
pow_sleep NMPQ_sum 0.0174074 0.8805580
com_gen NMPQ_sum -0.1003065 0.3854047
com_unattended NMPQ_sum 0.0423815 0.7143816
com_leave_with_other NMPQ_sum 0.0821183 0.4777042
com_locked NMPQ_sum 0.1044448 0.3660036
com_room_task NMPQ_sum -0.1897582 0.0983428
age MPIQ_sum -0.2382863 0.0368957
age_first_phone MPIQ_sum -0.1005323 0.3843303
dist_daily MPIQ_sum 0.3788773 0.0006791
dist_study MPIQ_sum 0.2717466 0.0168144
pow_not_using MPIQ_sum -0.0099900 0.9312834
pow_notifications_on MPIQ_sum 0.1795852 0.1180966
pow_vibrate MPIQ_sum -0.2297359 0.0444395
pow_study MPIQ_sum 0.2829159 0.0126621
pow_exam MPIQ_sum 0.1061527 0.3581741
pow_lec MPIQ_sum 0.1171254 0.3103647
pow_sleep MPIQ_sum 0.0636463 0.5823762
com_gen MPIQ_sum -0.1058903 0.3593702
com_unattended MPIQ_sum 0.0272869 0.8137670
com_leave_with_other MPIQ_sum 0.1133185 0.3264610
com_locked MPIQ_sum 0.1657601 0.1496594
com_room_task MPIQ_sum -0.0941726 0.4152683
NMPQ_sum MPIQ_sum 0.7591082 0.0000000
age MPIQ_SI_sum -0.1047068 0.3647956
age_first_phone MPIQ_SI_sum -0.1177124 0.3079291
dist_daily MPIQ_SI_sum 0.1135149 0.3256180
dist_study MPIQ_SI_sum 0.1673818 0.1456602
pow_not_using MPIQ_SI_sum -0.0496809 0.6678633
pow_notifications_on MPIQ_SI_sum 0.4037532 0.0002713
pow_vibrate MPIQ_SI_sum -0.0319365 0.7827567
pow_study MPIQ_SI_sum 0.1978622 0.0845395
pow_exam MPIQ_SI_sum -0.0563268 0.6265644
pow_lec MPIQ_SI_sum 0.0895505 0.4386307
pow_sleep MPIQ_SI_sum 0.1323290 0.2512813
com_gen MPIQ_SI_sum -0.1803857 0.1164393
com_unattended MPIQ_SI_sum -0.1077497 0.3509470
com_leave_with_other MPIQ_SI_sum -0.0359250 0.7564204
com_locked MPIQ_SI_sum 0.1668018 0.1470811
com_room_task MPIQ_SI_sum -0.2286141 0.0455178
NMPQ_sum MPIQ_SI_sum 0.6571462 0.0000000
MPIQ_sum MPIQ_SI_sum 0.6064048 0.0000000
age MPIQ_VFO_sum -0.0733845 0.5259050
age_first_phone MPIQ_VFO_sum 0.1694008 0.1407941
dist_daily MPIQ_VFO_sum 0.1232450 0.2855841
dist_study MPIQ_VFO_sum 0.1272143 0.2702319
pow_not_using MPIQ_VFO_sum 0.0331487 0.7747250
pow_notifications_on MPIQ_VFO_sum 0.3279969 0.0035900
pow_vibrate MPIQ_VFO_sum -0.0098796 0.9320412
pow_study MPIQ_VFO_sum 0.0664497 0.5658383
pow_exam MPIQ_VFO_sum -0.0456098 0.6936675
pow_lec MPIQ_VFO_sum 0.0768466 0.5065112
pow_sleep MPIQ_VFO_sum -0.1499983 0.1928885
com_gen MPIQ_VFO_sum -0.0917338 0.4275040
com_unattended MPIQ_VFO_sum -0.0451244 0.6967681
com_leave_with_other MPIQ_VFO_sum -0.0228929 0.8433388
com_locked MPIQ_VFO_sum 0.0216029 0.8520638
com_room_task MPIQ_VFO_sum -0.1151023 0.3188538
NMPQ_sum MPIQ_VFO_sum 0.5577992 0.0000001
MPIQ_sum MPIQ_VFO_sum 0.4870783 0.0000071
MPIQ_SI_sum MPIQ_VFO_sum 0.4512893 0.0000380
age SAD_sum -0.2870628 0.0113646
age_first_phone SAD_sum -0.0442940 0.7020839
dist_daily SAD_sum 0.3066574 0.0066761
dist_study SAD_sum 0.1383480 0.2301696
pow_not_using SAD_sum -0.1362995 0.2372113
pow_notifications_on SAD_sum 0.3721780 0.0008591
pow_vibrate SAD_sum -0.0980078 0.3964423
pow_study SAD_sum 0.3354330 0.0028620
pow_exam SAD_sum -0.0584466 0.6136222
pow_lec SAD_sum 0.0146474 0.8993877
pow_sleep SAD_sum -0.0709518 0.5397511
com_gen SAD_sum -0.0641776 0.5792250
com_unattended SAD_sum -0.1474328 0.2006992
com_leave_with_other SAD_sum -0.0132896 0.9086724
com_locked SAD_sum 0.0951733 0.4103070
com_room_task SAD_sum -0.2669903 0.0189104
NMPQ_sum SAD_sum 0.7708034 0.0000000
MPIQ_sum SAD_sum 0.7231092 0.0000000
MPIQ_SI_sum SAD_sum 0.6585567 0.0000000
MPIQ_VFO_sum SAD_sum 0.6733164 0.0000000
age SAD_dep_sum -0.2992102 0.0082061
age_first_phone SAD_dep_sum -0.1779873 0.1214586
dist_daily SAD_dep_sum 0.2375855 0.0374708
dist_study SAD_dep_sum 0.0299277 0.7961160
pow_not_using SAD_dep_sum -0.1232211 0.2856784
pow_notifications_on SAD_dep_sum 0.3576206 0.0014076
pow_vibrate SAD_dep_sum 0.0307649 0.7905407
pow_study SAD_dep_sum 0.3295780 0.0034227
pow_exam SAD_dep_sum 0.0508198 0.6607108
pow_lec SAD_dep_sum 0.1093513 0.3437908
pow_sleep SAD_dep_sum 0.0609964 0.5982088
com_gen SAD_dep_sum 0.0372917 0.7474579
com_unattended SAD_dep_sum -0.0317399 0.7840615
com_leave_with_other SAD_dep_sum 0.1536290 0.1822126
com_locked SAD_dep_sum 0.0419462 0.7171911
com_room_task SAD_dep_sum -0.1707596 0.1375887
NMPQ_sum SAD_dep_sum 0.6856232 0.0000000
MPIQ_sum SAD_dep_sum 0.6372402 0.0000000
MPIQ_SI_sum SAD_dep_sum 0.6270193 0.0000000
MPIQ_VFO_sum SAD_dep_sum 0.5728447 0.0000001
SAD_sum SAD_dep_sum 0.8819072 0.0000000
age SAD_ea_sum -0.2331776 0.0412623
age_first_phone SAD_ea_sum 0.0588899 0.6109298
dist_daily SAD_ea_sum 0.2422740 0.0337614
dist_study SAD_ea_sum 0.1024449 0.3753039
pow_not_using SAD_ea_sum -0.0075347 0.9481452
pow_notifications_on SAD_ea_sum 0.2557197 0.0247879
pow_vibrate SAD_ea_sum -0.1288566 0.2640449
pow_study SAD_ea_sum 0.2573671 0.0238425
pow_exam SAD_ea_sum -0.1570965 0.1724235
pow_lec SAD_ea_sum -0.1810145 0.1151502
pow_sleep SAD_ea_sum -0.1012886 0.3807453
com_gen SAD_ea_sum -0.1035363 0.3702106
com_unattended SAD_ea_sum -0.2033657 0.0760754
com_leave_with_other SAD_ea_sum -0.1055164 0.3610788
com_locked SAD_ea_sum 0.0394429 0.7334189
com_room_task SAD_ea_sum -0.2921310 0.0099371
NMPQ_sum SAD_ea_sum 0.6001501 0.0000000
MPIQ_sum SAD_ea_sum 0.5122986 0.0000019
MPIQ_SI_sum SAD_ea_sum 0.4989519 0.0000039
MPIQ_VFO_sum SAD_ea_sum 0.5520880 0.0000002
SAD_sum SAD_ea_sum 0.8079637 0.0000000
SAD_dep_sum SAD_ea_sum 0.6158806 0.0000000
age SAD_dist_sum -0.0875273 0.4490855
age_first_phone SAD_dist_sum 0.0362331 0.7543975
dist_daily SAD_dist_sum 0.4046623 0.0002620
dist_study SAD_dist_sum 0.1330997 0.2485064
pow_not_using SAD_dist_sum -0.1061148 0.3583465
pow_notifications_on SAD_dist_sum 0.2950834 0.0091798
pow_vibrate SAD_dist_sum -0.1357914 0.2389805
pow_study SAD_dist_sum 0.2389513 0.0363567
pow_exam SAD_dist_sum -0.0791771 0.4936669
pow_lec SAD_dist_sum 0.0449520 0.6978703
pow_sleep SAD_dist_sum -0.1637476 0.1547355
com_gen SAD_dist_sum -0.0099010 0.9318940
com_unattended SAD_dist_sum -0.1382226 0.2305962
com_leave_with_other SAD_dist_sum 0.0054127 0.9627367
com_locked SAD_dist_sum 0.1502872 0.1920228
com_room_task SAD_dist_sum -0.1604227 0.1634012
NMPQ_sum SAD_dist_sum 0.4717395 0.0000149
MPIQ_sum SAD_dist_sum 0.5455532 0.0000003
MPIQ_SI_sum SAD_dist_sum 0.3860520 0.0005250
MPIQ_VFO_sum SAD_dist_sum 0.4846889 0.0000079
SAD_sum SAD_dist_sum 0.6537548 0.0000000
SAD_dep_sum SAD_dist_sum 0.5046958 0.0000029
SAD_ea_sum SAD_dist_sum 0.3423323 0.0023078
age Score_Double Trouble -0.3032319 0.0073455
age_first_phone Score_Double Trouble -0.0902188 0.4352079
dist_daily Score_Double Trouble -0.0148219 0.8981953
dist_study Score_Double Trouble -0.0426760 0.7124829
pow_not_using Score_Double Trouble -0.4289084 0.0000994
pow_notifications_on Score_Double Trouble 0.1404564 0.2230754
pow_vibrate Score_Double Trouble -0.1607851 0.1624396
pow_study Score_Double Trouble 0.3450244 0.0021191
pow_exam Score_Double Trouble 0.1561102 0.1751679
pow_lec Score_Double Trouble 0.0790754 0.4942239
pow_sleep Score_Double Trouble 0.1629888 0.1566824
com_gen Score_Double Trouble -0.1768945 0.1237999
com_unattended Score_Double Trouble -0.3798972 0.0006550
com_leave_with_other Score_Double Trouble -0.2275942 0.0465168
com_locked Score_Double Trouble 0.2407271 0.0349496
com_room_task Score_Double Trouble -0.2745143 0.0156893
NMPQ_sum Score_Double Trouble 0.0640324 0.5800854
MPIQ_sum Score_Double Trouble 0.0503030 0.6639530
MPIQ_SI_sum Score_Double Trouble 0.1197804 0.2994477
MPIQ_VFO_sum Score_Double Trouble 0.1734918 0.1313111
SAD_sum Score_Double Trouble 0.1903894 0.0972081
SAD_dep_sum Score_Double Trouble 0.1557677 0.1761283
SAD_ea_sum Score_Double Trouble 0.1859873 0.1053392
SAD_dist_sum Score_Double Trouble 0.2030308 0.0765702
age Score_Odd One Out 0.2531280 0.0263397
age_first_phone Score_Odd One Out 0.0239956 0.8358955
dist_daily Score_Odd One Out 0.1605287 0.1631194
dist_study Score_Odd One Out 0.0459139 0.6917275
pow_not_using Score_Odd One Out -0.0422845 0.7150074
pow_notifications_on Score_Odd One Out -0.0605301 0.6010148
pow_vibrate Score_Odd One Out -0.0051869 0.9642903
pow_study Score_Odd One Out 0.0904539 0.4340073
pow_exam Score_Odd One Out -0.2124014 0.0636603
pow_lec Score_Odd One Out 0.0251711 0.8279767
pow_sleep Score_Odd One Out -0.0951447 0.4104482
com_gen Score_Odd One Out 0.0397626 0.7313393
com_unattended Score_Odd One Out 0.0574854 0.6194764
com_leave_with_other Score_Odd One Out 0.1751865 0.1275279
com_locked Score_Odd One Out 0.0436221 0.7063957
com_room_task Score_Odd One Out -0.0126527 0.9130319
NMPQ_sum Score_Odd One Out 0.0523063 0.6514216
MPIQ_sum Score_Odd One Out 0.1412799 0.2203464
MPIQ_SI_sum Score_Odd One Out 0.0683923 0.5545092
MPIQ_VFO_sum Score_Odd One Out 0.0144606 0.9006642
SAD_sum Score_Odd One Out 0.1364060 0.2368416
SAD_dep_sum Score_Odd One Out 0.1559468 0.1756255
SAD_ea_sum Score_Odd One Out -0.0197563 0.8645841
SAD_dist_sum Score_Odd One Out 0.2263142 0.0477961
Score_Double Trouble Score_Odd One Out 0.0072740 0.9499367
age Score_Digit Span 0.0654285 0.5718368
age_first_phone Score_Digit Span -0.0497803 0.6672377
dist_daily Score_Digit Span 0.0447657 0.6990627
dist_study Score_Digit Span 0.0611292 0.5974110
pow_not_using Score_Digit Span -0.1325737 0.2503977
pow_notifications_on Score_Digit Span 0.0120091 0.9174395
pow_vibrate Score_Digit Span -0.1519592 0.1870678
pow_study Score_Digit Span 0.0078394 0.9460511
pow_exam Score_Digit Span -0.1869255 0.1035633
pow_lec Score_Digit Span -0.3660264 0.0010614
pow_sleep Score_Digit Span -0.1046859 0.3648921
com_gen Score_Digit Span -0.1414699 0.2197202
com_unattended Score_Digit Span -0.1308621 0.2566207
com_leave_with_other Score_Digit Span -0.1068007 0.3552307
com_locked Score_Digit Span 0.0742962 0.5207619
com_room_task Score_Digit Span -0.0736779 0.5242467
NMPQ_sum Score_Digit Span 0.0542015 0.6396548
MPIQ_sum Score_Digit Span -0.0190655 0.8692764
MPIQ_SI_sum Score_Digit Span 0.1623207 0.1584116
MPIQ_VFO_sum Score_Digit Span 0.0507884 0.6609077
SAD_sum Score_Digit Span 0.1264154 0.2732764
SAD_dep_sum Score_Digit Span 0.0425538 0.7132708
SAD_ea_sum Score_Digit Span 0.2094374 0.0675379
SAD_dist_sum Score_Digit Span 0.2136771 0.0620478
Score_Double Trouble Score_Digit Span 0.1270408 0.2708910
Score_Odd One Out Score_Digit Span 0.1383949 0.2300102
age Score_Feature Match -0.1388352 0.2285165
age_first_phone Score_Feature Match 0.0129746 0.9108277
dist_daily Score_Feature Match -0.1139606 0.3237098
dist_study Score_Feature Match 0.1434210 0.2133620
pow_not_using Score_Feature Match 0.0039003 0.9731438
pow_notifications_on Score_Feature Match 0.0445247 0.7006054
pow_vibrate Score_Feature Match -0.2650310 0.0198368
pow_study Score_Feature Match -0.1168620 0.3114613
pow_exam Score_Feature Match -0.0838802 0.4682766
pow_lec Score_Feature Match -0.3174900 0.0048993
pow_sleep Score_Feature Match -0.1242807 0.2815238
com_gen Score_Feature Match -0.1044386 0.3660324
com_unattended Score_Feature Match -0.1172290 0.3099339
com_leave_with_other Score_Feature Match -0.2574570 0.0237917
com_locked Score_Feature Match 0.0644290 0.5777369
com_room_task Score_Feature Match -0.2118840 0.0643239
NMPQ_sum Score_Feature Match 0.1519938 0.1869663
MPIQ_sum Score_Feature Match 0.1121384 0.3315570
MPIQ_SI_sum Score_Feature Match 0.1552182 0.1776771
MPIQ_VFO_sum Score_Feature Match 0.2419554 0.0340033
SAD_sum Score_Feature Match 0.1933824 0.0919663
SAD_dep_sum Score_Feature Match 0.0438148 0.7051584
SAD_ea_sum Score_Feature Match 0.3000938 0.0080098
SAD_dist_sum Score_Feature Match 0.1219662 0.2906511
Score_Double Trouble Score_Feature Match 0.2615656 0.0215704
Score_Odd One Out Score_Feature Match -0.1128454 0.3284980
Score_Digit Span Score_Feature Match 0.3312217 0.0032562
age Score_Polygons -0.1473209 0.2010447
age_first_phone Score_Polygons 0.0563224 0.6265917
dist_daily Score_Polygons -0.0542805 0.6391664
dist_study Score_Polygons 0.0216396 0.8518156
pow_not_using Score_Polygons -0.0076607 0.9472794
pow_notifications_on Score_Polygons 0.0953503 0.4094329
pow_vibrate Score_Polygons -0.0931465 0.4203917
pow_study Score_Polygons 0.0410700 0.7228575
pow_exam Score_Polygons -0.0123311 0.9152343
pow_lec Score_Polygons -0.1129807 0.3279147
pow_sleep Score_Polygons -0.1565901 0.1738287
com_gen Score_Polygons -0.0384521 0.7398745
com_unattended Score_Polygons -0.1313484 0.2548422
com_leave_with_other Score_Polygons -0.1190690 0.3023477
com_locked Score_Polygons 0.0488501 0.6730988
com_room_task Score_Polygons -0.1010445 0.3819005
NMPQ_sum Score_Polygons 0.1618845 0.1595480
MPIQ_sum Score_Polygons 0.1455757 0.2064925
MPIQ_SI_sum Score_Polygons 0.2142505 0.0613339
MPIQ_VFO_sum Score_Polygons 0.1428690 0.2151476
SAD_sum Score_Polygons 0.2092231 0.0678255
SAD_dep_sum Score_Polygons 0.1310414 0.2559641
SAD_ea_sum Score_Polygons 0.1995603 0.0818519
SAD_dist_sum Score_Polygons 0.1773587 0.1228011
Score_Double Trouble Score_Polygons 0.1768940 0.1238009
Score_Odd One Out Score_Polygons 0.0903726 0.4344223
Score_Digit Span Score_Polygons 0.2337775 0.0407283
Score_Feature Match Score_Polygons 0.4027209 0.0002822
age Score_Paired Associates -0.1523359 0.1859645
age_first_phone Score_Paired Associates -0.0669436 0.5629477
dist_daily Score_Paired Associates 0.0188632 0.8706517
dist_study Score_Paired Associates -0.0912850 0.4297784
pow_not_using Score_Paired Associates -0.0167157 0.8852712
pow_notifications_on Score_Paired Associates 0.1576618 0.1708649
pow_vibrate Score_Paired Associates 0.0704677 0.5425273
pow_study Score_Paired Associates 0.0935637 0.4183044
pow_exam Score_Paired Associates -0.0347325 0.7642669
pow_lec Score_Paired Associates -0.0239041 0.8365126
pow_sleep Score_Paired Associates -0.0505088 0.6626612
com_gen Score_Paired Associates -0.0409217 0.7238174
com_unattended Score_Paired Associates 0.1345023 0.2435107
com_leave_with_other Score_Paired Associates 0.0985993 0.3935845
com_locked Score_Paired Associates 0.0029903 0.9794083
com_room_task Score_Paired Associates 0.0205040 0.8595102
NMPQ_sum Score_Paired Associates 0.0329402 0.7761051
MPIQ_sum Score_Paired Associates -0.0295472 0.7986534
MPIQ_SI_sum Score_Paired Associates 0.0503930 0.6633876
MPIQ_VFO_sum Score_Paired Associates -0.0064257 0.9557689
SAD_sum Score_Paired Associates -0.0131945 0.9093233
SAD_dep_sum Score_Paired Associates -0.0318572 0.7832828
SAD_ea_sum Score_Paired Associates 0.1216350 0.2919726
SAD_dist_sum Score_Paired Associates -0.1316267 0.2538281
Score_Double Trouble Score_Paired Associates 0.1999059 0.0813133
Score_Odd One Out Score_Paired Associates 0.0410474 0.7230035
Score_Digit Span Score_Paired Associates 0.2674462 0.0187002
Score_Feature Match Score_Paired Associates 0.1338283 0.2459026
Score_Polygons Score_Paired Associates 0.2427953 0.0333686
age Score_Token Search -0.0259424 0.8227902
age_first_phone Score_Token Search 0.1553383 0.1773377
dist_daily Score_Token Search -0.1265195 0.2728783
dist_study Score_Token Search 0.2011821 0.0793488
pow_not_using Score_Token Search -0.1100487 0.3407036
pow_notifications_on Score_Token Search 0.0536903 0.6428202
pow_vibrate Score_Token Search -0.1437295 0.2123685
pow_study Score_Token Search -0.0295441 0.7986741
pow_exam Score_Token Search -0.1529316 0.1842291
pow_lec Score_Token Search -0.1609510 0.1620009
pow_sleep Score_Token Search -0.0838297 0.4685451
com_gen Score_Token Search -0.2667483 0.0190228
com_unattended Score_Token Search -0.2414662 0.0343776
com_leave_with_other Score_Token Search -0.2364194 0.0384444
com_locked Score_Token Search -0.0036534 0.9748433
com_room_task Score_Token Search -0.1627505 0.1572977
NMPQ_sum Score_Token Search -0.0279317 0.8094481
MPIQ_sum Score_Token Search -0.0143124 0.9016775
MPIQ_SI_sum Score_Token Search -0.0474534 0.6819363
MPIQ_VFO_sum Score_Token Search -0.0555935 0.6310684
SAD_sum Score_Token Search -0.0404964 0.7265747
SAD_dep_sum Score_Token Search -0.1197213 0.2996879
SAD_ea_sum Score_Token Search -0.0120735 0.9169985
SAD_dist_sum Score_Token Search 0.0121685 0.9163477
Score_Double Trouble Score_Token Search 0.3379477 0.0026476
Score_Odd One Out Score_Token Search 0.0919164 0.4265812
Score_Digit Span Score_Token Search 0.2303132 0.0438930
Score_Feature Match Score_Token Search 0.1903767 0.0972306
Score_Polygons Score_Token Search 0.3160545 0.0051076
Score_Paired Associates Score_Token Search 0.1431881 0.2141140
age Score_Spatial Planning 0.1042617 0.3668492
age_first_phone Score_Spatial Planning 0.1284759 0.2654707
dist_daily Score_Spatial Planning -0.0690086 0.5509382
dist_study Score_Spatial Planning -0.1344501 0.2436953
pow_not_using Score_Spatial Planning -0.1689916 0.1417704
pow_notifications_on Score_Spatial Planning -0.2015337 0.0788142
pow_vibrate Score_Spatial Planning 0.1702621 0.1387558
pow_study Score_Spatial Planning -0.0918393 0.4269705
pow_exam Score_Spatial Planning 0.1129708 0.3279573
pow_lec Score_Spatial Planning 0.1296871 0.2609532
pow_sleep Score_Spatial Planning 0.0341909 0.7678390
com_gen Score_Spatial Planning 0.1507416 0.1906671
com_unattended Score_Spatial Planning 0.1033497 0.3710785
com_leave_with_other Score_Spatial Planning 0.1104468 0.3389489
com_locked Score_Spatial Planning -0.1675956 0.1451391
com_room_task Score_Spatial Planning 0.0658665 0.5692606
NMPQ_sum Score_Spatial Planning 0.0061015 0.9579987
MPIQ_sum Score_Spatial Planning -0.1267726 0.2719120
MPIQ_SI_sum Score_Spatial Planning -0.1459083 0.2054462
MPIQ_VFO_sum Score_Spatial Planning 0.0344710 0.7659910
SAD_sum Score_Spatial Planning -0.1751780 0.1275466
SAD_dep_sum Score_Spatial Planning -0.1419702 0.2180774
SAD_ea_sum Score_Spatial Planning -0.2142619 0.0613198
SAD_dist_sum Score_Spatial Planning -0.0760447 0.5109703
Score_Double Trouble Score_Spatial Planning 0.2116146 0.0646716
Score_Odd One Out Score_Spatial Planning -0.0291241 0.8014772
Score_Digit Span Score_Spatial Planning 0.0312371 0.7874010
Score_Feature Match Score_Spatial Planning 0.0983461 0.3948064
Score_Polygons Score_Spatial Planning 0.1927360 0.0930791
Score_Paired Associates Score_Spatial Planning 0.1497206 0.1937231
Score_Token Search Score_Spatial Planning 0.1508223 0.1904269
age Score_Rotations -0.1248556 0.2792864
age_first_phone Score_Rotations 0.0206670 0.8584052
dist_daily Score_Rotations -0.0527670 0.6485535
dist_study Score_Rotations 0.1108991 0.3369624
pow_not_using Score_Rotations -0.1410227 0.2211962
pow_notifications_on Score_Rotations 0.0741776 0.5214295
pow_vibrate Score_Rotations -0.0895479 0.4386441
pow_study Score_Rotations 0.1014586 0.3799423
pow_exam Score_Rotations 0.1873684 0.1027331
pow_lec Score_Rotations 0.2061073 0.0721193
pow_sleep Score_Rotations 0.2211209 0.0532872
com_gen Score_Rotations 0.0355693 0.7587585
com_unattended Score_Rotations -0.2686551 0.0181526
com_leave_with_other Score_Rotations -0.2117455 0.0645024
com_locked Score_Rotations 0.2032737 0.0762111
com_room_task Score_Rotations -0.1509036 0.1901852
NMPQ_sum Score_Rotations 0.0944072 0.4141022
MPIQ_sum Score_Rotations 0.0467899 0.6861496
MPIQ_SI_sum Score_Rotations 0.1065667 0.3562916
MPIQ_VFO_sum Score_Rotations 0.0699677 0.5454027
SAD_sum Score_Rotations 0.1032358 0.3716087
SAD_dep_sum Score_Rotations -0.0136013 0.9065396
SAD_ea_sum Score_Rotations 0.0660473 0.5681986
SAD_dist_sum Score_Rotations 0.0948653 0.4118303
Score_Double Trouble Score_Rotations 0.2452938 0.0315390
Score_Odd One Out Score_Rotations -0.2684611 0.0182396
Score_Digit Span Score_Rotations 0.0827961 0.4740654
Score_Feature Match Score_Rotations 0.2878779 0.0111236
Score_Polygons Score_Rotations 0.1869317 0.1035516
Score_Paired Associates Score_Rotations -0.0105758 0.9272646
Score_Token Search Score_Rotations 0.1906764 0.0966954
Score_Spatial Planning Score_Rotations 0.1564994 0.1740812
age Score_Spatial Span -0.2394660 0.0359441
age_first_phone Score_Spatial Span 0.0215240 0.8525980
dist_daily Score_Spatial Span -0.0474134 0.6821903
dist_study Score_Spatial Span 0.1743582 0.1293664
pow_not_using Score_Spatial Span -0.1724312 0.1337217
pow_notifications_on Score_Spatial Span -0.0562860 0.6268147
pow_vibrate Score_Spatial Span -0.0304172 0.7928551
pow_study Score_Spatial Span 0.0720043 0.5337386
pow_exam Score_Spatial Span 0.0903476 0.4345500
pow_lec Score_Spatial Span 0.1126805 0.3292097
pow_sleep Score_Spatial Span 0.1043950 0.3662333
com_gen Score_Spatial Span 0.1571169 0.1723672
com_unattended Score_Spatial Span -0.3104764 0.0059937
com_leave_with_other Score_Spatial Span -0.1926286 0.0932649
com_locked Score_Spatial Span -0.2303162 0.0438901
com_room_task Score_Spatial Span -0.0204581 0.8598216
NMPQ_sum Score_Spatial Span -0.1552694 0.1775325
MPIQ_sum Score_Spatial Span -0.1127635 0.3288513
MPIQ_SI_sum Score_Spatial Span -0.0957978 0.4072280
MPIQ_VFO_sum Score_Spatial Span 0.0216932 0.8514521
SAD_sum Score_Spatial Span -0.0766604 0.5075450
SAD_dep_sum Score_Spatial Span -0.1009251 0.3824662
SAD_ea_sum Score_Spatial Span -0.1424230 0.2165979
SAD_dist_sum Score_Spatial Span 0.0136292 0.9063491
Score_Double Trouble Score_Spatial Span 0.1893013 0.0991707
Score_Odd One Out Score_Spatial Span -0.0654459 0.5717344
Score_Digit Span Score_Spatial Span -0.0100672 0.9307540
Score_Feature Match Score_Spatial Span 0.0333705 0.7732584
Score_Polygons Score_Spatial Span 0.1814490 0.1142659
Score_Paired Associates Score_Spatial Span -0.0006932 0.9952262
Score_Token Search Score_Spatial Span 0.3604318 0.0012819
Score_Spatial Planning Score_Spatial Span 0.2704763 0.0173536
Score_Rotations Score_Spatial Span 0.1850014 0.1072307
age Score_Grammatical Reasoning -0.0989418 0.3919351
age_first_phone Score_Grammatical Reasoning -0.0078037 0.9462965
dist_daily Score_Grammatical Reasoning -0.0584597 0.6135424
dist_study Score_Grammatical Reasoning -0.0132838 0.9087119
pow_not_using Score_Grammatical Reasoning -0.0969295 0.4016837
pow_notifications_on Score_Grammatical Reasoning 0.1417518 0.2187936
pow_vibrate Score_Grammatical Reasoning 0.0506088 0.6620335
pow_study Score_Grammatical Reasoning -0.0595176 0.6071273
pow_exam Score_Grammatical Reasoning 0.0375350 0.7458662
pow_lec Score_Grammatical Reasoning 0.0787100 0.4962277
pow_sleep Score_Grammatical Reasoning -0.0735065 0.5252152
com_gen Score_Grammatical Reasoning -0.1965273 0.0867011
com_unattended Score_Grammatical Reasoning -0.0370994 0.7487168
com_leave_with_other Score_Grammatical Reasoning -0.0971931 0.4003984
com_locked Score_Grammatical Reasoning 0.0421626 0.7157941
com_room_task Score_Grammatical Reasoning -0.0444399 0.7011488
NMPQ_sum Score_Grammatical Reasoning -0.0461124 0.6904620
MPIQ_sum Score_Grammatical Reasoning -0.0279459 0.8093535
MPIQ_SI_sum Score_Grammatical Reasoning 0.1472372 0.2013038
MPIQ_VFO_sum Score_Grammatical Reasoning 0.2450435 0.0317184
SAD_sum Score_Grammatical Reasoning 0.1057580 0.3599743
SAD_dep_sum Score_Grammatical Reasoning 0.0456762 0.6932437
SAD_ea_sum Score_Grammatical Reasoning 0.0925929 0.4231707
SAD_dist_sum Score_Grammatical Reasoning -0.0707652 0.5408206
Score_Double Trouble Score_Grammatical Reasoning 0.2801663 0.0135917
Score_Odd One Out Score_Grammatical Reasoning -0.0229086 0.8432331
Score_Digit Span Score_Grammatical Reasoning 0.1136918 0.3248595
Score_Feature Match Score_Grammatical Reasoning 0.2751795 0.0154287
Score_Polygons Score_Grammatical Reasoning 0.2525561 0.0266929
Score_Paired Associates Score_Grammatical Reasoning 0.2786702 0.0141218
Score_Token Search Score_Grammatical Reasoning 0.1897005 0.0984471
Score_Spatial Planning Score_Grammatical Reasoning 0.2351461 0.0395315
Score_Rotations Score_Grammatical Reasoning 0.1293674 0.2621403
Score_Spatial Span Score_Grammatical Reasoning 0.3064421 0.0067166
age Score_Monkey Ladder -0.1031293 0.3721052
age_first_phone Score_Monkey Ladder 0.2438158 0.0326108
dist_daily Score_Monkey Ladder -0.1539332 0.1813378
dist_study Score_Monkey Ladder -0.0190807 0.8691734
pow_not_using Score_Monkey Ladder -0.0745119 0.5195486
pow_notifications_on Score_Monkey Ladder 0.0379224 0.7433332
pow_vibrate Score_Monkey Ladder 0.0783153 0.4983968
pow_study Score_Monkey Ladder -0.0692325 0.5496436
pow_exam Score_Monkey Ladder 0.1730757 0.1322527
pow_lec Score_Monkey Ladder -0.0910745 0.4308470
pow_sleep Score_Monkey Ladder -0.1382797 0.2304018
com_gen Score_Monkey Ladder -0.0961843 0.4053298
com_unattended Score_Monkey Ladder 0.1361297 0.2378017
com_leave_with_other Score_Monkey Ladder 0.0151566 0.8959089
com_locked Score_Monkey Ladder -0.0860809 0.4566435
com_room_task Score_Monkey Ladder 0.0161073 0.8894203
NMPQ_sum Score_Monkey Ladder -0.2322304 0.0421174
MPIQ_sum Score_Monkey Ladder -0.2274315 0.0466778
MPIQ_SI_sum Score_Monkey Ladder -0.3003353 0.0079569
MPIQ_VFO_sum Score_Monkey Ladder -0.0611370 0.5973644
SAD_sum Score_Monkey Ladder -0.1789048 0.1195193
SAD_dep_sum Score_Monkey Ladder -0.1650077 0.1515423
SAD_ea_sum Score_Monkey Ladder -0.1175449 0.3086226
SAD_dist_sum Score_Monkey Ladder -0.1118288 0.3329021
Score_Double Trouble Score_Monkey Ladder 0.1656485 0.1499374
Score_Odd One Out Score_Monkey Ladder -0.1566137 0.1737629
Score_Digit Span Score_Monkey Ladder 0.0938098 0.4170756
Score_Feature Match Score_Monkey Ladder 0.0333459 0.7734210
Score_Polygons Score_Monkey Ladder 0.0324678 0.7792341
Score_Paired Associates Score_Monkey Ladder 0.1534653 0.1826843
Score_Token Search Score_Monkey Ladder 0.2725018 0.0165008
Score_Spatial Planning Score_Monkey Ladder 0.2983980 0.0083902
Score_Rotations Score_Monkey Ladder -0.0733898 0.5258747
Score_Spatial Span Score_Monkey Ladder 0.2685038 0.0182204
Score_Grammatical Reasoning Score_Monkey Ladder 0.2913734 0.0101400
age CBS_overall -0.1572636 0.1719617
age_first_phone CBS_overall 0.0788809 0.4952902
dist_daily CBS_overall -0.0792368 0.4933402
dist_study CBS_overall 0.0798986 0.4897254
pow_not_using CBS_overall -0.2474502 0.0300284
pow_notifications_on CBS_overall 0.0756186 0.5133475
pow_vibrate CBS_overall -0.0992705 0.3903564
pow_study CBS_overall 0.0716346 0.5358466
pow_exam CBS_overall 0.0094620 0.9349074
pow_lec CBS_overall -0.0808968 0.4843002
pow_sleep CBS_overall -0.0542252 0.6395082
com_gen CBS_overall -0.1191223 0.3021302
com_unattended CBS_overall -0.2105589 0.0660489
com_leave_with_other CBS_overall -0.1819476 0.1132575
com_locked CBS_overall 0.0389438 0.7366681
com_room_task CBS_overall -0.1648398 0.1519651
NMPQ_sum CBS_overall 0.0257747 0.8239171
MPIQ_sum CBS_overall -0.0131690 0.9094975
MPIQ_SI_sum CBS_overall 0.0749097 0.5173155
MPIQ_VFO_sum CBS_overall 0.1471121 0.2016912
SAD_sum CBS_overall 0.0997037 0.3882812
SAD_dep_sum CBS_overall -0.0003582 0.9975332
SAD_ea_sum CBS_overall 0.1150297 0.3191610
SAD_dist_sum CBS_overall 0.1216042 0.2920960
Score_Double Trouble CBS_overall 0.5624384 0.0000001
Score_Odd One Out CBS_overall 0.1339297 0.2455417
Score_Digit Span CBS_overall 0.4784917 0.0000107
Score_Feature Match CBS_overall 0.5017534 0.0000033
Score_Polygons CBS_overall 0.5847317 0.0000000
Score_Paired Associates CBS_overall 0.4618059 0.0000236
Score_Token Search CBS_overall 0.6190360 0.0000000
Score_Spatial Planning CBS_overall 0.4867594 0.0000072
Score_Rotations CBS_overall 0.3635611 0.0011539
Score_Spatial Span CBS_overall 0.4813172 0.0000094
Score_Grammatical Reasoning CBS_overall 0.5755141 0.0000000
Score_Monkey Ladder CBS_overall 0.4208836 0.0001381
age CBS_STM -0.2057873 0.0725723
age_first_phone CBS_STM 0.1392487 0.2271198
dist_daily CBS_STM -0.1219899 0.2905565
dist_study CBS_STM 0.1066903 0.3557308
pow_not_using CBS_STM -0.1482965 0.1980448
pow_notifications_on CBS_STM 0.0758886 0.5118403
pow_vibrate CBS_STM -0.0115213 0.9207821
pow_study CBS_STM 0.0267400 0.8174345
pow_exam CBS_STM 0.0283161 0.8068766
pow_lec CBS_STM -0.0644330 0.5777128
pow_sleep CBS_STM -0.0656538 0.5705108
com_gen CBS_STM -0.0978121 0.3973906
com_unattended CBS_STM -0.1145190 0.3213286
com_leave_with_other CBS_STM -0.1267306 0.2720724
com_locked CBS_STM -0.1254589 0.2769516
com_room_task CBS_STM -0.0590233 0.6101212
NMPQ_sum CBS_STM -0.1503341 0.1918824
MPIQ_sum CBS_STM -0.1506781 0.1908561
MPIQ_SI_sum CBS_STM -0.1540832 0.1809078
MPIQ_VFO_sum CBS_STM -0.0399326 0.7302345
SAD_sum CBS_STM -0.1214930 0.2925409
SAD_dep_sum CBS_STM -0.1648392 0.1519664
SAD_ea_sum CBS_STM -0.0593754 0.6079875
SAD_dist_sum CBS_STM -0.0849722 0.4624840
Score_Double Trouble CBS_STM 0.3538473 0.0015939
Score_Odd One Out CBS_STM -0.0339625 0.7693468
Score_Digit Span CBS_STM 0.2299896 0.0441986
Score_Feature Match CBS_STM 0.1551948 0.1777434
Score_Polygons CBS_STM 0.3070528 0.0066024
Score_Paired Associates CBS_STM 0.5102953 0.0000021
Score_Token Search CBS_STM 0.7064676 0.0000000
Score_Spatial Planning CBS_STM 0.3430526 0.0022559
Score_Rotations CBS_STM 0.1173683 0.3093552
Score_Spatial Span CBS_STM 0.6467020 0.0000000
Score_Grammatical Reasoning CBS_STM 0.4209665 0.0001377
Score_Monkey Ladder CBS_STM 0.6652455 0.0000000
CBS_overall CBS_STM 0.7850367 0.0000000
age CBS_reason -0.0143406 0.9014845
age_first_phone CBS_reason 0.0939261 0.4164959
dist_daily CBS_reason -0.0448221 0.6987017
dist_study CBS_reason 0.0645415 0.5770714
pow_not_using CBS_reason -0.1364828 0.2365752
pow_notifications_on CBS_reason -0.0206244 0.8586938
pow_vibrate CBS_reason -0.0969268 0.4016967
pow_study CBS_reason 0.0140280 0.9036217
pow_exam CBS_reason -0.0019658 0.9864623
pow_lec CBS_reason -0.0162106 0.8887154
pow_sleep CBS_reason -0.0460671 0.6907503
com_gen CBS_reason 0.0362877 0.7540386
com_unattended CBS_reason -0.1305608 0.2577271
com_leave_with_other CBS_reason -0.1036935 0.3694809
com_locked CBS_reason 0.0693313 0.5490723
com_room_task CBS_reason -0.1483741 0.1978074
NMPQ_sum CBS_reason 0.1745949 0.1288390
MPIQ_sum CBS_reason 0.1195954 0.3002004
MPIQ_SI_sum CBS_reason 0.1484414 0.1976018
MPIQ_VFO_sum CBS_reason 0.1847966 0.1076271
SAD_sum CBS_reason 0.1731821 0.1320116
SAD_dep_sum CBS_reason 0.0677237 0.5583960
SAD_ea_sum CBS_reason 0.1159880 0.3151191
SAD_dist_sum CBS_reason 0.2063341 0.0717996
Score_Double Trouble CBS_reason 0.3366554 0.0027559
Score_Odd One Out CBS_reason 0.2740021 0.0158925
Score_Digit Span CBS_reason 0.3032404 0.0073438
Score_Feature Match CBS_reason 0.6039105 0.0000000
Score_Polygons CBS_reason 0.7178451 0.0000000
Score_Paired Associates CBS_reason 0.2130237 0.0628696
Score_Token Search CBS_reason 0.3570290 0.0014355
Score_Spatial Planning CBS_reason 0.5463132 0.0000003
Score_Rotations CBS_reason 0.5033880 0.0000031
Score_Spatial Span CBS_reason 0.2329261 0.0414880
Score_Grammatical Reasoning CBS_reason 0.3257313 0.0038425
Score_Monkey Ladder CBS_reason 0.0520817 0.6528216
CBS_overall CBS_reason 0.7821326 0.0000000
CBS_STM CBS_reason 0.3398756 0.0024930
age CBS_verbal -0.1599268 0.1647237
age_first_phone CBS_verbal -0.0752379 0.5154764
dist_daily CBS_verbal -0.0098029 0.9325672
dist_study CBS_verbal 0.0059411 0.9591020
pow_not_using CBS_verbal -0.3286101 0.0035243
pow_notifications_on CBS_verbal 0.1408984 0.2216078
pow_vibrate CBS_verbal -0.1388724 0.2283907
pow_study CBS_verbal 0.1478750 0.1993371
pow_exam CBS_verbal -0.0068958 0.9525365
pow_lec CBS_verbal -0.1233306 0.2852473
pow_sleep CBS_verbal -0.0096824 0.9333944
com_gen CBS_verbal -0.2541990 0.0256887
com_unattended CBS_verbal -0.2760471 0.0150945
com_leave_with_other CBS_verbal -0.2150692 0.0603261
com_locked CBS_verbal 0.1787754 0.1197913
com_room_task CBS_verbal -0.1962122 0.0872175
NMPQ_sum CBS_verbal 0.0400079 0.7297453
MPIQ_sum CBS_verbal 0.0017877 0.9876891
MPIQ_SI_sum CBS_verbal 0.2146797 0.0608039
MPIQ_VFO_sum CBS_verbal 0.2255305 0.0485936
SAD_sum CBS_verbal 0.2112005 0.0652091
SAD_dep_sum CBS_verbal 0.1210997 0.2941176
SAD_ea_sum CBS_verbal 0.2480201 0.0296395
SAD_dist_sum CBS_verbal 0.1840402 0.1091003
Score_Double Trouble CBS_verbal 0.6922094 0.0000000
Score_Odd One Out CBS_verbal 0.0681721 0.5557879
Score_Digit Span CBS_verbal 0.6571860 0.0000000
Score_Feature Match CBS_verbal 0.4349987 0.0000770
Score_Polygons CBS_verbal 0.3298822 0.0033913
Score_Paired Associates CBS_verbal 0.3714791 0.0008801
Score_Token Search CBS_verbal 0.3790033 0.0006761
Score_Spatial Planning CBS_verbal 0.2292786 0.0448765
Score_Rotations CBS_verbal 0.2255327 0.0485913
Score_Spatial Span CBS_verbal 0.2284414 0.0456857
Score_Grammatical Reasoning CBS_verbal 0.6577741 0.0000000
Score_Monkey Ladder CBS_verbal 0.2661671 0.0192950
CBS_overall CBS_verbal 0.8012142 0.0000000
CBS_STM CBS_verbal 0.4924799 0.0000054
CBS_reason CBS_verbal 0.4801294 0.0000099
age CBS_ts_memory -0.2057873 0.0725723
age_first_phone CBS_ts_memory 0.1392487 0.2271198
dist_daily CBS_ts_memory -0.1219899 0.2905565
dist_study CBS_ts_memory 0.1066903 0.3557308
pow_not_using CBS_ts_memory -0.1482965 0.1980448
pow_notifications_on CBS_ts_memory 0.0758886 0.5118403
pow_vibrate CBS_ts_memory -0.0115213 0.9207821
pow_study CBS_ts_memory 0.0267400 0.8174345
pow_exam CBS_ts_memory 0.0283161 0.8068766
pow_lec CBS_ts_memory -0.0644330 0.5777128
pow_sleep CBS_ts_memory -0.0656538 0.5705108
com_gen CBS_ts_memory -0.0978121 0.3973906
com_unattended CBS_ts_memory -0.1145190 0.3213286
com_leave_with_other CBS_ts_memory -0.1267306 0.2720724
com_locked CBS_ts_memory -0.1254589 0.2769516
com_room_task CBS_ts_memory -0.0590233 0.6101212
NMPQ_sum CBS_ts_memory -0.1503341 0.1918824
MPIQ_sum CBS_ts_memory -0.1506781 0.1908561
MPIQ_SI_sum CBS_ts_memory -0.1540832 0.1809078
MPIQ_VFO_sum CBS_ts_memory -0.0399326 0.7302345
SAD_sum CBS_ts_memory -0.1214930 0.2925409
SAD_dep_sum CBS_ts_memory -0.1648392 0.1519664
SAD_ea_sum CBS_ts_memory -0.0593754 0.6079875
SAD_dist_sum CBS_ts_memory -0.0849722 0.4624840
Score_Double Trouble CBS_ts_memory 0.3538473 0.0015939
Score_Odd One Out CBS_ts_memory -0.0339625 0.7693468
Score_Digit Span CBS_ts_memory 0.2299896 0.0441986
Score_Feature Match CBS_ts_memory 0.1551948 0.1777434
Score_Polygons CBS_ts_memory 0.3070528 0.0066024
Score_Paired Associates CBS_ts_memory 0.5102953 0.0000021
Score_Token Search CBS_ts_memory 0.7064676 0.0000000
Score_Spatial Planning CBS_ts_memory 0.3430526 0.0022559
Score_Rotations CBS_ts_memory 0.1173683 0.3093552
Score_Spatial Span CBS_ts_memory 0.6467020 0.0000000
Score_Grammatical Reasoning CBS_ts_memory 0.4209665 0.0001377
Score_Monkey Ladder CBS_ts_memory 0.6652455 0.0000000
CBS_overall CBS_ts_memory 0.7850367 0.0000000
CBS_STM CBS_ts_memory 1.0000000 0.0000000
CBS_reason CBS_ts_memory 0.3398756 0.0024930
CBS_verbal CBS_ts_memory 0.4924799 0.0000054
age CBS_ts_reason 0.0392118 0.7349225
age_first_phone CBS_ts_reason 0.1066245 0.3560294
dist_daily CBS_ts_reason -0.0071840 0.9505557
dist_study CBS_ts_reason 0.0187283 0.8715684
pow_not_using CBS_ts_reason -0.1641607 0.1536832
pow_notifications_on CBS_ts_reason -0.0426217 0.7128331
pow_vibrate CBS_ts_reason -0.0079960 0.9449755
pow_study CBS_ts_reason 0.0640951 0.5797138
pow_exam CBS_ts_reason 0.0316698 0.7845271
pow_lec CBS_ts_reason 0.1094247 0.3434650
pow_sleep CBS_ts_reason -0.0044826 0.9691366
com_gen CBS_ts_reason 0.0855736 0.4593106
com_unattended CBS_ts_reason -0.1079913 0.3498617
com_leave_with_other CBS_ts_reason -0.0191275 0.8688552
com_locked CBS_ts_reason 0.0564635 0.6257263
com_room_task CBS_ts_reason -0.0908302 0.4320893
NMPQ_sum CBS_ts_reason 0.1463487 0.2040666
MPIQ_sum CBS_ts_reason 0.0969933 0.4013724
MPIQ_SI_sum CBS_ts_reason 0.1138871 0.3240238
MPIQ_VFO_sum CBS_ts_reason 0.1220237 0.2904220
SAD_sum CBS_ts_reason 0.1278836 0.2676987
SAD_dep_sum CBS_ts_reason 0.0629071 0.5867736
SAD_ea_sum CBS_ts_reason 0.0164846 0.8868467
SAD_dist_sum CBS_ts_reason 0.1963322 0.0870206
Score_Double Trouble CBS_ts_reason 0.2949675 0.0092086
Score_Odd One Out CBS_ts_reason 0.3721495 0.0008599
Score_Digit Span CBS_ts_reason 0.2269193 0.0471878
Score_Feature Match CBS_ts_reason 0.3139055 0.0054342
Score_Polygons CBS_ts_reason 0.6918081 0.0000000
Score_Paired Associates CBS_ts_reason 0.1994910 0.0819601
Score_Token Search CBS_ts_reason 0.3481021 0.0019205
Score_Spatial Planning CBS_ts_reason 0.6108951 0.0000000
Score_Rotations CBS_ts_reason 0.4829115 0.0000087
Score_Spatial Span CBS_ts_reason 0.2639323 0.0203730
Score_Grammatical Reasoning CBS_ts_reason 0.2764345 0.0149473
Score_Monkey Ladder CBS_ts_reason 0.0485192 0.6751890
CBS_overall CBS_ts_reason 0.7282325 0.0000000
CBS_STM CBS_ts_reason 0.3419344 0.0023369
CBS_reason CBS_ts_reason 0.9463354 0.0000000
CBS_verbal CBS_ts_reason 0.3955516 0.0003701
CBS_ts_memory CBS_ts_reason 0.3419344 0.0023369
age CBS_ts_verbalab -0.0130658 0.9102036
age_first_phone CBS_ts_verbalab -0.0408550 0.7242498
dist_daily CBS_ts_verbalab -0.0032930 0.9773245
dist_study CBS_ts_verbalab 0.0361886 0.7546894
pow_not_using CBS_ts_verbalab -0.1553599 0.1772768
pow_notifications_on CBS_ts_verbalab 0.0953713 0.4093296
pow_vibrate CBS_ts_verbalab -0.0792075 0.4935005
pow_study CBS_ts_verbalab -0.0307062 0.7909314
pow_exam CBS_ts_verbalab -0.1125466 0.3297886
pow_lec CBS_ts_verbalab -0.2171958 0.0577712
pow_sleep CBS_ts_verbalab -0.1208243 0.2952250
com_gen CBS_ts_verbalab -0.2227020 0.0515633
com_unattended CBS_ts_verbalab -0.1175394 0.3086455
com_leave_with_other CBS_ts_verbalab -0.1368391 0.2353419
com_locked CBS_ts_verbalab 0.0796325 0.4911774
com_room_task CBS_ts_verbalab -0.0805767 0.4860365
NMPQ_sum CBS_ts_verbalab 0.0110958 0.9236990
MPIQ_sum CBS_ts_verbalab -0.0309058 0.7896035
MPIQ_SI_sum CBS_ts_verbalab 0.2076802 0.0699253
MPIQ_VFO_sum CBS_ts_verbalab 0.1866329 0.1041146
SAD_sum CBS_ts_verbalab 0.1562936 0.1746552
SAD_dep_sum CBS_ts_verbalab 0.0587718 0.6116467
SAD_ea_sum CBS_ts_verbalab 0.2084241 0.0689064
SAD_dist_sum CBS_ts_verbalab 0.1116211 0.3338067
Score_Double Trouble CBS_ts_verbalab 0.2633793 0.0206476
Score_Odd One Out CBS_ts_verbalab 0.0863110 0.4554362
Score_Digit Span CBS_ts_verbalab 0.7943728 0.0000000
Score_Feature Match CBS_ts_verbalab 0.4083334 0.0002273
Score_Polygons CBS_ts_verbalab 0.3238680 0.0040618
Score_Paired Associates CBS_ts_verbalab 0.3642392 0.0011278
Score_Token Search CBS_ts_verbalab 0.2829272 0.0126584
Score_Spatial Planning CBS_ts_verbalab 0.1664097 0.1480477
Score_Rotations CBS_ts_verbalab 0.1391104 0.2275865
Score_Spatial Span CBS_ts_verbalab 0.1800598 0.1171118
Score_Grammatical Reasoning CBS_ts_verbalab 0.6938056 0.0000000
Score_Monkey Ladder CBS_ts_verbalab 0.2461434 0.0309364
CBS_overall CBS_ts_verbalab 0.6987068 0.0000000
CBS_STM CBS_ts_verbalab 0.4240875 0.0001213
CBS_reason CBS_ts_verbalab 0.4189579 0.0001493
CBS_verbal CBS_ts_verbalab 0.8785289 0.0000000
CBS_ts_memory CBS_ts_verbalab 0.4240875 0.0001213
CBS_ts_reason CBS_ts_verbalab 0.3334958 0.0030377
age CBS_ts_con -0.2850013 0.0119944
age_first_phone CBS_ts_con -0.0530062 0.6470661
dist_daily CBS_ts_con -0.0766947 0.5073544
dist_study CBS_ts_con 0.0553231 0.6327324
pow_not_using CBS_ts_con -0.2858352 0.0117361
pow_notifications_on CBS_ts_con 0.1204264 0.2968301
pow_vibrate CBS_ts_con -0.2632159 0.0207293
pow_study CBS_ts_con 0.1633330 0.1557971
pow_exam CBS_ts_con 0.0557448 0.6301381
pow_lec CBS_ts_con -0.1328109 0.2495439
pow_sleep CBS_ts_con 0.0367060 0.7512950
com_gen CBS_ts_con -0.1799906 0.1172550
com_unattended CBS_ts_con -0.3238481 0.0040642
com_leave_with_other CBS_ts_con -0.3036595 0.0072589
com_locked CBS_ts_con 0.1994396 0.0820405
com_room_task CBS_ts_con -0.3084894 0.0063407
NMPQ_sum CBS_ts_con 0.1320250 0.2523814
MPIQ_sum CBS_ts_con 0.0994620 0.3894383
MPIQ_SI_sum CBS_ts_con 0.1713620 0.1361855
MPIQ_VFO_sum CBS_ts_con 0.2582380 0.0233551
SAD_sum CBS_ts_con 0.2411435 0.0346264
SAD_dep_sum CBS_ts_con 0.1302960 0.2587020
SAD_ea_sum CBS_ts_con 0.3006792 0.0078820
SAD_dist_sum CBS_ts_con 0.2078123 0.0697434
Score_Double Trouble CBS_ts_con 0.8249292 0.0000000
Score_Odd One Out CBS_ts_con -0.0611986 0.5969939
Score_Digit Span CBS_ts_con 0.2793111 0.0138925
Score_Feature Match CBS_ts_con 0.7613308 0.0000000
Score_Polygons CBS_ts_con 0.3546717 0.0015514
Score_Paired Associates CBS_ts_con 0.2126599 0.0633309
Score_Token Search CBS_ts_con 0.3385056 0.0026020
Score_Spatial Planning CBS_ts_con 0.1997460 0.0815621
Score_Rotations CBS_ts_con 0.3333644 0.0030499
Score_Spatial Span CBS_ts_con 0.1467057 0.2029533
Score_Grammatical Reasoning CBS_ts_con 0.3493535 0.0018446
Score_Monkey Ladder CBS_ts_con 0.1308026 0.2568391
CBS_overall CBS_ts_con 0.6716570 0.0000000
CBS_STM CBS_ts_con 0.3285828 0.0035272
CBS_reason CBS_ts_con 0.5798128 0.0000000
CBS_verbal CBS_ts_con 0.7197375 0.0000000
CBS_ts_memory CBS_ts_con 0.3285828 0.0035272
CBS_ts_reason CBS_ts_con 0.3819751 0.0006081
CBS_ts_verbalab CBS_ts_con 0.4160550 0.0001677

# print tables using kable
kable(as.data.frame(format(main_corr_out2$r, scientific = FALSE)), caption = "Study 2 - Correlation: r values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: r values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.1809 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily -0.0708 -0.1261 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study -1e-04 0.1336 0.1094 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 2e-04 0.1454 0.0373 0.0279 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on -0.1803 0.1134 0.2166 0.13 -0.0116 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.0589 -1e-04 -0.0149 -0.0387 -0.0285 0.2075 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study -0.2098 -0.1775 0.399 0.1527 -0.4341 0.1955 -0.0886 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam -0.2313 -0.1638 0.1597 0.0237 -0.2343 0.0099 -0.0479 0.2695 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.0598 -0.1471 0.062 -0.075 -0.177 0.0655 0.2454 0.2092 0.2511 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep -0.0559 -0.3361 -0.0303 -0.1311 -0.2943 -0.1166 0.0952 0.4159 0.3205 0.5319 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen -0.0391 -0.0513 0.1002 -0.1335 0.0884 -0.0043 0.1132 0.0893 0.0412 0.2084 0.234 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.2221 0.0126 0.0078 -0.0478 0.2236 0.002 0.0922 -0.1709 0.091 0.0175 -0.0745 0.3607 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.1212 -0.0869 0.1594 -0.0421 0.1764 0.0565 0.1441 -0.004 0.062 0.2064 0.0374 0.5072 0.7228 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 0.0074 -0.076 0.206 -0.065 -0.1162 0.2494 -0.1117 0.1841 0.0359 0.0366 0.0463 -0.3502 -0.2935 -0.3301 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.178 0.1214 0.0153 -0.1411 0.1191 -0.0908 0.0284 -0.0727 0.0435 0.2417 0.1857 0.4128 0.3837 0.3541 -0.2177 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum -0.2199 -0.0328 0.3447 0.2267 -0.0575 0.2563 -0.162 0.2598 0.0849 -0.0649 0.0174 -0.1003 0.0424 0.0821 0.1044 -0.1898 1 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum -0.2383 -0.1005 0.3789 0.2717 -0.01 0.1796 -0.2297 0.2829 0.1062 0.1171 0.0636 -0.1059 0.0273 0.1133 0.1658 -0.0942 0.7591 1 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum -0.1047 -0.1177 0.1135 0.1674 -0.0497 0.4038 -0.0319 0.1979 -0.0563 0.0896 0.1323 -0.1804 -0.1077 -0.0359 0.1668 -0.2286 0.6571 0.6064 1 - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum -0.0734 0.1694 0.1232 0.1272 0.0331 0.328 -0.0099 0.0664 -0.0456 0.0768 -0.15 -0.0917 -0.0451 -0.0229 0.0216 -0.1151 0.5578 0.4871 0.4513 1 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum -0.2871 -0.0443 0.3067 0.1383 -0.1363 0.3722 -0.098 0.3354 -0.0584 0.0146 -0.071 -0.0642 -0.1474 -0.0133 0.0952 -0.267 0.7708 0.7231 0.6586 0.6733 1 - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum -0.2992 -0.178 0.2376 0.0299 -0.1232 0.3576 0.0308 0.3296 0.0508 0.1094 0.061 0.0373 -0.0317 0.1536 0.0419 -0.1708 0.6856 0.6372 0.627 0.5728 0.8819 1 - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum -0.2332 0.0589 0.2423 0.1024 -0.0075 0.2557 -0.1289 0.2574 -0.1571 -0.181 -0.1013 -0.1035 -0.2034 -0.1055 0.0394 -0.2921 0.6002 0.5123 0.499 0.5521 0.808 0.6159 1 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum -0.0875 0.0362 0.4047 0.1331 -0.1061 0.2951 -0.1358 0.239 -0.0792 0.045 -0.1637 -0.0099 -0.1382 0.0054 0.1503 -0.1604 0.4717 0.5456 0.3861 0.4847 0.6538 0.5047 0.3423 1 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble -0.3032 -0.0902 -0.0148 -0.0427 -0.4289 0.1405 -0.1608 0.345 0.1561 0.0791 0.163 -0.1769 -0.3799 -0.2276 0.2407 -0.2745 0.064 0.0503 0.1198 0.1735 0.1904 0.1558 0.186 0.203 1 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 0.2531 0.024 0.1605 0.0459 -0.0423 -0.0605 -0.0052 0.0905 -0.2124 0.0252 -0.0951 0.0398 0.0575 0.1752 0.0436 -0.0127 0.0523 0.1413 0.0684 0.0145 0.1364 0.1559 -0.0198 0.2263 0.0073 1 - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.0654 -0.0498 0.0448 0.0611 -0.1326 0.012 -0.152 0.0078 -0.1869 -0.366 -0.1047 -0.1415 -0.1309 -0.1068 0.0743 -0.0737 0.0542 -0.0191 0.1623 0.0508 0.1264 0.0426 0.2094 0.2137 0.127 0.1384 1 - - - - - - - - - - - - - - - - -
Score_Feature Match -0.1388 0.013 -0.114 0.1434 0.0039 0.0445 -0.265 -0.1169 -0.0839 -0.3175 -0.1243 -0.1044 -0.1172 -0.2575 0.0644 -0.2119 0.152 0.1121 0.1552 0.242 0.1934 0.0438 0.3001 0.122 0.2616 -0.1128 0.3312 1 - - - - - - - - - - - - - - - -
Score_Polygons -0.1473 0.0563 -0.0543 0.0216 -0.0077 0.0954 -0.0931 0.0411 -0.0123 -0.113 -0.1566 -0.0385 -0.1313 -0.1191 0.0489 -0.101 0.1619 0.1456 0.2143 0.1429 0.2092 0.131 0.1996 0.1774 0.1769 0.0904 0.2338 0.4027 1 - - - - - - - - - - - - - - -
Score_Paired Associates -0.1523 -0.0669 0.0189 -0.0913 -0.0167 0.1577 0.0705 0.0936 -0.0347 -0.0239 -0.0505 -0.0409 0.1345 0.0986 0.003 0.0205 0.0329 -0.0295 0.0504 -0.0064 -0.0132 -0.0319 0.1216 -0.1316 0.1999 0.041 0.2674 0.1338 0.2428 1 - - - - - - - - - - - - - -
Score_Token Search -0.0259 0.1553 -0.1265 0.2012 -0.11 0.0537 -0.1437 -0.0295 -0.1529 -0.161 -0.0838 -0.2667 -0.2415 -0.2364 -0.0037 -0.1628 -0.0279 -0.0143 -0.0475 -0.0556 -0.0405 -0.1197 -0.0121 0.0122 0.3379 0.0919 0.2303 0.1904 0.3161 0.1432 1 - - - - - - - - - - - - -
Score_Spatial Planning 0.1043 0.1285 -0.069 -0.1345 -0.169 -0.2015 0.1703 -0.0918 0.113 0.1297 0.0342 0.1507 0.1033 0.1104 -0.1676 0.0659 0.0061 -0.1268 -0.1459 0.0345 -0.1752 -0.142 -0.2143 -0.076 0.2116 -0.0291 0.0312 0.0983 0.1927 0.1497 0.1508 1 - - - - - - - - - - - -
Score_Rotations -0.1249 0.0207 -0.0528 0.1109 -0.141 0.0742 -0.0895 0.1015 0.1874 0.2061 0.2211 0.0356 -0.2687 -0.2117 0.2033 -0.1509 0.0944 0.0468 0.1066 0.07 0.1032 -0.0136 0.066 0.0949 0.2453 -0.2685 0.0828 0.2879 0.1869 -0.0106 0.1907 0.1565 1 - - - - - - - - - - -
Score_Spatial Span -0.2395 0.0215 -0.0474 0.1744 -0.1724 -0.0563 -0.0304 0.072 0.0903 0.1127 0.1044 0.1571 -0.3105 -0.1926 -0.2303 -0.0205 -0.1553 -0.1128 -0.0958 0.0217 -0.0767 -0.1009 -0.1424 0.0136 0.1893 -0.0654 -0.0101 0.0334 0.1814 -7e-04 0.3604 0.2705 0.185 1 - - - - - - - - - -
Score_Grammatical Reasoning -0.0989 -0.0078 -0.0585 -0.0133 -0.0969 0.1418 0.0506 -0.0595 0.0375 0.0787 -0.0735 -0.1965 -0.0371 -0.0972 0.0422 -0.0444 -0.0461 -0.0279 0.1472 0.245 0.1058 0.0457 0.0926 -0.0708 0.2802 -0.0229 0.1137 0.2752 0.2526 0.2787 0.1897 0.2351 0.1294 0.3064 1 - - - - - - - - -
Score_Monkey Ladder -0.1031 0.2438 -0.1539 -0.0191 -0.0745 0.0379 0.0783 -0.0692 0.1731 -0.0911 -0.1383 -0.0962 0.1361 0.0152 -0.0861 0.0161 -0.2322 -0.2274 -0.3003 -0.0611 -0.1789 -0.165 -0.1175 -0.1118 0.1656 -0.1566 0.0938 0.0333 0.0325 0.1535 0.2725 0.2984 -0.0734 0.2685 0.2914 1 - - - - - - - -
CBS_overall -0.1573 0.0789 -0.0792 0.0799 -0.2475 0.0756 -0.0993 0.0716 0.0095 -0.0809 -0.0542 -0.1191 -0.2106 -0.1819 0.0389 -0.1648 0.0258 -0.0132 0.0749 0.1471 0.0997 -4e-04 0.115 0.1216 0.5624 0.1339 0.4785 0.5018 0.5847 0.4618 0.619 0.4868 0.3636 0.4813 0.5755 0.4209 1 - - - - - - -
CBS_STM -0.2058 0.1392 -0.122 0.1067 -0.1483 0.0759 -0.0115 0.0267 0.0283 -0.0644 -0.0657 -0.0978 -0.1145 -0.1267 -0.1255 -0.059 -0.1503 -0.1507 -0.1541 -0.0399 -0.1215 -0.1648 -0.0594 -0.085 0.3538 -0.034 0.23 0.1552 0.3071 0.5103 0.7065 0.3431 0.1174 0.6467 0.421 0.6652 0.785 1 - - - - - -
CBS_reason -0.0143 0.0939 -0.0448 0.0645 -0.1365 -0.0206 -0.0969 0.014 -0.002 -0.0162 -0.0461 0.0363 -0.1306 -0.1037 0.0693 -0.1484 0.1746 0.1196 0.1484 0.1848 0.1732 0.0677 0.116 0.2063 0.3367 0.274 0.3032 0.6039 0.7178 0.213 0.357 0.5463 0.5034 0.2329 0.3257 0.0521 0.7821 0.3399 1 - - - - -
CBS_verbal -0.1599 -0.0752 -0.0098 0.0059 -0.3286 0.1409 -0.1389 0.1479 -0.0069 -0.1233 -0.0097 -0.2542 -0.276 -0.2151 0.1788 -0.1962 0.04 0.0018 0.2147 0.2255 0.2112 0.1211 0.248 0.184 0.6922 0.0682 0.6572 0.435 0.3299 0.3715 0.379 0.2293 0.2255 0.2284 0.6578 0.2662 0.8012 0.4925 0.4801 1 - - - -
CBS_ts_memory -0.2058 0.1392 -0.122 0.1067 -0.1483 0.0759 -0.0115 0.0267 0.0283 -0.0644 -0.0657 -0.0978 -0.1145 -0.1267 -0.1255 -0.059 -0.1503 -0.1507 -0.1541 -0.0399 -0.1215 -0.1648 -0.0594 -0.085 0.3538 -0.034 0.23 0.1552 0.3071 0.5103 0.7065 0.3431 0.1174 0.6467 0.421 0.6652 0.785 1 0.3399 0.4925 1 - - -
CBS_ts_reason 0.0392 0.1066 -0.0072 0.0187 -0.1642 -0.0426 -0.008 0.0641 0.0317 0.1094 -0.0045 0.0856 -0.108 -0.0191 0.0565 -0.0908 0.1463 0.097 0.1139 0.122 0.1279 0.0629 0.0165 0.1963 0.295 0.3721 0.2269 0.3139 0.6918 0.1995 0.3481 0.6109 0.4829 0.2639 0.2764 0.0485 0.7282 0.3419 0.9463 0.3956 0.3419 1 - -
CBS_ts_verbalab -0.0131 -0.0409 -0.0033 0.0362 -0.1554 0.0954 -0.0792 -0.0307 -0.1125 -0.2172 -0.1208 -0.2227 -0.1175 -0.1368 0.0796 -0.0806 0.0111 -0.0309 0.2077 0.1866 0.1563 0.0588 0.2084 0.1116 0.2634 0.0863 0.7944 0.4083 0.3239 0.3642 0.2829 0.1664 0.1391 0.1801 0.6938 0.2461 0.6987 0.4241 0.419 0.8785 0.4241 0.3335 1 -
CBS_ts_con -0.285 -0.053 -0.0767 0.0553 -0.2858 0.1204 -0.2632 0.1633 0.0557 -0.1328 0.0367 -0.18 -0.3238 -0.3037 0.1994 -0.3085 0.132 0.0995 0.1714 0.2582 0.2411 0.1303 0.3007 0.2078 0.8249 -0.0612 0.2793 0.7613 0.3547 0.2127 0.3385 0.1997 0.3334 0.1467 0.3494 0.1308 0.6717 0.3286 0.5798 0.7197 0.3286 0.382 0.4161 1
  

kable(as.data.frame(format(main_corr_out2$P, scientific = FALSE)), caption = "Study 2 - Correlation: p values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: p values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 0.1155 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 0.5408 0.2746 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 0.9994 0.2468 0.3438 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 0.9986 0.2071 0.7472 0.8095 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 0.1165 0.3259 0.0585 0.2598 0.9203 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 0.6106 0.9994 0.8975 0.738 0.8058 0.0702 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 0.0671 0.1225 3e-04 0.1849 1e-04 0.0883 0.4435 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 0.043 0.1546 0.1654 0.838 0.0402 0.9318 0.679 0.0178 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 0.6052 0.2018 0.5923 0.5171 0.1236 0.5715 0.0314 0.0678 0.0276 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 0.6291 0.0028 0.7937 0.2558 0.0094 0.3124 0.4101 2e-04 0.0045 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 0.7355 0.658 0.3857 0.2471 0.4447 0.9706 0.327 0.44 0.7221 0.0689 0.0406 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 0.0522 0.9132 0.9461 0.6798 0.0506 0.9865 0.4252 0.1372 0.4312 0.8802 0.5196 0.0013 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 0.2936 0.4523 0.1661 0.7162 0.1249 0.6257 0.211 0.9728 0.5923 0.0717 0.7466 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 0.949 0.5111 0.0723 0.5746 0.3141 0.0287 0.3335 0.1089 0.7567 0.7521 0.6892 0.0018 0.0096 0.0034 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 0.1214 0.2928 0.8951 0.221 0.3021 0.4322 0.8062 0.5297 0.7071 0.0342 0.1059 2e-04 6e-04 0.0016 0.0572 NA - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 0.0547 0.7772 0.0021 0.0475 0.6193 0.0245 0.1592 0.0225 0.4629 0.5752 0.8806 0.3854 0.7144 0.4777 0.366 0.0983 NA - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 0.0369 0.3843 7e-04 0.0168 0.9313 0.1181 0.0444 0.0127 0.3582 0.3104 0.5824 0.3594 0.8138 0.3265 0.1497 0.4153 0 NA - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 0.3648 0.3079 0.3256 0.1457 0.6679 3e-04 0.7828 0.0845 0.6266 0.4386 0.2513 0.1164 0.3509 0.7564 0.1471 0.0455 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 0.5259 0.1408 0.2856 0.2702 0.7747 0.0036 0.932 0.5658 0.6937 0.5065 0.1929 0.4275 0.6968 0.8433 0.8521 0.3189 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 0.0114 0.7021 0.0067 0.2302 0.2372 9e-04 0.3964 0.0029 0.6136 0.8994 0.5398 0.5792 0.2007 0.9087 0.4103 0.0189 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 0.0082 0.1215 0.0375 0.7961 0.2857 0.0014 0.7905 0.0034 0.6607 0.3438 0.5982 0.7475 0.7841 0.1822 0.7172 0.1376 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 0.0413 0.6109 0.0338 0.3753 0.9481 0.0248 0.264 0.0238 0.1724 0.1152 0.3807 0.3702 0.0761 0.3611 0.7334 0.0099 0 0 0 0 0 0 NA - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 0.4491 0.7544 3e-04 0.2485 0.3583 0.0092 0.239 0.0364 0.4937 0.6979 0.1547 0.9319 0.2306 0.9627 0.192 0.1634 0 0 5e-04 0 0 0 0.0023 NA - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 0.0073 0.4352 0.8982 0.7125 1e-04 0.2231 0.1624 0.0021 0.1752 0.4942 0.1567 0.1238 7e-04 0.0465 0.0349 0.0157 0.5801 0.664 0.2994 0.1313 0.0972 0.1761 0.1053 0.0766 NA - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 0.0263 0.8359 0.1631 0.6917 0.715 0.601 0.9643 0.434 0.0637 0.828 0.4104 0.7313 0.6195 0.1275 0.7064 0.913 0.6514 0.2203 0.5545 0.9007 0.2368 0.1756 0.8646 0.0478 0.9499 NA - - - - - - - - - - - - - - - - - -
Score_Digit Span 0.5718 0.6672 0.6991 0.5974 0.2504 0.9174 0.1871 0.9461 0.1036 0.0011 0.3649 0.2197 0.2566 0.3552 0.5208 0.5242 0.6397 0.8693 0.1584 0.6609 0.2733 0.7133 0.0675 0.062 0.2709 0.23 NA - - - - - - - - - - - - - - - - -
Score_Feature Match 0.2285 0.9108 0.3237 0.2134 0.9731 0.7006 0.0198 0.3115 0.4683 0.0049 0.2815 0.366 0.3099 0.0238 0.5777 0.0643 0.187 0.3316 0.1777 0.034 0.092 0.7052 0.008 0.2907 0.0216 0.3285 0.0033 NA - - - - - - - - - - - - - - - -
Score_Polygons 0.201 0.6266 0.6392 0.8518 0.9473 0.4094 0.4204 0.7229 0.9152 0.3279 0.1738 0.7399 0.2548 0.3023 0.6731 0.3819 0.1595 0.2065 0.0613 0.2151 0.0678 0.256 0.0819 0.1228 0.1238 0.4344 0.0407 3e-04 NA - - - - - - - - - - - - - - -
Score_Paired Associates 0.186 0.5629 0.8707 0.4298 0.8853 0.1709 0.5425 0.4183 0.7643 0.8365 0.6627 0.7238 0.2435 0.3936 0.9794 0.8595 0.7761 0.7987 0.6634 0.9558 0.9093 0.7833 0.292 0.2538 0.0813 0.723 0.0187 0.2459 0.0334 NA - - - - - - - - - - - - - -
Score_Token Search 0.8228 0.1773 0.2729 0.0793 0.3407 0.6428 0.2124 0.7987 0.1842 0.162 0.4685 0.019 0.0344 0.0384 0.9748 0.1573 0.8094 0.9017 0.6819 0.6311 0.7266 0.2997 0.917 0.9163 0.0026 0.4266 0.0439 0.0972 0.0051 0.2141 NA - - - - - - - - - - - - -
Score_Spatial Planning 0.3668 0.2655 0.5509 0.2437 0.1418 0.0788 0.1388 0.427 0.328 0.261 0.7678 0.1907 0.3711 0.3389 0.1451 0.5693 0.958 0.2719 0.2054 0.766 0.1275 0.2181 0.0613 0.511 0.0647 0.8015 0.7874 0.3948 0.0931 0.1937 0.1904 NA - - - - - - - - - - - -
Score_Rotations 0.2793 0.8584 0.6486 0.337 0.2212 0.5214 0.4386 0.3799 0.1027 0.0721 0.0533 0.7588 0.0182 0.0645 0.0762 0.1902 0.4141 0.6861 0.3563 0.5454 0.3716 0.9065 0.5682 0.4118 0.0315 0.0182 0.4741 0.0111 0.1036 0.9273 0.0967 0.1741 NA - - - - - - - - - - -
Score_Spatial Span 0.0359 0.8526 0.6822 0.1294 0.1337 0.6268 0.7929 0.5337 0.4345 0.3292 0.3662 0.1724 0.006 0.0933 0.0439 0.8598 0.1775 0.3289 0.4072 0.8515 0.5075 0.3825 0.2166 0.9063 0.0992 0.5717 0.9308 0.7733 0.1143 0.9952 0.0013 0.0174 0.1072 NA - - - - - - - - - -
Score_Grammatical Reasoning 0.3919 0.9463 0.6135 0.9087 0.4017 0.2188 0.662 0.6071 0.7459 0.4962 0.5252 0.0867 0.7487 0.4004 0.7158 0.7011 0.6905 0.8094 0.2013 0.0317 0.36 0.6932 0.4232 0.5408 0.0136 0.8432 0.3249 0.0154 0.0267 0.0141 0.0984 0.0395 0.2621 0.0067 NA - - - - - - - - -
Score_Monkey Ladder 0.3721 0.0326 0.1813 0.8692 0.5195 0.7433 0.4984 0.5496 0.1323 0.4308 0.2304 0.4053 0.2378 0.8959 0.4566 0.8894 0.0421 0.0467 0.008 0.5974 0.1195 0.1515 0.3086 0.3329 0.1499 0.1738 0.4171 0.7734 0.7792 0.1827 0.0165 0.0084 0.5259 0.0182 0.0101 NA - - - - - - - -
CBS_overall 0.172 0.4953 0.4933 0.4897 0.03 0.5133 0.3904 0.5358 0.9349 0.4843 0.6395 0.3021 0.066 0.1133 0.7367 0.152 0.8239 0.9095 0.5173 0.2017 0.3883 0.9975 0.3192 0.2921 0 0.2455 0 0 0 0 0 0 0.0012 0 0 1e-04 NA - - - - - - -
CBS_STM 0.0726 0.2271 0.2906 0.3557 0.198 0.5118 0.9208 0.8174 0.8069 0.5777 0.5705 0.3974 0.3213 0.2721 0.277 0.6101 0.1919 0.1909 0.1809 0.7302 0.2925 0.152 0.608 0.4625 0.0016 0.7693 0.0442 0.1777 0.0066 0 0 0.0023 0.3094 0 1e-04 0 0 NA - - - - - -
CBS_reason 0.9015 0.4165 0.6987 0.5771 0.2366 0.8587 0.4017 0.9036 0.9865 0.8887 0.6908 0.754 0.2577 0.3695 0.5491 0.1978 0.1288 0.3002 0.1976 0.1076 0.132 0.5584 0.3151 0.0718 0.0028 0.0159 0.0073 0 0 0.0629 0.0014 0 0 0.0415 0.0038 0.6528 0 0.0025 NA - - - - -
CBS_verbal 0.1647 0.5155 0.9326 0.9591 0.0035 0.2216 0.2284 0.1993 0.9525 0.2852 0.9334 0.0257 0.0151 0.0603 0.1198 0.0872 0.7297 0.9877 0.0608 0.0486 0.0652 0.2941 0.0296 0.1091 0 0.5558 0 1e-04 0.0034 9e-04 7e-04 0.0449 0.0486 0.0457 0 0.0193 0 0 0 NA - - - -
CBS_ts_memory 0.0726 0.2271 0.2906 0.3557 0.198 0.5118 0.9208 0.8174 0.8069 0.5777 0.5705 0.3974 0.3213 0.2721 0.277 0.6101 0.1919 0.1909 0.1809 0.7302 0.2925 0.152 0.608 0.4625 0.0016 0.7693 0.0442 0.1777 0.0066 0 0 0.0023 0.3094 0 1e-04 0 0 0 0.0025 0 NA - - -
CBS_ts_reason 0.7349 0.356 0.9506 0.8716 0.1537 0.7128 0.945 0.5797 0.7845 0.3435 0.9691 0.4593 0.3499 0.8689 0.6257 0.4321 0.2041 0.4014 0.324 0.2904 0.2677 0.5868 0.8868 0.087 0.0092 9e-04 0.0472 0.0054 0 0.082 0.0019 0 0 0.0204 0.0149 0.6752 0 0.0023 0 4e-04 0.0023 NA - -
CBS_ts_verbalab 0.9102 0.7242 0.9773 0.7547 0.1773 0.4093 0.4935 0.7909 0.3298 0.0578 0.2952 0.0516 0.3086 0.2353 0.4912 0.486 0.9237 0.7896 0.0699 0.1041 0.1747 0.6116 0.0689 0.3338 0.0206 0.4554 0 2e-04 0.0041 0.0011 0.0127 0.148 0.2276 0.1171 0 0.0309 0 1e-04 1e-04 0 1e-04 0.003 NA -
CBS_ts_con 0.012 0.6471 0.5074 0.6327 0.0117 0.2968 0.0207 0.1558 0.6301 0.2495 0.7513 0.1173 0.0041 0.0073 0.082 0.0063 0.2524 0.3894 0.1362 0.0234 0.0346 0.2587 0.0079 0.0697 0 0.597 0.0139 0 0.0016 0.0633 0.0026 0.0816 0.003 0.203 0.0018 0.2568 0 0.0035 0 0 0.0035 6e-04 2e-04 NA

kable(as.data.frame(format(main_corr_out2$n, scientific = FALSE)), caption = "Study 2 - Correlation: n values") %>%
  kable_styling(bootstrap_options = c("hover", "striped"), full_width = F) %>% 
  kable_classic()
Study 2 - Correlation: n values
age age_first_phone dist_daily dist_study pow_not_using pow_notifications_on pow_vibrate pow_study pow_exam pow_lec pow_sleep com_gen com_unattended com_leave_with_other com_locked com_room_task NMPQ_sum MPIQ_sum MPIQ_SI_sum MPIQ_VFO_sum SAD_sum SAD_dep_sum SAD_ea_sum SAD_dist_sum Score_Double Trouble Score_Odd One Out Score_Digit Span Score_Feature Match Score_Polygons Score_Paired Associates Score_Token Search Score_Spatial Planning Score_Rotations Score_Spatial Span Score_Grammatical Reasoning Score_Monkey Ladder CBS_overall CBS_STM CBS_reason CBS_verbal CBS_ts_memory CBS_ts_reason CBS_ts_verbalab CBS_ts_con
age 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
age_first_phone 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_daily 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dist_study 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_not_using 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_notifications_on 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_vibrate 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_study 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_exam 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_lec 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pow_sleep 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_gen 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_unattended 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_leave_with_other 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_locked 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com_room_task 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NMPQ_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_SI_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - - -
MPIQ_VFO_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - - -
SAD_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - - -
SAD_dep_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - - -
SAD_ea_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - - -
SAD_dist_sum 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - - -
Score_Double Trouble 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - - -
Score_Odd One Out 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - - -
Score_Digit Span 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - - -
Score_Feature Match 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - - -
Score_Polygons 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - - -
Score_Paired Associates 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - - -
Score_Token Search 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - - -
Score_Spatial Planning 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - - -
Score_Rotations 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - - -
Score_Spatial Span 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - - -
Score_Grammatical Reasoning 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - - -
Score_Monkey Ladder 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - - -
CBS_overall 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - - -
CBS_STM 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - - -
CBS_reason 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - - -
CBS_verbal 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - - -
CBS_ts_memory 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - - -
CBS_ts_reason 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 - -
CBS_ts_verbalab 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 -
CBS_ts_con 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77

corrplot(main_corr_out$r, method = "circle", col = (colorRampPalette(c("purple", "grey", "blue"))(50)),  
         type = "upper",  
         # addCoef.col = "black", # Add coefficient of correlation
         tl.col = "darkblue", tl.srt = 90, tl.cex = .8, #Text label color and rotation
         # Combine with significance level
         p.mat = main_corr_out$P, sig.level = 0.05, 
         addgrid.col = "white",
         insig = "blank",# insig = "pch", pch = 10, pch.col = "red", pch.cex = .1, # add this instead of insig above to denot insig p values with red dot
         # hide correlation coefficient on the principal diagonal
         diag = FALSE, 
         win.asp = 1
         )

ANOVAS

one-way ANOVA (IV: smartphone location, desk, pocket/bag, outside; DV: CBS performance).

  • CBS Performance is:
    • CBS_overall = composite score of all 12 CBS tasks
    • Data-driven factors:
      • CBS_STM = Short Term Memory = composite score for 4 CBS tasks: Spatial Span (SS), Monkey Ladder (ML), Paired Associates (PA), Token Search (TS)
      • CBS_reason = Short Term Memory = composite score for 5 CBS tasks: Odd One Out (OOO), Rotations (R), Feature Match (FM), Spatial Tree/Planning (SP), Polygons (P)
      • CBS_verbal = Short Term Memory = composite score for 3 CBS tasks: Grammatical Reasoning (GR), Double Trouble (DT), Digit Span (DS)

ASSUMPTIONS – for each…

The ANOVA made three assumptions: independent random sampling (met during testing), normality (tested by visualizing the residuals, applying a Shapiro-Wilk test to the residuals, and observing the Skewness and Kurtosis of the data), and homogeneity of variance (levenes). All assumptions were met!

Get the data for each analysis


# get the required data from all data: participant, condition, score
## OVERALL
anova_overall_data <- 
  main_all_data_final %>% 
  select(participant, condition, CBS_overall)

## STM
anova_STM_data <-
  main_all_data_final %>%
  select(participant, condition, CBS_STM)

# anova_STM_data <- 
#   cbind(main_all_data_final %>%
#   select(participant, condition), 
#   scores[,1])
# colnames(anova_STM_data) <- c("participant", "condition", "CBS_STM")

# testing_data <-
#   cbind(main_all_data_final$CBS_overall,
#         main_all_data_final$ZScore_DS,
#         main_all_data_final$CBS_STM,
#         scores[,1],
#         main_all_data_final$CBS_reason,
#         scores[,2],
#         main_all_data_final$CBS_verbal,
#         scores[,3])

## REASON
anova_reason_data <-
  main_all_data_final %>%
  select(participant, condition, CBS_reason)

# anova_reason_data <- 
#   cbind(main_all_data_final %>%
#   select(participant, condition), 
#   scores[,1])
# colnames(anova_reason_data) <- c("participant", "condition", "CBS_reason")

## VERBAL
anova_verbal_data <-
  main_all_data_final %>%
  select(participant, condition, CBS_verbal)

# anova_verbal_data <- 
#   cbind(main_all_data_final %>%
#   select(participant, condition), 
#   scores[,1])
# colnames(anova_verbal_data) <- c("participant", "condition", "CBS_verbal")

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_overall <- ezANOVA(
  data = anova_overall_data
  , dv = .(CBS_overall)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
## STM
anova_STM <- ezANOVA(
  data = anova_STM_data
  , dv = .(CBS_STM)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
## REASON
anova_reason <- ezANOVA(
  data = anova_reason_data
  , dv = .(CBS_reason)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
## VERBAL
anova_verbal <- ezANOVA(
  data = anova_verbal_data
  , dv = .(CBS_verbal)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
# calculate & extract the residuals from the ANOVAs -- for each
anova_overall_res <- data.frame("residuals" = anova_overall$aov$residuals)
anova_STM_res <- data.frame("residuals" = anova_STM$aov$residuals)
anova_reason_res <- data.frame("residuals" = anova_reason$aov$residuals)
anova_verbal_res <- data.frame("residuals" = anova_verbal$aov$residuals)

Normality

Check qqplots for each…

grid.arrange(qplot(anova_overall_res$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic(),
             qplot(anova_STM_res$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic(),
             qplot(anova_reason_res$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic(),
             qplot(anova_verbal_res$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic(),
             nrow = 2,
             top = text_grob("Histogram of Residulas For All ANOVAs",
                             face = "bold"),
             bottom = text_grob("Normality is met for plots were data falls along or close to a normal curve. * S-W p < .05",
                                face = "italic",
                                x = 0.05,
                                hjust = 0)
             )

Check hist of residuals…

shapiro_all <- rbind(c(shapiro.test(anova_overall_res$residuals)$statistic, shapiro.test(anova_overall_res$residuals)$p.value),
                     c(shapiro.test(anova_STM_res$residuals)$statistic, shapiro.test(anova_STM_res$residuals)$p.value),
                     c(shapiro.test(anova_reason_res$residuals)$statistic, shapiro.test(anova_reason_res$residuals)$p.value),
                     c(shapiro.test(anova_verbal_res$residuals)$statistic, shapiro.test(anova_verbal_res$residuals)$p.value)
                     )
colnames(shapiro_all) <- c("W", "p")
rownames(shapiro_all) <- c("OVERALL", "STM", "REASONING", "VERBAL")

kable(shapiro_all, caption = "Results of shapiro-wilk test of normality for all ANOVAs.", row.names = TRUE, align = 'c', digits = 4) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Results of shapiro-wilk test of normality for all ANOVAs.
W p
OVERALL 0.9905 0.1277
STM 0.9931 0.3384
REASONING 0.9978 0.9862
VERBAL 0.9956 0.7443
NA

Show the results of a Shapiro-Wilk test of normality for each…

shapiro_all <- rbind(c(shapiro.test(anova_overall_res$residuals)$statistic, shapiro.test(anova_overall_res$residuals)$p.value),
                     c(shapiro.test(anova_STM_res$residuals)$statistic, shapiro.test(anova_STM_res$residuals)$p.value),
                     c(shapiro.test(anova_reason_res$residuals)$statistic, shapiro.test(anova_reason_res$residuals)$p.value),
                     c(shapiro.test(anova_verbal_res$residuals)$statistic, shapiro.test(anova_verbal_res$residuals)$p.value)
                     )
colnames(shapiro_all) <- c("W", "p")
rownames(shapiro_all) <- c("OVERALL", "STM", "REASONING", "VERBAL")

kable(shapiro_all, caption = "Results of shapiro-wilk test of normality for all ANOVAs.", row.names = TRUE, align = 'c', digits = 4) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Results of shapiro-wilk test of normality for all ANOVAs.
W p
OVERALL 0.9905 0.1277
STM 0.9931 0.3384
REASONING 0.9978 0.9862
VERBAL 0.9956 0.7443
NA

Review skew & kurtosis for each…

  • range wanted: Skew = \(\pm 2.0\) & Kurtosis = \(\pm 9.0\) (Schmider, Ziegler, Danay, Beyer, & Bühner, 2010)
sk_all <- rbind(c(psych::describe(anova_overall_data)$skew[3], psych::describe(anova_overall_data)$kurtosis[3]), 
                c(psych::describe(anova_STM_data)$skew[3], psych::describe(anova_STM_data)$kurtosis[3]), 
                c(psych::describe(anova_reason_data)$skew[3], psych::describe(anova_reason_data)$kurtosis[3]), 
                c(psych::describe(anova_verbal_data)$skew[3], psych::describe(anova_verbal_data)$kurtosis[3])
                )
colnames(sk_all) <- c("skew", "kutosis")
rownames(sk_all) <- c("OVERALL", "STM", "REASONING", "VERBAL")

kable(sk_all, caption = "Skew and Kurtosis for all ANOVAs.", row.names = TRUE, align = 'c', digits = 4) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Skew and Kurtosis for all ANOVAs.
skew kutosis
OVERALL 0.2114 0.4312
STM 0.1948 0.3321
REASONING 0.1047 0.0747
VERBAL 0.0197 -0.3767

Homogeneity of Variance

Check levenes for each ANOVA…


levenes_all <- rbind(unlist(leveneTest(data = anova_overall_data, CBS_overall ~ condition, center = mean)), 
                     unlist(leveneTest(data = anova_STM_data, CBS_STM ~ condition, center = mean)), 
                     unlist(leveneTest(data = anova_reason_data, CBS_reason ~ condition, center = mean)), 
                     unlist(leveneTest(data = anova_verbal_data, CBS_verbal ~ condition, center = mean))
                     )
colnames(levenes_all) <- c("DF1", "DF2", "F", "F2", "p", "p<.05")
rownames(levenes_all) <- c("OVERALL", "STM", "REASONING", "VERBAL")


kable(levenes_all[,c(1:3, 5)], caption = "Levenes test for all ANOVAs.", row.names = TRUE, align = 'c', digits = 4) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
Levenes test for all ANOVAs.
DF1 DF2 F p
OVERALL 2 234 0.5809 0.5602
STM 2 234 0.6277 0.5347
REASONING 2 234 0.6499 0.5230
VERBAL 2 234 1.6141 0.2013
NA

Results

Data-Driven (Hampshire et al., 2012)

Show anova tables for each ANOVA…

# show ANOVA results in kable table 
kable(anova_overall$ANOVA[2,], caption = "OVERALL - one-way ANOVA", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
OVERALL - one-way ANOVA
Effect DFn DFd SSn SSd F p p<.05 ges
2 condition 2 233 0.301 55.564 0.6311 0.5329 0.0054

plot(anova_overall_data$condition, anova_overall_data$CBS_overall)


kable(anova_STM$ANOVA[2,], caption = "STM - one-way ANOVA", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
STM - one-way ANOVA
Effect DFn DFd SSn SSd F p p<.05 ges
2 condition 2 233 0.5055 99.0593 0.5945 0.5527 0.0051

plot(anova_STM_data$condition, anova_STM_data$CBS_STM)


kable(anova_reason$ANOVA[2,], caption = "reason - one-way ANOVA", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
reason - one-way ANOVA
Effect DFn DFd SSn SSd F p p<.05 ges
2 condition 2 233 0.162 70.0879 0.2693 0.7641 0.0023

plot(anova_reason_data$condition, anova_reason_data$CBS_reason)



kable(anova_verbal$ANOVA[2,], caption = "VERBAL - one-way ANOVA", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
VERBAL - one-way ANOVA
Effect DFn DFd SSn SSd F p p<.05 ges
2 condition 2 233 1.4611 106.1722 1.6033 0.2035 0.0136

plot(anova_verbal_data$condition, anova_verbal_data$CBS_verbal)

Task Selection Composite Scores

TS - MEMORY
## FOR ts_memory
anova_data_ts_memory <- 
  main_all_data_final %>% 
  select(participant, condition, CBS_ts_memory) %>% 
  rename(score = CBS_ts_memory)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_ts_memory <- ezANOVA(
  data = anova_data_ts_memory
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_ts_memory$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_ts_memory$aov$residuals, main = "Histogram of Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_ts_memory$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9931
0.3384

kable(unlist(leveneTest(data = anova_data_ts_memory, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.6277
Pr(>F)1 0.5347

kable(anova_ts_memory$ANOVA, caption = "ts_memory - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
ts_memory - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0022 99.0593 0.0053 0.9422 0.0000
condition 2 233 0.5055 99.0593 0.5945 0.5527 0.0051

plot(anova_data_ts_memory$condition, anova_data_ts_memory$score)


ggbetweenstats(select(anova_data_ts_memory, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - Memory", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))


anova_violin_memory <-
  ggplot(anova_data_ts_memory, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Memory Composite Score by Smartphone Location",
       subtitle = "SS, ML, TS, PA",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Memory Composite Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
    

# show fig
anova_violin_memory


# export plot
# ggsave(filename="fig_anova_violin_memory_oct1", plot = anova_violin_memory, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
TS - REASON
## FOR ts_reasoning
anova_data_ts_reason <- 
  main_all_data_final %>% 
  select(participant, condition, CBS_ts_reason) %>% 
  rename(score = CBS_ts_reason)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_ts_reason <- ezANOVA(
  data = anova_data_ts_reason
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_ts_reason$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_ts_reason$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_ts_reason$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9962
0.8428

kable(unlist(leveneTest(data = anova_data_ts_reason, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.5519
Pr(>F)1 0.5766

kable(anova_ts_reason$ANOVA, caption = "ts_reason - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
ts_reason - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0017 78.8021 0.0049 0.9444 0e+00
condition 2 233 0.0390 78.8021 0.0576 0.9440 5e-04

plot(anova_data_ts_reason$condition, anova_data_ts_reason$score)


ggbetweenstats(select(anova_data_ts_reason, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - Reasoning", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))


anova_violin_reason <-
  ggplot(anova_data_ts_reason, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Reasoning Composite Score by Smartphone Location",
       subtitle = "SP, R, P, OOO",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Reasoning Composite Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
    

# show fig
anova_violin_reason


# export plot
# ggsave(filename="fig_anova_violin_reason_oct1", plot = anova_violin_reason, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
TS - VERBAL ABILITY
## FOR ts_verbalab
anova_data_ts_verbalab <- 
  main_all_data_final %>% 
  select(participant, condition, CBS_ts_verbalab) %>% 
  rename(score = CBS_ts_verbalab)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_ts_verbalab <- ezANOVA(
  data = anova_data_ts_verbalab
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_ts_verbalab$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_ts_verbalab$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_ts_verbalab$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9947
0.5770

kable(unlist(leveneTest(data = anova_data_ts_verbalab, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.0922
Pr(>F)1 0.9119

kable(anova_ts_verbalab$ANOVA, caption = "ts_verbalab - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
ts_verbalab - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0206 125.874 0.0381 0.8454 0.0002
condition 2 233 5.2102 125.874 4.8222 0.0089 * 0.0397

plot(anova_data_ts_verbalab$condition, anova_data_ts_verbalab$score)


ggbetweenstats(select(anova_data_ts_verbalab, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - TS Verbal Ability", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))


anova_violin_verbalab <-
  ggplot(anova_data_ts_verbalab, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Verbal Ability Composite Score by Smartphone Location",
       subtitle = "DS, GR",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Verbal Ability Composite Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
    

# show fig
anova_violin_verbalab


# export plot
# ggsave(filename="fig_anova_violin_verbalab_oct1", plot = anova_violin_verbalab, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
TS - CONCENTRATION
## FOR ts_con
anova_data_ts_con <- 
  main_all_data_final %>% 
  select(participant, condition, CBS_ts_con) %>% 
  rename(score = CBS_ts_con)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_ts_con <- ezANOVA(
  data = anova_data_ts_con
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_ts_con$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_ts_con$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_ts_con$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9915
0.1902

kable(unlist(leveneTest(data = anova_data_ts_con, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 1.7603
Pr(>F)1 0.1743

kable(anova_ts_con$ANOVA, caption = "ts_con - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
ts_con - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0003 140.4421 0.0005 0.9813 0.0000
condition 2 233 0.8753 140.4421 0.7261 0.4849 0.0062

# anova_ts_con_white <- ezANOVA(
#   data = anova_data_ts_con
#   , dv = .(score)
#   , wid = .(participant)
#   , between = .(condition)
#   , type = 3 # unequal sample sizes
#   , detailed = TRUE
#   , return_aov = TRUE
#   , white.adjust = TRUE
#   )

# compute effect size
# anova_ts_con_white_es <- EtaSq(anova_ts_con_white$aov, type = 3, anova = FALSE)
# 
# kable(cbind(anova_ts_con_white$ANOVA[2,], data.frame("ges" = c(anova_ts_con_white_es[2]))), caption = "ts_con - one-way ANOVA - white-corr", digits = 4, align = 'c') %>%
#   row_spec(0, bold = T) %>%
#   kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
#   kable_classic()
    # kable(anova_ts_con_white$ANOVA, caption = "ts_con - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
    #   row_spec(0, bold = T) %>% 
    #   kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
    #   kable_classic()

plot(anova_data_ts_con$condition, anova_data_ts_con$score)


ggbetweenstats(select(anova_data_ts_con, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - TS Concentration", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))



anova_violin_con <-
  ggplot(anova_data_ts_con, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Concentration Composite Score by Smartphone Location",
       subtitle = "DT, FM",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Concentration Composite Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
# show fig
anova_violin_con


# export plot
# ggsave(filename="fig_anova_violin_con_oct1", plot = anova_violin_con, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
Main Effect Results

This section presents the 4 ANOVA results together, while adjusting for multiple comparisons.

  • First, we will adjust the p-values. A Holm-Bonferroni adjustment was used to assess the main effect of smartphone location on CBs composite score. Since 4 separate scores were used, this adjustment was applied to the p-values to account for multiple analyses.
  • Then, all the other relevant values from the ANOVAs are placed into 1 table together.

There was a significant main effect of smartphone location on verbal ability and no other composite score. Post-hocs were needed to determine where the differences were for verbal ability.

# get all ANOVA data in 1 df & adjust p values
anova_data_all <- 
  # get ANOVA results
  tibble(cbind(tibble("Measure" = c("Memory", "Reasoning", "Varbal Ability", "Concentration")), 
               rbind(anova_ts_memory$ANOVA[2, c(2:7, 9)], anova_ts_reason$ANOVA[2, c(2:7, 9)],
                   anova_ts_verbalab$ANOVA[2, c(2:7, 9)], anova_ts_con$ANOVA[2, c(2:7, 9)]
                   )
               )
             ) %>% 
  # apply p adjust # could also use "bonferroni"
  mutate("p (adj.)" = p.adjust(p, method = c("holm"), n = 4)) %>% 
  
  # re order cols 
 select(c(Measure:p, 'p (adj.)', ges))
  
  
  # # format so that sig p values shown in bold font
  # mutate(p = cell_spec(p, bold = (ifelse(p < .05, "TRUE", "FALSE"))))

# show results in table
kable(anova_data_all, caption = "One-Way ANOVAs: the Effect of Smartphone Location on Each CBS Composite Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  column_spec(1, bold = T) %>% 
  # bold the sig ANOVA
  row_spec(3, bold = T) %>% 
  column_spec(7:8, border_left = T, border_right = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
One-Way ANOVAs: the Effect of Smartphone Location on Each CBS Composite Score
Measure DFn DFd SSn SSd F p p (adj.) ges
Memory 2 233 0.5055 99.0593 0.5945 0.5527 1.0000 0.0051
Reasoning 2 233 0.0390 78.8021 0.0576 0.9440 1.0000 0.0005
Varbal Ability 2 233 5.2102 125.8740 4.8222 0.0089 0.0355 0.0397
Concentration 2 233 0.8753 140.4421 0.7261 0.4849 1.0000 0.0062
NA
Main Effect Visualizations

Visualize the results together… (Panel)

# create join data set with all composite score data
anova_plot_all_data <- 
  cbind(data.frame("comp_score" = c(rep(1, nrow(anova_data_ts_memory)), rep(2, nrow(anova_data_ts_reason)), rep(3, nrow(anova_data_ts_verbalab)), rep(4, nrow(anova_data_ts_con)))), 
        rbind(
        # composite scores data -- all score cols need to be the same, other wise use rename to rename cols or will not join correctly
            # dplyr::rename(mod_score = SAD_dep_score), # rename column to join correctly
        anova_data_ts_memory %>% select(-participant), 
        anova_data_ts_reason %>% select(-participant), 
        anova_data_ts_verbalab %>% select(-participant), 
        anova_data_ts_con %>% select(-participant)
        )
        ) %>% 
  mutate(comp_score = factor(comp_score, levels = c(1:4), labels = c("(A) Memory", "(B) Reasoning", "(C) Verbal Ability", "(D) Concentration"))) 
  # condition must be a factor, if not use:
    # mutate(condition = factor(condition, labels = c("Desk", "Pocket/Bag", "Outside")))

# see glimpse of new data frame
glimpse(anova_plot_all_data)
Rows: 948
Columns: 3
$ comp_score <fct> (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A) Memory, (A…
$ condition  <fct> desk, outside, desk, outside, outside, desk, outside, desk, outside, outside, desk, desk, outside, outside, desk, outside, desk, outside, outside, desk, outside, desk, outside, desk, outside, outside, desk, desk, outside, outside,…
$ score      <dbl> 0.617908976, 0.409732084, 0.348831795, -0.141470178, -0.982732752, -0.294588407, 0.836734479, -0.181387337, -0.555730356, -0.059236573, 0.239423247, -0.637963962, 0.007855528, 0.114873196, -0.452513621, -0.202370467, -1.089742011,…
# create panel fig
  # this is the same as indv figs + "facet_wrap(~comp_score, ncol = 2)" at the end
  # need to change sizes of dots to fit nicely
anova_violin_all <-
  ggplot(anova_plot_all_data, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       # title = "Concentration Composite Score by Smartphone Location",
       # subtitle = "DT, FM",
       # caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside")) +
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # stat_boxplot(geom = "errorbar", width = 0.25, color = "black", size = .5) + # shows error bars
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = .5, shape = 1, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = .55) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black")) +
    facet_wrap(~comp_score, ncol = 2)
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
# show plot
anova_violin_all


# export plots
# ggsave(filename="fig_anova_violin_all_oct1", plot = anova_violin_all, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
Post-Hocs: Smartphone Locations - Desk, Pocket/Bag, Outside

The significant main effect of smartphone location was explore futher with a post-hoc test. since all pairwise comparisons were completed, a Tukey HSD adjustment was used (as suggested by Maxwell & Delaney, 2003).

The results indicate that there was a sig diff in verbal ability between the pocket/bag and desk locations but no other comparisons. That is, desk performance was lower than pocket/bag performance.

# run tukeyHSD post-hoc analysis on the verbal ability aov
posthoc_verbal <- TukeyHSD(anova_ts_verbalab$aov, "condition")

# make into table to add measure column
posthoc_verbal_t <- cbind(tibble("comparison" = c("Pocket/Bag v Desk", "Outside v Desk", "Outside v Pocket/Bag")), posthoc_verbal$condition)

rownames(posthoc_verbal_t) <- NULL

# show results in table
kable(posthoc_verbal_t, caption = "Post-Hoc tests of Verbal Ability Composite Score across smartphone locatio conditions.", digits = 4, align = 'rcccc', col.names = c("Comparison", "Difference", "Lower", "Upper", "p")) %>%
  row_spec(0, bold = T) %>%
  column_spec(1, bold = T) %>%
  # bold the sig ANOVA
  row_spec(1, bold = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
Post-Hoc tests of Verbal Ability Composite Score across smartphone locatio conditions.
Comparison Difference Lower Upper p
Pocket/Bag v Desk 0.3609 0.0862 0.6355 0.0062
Outside v Desk 0.2123 -0.0699 0.4945 0.1803
Outside v Pocket/Bag -0.1485 -0.4222 0.1252 0.4079
NA

All indv tasks… (not z-scored)

An exploratory analysis investigated the effect of smartphone location on the individual CBS tests.

Since Verbal Ability was the only composite score where there was a sig diff, the 2 tasks of focus were: DS & GR. #### Visual Ability: DS & GR ##### Digit Span (DS)

## FOR DS
anova_data_DS <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Digit Span`) %>%
  rename(score = `Score_Digit Span`)
  
  # could do this with z scored data too...
  # select(participant, condition, ZScore_DS) %>%
  # rename(score = ZScore_DS)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_DS <- ezANOVA(
  data = anova_data_DS
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_DS$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_DS$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_DS$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9759
0.0005

kable(unlist(leveneTest(data = anova_data_DS, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.1657
Pr(>F)1 0.8474

kable(anova_DS$ANOVA, caption = "DS - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
DS - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 11100.9287 494.6497 5228.9865 0.0000 * 0.9573
condition 2 233 14.0283 494.6497 3.3039 0.0385 * 0.0276

plot(anova_data_DS$condition, anova_data_DS$score)


ggbetweenstats(select(anova_data_DS, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS DS", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))


# make violin plot
anova_violin_DS <-
  ggplot(anova_data_DS, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Digit Span Score by Smartphone Location",
       subtitle = "Included in Visual Ability Composite Score with GR.",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Digit Span Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
    

# show fig
anova_violin_DS


# export plot
# ggsave(filename="fig_anova_violin_DS_oct17", plot = anova_violin_DS, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
Grammatical Reasoning (GR)
## FOR GR
anova_data_GR <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Grammatical Reasoning`) %>% 
  rename(score = `Score_Grammatical Reasoning`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_GR <- ezANOVA(
  data = anova_data_GR
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_GR$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_GR$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 1) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_GR$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9940
0.4747

kable(unlist(leveneTest(data = anova_data_GR, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 1.3557
Pr(>F)1 0.2598

kable(anova_GR$ANOVA, caption = "GR - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
GR - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 75173.1583 5664.347 3092.2094 0.0000 * 0.9299
condition 2 233 99.6025 5664.347 2.0485 0.1312 0.0173

plot(anova_data_GR$condition, anova_data_GR$score)


ggbetweenstats(select(anova_data_GR, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS GR", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))


# make violin plot
anova_violin_GR <-
  ggplot(anova_data_GR, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "Grammatical Reasoning Score by Smartphone Location",
       subtitle = "Included in Visual Ability Composite Score with DS.",
       caption = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)",
       x = "Smartphone Location", 
       y = "Grammatical Reasoning Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside"))+
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = 2, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = 1) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black"))
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Warning: Ignoring unknown parameters: mult
    

# show fig
anova_violin_GR


# export plot
# ggsave(filename="fig_anova_violin_GR_oct17", plot = anova_violin_GR, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
Results: Adjusted

As before, the p values were adjusted for multiple comparisons using the Holm-Bonferroni adjustment…

Results showed a sig effect of smartphone location on DS score, p = .0385, but this was not true after the H-B correction, p = .1539. There was no sig effect on GR score before, p = .1312, or after the correction, p = .3937.

# get all ANOVA data in 1 df & adjust p values
anova_data_DS_GR <- 
  # get ANOVA results
  tibble(cbind(tibble("Measure" = c("DS", "GR")), 
               rbind( anova_DS$ANOVA[2,c(2:7, 9)], anova_GR$ANOVA[2,c(2:7, 9)]
                   )
               )
             ) %>% 
  # apply p adjust # could also use "bonferroni"
  mutate("p (adj.)" = p.adjust(p, method = c("holm"), n = 4)) %>% 
  
  # re order cols 
 select(c(Measure:p, 'p (adj.)', ges))
  
  
  # # format so that sig p values shown in bold font
  # mutate(p = cell_spec(p, bold = (ifelse(p < .05, "TRUE", "FALSE"))))

# show results in table
kable(anova_data_DS_GR, caption = "One-Way ANOVAs: the Effect of Smartphone Location on DS and GR Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>%
  column_spec(1, bold = T) %>%
  column_spec(7:8, border_left = T, border_right = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
One-Way ANOVAs: the Effect of Smartphone Location on DS and GR Score
Measure DFn DFd SSn SSd F p p (adj.) ges
DS 2 233 14.0283 494.6497 3.3039 0.0385 0.1539 0.0276
GR 2 233 99.6025 5664.3467 2.0485 0.1312 0.3937 0.0173
NA
Post-Hocs: Smartphone Locations - Desk, Pocket/Bag, Outside for DS

The significant main effect of smartphone location on DS score was explored further with a post-hoc test. since all pairwise comparisons were completed, a Tukey HSD adjustment was used (as suggested by Maxwell & Delaney, 2003).

The results indicate that there was a sig diff in verbal ability between the pocket/bag and desk locations but no other comparisons. That is, desk performance was lower than pocket/bag performance.

# run tukeyHSD post-hoc analysis on the DS aov
posthoc_DS <- TukeyHSD(anova_DS$aov, "condition")

# make into table to add measure column
posthoc_DS_t <- cbind(tibble("comparison" = c("Pocket/Bag v Desk", "Outside v Desk", "Outside v Pocket/Bag")), posthoc_DS$condition)

rownames(posthoc_DS_t) <- NULL

# show results in table
kable(posthoc_DS_t, caption = "Post-Hoc tests of Digit Span Score across smartphone locatio conditions.", digits = 4, align = 'rcccc', col.names = c("Comparison", "Difference", "Lower", "Upper", "p")) %>%
  row_spec(0, bold = T) %>%
  column_spec(1, bold = T) %>%
  # bold the sig ANOVA
  row_spec(1, bold = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
Post-Hoc tests of Digit Span Score across smartphone locatio conditions.
Comparison Difference Lower Upper p
Pocket/Bag v Desk 0.5929 0.0485 1.1374 0.0291
Outside v Desk 0.3347 -0.2246 0.8941 0.3366
Outside v Pocket/Bag -0.2582 -0.8008 0.2844 0.5012
NA
DS & GR Visualizations

Visualize the results together… (Panel)

# create join data set with DS & GR data
anova_plot_DSGR_data <- 
  cbind(data.frame("task" = c(rep(1, nrow(anova_data_DS)), rep(2, nrow(anova_data_GR)))), 
        rbind(
        # DS & GR scores data -- all score cols need to be the same, other wise use rename to rename cols or will not join correctly
            # dplyr::rename(mod_score = SAD_dep_score), # rename column to join correctly
        anova_data_DS %>% select(-participant), 
        anova_data_GR %>% select(-participant)
        )) %>% 
  mutate(task = factor(task, levels = c(1:2), labels = c("(A) Digit Span", "(B) Gramatical Reasoning"))) 
  # condition must be a factor, if not use:
    # mutate(condition = factor(condition, labels = c("Desk", "Pocket/Bag", "Outside")))

# see glimpse of new data frame
glimpse(anova_plot_DSGR_data)
Rows: 474
Columns: 3
$ task      <fct> (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Digit Span, (A) Dig…
$ condition <fct> desk, outside, desk, outside, outside, desk, outside, desk, outside, outside, desk, desk, outside, outside, desk, outside, desk, outside, outside, desk, outside, desk, outside, desk, outside, outside, desk, desk, outside, outside, …
$ score     <dbl> 6, 7, 7, 7, 7, 4, 5, 5, 5, 11, 6, 7, 6, 8, 4, 5, 5, 7, 5, 7, 4, 7, 6, 6, 6, 7, 7, 5, 6, 7, 8, 7, 6, 7, 5, 6, 6, 5, 5, 6, 6, 5, 8, 9, 7, 8, 6, 6, 7, 6, 8, 7, 8, 7, 6, 7, 7, 11, 7, 7, 6, 8, 6, 6, 7, 6, 5, 7, 6, 6, 5, 7, 9, 5, 7, 8, 8…

A couple of options for the panels…

  1. Panel fig using facet_wrap(). Note here the differing scales between the 2 tests nakes it difficult to see both on the same y-axis scale, so they are set to be different. This however makes the figure harder to interpret since someone might miss the different scales.

# create figure caption
scatall_note = "Note: The plot shows the density curve of the data (violin), indv data for each p (coloured dots), interquartile range & median (black boxplot), and the M & SD (red dots and whiskers)"
scatall_note = paste0(strwrap(scatall_note, width = 90), collapse = "\n")

# create panel fig
  # this is the same as indv figs + "facet_wrap(~task, ncol = 2)" at the end
  # need to change sizes of dots to fit nicely
anova_violin_DSGR <-
  ggplot(anova_plot_DSGR_data, aes(y = score, x = condition, color = condition), show.legend = F) + 
    # add violin plot
    geom_violin(trim = F, show.legend = F) +
    # add custom colour to violins
        scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) + 
    # add labels
    labs(
       title = "DS & GR Score by Smartphone Location",
       # subtitle = "DT, FM",
       caption = scatall_note,
       x = "Smartphone Location", 
       y = "Score"
       ) + 
    # label indv conditions
    scale_x_discrete(labels = c("Desk", "Pocket/Bag", "Outside")) +
    # adjust y axis scale
    # scale_y_continuous(limits = c(-3, 3)) +
    # add median & quartile (i.e., box plot)
    geom_boxplot(colour = "black", width = .45, show.legend = F, outlier.shape = NA, coef = 0) +
    # stat_boxplot(geom = "errorbar", width = 0.25, color = "black", size = .5) + # shows error bars
    # add indv ps points
    geom_point(stat = "identity", aes(color = condition), size = .5, shape = 1, position = position_jitterdodge(jitter.width = .8), show.legend = FALSE) +
      ## alternative to indv dots...
        # geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75) +  
      # add custom colour to indv dots
        # scale_color_manual(values=c('lightseagreen','darkorchid', 'deepskyblue4')) +
    # add M point & SD whisker
    stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="#BB0A21", shape=18, size = .55) + 
    # geom_point(stat="summary", shape = 18, colour = "black", fun = mean, position = position_dodge(.9), size = 4, show.legend = FALSE) 
    # add stats
      # omnibus test -- ANOVA
      # stat_compare_means(method = "anova") +
    # geom_signif(comparisons = list(c("Desk", "Outside")), map_signif_level=TRUE) + 
    # stat_pvalue_manual(kst, label = "p = {p}") + 
    # add theme
    theme_classic() +
    # add specific formatting
    theme(plot.title = element_text(color = "black", size = 14, face = "bold"),
        plot.subtitle = element_text(color = "black", size = 13),
        plot.caption = element_text(hjust = 0, size = 12, face = "italic"),
        text = element_text(size = 13), 
        axis.ticks.x = element_blank(), 
        axis.text = element_text(color = "black")) +
    facet_wrap(~task, ncol = 2, scales = "free")
Warning: Ignoring unknown parameters: mult
# show plot
anova_violin_DSGR


# export plots
  # remove caption & title if needed before exporting
# ggsave(filename="fig_anova_violin_DSGR_oct18", plot = anova_violin_DSGR, device = "jpeg", height = 5, width = 8, units = "in", dpi = 1000)
Other Tasks

Double Trouble (DT)

## FOR DT
anova_data_DT <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Double Trouble`) %>% 
  rename(score = `Score_Double Trouble`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_DT <- ezANOVA(
  data = anova_data_DT
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_DT$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_DT$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .7) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_DT$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9566
0.0000

kable(unlist(leveneTest(data = anova_data_DT, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.6090
Pr(>F)1 0.5448

kable(anova_DT$ANOVA, caption = "DT - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
DT - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 152535.1275 49023.53 724.9720 0.0000 * 0.7568
condition 2 233 190.1021 49023.53 0.4518 0.6371 0.0039

plot(anova_data_DT$condition, anova_data_DT$score)


ggbetweenstats(select(anova_data_DT, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS DT", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Feature Match (FM)

## FOR FM
anova_data_FM <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Feature Match`) %>% 
  rename(score = `Score_Feature Match`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_FM <- ezANOVA(
  data = anova_data_FM
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_FM$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_FM$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 5) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_FM$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9892
0.0750

kable(unlist(leveneTest(data = anova_data_FM, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 2.9362
Pr(>F)1 0.0550

kable(anova_FM$ANOVA, caption = "FM - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
FM - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 3796062.165 177484.2 4983.4440 0.0000 * 0.9553
condition 2 233 1149.207 177484.2 0.7543 0.4715 0.0064

anova_FM_white <- ezANOVA(
  data = anova_data_FM
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  , white.adjust = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
# compute effect size
anova_FM_white_es <- EtaSq(anova_FM_white$aov, type = 3, anova = FALSE)

kable(cbind(anova_FM_white$ANOVA[2,], data.frame("ges" = c(anova_FM_white_es[2]))), caption = "FM - one-way ANOVA - white-corr", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
  kable_classic()
FM - one-way ANOVA - white-corr
Effect DFn DFd F p p<.05 ges
2 condition 2 233 0.8748 0.4183 0.0064

    # kable(anova_FM_white$ANOVA, caption = "ts_con - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
    #   row_spec(0, bold = T) %>% 
    #   kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
    #   kable_classic()

plot(anova_data_FM$condition, anova_data_FM$score)


ggbetweenstats(select(anova_data_FM, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS FM", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Monkey Ladder (ML)

## FOR ML
anova_data_ML <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Monkey Ladder`) %>% 
  rename(score = `Score_Monkey Ladder`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_ML <- ezANOVA(
  data = anova_data_ML
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_ML$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_ML$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_ML$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9759
0.0005

kable(unlist(leveneTest(data = anova_data_ML, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.1353
Pr(>F)1 0.8735

kable(anova_ML$ANOVA, caption = "ML - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
ML - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 14714.0408 350.6573 9776.9847 0.0000 * 0.9767
condition 2 233 3.6477 350.6573 1.2119 0.2995 0.0103

plot(anova_data_ML$condition, anova_data_ML$score)


ggbetweenstats(select(anova_data_ML, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS ML", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Odd One Out (OOO)

## FOR OOO
anova_data_OOO <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Odd One Out`) %>% 
  rename(score = `Score_Odd One Out`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_OOO <- ezANOVA(
  data = anova_data_OOO
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_OOO$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_OOO$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 1) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_OOO$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9809
0.0029

kable(unlist(leveneTest(data = anova_data_OOO, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.2994
Pr(>F)1 0.7416

kable(anova_OOO$ANOVA, caption = "OOO - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
OOO - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 23860.7090 2650.428 2097.6026 0.0000 * 9e-01
condition 2 233 2.1989 2650.428 0.0967 0.9079 8e-04

plot(anova_data_OOO$condition, anova_data_OOO$score)


ggbetweenstats(select(anova_data_OOO, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS OOO", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Paired Associates (PA)

## FOR PA
anova_data_PA <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Paired Associates`) %>% 
  rename(score = `Score_Paired Associates`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_PA <- ezANOVA(
  data = anova_data_PA
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_PA$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_PA$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .8) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_PA$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9478
0.0000

kable(unlist(leveneTest(data = anova_data_PA, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.7762
Pr(>F)1 0.4614

kable(anova_PA$ANOVA, caption = "PA - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
PA - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 5830.1635 246.6611 5507.2654 0.0000 * 0.9594
condition 2 233 1.1864 246.6611 0.5603 0.5718 0.0048

plot(anova_data_PA$condition, anova_data_PA$score)


ggbetweenstats(select(anova_data_PA, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS PA", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Polygons (P)

## FOR P
anova_data_P <- 
  main_all_data_final %>% 
  select(participant, condition, Score_Polygons) %>% 
  rename(score = Score_Polygons)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_P <- ezANOVA(
  data = anova_data_P
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_P$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_P$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 1) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_P$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9879
0.0432

kable(unlist(leveneTest(data = anova_data_P, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.1719
Pr(>F)1 0.8422

kable(anova_P$ANOVA, caption = "P - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
P - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 490605.7589 151377.8 755.1379 0.0000 * 0.7642
condition 2 233 600.8042 151377.8 0.4624 0.6304 0.0040

plot(anova_data_P$condition, anova_data_P$score)


ggbetweenstats(select(anova_data_P, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS P", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Rotations (R)

## FOR R
anova_data_R <- 
  main_all_data_final %>% 
  select(participant, condition, Score_Rotations) %>% 
  rename(score = Score_Rotations)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_R <- ezANOVA(
  data = anova_data_R
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_R$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_R$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 5) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_R$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9942
0.4967

kable(unlist(leveneTest(data = anova_data_R, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.6400
Pr(>F)1 0.5282

kable(anova_R$ANOVA, caption = "R - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
R - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 1714128.091 262412.3 1522.0012 0.0000 * 0.8672
condition 2 233 1054.493 262412.3 0.4682 0.6267 0.0040

plot(anova_data_R$condition, anova_data_R$score)


ggbetweenstats(select(anova_data_R, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS R", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Spatial Planning (SP)

## FOR SP
anova_data_SP <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Spatial Planning`) %>% 
  rename(score = `Score_Spatial Planning`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_SP <- ezANOVA(
  data = anova_data_SP
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_SP$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_SP$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = 2) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_SP$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9924
0.2653

kable(unlist(leveneTest(data = anova_data_SP, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.7806
Pr(>F)1 0.4593

kable(anova_SP$ANOVA, caption = "SP - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SP - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 92113.654 12884.07 1665.8153 0.0000 * 0.8773
condition 2 233 31.027 12884.07 0.2806 0.7556 0.0024

plot(anova_data_SP$condition, anova_data_SP$score)


ggbetweenstats(select(anova_data_SP, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS SP", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Spatial Span (SS)

## FOR SS
anova_data_SS <- 
  main_all_data_final %>% 
  select(participant, condition, 'Score_Spatial Span') %>% 
  rename(score = 'Score_Spatial Span')

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_SS <- ezANOVA(
  data = anova_data_SS
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_SS$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_SS$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .5) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_SS$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9372
0.0000

kable(unlist(leveneTest(data = anova_data_SS, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.6904
Pr(>F)1 0.5024

kable(anova_SS$ANOVA, caption = "SS - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SS - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 8553.9543 234.5105 8498.8575 0.0000 * 0.9733
condition 2 233 1.2183 234.5105 0.6052 0.5468 0.0052

plot(anova_data_SS$condition, anova_data_SS$score)


ggbetweenstats(select(anova_data_SS, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS SS", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Token Search (TS)

## FOR TS
anova_data_TS <- 
  main_all_data_final %>% 
  select(participant, condition, `Score_Token Search`) %>% 
  rename(score = `Score_Token Search`)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_TS <- ezANOVA(
  data = anova_data_TS
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_TS$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_TS$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .7) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_TS$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9878
0.0420

kable(unlist(leveneTest(data = anova_data_TS, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.9697
Pr(>F)1 0.3807

kable(anova_TS$ANOVA, caption = "TS - one-way ANOVA on Ospan Absolute Score", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
TS - one-way ANOVA on Ospan Absolute Score
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 15367.4157 714.4989 5011.3556 0.000 * 0.9556
condition 2 233 4.6325 714.4989 0.7553 0.471 0.0064

plot(anova_data_TS$condition, anova_data_TS$score)


ggbetweenstats(select(anova_data_TS, -participant), condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS TS", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Regression

Run a regression:

(1) Memory

  • criterion: CBS Memory Composite Score
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques only

# run model
reg_mem_model_ques <- 
  lm(data = main_all_data_final, 
     CBS_ts_memory ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_mem_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_mem_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_mem_model_ques$fitted.values, reg_mem_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_mem_model_ques)

Call:
lm(formula = CBS_ts_memory ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.76490 -0.40881  0.00293  0.40292  1.99965 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)     0.269188   0.208430   1.291   0.1978  
NMPQ_sum       -0.003939   0.003573  -1.103   0.2714  
MPIQ_sum       -0.002435   0.009070  -0.268   0.7886  
MPIQ_SI_sum     0.000233   0.018126   0.013   0.9898  
MPIQ_VFO_sum   -0.022645   0.013207  -1.715   0.0878 .
SAD_dep_sum    -0.011238   0.016323  -0.689   0.4918  
SAD_ea_sum      0.012216   0.013629   0.896   0.3710  
SAD_access_sum  0.015513   0.017631   0.880   0.3799  
SAD_dist_sum    0.015301   0.021514   0.711   0.4777  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6501 on 228 degrees of freedom
Multiple R-squared:  0.03229,   Adjusted R-squared:  -0.001669 
F-statistic: 0.9509 on 8 and 228 DF,  p-value: 0.4755

All

# run model
reg_mem_model <- 
  lm(data = main_all_data_final, 
     CBS_ts_memory ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_mem_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_mem_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_mem_model$fitted.values, reg_mem_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_mem_model)

Call:
lm(formula = CBS_ts_memory ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.71697 -0.42017 -0.01152  0.37304  2.05690 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)      2.2401681  0.8324896   2.691  0.00767 **
NMPQ_sum        -0.0047095  0.0036746  -1.282  0.20133   
MPIQ_sum        -0.0040058  0.0093263  -0.430  0.66797   
MPIQ_SI_sum      0.0036902  0.0189854   0.194  0.84607   
MPIQ_VFO_sum    -0.0205257  0.0133913  -1.533  0.12677   
SAD_dep_sum     -0.0173061  0.0166563  -1.039  0.29994   
SAD_ea_sum       0.0134613  0.0137619   0.978  0.32907   
SAD_access_sum   0.0155621  0.0178501   0.872  0.38426   
SAD_dist_sum     0.0208921  0.0227093   0.920  0.35859   
age             -0.1036947  0.0419990  -2.469  0.01431 * 
age_first_phone  0.0004374  0.0280995   0.016  0.98759   
dist_daily      -0.0035089  0.0365928  -0.096  0.92369   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6498 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.06221,   Adjusted R-squared:  0.01532 
F-statistic: 1.327 on 11 and 220 DF,  p-value: 0.2108

(2) Reasoning

  • criterion: CBS Reasoning Composite Score
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques only

# run model
reg_reason_model_ques <- 
  lm(data = main_all_data_final, 
     CBS_ts_reason ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_reason_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_reason_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_reason_model_ques$fitted.values, reg_reason_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_reason_model_ques)

Call:
lm(formula = CBS_ts_reason ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.46317 -0.37229 -0.02453  0.34733  1.75921 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.327931   0.184657  -1.776   0.0771 .
NMPQ_sum       -0.001827   0.003165  -0.577   0.5643  
MPIQ_sum        0.006707   0.008036   0.835   0.4048  
MPIQ_SI_sum     0.006910   0.016059   0.430   0.6674  
MPIQ_VFO_sum   -0.010627   0.011701  -0.908   0.3647  
SAD_dep_sum    -0.026794   0.014461  -1.853   0.0652 .
SAD_ea_sum      0.001420   0.012074   0.118   0.9065  
SAD_access_sum  0.027080   0.015620   1.734   0.0843 .
SAD_dist_sum    0.024733   0.019060   1.298   0.1957  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.576 on 228 degrees of freedom
Multiple R-squared:  0.04635,   Adjusted R-squared:  0.01289 
F-statistic: 1.385 on 8 and 228 DF,  p-value: 0.2038

All

# run model
reg_reason_model <- 
  lm(data = main_all_data_final, 
     CBS_ts_reason ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_reason_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_reason_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_reason_model$fitted.values, reg_reason_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_reason_model)

Call:
lm(formula = CBS_ts_reason ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.50093 -0.35867 -0.00029  0.32271  1.73308 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.679207   0.742925   0.914   0.3616  
NMPQ_sum        -0.002838   0.003279  -0.865   0.3878  
MPIQ_sum         0.004879   0.008323   0.586   0.5584  
MPIQ_SI_sum      0.011862   0.016943   0.700   0.4846  
MPIQ_VFO_sum    -0.008010   0.011951  -0.670   0.5034  
SAD_dep_sum     -0.029307   0.014864  -1.972   0.0499 *
SAD_ea_sum       0.002803   0.012281   0.228   0.8196  
SAD_access_sum   0.027124   0.015930   1.703   0.0900 .
SAD_dist_sum     0.022202   0.020266   1.096   0.2745  
age             -0.047245   0.037480  -1.261   0.2088  
age_first_phone -0.010540   0.025076  -0.420   0.6747  
dist_daily       0.015930   0.032656   0.488   0.6262  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.5799 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05526,   Adjusted R-squared:  0.008025 
F-statistic:  1.17 on 11 and 220 DF,  p-value: 0.3093

(3) Verbal Ability

  • criterion: CBS Verbal Ability Composite Score
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_verbal_model_ques <- 
  lm(data = main_all_data_final, 
     CBS_ts_verbalab ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_verbal_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_verbal_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_verbal_model_ques$fitted.values, reg_verbal_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_verbal_model_ques)

Call:
lm(formula = CBS_ts_verbalab ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.73108 -0.54433  0.08909  0.50922  1.80435 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.156903   0.237722  -0.660   0.5099  
NMPQ_sum       -0.002229   0.004075  -0.547   0.5849  
MPIQ_sum       -0.016238   0.010345  -1.570   0.1179  
MPIQ_SI_sum     0.016899   0.020674   0.817   0.4146  
MPIQ_VFO_sum   -0.017670   0.015063  -1.173   0.2420  
SAD_dep_sum     0.002900   0.018616   0.156   0.8763  
SAD_ea_sum      0.023496   0.015544   1.512   0.1320  
SAD_access_sum  0.035502   0.020109   1.765   0.0788 .
SAD_dist_sum   -0.003720   0.024537  -0.152   0.8796  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7415 on 228 degrees of freedom
Multiple R-squared:  0.04541,   Adjusted R-squared:  0.01192 
F-statistic: 1.356 on 8 and 228 DF,  p-value: 0.2172

All

# run model
reg_verbal_model <- 
  lm(data = main_all_data_final, 
     CBS_ts_verbalab ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_verbal_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_verbal_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_verbal_model$fitted.values, reg_verbal_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_verbal_model)

Call:
lm(formula = CBS_ts_verbalab ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.61007 -0.53163  0.08022  0.49012  1.85469 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.3987444  0.9571699   0.417   0.6774  
NMPQ_sum        -0.0020270  0.0042250  -0.480   0.6319  
MPIQ_sum        -0.0167549  0.0107231  -1.563   0.1196  
MPIQ_SI_sum      0.0149770  0.0218288   0.686   0.4934  
MPIQ_VFO_sum    -0.0150641  0.0153968  -0.978   0.3290  
SAD_dep_sum      0.0027468  0.0191509   0.143   0.8861  
SAD_ea_sum       0.0236805  0.0158230   1.497   0.1359  
SAD_access_sum   0.0355591  0.0205235   1.733   0.0846 .
SAD_dist_sum    -0.0074507  0.0261105  -0.285   0.7756  
age              0.0043695  0.0482891   0.090   0.9280  
age_first_phone -0.0451423  0.0323079  -1.397   0.1637  
dist_daily       0.0001479  0.0420732   0.004   0.9972  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7471 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05652,   Adjusted R-squared:  0.009346 
F-statistic: 1.198 on 11 and 220 DF,  p-value: 0.2895

(4) Concentration

  • criterion: CBS Concentration Composite Score
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_con_model_ques <- 
  lm(data = main_all_data_final, 
     CBS_ts_con ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_con_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_con_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_con_model_ques$fitted.values, reg_con_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_con_model_ques)

Call:
lm(formula = CBS_ts_con ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.11617 -0.48175  0.01839  0.56779  1.77083 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.019978   0.245409  -0.081   0.9352  
NMPQ_sum       -0.006517   0.004206  -1.549   0.1227  
MPIQ_sum       -0.022710   0.010679  -2.127   0.0345 *
MPIQ_SI_sum     0.028127   0.021342   1.318   0.1889  
MPIQ_VFO_sum   -0.002406   0.015550  -0.155   0.8772  
SAD_dep_sum     0.013585   0.019218   0.707   0.4804  
SAD_ea_sum      0.031058   0.016047   1.935   0.0542 .
SAD_access_sum -0.009626   0.020759  -0.464   0.6433  
SAD_dist_sum    0.043136   0.025331   1.703   0.0899 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7655 on 228 degrees of freedom
Multiple R-squared:  0.05628,   Adjusted R-squared:  0.02317 
F-statistic:   1.7 on 8 and 228 DF,  p-value: 0.09943
# tab_model(reg_con_model_ques, show.std = T, show.stat = T, show.fstat = T)

All

# run model
reg_con_model <- 
  lm(data = main_all_data_final, 
     CBS_ts_con ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_con_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_con_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_con_model$fitted.values, reg_con_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_con_model)

Call:
lm(formula = CBS_ts_con ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.07087 -0.49591  0.03181  0.52266  1.76315 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      3.188479   0.942656   3.382  0.00085 ***
NMPQ_sum        -0.007767   0.004161  -1.867  0.06329 .  
MPIQ_sum        -0.020767   0.010560  -1.966  0.05050 .  
MPIQ_SI_sum      0.029832   0.021498   1.388  0.16664    
MPIQ_VFO_sum     0.001357   0.015163   0.090  0.92875    
SAD_dep_sum      0.007986   0.018860   0.423  0.67240    
SAD_ea_sum       0.035178   0.015583   2.257  0.02496 *  
SAD_access_sum  -0.008655   0.020212  -0.428  0.66892    
SAD_dist_sum     0.053907   0.025715   2.096  0.03719 *  
age             -0.150454   0.047557  -3.164  0.00178 ** 
age_first_phone -0.008800   0.031818  -0.277  0.78238    
dist_daily      -0.076396   0.041435  -1.844  0.06656 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7358 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.1199,    Adjusted R-squared:  0.0759 
F-statistic: 2.725 on 11 and 220 DF,  p-value: 0.002558

Indv Tasks

SS

  • criterion: CBS SS
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_SS_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_SS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_SS_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_SS_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_SS_model_ques$fitted.values, reg_SS_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_SS_model_ques)

Call:
lm(formula = ZScore_SS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.2229 -0.9094 -0.0441  0.8839  2.9601 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)
(Intercept)     0.2327015  0.3235318   0.719    0.473
NMPQ_sum       -0.0076786  0.0055455  -1.385    0.168
MPIQ_sum        0.0027901  0.0140791   0.198    0.843
MPIQ_SI_sum    -0.0038576  0.0281362  -0.137    0.891
MPIQ_VFO_sum   -0.0103916  0.0205003  -0.507    0.613
SAD_dep_sum    -0.0008165  0.0253364  -0.032    0.974
SAD_ea_sum     -0.0015926  0.0211548  -0.075    0.940
SAD_access_sum  0.0280951  0.0273672   1.027    0.306
SAD_dist_sum    0.0160620  0.0333942   0.481    0.631

Residual standard error: 1.009 on 228 degrees of freedom
Multiple R-squared:  0.01611,   Adjusted R-squared:  -0.01841 
F-statistic: 0.4668 on 8 and 228 DF,  p-value: 0.8788

All

# run model
reg_SS_model <- 
  lm(data = main_all_data_final, 
     ZScore_SS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_SS_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_SS_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_SS_model$fitted.values, reg_SS_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_SS_model)

Call:
lm(formula = ZScore_SS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.31352 -0.77563 -0.08641  0.76060  3.06957 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)      4.0630929  1.2766563   3.183  0.00167 **
NMPQ_sum        -0.0088097  0.0056352  -1.563  0.11941   
MPIQ_sum        -0.0009945  0.0143023  -0.070  0.94463   
MPIQ_SI_sum      0.0031694  0.0291149   0.109  0.91341   
MPIQ_VFO_sum    -0.0073975  0.0205360  -0.360  0.71903   
SAD_dep_sum     -0.0127129  0.0255431  -0.498  0.61919   
SAD_ea_sum       0.0010002  0.0211044   0.047  0.96224   
SAD_access_sum   0.0276948  0.0273739   1.012  0.31278   
SAD_dist_sum     0.0270731  0.0348257   0.777  0.43776   
age             -0.2014660  0.0644072  -3.128  0.00200 **
age_first_phone -0.0026709  0.0430917  -0.062  0.95063   
dist_daily       0.0023242  0.0561165   0.041  0.96700   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9965 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.06308,   Adjusted R-squared:  0.01623 
F-statistic: 1.346 on 11 and 220 DF,  p-value: 0.2004

ML

  • criterion: CBS ML
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_ML_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_ML ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_ML_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_ML_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_ML_model_ques$fitted.values, reg_ML_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_ML_model_ques)

Call:
lm(formula = ZScore_ML ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.05957 -0.68748  0.03712  0.79287  2.38286 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)     0.532353   0.320900   1.659   0.0985 .
NMPQ_sum       -0.002722   0.005500  -0.495   0.6212  
MPIQ_sum       -0.019263   0.013965  -1.379   0.1691  
MPIQ_SI_sum     0.011329   0.027907   0.406   0.6852  
MPIQ_VFO_sum   -0.029107   0.020334  -1.431   0.1537  
SAD_dep_sum    -0.011184   0.025130  -0.445   0.6567  
SAD_ea_sum      0.017353   0.020983   0.827   0.4091  
SAD_access_sum  0.017655   0.027145   0.650   0.5161  
SAD_dist_sum    0.015344   0.033123   0.463   0.6436  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.001 on 228 degrees of freedom
Multiple R-squared:  0.03205,   Adjusted R-squared:  -0.001908 
F-statistic: 0.9438 on 8 and 228 DF,  p-value: 0.4812

All

# run model
reg_ML_model <- 
  lm(data = main_all_data_final, 
     ZScore_ML ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_ML_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_ML_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_ML_model$fitted.values, reg_ML_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_ML_model)

Call:
lm(formula = ZScore_ML ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.02539 -0.66078  0.05572  0.70769  2.39375 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      2.788179   1.286700   2.167   0.0313 *
NMPQ_sum        -0.002489   0.005680  -0.438   0.6616  
MPIQ_sum        -0.016612   0.014415  -1.152   0.2504  
MPIQ_SI_sum      0.009444   0.029344   0.322   0.7479  
MPIQ_VFO_sum    -0.028025   0.020698  -1.354   0.1771  
SAD_dep_sum     -0.016198   0.025744  -0.629   0.5299  
SAD_ea_sum       0.015592   0.021270   0.733   0.4643  
SAD_access_sum   0.014927   0.027589   0.541   0.5890  
SAD_dist_sum     0.034307   0.035100   0.977   0.3294  
age             -0.112095   0.064914  -1.727   0.0856 .
age_first_phone  0.005514   0.043431   0.127   0.8991  
dist_daily      -0.071529   0.056558  -1.265   0.2073  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.004 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05113,   Adjusted R-squared:  0.003683 
F-statistic: 1.078 on 11 and 220 DF,  p-value: 0.3804

TS

  • criterion: CBS TS
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_TS_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_TS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_TS_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_TS_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_TS_model_ques$fitted.values, reg_TS_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_TS_model_ques)

Call:
lm(formula = ZScore_TS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.86688 -0.59231 -0.01871  0.55617  2.45538 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.066122   0.319347  -0.207   0.8362  
NMPQ_sum       -0.003830   0.005474  -0.700   0.4849  
MPIQ_sum       -0.002203   0.013897  -0.159   0.8742  
MPIQ_SI_sum     0.015338   0.027772   0.552   0.5813  
MPIQ_VFO_sum   -0.043960   0.020235  -2.172   0.0309 *
SAD_dep_sum    -0.029877   0.025009  -1.195   0.2335  
SAD_ea_sum      0.021452   0.020881   1.027   0.3054  
SAD_access_sum  0.022111   0.027013   0.819   0.4139  
SAD_dist_sum    0.054550   0.032962   1.655   0.0993 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9961 on 228 degrees of freedom
Multiple R-squared:  0.0414,    Adjusted R-squared:  0.007766 
F-statistic: 1.231 on 8 and 228 DF,  p-value: 0.2818

All

# run model
reg_TS_model <- 
  lm(data = main_all_data_final, 
     ZScore_TS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_TS_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_TS_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_TS_model$fitted.values, reg_TS_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_TS_model)

Call:
lm(formula = ZScore_TS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.90214 -0.61490 -0.03577  0.57125  2.38085 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      1.651045   1.290956   1.279   0.2023  
NMPQ_sum        -0.003774   0.005698  -0.662   0.5084  
MPIQ_sum        -0.002178   0.014462  -0.151   0.8804  
MPIQ_SI_sum      0.013394   0.029441   0.455   0.6496  
MPIQ_VFO_sum    -0.042843   0.020766  -2.063   0.0403 *
SAD_dep_sum     -0.036455   0.025829  -1.411   0.1595  
SAD_ea_sum       0.022776   0.021341   1.067   0.2870  
SAD_access_sum   0.024647   0.027680   0.890   0.3742  
SAD_dist_sum     0.059979   0.035216   1.703   0.0899 .
age             -0.086741   0.065129  -1.332   0.1843  
age_first_phone -0.001405   0.043574  -0.032   0.9743  
dist_daily      -0.021437   0.056745  -0.378   0.7060  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.008 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05019,   Adjusted R-squared:  0.002694 
F-statistic: 1.057 on 11 and 220 DF,  p-value: 0.3978

PA

  • criterion: CBS PA
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_PA_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_PA ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_PA_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_PA_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_PA_model_ques$fitted.values, reg_PA_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_PA_model_ques)

Call:
lm(formula = ZScore_PA ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.84784 -0.85076  0.01624  0.84209  3.04934 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)
(Intercept)     0.377818   0.323902   1.166    0.245
NMPQ_sum       -0.001526   0.005552  -0.275    0.784
MPIQ_sum        0.008936   0.014095   0.634    0.527
MPIQ_SI_sum    -0.021877   0.028168  -0.777    0.438
MPIQ_VFO_sum   -0.007122   0.020524  -0.347    0.729
SAD_dep_sum    -0.003075   0.025365  -0.121    0.904
SAD_ea_sum      0.011651   0.021179   0.550    0.583
SAD_access_sum -0.005809   0.027399  -0.212    0.832
SAD_dist_sum   -0.024751   0.033432  -0.740    0.460

Residual standard error: 1.01 on 228 degrees of freedom
Multiple R-squared:  0.01386,   Adjusted R-squared:  -0.02074 
F-statistic: 0.4005 on 8 and 228 DF,  p-value: 0.9195

All

# run model
reg_PA_model <- 
  lm(data = main_all_data_final, 
     ZScore_PA ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_PA_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_PA_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_PA_model$fitted.values, reg_PA_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_PA_model)

Call:
lm(formula = ZScore_PA ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.87551 -0.83633 -0.00973  0.81136  2.98974 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
(Intercept)      0.4583555  1.3036003   0.352    0.725
NMPQ_sum        -0.0037644  0.0057541  -0.654    0.514
MPIQ_sum         0.0037617  0.0146041   0.258    0.797
MPIQ_SI_sum     -0.0112458  0.0297294  -0.378    0.706
MPIQ_VFO_sum    -0.0038368  0.0209694  -0.183    0.855
SAD_dep_sum     -0.0038579  0.0260822  -0.148    0.883
SAD_ea_sum       0.0144767  0.0215498   0.672    0.502
SAD_access_sum  -0.0050206  0.0279516  -0.180    0.858
SAD_dist_sum    -0.0377907  0.0355607  -1.063    0.289
age             -0.0144768  0.0657665  -0.220    0.826
age_first_phone  0.0003111  0.0440012   0.007    0.994
dist_daily       0.0766063  0.0573008   1.337    0.183

Residual standard error: 1.018 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.02322,   Adjusted R-squared:  -0.02562 
F-statistic: 0.4755 on 11 and 220 DF,  p-value: 0.9172

SP

  • criterion: CBS SP
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_SP_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_SP ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_SP_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_SP_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_SP_model_ques$fitted.values, reg_SP_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_SP_model_ques)

Call:
lm(formula = ZScore_SP ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.20368 -0.75125 -0.04354  0.70945  2.87842 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)
(Intercept)     0.053847   0.324133   0.166    0.868
NMPQ_sum        0.003830   0.005556   0.689    0.491
MPIQ_sum        0.010408   0.014105   0.738    0.461
MPIQ_SI_sum    -0.022905   0.028189  -0.813    0.417
MPIQ_VFO_sum   -0.013743   0.020538  -0.669    0.504
SAD_dep_sum    -0.007590   0.025384  -0.299    0.765
SAD_ea_sum     -0.009555   0.021194  -0.451    0.653
SAD_access_sum -0.003637   0.027418  -0.133    0.895
SAD_dist_sum    0.006969   0.033456   0.208    0.835

Residual standard error: 1.011 on 228 degrees of freedom
Multiple R-squared:  0.01245,   Adjusted R-squared:  -0.0222 
F-statistic: 0.3594 on 8 and 228 DF,  p-value: 0.9408

All

# run model
reg_SP_model <- 
  lm(data = main_all_data_final, 
     ZScore_SP ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_SP_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_SP_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_SP_model$fitted.values, reg_SP_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_SP_model)

Call:
lm(formula = ZScore_SP ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.27218 -0.72161 -0.01017  0.68744  2.86097 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)
(Intercept)      0.819931   1.303194   0.629    0.530
NMPQ_sum         0.002458   0.005752   0.427    0.670
MPIQ_sum         0.006074   0.014600   0.416    0.678
MPIQ_SI_sum     -0.012407   0.029720  -0.417    0.677
MPIQ_VFO_sum    -0.011311   0.020963  -0.540    0.590
SAD_dep_sum     -0.012540   0.026074  -0.481    0.631
SAD_ea_sum      -0.004729   0.021543  -0.220    0.826
SAD_access_sum  -0.003440   0.027943  -0.123    0.902
SAD_dist_sum     0.004708   0.035550   0.132    0.895
age             -0.056913   0.065746  -0.866    0.388
age_first_phone  0.017286   0.043987   0.393    0.695
dist_daily       0.023659   0.057283   0.413    0.680

Residual standard error: 1.017 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.01303,   Adjusted R-squared:  -0.03632 
F-statistic: 0.264 on 11 and 220 DF,  p-value: 0.9915

R

  • criterion: CBS R
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_R_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_R ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_R_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_R_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_R_model_ques$fitted.values, reg_R_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_R_model_ques)

Call:
lm(formula = ZScore_R ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + 
    SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum, 
    data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.5923 -0.6464 -0.0307  0.6603  3.4157 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.1623077  0.3207941  -0.506   0.6134  
NMPQ_sum        0.0013218  0.0054986   0.240   0.8102  
MPIQ_sum       -0.0057686  0.0139599  -0.413   0.6798  
MPIQ_SI_sum     0.0199086  0.0278981   0.714   0.4762  
MPIQ_VFO_sum    0.0025005  0.0203268   0.123   0.9022  
SAD_dep_sum    -0.0630658  0.0251220  -2.510   0.0128 *
SAD_ea_sum      0.0008803  0.0209758   0.042   0.9666  
SAD_access_sum  0.0272076  0.0271356   1.003   0.3171  
SAD_dist_sum    0.0323154  0.0331116   0.976   0.3301  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.001 on 228 degrees of freedom
Multiple R-squared:  0.03269,   Adjusted R-squared:  -0.001247 
F-statistic: 0.9633 on 8 and 228 DF,  p-value: 0.4656

All

# run model
reg_R_model <- 
  lm(data = main_all_data_final, 
     ZScore_R ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_R_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_R_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_R_model$fitted.values, reg_R_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_R_model)

Call:
lm(formula = ZScore_R ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + 
    SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + 
    age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7333 -0.6612 -0.0259  0.6050  3.3191 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)      2.2619217  1.2689614   1.782  0.07605 . 
NMPQ_sum        -0.0003648  0.0056012  -0.065  0.94814   
MPIQ_sum        -0.0091543  0.0142161  -0.644  0.52028   
MPIQ_SI_sum      0.0276919  0.0289394   0.957  0.33967   
MPIQ_VFO_sum     0.0112851  0.0204122   0.553  0.58092   
SAD_dep_sum     -0.0729526  0.0253891  -2.873  0.00446 **
SAD_ea_sum       0.0060847  0.0209772   0.290  0.77204   
SAD_access_sum   0.0321569  0.0272089   1.182  0.23854   
SAD_dist_sum     0.0197895  0.0346158   0.572  0.56812   
age             -0.0940153  0.0640190  -1.469  0.14338   
age_first_phone -0.0477042  0.0428320  -1.114  0.26660   
dist_daily       0.0163622  0.0557782   0.293  0.76954   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9905 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05405,   Adjusted R-squared:  0.006754 
F-statistic: 1.143 on 11 and 220 DF,  p-value: 0.3292

P

  • criterion: CBS P
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_P_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_P ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_P_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_P_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_P_model_ques$fitted.values, reg_P_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_P_model_ques)

Call:
lm(formula = ZScore_P ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + 
    SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum, 
    data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.02296 -0.73706 -0.04714  0.54033  2.75928 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)   
(Intercept)    -0.899701   0.317002  -2.838  0.00495 **
NMPQ_sum       -0.004425   0.005434  -0.814  0.41628   
MPIQ_sum        0.011205   0.013795   0.812  0.41750   
MPIQ_SI_sum     0.019638   0.027568   0.712  0.47699   
MPIQ_VFO_sum   -0.008569   0.020087  -0.427  0.67008   
SAD_dep_sum    -0.033921   0.024825  -1.366  0.17315   
SAD_ea_sum      0.026808   0.020728   1.293  0.19720   
SAD_access_sum  0.042334   0.026815   1.579  0.11578   
SAD_dist_sum    0.015089   0.032720   0.461  0.64514   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9888 on 228 degrees of freedom
Multiple R-squared:  0.05543,   Adjusted R-squared:  0.02229 
F-statistic: 1.672 on 8 and 228 DF,  p-value: 0.1061

All

# run model
reg_P_model <- 
  lm(data = main_all_data_final, 
     ZScore_P ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_P_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_P_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_P_model$fitted.values, reg_P_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_P_model)

Call:
lm(formula = ZScore_P ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + 
    SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + 
    age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.98898 -0.73044 -0.03188  0.53953  2.78073 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)
(Intercept)      0.193023   1.264262   0.153    0.879
NMPQ_sum        -0.004389   0.005580  -0.787    0.432
MPIQ_sum         0.014483   0.014163   1.023    0.308
MPIQ_SI_sum      0.020276   0.028832   0.703    0.483
MPIQ_VFO_sum    -0.011322   0.020337  -0.557    0.578
SAD_dep_sum     -0.029756   0.025295  -1.176    0.241
SAD_ea_sum       0.022359   0.020900   1.070    0.286
SAD_access_sum   0.035448   0.027108   1.308    0.192
SAD_dist_sum     0.030544   0.034488   0.886    0.377
age             -0.055248   0.063782  -0.866    0.387
age_first_phone  0.003245   0.042673   0.076    0.939
dist_daily      -0.036921   0.055572  -0.664    0.507

Residual standard error: 0.9868 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.06263,   Adjusted R-squared:  0.01576 
F-statistic: 1.336 on 11 and 220 DF,  p-value: 0.2057

OOO

  • criterion: CBS OOO
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_OOO_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_OOO ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_OOO_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_OOO_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_OOO_model_ques$fitted.values, reg_OOO_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_OOO_model_ques)

Call:
lm(formula = ZScore_OOO ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9553 -0.6554  0.1237  0.7203  2.3789 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)
(Intercept)    -0.303563   0.318995  -0.952    0.342
NMPQ_sum       -0.008036   0.005468  -1.470    0.143
MPIQ_sum        0.010982   0.013882   0.791    0.430
MPIQ_SI_sum     0.010999   0.027742   0.396    0.692
MPIQ_VFO_sum   -0.022697   0.020213  -1.123    0.263
SAD_dep_sum    -0.002600   0.024981  -0.104    0.917
SAD_ea_sum     -0.012455   0.020858  -0.597    0.551
SAD_access_sum  0.042416   0.026983   1.572    0.117
SAD_dist_sum    0.044559   0.032926   1.353    0.177

Residual standard error: 0.995 on 228 degrees of freedom
Multiple R-squared:  0.04351,   Adjusted R-squared:  0.009952 
F-statistic: 1.297 on 8 and 228 DF,  p-value: 0.2462

All

# run model
reg_OOO_model <- 
  lm(data = main_all_data_final, 
     ZScore_OOO ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_OOO_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_OOO_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_OOO_model$fitted.values, reg_OOO_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_OOO_model)

Call:
lm(formula = ZScore_OOO ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.90327 -0.60239  0.09308  0.67967  2.39112 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)
(Intercept)     -0.558049   1.278676  -0.436    0.663
NMPQ_sum        -0.009054   0.005644  -1.604    0.110
MPIQ_sum         0.008112   0.014325   0.566    0.572
MPIQ_SI_sum      0.011886   0.029161   0.408    0.684
MPIQ_VFO_sum    -0.020693   0.020569  -1.006    0.315
SAD_dep_sum     -0.001977   0.025583  -0.077    0.938
SAD_ea_sum      -0.012500   0.021138  -0.591    0.555
SAD_access_sum   0.044329   0.027417   1.617    0.107
SAD_dist_sum     0.033768   0.034881   0.968    0.334
age              0.017197   0.064509   0.267    0.790
age_first_phone -0.014989   0.043160  -0.347    0.729
dist_daily       0.060620   0.056205   1.079    0.282

Residual standard error: 0.9981 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05004,   Adjusted R-squared:  0.002544 
F-statistic: 1.054 on 11 and 220 DF,  p-value: 0.4005

FM

  • criterion: CBS FM
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_FM_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_FM ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_FM_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_FM_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_FM_model_ques$fitted.values, reg_FM_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_FM_model_ques)

Call:
lm(formula = ZScore_FM ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.52759 -0.70592 -0.02009  0.70671  2.29839 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)
(Intercept)    -0.129414   0.321768  -0.402    0.688
NMPQ_sum       -0.005452   0.005515  -0.988    0.324
MPIQ_sum       -0.020667   0.014002  -1.476    0.141
MPIQ_SI_sum     0.024831   0.027983   0.887    0.376
MPIQ_VFO_sum   -0.001425   0.020389  -0.070    0.944
SAD_dep_sum    -0.001022   0.025198  -0.041    0.968
SAD_ea_sum      0.032567   0.021039   1.548    0.123
SAD_access_sum  0.003953   0.027218   0.145    0.885
SAD_dist_sum    0.037767   0.033212   1.137    0.257

Residual standard error: 1.004 on 228 degrees of freedom
Multiple R-squared:  0.02681,   Adjusted R-squared:  -0.007336 
F-statistic: 0.7851 on 8 and 228 DF,  p-value: 0.6162

All

# run model
reg_FM_model <- 
  lm(data = main_all_data_final, 
     ZScore_FM ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_FM_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_FM_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_FM_model$fitted.values, reg_FM_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_FM_model)

Call:
lm(formula = ZScore_FM ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.45504 -0.73414 -0.00603  0.66393  2.24378 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      4.350e+00  1.235e+00   3.522 0.000520 ***
NMPQ_sum        -6.747e-03  5.451e-03  -1.238 0.217140    
MPIQ_sum        -1.772e-02  1.383e-02  -1.281 0.201472    
MPIQ_SI_sum      2.672e-02  2.816e-02   0.949 0.343824    
MPIQ_VFO_sum     3.031e-05  1.986e-02   0.002 0.998784    
SAD_dep_sum     -8.506e-03  2.471e-02  -0.344 0.730980    
SAD_ea_sum       3.563e-02  2.041e-02   1.745 0.082311 .  
SAD_access_sum   3.868e-03  2.648e-02   0.146 0.884007    
SAD_dist_sum     5.788e-02  3.369e-02   1.718 0.087162 .  
age             -2.291e-01  6.230e-02  -3.678 0.000296 ***
age_first_phone  7.742e-03  4.168e-02   0.186 0.852820    
dist_daily      -8.879e-02  5.428e-02  -1.636 0.103324    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9639 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.09381,   Adjusted R-squared:  0.0485 
F-statistic:  2.07 on 11 and 220 DF,  p-value: 0.02355

DT

  • criterion: CBS DT
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_DT_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_DT ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_DT_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_DT_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_DT_model_ques$fitted.values, reg_DT_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_DT_model_ques)

Call:
lm(formula = ZScore_DT ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.2813 -0.7178  0.2195  0.7270  2.5459 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)     0.089459   0.318591   0.281   0.7791  
NMPQ_sum       -0.007583   0.005461  -1.389   0.1663  
MPIQ_sum       -0.024754   0.013864  -1.785   0.0755 .
MPIQ_SI_sum     0.031424   0.027707   1.134   0.2579  
MPIQ_VFO_sum   -0.003387   0.020187  -0.168   0.8669  
SAD_dep_sum     0.028192   0.024949   1.130   0.2597  
SAD_ea_sum      0.029548   0.020832   1.418   0.1574  
SAD_access_sum -0.023204   0.026949  -0.861   0.3901  
SAD_dist_sum    0.048506   0.032884   1.475   0.1416  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9938 on 228 degrees of freedom
Multiple R-squared:  0.04593,   Adjusted R-squared:  0.01246 
F-statistic: 1.372 on 8 and 228 DF,  p-value: 0.2097

All

# run model
reg_DT_model <- 
  lm(data = main_all_data_final, 
     ZScore_DT ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_DT_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_DT_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_DT_model$fitted.values, reg_DT_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_DT_model)

Call:
lm(formula = ZScore_DT ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.3408 -0.6231  0.1864  0.7393  2.5172 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      2.027372   1.262997   1.605   0.1099  
NMPQ_sum        -0.008787   0.005575  -1.576   0.1164  
MPIQ_sum        -0.023809   0.014149  -1.683   0.0939 .
MPIQ_SI_sum      0.032946   0.028803   1.144   0.2539  
MPIQ_VFO_sum     0.002685   0.020316   0.132   0.8950  
SAD_dep_sum      0.024478   0.025270   0.969   0.3338  
SAD_ea_sum       0.034724   0.020879   1.663   0.0977 .
SAD_access_sum  -0.021177   0.027081  -0.782   0.4351  
SAD_dist_sum     0.049932   0.034453   1.449   0.1487  
age             -0.071789   0.063718  -1.127   0.2611  
age_first_phone -0.025341   0.042631  -0.594   0.5528  
dist_daily      -0.064002   0.055516  -1.153   0.2502  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9858 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.06762,   Adjusted R-squared:  0.021 
F-statistic:  1.45 on 11 and 220 DF,  p-value: 0.152

GR

  • criterion: CBS GR
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_GR_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_GR ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_GR_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_GR_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_GR_model_ques$fitted.values, reg_GR_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_GR_model_ques)

Call:
lm(formula = ZScore_GR ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4961 -0.5444  0.0563  0.5914  2.7962 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)   
(Intercept)    -0.125534   0.319011  -0.394  0.69431   
NMPQ_sum       -0.004574   0.005468  -0.837  0.40373   
MPIQ_sum       -0.009227   0.013882  -0.665  0.50692   
MPIQ_SI_sum     0.010590   0.027743   0.382  0.70304   
MPIQ_VFO_sum    0.010645   0.020214   0.527  0.59898   
SAD_dep_sum    -0.024287   0.024982  -0.972  0.33200   
SAD_ea_sum      0.010225   0.020859   0.490  0.62445   
SAD_access_sum  0.074580   0.026985   2.764  0.00618 **
SAD_dist_sum   -0.038792   0.032928  -1.178  0.23998   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9951 on 228 degrees of freedom
Multiple R-squared:  0.04342,   Adjusted R-squared:  0.009854 
F-statistic: 1.294 on 8 and 228 DF,  p-value: 0.2477

All

# run model
reg_GR_model <- 
  lm(data = main_all_data_final, 
     ZScore_GR ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_GR_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_GR_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_GR_model$fitted.values, reg_GR_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_GR_model)

Call:
lm(formula = ZScore_GR ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4819 -0.5444  0.0693  0.5762  2.8088 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)   
(Intercept)      0.377504   1.290285   0.293  0.77012   
NMPQ_sum        -0.005736   0.005695  -1.007  0.31500   
MPIQ_sum        -0.012904   0.014455  -0.893  0.37300   
MPIQ_SI_sum      0.015221   0.029426   0.517  0.60550   
MPIQ_VFO_sum     0.013651   0.020755   0.658  0.51141   
SAD_dep_sum     -0.026969   0.025816  -1.045  0.29731   
SAD_ea_sum       0.012622   0.021330   0.592  0.55462   
SAD_access_sum   0.077022   0.027666   2.784  0.00584 **
SAD_dist_sum    -0.049496   0.035197  -1.406  0.16106   
age             -0.020778   0.065095  -0.319  0.74989   
age_first_phone -0.017390   0.043552  -0.399  0.69006   
dist_daily       0.051786   0.056716   0.913  0.36220   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.007 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.05011,   Adjusted R-squared:  0.002619 
F-statistic: 1.055 on 11 and 220 DF,  p-value: 0.3992

DS

  • criterion: CBS DS
  • predictors: NMPQ; MPIQ: I, SI, VFO; SAD: Dep., EA, A, Dist.
    • explore: age, age of first phone, distracted by phone

Ques

# run model
reg_DS_model_ques <- 
  lm(data = main_all_data_final, 
     ZScore_DS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum)

## Assumptions
# show hist of residuals
qplot(reg_DS_model_ques$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_DS_model_ques$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_DS_model_ques$fitted.values, reg_DS_model_ques$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_DS_model_ques)

Call:
lm(formula = ZScore_DS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.37473 -0.61134 -0.06429  0.58339  2.63835 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)    -0.1882717  0.3165072  -0.595   0.5525  
NMPQ_sum        0.0001167  0.0054251   0.022   0.9829  
MPIQ_sum       -0.0232480  0.0137734  -1.688   0.0928 .
MPIQ_SI_sum     0.0232075  0.0275253   0.843   0.4000  
MPIQ_VFO_sum   -0.0459840  0.0200552  -2.293   0.0228 *
SAD_dep_sum     0.0300870  0.0247863   1.214   0.2261  
SAD_ea_sum      0.0367662  0.0206954   1.777   0.0770 .
SAD_access_sum -0.0035764  0.0267730  -0.134   0.8939  
SAD_dist_sum    0.0313513  0.0326691   0.960   0.3382  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9873 on 228 degrees of freedom
Multiple R-squared:  0.05837,   Adjusted R-squared:  0.02533 
F-statistic: 1.767 on 8 and 228 DF,  p-value: 0.08461

All

# run model
reg_DS_model <- 
  lm(data = main_all_data_final, 
     ZScore_DS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + SAD_dist_sum + age + age_first_phone + dist_daily)

## Assumptions
# show hist of residuals
qplot(reg_DS_model$fitted.values, main = "Histogram of Residuals", binwidth = .02) + theme_classic()


# check linearity
ggqqplot(reg_DS_model$residuals, ylab = "CBS", shape = 1)


# homogeneity 
plot(reg_DS_model$fitted.values, reg_DS_model$residuals) + abline(0,0) + abline(v = 0)
integer(0)

## Interpret model
summary(reg_DS_model)

Call:
lm(formula = ZScore_DS ~ NMPQ_sum + MPIQ_sum + MPIQ_SI_sum + 
    MPIQ_VFO_sum + SAD_dep_sum + SAD_ea_sum + SAD_access_sum + 
    SAD_dist_sum + age + age_first_phone + dist_daily, data = main_all_data_final)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.25243 -0.63346 -0.02663  0.55399  2.46688 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)      0.419985   1.262249   0.333   0.7397  
NMPQ_sum         0.001682   0.005572   0.302   0.7631  
MPIQ_sum        -0.020606   0.014141  -1.457   0.1465  
MPIQ_SI_sum      0.014733   0.028786   0.512   0.6093  
MPIQ_VFO_sum    -0.043779   0.020304  -2.156   0.0322 *
SAD_dep_sum      0.032463   0.025255   1.285   0.2000  
SAD_ea_sum       0.034739   0.020866   1.665   0.0974 .
SAD_access_sum  -0.005904   0.027065  -0.218   0.8275  
SAD_dist_sum     0.034595   0.034433   1.005   0.3161  
age              0.029517   0.063680   0.464   0.6435  
age_first_phone -0.072894   0.042605  -1.711   0.0885 .
dist_daily      -0.051490   0.055483  -0.928   0.3544  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9852 on 220 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.07919,   Adjusted R-squared:  0.03315 
F-statistic:  1.72 on 11 and 220 DF,  p-value: 0.07031

Exploratory Analyses

FA: CBS Tasks

Exploratory FA with all 12 CBS tasks

Checking the Data

To perform the factor analysis, we first examined the data for (1) missing data, (2) correlations between the items, and (3) the factorability of the data.

1. Missing Data
  • From the descriptives table, it seems that there is no missing or incomplete data. This was confirmed by finding the complete cases, which were equal to the total sample size (i.e. 237). Therefore, no data was removed due to missing values for this analysis (see descriptives table below).

# get a data frame with the 12 CBS Z-scores for the FA
fa_data <- 
  main_all_data_final %>% dplyr::select(contains("ZScore_")) %>%  # use "contains()" to use a string to select based on that pattern
  # re order variables to match Hampshire et al. (2012) for easier comparison... 
  select(ZScore_SS, ZScore_ML, ZScore_TS, ZScore_PA, ZScore_SP, ZScore_R, ZScore_P, ZScore_OOO, ZScore_FM, ZScore_DT, ZScore_GR, ZScore_DS)


# find the total complete cases to find any missing data from the data -- any participant with missing data must be removed
fa_complete = sum(complete.cases(fa_data))

# Show descriptives for the factor analysis data
fa_des = describe(fa_data)

# show descriptives in kable table 
kable(describe.by(fa_data), caption = "Descriptives for 12 CBS Tasks", digits = 4, align = 'c', escape = FALSE) %>%
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
Descriptives for 12 CBS Tasks
vars n mean sd median trimmed mad min max range skew kurtosis se
ZScore_SS 1 237 0 1 -0.0338 -0.0443 1.4834 -2.0349 2.9679 5.0029 0.3386 -0.0245 0.065
ZScore_ML 2 237 0 1 0.0689 0.0048 1.2100 -3.1957 2.5173 5.7130 -0.0462 0.1188 0.065
ZScore_TS 3 237 0 1 -0.0531 -0.0142 0.8488 -2.9158 2.8095 5.7254 0.0343 0.0615 0.065
ZScore_PA 4 237 0 1 0.0247 -0.0315 1.4467 -2.9027 2.9521 5.8548 0.2150 0.0322 0.065
ZScore_SP 5 237 0 1 -0.0982 -0.0264 0.9976 -2.3861 2.8625 5.2485 0.2201 -0.3124 0.065
ZScore_R 6 237 0 1 -0.0363 -0.0006 1.0195 -2.6674 3.2226 5.8900 0.0409 -0.0350 0.065
ZScore_P 7 237 0 1 0.0144 -0.0397 0.9915 -2.0706 2.6895 4.7601 0.3009 -0.2269 0.065
ZScore_OOO 8 237 0 1 0.2743 0.0401 0.8843 -3.0062 2.3619 5.3681 -0.3829 -0.2896 0.065
ZScore_FM 9 237 0 1 -0.0408 0.0127 0.9692 -2.5467 2.3563 4.9030 -0.0514 -0.5540 0.065
ZScore_DT 10 237 0 1 0.1767 0.0430 0.9237 -2.1078 2.3228 4.4305 -0.4230 -0.7245 0.065
ZScore_GR 11 237 0 1 0.0179 0.0211 0.8999 -3.2193 2.8505 6.0698 -0.1514 0.3168 0.065
ZScore_DS 12 237 0 1 0.0775 -0.0543 1.0086 -2.6437 2.7987 5.4424 0.4911 0.3889 0.065
NA
2. Correlations between the Items
  • The correlations between the items were examined to determine if they were either not high enough (i.e., r < .30) or too high (i.e., r > .80).

    • The correlations for the 12 tasks in the CBS ranged from r(235) -0.112 to r(235) 0.338, p = .91.
    • A visual inspection of the correlations showed that thw tasks did show low/weaker correlations throughout, with only 3 correlations above .30. These will be kept in mind when completing the FA. There were no issues associated with too many high correations for any items.
  • To check for multicollinearity, the determinant of the correlation matrix was calculated. The determinant was greater than the necessary value of 0.00001 (i.e., 0.22812), so, there was no issues with multicollinearity (Field et al., 2012).

  • Therefore, all items in the CBS correlated ~reasonably with each other and without an excessively large correlation so no items were removed at this stage.


# get the pearson correlations between all items (and corresponding p-values)
fa_cor = rcorr(as.matrix(fa_data), type = "pearson") 

# make a table with the data to display it better
fa_cor_t = as.data.frame(fa_cor$r)
  # include only the lower triangle of the data
  fa_cor_t[upper.tri(fa_cor_t)] = NA
  
# find the determinant of the correlation matrix
fa_det = det(fa_cor$r)

# Print table using kable
  # make any NAs appear as blank within kable
  opts = options(knitr.kable.NA = "")
  # print table
  kable(fa_cor_t, caption = "Pearson Correlations between Items in the SAD", digits = 4, align = 'c', escape = FALSE) %>%
    kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>%
    add_footnote("p < .001", notation = "alphabet") %>% 
    kable_classic()
Pearson Correlations between Items in the SAD
ZScore_SS ZScore_ML ZScore_TS ZScore_PA ZScore_SP ZScore_R ZScore_P ZScore_OOO ZScore_FM ZScore_DT ZScore_GR ZScore_DS
ZScore_SS 1.0000
ZScore_ML 0.3311 1.0000
ZScore_TS 0.3380 0.2571 1.0000
ZScore_PA 0.1043 0.1097 0.2357 1.0000
ZScore_SP 0.2951 0.2828 0.2808 0.1677 1.0000
ZScore_R 0.2337 0.0989 0.1632 0.0953 0.2038 1.0000
ZScore_P 0.2660 0.1526 0.2270 0.0837 0.2519 0.1935 1.0000
ZScore_OOO -0.0071 0.0285 0.2129 0.0499 0.1002 -0.1115 0.0509 1.0000
ZScore_FM 0.2376 0.1555 0.1006 0.1284 0.0698 0.2231 0.2272 0.0219 1.0000
ZScore_DT 0.1674 0.2681 0.2901 0.1095 0.1833 0.2116 0.1438 0.0758 0.1997 1.0000
ZScore_GR 0.2442 0.2849 0.1624 0.2505 0.2279 0.2259 0.2542 0.0884 0.1691 0.2805 1.0000
ZScore_DS 0.1093 0.1523 0.1956 0.0768 0.0581 0.0523 0.1773 0.0552 0.1943 0.1629 0.1129 1
a p < .001
    # restore the original options so that "NA" shows up again
    options(opts)
  • Another way to visualize this is using a Scatter Plot Matrix

    • This shows: (1) a scatter plot bellow the lower diagonal, with a line of best fit (red); (2) a historgram and density plot of the item on the diagonal; and (3) the correlation values (pearson r) above the diagonal, with corresponding significance shown with asterisks. The x-axis in each scatter plot represents the column variable and the y-axis the row variable.
# show a SPLOM (Scatter Plot Matrix) of the Data 
pairs.panels(fa_data, pch = ".", density = TRUE, ellipses = FALSE, lm = TRUE, digits = 2, method = "pearson", jiggle = TRUE, factor = 1, hist.col = "cadetblue3", stars = TRUE, gap = .5, verOdd = TRUE, horOdd = TRUE, main = "Scatter Plot Matrix of Items in the SAD")

3. Factorability of the Data
  • This assessed if there were meaningful latent factors to be found within the data, which was assessed in two ways: Barlett’s test of sphericity for correlation adequacy and the Kaiser-Meyer-Olkin measure of sampling adequacy.

    • Barlett’s test of sphericity for correlation adequacy:

      • This test was statistically significant, which suggested good factorability, \(\chi^{2}\)(66) = 341.64, p < .001
    • Kaiser-Meyer-Olkin measure of sampling adequacy:

      • This measure showed an overall measure of sampling adequacy (MSA) and an MSA per item. The overall MSA was higher than both the minimum and preferred criteria (0.50 and 0.60, respectively; Kaiser, 1974, Hutcheson & Sofroniou, 1999), \(MSA_{overall}\) = 0.76. Each item’s MSA was also higher than the minimum and preferred criteria, \(MSA_{1-13}\) = 0.48 - 0.81. The task Odd One Out (OOO) was just above the minumum cut-off (‘r round(fa_kmo$MSAi[6], 3)’) and therefore was watched carefully after.
  • Therefore, both factorability tests confirmed that the planned factor analysis was appropriate.

# run the Barlett Test
fa_bartest = cortest.bartlett(fa_data)
R was not square, finding R from data
fa_bartest
$chisq
[1] 341.6403

$p.value
[1] 8.398628e-39

$df
[1] 66
# run the KMO 
fa_kmo = KMO(fa_data)
fa_kmo
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = fa_data)
Overall MSA =  0.76
MSA for each item = 
 ZScore_SS  ZScore_ML  ZScore_TS  ZScore_PA  ZScore_SP   ZScore_R   ZScore_P ZScore_OOO  ZScore_FM  ZScore_DT  ZScore_GR  ZScore_DS 
      0.78       0.79       0.73       0.70       0.81       0.75       0.81       0.48       0.73       0.79       0.77       0.78 

Extract Factors

Now that factorability was confirmed, we found the appropriate number of factors to extract. This was done using: (1) a parallel analysis scree plot, (2) eigen values (i.e., from the parallel analysis), and (3) the factor structure between the two solutions (i.e., using factor diagrams).

1. Parallel Analysis Scree Plot.

This plotted the eigenvalues from the data and a parallel analysis which generated random correlation matrices. The number of factors is then determined by comparing the resulting eigenvalues to the observed data, that is, observed eigenvalues that were higher than the corresponding random eigenvalues were more likely to form meaningful factors.

  • The parallel analysis scree plot showed that there are 1 appropriate factors (i.e. using the principal components extraction method).
  • The scree plot and eigen values showed that 3 or 4 principle components are useful.

fa_par <- fa.parallel(fa_data, main = "Parallel Analysis Scree Plot for the 12 CBS Tasks")
Parallel analysis suggests that the number of factors =  1  and the number of components =  1 

2. Eigen Values

For a sample size greater than 250 (i.e., 237 complete cases) the average communalities (i.e., the proportion of common variance within the items) for the 3 factor (0.22) and 4 factor (0.25) solutions were wihtin the acceptable value (i.e., 0.60; Field et al., 2012). Therefore, Kaiser’s criterion (i.e., a meaningful factor has an eigen value greater than 1) was used for the eigen values. It should be noted that although the average communalities were not very high, the scree plot and factor diagrams were used to choose the appropriate number of factors.

  • The eigen values (unrotated solution) showed three meaningful factors (i.e., 2.98, 1.2, 1.07), which supported the three-factor solution as a better representation of the data.
# Eigen values
  # view eigen values from the parallel analysis scree plot
  round(fa_par$pc.values, 3)
 [1] 2.977 1.202 1.065 0.980 0.921 0.871 0.834 0.792 0.678 0.660 0.558 0.461
3. Factor Diagrams

A factor diagram for the two-, three-, and four-factor solutions (rotated solution) was used to determine which solution represents the most interpretable solution. The diagrams show the factor loadings for each item on the given factor for which they load the highest on. The items were ordered (i.e., descending) based on these loadings.
Note: The factor diagrams are based on the rotated solutions to better distribute the factor loadings

  • The factor diagrams showed that the two factor solution resulted in most items loading onto only one factor and was not easily interpreted. The four-factor solution showed a 2-item factor, which is not easily interpretable as it did not meet the 3-item minumum (Costello & Osborn, 2005). The three and four factor solutions showed better distributions and were more interpretable. After reviewing the items, the four-factor solution provided a logical structure compared to the three-factor solution. That is, the third factor in the 3-factor solution grouped items 6 & 7 with 12 & 13, however items 6 & 7 ask about emotional associations whereas items 12 & 13 are regarding attention. Although the fourth factor in the four-factor solution only contained 2 items, these items were considered unique in that they are the only items in the SAD which asked participants about attention with respect to their smartphone. Therefore, the four-factor solution was chosen.

Therefore, the three factor solution was chosen to better represent the data.

##-- VARIMAX ROTATION  -- 
# run a factor analysis to compare the two- and three-factor solutions (no rotation)
  # # 2 factor solution
  fa_two_v = fa(fa_data, nfactors = 2, fm = "pa", rotate = "varimax", scores = T)
    # change name in loadings for clarity when visualizing the model
    colnames(fa_two_v$loadings) = c("Factor 1", "Factor 2")
  
  # 3 factor solution
  fa_three_v = fa(fa_data, nfactors = 3, fm = "pa", rotate = "varimax", scores = T)
    # change name in loadings for clarity when visualizing the model
    colnames(fa_three_v$loadings) = c("Factor 1", "Factor 2", "Factor 3")
  
  # 4 factor solution
  fa_four_v = fa(fa_data, nfactors = 4, fm = "pa", rotate = "varimax", scores = T)
maximum iteration exceeded
    # change name in loadings for clarity when visualizing the model
    colnames(fa_four_v$loadings) = c("Factor 1", "Factor 2", "Factor 3", "Factor 4")
    
  # 5 factor solution
  fa_five_v = fa(fa_data, nfactors = 5, fm = "pa", rotate = "varimax", scores = T)
maximum iteration exceeded
    # change name in loadings for clarity when visualizing the model
    colnames(fa_five_v$loadings) = c("Factor 1", "Factor 2", "Factor 3", "Factor 4", "Factor 5")

# Factor Diagram
  # 2 factor solution
  fa.diagram(fa_two_v, main = "Two Factor Solution for the 12 CBS Tasks (Varimax Rotation)", sort = TRUE, adj = 1, digits = 2)


  # 3 factor solution
  fa.diagram(fa_three_v, main = "Three Factor Solution for the 12 CBS Tasks (Varimax Rotation)", sort = TRUE, adj = 1, digits = 2)

  
  # 4 factor solution
  fa.diagram(fa_four_v, main = "Four Factor Solution for the 12 CBS Tasks (Varimax Rotation)", sort = TRUE, adj = 1, digits = 2)

  
  # 4 factor solution
  fa.diagram(fa_five_v, main = "Five Factor Solution for the 12 CBS Tasks (Varimax Rotation)", sort = TRUE, adj = 1, digits = 2)

Simple Structure

THREE FACTOR SOLUTION


# Rotated (i.e., varimax) Factor Loadings 
print(fa_three_v$loadings, cutoff = 0.30, digits = 3)

Loadings:
           Factor 1 Factor 2 Factor 3
ZScore_SS   0.533                    
ZScore_ML   0.452                    
ZScore_TS   0.470             0.396  
ZScore_PA                            
ZScore_SP   0.582                    
ZScore_R    0.365                    
ZScore_P    0.352                    
ZScore_OOO                    0.441  
ZScore_FM            0.554           
ZScore_DT   0.329    0.304           
ZScore_GR   0.421                    
ZScore_DS            0.355           

               Factor 1 Factor 2 Factor 3
SS loadings       1.685    0.864    0.505
Proportion Var    0.140    0.072    0.042
Cumulative Var    0.140    0.212    0.255
# make data frame to show values
fa_load_three_v <- as.data.frame(fa_three_v$loadings[1:12,])

FOUR FACTOR SOLUTION


# Rotated (i.e., varimax) Factor Loadings 
print(fa_four_v$loadings, cutoff = 0.20, digits = 3)

Loadings:
           Factor 1 Factor 2 Factor 3 Factor 4
ZScore_SS   0.580             0.207           
ZScore_ML   0.413                             
ZScore_TS   0.505                      0.518  
ZScore_PA                                     
ZScore_SP   0.519                             
ZScore_R    0.346             0.237           
ZScore_P    0.331             0.262           
ZScore_OOO                             0.414  
ZScore_FM                     0.646           
ZScore_DT   0.274    0.200    0.248           
ZScore_GR   0.239    0.856                    
ZScore_DS                     0.311           

               Factor 1 Factor 2 Factor 3 Factor 4
SS loadings       1.449    0.922    0.809    0.601
Proportion Var    0.121    0.077    0.067    0.050
Cumulative Var    0.121    0.198    0.265    0.315
# make data frame to show values
fa_load_four_v <- as.data.frame(fa_four_v$loadings[1:12,])

FIVE FACTOR SOLUTION


# Rotated (i.e., varimax) Factor Loadings 
print(fa_five_v$loadings, cutoff = 0.20, digits = 3)

Loadings:
           Factor 1 Factor 2 Factor 3 Factor 4 Factor 5
ZScore_SS   0.485    0.249                             
ZScore_ML            0.805                             
ZScore_TS   0.467                               0.645  
ZScore_PA                     0.216                    
ZScore_SP   0.431    0.208                             
ZScore_R    0.487                                      
ZScore_P    0.334                      0.251           
ZScore_OOO                                      0.380  
ZScore_FM                              0.614           
ZScore_DT   0.224                      0.237           
ZScore_GR   0.207             0.799                    
ZScore_DS                              0.335           

               Factor 1 Factor 2 Factor 3 Factor 4 Factor 5
SS loadings       1.183    0.838    0.833    0.736    0.727
Proportion Var    0.099    0.070    0.069    0.061    0.061
Cumulative Var    0.099    0.168    0.238    0.299    0.360
# make data frame to show values
fa_load_five_v <- as.data.frame(fa_five_v$loadings[1:12,])

New Factor Structure

An alternative analysis, where the new factor structure is used to complete ANOVA analyses.

Composite Scores

First, a new data frame was made with the new composite scores. These scores were calculated as in Wild et al. (2018), where the normalized scores for each CBS test are then transformed into 3 separate composite scores using the formula:

\[Y = X (Ar^+)^T\] where:

  • \(Y\) = \(N\) x 3 matrix of the composite scores (STM, Reasoning, Verbal)

  • \(X\) = \(N\) x 12 matrix of the 12 CBS test z-scores

  • \(Ar\) = 12 x 3 matrix of varimax-rotated factor weights / loading from the present study

The factor structure used was as follows:

Factor loadings for 12 CBS test (N = 237)
Factor 1 Factor 2 Factor 3
ZScore_SS 0.53 0.21 -0.02
ZScore_ML 0.45 0.17 0.10
ZScore_TS 0.47 0.17 0.40
ZScore_PA 0.25 0.14 0.13
ZScore_SP 0.58 -0.01 0.09
ZScore_R 0.37 0.25 -0.24
ZScore_P 0.35 0.29 0.02
ZScore_OOO 0.05 0.02 0.44
ZScore_FM 0.15 0.55 -0.08
ZScore_DT 0.33 0.30 0.14
ZScore_GR 0.42 0.26 0.04
ZScore_DS 0.09 0.35 0.18

Therefore, each composite score encompasses all 12 CBS tests, weighted by their respective factor loading.

Calculate Scores

Calculate composite scores using matrix multiplication described above…

# # add composite scores based on matrix calculations -- FOR NOW THEY REPLACE THE ORIGINAL STM, REASON, and VERBAL
# get data from main_all_data_final
  # this is the "X" in the eq
matrix_scoreX_newFA <-
  # use "contains()" to use a string to select based on that pattern
  main_all_data_final %>% dplyr::select(contains("ZScore_")) %>%
  # re order variables to match Hampshire et al. (2012) for easier comparison...
  select(ZScore_SS, ZScore_ML, ZScore_TS, ZScore_PA, ZScore_SP, ZScore_R, ZScore_FM, ZScore_P, ZScore_OOO, ZScore_DS, ZScore_GR, ZScore_DT)

# transpose the matrix so that it is 12 rows by N cols 
  # this replaces the original
matrix_scoreX_newFA <- t(as.matrix(matrix_scoreX_newFA))

# make matrix with factor structure 
  # result is a matrix with 12 rows and 3 columns, which depict the loadings for STM, Reasoning, and Verbal
  # this is the "Ar+" in the eq
matrix_factorAr_newFA <- fa_load_three_v

# calculate the composite scores using the equation
  # this used matrix multiplication (i.e., a dot product b/w the 2 matrices)
  # this is the "Y" in the eq
scoresY_newFA <- t(t(matrix_factorAr_newFA) %*% matrix_scoreX_newFA)
  # make scores a tibble
  scoresY_newFA <- as.tibble(scoresY_newFA)
  # rename cols
  colnames(scoresY_newFA) <- c("CBS_STM", "CBS_reason", "CBS_verbal")

# use this to make ANOVA data frames

Make a new data frame including the new composite score instead of the original composite scores…

Mean Composite Scores

Add simple composite scores, which are the average of only the highly-loaded test for each factor. This meant as follows:

OPTION 1:

  • F1 (8) = SS, ML, TS, SP, R, P, GR, DT
  • F2 (2) = FM, DS
  • F3 (1) = OOO
  • Note: One test was not included in any composite since they did not load strongly on a factor (i.e., > .30). This loaded at .25 or higher for one factor (PA).

OPTION 2:

  • F1 (9) = SS, ML, TS, (PA), SP, R, P, GR, DT
  • F2 (2) = FM, DS
  • F3 (1) = OOO
  • Note: One test did not load at > .30, but was placed in a factor based on the highest factor they did load on. These tests are depicted in (): PA.

Add Op 1 & 2

# add composite scores
# main_com_newFA <- 
#   main_all_data_final_newFA %>% 
#   
main_all_data_final_newFA_op <- 
  main_all_data_final_newFA %>% 
  select(StartDate:CBS_ts_conR) %>% 
  
  # for each p...
  rowwise() %>% 
  
  ## OPTION 1
  # add composite score -- F1_1 CBS score
  dplyr::mutate(CBS_F1_1 = (sum(ZScore_SS, ZScore_ML, ZScore_TS, ZScore_SP, ZScore_R, ZScore_P, ZScore_GR, ZScore_DT))/8) %>% 
  
  rowwise() %>% 
  
  # add composite score -- F2_1 CBS score
  dplyr::mutate(CBS_F2_1 = (sum(ZScore_FM, ZScore_DS))/2) %>% 
  # add composite score -- F3_1 CBS score
      # NOT ADDED SINCE THIS IS JUST THE OO SCORE 
  # dplyr::mutate(CBS_F3_1 = (sum(ZScore_OOO))/1)
  
  rowwise() %>% 
  
  ## OPTION 2
  # add composite score -- F1_1 CBS score
  dplyr::mutate(CBS_F1_2 = (sum(ZScore_SS, ZScore_ML, ZScore_TS, ZScore_PA, ZScore_SP, ZScore_R, ZScore_P, ZScore_GR, ZScore_DT))/9)
  
  # NOT ADDED SINCE THIS IS JUST THE OO SCORE 
  # rowwise() %>% 
  # add composite score -- F2_1 CBS score
  # dplyr::mutate(CBS_F2_2 = (sum(ZScore_FM, ZScore_DT, ZScore_DS))/3)
  # add composite score -- F3_1 CBS score
      # NOT ADDED SINCE THIS IS JUST THE OO SCORE 
  # dplyr::mutate(CBS_F3_2 = (sum(ZScore_OOO))/1)
    

ANOVA Results (w/ Assumptions)

Matrix Scores

Factor 1 - New FA Data

## FOR STM_new
anova_data_STM_new <- 
  main_all_data_final_newFA %>% 
  select(participant, condition, CBS_STM) %>% 
  rename(score = CBS_STM)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_STM_new <- ezANOVA(
  data = anova_data_STM_new
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_STM_new$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_STM_new$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_STM_new$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9902
0.1096

kable(unlist(leveneTest(data = anova_data_STM_new, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.3997
Pr(>F)1 0.6710

kable(anova_STM_new$ANOVA, caption = "CBS Factor 1 - one-way ANOVA (matrix)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 1 - one-way ANOVA (matrix)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0187 1042.037 0.0042 0.9485 0.0000
condition 2 233 7.7433 1042.037 0.8657 0.4221 0.0074

plot(anova_data_STM_new$condition, anova_data_STM_new$score)


ggbetweenstats(select(anova_data_STM_new, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 1 & Smartphone Location (new FA data) Matrix", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Factor 2 - New FA Data

## FOR reason_new
anova_data_reason_new <- 
  main_all_data_final_newFA %>% 
  select(participant, condition, CBS_reason) %>% 
  rename(score = CBS_reason)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_reason_new <- ezANOVA(
  data = anova_data_reason_new
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_reason_new$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_reason_new$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_reason_new$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9931
0.3435

kable(unlist(leveneTest(data = anova_data_reason_new, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 2.0833
Pr(>F)1 0.1268

kable(anova_reason_new$ANOVA, caption = "CBS Factor 2 - one-way ANOVA (matrix)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 2 - one-way ANOVA (matrix)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0185 408.0358 0.0106 0.9183 0.0000
condition 2 233 2.7788 408.0358 0.7934 0.4535 0.0068

plot(anova_data_reason_new$condition, anova_data_reason_new$score)


ggbetweenstats(select(anova_data_reason_new, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 2 & Smartphone Location (new FA data) Matrix", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Factor 3 - New FA Data

## FOR verbal_new
anova_data_verbal_new <- 
  main_all_data_final_newFA %>% 
  select(participant, condition, CBS_verbal) %>% 
  rename(score = CBS_verbal)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_verbal_new <- ezANOVA(
  data = anova_data_verbal_new
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_verbal_new$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_verbal_new$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_verbal_new$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9949
0.6100

kable(unlist(leveneTest(data = anova_data_verbal_new, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.3326
Pr(>F)1 0.7174

kable(anova_verbal_new$ANOVA, caption = "CBS Factor 3 - one-way ANOVA (matrix)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 3 - one-way ANOVA (matrix)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0034 169.5363 0.0046 0.9457 0.0000
condition 2 233 1.0693 169.5363 0.7348 0.4807 0.0063

plot(anova_data_verbal_new$condition, anova_data_verbal_new$score)


ggbetweenstats(select(anova_data_verbal_new, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 3 & Smartphone Location (new FA data) Matrix", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Mean Scores

Factor 1 - New FA Data – OPTION 1

## FOR STM_new
anova_data_F1_1 <- 
  main_all_data_final_newFA_op %>% 
  select(participant, condition, CBS_F1_1) %>% 
  rename(score = CBS_F1_1)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_F1_1 <- ezANOVA(
  data = anova_data_F1_1
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_F1_1$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_F1_1$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_F1_1$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9892
0.0754

kable(unlist(leveneTest(data = anova_data_F1_1, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.0691
Pr(>F)1 0.9333

kable(anova_F1_1$ANOVA, caption = "CBS Factor 1 - one-way ANOVA (means)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 1 - one-way ANOVA (means)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0003 77.2021 0.0008 0.9774 0.0000
condition 2 233 0.3257 77.2021 0.4914 0.6124 0.0042

plot(anova_data_F1_1$condition, anova_data_F1_1$score)


ggbetweenstats(select(anova_data_F1_1, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 1 & Smartphone Location (new FA data) Means", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Factor 2 - New FA Data – OPTION 1

## FOR STM_new
anova_data_F2_1 <- 
  main_all_data_final_newFA_op %>% 
  select(participant, condition, CBS_F2_1) %>% 
  rename(score = CBS_F2_1)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_F2_1 <- ezANOVA(
  data = anova_data_F2_1
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_F2_1$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_F2_1$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_F2_1$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9946
0.5688

kable(unlist(leveneTest(data = anova_data_F2_1, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.4430
Pr(>F)1 0.6426

kable(anova_F2_1$ANOVA, caption = "CBS Factor 1 - one-way ANOVA (means)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 1 - one-way ANOVA (means)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0131 138.9016 0.0220 0.8822 0.0001
condition 2 233 1.5591 138.9016 1.3076 0.2724 0.0111

plot(anova_data_F2_1$condition, anova_data_F2_1$score)


ggbetweenstats(select(anova_data_F2_1, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 2 & Smartphone Location (new FA data) Means", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Factor 1 - New FA Data – OPTION 2

## FOR STM_new
anova_data_F1_2 <- 
  main_all_data_final_newFA_op %>% 
  select(participant, condition, CBS_F1_2) %>% 
  rename(score = CBS_F1_2)

# run between-subjects ANOVA (IV: Smartphone Location; DV: CBS performance)
## OVERALL
anova_F1_2 <- ezANOVA(
  data = anova_data_F1_2
  , dv = .(score)
  , wid = .(participant)
  , between = .(condition)
  , type = 3 # unequal sample sizes
  , detailed = TRUE
  , return_aov = TRUE
  )
Warning: Converting "participant" to factor for ANOVA.
Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
Warning: Collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate.
Coefficient covariances computed by hccm()
ggqqplot(anova_F1_2$aov$residuals, ylab = "CBS", shape = 1)


qplot(anova_F1_2$aov$residuals, main = "Histogram of Ospan Residuals", binwidth = .3) + theme_classic()


kable(as.numeric(unlist(shapiro.test(anova_F1_2$aov$residuals))[1:2]), caption = "SHAPIRO", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
SHAPIRO
x
0.9910
0.1528

kable(unlist(leveneTest(data = anova_data_F1_2, score ~ condition, center = mean))[c(1:3, 5)], caption = "LEVENES", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
LEVENES
x
Df1 2.0000
Df2 234.0000
F value1 0.1488
Pr(>F)1 0.8618

kable(anova_F1_2$ANOVA, caption = "CBS Factor 1 - one-way ANOVA (means)", digits = 4, align = 'c') %>%
  row_spec(0, bold = T) %>% 
  kable_styling(bootstrap_options = "striped", "hover", full_width = F) %>% 
  kable_classic()
CBS Factor 1 - one-way ANOVA (means)
Effect DFn DFd SSn SSd F p p<.05 ges
(Intercept) 1 233 0.0001 70.736 0.0003 0.9873 0.0000
condition 2 233 0.1740 70.736 0.2866 0.7511 0.0025

plot(anova_data_F1_2$condition, anova_data_F1_2$score)


ggbetweenstats(select(anova_data_F1_2, -participant),
condition, score, outlier.tagging = TRUE, ggtheme = ggplot2::theme_classic(), , type = "parametric", pairwise.comparisons = TRUE, pairwise.display = "all", p.adjust.method = "holm", effsize.type = "eta", results.subtitle = T, title = "ANOVA - CBS Factor 1 & Smartphone Location (new FA data) Means", var.equal = T, centrality.type = "parametric", centrality.point.args = list(size = 2), outlier.label.args = list(size = 2))

Additional Analyses (if any)

LS0tCnRpdGxlOiAiRG9lcyBTbWFydHBob25lIFByZXNlbmNlIEltcGFjdCBEaWZmZXJlbnQgQXNwZWN0cyBvZiBDb2duaXRpb24/ICIKYXV0aG9yOiAiQW5hIEMuIFJ1aXogUGFyZG8gYW5kIEouUC4gTWluZGEiCmRhdGU6ICdPY3RvYmVyIDE4LCAyMDIxJwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICc2JwogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHllcwogICAgdGhlbWU6IGx1bWVuCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAnNicKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogJzYnCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogeWVzCiAgICB0aGVtZTogbHVtZW4KICAgIGNvZGVfZm9sZGluZzogaGlkZQotLS0KYGBgez1odG1sfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKYm9keXsgLyogTm9ybWFsICAqLwogICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgIGNvbG9yOiBibGFjazt9CnRkIHsgIC8qIFRhYmxlICAqLwogIGZvbnQtc2l6ZTogMTRweDt9CmgxLnRpdGxlIHsKICBmb250LXNpemU6IDQwcHg7CiAgY29sb3I6ICMxZjk1YmR9CmgxIHsgLyogSGVhZGVyIDEgKi8KICBmb250LXNpemU6IDM1cHg7CiAgY29sb3I6ICMxZjk1YmQ7fQpoMiB7IC8qIEhlYWRlciAyICovCiAgZm9udC1zaXplOiAzM3B4OwogIGNvbG9yOiAjMWY5NWJkO30KaDMgeyAvKiBIZWFkZXIgMyAqLwogIGZvbnQtc2l6ZTogMzFweDsKICBjb2xvcjogIzFmOTViZDt9Cmg0IHsgLyogSGVhZGVyIDQgKi8KICBmb250LXNpemU6IDI5cHg7CiAgY29sb3I6ICMxZjk1YmQ7fQpoNSB7IC8qIEhlYWRlciA1ICovCiAgZm9udC1zaXplOiAyN3B4OwogIGNvbG9yOiAjMWY5NWJkO30KaDYgeyAvKiBIZWFkZXIgNiAqLwogIGZvbnQtc2l6ZTogMjVweDsKICBjb2xvcjogIzFmOTViZDt9Cgo8L3N0eWxlPgpgYGAKPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+CgpgYGB7ciBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQod2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSkKYGBgCgojIEludHJvZHVjdGlvbgoKVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB0aGUgYW5hbHlzZXMgZnJvbSBTdHVkeSAxIGFuZCAyIGluICoqRG9lcyBTbWFydHBob25lIFByZXNlbmNlIEltcGFjdCBEaWZmZXJlbnQgQXNwZWN0cyBvZiBDb2duaXRpb24/KiogKFJ1aXogUGFyZG8gJiBNaW5kYSwgT2N0b2JlciAyMDIxIHByZXByaW50LCA8PikuIFRoZSByaXNpbmcgcHJldmFsZW5jZSBvZiBzbWFydHBob25lcyBoYXMgcHJvbXB0ZWQgcmVzZWFyY2ggYWJvdXQgaG93IHRoZXkgY2FuIGltcGFjdCBjb2duaXRpdmUgYWJpbGl0aWVzLiBUaGVyZWZvcmUsIHRoZSBwdXJwb3NlIG9mIHRoaXMgc3R1ZHkgd2FzIHRvIGludmVzdGlnYXRlIHdoYXQgYXNwZWN0cyBvZiBjb2duaXRpb24sIGlmIGFueSwgYXJlIGFmZmVjdGVkIGJ5IHNtYXJ0cGhvbmVzLiBUbyBkbyBzbywgd2UgZXhhbWluZWQgYSB2YXJpZXR5IG9mIGNvZ25pdGl2ZSBtZWNoYW5pc21zIHVzaW5nIHRoZSAxMiBDYW1icmlkZ2UgQnJhaW4gU2NpZW5jZXMgKENCUykgVGFza3MuIFRoZXNlIHNob3J0LCBjb21wdXRlci1iYXNlZCB0YXNrcyBhc3Nlc3MgdmFyaW91cyBhc3BlY3RzIG9mIGNvZ25pdGlvbiwgc3VjaCBhczogcmVhc29uaW5nLCBtZW1vcnksIGF0dGVudGlvbiwgYW5kIHZlcmJhbCBhYmlsaXR5IChIYW1wc2hpcmUgZXQgYWwuLCAyMDEyKS4gCgpGb3IgdGhpcyBzdHVkeSwgd2UgY29uZHVjdGVkICoqdHdvIHN0dWRpZXMqKiBhbmQgZXhwbG9yZWQ6ICgxKSBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGluIGhvdyBwZW9wbGUgZmVlbCB0b3dhcmRzIGFuZCBpbnRlcmFjdCB3aXRoIHRoZWlyIHNtYXJ0cGhvbmVzLCAgKDIpIGhvdyBzbWFydHBob25lcyBhZmZlY3QgZGlmZmVyZW50IGFzcGVjdHMgb2YgY29nbml0aW9uLCBhbmQgKDMpIGludGVyYWN0aW9ucyBiZXR3ZWVuIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgYW5kIHRoZXNlIGVmZmVjdHMuCgojIyBTdHVkeSAxOiBHdWFnaW5nIFR5cGljYWwgU21hcnRwaG9uZSBVc2UKVGhlcmUgd2VyZSB0d28gZ29hbHMgZm9yIHN0dWR5IDE6ICgxKSB0byBkZXRlcm1pbmUgdGhlIGRlc2lnbiBvZiBzdHVkeSAyIGFuZCAoMikgaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBpbiBob3cgcGVvcGxlIGZlZWwgdG93YXJkcyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGVpciBzbWFydHBob25lcy4gVGhlcmVmb3JlLCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIGZvdXIgcXVlc3Rpb25uYWlyZXMgaW4gYW4gb25saW5lIHN1cnZleToKCgooMSkgVGhlIFNtYXJ0cGhvbmUgQXR0YWNobWVudCBhbmQgRGVwZW5kZW5jeSBRdWVzdGlvbm5haXJlIChXYXJkIGV0IGFsLiwgMjAxNykKICAgIC0gTWVhc3VyZXMgdGhlIGxldmVsIHRvIHdoaWNoIHNvbWVvbmUgZmVlbHMgYXR0YWNoZWQgYW5kIG9yIGRlcGVuZGVudCBvbiB0aGVpciBzbWFydHBob25lCgooMikgVGhlIE1vYmlsZSBQaG9uZSBJbnZvbHZlbWVudCBRdWVzdGlvbm5haXJlIChNUElROyBXYWxzaCBldCBhbC4sIDIwMTApCiAgICAtIE1lYXN1cmVzIHRoZSBsZXZlbCBvZiBjb25uZWN0aW9uIHRvIG9uZeKAmXMgcGhvbmUsIGl0IG1ha2VzIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBwaG9uZSBpbnZvbHZlbWVudCBhbmQgZnJlcXVlbmN5IG9mIHBob25lIHVzZQoKKDMpIFRoZSBOb21vcGhvYmlhIFF1ZXN0aW9ubmFpcmUgKE5NUC1ROyBZaWxkaXJpbSAmIENvcnJlaWEsIDIwMTUpCiAgICAtIE1lYXN1cmVzIHBlb3BsZeKAmXMgc2V2ZXJpdHkgb2Ygbm9tb3Bob2JpYQogICAgLSBOb21vcGhvYmlhIGlzIHRoZSBtb2Rlcm4gZmVhciBvZiBub3QgYmVpbmcgYWJsZSB0byBjb21tdW5pY2F0ZSB0aHJvdWdoIGEgbW9iaWxlIHBob25lIG9yIHRoZSBpbnRlcm5ldC4gSXQgaXMgYSBzaXR1YXRpb25hbCBwaG9iaWEgdGhhdCByZWZlcnMgdG8gYSBncm91cCBvZiBzeW1wdG9tcyBvciBiZWhhdmlvdXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBtb2JpbGUgcGhvbmUgdXNlLgoKKDQpIEEgU21hcnRwaG9uZSBVc2UgUXVlc3Rpb25uYWlyZSAocmV2aXNlZCBmcm9tIFJ1aXogUGFyZG8gJiBNaW5kYSwgMjAyMUEpCiAgICAtIERlc2lnbmVkIGZvciBzdHVkeSAxIHRvIG1lYXN1cmUgdHlwaWNhbCBzbWFydHBob25lIHVzZSwgZnJlcXVlbmN5IG9mIHVzZSwgYW5kIHRvIG1ha2UgYSBwYXJhZGlnbSBkZWNpc2lvbiBmb3Igc3R1ZHkgMi4KClJlc3VsdHMgd2lsbCBkZW1vbnN0cmF0ZSBob3cgcGFydGljaXBhbnRzIHRlbmQgdG8gdXNlIHRoZWlyIHNtYXJ0cGhvbmVzIHdpdGggcmVzcGVjdCB0byB0aGVpciAoMSkgcG93ZXIgKGkuZS4sIGVpdGhlciB0dXJuZWQgT04gb3IgT0ZGKSBhbmQgKDIpIGxvY2F0aW9uIChpLmUuLCBlaXRoZXIgb24gdGhlaXIgZGVzaywgaW4gdGhlaXIgcG9ja2V0L2JhZywgb3Igb3V0c2lkZSBvZiB0aGUgcm9vbSkgZHVyaW5nIGEgdHlwaWNhbCBkYXkuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgZGVzaWduIGZvciBzdHVkeSAyLiBXZSBwcmVkaWN0IHRoYXQsIGFzIHNlZW4gaW4gV2FyZCBldCBhbC4gYW5kIG91ciByZXBsaWNhdGlvbiBzdHVkeSwgdGhlIHNtYXJ0cGhvbmUgcG93ZXIgY29uZGl0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeS4gRm9yIHNtYXJ0cGhvbmUgbG9jYXRpb24sIHBhcnRpY2lwYW50c+KAmSB0eXBpY2FsIHNtYXJ0cGhvbmUgdXNlIChpbmNsdWRpbmcgcGxhY2VtZW50KSB3aWxsIGJlIGFzc2Vzc2VkIHRvIGRldGVybWluZSBpZiBhbGwgdGhyZWUgbG9jYXRpb25zIHNob3VsZCBiZSB1c2VkLiBUaGlzIGxlYXZlcyB0d28gbW9zdCBsaWtlbHkgcG9zc2libGUgb3V0Y29tZXMgZm9yIHNtYXJ0cGhvbmUgbG9jYXRpb246IHVzaW5nIHR3byBsb2NhdGlvbnMgb3IgdXNpbmcgdGhyZWUgbG9jYXRpb25zLiBGb3IgYm90aCBvdXRjb21lcywgdGhlIOKAnG90aGVyIHJvb23igJ0gbG9jYXRpb24gd2lsbCBiZSB1c2VkIGJlY2F1c2UgaXQgd2lsbCBhbGxvdyB1cyB0byBzZWUgaG93IGEgbm9uLXR5cGljYWwgc2l0dWF0aW9uIGNhbiBpbXBhY3QgcGVvcGxlLiBUd28gbG9jYXRpb25zIHdpbGwgYmUgdXNlZCBpZiBwYXJ0aWNpcGFudHMgcmVwb3J0IG9ubHkg4oCcb24gZGVza+KAnSBvciDigJxpbiBwb2NrZXQvYmFn4oCdIGFzIHR5cGljYWwuIFRoZW4sIHRoZSBtb3N0IHVzZWQgbG9jYXRpb24gd291bGQgYmUgaW1wbGVtZW50ZWQgYWxvbmdzaWRlIHRoZSDigJxvdGhlciByb29t4oCdIGxvY2F0aW9uIChpLmUuLCBlaXRoZXIg4oCcb24gZGVza+KAnSBhbmQg4oCcb3RoZXIgcm9vbeKAnSBvciDigJxpbiBwb2NrZXQvYmFn4oCdIGFuZCDigJxvdGhlciByb29t4oCdKS4gVGhyZWUgbG9jYXRpb25zIHdpbGwgYmUgdXNlZCBpZiBwYXJ0aWNpcGFudHMgcmVwb3J0IGJvdGgg4oCcb24gZGVza+KAnSBvciDigJxpbiBwb2NrZXQvYmFn4oCdIGFzIHR5cGljYWwuCgpBZGRpdGlvbmFsbHksIHJlc3VsdHMgd2lsbCBhc3Nlc3MgaW5kaXZpZHVhbCBkaWZmZXJlbmNlIG1lYXN1cmVzIChpLmUuLCBTbWFydHBob25lIEF0dGFjaG1lbnQgYW5kIERlcGVuZGVuY3kgUXVlc3Rpb25uYWlyZSwgTVBJUSwgYW5kIE5NUC1RKS4gVGhlc2Ugd2lsbCBnaXZlIGluc2lnaHQgdG8gaG93IHBhcnRpY2lwYW50cyBmZWVsIGFuZCBpbnRlcmFjdCB3aXRoIHRoZWlyIHNtYXJ0cGhvbmVzIGFuZCBwcm92aWRlIGFuIG9wcG9ydHVuaXR5IHRvIGV4cGxvcmUgcG9zc2libGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIG1lYXN1cmVzLiAKCkEgdG90YWwgb2YgYHIgbnJvdyhwaWxvdF9zdXJfZGF0YSkgYCBwYXJ0aWNpcGFudHMgd2VyZSBpbmNsdWRlZCBpbiBzdHVkeSAxLiAKCiMjIFN0dWR5IDI6IFdoYXQgQXNwZWN0cyBvZiBDb2duaXRpb24gYXJlIEFmZmVjdGVkIGJ5IFNtYXJ0cGhvbmVzPwpUaGUgZ29hbHMgZm9yIHN0dWR5IDIgd2VyZSB0bzogKDEpIGludmVzdGlnYXRlIGhvdyBzbWFydHBob25lcyBhZmZlY3QgZGlmZmVyZW50IGFzcGVjdHMgb2YgY29nbml0aW9uIGFuZCAoMikgZXhwbG9yZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGFuZCB0aGVzZSBlZmZlY3RzLiAKClBhcnRpY2lwYW50cyB3ZXJlIHJhbmRvbWx5IGFzc2lnbmVkIHRvIHRoZWlyIGNvbmRpdGlvbiAoaS5lLiwgZGVzaWduIHdhcyBkZWNpZGVkIHVzaW5nIHN0dWR5IDEpIGFuZCB0aGVuIHJhbmRvbWx5IGNvbXBsZXRlZCBhbGwgMTIgQ0JTIHRhc2tzLiBUaGVyZWZvcmUsIHBhcnRpY2lwYW50cyBwbGFjZWQgdGhlaXIgc21hcnRwaG9uZXMgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczogKDEpIG9uIHRoZSBwYXJ0aWNpcGFudOKAmXMgZGVzaywgKDIpIGluIHRoZWlyIHBvY2tldC9iYWcsIG9yICgzKSBvdXRzaWRlIHRoZSB0ZXN0aW5nIHJvb20uIEFsbCBwYXJ0aWNpcGFudHMgd2VyZSBpbnN0cnVjdGVkIHRvIGtlZXAgdGhlaXIgcGhvbmVzIG9uICJzaWxlbnQiIChpLmUuLCB0byBwcmV2ZW50IGFueSBub3RpZmljYXRpb25zKSBhbmQgdGhvc2UgaW4gdGhlICJvbiBkZXNrIiBsb2NhdGlvbiBjb25kaXRpb24ga2VwdCB0aGVpciBkZXZpY2VzIGZhY2luZyBkb3duLgoKQXMgaW4gc3R1ZHkgMSwgcGFydGljaXBhbnRzIGNvbXBsZXRlZCB0aHJlZSBxdWVzdGlvbm5haXJlcyB0byBkZXRlcm1pbmUgaG93IGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgbWF5IGJlIG1vZGVyYXRpbmcgdGhlIHNtYXJ0cGhvbmUgZWZmZWN0czogKDEpIHRoZSBTbWFydHBob25lIEF0dGFjaG1lbnQgYW5kIERlcGVuZGVuY3kgUXVlc3Rpb25uYWlyZSwgKDIpIHRoZSBNUElRLCBhbmQgKDMpIHRoZSBOTVAtUS4gRmluYWxseSwgdG8gY2hlY2sgdGhhdCBzdHVkeSAy4oCZcyBwYXJ0aWNpcGFudHMgYXJlIHNpbWlsYXIgdG8gc3R1ZHkgMSwgYWxsIHBhcnRpY2lwYW50cyB3aWxsIGNvbXBsZXRlIHRoZSBzYW1lIFNtYXJ0cGhvbmUgVXNlIFF1ZXN0aW9ubmFpcmUgZnJvbSBzdHVkeSAxLiBPdXIgcHJlZGljdGlvbnMgZm9yIHRoaXMgc3R1ZHkgd2VyZSBtYWlubHkgZXhwbG9yYXRvcnk6IHdlIGludmVzdGlnYXRlZCB3aGljaCBhc3BlY3RzIG9mIGNvZ25pdGlvbiB3ZXJlIGFmZmVjdGVkIGJ5IHNtYXJ0cGhvbmVzIGFuZCwgdGhlcmVmb3JlLCB3ZSBkaWQgbm90IGhhdmUgZXhwbGljaXQgcHJlZGljdGlvbnMgZm9yIGVhY2ggYXNwZWN0IG9mIGNvZ25pdGlvbi4gV2UgdGhpbmsgdGhhdCB1c2luZyB0aGUgQ0JTIHRhc2tzIHdpbGwgaGVscCB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBiZWNhdXNlIHRoZXkgY292ZXIgYSB2YXJpZXR5IG9mIG1lYXN1cmVzIG9mIGNvZ25pdGlvbi4gVGhlIG9ubHkgc3BlY2lmaWMgcHJlZGljdGlvbnMgd2UgaGF2ZSBhcmUgd2l0aCByZXNwZWN0IHRvIHRoZSBhdHRlbnRpb24tZGVtYW5kaW5nIHRhc2tzIChlLmcuIERvdWJsZSBUcm91YmxlKSwgd2hlcmUgd2UgcHJlZGljdCBsb3dlciBwZXJmb3JtYW5jZSB3aXRoIHNtYXJ0cGhvbmUgcHJlc2VuY2UgKGUuZy4sIFN0b3RoYXJ0IGV0IGFsLiwgMjAxNSkuIAoKQSB0b3RhbCBvZiBgciBucm93KG1haW5fYWxsX2RhdGFfZmluYWwpYCBwYXJ0aWNpcGFudHMgd2VyZSBpbmNsdWRlZCBpbiBzdHVkeSAyLgoKIyMjIENhbWJyaWRnZSBCcmFpbiBTY2llbmNlIChDQlMpIFRhc2tzCjxkZXRhaWxzPgo8c3VtbWFyeT4gVGhlIENCUyB0YXNrcyBjb25zaXN0ZWQgb2YgMTIgY29nbml0aXZlIHRhc2tzOiBEb3VibGUgVHJvdWJsZSBUYXNrLCBPZGQgT25lIE91dCBUYXNrLCBEaWdpdCBTcGFuIFRhc2ssIEZlYXR1cmUgTWF0Y2ggVGFzaywgUG9seWdvbnMgVGFzaywgUGFpcmVkIEFzc29jaWF0ZXMgVGFzaywgTW9ua2V5IExhZGRlciBUYXNrLCBHcmFtbWF0aWNhbCBSZWFzb25pbmcgVGFzaywgUm90YXRpb25zIFRhc2ssIFNwYXRpYWwgU3BhbiBUYXNrLCBUb2tlbiBTZWFyY2ggVGFzaywgYW5kIHRoZSBTcGF0aWFsIFBsYW5uaW5nIFRhc2suIFRoZXNlIDEyIHRhc2tzIG1lYXN1cmUgZm91ciBmdW5kYW1lbnRhbCBjb2duaXRpdmUgYXJlYXMsIHdoaWNoIGFyZSBkZXNjcmliZWQgYXMgZm9sbG93cyBieSBIYW1wc2hpcmUgZXQgYWwuICgyMDEyKTogbWVtb3J5LCByZWFzb25pbmcsIHZlcmJhbCBhYmlsaXR5LCBhbmQgY29uY2VudHJhdGlvbi4gVGhlIGZvbGxvd2luZyB0YXNrIGRlc2NyaXB0aW9ucyBhcmUgZnJvbSB0aGUgQ0JTIFdlYnNpdGUgKDx3d3cuY2FtYnJpZGdlYnJhaW5zY2llbmNlcy5jb20+KS4gKihjbGljayB0byBzZWUgZGV0YWlscykqIDwvc3VtbWFyeT4KCiMjIyMgTWVtb3J5CipWaXN1b3NwYXRpYWwgV29ya2luZyBNZW1vcnkgVGFzayAoTW9ua2V5IExhZGRlcikqCi0gQSB2YXJpYW50IG9uIGEgdGFzayBmcm9tIHRoZSBub24taHVtYW4gcHJpbWF0ZSBsaXRlcmF0dXJlIChJbm91ZSAmIE1hdHN1emF3YSwgMjAwNykuIFNldHMgb2YgbnVtYmVyZWQgc3F1YXJlcyBhcmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4gYXQgcmFuZG9tIGxvY2F0aW9ucy4gQWZ0ZXIgYSB2YXJpYWJsZSBpbnRlcnZhbCBvZiB0aW1lLCB0aGUgbnVtYmVycyBkaXNhcHBlYXIgbGVhdmluZyBqdXN0IHRoZSBibGFuayBzcXVhcmVzIGFuZCBwYXJ0aWNpcGFudHMgbXVzdCByZXNwb25kIGJ5IGNsaWNraW5nIHRoZSBzcXVhcmVzIGluIGFzY2VuZGluZyBudW1lcmljYWwgc2VxdWVuY2UuIERpZmZpY3VsdHkgaXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBieSBvbmUgbnVtYmVyZWQgYm94IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwYXJ0aWNpcGFudCBnb3QgdGhlIHByZXZpb3VzIHRyaWFsIGNvcnJlY3QuIEFmdGVyIHRocmVlIGVycm9ycywgdGhlIHRhc2sgd2lsbCBlbmQuCgoqU3BhdGlhbCBTaG9ydC1UZXJtIE1lbW9yeSAoU3BhdGlhbCBTcGFuIFRhc2spKgotIEEgdmFyaWFudCBvbiB0aGUgQ29yc2lCbG9jayBUYXBwaW5nIFRhc2sgKENvcnNpLCAxOTcyKSwgdXNlZCBmb3IgbWVhc3VyaW5nIHNwYXRpYWwgc2hvcnQtdGVybSBtZW1vcnkgY2FwYWNpdHkuIDE2IHNxdWFyZXMgYXJlIGRpc3BsYXllZCBpbiBhIDQgeCA0IGdyaWQuIEEgc3ViLXNldCBvZiB0aGUgc3F1YXJlcyB3aWxsIGZsYXNoIGluIGEgcmFuZG9tIHNlcXVlbmNlIGF0IGEgcmF0ZSBvZiAxIGZsYXNoIGV2ZXJ5IDkwMCBtcy4gU3Vic2VxdWVudGx5LCBwYXJ0aWNpcGFudHMgbXVzdCByZXBlYXQgdGhlIHNlcXVlbmNlIGJ5IGNsaWNraW5nIG9uIHRoZSBzcXVhcmVzIGluIHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZXkgZmxhc2hlZC4gRGlmZmljdWx0eSBpcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5IG9uZSBib3ggZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHBhcnRpY2lwYW50IGdvdCB0aGUgcHJldmlvdXMgdHJpYWwgY29ycmVjdC4gQWZ0ZXIgdGhyZWUgZXJyb3JzLCB0aGUgdGFzayB3aWxsIGVuZC4KCipXb3JraW5nIE1lbW9yeSAoVG9rZW4gU2VhcmNoKSoKLSBCYXNlZCBvbiBhIHRlc3QgdGhhdCBpcyB1c2VkIHRvIG1lYXN1cmUgc3RyYXRlZ3kgZHVyaW5nIHNlYXJjaCBiZWhhdmlvdXJzIChDb2xsaW5zIGV0IGFsLiwgMTk5OCkuIEJveGVzIGFyZSBkaXNwbGF5ZWQgaW4gcmFuZG9tIGxvY2F0aW9ucy4gUGFydGljaXBhbnRzIG11c3QgZmluZCBhIGhpZGRlbiDigJx0b2tlbuKAnSBieSBjbGlja2luZyBvbiB0aGUgYm94ZXMgb25lIGF0IGEgdGltZS4gV2hlbiB0aGUgdG9rZW4gaXMgZm91bmQsIGl0IGlzIGhpZGRlbiB3aXRoaW4gYW5vdGhlciBib3guIFRoZSB0b2tlbiB3aWxsIG5vdCBhcHBlYXIgd2l0aGluIHRoZSBzYW1lIGJveCB0d2ljZSwgdGh1cywgcGFydGljaXBhbnRzIG11c3Qgc2VhcmNoIHRoZSBib3hlcyB1bnRpbCB0aGUgdG9rZW4gaGFzIGJlZW4gZm91bmQgb25jZSBpbiBlYWNoIGJveC4gSWYgdGhleSBzZWFyY2ggdGhlIHNhbWUgZW1wdHkgYm94IHR3aWNlLCBvciBzZWFyY2ggYSBib3ggaW4gd2hpY2ggdGhlIHRva2VuIGhhcyBwcmV2aW91c2x5IGJlZW4gZm91bmQsIHRoaXMgaXMgYW4gZXJyb3IgYW5kIHRoZSB0cmlhbCBlbmRzLiBEaWZmaWN1bHR5IGlzIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkgb25lIGJveCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgcGFydGljaXBhbnQgZ290IHRoZSBwcmV2aW91cyB0cmlhbCBjb3JyZWN0LiBBZnRlciB0aHJlZSBlcnJvcnMsIHRoZSB0YXNrIHdpbGwgZW5kLiBPdXRjb21lIG1lYXN1cmUgaXMgdGhlIG1heGltdW0gbGV2ZWwgY29tcGxldGVkIChlLmcuIHRoZSBwcm9ibGVtIHdpdGggdGhlIG1vc3QgdG9rZW5zIHRoYXQgdGhlIHVzZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCkuCgoqRXBpc29kaWMgTWVtb3J5IChQYWlyZWQgQXNzb2NpYXRlcyBUYXNrKSoKLSBBIHZhcmlhbnQgb24gYSBwYXJhZGlnbSB0aGF0IGlzIGNvbW1vbmx5IHVzZWQgdG8gYXNzZXNzIG1lbW9yeSBpbXBhaXJtZW50cyBpbiBhZ2luZyBjbGluaWNhbCBwb3B1bGF0aW9ucyAoR291bGQgZXQgYWwuLCAyMDA1KS4gQm94ZXMgYXJlIGRpc3BsYXllZCBhdCByYW5kb20gbG9jYXRpb25zIG9uIHRoZSBzY3JlZW4uIFRoZSBib3hlcyBhcmUgb3BlbmVkIG9uZSBhZnRlciBhbm90aGVyIHRvIHJldmVhbCBhbiBlbmNsb3NlZCBvYmplY3QuIFN1YnNlcXVlbnRseSwgdGhlIG9iamVjdHMgYXJlIGRpc3BsYXllZCBpbiByYW5kb20gb3JkZXIgaW4gdGhlIGNlbnRyZSBvZiB0aGUgc2NyZWVuIGFuZCBwYXJ0aWNpcGFudHMgbXVzdCBkZXRlcm1pbmUgd2hpY2ggYm94IGNvbnRhaW5zIHRoZSBvYmplY3QgdGhhdCBpcyBwcmVzZW50ZWQuIERpZmZpY3VsdHkgaXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBieSBvbmUgYm94IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwYXJ0aWNpcGFudCBnb3QgdGhlIHByZXZpb3VzIHRyaWFsIGNvcnJlY3QuIEFmdGVyIHRocmVlIGVycm9ycywgdGhlIHRhc2sgd2lsbCBlbmQuCgojIyMjIFJlYXNvbmluZwoqTWVudGFsIFJvdGF0aW9uIChSb3RhdGlvbnMpKgotIE9mdGVuIHVzZWQgZm9yIG1lYXN1cmluZyB0aGUgYWJpbGl0eSB0byBtYW5pcHVsYXRlIG9iamVjdHMgc3BhdGlhbGx5IGluIG1pbmQgKFNpbHZlcm1hbiBldCBhbC4sIDIwMDApLiBUd28gZ3JpZHMgb2YgY29sb3VyZWQgc3F1YXJlZCBhcmUgZGlzcGxheWVkIHRvIGVpdGhlciBzaWRlIG9mIHRoZSBzY3JlZW4gd2l0aCBvbmUgb2YgdGhlIGdyaWRzIHJvdGF0ZWQgYnkgYSBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzLiBXaGVuIHJvdGF0ZWQsIHRoZSBncmlkcyBhcmUgZWl0aGVyIGlkZW50aWNhbCBvciBkaWZmZXIgYnkgdGhlIHBvc2l0aW9uIG9mIGp1c3Qgb25lIHNxdWFyZS4gUGFydGljaXBhbnRzIG11c3QgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIGdyaWRzIGFyZSBpZGVudGljYWwuIFBhcnRpY2lwYW50cyBoYXZlIDkwIHNlY29uZHMgdG8gc29sdmUgYXMgbWFueSBwcm9ibGVtcyBhcyBwb3NzaWJsZS4gUHJpbWFyeSBvdXRjb21lIG1lYXN1cmUgaXMgb3ZlcmFsbCBzY29yZSAtIHRoZSBzdW0gb2YgdGhlIGRpZmZpY3VsdGllcyBvZiBhbGwgc3VjY2Vzc2Z1bGx5IGFuc3dlcmVkIHByb2JsZW1zLCBtaW51cyB0aGUgc3VtIG9mIHRoZSBkaWZmaWN1bHRpZXMgb2YgYWxsIGluY29ycmVjdGx5IGFuc3dlcmVkIHByb2JsZW1zLgoKKlZpc3Vvc3BhdGlhbCBQcm9jZXNzaW5nIChQb2x5Z29ucykqCi0gQmFzZWQgb24gdGhlIEludGVybG9ja2luZyBQZW50YWdvbnMgVGFzaywgd2hpY2ggaXMgb2Z0ZW4gdXNlZCBpbiB0aGUgYXNzZXNzbWVudCBvZiBhZ2UtIHJlbGF0ZWQgZGlzb3JkZXJzIChGb2xzdGVpbiBldCBhbC4sIDE5NzUpLiBBIHBhaXIgb2Ygb3ZlcmxhcHBpbmcgcG9seWdvbnMgaXMgZGlzcGxheWVkIG9uIG9uZSBzaWRlIG9mIHRoZSBzY3JlZW4uIFBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHdoZXRoZXIgYSBwb2x5Z29uIGRpc3BsYXllZCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc2NyZWVuIGlzIGlkZW50aWNhbCB0byBvbmUgb2YgdGhlIGludGVybG9ja2luZyBwb2x5Z29ucy4gRGlmZmljdWx0eSBpcyBpbmNyZWFzZWQgYnkgbWFraW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBwb2x5Z29ucyBtb3JlIHN1YnRsZSBvciBkZWNyZWFzZWQgYnkgbWFraW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBwb2x5Z29ucyBtb3JlIHByb25vdW5jZWQuIFBhcnRpY2lwYW50cyBoYXZlIDkwIHNlY29uZHMgdG8gc29sdmUgYXMgbWFueSBwcm9ibGVtcyBhcyBwb3NzaWJsZS4gUHJpbWFyeSBvdXRjb21lIG1lYXN1cmUgaXMgb3ZlcmFsbCBzY29yZSAtIHRoZSBzdW0gb2YgdGhlIGRpZmZpY3VsdGllcyBvZiBhbGwgc3VjY2Vzc2Z1bGx5IGFuc3dlcmVkIHByb2JsZW1zLCBtaW51cyB0aGUgc3VtIG9mIHRoZSBkaWZmaWN1bHRpZXMgb2YgYWxsIGluY29ycmVjdGx5IGFuc3dlcmVkIHByb2JsZW1zLgoKKkRlZHVjdGl2ZSBSZWFzb25pbmcgKE9kZCBPbmUgT3V0KSoKLSBCYXNlZCBvbiBhIHN1Yi1zZXQgb2YgcHJvYmxlbXMgZnJvbSB0aGUgQ2F0dGVsbCBDdWx0dXJlIEZhaXIgSW50ZWxsaWdlbmNlIFRlc3QgKENhdHRlbGwsIDE5NDkpLiBOaW5lIHBhdHRlcm5zIHdpbGwgYXBwZWFyIG9uIHRoZSBzY3JlZW4uIFRoZSBmZWF0dXJlcyB0aGF0IG1ha2UgdXAgdGhlIHBhdHRlcm5zIGFyZSBjb2xvdXIsIHNoYXBlLCBhbmQgbnVtYmVyIGFuZCBhcmUgcmVsYXRlZCB0byBlYWNoIG90aGVyIGFjY29yZGluZyB0byBhIHNldCBvZiBydWxlcy4gUGFydGljaXBhbnRzIG11c3QgZGVkdWNlIHRoZSBydWxlcyB0aGF0IHJlbGF0ZSB0aGUgb2JqZWN0IGZlYXR1cmVzIGFuZCBzZWxlY3QgdGhlIHBhdHRlcm4gdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byB0aG9zZSBydWxlcy4gRGlmZmljdWx0eSBpcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwYXJ0aWNpcGFudCBnb3QgdGhlIHByZXZpb3VzIHRyaWFsIGNvcnJlY3QuIFBhcnRpY2lwYW50cyBoYXZlIDMgbWludXRlcyB0byBzb2x2ZSBhcyBtYW55CnByb2JsZW1zIGFzIHBvc3NpYmxlLiBQcmltYXJ5IG91dGNvbWUgbWVhc3VyZSBpcyB0aGUgbnVtYmVyIG9mIGNvcnJlY3RseSBhbnN3ZXJlZApwcm9ibGVtcywgbWludXMgdGhlIG51bWJlciBvZiBpbmNvcnJlY3RseSBhbnN3ZXJlZCBwcm9ibGVtcy4KCipQbGFubmluZyAoU3BhdGlhbCBQbGFubmluZykqCi0gQSBkaXJlY3QgZGVzY2VuZGFudCBvZiB0aGUg4oCcVG93ZXIgb2YgTG9uZG9u4oCdIHRhc2ssIFNwYXRpYWwgUGxhbm5pbmcgaXMgYSBjbGFzc2ljIG5ldXJvcHN5Y2hvbG9naWNhbCB0ZXN0IG9mIHBsYW5uaW5nIChTaGFsbGljZSwgMTk4MikuIFdoZW4gdGhlIHRlc3QgYmVnaW5zLCBudW1iZXJlZCBiZWFkcyBhcmUgcG9zaXRpb25lZCBvbiBhIHRyZWUtc2hhcGVkIGZyYW1lLiBQYXJ0aWNpcGFudHMgbXVzdCByZXBvc2l0aW9uIHRoZSBiZWFkcyBzbyB0aGV5IGFyZSBjb25maWd1cmVkIGluIGFzY2VuZGluZyBudW1lcmljYWwgb3JkZXIsIGluIGFzIGZldyBtb3ZlcyBhcyBwb3NzaWJsZS4gUHJvYmxlbXMgYmVjb21lIHByb2dyZXNzaXZlbHkgaGFyZGVyLCBhbmQgcGFydGljaXBhbnRzIGhhdmUgdGhyZWUgbWludXRlcyB0byBzb2x2ZSBhcyBtYW55IGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBvdXRjb21lIG1lYXN1cmUgaXMgdGhlIG92ZXJhbGwgc2NvcmUsIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgdGhlIG51bWJlciBvZiBtb3ZlcyBtYWRlIGZyb20gdHdpY2UgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1vdmVzIHJlcXVpcmVkLgoKIyMjIyBWZXJiYWwgQWJpbGl0eQoqVmVyYmFsIFJlYXNvbmluZyAoR3JhbW1hdGljYWwgUmVhc29uaW5nKSoKLSBCYXNlZCBvbiBBbGFuIEJhZGRlbGV54oCZcyB0aHJlZSBtaW51dGUgZ3JhbW1hdGljYWwgcmVhc29uaW5nIHRlc3QgKEJhZGRlbGV5LCAxOTY4KS4gU2hvcnQgc2VudGVuY2VzIGRlc2NyaWJpbmcgdGhlIHJlbGF0aW9uc2hpcCBvZiB0d28gc2hhcGVzIGFsb25nIHdpdGggYW4gaW1hZ2Ugb2YgdGhlIHNoYXBlcyBhcmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uIFBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHdoZXRoZXIgdGhlIHNlbnRlbmNlIGNvcnJlY3RseSBkZXNjcmliZXMgdGhlIHBhaXIgb2Ygb2JqZWN0cyBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gUGFydGljaXBhbnRzIGhhdmUgOTAgc2Vjb25kcyB0byBzb2x2ZSBhcyBtYW55IHByb2JsZW1zIGFzIHBvc3NpYmxlLiBQcmltYXJ5IG91dGNvbWUgbWVhc3VyZSBpcyB0aGUgbnVtYmVyIG9mIHByb2JsZW1zIHNvbHZlZCBjb3JyZWN0bHksIG1pbnVzIHRoZSBudW1iZXIgb2YgcHJvYmxlbXMgYW5zd2VyZWQgaW5jb3JyZWN0bHkuCgoqVmVyYmFsIFNob3J0LVRlcm0gTWVtb3J5IChEaWdpdCBTcGFuKSoKLSBBIHZhcmlhbnQgb24gdGhlIHZlcmJhbCB3b3JraW5nIG1lbW9yeSBjb21wb25lbnQgb2YgdGhlIFdBSVMtUiBpbnRlbGxpZ2VudCB0ZXN0IChXZXNjaGxlciwgMTk4MSkuIEEgc2VxdWVuY2Ugb2YgbnVtYmVycyB3aWxsIGFwcGVhciBvbiB0aGUgc2NyZWVuIG9uZSBhZnRlciBhbm90aGVyLiBPbmNlIHRoZSBzZXF1ZW5jZSBpcyBjb21wbGV0ZSwgcGFydGljaXBhbnRzIG11c3QgcmVwZWF0IHRoZSBzZXF1ZW5jZS4gRGlmZmljdWx0eSBpcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5IG9uZSBudW1iZXIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHBhcnRpY2lwYW50IGdvdCB0aGUgcHJldmlvdXMgdHJpYWwgY29ycmVjdC4gQWZ0ZXIgdGhyZWUgZXJyb3JzLCB0aGUgdGFzayBlbmRzLiBQcmltYXJ5IG91dGNvbWUgbWVhc3VyZSBpcyB0aGUgbWF4aW11bSBsZXZlbCAoaS5lLiB0aGUgcHJvYmxlbSB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiBkaWdpdHMpIHRoYXQgdGhlIHBsYXllciBzdWNjZXNzZnVsbHkgY29tcGxldGVkLgoKIyMjIyBDb25jZW50cmF0aW9uCipBdHRlbnRpb24gKEZlYXR1cmUgTWF0Y2gpKgotIEJhc2VkIG9uIHRoZSBjbGFzc2ljYWwgZmVhdHVyZSBzZWFyY2ggdGFza3MgdGhhdCBoYXZlIGJlZW4gdXNlZCB0byBtZWFzdXJlIGF0dGVudGlvbmFsIHByb2Nlc3NpbmcgKFRyZWlzbWFuICYgR2VsYWRlLCAxOTgwKS4gVHdvIGdyaWRzIGFyZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiwgZWFjaCBjb250YWluaW5nIGFuIGFycmF5IG9mIGFic3RyYWN0IHNoYXBlcy4gSW4gaGFsZiBvZiB0aGUgdHJpYWxzIHRoZSBncmlkcyBkaWZmZXIgYnkganVzdCBvbmUgc2hhcGUuIFBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBncmlk4oCZcyBjb250ZW50cyBhcmUgaWRlbnRpY2FsLiBEaWZmaWN1bHR5IGlzIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkgb25lIHNoYXBlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwYXJ0aWNpcGFudCBnb3QgdGhlIHByZXZpb3VzIHRyaWFsIGNvcnJlY3QuIFBhcnRpY2lwYW50cyBoYXZlIDkwIHNlY29uZHMgdG8gc29sdmUgYXMgbWFueSBwcm9ibGVtcyBhcyBwb3NzaWJsZS4gUHJpbWFyeSBvdXRjb21lIG1lYXN1cmUgaXMgb3ZlcmFsbCBzY29yZSAtIHRoZSBzdW0gb2YgdGhlIGRpZmZpY3VsdGllcyBvZiBhbGwgc3VjY2Vzc2Z1bGx5IGFuc3dlcmVkIHByb2JsZW1zLCBtaW51cyB0aGUgc3VtIG9mIHRoZSBkaWZmaWN1bHRpZXMgb2YgYWxsIGluY29ycmVjdGx5IGFuc3dlcmVkIHByb2JsZW1zLgoKKlJlc3BvbnNlIEluaGliaXRpb24gKERvdWJsZSBUcm91YmxlLCBDb2xvdXItV29yZCBSZW1hcHBpbmcgVGFzaykqCi0gQSB2YXJpYW50IG9uIHRoZSBTdHJvb3AgdGVzdCAoU3Ryb29wLCAxOTM1KS4gVGhyZWUgY29sb3VyZWQgd29yZHMgYXJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuOiBvbmUgYXQgdGhlIHRvcCBhbmQgdHdvIGF0IHRoZSBib3R0b20uIFBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHdoaWNoIG9mIHR3byBjb2xvdXJlZCB3b3JkcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gY29ycmVjdGx5IGRlc2NyaWJlcyB0aGUgY29sb3VyIHRoYXQgdGhlIHdvcmQgYXQgdGhlIHRvcCBvZiB0aGUgc2NyZWVuIGlzIHdyaXR0ZW4gaW4uIFRoZSBjb2xvdXIgd29yZCBtYXBwaW5ncyBtYXkgYmUgY29uZ3J1ZW50LCBpbmNvbmdydWVudCwgb3IgZG91Ymx5IGluY29uZ3J1ZW50LCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhlIGNvbG91ciBvZiB0aGUgdG9wIHdvcmQgbWF0Y2hlcyB0aGUgY29sb3VyIHRoYXQgaXQgaXMgd3JpdHRlbiBpbi4gUGFydGljaXBhbnRzIGhhdmUgOTAgc2Vjb25kcyB0byBzb2x2ZSBhcyBtYW55IHByb2JsZW1zIGFzIHBvc3NpYmxlLgoKQSB0b3RhbCBvZiAjIyMgdW5kZXJncmFkdWF0ZSBzdHVkZW50cyBwYXJ0aWNpcGF0ZWQgaW4gdGhpcyBzdHVkeS4gCgoKPC9kZXRhaWxzPiAKCiMgQW5hbHlzaXMgUHJlcAojIyBMb2FkIExpYnJhcmllcwoKQmVmb3JlIGltcG9ydGluZyB0aGUgcmF3IGRhdGEsIHRoZSByZXF1aXJlZCBsaWJyYXJpZXMgd2VyZSBsb2FkZWQuCgpgYGB7ciBsb2FkX2xpYnMsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgRm9yIHBsb3R0aW5nIHBlcmZvcm1hbmNlOgoKbGlicmFyeShnZ3Bsb3QyKQoKIyBGb3IgcnVubmluZyBMZXZlbmUncyB0ZXN0OgoKbGlicmFyeShjYXIpCgojIEZvciBwZXJmb3JtaW5nIHN0YXRzIGFuYWx5c2VzIGxpa2UgQU5PVkFzOgoKbGlicmFyeShleikKCiMgRm9yIGZvcm1hdHRpbmcgdGFibGVzOgoKbGlicmFyeShrYWJsZUV4dHJhKQogIyBzZXQgb3B0aW9ucyBmb3Iga2FibGUgdGFibGVzIGZvciBhbGwgZnV0dXJlIHRhYmxlcwogIG9wdGlvbnMoa25pdHIudGFibGUuZm9ybWF0ID0gImh0bWwiKSAKICAKCiMgY2hvb3NlIGFueSBjb2xvdXJzIHlvdSB3YW50LCBnb29kIHRvIGhlbHAgd2l0aCBwcGwgdy8gY29sb3VyIGJsaW5kbmVzcwoKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgojIHJlcXVpcmVkIGZvciBmYWN0b3IgYW5hbHlzaXMKbGlicmFyeShwc3ljaCkKCgojIFRpZHl2ZXJzZSBmb3IgZGF0YSBhbmFseXNpcywgY2xlYW5pbmcsIGV0Yy4KICAjIGluY2x1ZGVkIHBhY2thZ2VzIGxvZGFlZCB3aXRoIHRoaXM6IGdncGxvdDIsIGRwbHlyLCB0aWR5ciwgcmVhZHIsIHB1cnJyLCB0aWJibGUsIHN0cmluZ3IsIGZvcmNhdHMKbGlicmFyeSh0aWR5dmVyc2UpCiAgCiMgZm9yIGNvcnJlbGF0aW9ucwpsaWJyYXJ5KEhtaXNjKQoKbGlicmFyeShzdGF0cykgIyB0byBwZXJmb3JtIHQtdGVzdHMKCmxpYnJhcnkoZ2dwdWJyKSAjIHRvIHBsb3QgZmlndXJlcwogIApsaWJyYXJ5KGVmZnNpemUpICMgdG8gY2FsY3VsYXRlIGNvaGVuJ3MgZCBlZmZlY3Qgc2l6ZQpsaWJyYXJ5KGNvaW4pICMgdG8gcnVuIE1hbm4tV2hpdG5leSBVIHRlc3QKICAKI2luc3RhbGwucGFja2FnZXMocGx5cikKICAjIGxpYnJhcnkocGx5cikKCiMgRm9yIGZvcm1hdHRpbmcgQU5PVkEgb3V0cHV0czoKCiNsaWJyYXJ5KHNjaG9Sc2NoKQogIAojIHRvIHBsb3QgcXVpY2sgY29ycmVsYXRpb24gbWF0cml4CiAgbGlicmFyeShjb3JycGxvdCkKICAjbGlicmFyeSgiUGVyZm9ybWFuY2VBbmFseXRpY3MiKQogIAojIHRvIHNob3cgbXVsdGlwbGUgZ3JvYnMgb24gcGFnZQpsaWJyYXJ5KGdyaWRFeHRyYSkKCgojIHJ0byBwbG90IHZpb2xpbiBwbG90cyAgCiAgIyBpbnN0YWxsIHRoZSBwYWNrYWdlCiAgIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3N0YXRzcGxvdCIpCiAgCiAgIyBMb2FkIHRoZSBwYWNrYWdlCiAgbGlicmFyeShnZ3N0YXRzcGxvdCkKICAKIyBsaWJyYXJ5KHBseXIpCmxpYnJhcnkocHVycnIpCiAgCiMgZ2V0IGVmZmVjdCBzaXplIGZyb20gd2hpdGUtY29ycmVjdGVkIEFOT1ZBCmxpYnJhcnkoRGVzY1Rvb2xzKQogIAojIGV4cG9ydCBsbSBhcyBodG1sIHRhYmxlCmxpYnJhcnkoc2pQbG90KSAgIyMgdXNlIHRhYl9tb2RlbCgpCmBgYAoKYGBge3IgbG9hZF9saWJzXzIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIGV2YWw9RkFMU0V9CiMgRm9yIHBsb3R0aW5nIHBlcmZvcm1hbmNlOgoKbGlicmFyeShnZ3Bsb3QyKQoKIyBGb3IgcnVubmluZyBMZXZlbmUncyB0ZXN0OgoKbGlicmFyeShjYXIpCgojIEZvciBwZXJmb3JtaW5nIHN0YXRzIGFuYWx5c2VzIGxpa2UgQU5PVkFzOgoKbGlicmFyeShleikKCiMgRm9yIGZvcm1hdHRpbmcgdGFibGVzOgoKbGlicmFyeShrYWJsZUV4dHJhKQogIyBzZXQgb3B0aW9ucyBmb3Iga2FibGUgdGFibGVzIGZvciBhbGwgZnV0dXJlIHRhYmxlcwogIG9wdGlvbnMoa25pdHIudGFibGUuZm9ybWF0ID0gImh0bWwiKSAKICAKCiMgY2hvb3NlIGFueSBjb2xvdXJzIHlvdSB3YW50LCBnb29kIHRvIGhlbHAgd2l0aCBwcGwgdy8gY29sb3VyIGJsaW5kbmVzcwoKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgojIHJlcXVpcmVkIGZvciBmYWN0b3IgYW5hbHlzaXMKbGlicmFyeShwc3ljaCkKCgojIFRpZHl2ZXJzZSBmb3IgZGF0YSBhbmFseXNpcywgY2xlYW5pbmcsIGV0Yy4KICAjIGluY2x1ZGVkIHBhY2thZ2VzIGxvZGFlZCB3aXRoIHRoaXM6IGdncGxvdDIsIGRwbHlyLCB0aWR5ciwgcmVhZHIsIHB1cnJyLCB0aWJibGUsIHN0cmluZ3IsIGZvcmNhdHMKbGlicmFyeSh0aWR5dmVyc2UpCiAgCiMgZm9yIGNvcnJlbGF0aW9ucwpsaWJyYXJ5KEhtaXNjKQoKbGlicmFyeShzdGF0cykgIyB0byBwZXJmb3JtIHQtdGVzdHMKCmxpYnJhcnkoZ2dwdWJyKSAjIHRvIHBsb3QgZmlndXJlcwogIApsaWJyYXJ5KGVmZnNpemUpICMgdG8gY2FsY3VsYXRlIGNvaGVuJ3MgZCBlZmZlY3Qgc2l6ZQpsaWJyYXJ5KGNvaW4pICMgdG8gcnVuIE1hbm4tV2hpdG5leSBVIHRlc3QKICAKI2luc3RhbGwucGFja2FnZXMocGx5cikKICAjIGxpYnJhcnkocGx5cikKCiMgRm9yIGZvcm1hdHRpbmcgQU5PVkEgb3V0cHV0czoKCiNsaWJyYXJ5KHNjaG9Sc2NoKQogIAojIHRvIHBsb3QgcXVpY2sgY29ycmVsYXRpb24gbWF0cml4CiAgbGlicmFyeShjb3JycGxvdCkKICAjbGlicmFyeSgiUGVyZm9ybWFuY2VBbmFseXRpY3MiKQogIAojIHRvIHNob3cgbXVsdGlwbGUgZ3JvYnMgb24gcGFnZQpsaWJyYXJ5KGdyaWRFeHRyYSkKCgojIHJ0byBwbG90IHZpb2xpbiBwbG90cyAgCiAgIyBpbnN0YWxsIHRoZSBwYWNrYWdlCiAgIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3N0YXRzcGxvdCIpCiAgCiAgIyBMb2FkIHRoZSBwYWNrYWdlCiAgbGlicmFyeShnZ3N0YXRzcGxvdCkKICAKIyBsaWJyYXJ5KHBseXIpCmxpYnJhcnkocHVycnIpCiAgCiMgZ2V0IGVmZmVjdCBzaXplIGZyb20gd2hpdGUtY29ycmVjdGVkIEFOT1ZBCmxpYnJhcnkoRGVzY1Rvb2xzKQogIAojIGV4cG9ydCBsbSBhcyBodG1sIHRhYmxlCmxpYnJhcnkoc2pQbG90KSAgIyMgdXNlIHRhYl9tb2RlbCgpCmBgYAoKIyMgQWRkaXRpb25hbCBGdW5jdGlvbnMKCiMjIyBSb3VuZGluZyBwLXZhbHVlcwoKPGRldGFpbHM+Cgo8c3VtbWFyeT4KClRoaXMgcm91bmRpbmcgZnVuY3Rpb24gd2FzIGFkYXB0ZWQgZnJvbSBbRHIuIEVtaWx5IE5pZWxzZW4ncyBScHVic10oaHR0cHM6Ly9ycHVicy5jb20vZWduaWVsc2VuKS4gVGhlIGZ1bmN0aW9uICgiKipwX3JvdW5kKHgpKioiKSB3YXMgY3JlYXRlZCB0byBhc3Nlc3MgYW5kIHByaW50IHAtdmFsdWVzLiBJZiAkcCBcZ2UgLjAwNSQsIHRoZSBmdW5jdGlvbiB3aWxsIGRpc3BsYXkgIlwkcCA9IFwkIiBhbmQgdGhlIHZhbHVlIHJvdW5kZWQgdG8gdHdvIGRlY2ltYWwgcGxhY2VzLiBJZiBcJCAuMDAwNSBcbGUgcCBcPC4wMDUkLCB0aGUgZnVuY3Rpb24gd2lsbCBkaXNwbGF5IOKAnCRwID0gXCQiIGFuZCB0aGUgdmFsdWUgcm91bmRlZCB0byB0aHJlZSBkZWNpbWFsIHBsYWNlcy4gSWYgJHAgPCAuMDAwNSQsIHRoZSBmdW5jdGlvbiB3aWxsIGRpc3BsYXkgIiRwIDwgLjAwMSQiLiAqKGNsaWNrIHRvIGV4cGFuZCkqCgo8L3N1bW1hcnk+CgpgYGB7ciBjcmVhdGVfcF9yb3VuZF9mdW5jdGlvbn0KCnBfcm91bmQgPC0gZnVuY3Rpb24oeCl7CiAgaWYoeCA+IC4wMDUpCiAgICB7eDEgPSAocGFzdGUoIj0gIiwgZ3N1YigiMFxcLiIsIlxcLiIsIHJvdW5kKHgsIGRpZ2l0cyA9IDIpKSwgc2VwID0gJycpKQogIH0gIAogIGVsc2UgaWYoeCA9PSAuMDA1KXt4MSA9IChwYXN0ZSgiPSIsIGdzdWIoIjBcXC4iLCJcXC4iLCAwLjAxKSkpCiAgfQogIGVsc2UgaWYoeCA+IC4wMDA1ICYgeCA8IC4wMDUpCiAgICB7eDEgPSAocGFzdGUoIj0gIiwgZ3N1YigiMFxcLiIsIlxcLiIsIHJvdW5kKHgsIGRpZ2l0cyA9IDMpKSwgc2VwID0gJycpKQogIH0gIAogIGVsc2UgaWYoeCA9PSAuMDAwNSl7eDEgPSAocGFzdGUoIj0iLCBnc3ViKCIwXFwuIiwiXFwuIiwgMC4wMDEpKSkKICB9CiAgZWxzZXt4MSA9IChwYXN0ZSgiPCIsIGdzdWIoIjBcXC4iLCJcXC4iLCAwLjAwMSkpKQogIH0gCiAgKHgxKQp9CgpgYGAKCiMjIyBGbGF0dGVuIENvcnJlbGF0aW9uIE91dHB1dAoKVGhlIGZvbGxvd2luZyB0YWtlcyBhIGNvcnJlbGF0aW9uIG91dHB1dCBhbmQgZmxhdHRlbnMgaXQgdG8gYSBsb25nIGZvcm1hdC4gT3JpZ2luYWxseSBmcm9tIFNUSERBJ3MgIkNvcnJlbGF0aW9uIG1hdHJpeCA6IEZvcm1hdHRpbmcgYW5kIHZpc3VhbGl6YXRpb24iICg8aHR0cDovL3d3dy5zdGhkYS5jb20vZW5nbGlzaC93aWtpL2NvcnJlbGF0aW9uLW1hdHJpeC1mb3JtYXR0aW5nLWFuZC12aXN1YWxpemF0aW9uIy5ZVzRJT2ZidG50TS5saW5rPikuCgpgYGB7ciBjcmVhdGVfZmxhdHRlbkNvcnJfZnVuY3Rpb259CiMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwojIGZsYXR0ZW5Db3JyTWF0cml4CiMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwojIGNvcm1hdCA6IG1hdHJpeCBvZiB0aGUgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCiMgcG1hdCA6IG1hdHJpeCBvZiB0aGUgY29ycmVsYXRpb24gcC12YWx1ZXMKZmxhdHRlbkNvcnJNYXRyaXggPC0gZnVuY3Rpb24oY29ybWF0LCBwbWF0KSB7CiAgdXQgPC0gdXBwZXIudHJpKGNvcm1hdCkKICBkYXRhLmZyYW1lKAogICAgcm93ID0gcm93bmFtZXMoY29ybWF0KVtyb3coY29ybWF0KVt1dF1dLAogICAgY29sdW1uID0gcm93bmFtZXMoY29ybWF0KVtjb2woY29ybWF0KVt1dF1dLAogICAgY29yICA9KGNvcm1hdClbdXRdLAogICAgcCA9IHBtYXRbdXRdCiAgICApCn0KYGBgCgoKPC9kZXRhaWxzPgoKIyMgSW1wb3J0IFJhdyBEYXRhIEZpbGVzCgpUaGVyZSBhcmUgKipmb3VyKiogcmF3IGRhdGEgZmlsZXMgZm9yIHRoZSBhbmFseXNlcy4gCgoqKlN0dWR5IDEqKiAgCgoxLiBTdHVkeSAxIC0gU3VydmV5IERhdGEKICAgIC0gY3N2IGZpbGUgZXhwb3J0ZWQgZnJvbSBRdWFsdHJpY3MKICAgIC0gZGF0YSBjb2xsZWN0ZWQgb25saW5lCiAgICAKKipTdHVkeSAyKiogICAKCjIuIFN0dWR5IDIgLSBTdXJ2ZXkgRGF0YQogICAgLSBjc3YgZmlsZSBleHBvcnRlZCBmcm9tIFF1YWx0cmljcwogICAgLSBkYXRhIGNvbGxlY3RlZCBpbi1wZXJzb24KICAgIAozLiBTdHVkeSAyIC0gVGVzdCBUcmFja2luZyBTaGVldAogICAgLSBleGNlbCBmaWxlLCBjb2xsZWN0ZWQgbWFudWFsbHkgZnJvbSBlYWNoIHBhcnRpY2lwYW50IGJ5IGV4cGVyaW1lbnRlcgogICAgLSBkYXRhIGNvbGxlY3RlZCBpbi1wZXJzb24KICAgIAo0LiBTdHVkeSAyLSBDQlMgZGF0YQogICAgLSBjc3YgZmlsZSBleHBvcnRlZCBmcm9tIG9ubGluZSBwbGF0Zm9ybQogICAgLSBkYXRhIGNvbGxlY3RlZCBpbi1wZXJzb24KICAgIAoqKipOT1RFOiBUbyBhdm9pZCBjb25mdXNpb24sIHRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIHR3byBzdHVkaWVzIHdhcyBhcyBmb2xsb3dzIGZvciBhbGwgZGF0YSwgYW5hbHlzZXMsIHZpc3VhbGl6YXRpb25zLCBldGMuOiBTdHVkeSAxID0gInBpbG90IiBhbmQgU3R1ZHkgMiA9ICJtYWluIioqKgoKIyMjIDEuIFN0dWR5IDEgRGF0YQoKRmlyc3QsIHRoZSByYXcgZGF0YSB3YXMgaW1wb3J0ZWQuIApgYGB7ciBpbXBvcnRfcGlsb3Rfc3VydmV5X3Jhd30KIyB0aGlzIHdpbGwgaW1wb3J0IHRoZSByYXcgZXhjZWwgZGF0YSBmaWxlIGZvciBzdHVkeSAxCiAgIyB0aGlzIGZpbGUgaGFzIGJlZW4gYW5vbnltaXplZCwgc28gYW55IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZW1vdmVkCnBpbG90X3N1cnZleV9yYXcgPC0gcmVhZC5jc3YoIlBpbG90X3N1cnZleV9kYXRhKGp1bmU3KS5jc3YiLCBoZWFkZXIgPSBUUlVFKQpgYGAKCkFmdGVyIGltcG9ydGluZyB0aGUgcmF3IGRhdGEsIHRoZSBmaWxlIGlzIGNsZWFuZWQgYnkgcmVtb3ZpbmcgcGFydGljaXBhbnRzIGJhc2VkIG9uIHNldmVyYWwgY3JpdGVyaWE6CgotICoqVGVzdGluZyBEYXRhKio6IGV4cGVyaW1lbnRlciBkYXRhIChpLmUuLCB0ZXN0aW5nIHByaW9yIHRvIGRhdGEgY29sbGVjdGlvbiksIGFueSBpcnJlbGV2YW50IHJvd3MKCi0gKipJbmNvbXBsZXRlIERhdGEqKjogcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRoZSBzdHVkeQogICAgLSBgciBucm93KHBpbG90X3N1cnZleV9yYXcgJT4lIGZpbHRlcihEaXN0cmlidXRpb25DaGFubmVsICE9ICJ0ZXN0IikgJT4lIGZpbHRlcihGaW5pc2hlZCA9PSAwKSlgIHJlbW92ZWQKICAgIAotICoqVW5uZWNlc3NhcnkgVmFyaWFibGVzKio6IGNvbHVtbnMgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGUgYW5hbHlzZXMgKGUuZy4sIGRpc3RyaWJ1dGlvbiB0eXBlLCBkaXN0cmlidXRpb24gbGFuZ2F1Z2UpCgpgYGB7ciBjbGVhbl9waWxvdF9zdXJ2ZXl9CiMgY2xlYW4gdGhlIGRhdGEKcGlsb3Rfc3VyX2RhdGFfdGVtcCA8LSAKICAjIHN0YXJ0IHdpdGggcmVtb3ZpbmcgZXhwZXJpbWVudGVyIGFuZCBpcnJlbGV2YW50IHJvd3MgZnJvbSB0aGUgZGF0YQogICAgIyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvdW50IHRoZSBwcyByZW1vdmVkIGF0IHRoaXMgc3RhZ2UgCiAgcGlsb3Rfc3VydmV5X3JhdyAlPiUgCiAgIyByZW1vdmUgcm93IDEgJiAyIC0tIG5vdCBkYXRhCiAgc2xpY2UoMzpucm93KHBpbG90X3N1cnZleV9yYXcpKSAlPiUgCiAgIyByZW1vdmUgdGVzdGluZyBkYXRhCiAgZmlsdGVyKERpc3RyaWJ1dGlvbkNoYW5uZWwgIT0gInRlc3QiKSAlPiUgCgogICMgbmV4dCwgcmVtb3ZlIHBzIHcvIGluY29tcGxldGUgZGF0YSAtLSBpbmNsdWRlIG9ubHkgdGhvcyB3aG8gaGF2ZSBmaW5pc2hlZCAoaS5lLiwgIjEiKQogIGZpbHRlcihGaW5pc2hlZCA9PSAxKSAlPiUgCiAgCiAgIyByZW1vdmUgdW5uZWNlc3NhcnkgY29sdW1ucwogICAgIyBzaG91bGQgYmUgZG9uZSBhZnRlciBvdGhlcnMgc2luY2UgY29sdW1ucyB1c2VkIHRvIGZpbHRlcgogIHNlbGVjdCgtYyhTdGF0dXM6SVBBZGRyZXNzLCBSZXNwb25zZUlkOkV4dGVybmFsUmVmZXJlbmNlLCBEaXN0cmlidXRpb25DaGFubmVsOlExLjIsIFNDMCkpCmBgYAoKCkFkZGl0aW9uYWxseSwgYSAicGFydGljaXBhbnQiIGNvbHVtbiB3YXMgYWRkZWQgdG8gZGVub3RlIHRoZSBwYXJ0aWNpcGFudCBJRCwgdGhlIGNvbHVtbnMgd2VyZSByZW5hbWVkIGZvciBlYXNpZXIgcmVmZXJlbmNlLCAgYW55IHVuY2xlYXIgb3IgaW5hcHByb3ByaWF0ZSByZXNwb25zZXMgKGUuZy4sIG5vbi1udW1lcmljIHJlc3BvbnNlIGZvciBpdGVtcyByZXF1aXJpbmcgYSBudW1lcmljIHJlc3BvbnNlKSB3ZXJlIHJlbW92ZWQsIGFuZCBhbGwgdmFyaWFibGVzIHdlcmUgZm9ybWF0dGVkIGFzIG51bWVyaWMgb3IgZmFjdG9yIGFzIGFwcHJvcHJpYXRlLgoKYGBge3IgcmVuYW1lX2NvbHNfcGlsb3Rfc3VyX2RhdGEsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgYWRkIGEgcGFydGljaXBhbnQgY29sdW1uIHRvIGRhdGEKcGlsb3Rfc3VyX2RhdGEgPC0gCiAgY2JpbmQoZGF0YS5mcmFtZSgicGFydGljaXBhbnQiID0gYygxOm5yb3cocGlsb3Rfc3VyX2RhdGFfdGVtcCkpKSwgcGlsb3Rfc3VyX2RhdGFfdGVtcCkKCnBpbG90X3N1cl9kYXRhIDwtIAogICMgY2hhbmdlIGRhdGEgZmlsZSB0eXBlIHRvIHRpYmJsZSAKICBhcy50aWJibGUocGlsb3Rfc3VyX2RhdGEpICU+JSAKICAjIHJlbmFtZSBjb2x1bW5zLi4uCiAgZHBseXI6OnJlbmFtZShkdXJhdGlvbl9zZWMgPSBEdXJhdGlvbi4uaW4uc2Vjb25kcy4sIGFnZSA9IFExLjMsIGdlbmRlciA9IFExLjQsIGdlbmRlck8gPSBRMS41LCBsYW5nID0gUTEuNiwgbGFuZ08gPSBRMS43LCBwcm9mID0gUTEuOCwgCiAgICAgICAgICAgICAgICBwcm9ncmFtID0gUTIuMSwgcHJvZ3JhbU8gPSBRMi4yLCB5ZWFyID0gUTIuMywgCiAgICAgICAgICAgICAgICBhZ2VfZmlyc3RfcGhvbmUgPSBRMy4xLCBhcHBfbW9zdF91c2VkID0gUTMuMiwgYXBwX21vc3RfdXNlZE8gPSBRMy4zLCBhcHBfbW9zdF91c2VkX3RleHQgPSBRMy40LCAKICAgICAgICAgICAgICAgIGlwaG9uZSA9IFE0LjEsIFNUX2FwcF9tb3N0X3VzZWQgPSBRNC4yLCBTVF9hcHBfbW9zdF91c2VkTyA9IFE0LjMsIFNUX2FwcF90ZXh0X21lc3MgPSBRNC40LCBTVF93ZWVrbHlfdG90X2hvdXJzID0gUTQuNSwgU1RfZGFpbHlfcGlja3VwcyA9IFE0LjYsIFNUX2RhaWx5X25vdCA9IFE0LjcsIAogICAgICAgICAgICAgICAgcGhvbmVfdmFsdWUgPSBRNS4xLCBwaGFudG9tID0gUTUuMiwgZGlzdF9kYWlseSA9IFE1LjNfMSwgZGlzdF9zdHVkeSA9IFE1LjNfMiwgZGlzdF9kZXZpY2UgPSBRNS40LCBkaXN0X2RldmljZU8gPSBRNS41LCBkaXN0X2RldmljZV9zdHVkeXdvcmsgPSBRNS42LCBkaXN0X2RldmljZV9zdHVkeXdvcmtPID0gUTUuNywgCiAgICAgICAgICAgICAgICBkaXN0X2RldmljZV9zb2NpYWwgPSBRNS44LCBkaXN0X2RldmljZV9zb2NpYWxPID0gUTUuOSwgCiAgICAgICAgICAgICAgICBwb3dfbm90X3VzaW5nID0gUTYuMV8xLCBwb3dfbm90aWZpY2F0aW9uc19vbiA9IFE2LjFfMiwgcG93X3ZpYnJhdGUgPSBRNi4xXzMsIHBvd19zdHVkeSA9IFE2LjFfNCwgcG93X2V4YW0gPSBRNi4xXzUsIHBvd19sZWMgPSBRNi4xXzYsIHBvd19zbGVlcCA9IFE2LjFfNywgbG9jX3R5cGljYWwgPSBRNi4yLCBsb2Nfc3R1ZHkgPSBRNi4zLCAKICAgICAgICAgICAgICAgIGxvY19leGFtID0gUTYuNCwgbG9jX2xlYyA9IFE2LjUsIGxvY19zb2NpYWwgPSBRNi42LCBjb21fZ2VuID0gUTYuN18xLCBjb21fdW5hdHRlbmRlZCA9IFE2LjdfMiwgY29tX2xlYXZlX3dpdGhfb3RoZXJzID0gUTYuN18zLCBjb21fbG9ja2VkID0gUTYuN180LCBjb21fcm9vbV90YXNrID0gUTYuN181LCAKICAgICAgICAgICAgICAgIGNvbW11bmljYXRlID0gUTcuMSwgY29tbXVuaWNhdGVPID0gUTcuMiwgcGhvbmVfdXNlID0gUTcuMywgcGhvbmVfdXNlTyA9IFE3LjQsIAogICAgICAgICAgICAgICAgTk1QUV8xID0gUTguMV8xLCBOTVBRXzIgPSBROC4xXzIsIE5NUFFfMyA9IFE4LjFfMywgTk1QUV80ID0gUTguMV80LCBOTVBRXzUgPSBROC4xXzUsIE5NUFFfNiA9IFE4LjFfNiwgTk1QUV83ID0gUTguMV83LCBOTVBRXzggPSBROC4xXzgsIE5NUFFfOSA9IFE4LjFfOSwgTk1QUV8xMCA9IFE4LjJfMSwgTk1QUV8xMSA9IFE4LjJfMiwgCiAgICAgICAgICAgICAgICBOTVBRXzEyID0gUTguMl8zLCAKICAgICAgICAgICAgICAgIE5NUFFfMTMgPSBROC4yXzQsIE5NUFFfMTQgPSBROC4yXzUsIE5NUFFfMTUgPSBROC4yXzYsIE5NUFFfMTYgPSBROC4yXzcsIE5NUFFfMTcgPSBROC4yXzgsIE5NUFFfMTggPSBROC4yXzksIE5NUFFfMTkgPSBROC4yXzEwLCBOTVBRXzIwID0gUTguMl8xMSwgCiAgICAgICAgICAgICAgICBNUElRXzEgPSBROS4xXzEsIE1QSVFfMiA9IFE5LjFfMiwgTVBJUV8zID0gUTkuMV8zLCBNUElRXzQgPSBROS4xXzQsIE1QSVFfNSA9IFE5LjFfNSwgTVBJUV82ID0gUTkuMV82LCBNUElRXzcgPSBROS4xXzcsIE1QSVFfOCA9IFE5LjFfOCwgTVBJUV9TSV8xID0gUTkuMl8xLCBNUElRX1NJXzIgPSBROS4yXzIsIE1QSVFfU0lfMyA9IFE5LjJfMywgCiAgICAgICAgICAgICAgICBNUElRX1ZGT18xID0gUTkuM18xLCBNUElRX1ZGT18yID0gUTkuM18yLCBNUElRX1ZGT18zID0gUTkuM18zLCAKICAgICAgICAgICAgICAgIFNBRF8xID0gUTEwLjFfMSwgU0FEXzIgPSBRMTAuMV8yLCBTQURfMyA9IFExMC4xXzMsIFNBRF80ID0gUTEwLjFfNCwgU0FEXzUgPSBRMTAuMV81LCBTQURfNiA9IFExMC4xXzYsIFNBRF83ID0gUTEwLjFfNywgU0FEXzggPSBRMTAuMV84LCBTQURfOSA9IFExMC4xXzksIFNBRF8xMCA9IFExMC4xXzEwLCBTQURfMTEgPSBRMTAuMV8xMSwgCiAgICAgICAgICAgICAgICBTQURfMTIgPSBRMTAuMV8xMiwgU0FEXzEzID0gUTEwLjFfMTMKICAgICAgICAgICAgICAgICkgJT4lIAogIAojIHJlcGxhY2UgdW5jbGVhci9pbmFwcHJvcHJpYXRlIHJlc3BvbnNlcwogICMgcmVtb3ZlIG5vbi1udW1lcmljIHJlc3BvbnNlcyB0byAiYWdlX2ZpcnN0X3Bob25lIgogICAgIyB0aGlzIHdpbGwgZm9yY2UgYWxsIG5vbi1udW1lcmljIHZhbHVlIHRvICJOQSIKICBtdXRhdGUoYWdlX2ZpcnN0X3Bob25lID0gYXMubnVtZXJpYyhhZ2VfZmlyc3RfcGhvbmUpKSAlPiUgCiAgCiAgIyBjaGFuZ2UgdmFyaWFibGVzIHRvIG51bWVyaWMgb3IgZmFjdG9yIGFzIG5lZWRlZAogIG11dGF0ZShhZ2UgPSBhcy5udW1lcmljKGFnZSksIGFnZSA9IGFzLm51bWVyaWMoYWdlKSwgZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxOjQpLCBsYWJlbHMgPSBjKCJNYWxlIiwgIkZlbWFsZSIsICJQcmVmZXIgbm90IHRvIHNheSIsICJPdGhlciIpKSwgbGFuZyA9IGZhY3RvcihsYW5nLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoIkVuZ2xpc2giLCAiT3RoZXIiKSksIHByb2YgPSBmYWN0b3IocHJvZiwgbGV2ZWxzID0gYygxOjMpLCBsYWJlbHMgPSBjKCJMb3ciLCAiTW9kZXJhdGUiLCAiSGlnaCIpKSwgcHJvZ3JhbSA9IGZhY3Rvcihwcm9ncmFtLCBsZXZlbHMgPSBjKDE6MTMpLCBsYWJlbHMgPSBjKCJBcnRzICYgSHVtYW5pdGllcyIsICJNdXNpYyIsICJFZHVjYXRpb24iLCAiRW5naW5lZXJpbmciLCAiSGFhbHRoIFNjaWVuY2UiLCAiSW5mb3JtYXRpb24gJiBNZWRpYSBTdHVkaWVzIiwgIkxhdyIsICJCdXNpbmVzcyIsICJTY2llbmNlIiwgIlNvY2lhbCBTY2llbmNlIiwgIlNjaHVsaWNoIERlbnRpc3RyeSIsICJHcmFkdWF0ZSBTdHVkaWVzIiwgIk90aGVyIikpLCB5ZWFyID0gZmFjdG9yKHllYXIsIGxldmVscyA9IGMoMTo2KSwgbGFiZWxzID0gYygiRmlyc3QgWWVhciIsICJTZWNvbmQgWWVhciIsICJUaGlyZCBZZWFyIiwgIkZvdXJ0aCBZZWFyIiwgIkZpZnRoIFllYXIrIiwgIkdyYWR1YXRlIFN0dWRlbnQiKSksIGFwcF9tb3N0X3VzZWQgPSBmYWN0b3IoYXBwX21vc3RfdXNlZCwgbGV2ZWxzID0gYygxOjQpLCBsYWJlbHMgPSBjKCJHYW1lcyIsICJTb2NpYWwgTmV0d29ya2luZyIsICJFbnRlcnRhaW5tZW50IiwgIk90aGVyIikpLCBpcGhvbmUgPSBmYWN0b3IoaXBob25lLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoInllcyIsICJubyIpKSwgU1RfYXBwX21vc3RfdXNlZCA9IGZhY3RvcihTVF9hcHBfbW9zdF91c2VkLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIkdhbWVzIiwgIlNvY2lhbCBOZXR3b3JraW5nIiwgIkVudGVydGFpbm1lbnQiLCAiT3RoZXIiKSksIFNUX2FwcF90ZXh0X21lc3MgPSBmYWN0b3IoU1RfYXBwX3RleHRfbWVzcywgbGV2ZWxzID0gYygxOjIpLCBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSksIFNUX3dlZWtseV90b3RfaG91cnMgPSBmYWN0b3IoU1Rfd2Vla2x5X3RvdF9ob3VycywgbGV2ZWxzID0gYygxOjUpLCBsYWJlbHMgPSBjKCIwLTEwIiwgIjExLTIwIiwgIjIxLTMwIiwgIjMxLTQwIiwgIjQwKyIpKSwgU1RfZGFpbHlfcGlja3VwcyA9IGZhY3RvcihTVF9kYWlseV9waWNrdXBzLCBsZXZlbHMgPSBjKDE6NSksIGxhYmVscyA9IGMoIjAtNTAiLCAiNTEtMTAwIiwgIjEwMS0xNTAiLCAiMTUxLTIwMCIsICIyMDArIikpLCBTVF9kYWlseV9ub3QgPSBmYWN0b3IoU1RfZGFpbHlfbm90LCBsZXZlbHMgPSBjKDE6NSksIGxhYmVscyA9IGMoIjAtNTAiLCAiNTEtMTAwIiwgIjEwMS0xNTAiLCAiMTUxLTIwMCIsICIyMDArIikpLCBwaG9uZV92YWx1ZSA9IGZhY3RvcihwaG9uZV92YWx1ZSwgbGV2ZWxzID0gYygxOjQpLCBsYWJlbHMgPSBjKCIkMC0kMjAiLCAiJDIxLSQ0MCIsICIkNDEtJDYwIiwgIj4kNjAiKSksIHBoYW50b20gPSBmYWN0b3IocGhhbnRvbSwgbGV2ZWxzID0gYygxOjIpLCBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSksIGRpc3RfZGFpbHkgPSBhcy5udW1lcmljKGRpc3RfZGFpbHkpLCBkaXN0X3N0dWR5ID0gYXMubnVtZXJpYyhkaXN0X3N0dWR5KSwgZGlzdF9kZXZpY2UgPSBmYWN0b3IoZGlzdF9kZXZpY2UsIGxldmVscyA9IGMoMTo1KSwgbGFiZWxzID0gYygiQ29tcHV0ZXIiLCAiUGhvbmUiLCAiaVBhZC9UYWJsZXQiLCAiU21hcnR3YXRjaCIsICJPdGhlciIpKSwgZGlzdF9kZXZpY2Vfc3R1ZHl3b3JrID0gZmFjdG9yKGRpc3RfZGV2aWNlX3N0dWR5d29yaywgbGV2ZWxzID0gYygxOjUpLCBsYWJlbHMgPSBjKCJDb21wdXRlciIsICJQaG9uZSIsICJpUGFkL1RhYmxldCIsICJTbWFydHdhdGNoIiwgIk90aGVyIikpLCBkaXN0X2RldmljZV9zb2NpYWwgPSBmYWN0b3IoZGlzdF9kZXZpY2Vfc29jaWFsLCBsZXZlbHMgPSBjKDE6NSksIGxhYmVscyA9IGMoIkNvbXB1dGVyIiwgIlBob25lIiwgImlQYWQvVGFibGV0IiwgIlNtYXJ0d2F0Y2giLCAiT3RoZXIiKSksIHBvd19ub3RfdXNpbmcgPSBhcy5udW1lcmljKHBvd19ub3RfdXNpbmcpLCBwb3dfbm90aWZpY2F0aW9uc19vbiA9IGFzLm51bWVyaWMocG93X25vdGlmaWNhdGlvbnNfb24pLCBwb3dfdmlicmF0ZSA9IGFzLm51bWVyaWMocG93X3ZpYnJhdGUpLCBwb3dfc3R1ZHkgPSBhcy5udW1lcmljKHBvd19zdHVkeSksIHBvd19leGFtID0gYXMubnVtZXJpYyhwb3dfZXhhbSksIHBvd19sZWMgPSBhcy5udW1lcmljKHBvd19sZWMpLCBwb3dfc2xlZXAgPSBhcy5udW1lcmljKHBvd19zbGVlcCksIGxvY190eXBpY2FsID0gZmFjdG9yKGxvY190eXBpY2FsLCBsZXZlbHMgPSBjKDE6MyksIGxhYmVscyA9IGMoIk9uIG15IGRlc2siLCAiSW4gbXkgcG9ja2V0IG9yIGJhZyIsICJJbiBhbm90aGVyIHJvb20iKSksIGxvY19zdHVkeSA9IGZhY3Rvcihsb2Nfc3R1ZHksIGxldmVscyA9IGMoMTozKSwgbGFiZWxzID0gYygiT24gbXkgZGVzayIsICJJbiBteSBwb2NrZXQgb3IgYmFnIiwgIkluIGFub3RoZXIgcm9vbSIpKSwgbG9jX2V4YW0gPSBmYWN0b3IobG9jX2V4YW0sIGxldmVscyA9IGMoMTozKSwgbGFiZWxzID0gYygiT24gbXkgZGVzayIsICJJbiBteSBwb2NrZXQgb3IgYmFnIiwgIkluIGFub3RoZXIgcm9vbSIpKSwgbG9jX2xlYyA9IGZhY3Rvcihsb2NfbGVjLCBsZXZlbHMgPSBjKDE6MyksIGxhYmVscyA9IGMoIk9uIG15IGRlc2siLCAiSW4gbXkgcG9ja2V0IG9yIGJhZyIsICJJbiBhbm90aGVyIHJvb20iKSksIGxvY19zb2NpYWwgPSBmYWN0b3IobG9jX3NvY2lhbCwgbGV2ZWxzID0gYygxOjMpLCBsYWJlbHMgPSBjKCJPbiBteSBkZXNrIiwgIkluIG15IHBvY2tldCBvciBiYWciLCAiSW4gYW5vdGhlciByb29tIikpLCBjb21fZ2VuID0gYXMubnVtZXJpYyhjb21fZ2VuKSwgY29tX3VuYXR0ZW5kZWQgPSBhcy5udW1lcmljKGNvbV91bmF0dGVuZGVkKSwgY29tX2xlYXZlX3dpdGhfb3RoZXJzID0gYXMubnVtZXJpYyhjb21fbGVhdmVfd2l0aF9vdGhlcnMpLCBjb21fbG9ja2VkID0gYXMubnVtZXJpYyhjb21fbG9ja2VkKSwgY29tX3Jvb21fdGFzayA9IGFzLm51bWVyaWMoY29tX3Jvb21fdGFzayksIGNvbW11bmljYXRlID0gZmFjdG9yKGNvbW11bmljYXRlLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIkZhbWlseSIsICJGcmllbmRzIiwgIldvcmsiLCAiT3RoZXIiKSksIHBob25lX3VzZSA9IGZhY3RvcihwaG9uZV91c2UsIGxldmVscyA9IGMoMSwyLCA1LCAzLCA0KSwgbGFiZWxzID0gYygiQ2FsbGluZy9UZXh0aW5nIiwgIlNvY2lhbCBNZWRpYSIsICJHYW1lcyIsICJFbWFpbCIsICJPdGhlciIpKQogICAgICAgICApICU+JSAKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTk1QUSIpKSxmdW5zKGFzLm51bWVyaWMpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk1QSVEiKSksZnVucyhhcy5udW1lcmljKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJTQUQiKSksZnVucyhhcy5udW1lcmljKSkgJT4lIAogIAogICMgcmV2ZXJzZSBjb2RlIGl0ZW1zLi4uCiAgbXV0YXRlKE1QSVFfVkZPXzJSID0gOC1NUElRX1ZGT18yKSAlPiUgCiAgCiAgIyBhZGQgc2NvcmVzIGZvciBlYWNoIHF1ZXN0aW9ubmFpcmUuLi4gcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9zY29yZSA9IHN1bShjX2Fjcm9zcyhTQURfMTpTQURfMTMpKSkKICAjIGZvciBlYWNoIHAuLi4uCiAgIyBnZXQgTk1QUSBzY29yZSAtLSBTVU0KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTk1QUV9zdW0gPSBzdW0oY19hY3Jvc3MoTk1QUV8xOk5NUFFfMjApKSkgJT4lIAogICMgZ2V0IE5NUFEgc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShtZWFuKGNfYWNyb3NzKE5NUFFfMTpOTVBRXzIwKSkpICU+JSAKICAKICAjIGdldCBNUElRIHNjb3JlIC0tIFNVTQogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShNUElRX3N1bSA9IHN1bShjX2Fjcm9zcyhNUElRXzE6TVBJUV84KSkpICU+JSAKICAjIGdldCBNUElRIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9tZWFuID0gbWVhbihjX2Fjcm9zcyhNUElRXzE6TVBJUV84KSkpICU+JSAKICAKICAjIGdldCBNUElRX1NJIHNjb3JlIC0tIFNVTQogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShNUElRX1NJX3N1bSA9IHN1bShjX2Fjcm9zcyhNUElRX1NJXzE6TVBJUV9TSV8zKSkpICU+JSAKICAjIGdldCBNUElRX1NJIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9TSV9tZWFuID0gbWVhbihjX2Fjcm9zcyhNUElRX1NJXzE6TVBJUV9TSV8zKSkpICU+JSAKICAKICAjIGdldCBNUElRX1ZGTyBzY29yZSAtLSBTVU0gIAogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShNUElRX1ZGT19zdW0gPSBzdW0oTVBJUV9WRk9fMSwgTVBJUV9WRk9fMlIsIE1QSVFfVkZPXzMpKSAlPiUgCiAgIyBnZXQgTVBJUV9WRk8gc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShNUElRX1ZGT19tZWFuID0gbWVhbihNUElRX1ZGT18xLCBNUElRX1ZGT18yUiwgTVBJUV9WRk9fMykpICU+JSAKICAKICAjIGdldCBTQUQgc2NvcmUgLS0gU1VNICAKICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX3N1bSA9IHN1bShjX2Fjcm9zcyhTQURfMTpTQURfMTMpKSkgJT4lIAogICMgZ2V0IFNBRCBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9tZWFuID0gbWVhbihjX2Fjcm9zcyhTQURfMTpTQURfMTMpKSkgJT4lIAogICAgCiAgIyBnZXQgU0FEX2RlcCBzY29yZSAtLSBTVU0KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX2RlcF9zdW0gPSBzdW0oY19hY3Jvc3MoU0FEXzE6U0FEXzMpKSkgJT4lIAogICMgZ2V0IFNBRF9kZXAgc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfZGVwX21lYW4gPSBtZWFuKGNfYWNyb3NzKFNBRF8xOlNBRF8zKSkpICU+JSAKICAgIAogICMgZ2V0IFNBRF9lYSBzY29yZSAtLSBTVU0KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX2VhX3N1bSA9IHN1bShjX2Fjcm9zcyhTQURfODpTQURfMTEpKSkgJT4lIAogICMgZ2V0IFNBRF9lYSBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9lYV9tZWFuID0gbWVhbihjX2Fjcm9zcyhTQURfODpTQURfMTEpKSkgJT4lIAogIAogICMgZ2V0IFNBRF9hY2Nlc3Mgc2NvcmUgLS0gU1VNCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9hY2Nlc3Nfc3VtID0gc3VtKGNfYWNyb3NzKFNBRF81OlNBRF83KSkpICU+JSAKICAjIGdldCBTQURfYWNjZXNzIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX2FjY2Vzc19tZWFuID0gbWVhbihjX2Fjcm9zcyhTQURfNTpTQURfNykpKSAlPiUgCiAgCiAgIyBnZXQgU0FEX2Rpc3Qgc2NvcmUgLS0gU1VNCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9kaXN0X3N1bSA9IHN1bShjX2Fjcm9zcyhTQURfMTI6U0FEXzEzKSkpICU+JSAKICAjIGdldCBTQURfZGlzdCBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9kaXN0X21lYW4gPSBtZWFuKGNfYWNyb3NzKFNBRF8xMjpTQURfMTMpKSkgJT4lIAogIAogICMgZnJvbSBXQVJEIC0tIGdldCAiV2RlcCIgYW5kICJXZWEiCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9XZGVwX3N1bSA9IHN1bShjX2Fjcm9zcyhTQURfMTpTQURfNikpKSAlPiUgCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9XZWFfc3VtID0gc3VtKGNfYWNyb3NzKFNBRF84OlNBRF8xMikpKQpgYGAKCgpUaGlzIGlzIHRoZSBwcmltYXJ5IGRhdGEgZmlsZSBmb3Igc3R1ZHkgMS4gSXQgY29udGFpbnMgcmVzcG9uc2VzIHRvIHRoZSA0IHBpbG90IHF1ZXN0aW9ubmFpcmVzOgotICgxKSBBIFNtYXJ0cGhvbmUgVXNlIFF1ZXN0aW9ubmFpcmUgKG1hZGUgZm9yIHRoZSBwcmVzZW50IHN0dWR5KQotICgyKSBUaGUgTm9tb3Bob2JpYSBRdWVzdGlvbm5haXJlIChOTVAtUTsgWWlsZGlyaW0gJiBDb3JyZWlhLCAyMDE1KQotICgzKSBUaGUgTW9iaWxlIFBob25lIEludm9sdmVtZW50IFF1ZXN0aW9ubmFpcmUgKE1QSVE7IFdhbHNoIGV0IGFsLiwgMjAxMCkKLSAoNCkgVGhlIFNtYXJ0cGhvbmUgQXR0YWNobWVudCBhbmQgRGVwZW5kZW5jeSBRdWVzdGlvbm5haXJlIChTQUQ7IFdhcmQgZXQgYWwuLCAyMDE3KQoKCiMjIyMgKDEpIFNtYXJ0cGhvbmUgVXNlIFF1ZXN0aW9ubmFpcmUgLSBHZW5lcmFsIE5vdGVzOgoKKiAqKnBhcnRpY2lwYW50KiogZGVub3RlcyBwYXJ0aWNpcGFudCBudW1iZXIuCgoqICoqU3RhcnREYXRlKiogZGVub3RlcyB0aGUgZGF0ZSBwYXJ0aWNpcGFudHMgc3RhcnRlZCBzdHVkeSAxLgoKKiAqKkVuZCBEYXRlKiogZGVub3RlcyB0aGUgZGF0ZSBwYXJ0aWNpcGFudHMgZW5kZWQgc3R1ZHkgMS4KCiogKipQcm9ncmVzcyoqIGRlbm90ZXMgaG93IG11Y2ggb2Ygc3R1ZHkgMSB0aGUgcGFydGljaXBhbnQgaGFzIGNvbXBsZXRlZCAoaS5lLiwgb3V0IG9mIDEwMCUpLgoKKiAqKkR1cmF0aW9uSW5TZWMqKiBkZW5vdGVzIGhvdyBsb25nIHBhcnRpY2lwYW50cyB0b29rIHRvIGNvbXBsZXRlIHN0dWR5IDEgaW4gc2Vjb25kcy4KCiogKipGaW5pc2hlZCoqIGRlbm90ZXMgaWYgcGFydGljaXBhbnRzIGNvbXBsZXRlZCB0aGUgc3R1ZHkuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSBUUlVFCiAgICAtIDIgPSBGQUxTRQogICAgCiogKipSZWNvcmRlZERhdGUqKiBkZW5vdGVzIHRoZSBkYXRlIHBhcnRpY2lwYW50cycgZGF0YSB3YXMgcmVjb3JkZWQuCgoqICoqQWdlKiogc2hvd3MgZWFjaCBwYXJ0aWNpcGFudCdzIHNlbGYtcmVwb3J0ZWQgYWdlLgoKKiAqKkdlbmRlcioqIHJlZmVycyB0byBwYXJ0aWNpcGFudCdzIHNlbGYtcmVwb3J0ZWQgZ2VuZGVyLiBUaGlzIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgogICAgLSAxID0gTWFsZQogICAgLSAyID0gRmVtYWxlCiAgICAtIDMgPSBPdGhlcgogICAgCiogKipHZW5kZXJPdGhlcioqIHJlZmVycyB0byBwYXJ0aWNpcGFudCdzIGdlbmRlciBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKKiAqKkZpcnN0TGFuZ3VhZ2UqKiByZWZlcnMgdG8gc2VsZi1yZXBvcnRlZCBmaXJzdCBsYW5ndWFnZS4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IEVuZ2xpc2gKICAgIC0gMiA9IEFueSBvdGhlciBsYW5ndWFnZQogICAgCiogKipGaXJzdExhbmd1YWdlT3RoZXIqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBmaXJzdCBsYW5ndWFnZSBpZiAnYW55IG90aGVyIGxhbmd1YWdlJyB3YXMgc2VsZWN0ZWQuIFRoaXMgd2FzIGEgb3BlbiByZXNwb25zZSBpdGVtLCB3aGVyZSAiTkEiIGRlbm90ZXMgIm90aGVyIiB3YXMgbm90IGNob3Nlbi4KICAgIAoqICoqRW5nbGlzaFByb2ZpY2llbmN5KiogcmVmZXJzIHRvIHBhcnRpY2lwYW50J3Mgc2VsZi1yZXBvcnRlZCBwcm9maWNpZW5jeSBpbiBFbmdsaXNoLiBUaGlzIHdhcyBhc2tlZCBvZiBhbGwgcGFydGljaXBhbnRzLCByZWdhcmxlc3Mgb2YgdGhlaXIgZmlyc3QgbGFuZ3VhZ2UuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSBMb3cKICAgIC0gMiA9IE1vZGVyYXRlCiAgICAtIDMgPSBIaWdoCiAgICAKKiAqKlByb2dyYW0qKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBwcm9ncmFtIG9mIHN0dWR5LiBUaGlzIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAxID0JQXJ0cyAmIEh1bWFuaXRpZXMgICAgICAgICAgICB8IDggPSBCdXNpbmVzcyAKICAgIDIgPQlNdXNpYyAgICAgICAgICAgICAgICAgICAgICAgIHwgOSA9IFNjaWVuY2UgCiAgICAzCT0gRWR1Y2F0aW9uICAgICAgICAgICAgICAgICAgICB8IDEwID0gU29jaWFsIFNjaWVuY2UgCiAgICA0CT0gRW5naW5lZXJpbmcgICAgICAgICAgICAgICAgICB8IDExID0gU2NodWxpY2ggRGVudGlzdHJ5CiAgICA1CT0gSGVhbHRoIFNjaWVuY2UgICAgICAgICAgICAgICB8IDEyID0gR3JhZHVhdGUgU3R1ZGllcwogICAgNiA9CUluZm9ybWF0aW9uICYgTWVkaWEgU3R1ZGllcyAgfCAxMyA9IE90aGVyCiAgICA3ID0JTGF3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IAogICAgCiAgICAKKiAqKlByb2dyYW1PdGhlcioqIHJlZmVycyB0byBwYXJ0aWNpcGFudCdzIHByb2dyYW0gaWYgJ290aGVyJyB3YXMgc2VsZWN0ZWQuIFRoaXMgd2FzIGEgb3BlbiByZXNwb25zZSBpdGVtLCB3aGVyZSAiTkEiIGRlbm90ZXMgIm90aGVyIiB3YXMgbm90IGNob3Nlbi4KICAgIAoqICoqWWVhck9mU3R1ZHkqKiByZWZlcnMgdG8gd2hpY2ggeWVhciBvZiBzdHVkeSBwYXJ0aWNpcGFudHMgd2VyZSBpbiBkdXJpbmcgdGVzdGluZy4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IEZpcnN0IFllYXIKICAgIC0gMiA9IFNlY29uZCBZZWFyCiAgICAtIDMgPSBUaGlyZCBZZWFyCiAgICAtIDQgPSBmb3VydGggWWVhcgogICAgLSA1ID0gNXRoKyBZZWFyCiAgICAtIDYgPSBHcmFkdWF0ZSBTdHVkZW50CgoqICoqQWdlRmlyc3RQaG9uZSoqIHJlZmVycyB0byB0aGUgc2VsZi1yZXBvcnRlZCBhZ2Ugd2hlbiBwYXJ0aWNpcGFudHMgZ290IHRoZWlyIGZpcnN0IHNtYXJ0cGhvbmUuIFRoaXMgd2FzIGEgb3BlbiByZXNwb25zZSBpdGVtLCB3aGVyZSAiTkEiIGRlbm90ZXMgbm8gcmVzcG9uc2UuCgoqICoqQXBwTW9zdFVzZWRDYXQqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBtb3N0IHVzZWQgc21hcnRwaG9uZSBhcHBsaWNhdGlvbiwgY2hvc2VuIGZyb20gKGFuZCBjb2RlZCBhcykgdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOgogICAgLSAxID0gR2FtZXMgKGUuZy4sIGNhbmR5IGNydXNoLCBjbGFzaCBvZiBjbGFucykKICAgIC0gMiA9IFNvY2lhbCBOZXR3b3JraW5nIChlLmcuLCBJbnN0YWdyYW0sIEZhY2Vib29rLCBTbmFwY2hhdCkKICAgIC0gMyA9IEVudGVydGFpbm1lbnQgKGUuZy4sIG11c2ljLCBZb3VUdWJlKQogICAgLSA0ID0gT3RoZXIKCiogKipBcHBNb3N0VXNlZENhdE90aGVyKiogcmVmZXJzIHRvIHBhcnRpY2lwYW50J3MgbW9zdCB1c2VkIHNtYXJ0cGhvbmUgYXBwbGljYXRpb24gKGZyb20gYSBjYXRlZ29yeSkgaWYgJ290aGVyJyB3YXMgc2VsZWN0ZWQuIFRoaXMgd2FzIGEgb3BlbiByZXNwb25zZSBpdGVtLCB3aGVyZSAiTkEiIGRlbm90ZXMgIm90aGVyIiB3YXMgbm90IGNob3Nlbi4KCiogKipBcHBNb3N0VXNlZEZyZWUqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBtb3N0IHVzZWQgc21hcnRwaG9uZSBhcHBsaWNhdGlvbi4gSGVyZSwgcGFydGljaXBhbnQgc3BlY2lmaWVkIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiB0aGV5IHVzZSB0aGUgbW9zdCBvbiB0aGVpciBzbWFydHBob25lLiBUaGlzIHdhcyBhIG9wZW4gcmVzcG9uc2UgaXRlbSwgd2hlcmUgIk5BIiBkZW5vdGVzIG5vIHJlc3BvbnNlLgoKICAgIAoqICoqT3RoZXIqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKIyMjIyMgUGFyYWRpZ20gRGVjaXNpb24gUXVlc3Rpb25zCiogVGhlc2UgcXVlc3Rpb25zIGFza2VkIHBhcnRpY2lwYW50cyB0byByZXBvcnQgdGhlaXIgZ2VuZXJhbCBzbWFydHBob25lIHVzZSB3aXRoIHJlc3BlY3QgdG8gKDEpIFBvd2VyLCAoMikgTG9jYXRpb24sIGFuZCAoMykgQ29tZm9ydCBMZXZlbC4gVGhlc2UgYXJlIHRoZSBrZXkgcXVlc3Rpb25zIGluIHN0dWR5IDEgdGhhdCB3ZXJlIHVzZWQgdG8gZGVjaWRlIHRoZSBkZXNpZ24gb2Ygc3R1ZHkgMi4KCiMjIyMjIyBQb3dlciBRdWVzdGlvbnMKKiBBbGwgcG93ZXIgcXVlc3Rpb25zIHdlcmUgYW5zd2VyZWQgb24gYSA3LXBvaW50IGxpa2VydCBzY2FsZSBhcyBmb2xsb3dzOgogICAgLSA8dGQgY29sc3BhbiA9IDc+IDx0ZD58ICAgCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAogICAgICAgIDEgPSBTdHJvbmdseSBEaXNhZ3JlZSB8IDIgPSBEaXNhZ3JlZSAgfCAzID0gU29tZXdoYXQgRGlzYWdyZWUgfCA0ID0gTmV1dHJhbCAgfCA1ID0gU29tZXdoYXQgQWdyZWUgIHwgNiA9IEFncmVlIHwgNyA9IFN0cm9uZ2x5IEFncmVlCgoqICoqUERfUF8xKio6ICJJIHRlbmQgdG8gdHVybiBteSBwaG9uZSBvZmYgd2hlbiBJIGFtIG5vdCB1c2luZyBpdC4iLgoKKiAqKlBEX1BfMioqOiAiSSB0ZW5kIHRvIGhhdmUgbXkgbm90aWZpY2F0aW9ucyB0dXJuZWQgb24uIgoKKiAqKlBEX1BfMyoqOiAiSSB0ZW5kIHRvIGhhdmUgbXkgcGhvbmUgb24gdmlicmF0ZS4iCgoqICoqUERfUF80Kio6ICJXaGVuIEkgc3R1ZHksIEkgdHlwaWNhbGx5IGtlZXAgbXkgcGhvbmUgb24uIgoKKiAqKlBEX1BfNSoqOiAiV2hlbiBJIHdyaXRlIGFuIGV4YW0sIEkgdGVuZCB0byBrZWVwIG15IHBob25lIG9uLiIKCiogKipQRF9QXzYqKjogIldoZW4gSSBhbSBpbiBhIGxlY3R1cmUsIEkgdGVuZCB0byBrZWVwIG15IHBob25lIG9uLiIKCiogKipQRF9QXzcqKjogIldoZW4gSSBzbGVlcCwgSSB0ZW5kIHRvIGtlZXAgbXkgcGhvbmUgdHVybmVkIG9uLiIKCiMjIyMjIyBMb2NhdGlvbiBRdWVzdGlvbnMKKiBBbGwgcG93ZXIgcXVlc3Rpb25zIHdlcmUgY29kZWQgYXMgZm9sbG93czoKICAgIC0gPHRkIGNvbHNwYW4gPSA3PiA8dGQ+fCAgIAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLQogICAgICAgIDEgPSBEZXNrIHwgMiA9IFBvY2tldC9CYWcgIHwgMyA9IE90aGVyIFJvb20KICAgICAgICAKKiAqKlBEX0xfMSoqOiAiVHlwaWNhbGx5LCBJIGtlZXAgbXkgcGhvbmU6IgoKKiAqKlBEX0xfMioqOiAiV2hlbiBJIHN0dWR5LCBJIGtlZXAgbXkgcGhvbmU6IgoKKiAqKlBEX0xfMyoqOiAiV2hlbiBJIHdyaXRlIGFuIGV4YW0sIEkga2VlcCBteSBwaG9uZToiCgoqICoqUERfTF80Kio6ICJXaGVuIEkgYW0gaW4gYSBsZWN0dXJlLCBJIGtlZXAgbXkgcGhvbmU6IgoKKiAqKlBEX0xfNSoqOiAiV2hlbiBJIGFtIGluIGEgc29jaWFsIHNldHRpbmcgKGkuZS4sIHdpdGggZnJpZW5kcywgZmFtaWx5KSwgSSBrZWVwIG15IHBob25lOiIKCiMjIyMjIyBDb21mb3J0IExldmVsIFF1ZXN0aW9ucwoqIEFsbCBjb21mb3J0IGxldmVsIHF1ZXN0aW9ucyB3ZXJlIGFuc3dlcmVkIG9uIGEgNy1wb2ludCBsaWtlcnQgc2NhbGUgYXMgZm9sbG93czoKICAgIC0gPHRkIGNvbHNwYW4gPSA3PiA8dGQ+fCAgIAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAxID0gU3Ryb25nbHkgRGlzYWdyZWUgfCAyID0gRGlzYWdyZWUgIHwgMyA9IFNvbWV3aGF0IERpc2FncmVlIHwgNCA9IE5ldXRyYWwgIHwgNSA9IFNvbWV3aGF0IEFncmVlICB8IDYgPSBBZ3JlZSB8IDcgPSBTdHJvbmdseSBBZ3JlZQogICAgICAgIAoqICoqUERfQ18xKio6ICJJIGFtIGNvbWZvcnRhYmxlIHdpdGggbGV0dGluZyBvdGhlcnMgdXNlIG15IHBob25lLiIKCiogKipQRF9DXzIqKjogIkkgbGVhdmUgbXkgcGhvbmUgdW5hdHRlbmRlZC4iCgoqICoqUERfQ18zKio6ICJJIGxlYXZlIG15IHBob25lIHdpdGggb3RoZXIgcGVvcGxlLiIKCiogKipQRF9DXzQqKjogIkkgbWFrZSBzdXJlIG15IHBob25lIGlzIGxvY2tlZCB3aGVuIGl0IGlzIG5vdCBpbiBteSBoYW5kcy4iCgoqICoqUERfQ181Kio6ICJJIHdvdWxkIGZlZWwgY29tZm9ydGFibGUgbGVhdmluZyBteSBwaG9uZSBpbiBhbm90aGVyIHJvb20gd2hpbGUgY29tcGxldGluZyBhIHRhc2suIiIKCiMjIyMjIEV4cGxvcmF0b3J5IFF1ZXN0aW9ucwoqIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgc29tZSBub3RlcyBvbiB0aGUgZXhwbG9yYXRvcnkgcXVlc2l0b25zIGluIHRoZSBzdHVkeQoKIyMjIyMjIFNjcmVlbiBUaW1lIFF1ZXN0aW9ucwoqIFNjcmVlbnRpbWUgKFNUKSBpcyBhbiBBcHBsZSBhcHBsaWNhdGlvbiB3aGljaCB0cmFja3MgeW91ciBkZXZpY2UgdXNhZ2Ugb3ZlciB0aW1lLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG86IHRvdGFsIGhvdXJzIHVzZWQsIG5vdGlmaWNhdGlvbnMgcmVjZWl2ZWQsIG1vc3QgdXNlZCBhcHBsaWNhdGlvbiwgZXRjLiBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIHNvbWUgbm90ZXMgb24gdGhlIFNULXNwZWNpZmljIHF1ZXN0aW9ucyAoNyBpdGVtcyBpbiB0b3RhbCkuCgoqICoqU1RfMSoqIHJlZmVycyB0byB3aGV0aGVyIGEgcGFydGljaXBhbnQgcmVwb3J0ZWQgKipjdXJyZW50bHkgb3duaW5nIGFuIGlQaG9uZSoqLiBOb3RlOiBpdCB3YXMgYXNzdW1lZCB0aGF0IGFsbCBpUGhvbmUgdXNlcnMgaGFkIGFjY2VzcyB0byB0aGUgU1QgYXBwbGljYXRpb24gb24gdGhlaXIgc21hcnRwaG9uZS4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IFllcyAKICAgIC0gMiA9IE5vCiAgICAKKiAqKlNUXzIqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyAqKm1vc3RlZCB1c2VkIGFwcGxpY2F0aW9uKiogKGFjY29yZGluZyB0byBTVCkuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSBHYW1lcyAoZS5nLiwgY2FuZHkgY3J1c2gsIGNsYXNoIG9mIGNsYW5zKQogICAgLSAyID0gU29jaWFsIE5ldHdvcmtpbmcgKGUuZy4sIEluc3RhZ3JhbSwgRmFjZWJvb2ssIFNuYXBjaGF0KQogICAgLSAzID0gRW50ZXJ0YWlubWVudCAoZS5nLiwgbXVzaWMsIFlvdVR1YmUpCiAgICAtIDQgPSBPdGhlcgoKKiAqKlNUXzMqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyBtb3N0IHVzZWQgYXBwbGljYXRpb24gd2FzICdvdGhlcicgKGFjY29yZGluZyB0byBTVCkuIFRoaXMgd2FzIGEgb3BlbiByZXNwb25zZSBpdGVtLCB3aGVyZSAiTkEiIGRlbm90ZXMgIm90aGVyIiB3YXMgbm90IGNob3Nlbi4KCiogKipTVF80KiogcmVmZXJzIHRvIHdoZXRoZXIgYSBwYXJ0aWNpcGFudCdzICoqbW9zdCB1c2VkIGFwcGxpY2F0aW9uIHdhcyB0aGVpciB0ZXh0IC8gbWVzc2VuZ2VyKiogYXBwbGljYXRpb24gKGFjY29yZGluZyB0byBTVCkuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSBZZXMgCiAgICAtIDIgPSBObwoKKiAqKlNUXzUqKiByZWZlcnMgdG8gcGFydGljaXBhbnQncyB3ZWVrbHkgdG90YWwgKipzY3JlZW4gdGltZSBpbiBob3VycyoqIChhY2NvcmRpbmcgdG8gU1QpLiBUaGlzIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgogICAgLSAxID0gMC0xMAogICAgLSAyID0gMTEtMjAKICAgIC0gMyA9IDIxLTMwCiAgICAtIDQgPSAzMS00MAogICAgLSA1ID0gNDArCgoqICoqU1RfNioqIHJlZmVycyB0byBwYXJ0aWNpcGFudCdzICoqdG90YWwgIlBpY2stdXBzIiBwZXIgZGF5KiogKGFjY29yZGluZyB0byBTVCkuICJQaWNrLXVwcyIgcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgdGltZXMgc29tZW9uZSBwaWNrcyB1cCB0aGVpciBzbWFydHBob25lLCByZWdhcmxlc3Mgb2Ygd2hldGhlciB0aGUgc21hcnRwaG9uZSB3YXMgdXNlZC4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IDAtNTAKICAgIC0gMiA9IDUxLTEwMAogICAgLSAzID0gMTAxLTE1MAogICAgLSA0ID0gMTUxLTIwMAogICAgLSA1ID0gMjAwKwogICAgCiogKipTVF83KiogcmVmZXJzIHRvIHBhcnRpY2lwYW50J3MgKiphdmVyYWdlIG5vdGlmaWNhdGlvbnMgcGVyIGRheSoqIChhY2NvcmRpbmcgdG8gU1QpLiBUaGlzIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgogICAgLSAxID0gMC01MAogICAgLSAyID0gNTEtMTAwCiAgICAtIDMgPSAxMDEtMTUwCiAgICAtIDQgPSAxNTEtMjAwCiAgICAtIDUgPSAyMDArCiAgICAKIyMjIyMjIERpc3RyYWN0aW9uIFF1ZXN0aW9ucwoqIFRoZXNlIGV4cGxvcmVkIGhvdyBwYXJ0aWNpcGFudHMgcmVwb3J0IGZlZWxpbmcgb3IgYmVpbmcgZGlzdHJhY3RlZCBieSB0aGVpciBzbWFydHBob25lcyBkdXJpbmcgdmFyaW91cyBzZXR0aW5ncy4gCgoqICoqRGlzdHJfMSoqIHNob3dzIHRoZSByZXNwb25zZSB0byB0aGUgcXVlc3Rpb246ICJJIGZpbmQgbXkgcGhvbmUgY2FuIGRpc3RyYWN0IG1lIGZyb20gbXkgZGFpbHkgYWN0aXZpdGllcyAoZS5nLiwgd29yaywgc2Nob29sLCBzb2NpYWwgaW50ZXJhY3Rpb25zKS4iLiBUaGlzIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgogICAgLSA8dGQgY29sc3BhbiA9IDc+IDx0ZD58ICAgCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAogICAgICAgIDEgPSBTdHJvbmdseSBEaXNhZ3JlZSB8IDIgPSBEaXNhZ3JlZSAgfCAzID0gU29tZXdoYXQgRGlzYWdyZWUgfCA0ID0gTmV1dHJhbCAgfCA1ID0gU29tZXdoYXQgQWdyZWUgIHwgNiA9IEFncmVlIHwgNyA9IFN0cm9uZ2x5IEFncmVlCgoqICoqRGlzdHJfMioqIHNob3dzIHRoZSByZXNwb25zZSB0byB0aGUgcXVlc3Rpb246ICJJIGZpbmQgbXkgcGhvbmUgZGlzdHJhY3RpbmcgZHVyaW5nIHRoaXMgc3R1ZHkuIi4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gPHRkIGNvbHNwYW4gPSA3PiA8dGQ+fCAgIAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAxID0gU3Ryb25nbHkgRGlzYWdyZWUgfCAyID0gRGlzYWdyZWUgIHwgMyA9IFNvbWV3aGF0IERpc2FncmVlIHwgNCA9IE5ldXRyYWwgIHwgNSA9IFNvbWV3aGF0IEFncmVlICB8IDYgPSBBZ3JlZSB8IDcgPSBTdHJvbmdseSBBZ3JlZQoKKiAqKkRpc3RyXzMqKiBzaG93cyB0aGUgcmVzcG9uc2UgdG8gdGhlIHF1ZXN0aW9uOiAiSW4gZ2VuZXJhbCwgSSBmaW5kIHRoZSBmb2xsb3dpbmcgdGhlIG1vc3QgZGlzdHJhY3RpbmcgZWxlY3Ryb25pYyBkZXZpY2U6Ii4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAtIDEgPSBDb21wdXRlcgogIC0gMiA9IFBob25lCiAgLSAzID0gaVBhZCAvIFRhYmxldAogIC0gNCA9IFNtYXJ0d2F0Y2gKICAtIDUgPSBPdGhlcgoKKiAqKkRpc3RyXzQqKiBzaG93cyByZWZlcnMgRGlzdHJfMyBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKKiAqKkRpc3RyXzUqKiBzaG93cyB0aGUgcmVzcG9uc2UgdG8gdGhlIHF1ZXN0aW9uOiAiSSBmaW5kIHRoZSBmb2xsb3dpbmcgdGhlIG1vc3QgZGlzdHJhY3Rpbmcgd2hlbiBJIGFtIHN0dWR5aW5nL3dvcmtpbmc6Ii4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAtIDEgPSBDb21wdXRlcgogIC0gMiA9IFBob25lCiAgLSAzID0gaVBhZCAvIFRhYmxldAogIC0gNCA9IFNtYXJ0d2F0Y2gKICAtIDUgPSBPdGhlcgoKKiAqKkRpc3RyXzYqKiBzaG93cyByZWZlcnMgRGlzdHJfNSBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKKiAqKkRpc3RyXzcqKiBzaG93cyB0aGUgcmVzcG9uc2UgdG8gdGhlIHF1ZXN0aW9uOiAiSSBmaW5kIHRoZSBmb2xsb3dpbmcgdGhlIG1vc3QgZGlzdHJhY3Rpbmcgd2hlbiBJIGFtIGluIGEgc29jaWFsIGNvbnRleHQgKGUuZy4sIHdpdGggZnJpZW5kcyk6Ii4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAtIDEgPSBDb21wdXRlcgogIC0gMiA9IFBob25lCiAgLSAzID0gaVBhZCAvIFRhYmxldAogIC0gNCA9IFNtYXJ0d2F0Y2gKICAtIDUgPSBPdGhlcgoKKiAqKkRpc3RyXzgqKiBzaG93cyByZWZlcnMgRGlzdHJfNyBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKIyMjIyMjIEdlbmVyYWwgRXhwbG9yYXRvcnkgUXVlc3Rpb25zCiogKipFeHBfMSoqIHNob3dzIHRoZSByZXNwb25zZSB0byB0aGUgcXVlc3Rpb246ICJIb3cgbXVjaCBtb25leSB3b3VsZCBpdCB0YWtlIGZvciB5b3UgdG8gZ2l2ZSB1cCB5b3VyIHBob25lIGZvciBhIGZ1bGwgZGF5PyIuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSAkMC0yMAogICAgLSAyID0gJDIxLTQwCiAgICAtIDMgPSAkNDEtNjAKICAgIC0gNCA9ID4kNjAKICAgIAoqICoqRXhwXzIqKiBzaG93cyB0aGUgcmVzcG9uc2UgdG8gdGhlIHF1ZXN0aW9uOiAiSGF2ZSB5b3UgZXZlciB0aG91Z2h0IHlvdSBoZWFyZCB5b3VyIHBob25lIHJpbmcgb3IgdGhvdWdodCB5b3UgZmVsdCBpdCB2aWJyYXRlLCBvbmx5IHRvIGZpbmQgb3V0IHlvdSB3ZXJlIHdyb25nPyIuIFRoaXMgd2FzIGNvZGVkIGFzIGZvbGxvd3M6CiAgICAtIDEgPSBZZXMgCiAgICAtIDIgPSBObwogICAgCiogKipFeHBfMyoqIHNob3dzIHRoZSByZXNwb25zZSB0byB0aGUgcXVlc3Rpb246ICJXaG8gZG8geW91IG1vc3RseSBjb21tdW5pY2F0ZSB3aXRoIG9uIHlvdXIgcGhvbmU/Ii4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IEZhbWlseQogICAgLSAyID0gRnJpZW5kcwogICAgLSAzID0gV29yawogICAgLSA0ID0gT3RoZXIKCiogKipFeHBfNCoqIHNob3dzIHJlZmVycyB0byBFeHBfMyBpZiAnb3RoZXInIHdhcyBzZWxlY3RlZC4gVGhpcyB3YXMgYSBvcGVuIHJlc3BvbnNlIGl0ZW0sIHdoZXJlICJOQSIgZGVub3RlcyAib3RoZXIiIHdhcyBub3QgY2hvc2VuLgoKKiAqKkV4cF81Kio6IHNob3dzIHRoZSByZXNwb25zZSB0byB0aGUgcXVlc3Rpb246ICJXaGF0IGRvIHlvdSB1c2UgeW91ciBwaG9uZSBmb3IgdGhlIG1vc3Q/Ii4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gMSA9IENhbGxpbmcgLyBUZXh0aW5nCiAgICAtIDIgPSBTb2NpYWwgTWVkaWEgKGUuZy4sIEZhY2Vib29rLCBJbnN0YWdyYW0sIFR3aXR0ZXIsIFNuYXBjaGF0KQogICAgLSAzID0gRW1haWwKICAgIC0gNCA9IE90aGVyCiAgICAtIDUgPSBHYW1lcyAoZS5nLiwgY2FuZHkgY3J1c2gsIGNsYXNoIG9mIGNsYW5zKQoKKiAqKkV4cF82Kiogc2hvd3MgcmVmZXJzIHRvIEV4cF81IGlmICdvdGhlcicgd2FzIHNlbGVjdGVkLiBUaGlzIHdhcyBhIG9wZW4gcmVzcG9uc2UgaXRlbSwgd2hlcmUgIk5BIiBkZW5vdGVzICJvdGhlciIgd2FzIG5vdCBjaG9zZW4uCgojIyMjICgyKSBUaGUgTm9tb3Bob2JpYSBRdWVzdGlvbm5haXJlIChOTVAtUTsgWWlsZGlyaW0gJiBDb3JyZWlhLCAyMDE1KQoqICoqTk1QX1FfMSAtIE5NUF9RXzIwKiogc2hvd3MgdGhlIHJlc3BvbnNlcyB0byB0aGUgMjAgaXRlbXMgaW4gdGhlIE5NUC1RLiBQYXJ0aWNpcGFudHMgd2VyZSBhc2tlZCB0byBpbmRpY2F0ZSBob3cgbXVjaCB0aGV5IGFncmVlIG9yIGRpc2FncmVlIHRvIHRoZSBzdGF0ZW1lbnRzIG9uIGEgNy1wb2ludCBsaWtlcnQgc2NhbGUgKHdoZXJlLCAiMSIgPSBTdHJvbmdseSBEaXNhZ3JlZSwgYW5kIDcgPSAiU3Ryb25nbHkgQWdyZWUiKS4gCgoqIFRoZSBzY29yZSB3YXMgdGhlIHN1bSBvZiBhbGwgcmVzcG9uc2VzIChyYW5nZSBpcyBmcm9tIDIw4oCTMTQwKSwgd2l0aCBoaWdoZXIgc2NvcmVzIGNvcnJlc3BvbmRpbmcgdG8gZ3JlYXRlciBub21vcGhvYmlhIHNldmVyaXR5LiBUaGlzIHJhbmdlIHdhcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOiAyMCA9IGFic2VuY2Ugb2Ygbm9tb3Bob2JpYSwgMjHigJM1OSA9IG1pbGQgbGV2ZWwgb2Ygbm9tb3Bob2JpYSwgNjDigJM5OSA9IG1vZGVyYXRlIGxldmVsIG9mIG5vbW9waG9iaWEsIOKJpSAxMDAgPSBzZXZlcmUgbm9tb3Bob2JpYS4gVGhpcyB3YXMgY29kZWQgYXMgZm9sbG93czoKICAgIC0gPHRkIGNvbHNwYW4gPSA3PiBGb3IgUTEyIOKAkyBRMjQsIGNvZGluZyB3YXMgYXMgZm9sbG93czogPHRkPnwgICAKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgICAgICAgMSA9IFN0cm9uZ2x5IERpc2FncmVlIHwgMiA9IERpc2FncmVlICB8IDMgPSBTb21ld2hhdCBEaXNhZ3JlZSB8IDQgPSBOZXV0cmFsICB8IDUgPSBTb21ld2hhdCBBZ3JlZSAgfCA2ID0gQWdyZWUgfCA3ID0gU3Ryb25nbHkgQWdyZWUKCiogVGhlIGl0ZW1zIHdlcmUgYXMgZm9sbG93czoKICAgIC0gTk1QX1FfMTogSSB3b3VsZCBmZWVsIHVuY29tZm9ydGFibGUgd2l0aG91dCBjb25zdGFudCBhY2Nlc3MgdG8gaW5mb3JtYXRpb24gdGhyb3VnaCBteSBzbWFydHBob25lLgogICAgLSBOTVBfUV8yOiBJIHdvdWxkIGJlIGFubm95ZWQgaWYgSSBjb3VsZCBub3QgbG9vayBpbmZvcm1hdGlvbiB1cCBvbiBteSBzbWFydHBob25lIHdoZW4gSSB3YW50ZWQgdG8gZG8gc28uIAogICAgLSBOTVBfUV8zOiBCZWluZyB1bmFibGUgdG8gZ2V0IHRoZSBuZXdzKGUuZy4sIGhhcHBlbmluZ3MsIHdlYXRoZXIsIGV0Yy4pIG9uIG15IHNtYXJ0cGhvbmUgd291bGQgbWFrZSBtZSBuZXJ2b3VzLgogICAgLSBOTVBfUV80OiBJIHdvdWxkIGJlIGFubm95ZWQgaWYgSSBjb3VsZCBub3QgdXNlIG15IHNtYXJ0cGhvbmUgYW5kL29yIGl0cyBjYXBhYmlsaXRpZXMgd2hlbiBJIHdhbnRlZCB0byBkbyBzby4KICAgIC0gTk1QX1FfNTogUnVubmluZyBvdXQgb2YgYmF0dGVyeSBpbiBteSBzbWFydHBob25lIHdvdWxkIHNjYXJlIG1lLgogICAgLSBOTVBfUV82OiBJZiBJIHdlcmUgdG8gcnVuIG91dCBvZiBjcmVkaXRzIG9yIGhpdCBteSBtb250aGx5IGRhdGEgbGltaXQsIEkgd291bGQgcGFuaWMuCiAgICAtIE5NUF9RXzc6IElmIEkgZGlkIG5vdCBoYXZlIGEgZGF0YSBzaWduYWwgb3IgY291bGQgbm90IGNvbm5lY3QgdG8gV2ktRmksIHRoZW4gSSB3b3VsZCBjb25zdGFudGx5IGNoZWNrIHRvIHNlZSBpZiBJIGhhZCBhIHNpZ25hbCBvciBjb3VsZCBmaW5kIGEgV2ktRmkgTmV0d29yay4KICAgIC0gTk1QX1FfODogSWYgSSBjb3VsZCBub3QgdXNlIG15IHNtYXJ0cGhvbmUsIEkgd291bGQgYmUgYWZyYWlkIG9mIGdldHRpbmcgc3RyYW5kZWQgc29tZXdoZXJlLgogICAgLSBOTVBfUV85OiBJZiBJIGNvdWxkIG5vdCBjaGVjayBteSBzbWFydHBob25lIGZvciBhIHdoaWxlLCBJIHdvdWxkIGZlZWwgYSBkZXNpcmUgdG8gY2hlY2sgaXQuCiAgICAKICAgIElmIEkgZGlkIG5vdCBoYXZlIG15IHNtYXJ0cGhvbmUgd2l0aCBtZSwgCiAgICAtIE5NUF9RXzEwOiBJIHdvdWxkIGZlZWwgYW54aW91cyBiZWNhdXNlIEkgY291bGQgbm90IGluc3RhbnRseSBjb21tdW5pY2F0ZSB3aXRoIG15IGZhbWlseSBhbmQvb3IgZnJpZW5kcy4KICAgIC0gTk1QX1FfMTE6IEkgd291bGQgYmUgd29ycmllZCBiZWNhdXNlIG15IGZhbWlseSBhbmQvb3IgZnJpZW5kcyBjb3VsZCBub3QgcmVhY2ggbWUuCiAgICAtIE5NUF9RXzEyOiBJIHdvdWxkIGZlZWwgbmVydm91cyBiZWNhdXNlIEkgd291bGQgbm90IGJlIGFibGUgdG8gcmVjZWl2ZSB0ZXh0IG1lc3NhZ2VzIGFuZCBjYWxscy4KICAgIC0gTk1QX1FfMTM6IEkgd291bGQgYmUgYW54aW91cyBiZWNhdXNlIEkgY291bGQgbm90IGtlZXAgaW4gdG91Y2ggd2l0aCBteSBmYW1pbHkgYW5kL29yIGZyaWVuZHMuCiAgICAtIE5NUF9RXzE0OiBJIHdvdWxkIGJlIG5lcnZvdXMgYmVjYXVzZSBJIGNvdWxkIG5vdCBrbm93IGlmIHNvbWVvbmUgaGFkIHRyaWVkIHRvIGdldCBhIGhvbGQgb2YgbWUuCiAgICAtIE5NUF9RXzE1OiBJIHdvdWxkIGZlZWwgYW54aW91cyBiZWNhdXNlIG15IGNvbnN0YW50IGNvbm5lY3Rpb24gdG8gbXkgZmFtaWx5IGFuZCBmcmllbmRzIHdvdWxkIGJlIGJyb2tlbi4KICAgIC0gTk1QX1FfMTY6IEkgd291bGQgYmUgbmVydm91cyBiZWNhdXNlIEkgd291bGQgYmUgZGlzY29ubmVjdGVkIGZyb20gbXkgb25saW5lIGlkZW50aXR5LgogICAgLSBOTVBfUV8xNzogSSB3b3VsZCBiZSB1bmNvbWZvcnRhYmxlIGJlY2F1c2UgSSBjb3VsZCBub3Qgc3RheSB1cC10by1kYXRlIHdpdGggc29jaWFsIG1lZGlhIGFuZCBvbmxpbmUgbmV0d29ya3MuCiAgICAtIE5NUF9RXzE4OiBJIHdvdWxkIGZlZWwgYXdrd2FyZCBiZWNhdXNlIEkgY291bGQgbm90IGNoZWNrIG15IG5vdGlmaWNhdGlvbnMgZm9yIHVwZGF0ZXMgZnJvbSBteWNvbm5lY3Rpb25zIGFuZCBvbmxpbmUgbmV0d29ya3MuCiAgICAtIE5NUF9RXzE5OiBJIHdvdWxkIGZlZWwgYW54aW91cyBiZWNhdXNlIEkgY291bGQgbm90IGNoZWNrIG15IGVtYWlsIG1lc3NhZ2VzLgogICAgLSBOTVBfUV8yMDogSSB3b3VsZCBmZWVsIHdlaXJkIGJlY2F1c2UgSSB3b3VsZCBub3Qga25vdyB3aGF0IHRvIGRvLgoKCiMjIyMgKDMpIFRoZSBNb2JpbGUgUGhvbmUgSW52b2x2ZW1lbnQgUXVlc3Rpb25uYWlyZSAoTVBJUTsgV2Fsc2ggZXQgYWwuLCAyMDEwKQoqIFRoZSBNUElRIGNvbnNpc3RzIG9mIDE0IGl0ZW1zIGFuZCBoYXMgKip0aHJlZSBzdWJzY2FsZXMqKiwgd2hpY2ggbWVhc3VyZTogKDEpIFRoZSBNUElRLCAoMikgVGhlIFNlbGYtSWRlbnRpdHksIGFuZCAoMykgVmFsaWRhdGlvbiBmcm9tIE90aGVycy4gRm9yIGVhY2ggc3Vic2NhbGUsIHBhcnRpY2lwYW50cyB3ZXJlIGFza2VkIHRvIGluZGljYXRlIGhvdyBtdWNoIHRoZXkgYWdyZWUgb3IgZGlzYWdyZWUgdG8gdGhlIHN0YXRlbWVudHMgb24gYSA3LXBvaW50IGxpa2VydCBzY2FsZSAod2hlcmUsICIxIiA9IFN0cm9uZ2x5IERpc2FncmVlLCBhbmQgNyA9ICJTdHJvbmdseSBBZ3JlZSIpLiBUaGUgc2NvcmUgd2FzIHRoZSBhdmVyYWdlIGZvciBlYWNoIHN1YnNjYWxlLiBFYWNoIHN1YnNjYWxlIHdhcyBjb2RlZCBhcyBmb2xsb3dzOgogICAgLSA8dGQgY29sc3BhbiA9IDc+IEZvciBRMTIg4oCTIFEyNCwgY29kaW5nIHdhcyBhcyBmb2xsb3dzOiA8dGQ+fCAgIAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAxID0gU3Ryb25nbHkgRGlzYWdyZWUgfCAyID0gRGlzYWdyZWUgIHwgMyA9IFNvbWV3aGF0IERpc2FncmVlIHwgNCA9IE5ldXRyYWwgIHwgNSA9IFNvbWV3aGF0IEFncmVlICB8IDYgPSBBZ3JlZSB8IDcgPSBTdHJvbmdseSBBZ3JlZQoKKiAqKk1QSVFfMSAtIE1QSVFfOCoqIHNob3dzIHRoZSByZXNwb25zZXMgdG8gdGhlIDggaXRlbXMgaW4gdGhlICoqTVBJUSoqIHN1YnNjYWxlLiBUaGUgaXRlbXMgd2VyZSBhcyBmb2xsb3dzOgogICAgLSBNUElRXzE6IEkgb2Z0ZW4gdGhpbmsgYWJvdXQgbXkgbW9iaWxlIHBob25lIHdoZW4gSSBhbSBub3QgdXNpbmcgaXQuICpbY29nbml0aXZlIHNhbGllbmNlXSoKICAgIC0gTVBJUV8yOiBJIG9mdGVuIHVzZSBteSBtb2JpbGUgcGhvbmUgZm9yIG5vIHBhcnRpY3VsYXIgcmVhc29uLiAqW2JlaGF2aW91cmFsIHNhbGllbmNlXSoKICAgIC0gTVBJUV8zOiBBcmd1bWVudHMgaGF2ZSBhcmlzZW4gd2l0aCBvdGhlcnMgYmVjYXVzZSBvZiBteSBtb2JpbGUgcGhvbmUgdXNlLiAqW2ludGVycGVyc29uYWwgY29uZmxpY3RdKgogICAgLSBNUElRXzQ6IEkgaW50ZXJydXB0IHdoYXRldmVyIGVsc2UgSSBhbSBkb2luZyB3aGVuIEkgYW0gY29udGFjdGVkIG9uIG15IG1vYmlsZSBwaG9uZS4gKltjb25mbGljdCB3aXRoIG90aGVyIGFjdGl2aXRpZXNdKgogICAgLSBNUElRXzU6IEkgZmVlbCBjb25uZWN0ZWQgdG8gb3RoZXJzIHdoZW4gSSB1c2UgbXkgbW9iaWxlIHBob25lLiAqW2V1cGhvcmlhXSoKICAgIC0gTVBJUV82OiBJIGxvc2UgdHJhY2sgb2YgaG93IG11Y2ggSSBhbSB1c2luZyBteSBtb2JpbGUgcGhvbmUuICpbbG9zcyBvZiBjb250cm9sXSoKICAgIC0gTVBJUV83OiBUaGUgdGhvdWdodCBvZiBiZWluZyB3aXRob3V0IG15IG1vYmlsZSBwaG9uZSBtYWtlcyBtZSBmZWVsIGRpc3RyZXNzZWQuICpbd2l0aGRyYXdhbF0qCiAgICAtIE1QSVFfODogSSBoYXZlIGJlZW4gdW5hYmxlIHRvIHJlZHVjZSBteSBtb2JpbGUgcGhvbmUgdXNlLiAqW3JlbGFwc2UgJiByZWluc3RhdGVtZW50XSoKICAgIAoqICoqTVBJUV9TSV8xIC0gTVBJUV9TSV8zKiogc2hvd3MgdGhlIHJlc3BvbnNlcyB0byB0aGUgMyBpdGVtcyBpbiB0aGUgKipTZWxmLUlkZW50aXR5Kiogc3Vic2NhbGUuIFRoZSBpdGVtcyB3ZXJlIGFzIGZvbGxvd3M6CiAgICAtIE1QSVFfc2VsZl9JRF8xOiBVc2luZyBhIG1vYmlsZSBwaG9uZSBpcyB2ZXJ5IGltcG9ydGFudCB0byBtZS4KICAgIC0gTVBJUV9zZWxmX0lEXzI6IEkgZmVlbCBhcyB0aG91Z2ggYSBwYXJ0IG9mIG1lIGlzIG1pc3Npbmcgd2hlbiBJIGFtIHdpdGhvdXQgbXkgbW9iaWxlIHBob25lLgogICAgLSBNUElRX3NlbGZfSURfMzogSSBjYW5ub3QgaW1hZ2luZSBsaWZlIHdpdGhvdXQgbXkgbW9iaWxlIHBob25lLgoKKiAqKk1QSVFfVkZPXzEgLSBNUElRX1ZGT18zKiogc2hvd3MgdGhlIHJlc3BvbnNlcyB0byB0aGUgOCBpdGVtcyBpbiB0aGUgKipWYWxpZGF0aW9uIGZyb20gT3RoZXJzKiogc3Vic2NhbGUuIFRoZSBpdGVtcyB3ZXJlIGFzIGZvbGxvd3M6CiAgICAtIE1QSVFfVmFsaWRhdGlvbl8xOiBJIGZlZWwgdmFsdWVkIHdoZW4gSSByZWNlaXZlIGxvdHMgb2YgbW9iaWxlIGNhbGxzIG9yIG1lc3NhZ2VzLgogICAgLSBNUElRX1ZhbGlkYXRpb25fMl9yZXY6IFJlY2VpdmluZyBtb2JpbGUgcGhvbmUgY2FsbHMgb3IgbWVzc2FnZXMgZG9lcyBub3QgbWFrZSBtZSBmZWVsIHNwZWNpYWwuCiAgICAgICAgLSBOb3RlLCBoZXJlIE1QSVFfVmFsaWRhdGlvbl8yX3JldiBkZW5vdGVzIHRoYXQgdGhpcyBpdGVtIHNob3VsZCBiZSByZXZlcnNlIGNvZGVkIGZvciBmaW5hbCBhbmFseXNpcy4KICAgIC0gTVBJUV9WYWxpZGF0aW9uXzM6IFJlY2VpdmluZyBhIG1vYmlsZSBwaG9uZSBjYWxsIG1ha2VzIG1lIGZlZWwgbG92ZWQuCgojIyMjICg0KSBUaGUgU21hcnRwaG9uZSBBdHRhY2htZW50IGFuZCBEZXBlbmRlbmN5IFF1ZXN0aW9ubmFpcmUgKFNBRDsgV2FyZCBldCBhbC4sIDIwMTcpCiogKipTQURfMSAtIFNBRF8xMyoqIHNob3dzIHRoZSByZXNwb25zZXMgdG8gdGhlIDEzIGl0ZW1zIGluIHRoZSBTQUQuIFBhcnRpY2lwYW50cyB3ZXJlIGFza2VkIHRvIGluZGljYXRlIGhvdyBtdWNoIHRoZXkgYWdyZWUgb3IgZGlzYWdyZWUgdG8gdGhlIHN0YXRlbWVudHMgb24gYSA3LXBvaW50IGxpa2VydCBzY2FsZSAod2hlcmUsICIxIiA9IFN0cm9uZ2x5IERpc2FncmVlLCBhbmQgNyA9ICJTdHJvbmdseSBBZ3JlZSIpLiAKCiogVGhlIHNjb3JlIHdhcyB0aGUgc3VtIG9mIGFsbCByZXNwb25zZXMgKHJhbmdlIGlzIGZyb20gMTPigJM5MSksIHdpdGggaGlnaGVyIHNjb3JlcyBjb3JyZXNwb25kaW5nIHRvIGdyZWF0ZXIgc21hcnRwaG9uZSBhdHRhY2htZW50IGFuZCBkZXBlbmRlbmN5LiBUaGlzIHJhbmdlIHdhcyBpbnRlcnByZXRlZCAoZm9yIHRoZSBwaXJwb3NlcyBvZiB0aGlzIHN0dWR5KSBhcyBmb2xsb3dzOiAxMyA9IGFic2VuY2Ugb2YgYXR0YWNobWVudCAmIGRlcGVuZGVuY3ksIDE04oCTMzkgPSBtaWxkIGxldmVsIG9mIGF0dGFjaG1lbnQgJiBkZXBlbmRlbmN5LCA0MOKAkzY1ID0gbW9kZXJhdGUgbGV2ZWwgb2YgYXR0YWNobWVudCAmIGRlcGVuZGVuY3ksIOKJpSA2NiA9IHNldmVyZSBhdHRhY2htZW50ICYgZGVwZW5kZW5jeS4KICAgIC0gPHRkIGNvbHNwYW4gPSA3PiBGb3IgUTEyIOKAkyBRMjQsIGNvZGluZyB3YXMgYXMgZm9sbG93czogPHRkPnwgICAKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgICAgICAgMSA9IFN0cm9uZ2x5IERpc2FncmVlIHwgMiA9IERpc2FncmVlICB8IDMgPSBTb21ld2hhdCBEaXNhZ3JlZSB8IDQgPSBOZXV0cmFsICB8IDUgPSBTb21ld2hhdCBBZ3JlZSAgfCA2ID0gQWdyZWUgfCA3ID0gU3Ryb25nbHkgQWdyZWUKICAgICAgICAKKiBUaGUgaXRlbXMgd2VyZSBhcyBmb2xsb3dzOgogICAgLSBRMTI6IEkgd291bGQgaGF2ZSB0cm91YmxlIGdldHRpbmcgdGhyb3VnaCBhIG5vcm1hbCBkYXkgd2l0aG91dCBteSBzbWFydHBob25lLgogICAgLSBRMTM6IEl0IHdvdWxkIGJlIHBhaW5mdWwgZm9yIG1lIHRvIGdpdmUgdXAgbXkgc21hcnRwaG9uZSBmb3IgYSBkYXkuCiAgICAtIFExNDogSSBmZWVsIGxpa2UgSSBjb3VsZCBub3QgbGl2ZSB3aXRob3V0IG15IHNtYXJ0cGhvbmUuCiAgICAtIFExNTogSWYgSSBmb3Jnb3QgdG8gYnJpbmcgbXkgc21hcnRwaG9uZSB3aXRoIG1lLCBJIHdvdWxkIGZlZWwgYW54aW91cy4KICAgIC0gUTE2OiBJdCBkcml2ZXMgbWUgY3Jhenkgd2hlbiBteSBzbWFydHBob25lIHJ1bnMgb3V0IG9mIGJhdHRlcnkuCiAgICAtIFExNzogSSBhbSB1cHNldCBhbmQgYW5ub3llZCB3aGVuIEkgZmluZCBJIGRvIG5vdCBoYXZlIHJlY2VwdGlvbiBvbiBteSBzbWFydHBob25lLgogICAgLSBRMTg6IEkgZmVlbCBpbXBhdGllbnQgd2hlbiB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBzcGVlZCBvbiBteSBzbWFydHBob25lIGlzIHNsb3cuCiAgICAtIFExOTogSSBmZWVsIGxvbmVseSB3aGVuIG15IHNtYXJ0cGhvbmUgZG9lcyBub3QgcmluZyBvciB2aWJyYXRlIGZvciBzZXZlcmFsIGhvdXJzLgogICAgLSBRMjA6IFVzaW5nIG15IHNtYXJ0cGhvbmUgcmVsaWV2ZXMgbWUgb2YgbXkgc3RyZXNzLgogICAgLSBRMjE6IEkgZmVlbCBleGNpdGVkIHdoZW4gSSBoYXZlIGEgbmV3IG1lc3NhZ2Ugb3Igbm90aWZpY2F0aW9uLgogICAgLSBRMjI6IFVzaW5nIG15IHNtYXJ0cGhvbmUgbWFrZXMgbWUgZmVlbCBoYXBweS4KICAgIC0gUTIzOiBJIGZpbmQgaXQgdG91Z2ggdG8gZm9jdXMgd2hlbmV2ZXIgbXkgc21hcnRwaG9uZSBpcyBuZWFyYnkuCiAgICAtIFEyNDogSSBiZWNvbWUgbGVzcyBhdHRlbnRpdmUgdG8gbXkgc3Vycm91bmRpbmdzIHdoZW4gSeKAmW0gdXNpbmcgbXkgc21hcnRwaG9uZS4KCgoKIyMjIDIuIE1haW4gU3R1ZHkgRGF0YSAKIyMjIyBJbXBvcnQgZGF0YQpJbXBvcnQgcmF3IGRhdGEgZm9yIG1haW4gc3R1ZHkuLi4gCgpgYGB7ciBpbXBvcnRfbWFpbl9zdHVkeV9maWxlc30KI3RoaXMgd2lsbCBpbXBvcnQgdGhlIHJhdyBleGNlbCBkYXRhIGZpbGUgZm9yIHN0dWR5IDIKICAjdGhpcyBmaWxlIGhhcyBiZWVuIGFub255bWl6ZWQsIHNvIGFueSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gaGFzIGJlZW4gcmVtb3ZlZAptYWluX3N1cnZleV9yYXcgPC0gcmVhZC5jc3YoIk1haW5fc3VydmV5X2RhdGEoanVuZTcpLmNzdiIsIGhlYWRlciA9IFRSVUUpCgpDQlNfcmF3IDwtIHJlYWQuY3N2KCJDQlNfZGF0YShqdW5lNykuY3N2IiwgaGVhZGVyID0gVFJVRSkKCiN0aGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbmRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwYXJ0aWNpcGFudCBpbiBzdHVkeSAyCnRyYWNraW5nX3JhdyA8LSByZWFkLmNzdigiVHJhY2tpbmdfZGF0YShqdW5lNykuY3N2IiwgaGVhZGVyID0gVFJVRSkKYGBgCgojIyMjIENsZWFuIGRhdGEKQWZ0ZXIgaW1wb3J0aW5nIHRoZSByYXcgZGF0YSwgdGhlIGZpbGUgaXMgY2xlYW5lZCBieSByZW1vdmluZyBwYXJ0aWNpcGFudHMgYmFzZWQgb24gc2V2ZXJhbCBjcml0ZXJpYToKCi0gKipUZXN0aW5nIERhdGEqKjogZXhwZXJpbWVudGVyIGRhdGEgKGkuZS4sIHRlc3RpbmcgcHJpb3IgdG8gZGF0YSBjb2xsZWN0aW9uKSwgYW55IGlycmVsZXZhbnQgcm93cwogICAgLSBgciBucm93KHRyYWNraW5nX3JhdyAlPiUgZmlsdGVyKHR5cGUgPT0gIk9USEVSIikpYCByZW1vdmVkIGZvciBiZWluZyB0ZXN0aW5nIGRhdGEKCi0gKipJbmNvbXBsZXRlIERhdGEqKjogcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRoZSBzdHVkeQogICAgLSBgciBucm93KG1haW5fc3VydmV5X3JhdyAlPiUgZmlsdGVyKERpc3RyaWJ1dGlvbkNoYW5uZWwgIT0gInRlc3QiKSAlPiUgZmlsdGVyKEZpbmlzaGVkID09IDApKWAgcmVtb3ZlZCBmcm9tIHRoZSBzdXJ2ZXkgZGF0YQogICAgLSBgciBucm93KHRyYWNraW5nX3JhdyAlPiUgZmlsdGVyKHZhbGlkICE9IDEpKWAgcmVtb3ZlZCBmcm9tIHRoZSB0cmFja2luZyBkYXRhIGZvciBlaXRoZXIgb25seSBjb21wbGV0aW5nIHBhcnQgb2YgdGhlIHN0dWR5IChgciBucm93KHRyYWNraW5nX3JhdyAlPiUgZmlsdGVyKHZhbGlkID09IDIpKWApLCB0aGUgQ0JTIGxpbmsgZGlkIG5vdCB3b3JrIChgciBucm93KHRyYWNraW5nX3JhdyAlPiUgZmlsdGVyKHZhbGlkID09IDMpKWApLCBvciBiZWluZyBleGNsdWRlZCBkdWUgdG8gZXhwZXJpbWVudGFsIGVycm9yIChlLmcuLCBleHRlcm5hbCBkaXN0cmFjdG9yIGxpa2UgY29uc3RydWN0aW9uLCBpbmFjY3VyYXRlIGNvbmRpdGlvbiBhc3NpZ25tZW50OyBgciBucm93KHRyYWNraW5nX3JhdyAlPiUgZmlsdGVyKHZhbGlkID09IDApKWApCiAgICAKLSAqKlVubmVjZXNzYXJ5IFZhcmlhYmxlcyoqOiBjb2x1bW5zIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlIGFuYWx5c2VzIChlLmcuLCBkaXN0cmlidXRpb24gdHlwZSwgZGlzdHJpYnV0aW9uIGxhbmd1YWdlKSAtLSBub25lIHJlbW92ZWQgKG5vdCBuZWVkZWQpCgpgYGB7ciBjbGVhbl9tYWluX3N1cnZleX0KIyBjbGVhbiB0aGUgZGF0YQogICMgc3VydmV5IGRhdGEKbWFpbl9zdXJfZGF0YV90ZW1wIDwtIAogICMgc3RhcnQgd2l0aCByZW1vdmluZyBleHBlcmltZW50ZXIgYW5kIGlycmVsZXZhbnQgcm93cyBmcm9tIHRoZSBkYXRhCiAgICAjIHRoZXJlIGlzIG5vIG5lZWQgdG8gY291bnQgdGhlIHBzIHJlbW92ZWQgYXQgdGhpcyBzdGFnZSAKICBtYWluX3N1cnZleV9yYXcgJT4lIAogICMgcmVtb3ZlIHJvdyAxICYgMiAtLSBub3QgZGF0YQogIHNsaWNlKDM6bnJvdyhtYWluX3N1cnZleV9yYXcpKSAlPiUgCiAgIyByZW1vdmUgdGVzdGluZyBkYXRhCiAgZmlsdGVyKERpc3RyaWJ1dGlvbkNoYW5uZWwgIT0gInRlc3QiKSAlPiUgCgogICMgbmV4dCwgcmVtb3ZlIHBzIHcvIGluY29tcGxldGUgZGF0YSAtLSBpbmNsdWRlIG9ubHkgdGhvc2Ugd2hvIGhhdmUgZmluaXNoZWQgKGkuZS4sICIxIikKICBmaWx0ZXIoRmluaXNoZWQgPT0gMSkgJT4lIAogIAogICMgcmVtb3ZlIHVubmVjZXNzYXJ5IGNvbHVtbnMKICAgICMgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgb3RoZXJzIHNpbmNlIGNvbHVtbnMgdXNlZCB0byBmaWx0ZXIKICBzZWxlY3QoLWMoU3RhdHVzOklQQWRkcmVzcywgUmVzcG9uc2VJZDpFeHRlcm5hbFJlZmVyZW5jZSwgRGlzdHJpYnV0aW9uQ2hhbm5lbDpVc2VyTGFuZ3VhZ2UsIFNDMCkpCmBgYAoKYGBge3IgY2xlYW5fdHJhY2tpbmd9CiMgY2xlYW4gdGhlIGRhdGEKICAjIHN1cnZleSBkYXRhCnRyYWNraW5nX2RhdGFfdGVtcCA8LSAKICAjIHN0YXJ0IHdpdGggcmVtb3ZpbmcgZXhwZXJpbWVudGVyIGFuZCBpcnJlbGV2YW50IHJvd3MgZnJvbSB0aGUgZGF0YQogICAgIyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvdW50IHRoZSBwcyByZW1vdmVkIGF0IHRoaXMgc3RhZ2UgCiAgdHJhY2tpbmdfcmF3ICU+JSAKICAjIHJlbW92ZSB0ZXN0aW5nIGRhdGEKICBmaWx0ZXIodHlwZSAhPSAiT1RIRVIiKSAlPiUgCgogICMgbmV4dCwgcmVtb3ZlIHBzIHcvIGluY29tcGxldGUgZGF0YSAtLSBpbmNsdWRlIG9ubHkgdGhvc2Ugd2hvIGhhdmUgdmFsaWQgYXMgIjEiCiAgZmlsdGVyKHZhbGlkID09IDEpICU+JSAKICAKICAjIG5hbWUgY29uZGl0aW9uIGEgZmFjdG9yCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sIGxldmVscyA9IGMoMTozKSwgbGFiZWxzID0gYygiZGVzayIsICJwb2NrZXQvYmFnIiwgIm91dHNpZGUiKSkpCmBgYAoKQWRkaXRpb25hbGx5LCB0aGUgY29sdW1ucyB3ZXJlIHJlbmFtZWQgZm9yIGVhc2llciByZWZlcmVuY2UsICBhbnkgdW5jbGVhciBvciBpbmFwcHJvcHJpYXRlIHJlc3BvbnNlcyAoZS5nLiwgbm9uLW51bWVyaWMgcmVzcG9uc2UgZm9yIGl0ZW1zIHJlcXVpcmluZyBhIG51bWVyaWMgcmVzcG9uc2UpIHdlcmUgcmVtb3ZlZCwgYW5kIGFsbCB2YXJpYWJsZXMgd2VyZSBmb3JtYXR0ZWQgYXMgbnVtZXJpYyBvciBmYWN0b3IgYXMgYXBwcm9wcmlhdGUuCgpgYGB7ciByZW5hbWVfY29sc19tYWluX3N1cl9kYXRhLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRX0KIyByZW5hbWUgY29sdW1ucyBpbiBtYWluIHN1cnZleSBkYXRhCm1haW5fc3VyX2RhdGEgPC0gCiAgIyBjaGFuZ2UgZGF0YSBmaWxlIHR5cGUgdG8gdGliYmxlIAogIGFzLnRpYmJsZShtYWluX3N1cl9kYXRhX3RlbXApICU+JSAKIyByZW5hbWUgY29sdW1ucy4uLgogIGRwbHlyOjpyZW5hbWUoZHVyYXRpb25fc2VjID0gRHVyYXRpb24uLmluLnNlY29uZHMuLCBkYXRlX3N1ciA9IFE1OSwgcGFydGljaXBhbnQgPSBRNTYsIHR5cGUgPSBRNTgsIENCU19rbm93ID0gUTYwLCBDQlNfZG9uZV90YXNrcyA9IFE2MSwgYWdlID0gUTEuMywgZ2VuZGVyID0gUTEuNCwgZ2VuZGVyTyA9IFExLjUsIGxhbmcgPSBRMS42LCBsYW5nTyA9IFExLjcsIHByb2YgPSBRMS44LCAKICAgICAgICAgICAgICAgIHByb2dyYW0gPSBRMi4xLCBwcm9ncmFtTyA9IFEyLjIsIHllYXIgPSBRMi4zLCBhZ2VfZmlyc3RfcGhvbmUgPSBRMy4xLCBhcHBfbW9zdF91c2VkID0gUTMuMiwgYXBwX21vc3RfdXNlZE8gPSBRMy4zLCBhcHBfbW9zdF91c2VkX3RleHQgPSBRMy40LCBpcGhvbmUgPSBRNC4xLCBTVF9hcHBfbW9zdF91c2VkID0gUTQuMiwgU1RfYXBwX21vc3RfdXNlZE8gPSBRNC4zLCBTVF9hcHBfdGV4dF9tZXNzID0gUTQuNCwgU1Rfd2Vla2x5X3RvdF9ob3VycyA9IFE0LjUsIFNUX2RhaWx5X3BpY2t1cHMgPSBRNC42LCBTVF9kYWlseV9ub3QgPSBRNC43LCBwaG9uZV92YWx1ZSA9IFE1LjEsIHBoYW50b20gPSBRNS4yLCBkaXN0X2RhaWx5ID0gUTUuM18xLCBkaXN0X3N0dWR5ID0gUTUuM18yLCBkaXN0X2RldmljZSA9IFE1LjQsIGRpc3RfZGV2aWNlTyA9IFE1LjUsIGRpc3RfZGV2aWNlX3N0dWR5d29yayA9IFE1LjYsIGRpc3RfZGV2aWNlX3N0dWR5d29ya08gPSBRNS43LCBkaXN0X2RldmljZV9zb2NpYWwgPSBRNS44LCBkaXN0X2RldmljZV9zb2NpYWxPID0gUTUuOSwgcG93X25vdF91c2luZyA9IFE2LjFfMSwgcG93X25vdGlmaWNhdGlvbnNfb24gPSBRNi4xXzIsIHBvd192aWJyYXRlID0gUTYuMV8zLCBwb3dfc3R1ZHkgPSBRNi4xXzQsIHBvd19leGFtID0gUTYuMV81LCBwb3dfbGVjID0gUTYuMV82LCBwb3dfc2xlZXAgPSBRNi4xXzcsIGxvY190eXBpY2FsID0gUTYuMiwgbG9jX3N0dWR5ID0gUTYuMywgbG9jX2V4YW0gPSBRNi40LCBsb2NfbGVjID0gUTYuNSwgbG9jX3NvY2lhbCA9IFE2LjYsIGNvbV9nZW4gPSBRNi43XzEsIGNvbV91bmF0dGVuZGVkID0gUTYuN18yLCBjb21fbGVhdmVfd2l0aF9vdGhlciA9IFE2LjdfMywgY29tX2xvY2tlZCA9IFE2LjdfNCwgY29tX3Jvb21fdGFzayA9IFE2LjdfNSwgY29tbXVuaWNhdGUgPSBRNy4xLCBjb21tdW5pY2F0ZU8gPSBRNy4yLCBwaG9uZV91c2UgPSBRNy4zLCBwaG9uZV91c2VPID0gUTcuNCwgTk1QUV8xID0gUTguMV8xLCBOTVBRXzIgPSBROC4xXzIsIE5NUFFfMyA9IFE4LjFfMywgTk1QUV80ID0gUTguMV80LCBOTVBRXzUgPSBROC4xXzUsIE5NUFFfNiA9IFE4LjFfNiwgTk1QUV83ID0gUTguMV83LCBOTVBRXzggPSBROC4xXzgsIE5NUFFfOSA9IFE4LjFfOSwgTk1QUV8xMCA9IFE4LjJfMSwgTk1QUV8xMSA9IFE4LjJfMiwgTk1QUV8xMiA9IFE4LjJfMywgTk1QUV8xMyA9IFE4LjJfNCwgTk1QUV8xNCA9IFE4LjJfNSwgTk1QUV8xNSA9IFE4LjJfNiwgTk1QUV8xNiA9IFE4LjJfNywgTk1QUV8xNyA9IFE4LjJfOCwgTk1QUV8xOCA9IFE4LjJfOSwgTk1QUV8xOSA9IFE4LjJfMTAsIE5NUFFfMjAgPSBROC4yXzExLCBNUElRXzEgPSBROS4xXzEsIE1QSVFfMiA9IFE5LjFfMiwgTVBJUV8zID0gUTkuMV8zLCBNUElRXzQgPSBROS4xXzQsIE1QSVFfNSA9IFE5LjFfNSwgTVBJUV82ID0gUTkuMV82LCBNUElRXzcgPSBROS4xXzcsIE1QSVFfOCA9IFE5LjFfOCwgTVBJUV9TSV8xID0gUTkuMl8xLCBNUElRX1NJXzIgPSBROS4yXzIsIE1QSVFfU0lfMyA9IFE5LjJfMywgTVBJUV9WRk9fMSA9IFE5LjNfMSwgTVBJUV9WRk9fMiA9IFE5LjNfMiwgTVBJUV9WRk9fMyA9IFE5LjNfMywgU0FEXzEgPSBRMTAuMV8xLCBTQURfMiA9IFExMC4xXzIsIFNBRF8zID0gUTEwLjFfMywgU0FEXzQgPSBRMTAuMV80LCBTQURfNSA9IFExMC4xXzUsIFNBRF82ID0gUTEwLjFfNiwgU0FEXzcgPSBRMTAuMV83LCBTQURfOCA9IFExMC4xXzgsIFNBRF85ID0gUTEwLjFfOSwgU0FEXzEwID0gUTEwLjFfMTAsIFNBRF8xMSA9IFExMC4xXzExLCBTQURfMTIgPSBRMTAuMV8xMiwgU0FEXzEzID0gUTEwLjFfMTMpICU+JSAKICAKICAjIHJlcGxhY2UgdW5jbGVhci9pbmFwcHJvcHJpYXRlIHJlc3BvbnNlcwogICMgcmVtb3ZlIG5vbi1udW1lcmljIHJlc3BvbnNlcyB0byAiYWdlX2ZpcnN0X3Bob25lIgogICAgIyB0aGlzIHdpbGwgZm9yY2UgYWxsIG5vbi1udW1lcmljIHZhbHVlIHRvICJOQSIKICBtdXRhdGUoYWdlX2ZpcnN0X3Bob25lID0gYXMubnVtZXJpYyhhZ2VfZmlyc3RfcGhvbmUpKSAlPiUgCgogICMgcmVtb3ZlIGFueSByZXNwb25zZXMgbG9uZ2VyIHRoYW4gMiBkaWdpdHMgZnJvbSAiYWdlX2ZpcnN0X3Bob25lIgogIG11dGF0ZV9hdCgiYWdlX2ZpcnN0X3Bob25lIiwgfnJlcGxhY2UoLiwgbmNoYXIoYXMuaW50ZWdlcihhZ2VfZmlyc3RfcGhvbmUpKSA+IDIsIE5BKSkgJT4lIAogIAogICMgY2hhbmdlIHZhcmlhYmxlcyB0byBudW1lcmljIG9yIGZhY3RvciBhcyBuZWVkZWQKICBtdXRhdGUocGFydGljaXBhbnQgPSBhcy5udW1lcmljKHBhcnRpY2lwYW50KSwgYWdlID0gYXMubnVtZXJpYyhhZ2UpLCBDQlNfa25vdyA9IGZhY3RvcihDQlNfa25vdywgbGV2ZWxzID0gYygxOjIpLCBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSksIENCU19kb25lX3Rhc2tzID0gZmFjdG9yKENCU19kb25lX3Rhc2tzLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoInllcyIsICJubyIpKSwgYWdlID0gYXMubnVtZXJpYyhhZ2UpLCBnZW5kZXIgPSBmYWN0b3IoZ2VuZGVyLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIk1hbGUiLCAiRmVtYWxlIiwgIlByZWZlciBub3QgdG8gc2F5IiwgIk90aGVyIikpLCBsYW5nID0gZmFjdG9yKGxhbmcsIGxldmVscyA9IGMoMToyKSwgbGFiZWxzID0gYygiRW5nbGlzaCIsICJPdGhlciIpKSwgcHJvZiA9IGZhY3Rvcihwcm9mLCBsZXZlbHMgPSBjKDE6MyksIGxhYmVscyA9IGMoIkxvdyIsICJNb2RlcmF0ZSIsICJIaWdoIikpLCBwcm9ncmFtID0gZmFjdG9yKHByb2dyYW0sIGxldmVscyA9IGMoMToxMyksIGxhYmVscyA9IGMoIkFydHMgJiBIdW1hbml0aWVzIiwgIk11c2ljIiwgIkVkdWNhdGlvbiIsICJFbmdpbmVlcmluZyIsICJIYWFsdGggU2NpZW5jZSIsICJJbmZvcm1hdGlvbiAmIE1lZGlhIFN0dWRpZXMiLCAiTGF3IiwgIkJ1c2luZXNzIiwgIlNjaWVuY2UiLCAiU29jaWFsIFNjaWVuY2UiLCAiU2NodWxpY2ggRGVudGlzdHJ5IiwgIkdyYWR1YXRlIFN0dWRpZXMiLCAiT3RoZXIiKSksIHllYXIgPSBmYWN0b3IoeWVhciwgbGV2ZWxzID0gYygxOjYpLCBsYWJlbHMgPSBjKCJGaXJzdCBZZWFyIiwgIlNlY29uZCBZZWFyIiwgIlRoaXJkIFllYXIiLCAiRm91cnRoIFllYXIiLCAiRmlmdGggWWVhcisiLCAiR3JhZHVhdGUgU3R1ZGVudCIpKSwgYXBwX21vc3RfdXNlZCA9IGZhY3RvcihhcHBfbW9zdF91c2VkLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIkdhbWVzIiwgIlNvY2lhbCBOZXR3b3JraW5nIiwgIkVudGVydGFpbm1lbnQiLCAiT3RoZXIiKSksIGlwaG9uZSA9IGZhY3RvcihpcGhvbmUsIGxldmVscyA9IGMoMToyKSwgbGFiZWxzID0gYygieWVzIiwgIm5vIikpLCBTVF9hcHBfbW9zdF91c2VkID0gZmFjdG9yKFNUX2FwcF9tb3N0X3VzZWQsIGxldmVscyA9IGMoMTo0KSwgbGFiZWxzID0gYygiR2FtZXMiLCAiU29jaWFsIE5ldHdvcmtpbmciLCAiRW50ZXJ0YWlubWVudCIsICJPdGhlciIpKSwgU1RfYXBwX3RleHRfbWVzcyA9IGZhY3RvcihTVF9hcHBfdGV4dF9tZXNzLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoInllcyIsICJubyIpKSwgU1Rfd2Vla2x5X3RvdF9ob3VycyA9IGZhY3RvcihTVF93ZWVrbHlfdG90X2hvdXJzLCBsZXZlbHMgPSBjKDE6NSksIGxhYmVscyA9IGMoIjAtMTAiLCAiMTEtMjAiLCAiMjEtMzAiLCAiMzEtNDAiLCAiNDArIikpLCBTVF9kYWlseV9waWNrdXBzID0gZmFjdG9yKFNUX2RhaWx5X3BpY2t1cHMsIGxldmVscyA9IGMoMTo1KSwgbGFiZWxzID0gYygiMC01MCIsICI1MS0xMDAiLCAiMTAxLTE1MCIsICIxNTEtMjAwIiwgIjIwMCsiKSksIFNUX2RhaWx5X25vdCA9IGZhY3RvcihTVF9kYWlseV9ub3QsIGxldmVscyA9IGMoMTo1KSwgbGFiZWxzID0gYygiMC01MCIsICI1MS0xMDAiLCAiMTAxLTE1MCIsICIxNTEtMjAwIiwgIjIwMCsiKSksIHBob25lX3ZhbHVlID0gZmFjdG9yKHBob25lX3ZhbHVlLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIiQwLSQyMCIsICIkMjEtJDQwIiwgIiQ0MS0kNjAiLCAiPiQ2MCIpKSwgcGhhbnRvbSA9IGZhY3RvcihwaGFudG9tLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoInllcyIsICJubyIpKSwgZGlzdF9kYWlseSA9IGFzLm51bWVyaWMoZGlzdF9kYWlseSksIGRpc3Rfc3R1ZHkgPSBhcy5udW1lcmljKGRpc3Rfc3R1ZHkpLCBkaXN0X2RldmljZSA9IGZhY3RvcihkaXN0X2RldmljZSwgbGV2ZWxzID0gYygxOjUpLCBsYWJlbHMgPSBjKCJDb21wdXRlciIsICJQaG9uZSIsICJpUGFkL1RhYmxldCIsICJTbWFydHdhdGNoIiwgIk90aGVyIikpLCBkaXN0X2RldmljZV9zdHVkeXdvcmsgPSBmYWN0b3IoZGlzdF9kZXZpY2Vfc3R1ZHl3b3JrLCBsZXZlbHMgPSBjKDE6NSksIGxhYmVscyA9IGMoIkNvbXB1dGVyIiwgIlBob25lIiwgImlQYWQvVGFibGV0IiwgIlNtYXJ0d2F0Y2giLCAiT3RoZXIiKSksIGRpc3RfZGV2aWNlX3NvY2lhbCA9IGZhY3RvcihkaXN0X2RldmljZV9zb2NpYWwsIGxldmVscyA9IGMoMTo1KSwgbGFiZWxzID0gYygiQ29tcHV0ZXIiLCAiUGhvbmUiLCAiaVBhZC9UYWJsZXQiLCAiU21hcnR3YXRjaCIsICJPdGhlciIpKSwgcG93X25vdF91c2luZyA9IGFzLm51bWVyaWMocG93X25vdF91c2luZyksIHBvd19ub3RpZmljYXRpb25zX29uID0gYXMubnVtZXJpYyhwb3dfbm90aWZpY2F0aW9uc19vbiksIHBvd192aWJyYXRlID0gYXMubnVtZXJpYyhwb3dfdmlicmF0ZSksIHBvd19zdHVkeSA9IGFzLm51bWVyaWMocG93X3N0dWR5KSwgcG93X2V4YW0gPSBhcy5udW1lcmljKHBvd19leGFtKSwgcG93X2xlYyA9IGFzLm51bWVyaWMocG93X2xlYyksIHBvd19zbGVlcCA9IGFzLm51bWVyaWMocG93X3NsZWVwKSwgbG9jX3R5cGljYWwgPSBmYWN0b3IobG9jX3R5cGljYWwsIGxldmVscyA9IGMoMTozKSwgbGFiZWxzID0gYygiT24gbXkgZGVzayIsICJJbiBteSBwb2NrZXQgb3IgYmFnIiwgIkluIGFub3RoZXIgcm9vbSIpKSwgbG9jX3N0dWR5ID0gZmFjdG9yKGxvY19zdHVkeSwgbGV2ZWxzID0gYygxOjMpLCBsYWJlbHMgPSBjKCJPbiBteSBkZXNrIiwgIkluIG15IHBvY2tldCBvciBiYWciLCAiSW4gYW5vdGhlciByb29tIikpLCBsb2NfZXhhbSA9IGZhY3Rvcihsb2NfZXhhbSwgbGV2ZWxzID0gYygxOjMpLCBsYWJlbHMgPSBjKCJPbiBteSBkZXNrIiwgIkluIG15IHBvY2tldCBvciBiYWciLCAiSW4gYW5vdGhlciByb29tIikpLCBsb2NfbGVjID0gZmFjdG9yKGxvY19sZWMsIGxldmVscyA9IGMoMTozKSwgbGFiZWxzID0gYygiT24gbXkgZGVzayIsICJJbiBteSBwb2NrZXQgb3IgYmFnIiwgIkluIGFub3RoZXIgcm9vbSIpKSwgbG9jX3NvY2lhbCA9IGZhY3Rvcihsb2Nfc29jaWFsLCBsZXZlbHMgPSBjKDE6MyksIGxhYmVscyA9IGMoIk9uIG15IGRlc2siLCAiSW4gbXkgcG9ja2V0IG9yIGJhZyIsICJJbiBhbm90aGVyIHJvb20iKSksIGNvbV9nZW4gPSBhcy5udW1lcmljKGNvbV9nZW4pLCBjb21fdW5hdHRlbmRlZCA9IGFzLm51bWVyaWMoY29tX3VuYXR0ZW5kZWQpLCBjb21fbGVhdmVfd2l0aF9vdGhlciA9IGFzLm51bWVyaWMoY29tX2xlYXZlX3dpdGhfb3RoZXIpLCBjb21fbG9ja2VkID0gYXMubnVtZXJpYyhjb21fbG9ja2VkKSwgY29tX3Jvb21fdGFzayA9IGFzLm51bWVyaWMoY29tX3Jvb21fdGFzayksIGNvbW11bmljYXRlID0gZmFjdG9yKGNvbW11bmljYXRlLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIkZhbWlseSIsICJGcmllbmRzIiwgIldvcmsiLCAiT3RoZXIiKSksIHBob25lX3VzZSA9IGZhY3RvcihwaG9uZV91c2UsIGxldmVscyA9IGMoMSwyLCA1LCAzLCA0KSwgbGFiZWxzID0gYygiQ2FsbGluZy9UZXh0aW5nIiwgIlNvY2lhbCBNZWRpYSIsICJHYW1lcyIsICJFbWFpbCIsICJPdGhlciIpKQogICAgICAgICApICU+JSAKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTk1QUSIpKSxmdW5zKGFzLm51bWVyaWMpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk1QSVEiKSksZnVucyhhcy5udW1lcmljKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJTQUQiKSksZnVucyhhcy5udW1lcmljKSkgJT4lIAogIAogICMgcmV2ZXJzZSBjb2RlIGl0ZW1zLi4uCiAgbXV0YXRlKE1QSVFfVkZPXzJSID0gOC1NUElRX1ZGT18yKSAlPiUgCiAgCiAgIyBhZGQgc2NvcmVzIGZvciBlYWNoIHF1ZXN0aW9ubmFpcmUuLi4gCiAgIyBmb3IgZWFjaCBwLi4uLgogICMgZ2V0IE5NUFEgc2NvcmUgLS0gU1VNCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKE5NUFFfc3VtID0gc3VtKGNfYWNyb3NzKE5NUFFfMTpOTVBRXzIwKSkpICU+JSAKICAjIGdldCBOTVBRIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUobWVhbihjX2Fjcm9zcyhOTVBRXzE6Tk1QUV8yMCkpKSAlPiUgCiAgCiAgIyBnZXQgTVBJUSBzY29yZSAtLSBTVU0KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9zdW0gPSBzdW0oY19hY3Jvc3MoTVBJUV8xOk1QSVFfOCkpKSAlPiUgCiAgIyBnZXQgTVBJUSBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKE1QSVFfbWVhbiA9IG1lYW4oY19hY3Jvc3MoTVBJUV8xOk1QSVFfOCkpKSAlPiUgCiAgCiAgIyBnZXQgTVBJUV9TSSBzY29yZSAtLSBTVU0KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9TSV9zdW0gPSBzdW0oY19hY3Jvc3MoTVBJUV9TSV8xOk1QSVFfU0lfMykpKSAlPiUgCiAgIyBnZXQgTVBJUV9TSSBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKE1QSVFfU0lfbWVhbiA9IG1lYW4oY19hY3Jvc3MoTVBJUV9TSV8xOk1QSVFfU0lfMykpKSAlPiUgCiAgCiAgIyBnZXQgTVBJUV9WRk8gc2NvcmUgLS0gU1VNICAKICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9WRk9fc3VtID0gc3VtKE1QSVFfVkZPXzEsIE1QSVFfVkZPXzJSLCBNUElRX1ZGT18zKSkgJT4lIAogICMgZ2V0IE1QSVFfVkZPIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoTVBJUV9WRk9fbWVhbiA9IG1lYW4oTVBJUV9WRk9fMSwgTVBJUV9WRk9fMlIsIE1QSVFfVkZPXzMpKSAlPiUgCiAgCiAgIyBnZXQgU0FEIHNjb3JlIC0tIFNVTSAgCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9zdW0gPSBzdW0oY19hY3Jvc3MoU0FEXzE6U0FEXzEzKSkpICU+JSAKICAjIGdldCBTQUQgc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfbWVhbiA9IG1lYW4oY19hY3Jvc3MoU0FEXzE6U0FEXzEzKSkpICU+JSAKICAgIAogICMgZ2V0IFNBRF9kZXAgc2NvcmUgLS0gU1VNCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9kZXBfc3VtID0gc3VtKGNfYWNyb3NzKFNBRF8xOlNBRF8zKSkpICU+JSAKICAjIGdldCBTQURfZGVwIHNjb3JlIC0tIE1FQU4KICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX2RlcF9tZWFuID0gbWVhbihjX2Fjcm9zcyhTQURfMTpTQURfMykpKSAlPiUgCiAgICAKICAjIGdldCBTQURfZWEgc2NvcmUgLS0gU1VNCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9lYV9zdW0gPSBzdW0oY19hY3Jvc3MoU0FEXzg6U0FEXzExKSkpICU+JSAKICAjIGdldCBTQURfZWEgc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfZWFfbWVhbiA9IG1lYW4oY19hY3Jvc3MoU0FEXzg6U0FEXzExKSkpICU+JSAKICAKICAjIGdldCBTQURfYWNjZXNzIHNjb3JlIC0tIFNVTQogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfYWNjZXNzX3N1bSA9IHN1bShjX2Fjcm9zcyhTQURfNTpTQURfNykpKSAlPiUgCiAgIyBnZXQgU0FEX2FjY2VzcyBzY29yZSAtLSBNRUFOCiAgcm93d2lzZSgpICU+JSBkcGx5cjo6bXV0YXRlKFNBRF9hY2Nlc3NfbWVhbiA9IG1lYW4oY19hY3Jvc3MoU0FEXzU6U0FEXzcpKSkgJT4lIAogIAogICMgZ2V0IFNBRF9kaXN0IHNjb3JlIC0tIFNVTQogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfZGlzdF9zdW0gPSBzdW0oY19hY3Jvc3MoU0FEXzEyOlNBRF8xMykpKSAlPiUgCiAgIyBnZXQgU0FEX2Rpc3Qgc2NvcmUgLS0gTUVBTgogIHJvd3dpc2UoKSAlPiUgZHBseXI6Om11dGF0ZShTQURfZGlzdF9tZWFuID0gbWVhbihjX2Fjcm9zcyhTQURfMTI6U0FEXzEzKSkpICU+JSAgCiAgCiAgIyBmcm9tIFdBUkQgLS0gZ2V0ICJXZGVwIiBhbmQgIldlYSIKICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX1dkZXBfc3VtID0gc3VtKGNfYWNyb3NzKFNBRF8xOlNBRF82KSkpICU+JSAKICByb3d3aXNlKCkgJT4lIGRwbHlyOjptdXRhdGUoU0FEX1dlYV9zdW0gPSBzdW0oY19hY3Jvc3MoU0FEXzg6U0FEXzEyKSkpCmBgYAoKCk9yZ2FuaXplIENCUyBkYXRhIC4uLgoKYGBge3IgcmVjbGFzc19jYnNfcmF3fQpDQlNfZGF0YSA8LSAKICAjIGNoYW5nZSBkYXRhIGZpbGUgdHlwZSB0byB0aWJibGUgCiAgYXMudGliYmxlKENCU19yYXcpICU+JSAKICAjIG1ha2UgVmFsaWQgYSBmYWN0b3IgLS0gdHJ1ZSB2cyBmYWxzZQogIG11dGF0ZShWYWxpZCA9IGZhY3RvcihWYWxpZCkpICU+JSAKICAjIG1ha2UgdGVzdCBuYW1lIGEgZmFjdG9yCiAgbXV0YXRlKFRlc3QuTmFtZSA9IGZhY3RvcihUZXN0Lk5hbWUpKSAlPiUgCiAgIyByZW1vdmUgZW1haWwgZG9tYWluIHRvIGdldCBwYXJ0aWNpcGFudCBudW1iZXJzCiAgbXV0YXRlX2F0KCJVc2VyLkVtYWlsIiwgc3RyX3JlcGxhY2UsICJAcmVzZWFyY2hlci0xNTk1NDIuYXV0b3JlZ2lzdGVyLmNvbSIsICIiKSAlPiUgCiAgIyBtYWtlIGxpc3QgYXMgbnVtZXJpYwogIG11dGF0ZShVc2VyLkVtYWlsID0gYXMubnVtZXJpYyhVc2VyLkVtYWlsKSkgJT4lIAogICMgbWFrZSBhbGwgc2NvcmVzICYgcmF3IHNjb3JlcyBudW1lcmljCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIlNjb3JlIikpLGZ1bnMoYXMubnVtZXJpYykpICU+JSAKICAjIG1ha2UgYWxsIHBlcmNlbnRpbGVzIG51bWVyaWMKICBtdXRhdGUoUGVyY2VudGlsZSA9IGFzLm51bWVyaWMoUGVyY2VudGlsZSkpCmBgYAoKCiMjIyMgUmVtb3ZpbmcgTm9uLVZhbGlkIFNjb3JlczogQ0JTCgpSZW1vdmUgbm9uLXZhbGlkIGRhdGEgZnJvbSBDQlMgc2NvcmVzLgoKLSBgciBucm93KENCU19kYXRhICU+JSBmaWx0ZXIoVmFsaWQgPT0gImZhbHNlIikpYCBzY29yZXMgd2VyZSByZW1vdmVkIGZvciBiZWluZyBpbnZhbGlkLgoKYGBge3Igc2hvd19DQlNfZXhfbm90dmFsaWRfdH0KIyBnZXQgZGF0YWZyYW1lIHdpdGggcHMgd2l0aCBub24tdmFsaWQgQ0JTIHNjb3JlcwpDQlNfZXhfbm90dmFsaWQgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihWYWxpZCA9PSAiZmFsc2UiKQoKIyBnZXQgbGlzdCBvZiBub24tdmFsaWQgcHMKQ0JTX2V4X25vdHZhbGlkX2xpc3QgPC0gQ0JTX2V4X25vdHZhbGlkJFVzZXIuRW1haWwKCiMgbWFrZSBmcmVxdWVuY3kgdGFibGUKQ0JTX2V4X25vdHZhbGlkX3QgPC0gcGx5cjo6Y291bnQoQ0JTX2V4X25vdHZhbGlkJFRlc3QuTmFtZSkKCiMgc2hvdyB0YWJsZSB1c2luZyBrYWJsZQprYWJsZShDQlNfZXhfbm90dmFsaWRfdCwgY2FwdGlvbiA9ICJGcmVxdWVuY3kgdGFibGUgb2YgQ0JTIFRhc2tzIHdpdGggTm9uLVZhbGlkIFNjb3JlcyIsIGFsaWduID0gcmVwKCdjJyksIGNvbC5uYW1lcyA9IGMoIlRhc2siLCAiTm9uLVZhbGlkIFNjb3JlcyIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJQYXJ0aWNpcGFudHMgd2hvIGhhZCBhbnkgbm9uLXZhbGlkIHNjb3JlcyB3ZXJlIHJlbW92ZWQgZm9ybSB0aGUgZmluYWwgYW5hbHlzZXMuIE5vdCBhbGwgdGFza3MgaGFkIGEgbm9uLXZhbGlkIHNjb3JlLiIpICU+JSAKICBjb2x1bW5fc3BlYygyLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICAjIGNvbHVtbl9zcGVjKDksIGJvcmRlcl9sZWZ0ID0gVCkgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQpgYGAKCgotIFRvIG1haW50YWluIG9ubHkgcHMgd2hvIGNvbXBsZXRlZCBhbGwgMTIgQ0JTIHRhc2tzLCBgcmAgcHMgd2VyZSByZW1vdmVkLCBsZWF2aW5nIGEgdG90YWwgb2YgYHJgIHdobyBjb21wbGV0ZWQgYWxsIDEyIENCUyB0cmlhbHMgd2l0aCBhIHZhbGlkIHNjb3JlCgojIyMjIFJlbW92aW5nIE91bGllcnM6IENCUyAKCgpUaGlzIGNvZGUgY2xlYW5lZCAqYWxsX2RhdGEqIGJhc2VkIG9uICgxKSBleGNsdXNpb24gY3JpdGVyaWEsICgyKSBvdXRsaWVycywgYW5kICgzKSBpbmNvbXBsZXRlL21pc3NpbmcgZGF0YS4gKihjbGljayB0byBzZWUgY29kZSkqCgpgYGB7ciBjcmVhdGVfYWxsX3JlbW92ZV9kYyZhbGxfcmVtb3ZlX2RjX2xpc3QsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFfQojIGdldCBsaXN0IG9mIHBzIHRvIHJlbW92ZSBmb3IgdmFyaW91cyByZWFzb25zLi4uCgojIEV4Y2x1ZGUgcHMgd2l0aCBub24tdmFsaWQgQ0JTIHNjb3JlcyAtLSBncmFiYmVkIGZyb20gYWJvdmUKIyBDQlNfZXhfbm90dmFsaWQgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihWYWxpZCA9PSAiZmFsc2UiKQoKIyBPdXRsaWVycyAtLSByZW1vdmUgcHMgd2hvIGFyZSBncmVhdGVyIHRoYW4gMyBTRHMgYXdheSBmcm9tIHRoZSBNIGZvciBlYWNoIHRhc2sKICAjIHRoZSB0YXNrcyAmIHRoZWlyIGFjcm9ueW1zOgogICAgIyBEaWdpdCBTcGFuIChEUyksIERvdWJsZSBUcm91YmxlIChEVCksIEZlYXR1cmUgTWF0Y2ggKEZNKSwgR3JhbW1hdGljYWwgUmVhc29uaW5nIChHUiksIE1vbmtleSBMYWRkZXIgKE1MKSwgT2RkIE9uZSBPdXQgKE9PTyksIAogICAgIyBQYWlyZWQgQXNzb2NpYXRlcyAoUEEpLCBQb2x5Z29ucyAoUCksIFJvdGF0aW9ucyAoUiksIFNwYXRpYWwgUGxhbm5pbmcgKFNQKSwgU3BhdGlhbCBTcGFuIChTUyksIFRva2VuIFNlYXJjaCAoVFMpCiMgRGlnaXQgU3BhbiAoRFMpCkNCU19leF9vdXRfRFMgPC0gCiAgQ0JTX2RhdGEgJT4lIAogICMgc2VsZWN0IHRoZSB0YXNrIGluIHF1ZXN0aW9uCiAgZmlsdGVyKFRlc3QuTmFtZSA9PSAiRGlnaXQgU3BhbiIpICU+JSAKICAjIHJlbW92ZSBwcyB0aGF0IGhhdmUgPiAzU0QgZnJvbSB0aGUgbWVhbgogIGZpbHRlcihTY29yZSA+IChtZWFuKFNjb3JlKSArIDMqc2QoU2NvcmUpKSB8IAogICMgcmVtb3ZlIHBzIHRoYXQgaGF2ZSA8IDNTRCBmcm9tIHRoZSBtZWFuCiAgICAgICAgIFNjb3JlIDwgKG1lYW4oU2NvcmUpIC0gMypzZChTY29yZSkpKQojIERvdWJsZSBUcm91YmxlIChEVCkKQ0JTX2V4X291dF9EVCA8LSBDQlNfZGF0YSAlPiUgZmlsdGVyKFRlc3QuTmFtZSA9PSAiRG91YmxlIFRyb3VibGUiKSAlPiUgZmlsdGVyKFNjb3JlID4gKG1lYW4oU2NvcmUpICsgMypzZChTY29yZSkpIHwgU2NvcmUgPCAobWVhbihTY29yZSkgLSAzKnNkKFNjb3JlKSkpCgojIEZlYXR1cmUgTWF0Y2ggKEZNKSAKQ0JTX2V4X291dF9GTSA8LSBDQlNfZGF0YSAlPiUgZmlsdGVyKFRlc3QuTmFtZSA9PSAiRmVhdHVyZSBNYXRjaCIpICU+JSBmaWx0ZXIoU2NvcmUgPiAobWVhbihTY29yZSkgKyAzKnNkKFNjb3JlKSkgfCBTY29yZSA8IChtZWFuKFNjb3JlKSAtIDMqc2QoU2NvcmUpKSkKCiMgR3JhbW1hdGljYWwgUmVhc29uaW5nIChHUikKQ0JTX2V4X291dF9HUiA8LSBDQlNfZGF0YSAlPiUgZmlsdGVyKFRlc3QuTmFtZSA9PSAiR3JhbW1hdGljYWwgUmVhc29uaW5nIikgJT4lIGZpbHRlcihTY29yZSA+IChtZWFuKFNjb3JlKSArIDMqc2QoU2NvcmUpKSB8IFNjb3JlIDwgKG1lYW4oU2NvcmUpIC0gMypzZChTY29yZSkpKQoKIyBNb25rZXkgTGFkZGVyIChNTCkKQ0JTX2V4X291dF9NTCA8LSBDQlNfZGF0YSAlPiUgZmlsdGVyKFRlc3QuTmFtZSA9PSAiTW9ua2V5IExhZGRlciIpICU+JSBmaWx0ZXIoU2NvcmUgPiAobWVhbihTY29yZSkgKyAzKnNkKFNjb3JlKSkgfCBTY29yZSA8IChtZWFuKFNjb3JlKSAtIDMqc2QoU2NvcmUpKSkKCiMgT2RkIE9uZSBPdXQgKE9PTykKQ0JTX2V4X291dF9PT08gPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihUZXN0Lk5hbWUgPT0gIk9kZCBPbmUgT3V0IikgJT4lIGZpbHRlcihTY29yZSA+IChtZWFuKFNjb3JlKSArIDMqc2QoU2NvcmUpKSB8IFNjb3JlIDwgKG1lYW4oU2NvcmUpIC0gMypzZChTY29yZSkpKQoKIyBQYWlyZWQgQXNzb2NpYXRlcyAoUEEpCkNCU19leF9vdXRfUEEgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihUZXN0Lk5hbWUgPT0gIlBhaXJlZCBBc3NvY2lhdGVzIikgJT4lIGZpbHRlcihTY29yZSA+IChtZWFuKFNjb3JlKSArIDMqc2QoU2NvcmUpKSB8IFNjb3JlIDwgKG1lYW4oU2NvcmUpIC0gMypzZChTY29yZSkpKQoKIyBQb2x5Z29ucyAoUCkKQ0JTX2V4X291dF9QIDwtIENCU19kYXRhICU+JSBmaWx0ZXIoVGVzdC5OYW1lID09ICJQb2x5Z29ucyIpICU+JSBmaWx0ZXIoU2NvcmUgPiAobWVhbihTY29yZSkgKyAzKnNkKFNjb3JlKSkgfCBTY29yZSA8IChtZWFuKFNjb3JlKSAtIDMqc2QoU2NvcmUpKSkKCiMgUm90YXRpb25zIChSKQpDQlNfZXhfb3V0X1IgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihUZXN0Lk5hbWUgPT0gIlJvdGF0aW9ucyIpICU+JSBmaWx0ZXIoU2NvcmUgPiAobWVhbihTY29yZSkgKyAzKnNkKFNjb3JlKSkgfCBTY29yZSA8IChtZWFuKFNjb3JlKSAtIDMqc2QoU2NvcmUpKSkKCiMgU3BhdGlhbCBQbGFubmluZyAoU1ApCkNCU19leF9vdXRfU1AgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihUZXN0Lk5hbWUgPT0gIlNwYXRpYWwgUGxhbm5pbmciKSAlPiUgZmlsdGVyKFNjb3JlID4gKG1lYW4oU2NvcmUpICsgMypzZChTY29yZSkpIHwgU2NvcmUgPCAobWVhbihTY29yZSkgLSAzKnNkKFNjb3JlKSkpCgojIFNwYXRpYWwgU3BhbiAoU1MpCkNCU19leF9vdXRfU1MgPC0gQ0JTX2RhdGEgJT4lIGZpbHRlcihUZXN0Lk5hbWUgPT0gIlNwYXRpYWwgU3BhbiIpICU+JSBmaWx0ZXIoU2NvcmUgPiAobWVhbihTY29yZSkgKyAzKnNkKFNjb3JlKSkgfCBTY29yZSA8IChtZWFuKFNjb3JlKSAtIDMqc2QoU2NvcmUpKSkKCiMgVG9rZW4gU2VhcmNoIChUUykKQ0JTX2V4X291dF9UUyA8LSBDQlNfZGF0YSAlPiUgZmlsdGVyKFRlc3QuTmFtZSA9PSAiVG9rZW4gU2VhcmNoIikgJT4lIGZpbHRlcihTY29yZSA+IChtZWFuKFNjb3JlKSArIDMqc2QoU2NvcmUpKSB8IFNjb3JlIDwgKG1lYW4oU2NvcmUpIC0gMypzZChTY29yZSkpKQogICAgCiMgY3JlYXRlIGxpc3Qgb2YgcHMgdG8gcmVtb3ZlIHdpdGggcmVhc29uIGZvciByZW1vdmFsIC0tIENCU19yZW1vdmUKQ0JTX3JlbW92ZSA8LSAKICAjIGJpbmQgdGhlIHBzIHdobyB3aWxsIGJlIHJlbW92ZWQKICByYmluZChDQlNfZXhfb3V0X0RTLCBDQlNfZXhfb3V0X0RULCBDQlNfZXhfb3V0X0ZNLCBDQlNfZXhfb3V0X0dSLCBDQlNfZXhfb3V0X01MLCBDQlNfZXhfb3V0X09PTywgCiAgICAgICAgQ0JTX2V4X291dF9QQSwgQ0JTX2V4X291dF9QLCBDQlNfZXhfb3V0X1IsIENCU19leF9vdXRfU1AsIENCU19leF9vdXRfU1MsIENCU19leF9vdXRfVFMpICU+JSAKICAjIGdyb3VwIGJ5IHRhc2sKICBncm91cF9ieShUZXN0Lk5hbWUpICU+JSAKICAjIGNvdW50IGJ5IHBhcnRpY2lwYW50IG51bWJlcgogIGRwbHlyOjpjb3VudChVc2VyLkVtYWlsKSAlPiUgCiAgc2VsZWN0KC1uKQoKCiMgY3JlYXRlIGxpc3Qgb2YgcHMgdG8gcmVtb3ZlIHdpdGhvdXQgZHVwbGljYXRlcyB0byB1c2UgdG8gZmlsdGVyIGZpbmFsIGRhdGEKQ0JTX3JlbW92ZV9saXN0IDwtIAogIENCU19yZW1vdmUgJT4lIAogICMgYmFzZWQgb24gVXNlci5FbWFpbAogIHNlbGVjdChVc2VyLkVtYWlsKSAlPiUgCiAgIyByZW1vdmUgYW55IGR1cGxpY2F0ZWQgcGFydGljaXBhbnQgSURzCiAgZGlzdGluY3QoKQoKIyBzaG93IHRhYmxlIG9mIG91dGxpZXJzIGJ5IHRhc2sgdXNpbmcga2FibGUKa2FibGUocGx5cjo6Y291bnQoQ0JTX3JlbW92ZSRUZXN0Lk5hbWUpLCBjYXB0aW9uID0gIkZyZXF1ZW5jeSB0YWJsZSBvZiBDQlMgVGFza3Mgd2l0aCBPdXRsaWVyIFNjb3JlcyIsIGFsaWduID0gcmVwKCdjJyksIGNvbC5uYW1lcyA9IGMoIlRhc2siLCAiT3V0bGllciBTY29yZXMiKSwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGZvb3Rub3RlKGdlbmVyYWwgPSAiUGFydGljaXBhbnRzIHdobyBoYWQgYW55IG5vbi12YWxpZCBzY29yZXMgd2VyZSByZW1vdmVkIGZvcm0gdGhlIGZpbmFsIGFuYWx5c2VzLiBOb3QgYWxsIHRhc2tzIGhhZCBhIG5vbi12YWxpZCBzY29yZS4iKSAlPiUgCiAgY29sdW1uX3NwZWMoMiwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAgIyBjb2x1bW5fc3BlYyg5LCBib3JkZXJfbGVmdCA9IFQpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKYGBgCgojIyMjIE1ha2UgRmluYWwgQ0JTIFJlbW92YWwgTGlzdCAodmFsaWRpdHkgJiBvdXRsaWVycykKCmBgYHtyIGNsZWFuX2RhdGFfd2l0aF9DQlNfcmVtb3ZlX2xpc3QsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgY2xlYW4gQ0JTX2RhdGEgdXNpbmcgQ0JTX3JlbW92ZV9saXN0CkNCU19kYXRhX25vb3V0IDwtIAogICMgbm8gb3V0bGllcnMgcmVtb3ZlZCArIHZhbGlkICYgaW52YWxpZAogICAgIyBDQlNfZGF0YQogICMgb3V0bGllcnMgcmVtb3ZlZCArIHZhbGlkICYgaW52YWxpZAogICAgIyBDQlNfZGF0YSAlPiUgZmlsdGVyKCFVc2VyLkVtYWlsICVpbiUgQ0JTX3JlbW92ZV9saXN0JFVzZXIuRW1haWwpCiAgIyBubyBvdXRsaWVycyByZW1vdmVkICsgdmFsaWQgb25seQogICAgIyBDQlNfZGF0YSAlPiUgZmlsdGVyKCFVc2VyLkVtYWlsICVpbiUgQ0JTX2V4X25vdHZhbGlkX2xpc3QpCiAgIyBvdXRsaWVycyByZW1vdmVkICsgdmFsaWQgb25seQogICAgQ0JTX2RhdGEgJT4lIGZpbHRlcighVXNlci5FbWFpbCAlaW4lIENCU19yZW1vdmVfbGlzdCRVc2VyLkVtYWlsKSAlPiUgZmlsdGVyKCFVc2VyLkVtYWlsICVpbiUgQ0JTX2V4X25vdHZhbGlkX2xpc3QpCgojIGdldCBsaXN0IG9mIHBzIHdpdGggYWxsIDEyIHRhc2tzIGFmdGVyIHJlbW92aW5nIG91dGxpZXJzCiAgIyBnZXQgZnJlcXVlbmN5IGNvdW50cyBvZiBudW1iZXIgb2YgdGFza3MgcGVyIHAKICBDQlNfdGFza251bV9wX2ZyZXEgPC0gQ0JTX2RhdGFfbm9vdXQgJT4lIGRwbHlyOjpjb3VudChVc2VyLkVtYWlsKSAlPiUgZmlsdGVyKG4gIT0gMTIpCiAgIyByZW1vdmUgYW55IHBzIHdpdGggbGVzcyB0aGFuIDEyIHRhc2tzCiAgQ0JTX2RhdGFfZmluYWwgPC0gCiAgICBDQlNfZGF0YV9ub291dCAlPiUKICAgIGZpbHRlcighVXNlci5FbWFpbCAlaW4lIENCU190YXNrbnVtX3BfZnJlcSRVc2VyLkVtYWlsKQoKCiMgY29tcGFyZSBmcmVxdWVuY3kgdGFibGVzIGZvcm0gYmVmb3JlIHRvIGFmdGVyIHAgcmVtb3ZhbAojIGdldCBmcmVxdWVuY3kgdGFibGVzCiAgIyBiZWZvcmUgcmVtb3ZhbAogIENCU19wX2ZyZXEgPC0gcGx5cjo6Y291bnQoQ0JTX2RhdGEkVGVzdC5OYW1lKQogICMgYWZ0ZXIgb3V0bGllciByZW1vdmFsCiAgQ0JTX25vb3V0X3BfZnJlcSA8LSBwbHlyOjpjb3VudChDQlNfZGF0YV9ub291dCRUZXN0Lk5hbWUpCiAgIyBhZnRlciByZW1vdmluZyBpbmNvbXBsZXRlIHBzCiAgQ0JTX2ZpbmFsX3BfZnJlcSA8LSBwbHlyOjpjb3VudChDQlNfZGF0YV9maW5hbCRUZXN0Lk5hbWUpCiMgam9pbiBpbnRvIDEgdGFibGUKQ0JTX2NvbXBhcmVfcF9mcmVxX3QgPC0gCiAgZGF0YS5mcmFtZSgidGFzayIgPSBDQlNfcF9mcmVxJHgsICJmcmVxX2ludGl0aWFsIiA9IENCU19wX2ZyZXEkZnJlcSwgImZyZXFfbm9vdXQiID0gQ0JTX25vb3V0X3BfZnJlcSRmcmVxLCAiZnJlcV9maW5hbCIgPSBDQlNfZmluYWxfcF9mcmVxJGZyZXEsICJyZW1vdmVkIiA9IChDQlNfcF9mcmVxJGZyZXEgLSBDQlNfbm9vdXRfcF9mcmVxJGZyZXEpLCAibWlzc2luZyIgPSAoQ0JTX25vb3V0X3BfZnJlcSRmcmVxIC0gQ0JTX2ZpbmFsX3BfZnJlcSRmcmVxKSkKCiMgc2hvdyB0YWJsZSB1c2luZyBrYWJsZQprYWJsZShDQlNfY29tcGFyZV9wX2ZyZXFfdCwgY2FwdGlvbiA9ICJGcmVxdWVuY3kgdGFibGUgb2YgQ0JTIFRhc2tzIGJlZm9yZSBhbmQgYWZ0ZXIgZXh0cmVtZSBvdXRsaWVycyByZW1vdmVkLiIsIGFsaWduID0gcmVwKCdyY2NjY2MnKSwKICAgICAgY29sLm5hbWVzID0gYygiVGFzayIsICJJbml0aWFsIiwgIk5vIE91dGxpZXJzIiwgIkZpbmFsIiwgIk91dGxpZXJzIiwgIk1pc3NpbmcgVGFzayhzKSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJFeHRyZW1lIG91dGxpZXIgZGVmaW5lZCBhcyBhbnkgc2NvcmUgdGhhdCB3YXMgPjNTRCBmcm9tIHRoZSBtZWFuLiBGaW5hbCBzYW1wbGUgc2l6ZSBlbnN1cmVkIGFsbCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIGFsbCAxMiBDQlMgdGFza3MuIikgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAyLCAiU2FtcGxlIFNpemUiID0gMywgIlJlbW92ZWQgTiIgPSAyKSwgYm9sZCA9IFQpICU+JSAKICBjb2x1bW5fc3BlYygyLCBib2xkID0gVCkgJT4lCiAgY29sdW1uX3NwZWMoNSwgYm9yZGVyX3JpZ2h0ID0gVCkgJT4lIAogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCmBgYAoKCiMjIyMgTGlua2luZyBNYWluIFN0dWR5IERhdGEKCk5leHQsIHdlIGxpbmtlZCB0aGUgZGF0YSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZGF0YSBzZXRzOiAibWFpbl9zdXJfZGF0YSIsICJ0cmFja2luZ19kYXRhX3RlbXAiLCAiQ0JTX2RhdGFfZmluYWwiCgotICAqKm1haW5fc3VyX2RhdGEqKiBoYXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6IGByIG5hbWVzKG1haW5fc3VyX2RhdGEpYAogICAgLSBBdCB0aGlzIHBvaW50LCB0aGlzIGZpbGUgaGFzIGByIG5yb3cobWFpbl9zdXJfZGF0YSlgIHBhcnRpY2lwYW50cwotICAqKnRyYWNraW5nX2RhdGFfdGVtcCoqIGhhcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczogYHIgbmFtZXModHJhY2tpbmdfZGF0YV90ZW1wKWAKICAgIC0gQXQgdGhpcyBwb2ludCwgdGhpcyBmaWxlIGhhcyBgciBucm93KHRyYWNraW5nX2RhdGFfdGVtcClgIHBhcnRpY2lwYW50cwotICAqKkNCU19kYXRhX2ZpbmFsKiogaGFzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOiBgciBuYW1lcyhDQlNfZGF0YV9maW5hbClgCiAgICAtIEF0IHRoaXMgcG9pbnQsIHRoaXMgZmlsZSBoYXMgYHIgQ0JTX2NvbXBhcmVfcF9mcmVxX3QkZnJlcV9maW5hbFsxXWAgcGFydGljaXBhbnRzCgoKYGBge3J9CiMgc3RhcnQgYnkgcmVtb3ZpbmcgdW53YW50ZWQgY29sdW1ucyBmcm9tIENCU19maW5hbF9kYXRhIHRvIG1ha2UgdGhpbmdzIG1vcmUgc2ltcGxlLi4uCkNCU19kYXRhX2ZpbmFsX3NpbXBsZSA8LSAKICBDQlNfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KFVzZXIuRW1haWwsIFRlc3QuTmFtZSwgU2NvcmUsIFJhdy5TY29yZSwgUGVyY2VudGlsZSkKCiMgbmV4dCwgY2hhbmdlIENCUyBkYXRhIHRvIHdpZGUgZm9ybWF0CkNCU19kYXRhX2ZpbmFsVyA8LSAKICAjIHVzZSBzaW1wbGlmaWVkIGRhdGEKICBDQlNfZGF0YV9maW5hbF9zaW1wbGUgJT4lIAogICMgcGVyZm9ybSB0aGUgbG9uZz53aWRlIGZ1bmN0aW9uIGZvciBlYWNoIHBhcnRpY2lwYW50CiAgZ3JvdXBfYnkoVXNlci5FbWFpbCkgJT4lIAogICMgbWFrZSBkYXRhIHdpZGUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gVGVzdC5OYW1lLCAjIFZhcmlhYmxlIHdob3NlIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjb2x1bW4gbmFtZXMgLS0gZW50ZXIgbXVsdGlwbGUgd2l0aCAiYygpIgogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gYyhTY29yZSwgUmF3LlNjb3JlLCBQZXJjZW50aWxlKSkgJT4lICAjIFZhcmlhYmxlIHdob3NlIHZhbHVlcyB3aWxsIHBvcHVsYXRlIHRoZSB0YWJsZeKAmXMgYmxvY2sgb2YgY2VsbCB2YWx1ZXMuCiAgIyByZW5hbWUgIlVzZXIuRW1haWwiIGFzICJwYXJ0aWNpcGFudCIgdG8gbGluayBmaWxlcwogIGRwbHlyOjpyZW5hbWUocGFydGljaXBhbnQgPSBVc2VyLkVtYWlsKSAKICAKICAjIGNoYW5nZSBzY29yZXMgdG8gbnVtZXJpYyAKCgojIHNpbmNlIENCUyBoYXMgYmVlbiByZWR1Y2VkIHRoZSBtb3N0LCB1c2UgYSBsaXN0IGZyb20gQ0JTX2RhdGFfZmluYWwKICAjIGNyZWF0ZSBmcmVxIGxpc3QgZnJvbSBDQlNfZGF0YV9maW5hbAogICMgbm90ZTogdGhpcyBsaXN0IG1heSBpbmNsdWRlIHBzIHdobyB3ZXJlIHJlbW92ZSBlaXRoZXIgaW4gdHJhY2tpbmcgb3Igc3VydmV5IGNvbXBvbmVudHMKIyBtYWluX2FsbF9wYXJ0aWNpcGFudHMgPC0gcGx5cjo6Y291bnQoYyhtYWluX3N1cl9kYXRhJHBhcnRpY2lwYW50LCBDQlNfZGF0YV9maW5hbFckcGFydGljaXBhbnQsIHRyYWNraW5nX2RhdGFfdGVtcCRwYXJ0aWNpcGFudCkpICU+JSBmaWx0ZXIoZnJlcSA9PSAzKSAjI2ZpeCB0byB1c2UgbGF0ZXIuLi4gCgojIGxpbmsgYWxsIGRhdGEgYi93IHRoZSAzIGRhdGEgZmlsZXMKbWFpbl9hbGxfZGF0YSA8LSAKICBtYWluX3N1cl9kYXRhICU+JSBpbm5lcl9qb2luKENCU19kYXRhX2ZpbmFsVywgYnkgPSAicGFydGljaXBhbnQiKSAlPiUgaW5uZXJfam9pbih0cmFja2luZ19kYXRhX3RlbXAsIGJ5ID0gInBhcnRpY2lwYW50IikKYGBgCgojIyMjIEdldCB6IHNjb3JlcyBmb3IgQ0JzIHRhc2tzLi4uCgpgYGB7cn0KIyBnZXQgeiBzY29yZSBmb3IgZWFjaCBDQlMgdGFza3MKCiMgRGlnaXQgU3BhbiAoRFMpClpTY29yZV9EUyA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgU2NvcmVfRGlnaXQgU3BhbmApKQpaUmF3X0RTID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBSYXcuU2NvcmVfRGlnaXQgU3BhbmApKQoKIyBEb3VibGUgVHJvdWJsZSAoRFQpClpTY29yZV9EVCA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgU2NvcmVfRG91YmxlIFRyb3VibGVgKSkKWlJhd19EVCA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX0RvdWJsZSBUcm91YmxlYCkpCgojIEZlYXR1cmUgTWF0Y2ggKEZNKQpaU2NvcmVfRk0gPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFNjb3JlX0ZlYXR1cmUgTWF0Y2hgKSkKWlJhd19GTSA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX0ZlYXR1cmUgTWF0Y2hgKSkKCiMgR3JhbW1hdGljYWwgUmVhc29uaW5nIChHUikKWlNjb3JlX0dSID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBTY29yZV9HcmFtbWF0aWNhbCBSZWFzb25pbmdgKSkKWlJhd19HUiA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX0dyYW1tYXRpY2FsIFJlYXNvbmluZ2ApKQoKIyBNb25rZXkgTGFkZGVyIChNTCkKWlNjb3JlX01MID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBTY29yZV9Nb25rZXkgTGFkZGVyYCkpClpSYXdfTUwgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFJhdy5TY29yZV9Nb25rZXkgTGFkZGVyYCkpCgojIE9kZCBPbmUgT3V0IChPT08pClpTY29yZV9PT08gPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFNjb3JlX09kZCBPbmUgT3V0YCkpClpSYXdfT09PID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBSYXcuU2NvcmVfT2RkIE9uZSBPdXRgKSkKCiMgUGFpcmVkIEFzc29jaWF0ZXMgKFBBKQpaU2NvcmVfUEEgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFNjb3JlX1BhaXJlZCBBc3NvY2lhdGVzYCkpClpSYXdfUEEgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFJhdy5TY29yZV9QYWlyZWQgQXNzb2NpYXRlc2ApKQoKIyBQb2x5Z29ucyAoUCkKWlNjb3JlX1AgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkU2NvcmVfUG9seWdvbnMpKQpaUmF3X1AgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkUmF3LlNjb3JlX1BvbHlnb25zKSkKCiMgUm90YXRpb25zIChSKQpaU2NvcmVfUiA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRTY29yZV9Sb3RhdGlvbnMpKQpaUmF3X1IgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkUmF3LlNjb3JlX1JvdGF0aW9ucykpCgojIFNwYXRpYWwgUGxhbm5pbmcgKFNQKQpaU2NvcmVfU1AgPSBhcy5udW1lcmljKHNjYWxlKG1haW5fYWxsX2RhdGEkYFNjb3JlX1NwYXRpYWwgUGxhbm5pbmdgKSkKWlJhd19TUCA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX1NwYXRpYWwgUGxhbm5pbmdgKSkKCiMgU3BhdGlhbCBTcGFuIChTUykKWlNjb3JlX1NTID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBTY29yZV9TcGF0aWFsIFNwYW5gKSkKWlJhd19TUyA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX1NwYXRpYWwgUGxhbm5pbmdgKSkKCiMgVG9rZW4gU2VhcmNoIChUUykKWlNjb3JlX1RTID0gYXMubnVtZXJpYyhzY2FsZShtYWluX2FsbF9kYXRhJGBTY29yZV9Ub2tlbiBTZWFyY2hgKSkKWlJhd19UUyA9IGFzLm51bWVyaWMoc2NhbGUobWFpbl9hbGxfZGF0YSRgUmF3LlNjb3JlX1Rva2VuIFNlYXJjaGApKQoKIyBhZGQgei1zY29yZSBhbGwgQ0JTIHNjb3JlcyAoJiBSYXcgc2NvcmVzKSB0byBtYWluIGRhdGEgLS0gY3JlYXRpbmcgIm1haW5fZGF0YV9maW5hbCIKICAjIG11dGF0ZV9hdCh2YXIoc3RhcnRzX3dpdGgoIlNjb3JlIikpLCBmdW5zKHNjYWxlKSkgIyMgd29udCB3b3JrLCBuZWVkcyAic2VsZWN0aW5nIiBmdW5jdGlvbi4uLgogICMgbXV0YXRlKFNjb3JlWl9EUyA9IHNjYWxlKGBTY29yZV9EaWdpdCBTcGFuYCkpCiAgIyBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiU2NvcmUiKSksIGxpc3QoeiA9IH5hcy52ZWN0b3Ioc2NhbGUoLikpKSkKbWFpbl9hbGxfZGF0YV9maW5hbCA8LSAKICAjIGpvaW4gbWFpbiBkYXRhICYgbmV3IHpzY29yZXMKICBjYmluZChtYWluX2FsbF9kYXRhLCBaU2NvcmVfRFMsIFpSYXdfRFMsIFpTY29yZV9EVCwgWlJhd19EVCwgWlNjb3JlX0ZNLCBaUmF3X0ZNLCBaU2NvcmVfR1IsIFpSYXdfR1IsIFpTY29yZV9NTCwgWlJhd19NTCwgWlNjb3JlX09PTywgWlJhd19PT08sIFpTY29yZV9QQSwgWlJhd19QQSwgWlNjb3JlX1AsIFpSYXdfUCwgWlNjb3JlX1IsIFpSYXdfUiwgWlNjb3JlX1NQLCBaUmF3X1NQLCBaU2NvcmVfU1MsIFpSYXdfU1MsIFpTY29yZV9UUywgWlJhd19UUykgJT4lCiAgCiAgIyBmb3IgZWFjaCBwLi4uCiAgcm93d2lzZSgpICU+JSAKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gb3ZlcmFsbCBDQlMgc2NvcmUKICBkcGx5cjo6bXV0YXRlKENCU19vdmVyYWxsID0gKHN1bShaU2NvcmVfRFMsIFpTY29yZV9EVCwgWlNjb3JlX0ZNLCBaU2NvcmVfR1IsIFpTY29yZV9NTCwgWlNjb3JlX09PTywgWlNjb3JlX1BBLCBaU2NvcmVfUCwgWlNjb3JlX1IsIFpTY29yZV9TUCwgWlNjb3JlX1NTLCBaU2NvcmVfVFMpKS8xMikgJT4lIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBvdmVyYWxsIENCUyByYXcgc2NvcmUKICBkcGx5cjo6bXV0YXRlKENCU19vdmVyYWxsUiA9IChzdW0oWlJhd19EUywgWlJhd19EVCwgWlJhd19GTSwgWlJhd19HUiwgWlJhd19NTCwgWlJhd19PT08sIFpSYXdfUEEsIFpSYXdfUCwgWlJhd19SLCBaUmF3X1NQLCBaUmF3X1NTLCBaUmF3X1RTKSkvMTIpICU+JSAKICAKICAjIyBGUk9NIEhBTVBTSElSRSBFVCBBTC4gKDIwMTIpIC0tUENBIChEQVRBLURSSVZFTikKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gU1RNIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX1NUTSA9IChzdW0oWlNjb3JlX01MLCBaU2NvcmVfUEEsIFpTY29yZV9TUywgWlNjb3JlX1RTKSkvNCkgJT4lCiAgIyBhZGQgY29tcG9zaXRlIHNjb3JlIC0tIFNUTSBDQlMgcmF3IHNjb3JlCiAgZHBseXI6Om11dGF0ZShDQlNfU1RNUiA9IChzdW0oWlJhd19NTCwgWlJhd19QQSwgWlJhd19TUywgWlJhd19UUykpLzQpICU+JQoKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gUmVhc29uaW5nIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3JlYXNvbiA9IChzdW0oWlNjb3JlX0ZNLCBaU2NvcmVfT09PLCBaU2NvcmVfUCwgWlNjb3JlX1IsIFpTY29yZV9TUCkpLzUpICU+JQogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBSZWFzb25pbmcgQ0JTIHJhdyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3JlYXNvblIgPSAoc3VtKFpSYXdfRk0sIFpSYXdfT09PLCBaUmF3X1AsIFpSYXdfUiwgWlJhd19TUCkpLzUpICU+JQoKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gVmVyYmFsIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3ZlcmJhbCA9IChzdW0oWlNjb3JlX0dSLCBaU2NvcmVfRFMsIFpTY29yZV9EVCkpLzMpICU+JQogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBWZXJiYWwgQ0JTIHJhdyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3ZlcmJhbFIgPSAoc3VtKFpSYXdfRFMsIFpSYXdfRFQsIFpSYXdfR1IpKS8zKSAlPiUKICAKICAjIyBGUk9NIENCUyBUQVNLIFNFTEVDVElPTiBHVUlERSAtLUNPTkNFUFRTIChGT1IgQ0xJTklDQUwgQVBQUykKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gTUVNT1JZIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3RzX21lbW9yeSA9IChzdW0oWlNjb3JlX01MLCBaU2NvcmVfU1MsIFpTY29yZV9UUywgWlNjb3JlX1BBKSkvNCkgJT4lIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBNRU1PUlkgQ0JTIHJhdyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3RzX21lbW9yeVIgPSAoc3VtKFpSYXdfTUwsIFpSYXdfU1MsIFpSYXdfVFMsIFpSYXdfUEEpKS80KSAlPiUgCiAgCiAgIyBhZGQgY29tcG9zaXRlIHNjb3JlIC0tIFJFQVNPTklORyBDQlMgc2NvcmUKICBkcGx5cjo6bXV0YXRlKENCU190c19yZWFzb24gPSAoc3VtKFpTY29yZV9QLCBaU2NvcmVfUiwgWlNjb3JlX09PTywgWlNjb3JlX1NQKSkvNCkgJT4lIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBSRUFTT05JTkcgQ0JTIHJhdyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3RzX3JlYXNvblIgPSAoc3VtKFpSYXdfUCwgWlJhd19SLCBaUmF3X09PTywgWlJhd19TUCkpLzQpICU+JSAKICAKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gVkVSQkFMIEFCSUxJVFkgQ0JTIHNjb3JlCiAgZHBseXI6Om11dGF0ZShDQlNfdHNfdmVyYmFsYWIgPSAoc3VtKFpTY29yZV9HUiwgWlNjb3JlX0RTKSkvMikgJT4lIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBWRVJCQUwgQUJJTElUWSBDQlMgcmF3IHNjb3JlCiAgZHBseXI6Om11dGF0ZShDQlNfdHNfdmVyYmFsYWJSID0gKHN1bShaUmF3X0dSLCBaUmF3X0RTKSkvMikgJT4lIAogIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBDT05DRU5UUkFUSU9OIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3RzX2NvbiA9IChzdW0oWlNjb3JlX0ZNLCBaU2NvcmVfRFQpKS8yKSAlPiUgCiAgIyBhZGQgY29tcG9zaXRlIHNjb3JlIC0tIENPTkNFTlRSQVRJT04gQ0JTIHJhdyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX3RzX2NvblIgPSAoc3VtKFpSYXdfRk0sIFpSYXdfRFQpKS8yKQoKYGBgCgojIyMjIE1hdHJpeCBDb21wb3NpdGUgU2NvcmVzIChBbHRlcm5hdGl2ZSkgeyNtYXRyaXhhbHR9CgpUaGVzZSBzY29yZXMgd2VyZSBjYWxjdWxhdGVkIGFzIGluIFdpbGQgZXQgYWwuICgyMDE4KSwgd2hlcmUgdGhlIG5vcm1hbGl6ZWQgc2NvcmVzIGZvciBlYWNoIENCUyB0ZXN0IGFyZSB0aGVuIHRyYW5zZm9ybWVkIGludG8gMyBzZXBhcmF0ZSBjb21wb3NpdGUgc2NvcmVzIHVzaW5nIHRoZSBmb3JtdWxhOgoKJCRZID0gWCAoQXJeKyleVCQkCndoZXJlOgoKLSAkWSQgPSAkTiQgeCAzIG1hdHJpeCBvZiB0aGUgY29tcG9zaXRlIHNjb3JlcyAoU1RNLCBSZWFzb25pbmcsIFZlcmJhbCkKLSAkWCQgPSAkTiQgeCAxMiBtYXRyaXggb2YgdGhlIDEyIENCUyB0ZXN0IHotc2NvcmVzCi0gJEFyJCA9IDEyIHggMyBtYXRyaXggb2YgdmFyaW1heC1yb3RhdGVkIGZhY3RvciB3ZWlnaHRzIC8gbG9hZGluZyBmcm9tIEhhbXBzaGlyZSBldCBhbC4gKDIwMTIpLgoKClRoZSBmYWN0b3Igc3RydWN0dXJlIHVzZWQgd2FzIGFzIGZvbGxvd3M6Cgo8Y2VudGVyPgoKIVtGYWN0b3Igc3RydWN0dXJlIHVzZWQgaW4gV2lsZCBldCBhbC4gKDIwMTgpIGZyb20gSGFtcHNoaXJlIGV0IGFsLiAoMjAxMildKC9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0ZBIHN0cnVjdHVyZSBpbiBXaWxkIGZyb20gSGFtcHNoaXJlLnBuZykKCjwvY2VudGVyPgoKVGhlcmVmb3JlLCBlYWNoIGNvbXBvc2l0ZSBzY29yZSBlbmNvbXBhc3NlcyBhbGwgMTIgQ0JTIHRlc3RzLCB3ZWlnaHRlZCBieSB0aGVpciByZXNwZWN0aXZlIGZhY3RvciBsb2FkaW5nLiAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojICMgYWRkIGNvbXBvc2l0ZSBzY29yZXMgYmFzZWQgb24gbWF0cml4IGNhbGN1bGF0aW9ucyAtLSBGT1IgTk9XIFRIRVkgUkVQTEFDRSBUSEUgT1JJR0lOQUwgU1RNLCBSRUFTT04sIGFuZCBWRVJCQUwKIyBnZXQgZGF0YSBmcm9tIG1haW5fYWxsX2RhdGFfZmluYWwKICAjIHRoaXMgaXMgdGhlICJYIiBpbiB0aGUgZXEKbWF0cml4X3Njb3JlWCA8LQogICMgdXNlICJjb250YWlucygpIiB0byB1c2UgYSBzdHJpbmcgdG8gc2VsZWN0IGJhc2VkIG9uIHRoYXQgcGF0dGVybgogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIGRwbHlyOjpzZWxlY3QoY29udGFpbnMoIlpTY29yZV8iKSkgJT4lCiAgIyByZSBvcmRlciB2YXJpYWJsZXMgdG8gbWF0Y2ggSGFtcHNoaXJlIGV0IGFsLiAoMjAxMikgZm9yIGVhc2llciBjb21wYXJpc29uLi4uCiAgc2VsZWN0KFpTY29yZV9TUywgWlNjb3JlX01MLCBaU2NvcmVfVFMsIFpTY29yZV9QQSwgWlNjb3JlX1NQLCBaU2NvcmVfUiwgWlNjb3JlX0ZNLCBaU2NvcmVfUCwgWlNjb3JlX09PTywgWlNjb3JlX0RTLCBaU2NvcmVfR1IsIFpTY29yZV9EVCkKCiMgdHJhbnNwb3NlIHRoZSBtYXRyaXggc28gdGhhdCBpdCBpcyAxMiByb3dzIGJ5IE4gY29scyAKICAjIHRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsCm1hdHJpeF9zY29yZVggPC0gdChhcy5tYXRyaXgobWF0cml4X3Njb3JlWCkpCgojIG1ha2UgbWF0cml4IHdpdGggZmFjdG9yIHN0cnVjdHVyZSAKICAjIHJlc3VsdCBpcyBhIG1hdHJpeCB3aXRoIDEyIHJvd3MgYW5kIDMgY29sdW1ucywgd2hpY2ggZGVwaWN0IHRoZSBsb2FkaW5ncyBmb3IgU1RNLCBSZWFzb25pbmcsIGFuZCBWZXJiYWwKICAjIHRoaXMgaXMgdGhlICJBcisiIGluIHRoZSBlcQptYXRyaXhfZmFjdG9yQXIgPC0gY2JpbmQoYyguNzAsIC43MCwgLjYwLCAuNjAsIC40MCwgLjEyLCAuMDAsIC4yMCwgLjE3LCAuMjIsIC4wNiwgLjI3KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjKC4yMSwgLjIzLCAuMTgsIC0uMDMsIC40NiwgLjY3LCAuNTIsIC41NSwgLjU1LCAuMzUsIC4zMiwgLS4yMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgYyguMDYsIC4wNSwgLjE4LCAuMjMsIC4wNCwgLjA5LCAuMzQsIC0uMTEsIC4yMiwgLjUzLCAuNjYsIC43MSkpCgojIGNhbGN1bGF0ZSB0aGUgY29tcG9zaXRlIHNjb3JlcyB1c2luZyB0aGUgZXF1YXRpb24KICAjIHRoaXMgdXNlZCBtYXRyaXggbXVsdGlwbGljYXRpb24gKGkuZS4sIGEgZG90IHByb2R1Y3QgYi93IHRoZSAyIG1hdHJpY2VzKQogICMgdGhpcyBpcyB0aGUgIlkiIGluIHRoZSBlcQpzY29yZXNZIDwtIHQodChtYXRyaXhfZmFjdG9yQXIpICUqJSBtYXRyaXhfc2NvcmVYKQogICMgbWFrZSBzY29yZXMgYSB0aWJibGUKICBzY29yZXNZIDwtIGFzLnRpYmJsZShzY29yZXNZKQogICMgcmVuYW1lIGNvbHMKICBjb2xuYW1lcyhzY29yZXNZKSA8LSBjKCJDQlNfU1RNIiwgIkNCU19yZWFzb24iLCAiQ0JTX3ZlcmJhbCIpCgojIG1ha2UgbmV3IG1haW4gZGF0YSBmaWxlIHRvIGJlIHVzZWQgd2l0aCB0aGlzIGRhdGEgKGlmIG5lZWRlZCkKICAjIG5hbWVkOiAibWFpbl9hbGxfZGF0YV9maW5hbF93aWxkIgoKICAjIGZpcnN0LCBjb3B5IHRoZSBmaW5hbCBkYXRhIHNldAogIG1haW5fYWxsX2RhdGFfZmluYWxfd2lsZCA8LSBtYWluX2FsbF9kYXRhX2ZpbmFsCiAgCiAgIyBuZXh0LCByZXBsYWNlIHRoZSBleGlzdGluZyBDQlNfU1RNLCBDQlNfcmVhc29uLCBhbmQgQ0JTX3ZlcmJhbCB3aXRoIG5ldyB2ZXJzaW9ucwogIG1haW5fYWxsX2RhdGFfZmluYWxfd2lsZCRDQlNfU1RNID0gc2NvcmVzWSRDQlNfU1RNCiAgbWFpbl9hbGxfZGF0YV9maW5hbF93aWxkJENCU19yZWFzb24gPSBzY29yZXNZJENCU19yZWFzb24KICBtYWluX2FsbF9kYXRhX2ZpbmFsX3dpbGQkQ0JTX3ZlcmJhbCA9IHNjb3Jlc1kkQ0JTX3ZlcmJhbAoKIyB1c2UgdG8gcXVpY2tseSB2aWV3IGFsbCBjb21wb3NpdGUgc2NvcmVzIGZyb20gZmluYWwgJiBmaW5hbCB0ZW1wIGRhdGEgZmlsZXMgKHRvIHZpc3VhbGx5IGluc3BlY3QpCiAgIyBjYmluZChtYWluX2FsbF9kYXRhX2ZpbmFsJHBhcnRpY2lwYW50LCAKICAjICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWwkQ0JTX1NUTSwgCiAgIyAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsX3dpbGQkQ0JTX1NUTSwKICAjICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWwkQ0JTX3JlYXNvbiwgCiAgIyAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsX3dpbGQkQ0JTX3JlYXNvbiwKICAjICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWwkQ0JTX3ZlcmJhbCwgCiAgIyAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsX3dpbGQkQ0JTX3ZlcmJhbCkKCmBgYAoKCiMgRGVzY3JpcHRpdmVzCgojIyBOT01JTkFMIChzdHVkeSAxICYgc3R1ZHkgMikKIyMjIERlbW9ncmFwaGljICYgVHlwaWNhbCBTbWFydHBob25lIFVzZQoKYGBge3J9CgojIG91dHB1dCBpcyBhIGxpc3Qgb2YgdGliYmxlcywgZWFjaCB3aXRoOiAkeHh4ID0gdmFyIG5hbWUsIHggPSBsZXZlbChzKSwgbiA9IGNvdW50LCBwY3QgPSBwZXJjZW50YWdlCgojIyBGT1IgUElMT1QgREFUQQpwaWxvdF9ub21fZGVtbyA8LSAKICBwaWxvdF9zdXJfZGF0YSAlPiUgCiAgIyBnZXQgc3Vic2V0IG9mIGRhdGEgd2l0aCBvbmx5IG5vbWluYWwgdmFycwogIHNlbGVjdChnZW5kZXIsIGxhbmcsIHByb2YsIHByb2dyYW0sIHllYXIsIGFwcF9tb3N0X3VzZWQsIGlwaG9uZSwgU1RfYXBwX21vc3RfdXNlZCwgU1RfYXBwX3RleHRfbWVzczpwaGFudG9tLCBkaXN0X2RldmljZSwgZGlzdF9kZXZpY2Vfc3R1ZHl3b3JrLCBkaXN0X2RldmljZV9zb2NpYWwsIGxvY190eXBpY2FsOmxvY19zb2NpYWwsIGNvbW11bmljYXRlLCBwaG9uZV91c2UpICU+JSAKICAjIGdldCBmcmVxICYgcHJvcG9ydGlvbiBmb3IgZWFjaCB2YXIKICBwdXJycjo6bWFwKH4gY291bnQodGliYmxlKHggPSAueCksIHgpICU+JSAKICAgICAgICAgICAgICAgbXV0YXRlKHBjdCA9IChuIC8gc3VtKG4pICogMTAwKSkpCgojIG1ha2UgbGlzdCBpbnRvIDEgbG9uZyBkYXRhIGZyYW1lIHRvIHNob3cgYXMgdGFibGUuLi4KcGlsb3Rfbm9tX2RlbW9fdCA8LSAKICAjIHRoaXMga2VlcHMgdGhlIHZhciBuYW1lIGluIHRoZSAxc3QgY29sdW1uICh1c2luZy0tIC5pZCA9ICJ0aWIiKQogIG1hcF9kZnIocGlsb3Rfbm9tX2RlbW8sIGJpbmRfcm93cywgLmlkID0gInRpYiIpCgojICMjIEZPUiBQSUxPVCBEQVRBCiMgcGlsb3Rfbm9tX2RlbW8gPC0gCiMgICBwaWxvdF9zdXJfZGF0YSAlPiUgCiMgICAjIGdldCBzdWJzZXQgb2YgZGF0YSB3aXRoIG9ubHkgbm9taW5hbCB2YXJzCiMgICBzZWxlY3QoZ2VuZGVyLCBsYW5nLCBwcm9mLCBwcm9ncmFtLCB5ZWFyLCBhcHBfbW9zdF91c2VkLCBpcGhvbmUsIFNUX2FwcF9tb3N0X3VzZWQsIFNUX2FwcF90ZXh0X21lc3M6cGhhbnRvbSwgZGlzdF9kZXZpY2UsIGRpc3RfZGV2aWNlX3N0dWR5d29yaywgZGlzdF9kZXZpY2Vfc29jaWFsLCBsb2NfdHlwaWNhbDpsb2Nfc29jaWFsLCBjb21tdW5pY2F0ZSwgcGhvbmVfdXNlKSAlPiUgCiMgICBzdW1tYXJpc2UoYWNyb3NzKGdlbmRlcjpwaG9uZV91c2UsIGNvdW50KSkKIyAgIG1hcChjb3VudCkgJT4lIAojICAgbGFwcGx5KHgsIG11dGF0ZShwZXJjZW50ID0gKGZyZXEvc3VtKGZyZXEpKjEwMCkpKQojICAgbWFwKHgsIG11dGF0ZShwZXJjZW50ID0gKGZyZXEvc3VtKGZyZXEpKjEwMCkpKQojICAgbXV0YXRlKHBlcmNlbnQgPSApCiMgICAKIyAgIAojICAgc3VtbWFyaXNlKG4gPSBuKCkpCiMgICAjIGdldCBmcmVxICYgcHJvcG9ydGlvbiBmb3IgZWFjaCB2YXIKIyAgICMgcHVycnI6Om1hcCh+IGNvdW50KHRpYmJsZSh4ID0gLngpLCB4KSAlPiUgCiMgICAjICAgICAgICAgICAgICBtdXRhdGUocGN0ID0gKG4gLyBzdW0obikgKiAxMDApKSkKIyAKIyAjIHkgPC0geCAlPiUgCiMgICBwdXJycjo6bWFwKGNvdW50LCApCiMgCiMgIyBtYWtlIGxpc3QgaW50byAxIGxvbmcgZGF0YSBmcmFtZSB0byBzaG93IGFzIHRhYmxlLi4uCiMgcGlsb3Rfbm9tX2RlbW9fdCA8LSAKIyAgICMgdGhpcyBrZWVwcyB0aGUgdmFyIG5hbWUgaW4gdGhlIDFzdCBjb2x1bW4gKHVzaW5nLS0gLmlkID0gInRpYiIpCiMgICBtYXBfZGZyKHBpbG90X25vbV9kZW1vLCBiaW5kX3Jvd3MsIC5pZCA9ICJ0aWIiKQoKCgojIyBGT1IgTUFJTiBEQVRBIC0tIE9WRVJBTEwKbWFpbl9ub21fZGVtbyA8LSAKbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgIyBnZXQgc3Vic2V0IG9mIG5vbWluYWwgdmFycwogIHNlbGVjdChjb25kaXRpb24sIGdlbmRlciwgbGFuZywgcHJvZiwgcHJvZ3JhbSwgeWVhciwgQ0JTX2tub3csIENCU19kb25lX3Rhc2tzLCBhcHBfbW9zdF91c2VkLCBpcGhvbmUsIFNUX2FwcF9tb3N0X3VzZWQsIFNUX2FwcF90ZXh0X21lc3M6cGhhbnRvbSwgZGlzdF9kZXZpY2UsIGRpc3RfZGV2aWNlX3N0dWR5d29yaywgZGlzdF9kZXZpY2Vfc29jaWFsLCBsb2NfdHlwaWNhbDpsb2Nfc29jaWFsLCBjb21tdW5pY2F0ZSwgcGhvbmVfdXNlKSAlPiUgCiAgcHVycnI6Om1hcCh+IGNvdW50KHRpYmJsZSh4ID0gLngpLCB4KSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHBjdCA9IChuIC8gc3VtKG4pICogMTAwKSkpCiMgbWFrZSBsaXN0IGludG8gMSBsb25nIGRhdGEgZnJhbWUgdG8gc2hvdyBhcyB0YWJsZS4uLgptYWluX25vbV9kZW1vX3QgPC0gCiAgIyB0aGlzIGtlZXBzIHRoZSB2YXIgbmFtZSBpbiB0aGUgMXN0IGNvbHVtbiAodXNpbmctLSAuaWQgPSAidGliIikKICBtYXBfZGZyKG1haW5fbm9tX2RlbW8sIGJpbmRfcm93cywgLmlkID0gInRpYiIpCgojIyBGT1IgTUFJTiBEQVRBIC0tIERFU0sKbWFpbl9ub21fZGVtb19kZXNrIDwtIAptYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICAjIGdldCBzdWJzZXQgb2Ygbm9taW5hbCB2YXJzCiAgc2VsZWN0KGNvbmRpdGlvbiwgZ2VuZGVyLCBsYW5nLCBwcm9mLCBwcm9ncmFtLCB5ZWFyLCBDQlNfa25vdywgQ0JTX2RvbmVfdGFza3MsIGFwcF9tb3N0X3VzZWQsIGlwaG9uZSwgU1RfYXBwX21vc3RfdXNlZCwgU1RfYXBwX3RleHRfbWVzczpwaGFudG9tLCBkaXN0X2RldmljZSwgZGlzdF9kZXZpY2Vfc3R1ZHl3b3JrLCBkaXN0X2RldmljZV9zb2NpYWwsIGxvY190eXBpY2FsOmxvY19zb2NpYWwsIGNvbW11bmljYXRlLCBwaG9uZV91c2UpICU+JSAKICAjIGZvciBkZXNrIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKSAlPiUgCiAgcHVycnI6Om1hcCh+IGNvdW50KHRpYmJsZSh4ID0gLngpLCB4KSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHBjdCA9IChuIC8gc3VtKG4pICogMTAwKSkpCiMgbWFrZSBsaXN0IGludG8gMSBsb25nIGRhdGEgZnJhbWUgdG8gc2hvdyBhcyB0YWJsZS4uLgptYWluX25vbV9kZW1vX2Rlc2tfdCA8LSAKICAjIHRoaXMga2VlcHMgdGhlIHZhciBuYW1lIGluIHRoZSAxc3QgY29sdW1uICh1c2luZy0tIC5pZCA9ICJ0aWIiKQogIG1hcF9kZnIobWFpbl9ub21fZGVtb19kZXNrLCBiaW5kX3Jvd3MsIC5pZCA9ICJ0aWIiKQoKIyMgRk9SIE1BSU4gREFUQSAtLSBQT0NLRVQvQkFHCm1haW5fbm9tX2RlbW9fcGIgPC0gCm1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogICMgZ2V0IHN1YnNldCBvZiBub21pbmFsIHZhcnMKICBzZWxlY3QoY29uZGl0aW9uLCBnZW5kZXIsIGxhbmcsIHByb2YsIHByb2dyYW0sIHllYXIsIENCU19rbm93LCBDQlNfZG9uZV90YXNrcywgYXBwX21vc3RfdXNlZCwgaXBob25lLCBTVF9hcHBfbW9zdF91c2VkLCBTVF9hcHBfdGV4dF9tZXNzOnBoYW50b20sIGRpc3RfZGV2aWNlLCBkaXN0X2RldmljZV9zdHVkeXdvcmssIGRpc3RfZGV2aWNlX3NvY2lhbCwgbG9jX3R5cGljYWw6bG9jX3NvY2lhbCwgY29tbXVuaWNhdGUsIHBob25lX3VzZSkgJT4lIAogICMgZm9yIHBvY2tldC9iYWcgY29uZGl0aW9uCiAgZmlsdGVyKGNvbmRpdGlvbiA9PSAicG9ja2V0L2JhZyIpICU+JSAKICBwdXJycjo6bWFwKH4gY291bnQodGliYmxlKHggPSAueCksIHgpICU+JQogICAgICAgICAgICAgICBtdXRhdGUocGN0ID0gKG4gLyBzdW0obikgKiAxMDApKSkKIyBtYWtlIGxpc3QgaW50byAxIGxvbmcgZGF0YSBmcmFtZSB0byBzaG93IGFzIHRhYmxlLi4uCm1haW5fbm9tX2RlbW9fcGJfdCA8LSAKICAjIHRoaXMga2VlcHMgdGhlIHZhciBuYW1lIGluIHRoZSAxc3QgY29sdW1uICh1c2luZy0tIC5pZCA9ICJ0aWIiKQogIG1hcF9kZnIobWFpbl9ub21fZGVtb19wYiwgYmluZF9yb3dzLCAuaWQgPSAidGliIikKCiMjIEZPUiBNQUlOIERBVEEgLS0gT1VUU0lERQptYWluX25vbV9kZW1vX291dCA8LSAKbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgIyBnZXQgc3Vic2V0IG9mIG5vbWluYWwgdmFycwogIHNlbGVjdChjb25kaXRpb24sIGdlbmRlciwgbGFuZywgcHJvZiwgcHJvZ3JhbSwgeWVhciwgQ0JTX2tub3csIENCU19kb25lX3Rhc2tzLCBhcHBfbW9zdF91c2VkLCBpcGhvbmUsIFNUX2FwcF9tb3N0X3VzZWQsIFNUX2FwcF90ZXh0X21lc3M6cGhhbnRvbSwgZGlzdF9kZXZpY2UsIGRpc3RfZGV2aWNlX3N0dWR5d29yaywgZGlzdF9kZXZpY2Vfc29jaWFsLCBsb2NfdHlwaWNhbDpsb2Nfc29jaWFsLCBjb21tdW5pY2F0ZSwgcGhvbmVfdXNlKSAlPiUgCiAgIyBmb3IgcG9ja2V0L2JhZyBjb25kaXRpb24KICBmaWx0ZXIoY29uZGl0aW9uID09ICJvdXRzaWRlIikgJT4lIAogIHB1cnJyOjptYXAofiBjb3VudCh0aWJibGUoeCA9IC54KSwgeCkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZShwY3QgPSAobiAvIHN1bShuKSAqIDEwMCkpKQojIG1ha2UgbGlzdCBpbnRvIDEgbG9uZyBkYXRhIGZyYW1lIHRvIHNob3cgYXMgdGFibGUuLi4KbWFpbl9ub21fZGVtb19vdXRfdCA8LSAKICAjIHRoaXMga2VlcHMgdGhlIHZhciBuYW1lIGluIHRoZSAxc3QgY29sdW1uICh1c2luZy0tIC5pZCA9ICJ0aWIiKQogIG1hcF9kZnIobWFpbl9ub21fZGVtb19vdXQsIGJpbmRfcm93cywgLmlkID0gInRpYiIpCmBgYAoKYGBge3J9CmthYmxlKHBpbG90X25vbV9kZW1vX3QsIGNhcHRpb24gPSAiRnJlcXVlbmN5ICYgcGVyY2VudGFnZSBmb3Igbm9taW5hbCB2YXJzIC0gZGVtby0gU1RVRFkgMS4iLCBhbGlnbiA9IHJlcCgnY3JjYycpLCBjb2wubmFtZXMgPSBjKCJWYXIiLCAibGV2ZWwiICwibiIsICIlIiksIHJvdy5uYW1lcyA9IFRSVUUpICU+JSAKICBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUocGx5cjo6Y291bnQoYXMuZmFjdG9yKHBpbG90X3N1cl9kYXRhJGxhbmdPKSksIGNhcHRpb24gPSAiRnJlcXVlbmN5IGZvciBub21pbmFsIHZhcnMgLSBMQU5HIE9USEVSLSBTVFVEWSAxLiIsIGFsaWduID0gcmVwKCdjcmNjJyksIGNvbC5uYW1lcyA9IGMoIkxhbmd1YWdlIiwgImZyZXEiKSwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGZvb3Rub3RlKGdlbmVyYWwgPSAiVGhlcmUgd2FzIG5vIHRhc2sgY29tcGxldGVkIGR1cmluZyBzdHVkeSAxLiIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShtYWluX25vbV9kZW1vX3QsIGNhcHRpb24gPSAiRnJlcXVlbmN5ICYgcGVyY2VudGFnZSBmb3Igbm9taW5hbCB2YXJzIC0gZGVtby0gU1RVRFkgMiBPVkVSQUxMIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgY29sLm5hbWVzID0gYygiVmFyIiwgImxldmVsIiAsIm4iLCAiJSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKG1haW5fbm9tX2RlbW9fZGVza190LCBjYXB0aW9uID0gIkZyZXF1ZW5jeSAmIHBlcmNlbnRhZ2UgZm9yIG5vbWluYWwgdmFycyAtIGRlbW8tIFNUVURZIDIgLSBERVNLIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgY29sLm5hbWVzID0gYygiVmFyIiwgImxldmVsIiAsIm4iLCAiJSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKG1haW5fbm9tX2RlbW9fcGJfdCwgY2FwdGlvbiA9ICJGcmVxdWVuY3kgJiBwZXJjZW50YWdlIGZvciBub21pbmFsIHZhcnMgLSBkZW1vLSBTVFVEWSAyIC0gUE9DS0VUL0JBRyIsIGFsaWduID0gcmVwKCdjcmNjJyksIGNvbC5uYW1lcyA9IGMoIlZhciIsICJsZXZlbCIgLCJuIiwgIiUiKSwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGZvb3Rub3RlKGdlbmVyYWwgPSAiVGhlcmUgd2FzIG5vIHRhc2sgY29tcGxldGVkIGR1cmluZyBzdHVkeSAxLiIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShtYWluX25vbV9kZW1vX291dF90LCBjYXB0aW9uID0gIkZyZXF1ZW5jeSAmIHBlcmNlbnRhZ2UgZm9yIG5vbWluYWwgdmFycyAtIGRlbW8tIFNUVURZIDIgLSBPVVRTSURFIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgY29sLm5hbWVzID0gYygiVmFyIiwgImxldmVsIiAsIm4iLCAiJSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHBseXI6OmNvdW50KGFzLmZhY3RvcihtYWluX2FsbF9kYXRhX2ZpbmFsJGxhbmdPKSksIAogIGNhcHRpb24gPSAiRnJlcXVlbmN5IGZvciBub21pbmFsIHZhcnMgLSBMQU5HIE9USEVSLSBTVFVEWSAyIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgY29sLm5hbWVzID0gYygiTGFuZ3VhZ2UiLCAiZnJlcSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHBseXI6OmNvdW50KG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIHNlbGVjdChDQlNfa25vdywgQ0JTX2RvbmVfdGFza3MpKSwgCiAgY2FwdGlvbiA9ICJGcmVxdWVuY3kgZm9yIG5vbWluYWwgdmFycyAtIGRlbW8tIFNUVURZIDIgLSBDQlMgS05PVy9ET05FIHF1ZXMgbWl4ZWQiLCBhbGlnbiA9IHJlcCgnY3JjYycpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHBseXI6OmNvdW50KG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIHNlbGVjdChDQlNfa25vdykpLCAKICBjYXB0aW9uID0gIkZyZXF1ZW5jeSBmb3Igbm9taW5hbCB2YXJzIC0gZGVtby0gU1RVRFkgMiAtIENCUyBLTk9XIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGZvb3Rub3RlKGdlbmVyYWwgPSAiVGhlcmUgd2FzIG5vIHRhc2sgY29tcGxldGVkIGR1cmluZyBzdHVkeSAxLiIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShwbHlyOjpjb3VudChtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSBzZWxlY3QoQ0JTX2RvbmVfdGFza3MpKSwgCiAgY2FwdGlvbiA9ICJGcmVxdWVuY3kgZm9yIG5vbWluYWwgdmFycyAtIGRlbW8tIFNUVURZIDIgLSBDQlMgRE9ORSIsIGFsaWduID0gcmVwKCdjcmNjJyksIHJvdy5uYW1lcyA9IFRSVUUpICU+JSAKICBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyBleHBvcnQgdGFibGVzIGFzIGNzdiBmaWxlcwogICMgd3JpdGUuY3N2KHBpbG90X25vbV9kZW1vX3QsIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvcGlsb3Rfbm9tX2RlbW9fdC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihwbHlyOjpjb3VudChhcy5mYWN0b3IocGlsb3Rfc3VyX2RhdGEkbGFuZ08pKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9waWxvdF9ub21fZGVtb190X2xhbmdfY291bnQuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCiAgIyB3cml0ZS5jc3YobWFpbl9ub21fZGVtb190LCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fbm9tX2RlbW9fdC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihtYWluX25vbV9kZW1vX2Rlc2tfdCwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX25vbV9kZW1vX2Rlc2tfdC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihtYWluX25vbV9kZW1vX3BiX3QsIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9ub21fZGVtb19wYl90LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KG1haW5fbm9tX2RlbW9fb3V0X3QsIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9ub21fZGVtb19vdXRfdC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAoKIyMjIFF1ZXN0aW9ubmFpcmVzIChsZXZlbHMpCmBgYHtyfQoKIyBvdXRwdXQgaXMgYSBsaXN0IG9mIHRpYmJsZXMsIGVhY2ggd2l0aDogJHh4eCA9IHZhciBuYW1lLCB4ID0gbGV2ZWwocyksIG4gPSBjb3VudCwgcGN0ID0gcGVyY2VudGFnZQoKIyMgRk9SIFBJTE9UIERBVEEKcGlsb3Rfbm9tX3F1ZXMgPC0gCiAgcGlsb3Rfc3VyX2RhdGEgJT4lIAogICMgZ2V0IHN1YnNldCBvZiBkYXRhIHdpdGggb25seSBub21pbmFsIHZhcnMKICBzZWxlY3QoTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2FjY2Vzc19zdW0sIFNBRF9kaXN0X3N1bSkgJT4lIAogICMgZGl2aWRlIHN1bSBzY29yZXMgaW50byBMPk0+SAogICAjIGRldGFpbHMgcHJvdmlkZWQgZm9yIDFzdCBpbnN0YW5jZS4uLiAKICBtdXRhdGUoTk1QUV9zdW0gPSAjIG5hbWUgb2YgdmFyLCB0aGlzIHJlcGxhY2VzIGV4aXN0aW5nIGIvYyBpdHMgdGhlIHNhbWUKICAgICAgICAgICBjdXQoTk1QUV9zdW0sICMgc3RhdGUgdmFyIAogICAgICAgICAgICAgICBicmVha3MgPSBzZXEoMjAsIDE0MCwgNDApLCAjIHRoaXMgaXMgcHJvdmlkaW5nIGEgc2VxIGZyb20gMjAgPj4gMTQwLCB3aXRoIGJyZWFrcyBvZiA0MCAoNDAgZGV0IGJ5IGJyZWFraW5nIHVwIHRoZSByYW5nZSBpbnRvIDM6IDE0MC0yMCA9IDEyMCwgMTIwLzMgPSA0MCkKICAgICAgICAgICAgICAgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JSAjIHN0YXRlIHRoZSBuZXcgbGFiZWxzIGZvciB0aGUgbGV2ZWxzCiAgbXV0YXRlKE1QSVFfc3VtID0gY3V0KE1QSVFfc3VtLCBicmVha3MgPSBzZXEoOCwgNTYsIDE2KSwgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JSAKICBtdXRhdGUoTVBJUV9TSV9zdW0gPSBjdXQoTVBJUV9TSV9zdW0sIGJyZWFrcyA9IHNlcSgzLCAyMSwgNiksIGxhYmVscyA9IGMoImxvdyIsICJtb2RlcmF0ZSIsICJoaWdoIikpKSAlPiUgCiAgbXV0YXRlKE1QSVFfVkZPX3N1bSA9IGN1dChNUElRX1ZGT19zdW0sIGJyZWFrcyA9IHNlcSgzLCAyMSwgNiksIGxhYmVscyA9IGMoImxvdyIsICJtb2RlcmF0ZSIsICJoaWdoIikpKSAlPiUgCiAgbXV0YXRlKFNBRF9zdW0gPSBjdXQoU0FEX3N1bSwgYnJlYWtzID0gc2VxKDEzLCA5MSwgMjYpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lIAogIG11dGF0ZShTQURfZGVwX3N1bSA9IGN1dChTQURfZGVwX3N1bSwgYnJlYWtzID0gc2VxKDMsIDIxLCA2KSwgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JSAKICBtdXRhdGUoU0FEX2VhX3N1bSA9IGN1dChTQURfZWFfc3VtLCBicmVha3MgPSBzZXEoNCwgMjgsIDgpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lIAogIG11dGF0ZShTQURfYWNjZXNzX3N1bSA9IGN1dChTQURfYWNjZXNzX3N1bSwgYnJlYWtzID0gc2VxKDMsIDIxLCA2KSwgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JQogIG11dGF0ZShTQURfZGlzdF9zdW0gPSBjdXQoU0FEX2Rpc3Rfc3VtLCBicmVha3MgPSBzZXEoMiwgMTQsIDQpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lIAogICMgZ2V0IGZyZXEgJiBwcm9wb3J0aW9uIGZvciBlYWNoIHZhcgogIHB1cnJyOjptYXAofiBjb3VudCh0aWJibGUoeCA9IC54KSwgeCkgJT4lIAogICAgICAgICAgICAgICBtdXRhdGUocGN0ID0gKG4gLyBzdW0obikgKiAxMDApKSkKCiMgbWFrZSBsaXN0IGludG8gMSBsb25nIGRhdGEgZnJhbWUgdG8gc2hvdyBhcyB0YWJsZS4uLgpwaWxvdF9ub21fcXVlc190IDwtIAogICMgdGhpcyBrZWVwcyB0aGUgdmFyIG5hbWUgaW4gdGhlIDFzdCBjb2x1bW4gKHVzaW5nLS0gLmlkID0gInRpYiIpCiAgbWFwX2RmcihwaWxvdF9ub21fcXVlcywgYmluZF9yb3dzLCAuaWQgPSAidGliIikKCgojIyBGT1IgTUFJTiBEQVRBCm1haW5fbm9tX3F1ZXMgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgIyBnZXQgc3Vic2V0IG9mIGRhdGEgd2l0aCBvbmx5IG5vbWluYWwgdmFycwogIHNlbGVjdChOTVBRX3N1bSwgTVBJUV9zdW0sIE1QSVFfU0lfc3VtLCBNUElRX1ZGT19zdW0sIFNBRF9zdW0sIFNBRF9kZXBfc3VtLCBTQURfZWFfc3VtLCBTQURfYWNjZXNzX3N1bSwgU0FEX2Rpc3Rfc3VtKSAlPiUgCiAgIyBkaXZpZGUgc3VtIHNjb3JlcyBpbnRvIEw+TT5ICiAgICMgZGV0YWlscyBwcm92aWRlZCBmb3IgMXN0IGluc3RhbmNlLi4uIAogIG11dGF0ZShOTVBRX3N1bSA9ICMgbmFtZSBvZiB2YXIsIHRoaXMgcmVwbGFjZXMgZXhpc3RpbmcgYi9jIGl0cyB0aGUgc2FtZQogICAgICAgICAgIGN1dChOTVBRX3N1bSwgIyBzdGF0ZSB2YXIgCiAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgyMCwgMTQwLCA0MCksICMgdGhpcyBpcyBwcm92aWRpbmcgYSBzZXEgZnJvbSAyMCA+PiAxNDAsIHdpdGggYnJlYWtzIG9mIDQwICg0MCBkZXQgYnkgYnJlYWtpbmcgdXAgdGhlIHJhbmdlIGludG8gMzogMTQwLTIwID0gMTIwLCAxMjAvMyA9IDQwKQogICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lICMgc3RhdGUgdGhlIG5ldyBsYWJlbHMgZm9yIHRoZSBsZXZlbHMKICBtdXRhdGUoTVBJUV9zdW0gPSBjdXQoTVBJUV9zdW0sIGJyZWFrcyA9IHNlcSg4LCA1NiwgMTYpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lIAogIG11dGF0ZShNUElRX1NJX3N1bSA9IGN1dChNUElRX1NJX3N1bSwgYnJlYWtzID0gc2VxKDMsIDIxLCA2KSwgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JSAKICBtdXRhdGUoTVBJUV9WRk9fc3VtID0gY3V0KE1QSVFfVkZPX3N1bSwgYnJlYWtzID0gc2VxKDMsIDIxLCA2KSwgbGFiZWxzID0gYygibG93IiwgIm1vZGVyYXRlIiwgImhpZ2giKSkpICU+JSAKICBtdXRhdGUoU0FEX3N1bSA9IGN1dChTQURfc3VtLCBicmVha3MgPSBzZXEoMTMsIDkxLCAyNiksIGxhYmVscyA9IGMoImxvdyIsICJtb2RlcmF0ZSIsICJoaWdoIikpKSAlPiUgCiAgbXV0YXRlKFNBRF9kZXBfc3VtID0gY3V0KFNBRF9kZXBfc3VtLCBicmVha3MgPSBzZXEoMywgMjEsIDYpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lIAogIG11dGF0ZShTQURfZWFfc3VtID0gY3V0KFNBRF9lYV9zdW0sIGJyZWFrcyA9IHNlcSg0LCAyOCwgOCksIGxhYmVscyA9IGMoImxvdyIsICJtb2RlcmF0ZSIsICJoaWdoIikpKSAlPiUgCiAgbXV0YXRlKFNBRF9hY2Nlc3Nfc3VtID0gY3V0KFNBRF9hY2Nlc3Nfc3VtLCBicmVha3MgPSBzZXEoMywgMjEsIDYpLCBsYWJlbHMgPSBjKCJsb3ciLCAibW9kZXJhdGUiLCAiaGlnaCIpKSkgJT4lCiAgbXV0YXRlKFNBRF9kaXN0X3N1bSA9IGN1dChTQURfZGlzdF9zdW0sIGJyZWFrcyA9IHNlcSgyLCAxNCwgNCksIGxhYmVscyA9IGMoImxvdyIsICJtb2RlcmF0ZSIsICJoaWdoIikpKSAlPiUgIAogICMgZ2V0IGZyZXEgJiBwcm9wb3J0aW9uIGZvciBlYWNoIHZhcgogIHB1cnJyOjptYXAofiBjb3VudCh0aWJibGUoeCA9IC54KSwgeCkgJT4lIAogICAgICAgICAgICAgICBtdXRhdGUocGN0ID0gKG4gLyBzdW0obikgKiAxMDApKSkKCiMgbWFrZSBsaXN0IGludG8gMSBsb25nIGRhdGEgZnJhbWUgdG8gc2hvdyBhcyB0YWJsZS4uLgptYWluX25vbV9xdWVzX3QgPC0gCiAgIyB0aGlzIGtlZXBzIHRoZSB2YXIgbmFtZSBpbiB0aGUgMXN0IGNvbHVtbiAodXNpbmctLSAuaWQgPSAidGliIikKICBtYXBfZGZyKG1haW5fbm9tX3F1ZXMsIGJpbmRfcm93cywgLmlkID0gInRpYiIpCmBgYAoKYGBge3J9CmthYmxlKHBpbG90X25vbV9xdWVzX3QsIGNhcHRpb24gPSAiRnJlcXVlbmN5ICYgcGVyY2VudGFnZSBmb3Igbm9taW5hbCB2YXJzIC0gcXVlcy0gU1RVRFkgMS4iLCBhbGlnbiA9IHJlcCgnY3JjYycpLCBjb2wubmFtZXMgPSBjKCJWYXIiLCAibGV2ZWwiICwibiIsICIlIiksIHJvdy5uYW1lcyA9IFRSVUUpICU+JSAKICBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUobWFpbl9ub21fcXVlc190LCBjYXB0aW9uID0gIkZyZXF1ZW5jeSAmIHBlcmNlbnRhZ2UgZm9yIG5vbWluYWwgdmFycyAtIHF1ZXMtIFNUVURZIDIgLSBPVkVSQUxMIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgY29sLm5hbWVzID0gYygiVmFyIiwgImxldmVsIiAsIm4iLCAiJSIpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKYGBgCiMjIENPTlRJTlVPVVMgZGF0YSAocGlsb3QgJiBtYWluKQojIyMgRGVtb2dyYXBoaWMgJiBUeXBpY2FsIFNtYXJ0cGhvbmUgVXNlICAgCgpgYGB7cn0KIyMgRk9SIFBJTE9UCnBpbG90X2NvbnRfZGVtbyA8LSAKICBwaWxvdF9zdXJfZGF0YSAlPiUgCiAgIyBzZWxlY3QgY29udGludW91cyB2YXJzCiAgc2VsZWN0KGFnZSwgYWdlX2ZpcnN0X3Bob25lLCBkaXN0X2RhaWx5LCBkaXN0X3N0dWR5LCBwb3dfbm90X3VzaW5nOnBvd19zbGVlcCwgY29tX2dlbjpjb21fcm9vbV90YXNrKSAlPiUgCiAgIyBhcHBseSBkZXNjcmliZSBmbiBmb3I6IG4gIG1lYW4gICBzZCBtZWRpYW4gdHJpbW1lZCAgbWFkIG1pbiBtYXggcmFuZ2UgIHNrZXcga3VydG9zaXMgICBzZQogIHBzeWNoOjpkZXNjcmliZSgpCgojIyBGT1IgTUFJTiAtLSBPVkVSQUxMCm1haW5fY29udF9kZW1vIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIGFnZSwgYWdlX2ZpcnN0X3Bob25lLCBkaXN0X2RhaWx5LCBkaXN0X3N0dWR5LCBwb3dfbm90X3VzaW5nOnBvd19zbGVlcCwgY29tX2dlbjpjb21fcm9vbV90YXNrKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCiMjIEZPUiBNQUlOIC0tIERFU0sKbWFpbl9jb250X2RlbW9fZGVzayA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgcG93X25vdF91c2luZzpwb3dfc2xlZXAsIGNvbV9nZW46Y29tX3Jvb21fdGFzaykgJT4lIAogICMgb25seSBkZXNrIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCiMjIEZPUiBNQUlOIC0tIFBPQ0tFVC9CQUcKbWFpbl9jb250X2RlbW9fcGIgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgYWdlLCBhZ2VfZmlyc3RfcGhvbmUsIGRpc3RfZGFpbHksIGRpc3Rfc3R1ZHksIHBvd19ub3RfdXNpbmc6cG93X3NsZWVwLCBjb21fZ2VuOmNvbV9yb29tX3Rhc2spICU+JSAKICAjIG9ubHkgcG9ja2V0L2JhZyBjb25kaXRpb24KICBmaWx0ZXIoY29uZGl0aW9uID09ICJwb2NrZXQvYmFnIikgJT4lIAogIHBzeWNoOjpkZXNjcmliZSgpCgojIyBGT1IgTUFJTiAtLSBPVVRTSURFCm1haW5fY29udF9kZW1vX291dCA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgcG93X25vdF91c2luZzpwb3dfc2xlZXAsIGNvbV9nZW46Y29tX3Jvb21fdGFzaykgJT4lIAogICMgb25seSBvdXRzaWRlIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gIm91dHNpZGUiKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKICAKYGBgCgpgYGB7cn0KIyBzaG93IGFsbCB3aXRoIGthYmxlIAojIyBQSUxPVAprYWJsZShwaWxvdF9jb250X2RlbW8sIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gZGVtby0gU1RVRFkgMSIsIGFsaWduID0gcmVwKCdjcmNjJyksIHJvdy5uYW1lcyA9IFRSVUUpICU+JSAKICBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKSAKCiMjIEZPUiBNQUlOIC0tIE9WRVJBTEwKa2FibGUobWFpbl9jb250X2RlbW8sIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gZGVtby0gU1RVRFkgMiAtIE9WRVJBTEwiLCBhbGlnbiA9IHJlcCgnY3JjYycpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyMgRk9SIE1BSU4gLS0gREVTSwprYWJsZShtYWluX2NvbnRfZGVtb19kZXNrLCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIGRlbW8tIFNUVURZIDIgLSBERVNLIiwgYWxpZ24gPSByZXAoJ2NyY2MnKSwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogICMgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMjIEZPUiBNQUlOIC0tIFBPQ0tFVC9CQUcKa2FibGUobWFpbl9jb250X2RlbW9fcGIsIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gZGVtby0gU1RVRFkgMiAtIFBPQ0tFVC9CQUciLCBhbGlnbiA9IHJlcCgnY3JjYycpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyMgRk9SIE1BSU4gLS0gT1VUU0lERQprYWJsZShtYWluX2NvbnRfZGVtb19vdXQsIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gZGVtby0gU1RVRFkgMiAtIE9VVFNJREUiLCBhbGlnbiA9IHJlcCgnY3JjYycpLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyBleHBvcnQgdGFibGVzIGFzIGNzdiBmaWxlcwogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKHBpbG90X2NvbnRfZGVtbyksIHBpbG90X2NvbnRfZGVtbyksIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvcGlsb3RfY29udF9kZW1vLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9kZW1vKSwgbWFpbl9jb250X2RlbW8pLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fY29udF9kZW1vLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9kZW1vX2Rlc2spLCBtYWluX2NvbnRfZGVtb19kZXNrKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX2NvbnRfZGVtb19kZXNrLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9kZW1vX3BiKSwgbWFpbl9jb250X2RlbW9fcGIpLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fY29udF9kZW1vX3BiLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9kZW1vX291dCksIG1haW5fY29udF9kZW1vX291dCksIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9jb250X2RlbW9fb3V0LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgCiAgCmBgYAoKIyMjIFF1ZXN0aW9ubmFpcmVzCmBgYHtyfQojIyBGT1IgUElMT1QKcGlsb3RfY29udF9xdWVzIDwtIAogIHBpbG90X3N1cl9kYXRhICU+JSAKICAjIHNlbGVjdCBjb250aW51b3VzIHZhcnMKICBzZWxlY3QoTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2Rpc3Rfc3VtKSAlPiUgCiAgIyBhcHBseSBkZXNjcmliZSBmbiBmb3I6IG4gIG1lYW4gICBzZCBtZWRpYW4gdHJpbW1lZCAgbWFkIG1pbiBtYXggcmFuZ2UgIHNrZXcga3VydG9zaXMgICBzZQogIHBzeWNoOjpkZXNjcmliZSgpCgojIyBGT1IgTUFJTiAtIG92ZXJhbGwKbWFpbl9jb250X3F1ZXMgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2Rpc3Rfc3VtKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCiMjIEZPUiBNQUlOIC0tIERFU0sKbWFpbl9jb250X3F1ZXNfZGVzayA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBOTVBRX3N1bSwgTVBJUV9zdW0sIE1QSVFfU0lfc3VtLCBNUElRX1ZGT19zdW0sIFNBRF9zdW0sIFNBRF9kZXBfc3VtLCBTQURfZWFfc3VtLCBTQURfZGlzdF9zdW0pICU+JSAKICAjIG9ubHkgZGVzayBjb25kaXRpb24KICBmaWx0ZXIoY29uZGl0aW9uID09ICJkZXNrIikgJT4lIAogIHBzeWNoOjpkZXNjcmliZSgpCgojIyBGT1IgTUFJTiAtLSBQT0NLRVQvQkFHCm1haW5fY29udF9xdWVzX3BiIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIE5NUFFfc3VtLCBNUElRX3N1bSwgTVBJUV9TSV9zdW0sIE1QSVFfVkZPX3N1bSwgU0FEX3N1bSwgU0FEX2RlcF9zdW0sIFNBRF9lYV9zdW0sIFNBRF9kaXN0X3N1bSkgJT4lIAogICMgb25seSBwb2NrZXQvYmFnIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gInBvY2tldC9iYWciKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCiMjIEZPUiBNQUlOIC0tIE9VVFNJREUKbWFpbl9jb250X3F1ZXNfb3V0IDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIE5NUFFfc3VtLCBNUElRX3N1bSwgTVBJUV9TSV9zdW0sIE1QSVFfVkZPX3N1bSwgU0FEX3N1bSwgU0FEX2RlcF9zdW0sIFNBRF9lYV9zdW0sIFNBRF9kaXN0X3N1bSkgJT4lIAogICMgb25seSBvdXRzaWRlIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gIm91dHNpZGUiKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCmBgYAoKCmBgYHtyfQojIHNob3cgYWxsIHdpdGgga2FibGUKIyMgUElMT1QKa2FibGUocGlsb3RfY29udF9xdWVzLCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIHF1ZXMtIFNUVURZIDEiLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMjIEZPUiBNQUlOIC0tIE9WRVJBTEwKa2FibGUobWFpbl9jb250X3F1ZXMsIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gcXVlcy0gU1RVRFkgMiAtIE9WRVJBTEwiLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyMgRk9SIE1BSU4gLS0gREVTSwprYWJsZShtYWluX2NvbnRfcXVlc19kZXNrLCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIHF1ZXMtIFNUVURZIDIgLSBERVNLIiwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogICMgZm9vdG5vdGUoZ2VuZXJhbCA9ICJUaGVyZSB3YXMgbm8gdGFzayBjb21wbGV0ZWQgZHVyaW5nIHN0dWR5IDEuIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMjIEZPUiBNQUlOIC0tIFBPQ0tFVC9CQUcKa2FibGUobWFpbl9jb250X3F1ZXNfcGIsIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gcXVlcy0gU1RVRFkgMiAtIFBPQ0tFVC9CQUciLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyMgRk9SIE1BSU4gLS0gT1VUU0lERQprYWJsZShtYWluX2NvbnRfcXVlc19vdXQsIGNhcHRpb24gPSAiRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgY29udGludW91cyB2YXJzIC0gcXVlcy0gU1RVRFkgMiAtIE9VVFNJREUiLCByb3cubmFtZXMgPSBUUlVFKSAlPiUgCiAgIyBmb290bm90ZShnZW5lcmFsID0gIlRoZXJlIHdhcyBubyB0YXNrIGNvbXBsZXRlZCBkdXJpbmcgc3R1ZHkgMS4iKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQoKIyBleHBvcnQgdGFibGVzIGFzIGNzdiBmaWxlcwogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKHBpbG90X2NvbnRfcXVlcyksIHBpbG90X2NvbnRfcXVlcyksIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvcGlsb3RfY29udF9xdWVzLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9xdWVzKSwgbWFpbl9jb250X3F1ZXMpLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fY29udF9xdWVzLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9xdWVzX2Rlc2spLCBtYWluX2NvbnRfcXVlc19kZXNrKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX2NvbnRfcXVlc19kZXNrLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9xdWVzX3BiKSwgbWFpbl9jb250X3F1ZXNfcGIpLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fY29udF9xdWVzX3BiLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKHJvd25hbWVzKG1haW5fY29udF9xdWVzX291dCksIG1haW5fY29udF9xdWVzX291dCksIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9jb250X3F1ZXNfb3V0LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKIyMjIFRhc2sgRGF0YQoKYGBge3J9CgojIyBGT1IgTUFJTiAtIG92ZXJhbGwKbWFpbl9jb250X3Rhc2sgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgYFNjb3JlX0RvdWJsZSBUcm91YmxlYDpgU2NvcmVfTW9ua2V5IExhZGRlcmApICU+JSAKICBwc3ljaDo6ZGVzY3JpYmUoKQoKIyMgRk9SIE1BSU4gLS0gREVTSwptYWluX2NvbnRfdGFza19kZXNrIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIGBTY29yZV9Eb3VibGUgVHJvdWJsZWA6YFNjb3JlX01vbmtleSBMYWRkZXJgKSAlPiUgCiAgIyBvbmx5IGRlc2sgY29uZGl0aW9uCiAgZmlsdGVyKGNvbmRpdGlvbiA9PSAiZGVzayIpICU+JSAKICBwc3ljaDo6ZGVzY3JpYmUoKQoKIyMgRk9SIE1BSU4gLS0gUE9DS0VUL0JBRwptYWluX2NvbnRfdGFza19wYiA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBgU2NvcmVfRG91YmxlIFRyb3VibGVgOmBTY29yZV9Nb25rZXkgTGFkZGVyYCkgJT4lIAogICMgb25seSBwb2NrZXQvYmFnIGNvbmRpdGlvbgogIGZpbHRlcihjb25kaXRpb24gPT0gInBvY2tldC9iYWciKSAlPiUgCiAgcHN5Y2g6OmRlc2NyaWJlKCkKCiMjIEZPUiBNQUlOIC0tIE9VVFNJREUKbWFpbl9jb250X3Rhc2tfb3V0IDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIGBTY29yZV9Eb3VibGUgVHJvdWJsZWA6YFNjb3JlX01vbmtleSBMYWRkZXJgKSAlPiUgCiAgIyBvbmx5IG91dHNpZGUgY29uZGl0aW9uCiAgZmlsdGVyKGNvbmRpdGlvbiA9PSAib3V0c2lkZSIpICU+JSAKICBwc3ljaDo6ZGVzY3JpYmUoKQpgYGAKCmBgYHtyfQojIyBGT1IgTUFJTiAtLSBPVkVSQUxMCmthYmxlKG1haW5fY29udF90YXNrLCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIHRhc2stIFNUVURZIDIgLSBPVkVSQUxMIiwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMjIEZPUiBNQUlOIC0tIERFU0sKa2FibGUobWFpbl9jb250X3Rhc2tfZGVzaywgY2FwdGlvbiA9ICJEZXNjcmlwdGl2ZSBzdGF0aXN0aWNzIGZvciBjb250aW51b3VzIHZhcnMgLSB0YXNrLSBTVFVEWSAyIC0gREVTSyIsIHJvdy5uYW1lcyA9IFRSVUUpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCgojIyBGT1IgTUFJTiAtLSBQT0NLRVQvQkFHCmthYmxlKG1haW5fY29udF90YXNrX3BiLCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIHRhc2stIFNUVURZIDIgLSBQT0NLRVQvQkFHIiwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMjIEZPUiBNQUlOIC0tIE9VVFNJREUKa2FibGUobWFpbl9jb250X3Rhc2tfb3V0LCBjYXB0aW9uID0gIkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGNvbnRpbnVvdXMgdmFycyAtIHRhc2stIFNUVURZIDIgLSBPVVRTSURFIiwgcm93Lm5hbWVzID0gVFJVRSkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCiMgZXhwb3J0IHRhYmxlcyBhcyBjc3YgZmlsZXMKICAjIHdyaXRlLmNzdihjYmluZChyb3duYW1lcyhtYWluX2NvbnRfdGFzayksIG1haW5fY29udF90YXNrKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX2NvbnRfdGFzay5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihjYmluZChyb3duYW1lcyhtYWluX2NvbnRfdGFza19kZXNrKSwgbWFpbl9jb250X3Rhc2tfZGVzayksIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9jb250X3Rhc2tfZGVzay5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihjYmluZChyb3duYW1lcyhtYWluX2NvbnRfdGFza19wYiksIG1haW5fY29udF90YXNrX3BiKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX2NvbnRfdGFza19wYi5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKICAjIHdyaXRlLmNzdihjYmluZChyb3duYW1lcyhtYWluX2NvbnRfdGFza19vdXQpLCBtYWluX2NvbnRfdGFza19vdXQpLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL21haW5fY29udF90YXNrX291dC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKYGBgCgojIFN0dWR5IDEgQW5hbHlzZXMKIyMgQ29ycmVsYXRpb25zCgpHZXQgY29ycmVsYXRpb25zIGIvdyBhbGwgY29udCB2YXJzIAoKYGBge3IgcGlsb3RfY29ycnN9CnBpbG90X2NvcnIgPC0gCiAgcGlsb3Rfc3VyX2RhdGEgJT4lIAogIHNlbGVjdChhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgcG93X25vdF91c2luZzpwb3dfc2xlZXAsIGNvbV9nZW46Y29tX3Jvb21fdGFzaywgTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2FjY2Vzc19zdW0sIFNBRF9kaXN0X3N1bSkgJT4lIAogIGFzLm1hdHJpeCgpICU+JSAKICByY29ycih0eXBlID0gInBlYXJzb24iKQoKIyBjcmVhdGUgbmV3IHBpbG90X2NvcnIgdG8gc2hvd24gb25seSBsb3dlciB0cmlhbmdsZS4uLiAKcGlsb3RfY29ycjIgPC0gcGlsb3RfY29ycgojIHJvdW5kIHRvIDQgZGVjaW1hbHMuLi4gCnBpbG90X2NvcnIyJHIgPC0gcm91bmQocGlsb3RfY29ycjIkciwgNCkKcGlsb3RfY29ycjIkUCA8LSByb3VuZChwaWxvdF9jb3JyMiRQLCA0KQpwaWxvdF9jb3JyMiRuIDwtIHJvdW5kKHBpbG90X2NvcnIyJG4sIDQpCiMgcmVtb3ZlIHVwcGVyIHRyaWFuZ2xlIGZvcm0gciwgcCwgYW5kIG4KcGlsb3RfY29ycjIkclt1cHBlci50cmkocGlsb3RfY29ycjIkcildIDwtICItIgpwaWxvdF9jb3JyMiRQW3VwcGVyLnRyaShwaWxvdF9jb3JyMiRQKV0gPC0gIi0iCnBpbG90X2NvcnIyJG5bdXBwZXIudHJpKHBpbG90X2NvcnIyJG4pXSA8LSAiLSIKCiMgc2hvdyBjb3JyIHRhYmxlIHdpdGggZmxhdHRlbkNvcnIKCmthYmxlKGZsYXR0ZW5Db3JyTWF0cml4KHBpbG90X2NvcnIkciwgcGlsb3RfY29yciRQKSwgY2FwdGlvbiA9ICJQaWxvdCBTdHVkeSAtIENvcnJlbGF0aW9uOiByIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgojIHByaW50IHRhYmxlcyB1c2luZyBrYWJsZQprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChwaWxvdF9jb3JyMiRyLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJQaWxvdCBTdHVkeSAtIENvcnJlbGF0aW9uOiByIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCiAgCgprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChwaWxvdF9jb3JyMiRQLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJQaWxvdCBTdHVkeSAtIENvcnJlbGF0aW9uOiBwIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChwaWxvdF9jb3JyMiRuLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJQaWxvdCBTdHVkeSAtIENvcnJlbGF0aW9uOiBuIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgojIHByaW50IGNvcnIgbWF0cml4IAojIGNoYXJ0LkNvcnJlbGF0aW9uKHBpbG90X2FsbF9kYXRhX2ZpbmFsICU+JSBzZWxlY3QoY29uZGl0aW9uLCBhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgcG93X25vdF91c2luZzpwb3dfc2xlZXAsIGNvbV9nZW46Y29tX3Jvb21fdGFzaywgY29uZGl0aW9uLCBOTVBRX3N1bSwgTVBJUV9zdW0sIE1QSVFfU0lfc3VtLCBNUElRX1ZGT19zdW0sIFNBRF9zdW0sIFNBRF9kZXBfc3VtLCBTQURfZWFfc3VtLCBTQURfZGlzdF9zdW0sIGBTY29yZV9Eb3VibGUgVHJvdWJsZWA6YFNjb3JlX01vbmtleSBMYWRkZXJgLCBDQlNfb3ZlcmFsbCwgQ0JTX1NUTSwgQ0JTX3JlYXNvbiwgQ0JTX3ZlcmJhbCwgQ0JTX3RzX21lbW9yeSwgQ0JTX3RzX3JlYXNvbiwgQ0JTX3RzX3ZlcmJhbGFiLCBDQlNfdHNfY29uKSAlPiUgc2VsZWN0KC1jb25kaXRpb24pLCBoaXN0b2dyYW09RiwgcGNoPTE5KQojIGxpYnJhcnkoY29ycnIpCgojZ2l2ZXMgY29yciBtYXRyaXgKIyBJIGxpa2UgY29ycnBsb3QgbW9yZS4uLiAKIyBwaWxvdF9jb3JyJHIgJT4lIHJwbG90KHNoYXBlID0gMTUsIGNvbG91cnMgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJwdXJwbGUiLCAiZ3JleSIsICJibHVlIikpKDUwKSksIHByaW50X2NvciA9IEYpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkKCiMgZ2l2ZSBoaXN0IG9mIGVhY2ggdmFyCiAgIyBhcy50aWJibGUocGlsb3RfY29yciRyKSAlPiUKICAjICAgc2VsZWN0KGFnZTpDQlNfdHNfY29uKSAlPiUgCiAgIyAgIGdhdGhlcigpICU+JSAKICAjICAgZ2dwbG90KGFlcyh2YWx1ZSkpICsKICAjICAgICBnZW9tX2hpc3RvZ3JhbSgpICsKICAjICAgICBmYWNldF93cmFwKH5rZXkpCgojIHdob2xlIG1hdHJpeApjb3JycGxvdChwaWxvdF9jb3JyJHIsIG1ldGhvZCA9ICJjaXJjbGUiLCBjb2wgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJkYXJrc2xhdGVibHVlIiwgInB1cnBsZTMiLCAiZGFya29yY2hpZCIsICJ3aGl0ZSIsICJsaWdodHNlYWdyZWVuIiwgImRhcmtjeWFuIiwgImRlZXBza3libHVlNCIpKSg1MDAwKSksICAKICAgICAgICAgdHlwZSA9ICJ1cHBlciIsCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICB0bC5jb2wgPSAiZGFya2JsdWUiLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjgsICNUZXh0IGxhYmVsIGNvbG9yIGFuZCByb3RhdGlvbiAmIHNpemUKICAgICAgICAgIyBhZGQgY29yciBudW1iZXJzIC0tIGVkaXQgc2l6ZQogICAgICAgICAjIGFkZENvZWYuY29sID0gImJsYWNrIiwgY2wuY2V4ID0gLjAxLCBjbC5sZW5ndGggPSAyLCAKICAgICAgICAgIyBncmlkIGNvbG91cgogICAgICAgICBhZGRncmlkLmNvbCA9ICJ3aGl0ZSIsCiAgICAgICAgICMgYWRkQ29lZmFzUGVyY2VudCA9IFQsCiAgICAgICAgICMgQ29tYmluZSB3aXRoIHNpZ25pZmljYW5jZSBsZXZlbAogICAgICAgICBwLm1hdCA9IHBpbG90X2NvcnIkUCwgc2lnLmxldmVsID0gMC4wNSwgCiAgICAgICAgIGluc2lnID0gImJsYW5rIiwKICAgICAgICAgIyBpbnNpZyA9ICJwY2giLCBwY2ggPSAxMCwgcGNoLmNvbCA9ICJyZWQiLCBwY2guY2V4ID0gLjEsICMgYWRkIHRoaXMgaW5zdGVhZCBvZiBpbnNpZyBhYm92ZSB0byBkZW5vdCBpbnNpZyBwIHZhbHVlcyB3aXRoIHJlZCBkb3QKICAgICAgICAgIyBoaWRlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IG9uIHRoZSBwcmluY2lwYWwgZGlhZ29uYWwKICAgICAgICAgZGlhZyA9IEZBTFNFLCAKICAgICAgICAgd2luLmFzcCA9IDEsIAogICAgICAgICBjb2wubGltPWMoLTEsIDEpICMgc2V0IGxpbWl0cyBmb3Igci12YWx1ZXMKICAgICAgICAgKQoKI3F1ZXN0aW9ubmFpcmVzIG9ubHkKY29ycnBsb3QocGlsb3RfY29yciRyWzE3OjI1LDE3OjI1XSwgbWV0aG9kID0gImNpcmNsZSIsIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoImRhcmtzbGF0ZWJsdWUiLCAicHVycGxlMyIsICJkYXJrb3JjaGlkIiwgIndoaXRlIiwgImxpZ2h0c2VhZ3JlZW4iLCAiZGFya2N5YW4iLCAiZGVlcHNreWJsdWU0IikpKDUwMDApKSwgIAogICAgICAgICB0eXBlID0gInVwcGVyIiwKICAgICAgICAgIyBhZGRDb2VmLmNvbCA9ICJibGFjayIsICMgQWRkIGNvZWZmaWNpZW50IG9mIGNvcnJlbGF0aW9uCiAgICAgICAgIHRsLmNvbCA9ICJkYXJrYmx1ZSIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuOCwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uICYgc2l6ZQogICAgICAgICAjIGFkZCBjb3JyIG51bWJlcnMgLS0gZWRpdCBzaXplCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCBjbC5jZXggPSAuMDEsIGNsLmxlbmd0aCA9IDIsIAogICAgICAgICAjIGdyaWQgY29sb3VyCiAgICAgICAgIGFkZGdyaWQuY29sID0gIndoaXRlIiwKICAgICAgICAgIyBhZGRDb2VmYXNQZXJjZW50ID0gVCwKICAgICAgICAgIyBDb21iaW5lIHdpdGggc2lnbmlmaWNhbmNlIGxldmVsCiAgICAgICAgIHAubWF0ID0gcGlsb3RfY29yciRQLCBzaWcubGV2ZWwgPSAwLjA1LCAKICAgICAgICAgaW5zaWcgPSAiYmxhbmsiLAogICAgICAgICAjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICAjIGhpZGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgb24gdGhlIHByaW5jaXBhbCBkaWFnb25hbAogICAgICAgICBkaWFnID0gRkFMU0UsIAogICAgICAgICB3aW4uYXNwID0gMSwgCiAgICAgICAgIGNvbC5saW09YygtMSwgMSkgIyBzZXQgbGltaXRzIGZvciByLXZhbHVlcwogICAgICAgICApCgojIGNyZWF0ZSBuZXcgbWF0cml4IGZvciByICYgcCB2YWxzIHdpdGggZGlmZmVyZW50IGNvbCBuYW1lcwpwaWxvdF9jb3JyX3IgPC0gcGlsb3RfY29yciRyW2MoMTc6MjAsIDIyOjI1KSxjKDE3OjIwLCAyMjoyNSldCiAgY29sbmFtZXMocGlsb3RfY29ycl9yKSA8LSBjKCJOTVBRIiwgIk1QSVE6IEkiLCAiTVBJUTogU0kiLCAiTVBJUTogVkZPIiwgIlNBRDogRGVwLiIsICJTQUQ6IEVBIiwgIlNBRDogQSIsICJTQUQ6IERpc3QuIikKICByb3duYW1lcyhwaWxvdF9jb3JyX3IpIDwtIGMoIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iKQogIApwaWxvdF9jb3JyX3AgPC0gcGlsb3RfY29yciRQW2MoMTc6MjAsIDIyOjI1KSxjKDE3OjIwLCAyMjoyNSldCiAgY29sbmFtZXMocGlsb3RfY29ycl9wKSA8LSBjKCJOTVBRIiwgIk1QSVE6IEkiLCAiTVBJUTogU0kiLCAiTVBJUTogVkZPIiwgIlNBRDogRGVwLiIsICJTQUQ6IEVBIiwgIlNBRDogQSIsICJTQUQ6IERpc3QuIikKICByb3duYW1lcyhwaWxvdF9jb3JyX3ApIDwtIGMoIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iKQoKCmNvcnJfcGxvdF9waWxvdF9xdWVzIDwtIHsKICBjb3JycGxvdChwaWxvdF9jb3JyX3IsIG1ldGhvZCA9ICdjb2xvcicsCiAgICAgICAgIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoImRhcmtzbGF0ZWJsdWUiLCAicHVycGxlMyIsICJkYXJrb3JjaGlkIiwgIndoaXRlIiwgImxpZ2h0c2VhZ3JlZW4iLCAiZGFya2N5YW4iLCAiZGVlcHNreWJsdWU0IikpKDUwMDApKSwKICAgICAgICAgIyB0eXBlID0gInVwcGVyIiwgCiAgICAgICAgIGRpYWcgPSBGLCAjIHJlbW92ZSBjZW50cmFsIGRpYWdvbmFsCiAgICAgICAgIHRsLmNvbCA9ICJibGFjayIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuOCwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uCiAgICAgICAgIGFkZGdyaWQuY29sID0gTkEsICMgYWRkIGdyaWQgY29sb3VyCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICAjIGFkZENvZWZhc1BlcmNlbnQgPSBUICMgYWRkIGFzIGNvZWZmaWNpZW50IGFzIHBlcmNlbnQKICAgICAgICAgIyBudW1iZXIuY2V4ID0gLjI1LCAjIHNpemUgb2YgdGhlIGNvZWZmCiAgICAgICAgICMgbnVtYmVyLmRpZ2l0cyA9IDIsICMgbnVtIGRlY2ltYWxzIGluIGNvZWZmCiAgICAgICAgIHAubWF0ID0gcGlsb3RfY29ycl9wLCBzaWcubGV2ZWwgPSBjKC4wMDEsIC4wMSwgLjA1KSwKICAgICAgICAgaW5zaWcgPSAibGFiZWxfc2lnIiwgcGNoLmNleCA9IC41LCBwY2guY29sID0gImJsYWNrIgogICAgICAgICAjIGluc2lnID0gImJsYW5rIiMgaW5zaWcgPSAicGNoIiwgcGNoID0gMTAsIHBjaC5jb2wgPSAicmVkIiwgcGNoLmNleCA9IC4xLCAjIGFkZCB0aGlzIGluc3RlYWQgb2YgaW5zaWcgYWJvdmUgdG8gZGVub3QgaW5zaWcgcCB2YWx1ZXMgd2l0aCByZWQgZG90CiAgICAgICAgICkKICByZWNvcmRQbG90KCkKfQoKIyBleHBvcnQgY29yciBtYXRyaWMgdXNpbmcgZ2dzYXZlKCkgJiByZXBsYXlQbG90KCkgdG8gY2FsbCBvbiBwcmV2aW91c2x5IG1hZGUgcGxvdAojIGdnc2F2ZShmaWxlbmFtZT0iY29ycl9wbG90X3BpbG90X3F1ZXNfZmluYWxfb2N0NCIsIHBsb3QgPSByZXBsYXlQbG90KGNvcnJfcGxvdF9waWxvdF9xdWVzKSwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKCiMgZXhwb3J0IGNzdiBmaWxlcyBvZiBSIHZhbHVlcyAmIHAgdmFsdWVzCiAgIyB3cml0ZS5jc3YocGlsb3RfY29yciRyLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL3BpbG90X2NvcnJfcihzZXB0MzApLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgCiAgIyB3cml0ZS5jc3YocGlsb3RfY29yciRQLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL3BpbG90X2NvcnJfcChzZXB0MzApLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCiMgU3R1ZHkgMiBBbmFseXNpcwojIyBDb3JyZWxhdGlvbnMKR2V0IENvcnJlbGF0aW9ucyBiL3cgYWxsIGNvbnQgdmFycwoKQWNyb3NzIGNvbmRpdGlvbnMuLi4gCmBgYHtyIG1haW5fY29ycnNfb3ZlcmFsbH0KIyBnZXQgZGF0YSBmcm9tIG1haW4gZGF0YSBmcmFtZQptYWluX2NvcnIgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgYWdlLCBhZ2VfZmlyc3RfcGhvbmUsIGRpc3RfZGFpbHksIGRpc3Rfc3R1ZHksIHBvd19ub3RfdXNpbmc6cG93X3NsZWVwLCBjb21fZ2VuOmNvbV9yb29tX3Rhc2ssIGNvbmRpdGlvbiwgTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2FjY2Vzc19zdW0sIFNBRF9kaXN0X3N1bSwgYFNjb3JlX0RvdWJsZSBUcm91YmxlYDpgU2NvcmVfTW9ua2V5IExhZGRlcmAsIENCU19vdmVyYWxsLCBDQlNfU1RNLCBDQlNfcmVhc29uLCBDQlNfdmVyYmFsLCBDQlNfdHNfbWVtb3J5LCBDQlNfdHNfcmVhc29uLCBDQlNfdHNfdmVyYmFsYWIsIENCU190c19jb24pICU+JSAKICBzZWxlY3QoLWNvbmRpdGlvbikgJT4lIAogIGFzLm1hdHJpeCgpICU+JSAKICByY29ycih0eXBlID0gInBlYXJzb24iKQoKIyBjcmVhdGUgbmV3IG1haW5fY29yciB0byBzaG93biBvbmx5IGxvd2VyIHRyaWFuZ2xlLi4uIAptYWluX2NvcnIyIDwtIG1haW5fY29ycgojIHJvdW5kIHRvIDQgZGVjaW1hbHMuLi4gCm1haW5fY29ycjIkciA8LSByb3VuZChtYWluX2NvcnIyJHIsIDQpCm1haW5fY29ycjIkUCA8LSByb3VuZChtYWluX2NvcnIyJFAsIDQpCm1haW5fY29ycjIkbiA8LSByb3VuZChtYWluX2NvcnIyJG4sIDQpCiMgcmVtb3ZlIHVwcGVyIHRyaWFuZ2xlIGZvcm0gciwgcCwgYW5kIG4KbWFpbl9jb3JyMiRyW3VwcGVyLnRyaShtYWluX2NvcnIyJHIpXSA8LSAiLSIKbWFpbl9jb3JyMiRQW3VwcGVyLnRyaShtYWluX2NvcnIyJFApXSA8LSAiLSIKbWFpbl9jb3JyMiRuW3VwcGVyLnRyaShtYWluX2NvcnIyJG4pXSA8LSAiLSIKCiMgc2hvdyBjb3JyIHRhYmxlIHdpdGggZmxhdHRlbkNvcnIKCmthYmxlKGZsYXR0ZW5Db3JyTWF0cml4KG1haW5fY29yciRyLCBtYWluX2NvcnIkUCksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uOiByIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgojIHByaW50IHRhYmxlcyB1c2luZyBrYWJsZQprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChtYWluX2NvcnIyJHIsIHNjaWVudGlmaWMgPSBGQUxTRSkpLCBjYXB0aW9uID0gIlN0dWR5IDIgLSBDb3JyZWxhdGlvbjogciB2YWx1ZXMiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiaG92ZXIiLCAic3RyaXBlZCIpLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQogIAoKa2FibGUoYXMuZGF0YS5mcmFtZShmb3JtYXQobWFpbl9jb3JyMiRQLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IHAgdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycjIkbiwgc2NpZW50aWZpYyA9IEZBTFNFKSksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uOiBuIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgoKIyB1c2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgInJlY29yZGVkIHBsb3QiIG9mIHRoZSBjb3JyIG1hdHJpeCBjYWxsZWQgImNvcnJfcGxvdF9tYWluIiBpbiB0aGlzIGNhc2UKICAjIG11c3QgaGF2ZSAicmVjb3JkUGxvdCgpIiB3aXRoaW4gdGhlIHt9IG9yIHdpbGwgbm90IHdvcmsKICAjIHRoZSBnZ3NhdmUoKSBmdW5jdGlvbiBpcyB1c2VkIGFmdGVyIGJ5IGNhbGxpbmcgdG8gdGhlIHJlY29yZGVkIHBsb3QgdXNpbmcgInJlcGxheVBsb3QoKSIKCiMgd2hvbGUgb3JpZ2luYWwgbWF0cml4CmNvcnJfcGxvdF9tYWluX2FsbCA8LSB7CiAgY29ycnBsb3QobWFpbl9jb3JyJHIsIG1ldGhvZCA9ICJjaXJjbGUiLCBjb2wgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJwdXJwbGUiLCAid2hpdGUiLCAiYmx1ZSIpKSg1MCkpLCAgCiAgICAgICAgIHR5cGUgPSAidXBwZXIiLCAgCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICB0bC5jb2wgPSAiZGFya2JsdWUiLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjQ1LCAjVGV4dCBsYWJlbCBjb2xvciBhbmQgcm90YXRpb24KICAgICAgICAgIyBDb21iaW5lIHdpdGggc2lnbmlmaWNhbmNlIGxldmVsCiAgICAgICAgIHAubWF0ID0gbWFpbl9jb3JyJFAsIHNpZy5sZXZlbCA9IDAuMDUsIAogICAgICAgICBhZGRncmlkLmNvbCA9ICJ3aGl0ZSIsCiAgICAgICAgIGluc2lnID0gImJsYW5rIiwjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICAjIGhpZGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgb24gdGhlIHByaW5jaXBhbCBkaWFnb25hbAogICAgICAgICBkaWFnID0gRkFMU0UsIAogICAgICAgICB3aW4uYXNwID0gMSwgCiAgICAgICAgIGlzLmNvcnIgPSBGCiAgICAgICAgICkKICByZWNvcmRQbG90KCkKfQoKIyQgY3JlYXRlIG5ldyBkZiBmb3IgY29ycnBsb3Igd2l0aCBjbGVhbmVkIHVwIGNvbG5hbWVzCiAgIyBmb3Igci12YWx1ZXMKICBtYWluX2NvcnJfciA8LSBtYWluX2NvcnIkcltjKDE3OjM2LCA0MTo0NCksIGMoMTc6MzYsIDQxOjQ0KV0KICAKICBjb2xuYW1lcyhtYWluX2NvcnJfcikgPC0gYygiTk1QUSIsICJNUElROiBJIiwgIk1QSVE6IFNJIiwgIk1QSVE6IFZGTyIsICJTQUQ6IERlcC4iLCAiU0FEOiBFQSIsICJTQUQ6IEEiLCAiU0FEOiBEaXN0LiIsICJEVCIsICJPT08iLCAiRFMiLCAiRk0iLCAiUCIsICJQQSIsICJUUyIsICJTUCIsICJSIiwgIlNTIiwgIkdSIiwgIk1MIiwgIk1lbW9yeSIsICJSZWFzb25pbmciLCAiVmVyYmFsIEFiaWxpdHkiLCAiQ29uY2VudHJhdGlvbiIpCiAgCiAgcm93bmFtZXMobWFpbl9jb3JyX3IpIDwtIGMoIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iLCAiRFQiLCAiT09PIiwgIkRTIiwgIkZNIiwgIlAiLCAiUEEiLCAiVFMiLCAiU1AiLCAiUiIsICJTUyIsICJHUiIsICJNTCIsICJNZW1vcnkiLCAiUmVhc29uaW5nIiwgIlZlcmJhbCBBYmlsaXR5IiwgIkNvbmNlbnRyYXRpb24iKQogIAogICMgYWRkIHJvIG5hbWVzIHRvIG1hdGNoIGNvbHMKICByb3duYW1lcyhtYWluX2NvcnJfcikgPC0gYyhjb2xuYW1lcyhtYWluX2NvcnJfcikpCiAgCiAgIyBmb3IgcC12YWx1ZXMKICBtYWluX2NvcnJfcCA8LSBtYWluX2NvcnIkUFtjKDE3OjM2LCA0MTo0NCksIGMoMTc6MzYsIDQxOjQ0KV0KICAKICBjb2xuYW1lcyhtYWluX2NvcnJfcCkgPC0gYygiTk1QUSIsICJNUElROiBJIiwgIk1QSVE6IFNJIiwgIk1QSVE6IFZGTyIsICJTQUQ6IERlcC4iLCAiU0FEOiBFQSIsICJTQUQ6IEEiLCAiU0FEOiBEaXN0LiIsICJEVCIsICJPT08iLCAiRFMiLCAiRk0iLCAiUCIsICJQQSIsICJUUyIsICJTUCIsICJSIiwgIlNTIiwgIkdSIiwgIk1MIiwgIk1lbW9yeSIsICJSZWFzb25pbmciLCAiVmVyYmFsIEFiaWxpdHkiLCAiQ29uY2VudHJhdGlvbiIpCiAgCiAgcm93bmFtZXMobWFpbl9jb3JyX3ApIDwtIGMoIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iLCAiRFQiLCAiT09PIiwgIkRTIiwgIkZNIiwgIlAiLCAiUEEiLCAiVFMiLCAiU1AiLCAiUiIsICJTUyIsICJHUiIsICJNTCIsICJNZW1vcnkiLCAiUmVhc29uaW5nIiwgIlZlcmJhbCBBYmlsaXR5IiwgIkNvbmNlbnRyYXRpb24iKQogIAogICMgYWRkIHJvIG5hbWVzIHRvIG1hdGNoIGNvbHMKICByb3duYW1lcyhtYWluX2NvcnJfcCkgPC0gYyhjb2xuYW1lcyhtYWluX2NvcnJfcCkpCgoKIyMjIHNob3cgY29ycnBsb3RzCgojIHF1ZXMgKyB0ZXN0cyArIGNvbXBvc2l0ZXMKY29ycl9wbG90X21haW5fcXVlc19DQlNfYWxsIDwtIHsKICBjb3JycGxvdChtYWluX2NvcnJfcltjKDE6OCwgOToyMCwgMjE6MjQpLCBjKDE6OCwgOToyMCwgMjE6MjQpXSwgbWV0aG9kID0gJ2NvbG9yJywKICAgICAgICAgY29sID0gKGNvbG9yUmFtcFBhbGV0dGUoYygiZGFya3NsYXRlYmx1ZSIsICJwdXJwbGUzIiwgImRhcmtvcmNoaWQiLCAid2hpdGUiLCAibGlnaHRzZWFncmVlbiIsICJkYXJrY3lhbiIsICJkZWVwc2t5Ymx1ZTQiKSkoNTAwMCkpLAogICAgICAgICAjIHR5cGUgPSAidXBwZXIiLCAKICAgICAgICAgZGlhZyA9IEYsICMgcmVtb3ZlIGNlbnRyYWwgZGlhZ29uYWwKICAgICAgICAgdGwuY29sID0gImJsYWNrIiwgdGwuc3J0ID0gOTAsIHRsLmNleCA9IC41LCAjVGV4dCBsYWJlbCBjb2xvciBhbmQgcm90YXRpb24KICAgICAgICAgYWRkZ3JpZC5jb2wgPSBOQSwgIyBhZGQgZ3JpZCBjb2xvdXIKICAgICAgICAgIyBhZGRDb2VmLmNvbCA9ICJibGFjayIsICMgQWRkIGNvZWZmaWNpZW50IG9mIGNvcnJlbGF0aW9uCiAgICAgICAgICMgYWRkQ29lZmFzUGVyY2VudCA9IFQgIyBhZGQgYXMgY29lZmZpY2llbnQgYXMgcGVyY2VudAogICAgICAgICAjIG51bWJlci5jZXggPSAuMjUsICMgc2l6ZSBvZiB0aGUgY29lZmYKICAgICAgICAgIyBudW1iZXIuZGlnaXRzID0gMiwgIyBudW0gZGVjaW1hbHMgaW4gY29lZmYKICAgICAgICAgcC5tYXQgPSBtYWluX2NvcnJfcFtjKDE6OCwgOToyMCwgMjE6MjQpLCBjKDE6OCwgOToyMCwgMjE6MjQpXSwgc2lnLmxldmVsID0gYyguMDAxLCAuMDEsIC4wNSksCiAgICAgICAgIGluc2lnID0gImxhYmVsX3NpZyIsIHBjaC5jZXggPSAuNSwgcGNoLmNvbCA9ICJibGFjayIKICAgICAgICAgIyBpbnNpZyA9ICJibGFuayIjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICApCiAgcmVjb3JkUGxvdCgpCn0KCiMgZXhwb3J0IGNvcnIgbWF0cmljIHVzaW5nIGdnc2F2ZSgpICYgcmVwbGF5UGxvdCgpIHRvIGNhbGwgb24gcHJldmlvdXNseSBtYWRlIHBsb3QKIyBnZ3NhdmUoZmlsZW5hbWU9ImNvcnJfcGxvdF9tYWluX3F1ZXNfQ0JTX2FsbF9maW5hbF9vY3Q0IiwgcGxvdCA9IHJlcGxheVBsb3QoY29ycl9wbG90X21haW5fcXVlc19DQlNfYWxsKSwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKCiMgdGVzdHMgKyBjb21wb3NpdGVzCmNvcnJfcGxvdF9tYWluX0NCU19jb21wIDwtIHsKICBjb3JycGxvdChtYWluX2NvcnJfcltjKDk6MjAsIDIxOjI0KSwgYyg5OjIwLCAyMToyNCldLCBtZXRob2QgPSAnY29sb3InLAogICAgICAgICBjb2wgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJkYXJrc2xhdGVibHVlIiwgInB1cnBsZTMiLCAiZGFya29yY2hpZCIsICJ3aGl0ZSIsICJsaWdodHNlYWdyZWVuIiwgImRhcmtjeWFuIiwgImRlZXBza3libHVlNCIpKSg1MDAwKSksCiAgICAgICAgICMgdHlwZSA9ICJ1cHBlciIsIAogICAgICAgICBkaWFnID0gRiwgIyByZW1vdmUgY2VudHJhbCBkaWFnb25hbAogICAgICAgICB0bC5jb2wgPSAiYmxhY2siLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjUsICNUZXh0IGxhYmVsIGNvbG9yIGFuZCByb3RhdGlvbgogICAgICAgICBhZGRncmlkLmNvbCA9IE5BLCAjIGFkZCBncmlkIGNvbG91cgogICAgICAgICAjIGFkZENvZWYuY29sID0gImJsYWNrIiwgIyBBZGQgY29lZmZpY2llbnQgb2YgY29ycmVsYXRpb24KICAgICAgICAgIyBhZGRDb2VmYXNQZXJjZW50ID0gVCAjIGFkZCBhcyBjb2VmZmljaWVudCBhcyBwZXJjZW50CiAgICAgICAgICMgbnVtYmVyLmNleCA9IC4yNSwgIyBzaXplIG9mIHRoZSBjb2VmZgogICAgICAgICAjIG51bWJlci5kaWdpdHMgPSAyLCAjIG51bSBkZWNpbWFscyBpbiBjb2VmZgogICAgICAgICBwLm1hdCA9IG1haW5fY29ycl9wW2MoOToyMCwgMjE6MjQpLCBjKDk6MjAsIDIxOjI0KV0sIHNpZy5sZXZlbCA9IGMoLjAwMSwgLjAxLCAuMDUpLAogICAgICAgICBpbnNpZyA9ICJsYWJlbF9zaWciLCBwY2guY2V4ID0gLjUsIHBjaC5jb2wgPSAiYmxhY2siCiAgICAgICAgICMgaW5zaWcgPSAiYmxhbmsiIyBpbnNpZyA9ICJwY2giLCBwY2ggPSAxMCwgcGNoLmNvbCA9ICJyZWQiLCBwY2guY2V4ID0gLjEsICMgYWRkIHRoaXMgaW5zdGVhZCBvZiBpbnNpZyBhYm92ZSB0byBkZW5vdCBpbnNpZyBwIHZhbHVlcyB3aXRoIHJlZCBkb3QKICAgICAgICAgKQogIHJlY29yZFBsb3QoKQp9CgojIGV4cG9ydCBjb3JyIG1hdHJpYyB1c2luZyBnZ3NhdmUoKSAmIHJlcGxheVBsb3QoKSB0byBjYWxsIG9uIHByZXZpb3VzbHkgbWFkZSBwbG90CiMgZ2dzYXZlKGZpbGVuYW1lPSJjb3JyX3Bsb3RfbWFpbl9DQlNfY29tcF9maW5hbF9vY3Q0IiwgcGxvdCA9IHJlcGxheVBsb3QoY29ycl9wbG90X21haW5fQ0JTX2NvbXApLCBkZXZpY2UgPSAianBlZyIsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iLCBkcGkgPSAxMDAwKQoKIyBxdWVzICsgY29tcG9zaXRlcwpjb3JyX3Bsb3RfbWFpbl9xdWVzX2NvbXAgPC0gewogIGNvcnJwbG90KG1haW5fY29ycl9yW2MoMTo4LCAyMToyNCksIGMoMTo4LCAyMToyNCldLCBjb2wgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJkYXJrc2xhdGVibHVlIiwgInB1cnBsZTMiLCAiZGFya29yY2hpZCIsICJ3aGl0ZSIsICJsaWdodHNlYWdyZWVuIiwgImRhcmtjeWFuIiwgImRlZXBza3libHVlNCIpKSg1MDAwKSksCiAgICAgICAgICMgdHlwZSA9ICJ1cHBlciIsIAogICAgICAgICBkaWFnID0gRiwgIyByZW1vdmUgY2VudHJhbCBkaWFnb25hbAogICAgICAgICB0bC5jb2wgPSAiYmxhY2siLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjgsICNUZXh0IGxhYmVsIGNvbG9yIGFuZCByb3RhdGlvbgogICAgICAgICBhZGRncmlkLmNvbCA9IE5BLCAjIGFkZCBncmlkIGNvbG91cgogICAgICAgICAjIGFkZENvZWYuY29sID0gImJsYWNrIiwgIyBBZGQgY29lZmZpY2llbnQgb2YgY29ycmVsYXRpb24KICAgICAgICAgIyBhZGRDb2VmYXNQZXJjZW50ID0gVCAjIGFkZCBhcyBjb2VmZmljaWVudCBhcyBwZXJjZW50CiAgICAgICAgICMgbnVtYmVyLmNleCA9IC4yNSwgIyBzaXplIG9mIHRoZSBjb2VmZgogICAgICAgICAjIG51bWJlci5kaWdpdHMgPSAyLCAjIG51bSBkZWNpbWFscyBpbiBjb2VmZgogICAgICAgICAjIHAubWF0ID0gbWFpbl9jb3JyX3BbYygxOjgsIDk6MjAsIDIxOjI0KSwgYygxOjgsIDk6MjAsIDIxOjI0KV0sIHNpZy5sZXZlbCA9IC4wNQogICAgICAgICBpbnNpZyA9ICJibGFuayIjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICApCiAgcmVjb3JkUGxvdCgpCn0KCiMgcXVlcwpjb3JyX3Bsb3RfbWFpbl9xdWVzIDwtIHsKICBjb3JycGxvdChtYWluX2NvcnJfcltjKDE6OCksIGMoMTo4KV0sIG1ldGhvZCA9ICdjb2xvcicsCiAgICAgICAgIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoImRhcmtzbGF0ZWJsdWUiLCAicHVycGxlMyIsICJkYXJrb3JjaGlkIiwgIndoaXRlIiwgImxpZ2h0c2VhZ3JlZW4iLCAiZGFya2N5YW4iLCAiZGVlcHNreWJsdWU0IikpKDUwMDApKSwKICAgICAgICAgIyB0eXBlID0gInVwcGVyIiwgCiAgICAgICAgIGRpYWcgPSBGLCAjIHJlbW92ZSBjZW50cmFsIGRpYWdvbmFsCiAgICAgICAgIHRsLmNvbCA9ICJibGFjayIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuNSwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uCiAgICAgICAgIGFkZGdyaWQuY29sID0gTkEsICMgYWRkIGdyaWQgY29sb3VyCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICAjIGFkZENvZWZhc1BlcmNlbnQgPSBUICMgYWRkIGFzIGNvZWZmaWNpZW50IGFzIHBlcmNlbnQKICAgICAgICAgIyBudW1iZXIuY2V4ID0gLjI1LCAjIHNpemUgb2YgdGhlIGNvZWZmCiAgICAgICAgICMgbnVtYmVyLmRpZ2l0cyA9IDIsICMgbnVtIGRlY2ltYWxzIGluIGNvZWZmCiAgICAgICAgIHAubWF0ID0gbWFpbl9jb3JyX3BbYygxOjgpLCBjKDE6OCldLCBzaWcubGV2ZWwgPSBjKC4wMDEsIC4wMSwgLjA1KSwKICAgICAgICAgaW5zaWcgPSAibGFiZWxfc2lnIiwgcGNoLmNleCA9IC41LCBwY2guY29sID0gImJsYWNrIgogICAgICAgICAjIGluc2lnID0gImJsYW5rIiMgaW5zaWcgPSAicGNoIiwgcGNoID0gMTAsIHBjaC5jb2wgPSAicmVkIiwgcGNoLmNleCA9IC4xLCAjIGFkZCB0aGlzIGluc3RlYWQgb2YgaW5zaWcgYWJvdmUgdG8gZGVub3QgaW5zaWcgcCB2YWx1ZXMgd2l0aCByZWQgZG90CiAgICAgICAgICkKICByZWNvcmRQbG90KCkKfQoKIyBleHBvcnQgY29yciBtYXRyaWMgdXNpbmcgZ2dzYXZlKCkgJiByZXBsYXlQbG90KCkgdG8gY2FsbCBvbiBwcmV2aW91c2x5IG1hZGUgcGxvdAojIGdnc2F2ZShmaWxlbmFtZT0iY29ycl9wbG90X21haW5fcXVlc19maW5hbF9vY3Q0IiwgcGxvdCA9IHJlcGxheVBsb3QoY29ycl9wbG90X21haW5fcXVlcyksIGRldmljZSA9ICJqcGVnIiwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIsIGRwaSA9IDEwMDApCgojIHRlc3RzCmNvcnJfcGxvdF9tYWluX0NCUyA8LSB7CiAgY29ycnBsb3QobWFpbl9jb3JyX3JbYyg5OjIwKSwgYyg5OjIwKV0sIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoImRhcmtzbGF0ZWJsdWUiLCAicHVycGxlMyIsICJkYXJrb3JjaGlkIiwgIndoaXRlIiwgImxpZ2h0c2VhZ3JlZW4iLCAiZGFya2N5YW4iLCAiZGVlcHNreWJsdWU0IikpKDUwMDApKSwKICAgICAgICAgdHlwZSA9ICJ1cHBlciIsCiAgICAgICAgIGRpYWcgPSBGLCAjIHJlbW92ZSBjZW50cmFsIGRpYWdvbmFsCiAgICAgICAgIHRsLmNvbCA9ICJkYXJrYmx1ZSIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuOCwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uCiAgICAgICAgIGFkZGdyaWQuY29sID0gTkEsICMgYWRkIGdyaWQgY29sb3VyCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICAjIGFkZENvZWZhc1BlcmNlbnQgPSBUICMgYWRkIGFzIGNvZWZmaWNpZW50IGFzIHBlcmNlbnQKICAgICAgICAgIyBudW1iZXIuY2V4ID0gLjI1LCAjIHNpemUgb2YgdGhlIGNvZWZmCiAgICAgICAgICMgbnVtYmVyLmRpZ2l0cyA9IDIsICMgbnVtIGRlY2ltYWxzIGluIGNvZWZmCiAgICAgICAgICMgcC5tYXQgPSBtYWluX2NvcnJfcFtjKDE6OCwgOToyMCwgMjE6MjQpLCBjKDE6OCwgOToyMCwgMjE6MjQpXSwgc2lnLmxldmVsID0gLjA1CiAgICAgICAgIGluc2lnID0gImJsYW5rIiMgaW5zaWcgPSAicGNoIiwgcGNoID0gMTAsIHBjaC5jb2wgPSAicmVkIiwgcGNoLmNleCA9IC4xLCAjIGFkZCB0aGlzIGluc3RlYWQgb2YgaW5zaWcgYWJvdmUgdG8gZGVub3QgaW5zaWcgcCB2YWx1ZXMgd2l0aCByZWQgZG90CiAgICAgICAgICkKICByZWNvcmRQbG90KCkKfQoKIyBjb21wb3NpdGVzCmNvcnJfcGxvdF9tYWluX2NvbXAgPC0gewogIGNvcnJwbG90KG1haW5fY29ycl9yW2MoMjE6MjQpLCBjKDIxOjI0KV0sIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoImRhcmtzbGF0ZWJsdWUiLCAicHVycGxlMyIsICJkYXJrb3JjaGlkIiwgIndoaXRlIiwgImxpZ2h0c2VhZ3JlZW4iLCAiZGFya2N5YW4iLCAiZGVlcHNreWJsdWU0IikpKDUwMDApKSwKICAgICAgICAgdHlwZSA9ICJ1cHBlciIsCiAgICAgICAgIGRpYWcgPSBGLCAjIHJlbW92ZSBjZW50cmFsIGRpYWdvbmFsCiAgICAgICAgIHRsLmNvbCA9ICJkYXJrYmx1ZSIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuOCwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uCiAgICAgICAgIGFkZGdyaWQuY29sID0gTkEsICMgYWRkIGdyaWQgY29sb3VyCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICAjIGFkZENvZWZhc1BlcmNlbnQgPSBUICMgYWRkIGFzIGNvZWZmaWNpZW50IGFzIHBlcmNlbnQKICAgICAgICAgIyBudW1iZXIuY2V4ID0gLjI1LCAjIHNpemUgb2YgdGhlIGNvZWZmCiAgICAgICAgICMgbnVtYmVyLmRpZ2l0cyA9IDIsICMgbnVtIGRlY2ltYWxzIGluIGNvZWZmCiAgICAgICAgIHAubWF0ID0gbWFpbl9jb3JyX3BbYygyMToyNCksIGMoMjE6MjQpXSwgc2lnLmxldmVsID0gLjA1LAogICAgICAgICBpbnNpZyA9ICJibGFuayIjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICApCiAgcmVjb3JkUGxvdCgpCn0KCiMgZXhwb3J0IGNvcnIgbWF0cmljIHVzaW5nIGdnc2F2ZSgpICYgcmVwbGF5UGxvdCgpIHRvIGNhbGwgb24gcHJldmlvdXNseSBtYWRlIHBsb3QKIyBnZ3NhdmUoZmlsZW5hbWU9ImNvcnJfcGxvdF9tYWluX2NvbXBfb2N0NCIsIHBsb3QgPSByZXBsYXlQbG90KGNvcnJfcGxvdF9tYWluX2NvbXApLCBkZXZpY2UgPSAianBlZyIsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iLCBkcGkgPSAxMDAwKQoKIyBleHBvcnQgY3N2IGZpbGVzIG9mIFIgdmFsdWVzICYgcCB2YWx1ZXMKICAjIHdyaXRlLmNzdihtYWluX2NvcnJfciwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9tYWluX2NvcnJfcihzZXB0MzApLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgCiAgIyB3cml0ZS5jc3YobWFpbl9jb3JyX3AsIi9Vc2Vycy9hbmFjZWNpbGlhcnVpenBhcmRvL1JTdHVkaW8vU21hcnRwaG9uZV9zdHVkeS9TdHVkeSAyLSBDQlMgVHJpYWxzL0Rpc3NlcnRhdGlvbiAoMDY6MDc6MjEpL0V4Y2VsIE91dHB1dHMvbWFpbl9jb3JyX3Aoc2VwdDMwKS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAoKIyMjIFBpbG90ICYgTWFpbiBDb3JyZWxhdGlvbnMKQ3JlYXRlIGpvaW4gY29yciBwbG90IHdpdGggc3R1ZHkgMSAmIFN0dWR5IDIgZm9yIGVhc3kgY29tcGFyaXNvbi4gVGhpcyBvbmx5IGNvbXBhcmVzIHRoZSBpdGVtcyB0aGF0IHdlcmUgYXNrZWQgaW4gYm90aCBzdHVkaWVzOiBubyBDQlMgc2NvcmVzLiAKCmBgYHtyfQoKIyBUTyBKT0lOIFcvIFBJTE9UIERBVEEgCiMgZ2V0IGRhdGEgZnJvbSBtYWluIGRhdGEgZnJhbWUKIyBmb3IgcGlsb3QKcGlsb3RfY29ycl9qb2luIDwtIAogIHBpbG90X3N1cl9kYXRhICU+JSAKICBzZWxlY3QoYWdlLCBhZ2VfZmlyc3RfcGhvbmUsIGRpc3RfZGFpbHksIGRpc3Rfc3R1ZHksIE5NUFFfc3VtLCBNUElRX3N1bSwgTVBJUV9TSV9zdW0sIE1QSVFfVkZPX3N1bSwgU0FEX2RlcF9zdW0sIFNBRF9lYV9zdW0sIFNBRF9hY2Nlc3Nfc3VtLCBTQURfZGlzdF9zdW0sKSAlPiUgCiAgYXMubWF0cml4KCkgJT4lIAogIHJjb3JyKHR5cGUgPSAicGVhcnNvbiIpCgojIGZvciBzdHVkeSAyCm1haW5fY29ycl9qb2luIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgTk1QUV9zdW0sIE1QSVFfc3VtLCBNUElRX1NJX3N1bSwgTVBJUV9WRk9fc3VtLCBTQURfZGVwX3N1bSwgU0FEX2VhX3N1bSwgU0FEX2FjY2Vzc19zdW0sIFNBRF9kaXN0X3N1bSwgYFNjb3JlX0RvdWJsZSBUcm91YmxlYDpgU2NvcmVfTW9ua2V5IExhZGRlcmAsIENCU190c19tZW1vcnksIENCU190c19yZWFzb24sIENCU190c192ZXJiYWxhYiwgQ0JTX3RzX2NvbikgJT4lIAogIGFzLm1hdHJpeCgpICU+JSAKICByY29ycih0eXBlID0gInBlYXJzb24iKQoKIyBleHBvcnQKICAjIHBpbG90IHN0dWR5IAogICMgd3JpdGUuY3N2KGNiaW5kKGNvbG5hbWVzKHBpbG90X2NvcnJfam9pbiRyKSwgcGlsb3RfY29ycl9qb2luJHIpLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL0pPSU5fcGlsb3RfY29ycl9yKG9jdDQpLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKGNvbG5hbWVzKHBpbG90X2NvcnJfam9pbiRQKSwgcGlsb3RfY29ycl9qb2luJFApLCIvVXNlcnMvYW5hY2VjaWxpYXJ1aXpwYXJkby9SU3R1ZGlvL1NtYXJ0cGhvbmVfc3R1ZHkvU3R1ZHkgMi0gQ0JTIFRyaWFscy9EaXNzZXJ0YXRpb24gKDA2OjA3OjIxKS9FeGNlbCBPdXRwdXRzL0pPSU5fcGlsb3RfY29ycl9wKG9jdDQpLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogIAogICMgc3R1ZHkgMgogICMgd3JpdGUuY3N2KGNiaW5kKGNvbG5hbWVzKG1haW5fY29ycl9qb2luJHIpLCBtYWluX2NvcnJfam9pbiRyKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9KT0lOX21haW5fY29ycl9yKG9jdDQpLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQogICMgd3JpdGUuY3N2KGNiaW5kKGNvbG5hbWVzKG1haW5fY29ycl9qb2luJFApLCBtYWluX2NvcnJfam9pbiRQKSwiL1VzZXJzL2FuYWNlY2lsaWFydWl6cGFyZG8vUlN0dWRpby9TbWFydHBob25lX3N0dWR5L1N0dWR5IDItIENCUyBUcmlhbHMvRGlzc2VydGF0aW9uICgwNjowNzoyMSkvRXhjZWwgT3V0cHV0cy9KT0lOX21haW5fY29ycl9wKG9jdDQpLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKCiMgY29ycnBsb3QoTSwgcC5tYXQgPSB0ZXN0UmVzJHAsIG1ldGhvZCA9ICdjb2xvcicsIGRpYWcgPSBGQUxTRSwgdHlwZSA9ICd1cHBlcicsCiMgICAgICAgICAgc2lnLmxldmVsID0gYygwLjAwMSwgMC4wMSwgMC4wNSksIHBjaC5jZXggPSAwLjksIAojICAgICAgICAgIGluc2lnID0gJ2xhYmVsX3NpZycsIHBjaC5jb2wgPSAnZ3JleTIwJywgb3JkZXIgPSAnQU9FJykKICAKIyB1cGxvYWQgZWRpdGVkIGNzdnMgdG8gbWFrZSBqb2ludCBjb3JyIHBsb3QKIyBmb3Igci12YWx1ZXMKICBqb2ludF9jb3JyX3IgPC0gcmVhZC5jc3YoIkpPSU5UX2NvcnJfcihvY3Q0KS5jc3YiLCBoZWFkZXIgPSBUKSAlPiUgc2VsZWN0KC1YKQogICAgIyByZW5hbWUgY29sdW1ucyAmIHJvd3MKICAgIGNvbG5hbWVzKGpvaW50X2NvcnJfcikgPC0gYygiQWdlIiwgIkZpcnN0IFBob25lIiwgIkRhaWx5IERpc3QuIiwgIlN0dWR5IERpc3QuIiwgIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iKQogICAgcm93bmFtZXMoam9pbnRfY29ycl9yKSA8LSBjKCJBZ2UiLCAiRmlyc3QgUGhvbmUiLCAiRGFpbHkgRGlzdC4iLCAiU3R1ZHkgRGlzdC4iLCAiTk1QUSIsICJNUElROiBJIiwgIk1QSVE6IFNJIiwgIk1QSVE6IFZGTyIsICJTQUQ6IERlcC4iLCAiU0FEOiBFQSIsICJTQUQ6IEEiLCAiU0FEOiBEaXN0LiIpCiAgICAKICAgICMgY29sbmFtZXMoam9pbnRfY29ycl9yKSA8LSBjKCJBZ2UiLCAiQWdlIG9mIGZpcnN0IHBob25lIiwgIkRpc3QuIGRhaWx5IiwgIkRpc3QuIGR1cnJpbmcgc3R1ZHkiLCAiTk1QUSIsICJJbnZvbHZlbWVudCIsICJTZWxmLUlkZW50aXR5IiwgIlZhbGlkYXRpb24gZnJvbSBPdGhlcnMiLCAiRGVwZW5kZW5jZSIsICJFbW90aW9uYWwgQXR0YWNobWVudCIsICJBY2Nlc3NpYmlsaXR5IiwgIkRpc3RyYWN0YWJpbGl0eSIpCiAgICAjIHJvd25hbWVzKGpvaW50X2NvcnJfcikgPC0gYygiQWdlIiwgIkFnZSBvZiBmaXJzdCBwaG9uZSIsICJEaXN0LiBkYWlseSIsICJEaXN0LiBkdXJyaW5nIHN0dWR5IiwgIk5NUFEiLCAiSW52b2x2ZW1lbnQiLCAiU2VsZi1JZGVudGl0eSIsICJWYWxpZGF0aW9uIGZyb20gT3RoZXJzIiwgIkRlcGVuZGVuY2UiLCAiRW1vdGlvbmFsIEF0dGFjaG1lbnQiLCAiQWNjZXNzaWJpbGl0eSIsICJEaXN0cmFjdGFiaWxpdHkiKQogCiMgZm9yIHAtdmFsdWVzCiAgam9pbnRfY29ycl9wIDwtIHJlYWQuY3N2KCJKT0lOVF9jb3JyX3Aob2N0NCkuY3N2IiwgaGVhZGVyID0gVCkgJT4lIHNlbGVjdCgtWCkKICAgICMgcmVuYW1lIGNvbHVtbnMgJiByb3dzCiAgICBjb2xuYW1lcyhqb2ludF9jb3JyX3ApIDwtIGMoIkFnZSIsICJGaXJzdCBQaG9uZSIsICJEYWlseSBEaXN0LiIsICJTdHVkeSBEaXN0LiIsICJOTVBRIiwgIk1QSVE6IEkiLCAiTVBJUTogU0kiLCAiTVBJUTogVkZPIiwgIlNBRDogRGVwLiIsICJTQUQ6IEVBIiwgIlNBRDogQSIsICJTQUQ6IERpc3QuIikKICAgIHJvd25hbWVzKGpvaW50X2NvcnJfcCkgPC0gYygiQWdlIiwgIkZpcnN0IFBob25lIiwgIkRhaWx5IERpc3QuIiwgIlN0dWR5IERpc3QuIiwgIk5NUFEiLCAiTVBJUTogSSIsICJNUElROiBTSSIsICJNUElROiBWRk8iLCAiU0FEOiBEZXAuIiwgIlNBRDogRUEiLCAiU0FEOiBBIiwgIlNBRDogRGlzdC4iKQogICAgCiAgICAjIGNvbG5hbWVzKGpvaW50X2NvcnJfcCkgPC0gYygiQWdlIiwgIkFnZSBvZiBmaXJzdCBwaG9uZSIsICJEaXN0LiBkYWlseSIsICJEaXN0LiBkdXJyaW5nIHN0dWR5IiwgIk5NUFEiLCAiSW52b2x2ZW1lbnQiLCAiU2VsZi1JZGVudGl0eSIsICJWYWxpZGF0aW9uIGZyb20gT3RoZXJzIiwgIkRlcGVuZGVuY2UiLCAiRW1vdGlvbmFsIEF0dGFjaG1lbnQiLCAiQWNjZXNzaWJpbGl0eSIsICJEaXN0cmFjdGFiaWxpdHkiKQogICAgIyByb3duYW1lcyhqb2ludF9jb3JyX3ApIDwtIGMoIkFnZSIsICJBZ2Ugb2YgZmlyc3QgcGhvbmUiLCAiRGlzdC4gZGFpbHkiLCAiRGlzdC4gZHVycmluZyBzdHVkeSIsICJOTVBRIiwgIkludm9sdmVtZW50IiwgIlNlbGYtSWRlbnRpdHkiLCAiVmFsaWRhdGlvbiBmcm9tIE90aGVycyIsICJEZXBlbmRlbmNlIiwgIkVtb3Rpb25hbCBBdHRhY2htZW50IiwgIkFjY2Vzc2liaWxpdHkiLCAiRGlzdHJhY3RhYmlsaXR5IikKICAKICAjIGNvcnJwbG90KGFzLm1hdHJpeChqb2ludF9jb3JyX3IpKQogIApjb3JyX3Bsb3Rfam9pbnQgPC0gewogIGNvcnJwbG90KGFzLm1hdHJpeChqb2ludF9jb3JyX3IpLCBtZXRob2QgPSAiY29sb3IiLCAKICAgICAgICAgY29sID0gKGNvbG9yUmFtcFBhbGV0dGUoYygiZGFya3NsYXRlYmx1ZSIsICJwdXJwbGUzIiwgImRhcmtvcmNoaWQiLCAid2hpdGUiLCAibGlnaHRzZWFncmVlbiIsICJkYXJrY3lhbiIsICJkZWVwc2t5Ymx1ZTQiKSkoNTAwMCkpLCAgCiAgICAgICAgICMgdHlwZSA9ICJ1cHBlciIsCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICB0bC5jb2wgPSAiYmxhY2siLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjgsICNUZXh0IGxhYmVsIGNvbG9yIGFuZCByb3RhdGlvbiAmIHNpemUKICAgICAgICAgIyBhZGQgY29yciBudW1iZXJzIC0tIGVkaXQgc2l6ZQogICAgICAgICAjIGFkZENvZWYuY29sID0gImJsYWNrIiwgY2wuY2V4ID0gLjAxLCBjbC5sZW5ndGggPSAyLCAKICAgICAgICAgIyBncmlkIGNvbG91cgogICAgICAgICBhZGRncmlkLmNvbCA9ICJ3aGl0ZSIsCiAgICAgICAgICMgYWRkQ29lZmFzUGVyY2VudCA9IFQsCiAgICAgICAgICMgQ29tYmluZSB3aXRoIHNpZ25pZmljYW5jZSBsZXZlbAogICAgICAgICBwLm1hdCA9IGFzLm1hdHJpeChqb2ludF9jb3JyX3ApLCBzaWcubGV2ZWwgPSBjKDAuMDAxLCAwLjAxLCAwLjA1KSwgcGNoLmNleCA9IDAuOSwgCiAgICAgICAgIGluc2lnID0gJ3BjaCcsIHBjaC5jb2wgPSAiZ3JleTIwIiwKICAgICAgICAgIyBpbnNpZyA9ICJwY2giLCBwY2ggPSAxMCwgcGNoLmNvbCA9ICJyZWQiLCBwY2guY2V4ID0gLjEsICMgYWRkIHRoaXMgaW5zdGVhZCBvZiBpbnNpZyBhYm92ZSB0byBkZW5vdCBpbnNpZyBwIHZhbHVlcyB3aXRoIHJlZCBkb3QKICAgICAgICAgIyBoaWRlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IG9uIHRoZSBwcmluY2lwYWwgZGlhZ29uYWwKICAgICAgICAgZGlhZyA9IEZBTFNFCiAgICAgICAgICMgd2luLmFzcCA9IDEsIAogICAgICAgICAjIGNvbC5saW09YygtMSwgMSkgIyBzZXQgbGltaXRzIGZvciByLXZhbHVlcwogICAgICAgICApCiAgcmVjb3JkUGxvdCgpCn0KCiMgZXhwb3J0IGNvcnIgbWF0cmljIHVzaW5nIGdnc2F2ZSgpICYgcmVwbGF5UGxvdCgpIHRvIGNhbGwgb24gcHJldmlvdXNseSBtYWRlIHBsb3QKIyBnZ3NhdmUoZmlsZW5hbWU9ImNvcnJfcGxvdF9qb2ludF9zaG9ydF9vY3Q0IiwgcGxvdCA9IHJlcGxheVBsb3QoY29ycl9wbG90X2pvaW50KSwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKCmBgYAoKCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CgojIyMgTk9UIFVTRUQuLiBDT1VMRE5UIE1BS0UgQ09SUlBMT1QgV09SSyBXSVRIIElUICYgUkVOQU1FIFJPV1MgVE8gTUFUQ0ggQ09MUy4uLiAKIyBjcmVhdGUgbmV3IGRmIGZvciBjb3JycGxvciB3aXRoIGNsZWFuZWQgdXAgY29sbmFtZXMKIyB1c2UgcmVuYW1lX2F0KCkgdG8gcmVtb3ZlIHRoZSAiX3N1bSIgYXQgdGhlIGVuZCBvZiBjb2xzCiMgbWFpbl9jb3JyX3IgPC0gCiMgICBtYWluX2NvcnIkciAlPiUgCiMgICBhc190aWJibGUoKSAlPiUgCiMgICAKIyAgICMgcmVtb3ZlIHVud2FudGVkIGNvbHMKIyAgIHNlbGVjdCgtYyhhZ2U6Y29tX3Jvb21fdGFzaykpICU+JSAKIyAgIHJlbmFtZV9hdCh2YXJzKGVuZHNfd2l0aCgiX3N1bSIpKSwgZnVucyhzdHJfcmVtb3ZlKC4sICJfc3VtIikpKSAlPiUgCiMgCiMgICAjIHVzZSByZW5hbWVfYXQoKSB0byByZW1vdmUgdGhlICJTY29yZV8iIGF0IHRoZSBzdGFydCBvZiBjb2xzCiMgICByZW5hbWVfYXQodmFycyhzdGFydHNfd2l0aCgiU2NvcmVfIikpLCBmdW5zKHN0cl9yZW1vdmUoLiwgIlNjb3JlXyIpKSkgJT4lIAojICAgCiMgICAjIHJlbmFtZSBjb2xzIG9mIGludGVyZXN0IGFjY29yZGluZ2x5Li4uCiMgICAjIGZvciBxdWVzOiBNUElRCiMgICByZW5hbWUoIkludm9sdi4iID0gIk1QSVEiKSAlPiUgCiMgICAgICMgcmVtb3ZlIHRoZSAiTVBJUSIgZnJvbSByZXNwZWN0aXZlIGNvbHMKIyAgICAgcmVuYW1lX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk1QSVFfIikpLCBmdW5zKHN0cl9yZW1vdmUoLiwgIk1QSVFfIikpKSAlPiUgCiMgICAKIyAgICMgZm9yIHF1ZXM6IFNBRAojICAgICAjcmVtb3ZlIFNBRCAKIyAgICAgc2VsZWN0KC1TQUQpICU+JSAKIyAgICAgcmVuYW1lX2F0KHZhcnMoc3RhcnRzX3dpdGgoIlNBRF8iKSksIGZ1bnMoc3RyX3JlbW92ZSguLCAiU0FEXyIpKSkgJT4lIAojICAgICByZW5hbWUoIkRlcGVuLiIgPSAiZGVwIiwgIkVBIiA9ICJlYSIsICJBY2Nlc3MuIiA9ICJhY2Nlc3MiLCAiRGlzdC4iID0gImRpc3QiKSAlPiUgCiMgCiMgICAjIGZvciBDQlMgdGVzdHMKIyAgIHJlbmFtZSgiRFQiID0gIkRvdWJsZSBUcm91YmxlIiwgIk9PTyIgPSAiT2RkIE9uZSBPdXQiLCAiRFMiID0gIkRpZ2l0IFNwYW4iLCAiRk0iID0gIkZlYXR1cmUgTWF0Y2giLCAiUCIgPSAiUG9seWdvbnMiLCAiUEEiID0gIlBhaXJlZCBBc3NvY2lhdGVzIiwgIlRTIiA9ICJUb2tlbiBTZWFyY2giLCAiU1AiID0gIlNwYXRpYWwgUGxhbm5pbmciLCAiUiIgPSAiUm90YXRpb25zIiwgIlNTIiA9ICJTcGF0aWFsIFNwYW4iLCAiR1IiID0gIkdyYW1tYXRpY2FsIFJlYXNvbmluZyIsICJNTCIgPSAiTW9ua2V5IExhZGRlciIpICU+JSAKIyAgICAgICAgICAKIyAgICMgZm9yIGNvbXBvc2l0ZSBzY29yZXMKIyAgIHJlbmFtZSgiTWVtb3J5IiA9ICJDQlNfdHNfbWVtb3J5IiwgIlJlYXNvbmluZyIgPSAiQ0JTX3RzX3JlYXNvbiIsICJWZXJiYWwiID0gIkNCU190c192ZXJiYWxhYiIsICJDb25jZW50cmF0aW9uIiA9ICJDQlNfdHNfY29uIikgJT4lIAojICAgCiMgICAjbWFrZSBtYXRyaXggYWdhaW4KIyAgIGFzLm1hdHJpeCgpCmBgYAoKCkZvciBEZXNrLi4uIApgYGB7ciBtYWluX2NvcnJzX2Rlc2t9Cm1haW5fY29ycl9kZXNrIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIGFnZSwgYWdlX2ZpcnN0X3Bob25lLCBkaXN0X2RhaWx5LCBkaXN0X3N0dWR5LCBwb3dfbm90X3VzaW5nOnBvd19zbGVlcCwgY29tX2dlbjpjb21fcm9vbV90YXNrLCBjb25kaXRpb24sIE5NUFFfc3VtLCBNUElRX3N1bSwgTVBJUV9TSV9zdW0sIE1QSVFfVkZPX3N1bSwgU0FEX3N1bSwgU0FEX2RlcF9zdW0sIFNBRF9lYV9zdW0sIFNBRF9hY2Nlc3Nfc3VtLCBTQURfZGlzdF9zdW0sIGBTY29yZV9Eb3VibGUgVHJvdWJsZWA6YFNjb3JlX01vbmtleSBMYWRkZXJgLCBDQlNfb3ZlcmFsbCwgQ0JTX1NUTSwgQ0JTX3JlYXNvbiwgQ0JTX3ZlcmJhbCwgQ0JTX3RzX21lbW9yeSwgQ0JTX3RzX3JlYXNvbiwgQ0JTX3RzX3ZlcmJhbGFiLCBDQlNfdHNfY29uKSAlPiUgCiAgZmlsdGVyKGNvbmRpdGlvbiA9PSAiZGVzayIpICU+JSAKICBzZWxlY3QoLWNvbmRpdGlvbikgJT4lIAogIGFzLm1hdHJpeCgpICU+JQogIHJjb3JyKHR5cGUgPSAicGVhcnNvbiIpCgojIGNyZWF0ZSBuZXcgbWFpbl9jb3JyX2Rlc2sgdG8gc2hvd24gb25seSBsb3dlciB0cmlhbmdsZS4uLiAKbWFpbl9jb3JyX2Rlc2syIDwtIG1haW5fY29ycl9kZXNrCiMgcm91bmQgdG8gNCBkZWNpbWFscy4uLiAKbWFpbl9jb3JyX2Rlc2syJHIgPC0gcm91bmQobWFpbl9jb3JyX2Rlc2syJHIsIDQpCm1haW5fY29ycl9kZXNrMiRQIDwtIHJvdW5kKG1haW5fY29ycl9kZXNrMiRQLCA0KQptYWluX2NvcnJfZGVzazIkbiA8LSByb3VuZChtYWluX2NvcnJfZGVzazIkbiwgNCkKIyByZW1vdmUgdXBwZXIgdHJpYW5nbGUgZm9ybSByLCBwLCBhbmQgbgptYWluX2NvcnJfZGVzazIkclt1cHBlci50cmkobWFpbl9jb3JyX2Rlc2syJHIpXSA8LSAiLSIKbWFpbl9jb3JyX2Rlc2syJFBbdXBwZXIudHJpKG1haW5fY29ycl9kZXNrMiRQKV0gPC0gIi0iCm1haW5fY29ycl9kZXNrMiRuW3VwcGVyLnRyaShtYWluX2NvcnJfZGVzazIkbildIDwtICItIgoKIyBzaG93IGNvcnIgdGFibGUgd2l0aCBmbGF0dGVuQ29ycgoKa2FibGUoZmxhdHRlbkNvcnJNYXRyaXgobWFpbl9jb3JyX2Rlc2skciwgbWFpbl9jb3JyX2Rlc2skUCksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCiMgcHJpbnQgdGFibGVzIHVzaW5nIGthYmxlCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycl9kZXNrMiRyLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IHIgdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKICAKCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycl9kZXNrMiRQLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IHAgdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycl9kZXNrMiRuLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IG4gdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmNvcnJwbG90KG1haW5fY29ycl9kZXNrJHIsIG1ldGhvZCA9ICJjaXJjbGUiLCBjb2wgPSAoY29sb3JSYW1wUGFsZXR0ZShjKCJwdXJwbGUiLCAiZ3JleSIsICJibHVlIikpKDUwKSksICAKICAgICAgICAgdHlwZSA9ICJ1cHBlciIsICAKICAgICAgICAgIyBhZGRDb2VmLmNvbCA9ICJibGFjayIsICMgQWRkIGNvZWZmaWNpZW50IG9mIGNvcnJlbGF0aW9uCiAgICAgICAgIHRsLmNvbCA9ICJkYXJrYmx1ZSIsIHRsLnNydCA9IDkwLCB0bC5jZXggPSAuOCwgI1RleHQgbGFiZWwgY29sb3IgYW5kIHJvdGF0aW9uCiAgICAgICAgICMgQ29tYmluZSB3aXRoIHNpZ25pZmljYW5jZSBsZXZlbAogICAgICAgICBwLm1hdCA9IG1haW5fY29ycl9kZXNrJFAsIHNpZy5sZXZlbCA9IDAuMDUsIAogICAgICAgICBhZGRncmlkLmNvbCA9ICJ3aGl0ZSIsCiAgICAgICAgIGluc2lnID0gImJsYW5rIiwjIGluc2lnID0gInBjaCIsIHBjaCA9IDEwLCBwY2guY29sID0gInJlZCIsIHBjaC5jZXggPSAuMSwgIyBhZGQgdGhpcyBpbnN0ZWFkIG9mIGluc2lnIGFib3ZlIHRvIGRlbm90IGluc2lnIHAgdmFsdWVzIHdpdGggcmVkIGRvdAogICAgICAgICAjIGhpZGUgY29ycmVsYXRpb24gY29lZmZpY2llbnQgb24gdGhlIHByaW5jaXBhbCBkaWFnb25hbAogICAgICAgICBkaWFnID0gRkFMU0UsIAogICAgICAgICB3aW4uYXNwID0gMQogICAgICAgICApCmBgYAoKRm9yIFBvY2tldC9CYWcuLi4uCmBgYHtyIG1haW5fY29ycnNfcGJ9Cm1haW5fY29ycl9wYiA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBhZ2UsIGFnZV9maXJzdF9waG9uZSwgZGlzdF9kYWlseSwgZGlzdF9zdHVkeSwgcG93X25vdF91c2luZzpwb3dfc2xlZXAsIGNvbV9nZW46Y29tX3Jvb21fdGFzaywgY29uZGl0aW9uLCBOTVBRX3N1bSwgTVBJUV9zdW0sIE1QSVFfU0lfc3VtLCBNUElRX1ZGT19zdW0sIFNBRF9zdW0sIFNBRF9kZXBfc3VtLCBTQURfZWFfc3VtLCBTQURfYWNjZXNzX3N1bSwgU0FEX2Rpc3Rfc3VtLCBgU2NvcmVfRG91YmxlIFRyb3VibGVgOmBTY29yZV9Nb25rZXkgTGFkZGVyYCwgQ0JTX292ZXJhbGwsIENCU19TVE0sIENCU19yZWFzb24sIENCU192ZXJiYWwsIENCU190c19tZW1vcnksIENCU190c19yZWFzb24sIENCU190c192ZXJiYWxhYiwgQ0JTX3RzX2NvbikgJT4lIAogIGZpbHRlcihjb25kaXRpb24gPT0gInBvY2tldC9iYWciKSAlPiUgCiAgc2VsZWN0KC1jb25kaXRpb24pICU+JSAKICBhcy5tYXRyaXgoKSAlPiUKICByY29ycih0eXBlID0gInBlYXJzb24iKQoKIyBjcmVhdGUgbmV3IG1haW5fY29ycl9wYiB0byBzaG93biBvbmx5IGxvd2VyIHRyaWFuZ2xlLi4uIAptYWluX2NvcnJfcGIyIDwtIG1haW5fY29ycl9wYgojIHJvdW5kIHRvIDQgZGVjaW1hbHMuLi4gCm1haW5fY29ycl9wYjIkciA8LSByb3VuZChtYWluX2NvcnJfcGIyJHIsIDQpCm1haW5fY29ycl9wYjIkUCA8LSByb3VuZChtYWluX2NvcnJfcGIyJFAsIDQpCm1haW5fY29ycl9wYjIkbiA8LSByb3VuZChtYWluX2NvcnJfcGIyJG4sIDQpCiMgcmVtb3ZlIHVwcGVyIHRyaWFuZ2xlIGZvcm0gciwgcCwgYW5kIG4KbWFpbl9jb3JyX3BiMiRyW3VwcGVyLnRyaShtYWluX2NvcnJfcGIyJHIpXSA8LSAiLSIKbWFpbl9jb3JyX3BiMiRQW3VwcGVyLnRyaShtYWluX2NvcnJfcGIyJFApXSA8LSAiLSIKbWFpbl9jb3JyX3BiMiRuW3VwcGVyLnRyaShtYWluX2NvcnJfcGIyJG4pXSA8LSAiLSIKCiMgc2hvdyBjb3JyIHRhYmxlIHdpdGggZmxhdHRlbkNvcnIKCmthYmxlKGZsYXR0ZW5Db3JyTWF0cml4KG1haW5fY29ycl9wYiRyLCBtYWluX2NvcnJfcGIkUCksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCiMgcHJpbnQgdGFibGVzIHVzaW5nIGthYmxlCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycl9wYjIkciwgc2NpZW50aWZpYyA9IEZBTFNFKSksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uOiByIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCiAgCgprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChtYWluX2NvcnJfcGIyJFAsIHNjaWVudGlmaWMgPSBGQUxTRSkpLCBjYXB0aW9uID0gIlN0dWR5IDIgLSBDb3JyZWxhdGlvbjogcCB2YWx1ZXMiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiaG92ZXIiLCAic3RyaXBlZCIpLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYXMuZGF0YS5mcmFtZShmb3JtYXQobWFpbl9jb3JyX3BiMiRuLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IG4gdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmNvcnJwbG90KG1haW5fY29ycl9wYiRyLCBtZXRob2QgPSAiY2lyY2xlIiwgY29sID0gKGNvbG9yUmFtcFBhbGV0dGUoYygicHVycGxlIiwgImdyZXkiLCAiYmx1ZSIpKSg1MCkpLCAgCiAgICAgICAgIHR5cGUgPSAidXBwZXIiLCAgCiAgICAgICAgICMgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCAjIEFkZCBjb2VmZmljaWVudCBvZiBjb3JyZWxhdGlvbgogICAgICAgICB0bC5jb2wgPSAiZGFya2JsdWUiLCB0bC5zcnQgPSA5MCwgdGwuY2V4ID0gLjgsICNUZXh0IGxhYmVsIGNvbG9yIGFuZCByb3RhdGlvbgogICAgICAgICAjIENvbWJpbmUgd2l0aCBzaWduaWZpY2FuY2UgbGV2ZWwKICAgICAgICAgcC5tYXQgPSBtYWluX2NvcnJfcGIkUCwgc2lnLmxldmVsID0gMC4wNSwgCiAgICAgICAgIGFkZGdyaWQuY29sID0gIndoaXRlIiwKICAgICAgICAgaW5zaWcgPSAiYmxhbmsiLCMgaW5zaWcgPSAicGNoIiwgcGNoID0gMTAsIHBjaC5jb2wgPSAicmVkIiwgcGNoLmNleCA9IC4xLCAjIGFkZCB0aGlzIGluc3RlYWQgb2YgaW5zaWcgYWJvdmUgdG8gZGVub3QgaW5zaWcgcCB2YWx1ZXMgd2l0aCByZWQgZG90CiAgICAgICAgICMgaGlkZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBvbiB0aGUgcHJpbmNpcGFsIGRpYWdvbmFsCiAgICAgICAgIGRpYWcgPSBGQUxTRSwgCiAgICAgICAgIHdpbi5hc3AgPSAxCiAgICAgICAgICkKYGBgCgoKRm9yIE91dHNpZGUuLi4gCmBgYHtyIG1haW5fY29ycnNfb3V0fQptYWluX2NvcnJfb3V0IDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIGFnZSwgYWdlX2ZpcnN0X3Bob25lLCBkaXN0X2RhaWx5LCBkaXN0X3N0dWR5LCBwb3dfbm90X3VzaW5nOnBvd19zbGVlcCwgY29tX2dlbjpjb21fcm9vbV90YXNrLCBjb25kaXRpb24sIE5NUFFfc3VtLCBNUElRX3N1bSwgTVBJUV9TSV9zdW0sIE1QSVFfVkZPX3N1bSwgU0FEX3N1bSwgU0FEX2RlcF9zdW0sIFNBRF9lYV9zdW0sIFNBRF9kaXN0X3N1bSwgYFNjb3JlX0RvdWJsZSBUcm91YmxlYDpgU2NvcmVfTW9ua2V5IExhZGRlcmAsIENCU19vdmVyYWxsLCBDQlNfU1RNLCBDQlNfcmVhc29uLCBDQlNfdmVyYmFsLCBDQlNfdHNfbWVtb3J5LCBDQlNfdHNfcmVhc29uLCBDQlNfdHNfdmVyYmFsYWIsIENCU190c19jb24pICU+JSAKICBmaWx0ZXIoY29uZGl0aW9uID09ICJvdXRzaWRlIikgJT4lIAogIHNlbGVjdCgtY29uZGl0aW9uKSAlPiUgCiAgYXMubWF0cml4KCkgJT4lCiAgcmNvcnIodHlwZSA9ICJwZWFyc29uIikKCiMgY3JlYXRlIG5ldyBtYWluX2NvcnJfb3V0IHRvIHNob3duIG9ubHkgbG93ZXIgdHJpYW5nbGUuLi4gCm1haW5fY29ycl9vdXQyIDwtIG1haW5fY29ycl9vdXQKIyByb3VuZCB0byA0IGRlY2ltYWxzLi4uIAptYWluX2NvcnJfb3V0MiRyIDwtIHJvdW5kKG1haW5fY29ycl9vdXQyJHIsIDQpCm1haW5fY29ycl9vdXQyJFAgPC0gcm91bmQobWFpbl9jb3JyX291dDIkUCwgNCkKbWFpbl9jb3JyX291dDIkbiA8LSByb3VuZChtYWluX2NvcnJfb3V0MiRuLCA0KQojIHJlbW92ZSB1cHBlciB0cmlhbmdsZSBmb3JtIHIsIHAsIGFuZCBuCm1haW5fY29ycl9vdXQyJHJbdXBwZXIudHJpKG1haW5fY29ycl9vdXQyJHIpXSA8LSAiLSIKbWFpbl9jb3JyX291dDIkUFt1cHBlci50cmkobWFpbl9jb3JyX291dDIkUCldIDwtICItIgptYWluX2NvcnJfb3V0MiRuW3VwcGVyLnRyaShtYWluX2NvcnJfb3V0MiRuKV0gPC0gIi0iCgojIHNob3cgY29yciB0YWJsZSB3aXRoIGZsYXR0ZW5Db3JyCgprYWJsZShmbGF0dGVuQ29yck1hdHJpeChtYWluX2NvcnJfb3V0JHIsIG1haW5fY29ycl9vdXQkUCksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCiMgcHJpbnQgdGFibGVzIHVzaW5nIGthYmxlCmthYmxlKGFzLmRhdGEuZnJhbWUoZm9ybWF0KG1haW5fY29ycl9vdXQyJHIsIHNjaWVudGlmaWMgPSBGQUxTRSkpLCBjYXB0aW9uID0gIlN0dWR5IDIgLSBDb3JyZWxhdGlvbjogciB2YWx1ZXMiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiaG92ZXIiLCAic3RyaXBlZCIpLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQogIAoKa2FibGUoYXMuZGF0YS5mcmFtZShmb3JtYXQobWFpbl9jb3JyX291dDIkUCwgc2NpZW50aWZpYyA9IEZBTFNFKSksIGNhcHRpb24gPSAiU3R1ZHkgMiAtIENvcnJlbGF0aW9uOiBwIHZhbHVlcyIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJob3ZlciIsICJzdHJpcGVkIiksIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhcy5kYXRhLmZyYW1lKGZvcm1hdChtYWluX2NvcnJfb3V0MiRuLCBzY2llbnRpZmljID0gRkFMU0UpKSwgY2FwdGlvbiA9ICJTdHVkeSAyIC0gQ29ycmVsYXRpb246IG4gdmFsdWVzIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImhvdmVyIiwgInN0cmlwZWQiKSwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmNvcnJwbG90KG1haW5fY29ycl9vdXQkciwgbWV0aG9kID0gImNpcmNsZSIsIGNvbCA9IChjb2xvclJhbXBQYWxldHRlKGMoInB1cnBsZSIsICJncmV5IiwgImJsdWUiKSkoNTApKSwgIAogICAgICAgICB0eXBlID0gInVwcGVyIiwgIAogICAgICAgICAjIGFkZENvZWYuY29sID0gImJsYWNrIiwgIyBBZGQgY29lZmZpY2llbnQgb2YgY29ycmVsYXRpb24KICAgICAgICAgdGwuY29sID0gImRhcmtibHVlIiwgdGwuc3J0ID0gOTAsIHRsLmNleCA9IC44LCAjVGV4dCBsYWJlbCBjb2xvciBhbmQgcm90YXRpb24KICAgICAgICAgIyBDb21iaW5lIHdpdGggc2lnbmlmaWNhbmNlIGxldmVsCiAgICAgICAgIHAubWF0ID0gbWFpbl9jb3JyX291dCRQLCBzaWcubGV2ZWwgPSAwLjA1LCAKICAgICAgICAgYWRkZ3JpZC5jb2wgPSAid2hpdGUiLAogICAgICAgICBpbnNpZyA9ICJibGFuayIsIyBpbnNpZyA9ICJwY2giLCBwY2ggPSAxMCwgcGNoLmNvbCA9ICJyZWQiLCBwY2guY2V4ID0gLjEsICMgYWRkIHRoaXMgaW5zdGVhZCBvZiBpbnNpZyBhYm92ZSB0byBkZW5vdCBpbnNpZyBwIHZhbHVlcyB3aXRoIHJlZCBkb3QKICAgICAgICAgIyBoaWRlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IG9uIHRoZSBwcmluY2lwYWwgZGlhZ29uYWwKICAgICAgICAgZGlhZyA9IEZBTFNFLCAKICAgICAgICAgd2luLmFzcCA9IDEKICAgICAgICAgKQpgYGAKCiMjIEFOT1ZBUwoKb25lLXdheSBBTk9WQSAoSVY6IHNtYXJ0cGhvbmUgbG9jYXRpb24sIGRlc2ssIHBvY2tldC9iYWcsIG91dHNpZGU7IERWOiBDQlMgcGVyZm9ybWFuY2UpLgoKLSBDQlMgUGVyZm9ybWFuY2UgaXM6CiAgICAtIENCU19vdmVyYWxsID0gY29tcG9zaXRlIHNjb3JlIG9mIGFsbCAxMiBDQlMgdGFza3MKICAgIC0gRGF0YS1kcml2ZW4gZmFjdG9yczoKICAgICAgICAtIENCU19TVE0gPSBTaG9ydCBUZXJtIE1lbW9yeSA9IGNvbXBvc2l0ZSBzY29yZSBmb3IgNCBDQlMgdGFza3M6IFNwYXRpYWwgU3BhbiAoU1MpLCBNb25rZXkgTGFkZGVyIChNTCksIFBhaXJlZCBBc3NvY2lhdGVzIChQQSksIFRva2VuIFNlYXJjaCAoVFMpCiAgICAgICAgLSBDQlNfcmVhc29uID0gU2hvcnQgVGVybSBNZW1vcnkgPSBjb21wb3NpdGUgc2NvcmUgZm9yIDUgQ0JTIHRhc2tzOiBPZGQgT25lIE91dCAoT09PKSwgUm90YXRpb25zIChSKSwgRmVhdHVyZSBNYXRjaCAoRk0pLCBTcGF0aWFsIFRyZWUvUGxhbm5pbmcgKFNQKSwgUG9seWdvbnMgKFApCiAgICAgICAgLSBDQlNfdmVyYmFsID0gU2hvcnQgVGVybSBNZW1vcnkgPSBjb21wb3NpdGUgc2NvcmUgZm9yIDMgQ0JTIHRhc2tzOiBHcmFtbWF0aWNhbCBSZWFzb25pbmcgKEdSKSwgRG91YmxlIFRyb3VibGUgKERUKSwgRGlnaXQgU3BhbiAoRFMpCgojIyMgQVNTVU1QVElPTlMgLS0gZm9yIGVhY2guLi4gClRoZSBBTk9WQSBtYWRlIHRocmVlIGFzc3VtcHRpb25zOiBpbmRlcGVuZGVudCByYW5kb20gc2FtcGxpbmcgKG1ldCBkdXJpbmcgdGVzdGluZyksIG5vcm1hbGl0eSAodGVzdGVkIGJ5IHZpc3VhbGl6aW5nIHRoZSByZXNpZHVhbHMsIGFwcGx5aW5nIGEgU2hhcGlyby1XaWxrIHRlc3QgdG8gdGhlIHJlc2lkdWFscywgYW5kIG9ic2VydmluZyB0aGUgU2tld25lc3MgYW5kIEt1cnRvc2lzIG9mIHRoZSBkYXRhKSwgYW5kIGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlIChsZXZlbmVzKS4gKipBbGwgYXNzdW1wdGlvbnMgd2VyZSBtZXQhKioKCkdldCB0aGUgZGF0YSBmb3IgZWFjaCBhbmFseXNpcwpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKIyBnZXQgdGhlIHJlcXVpcmVkIGRhdGEgZnJvbSBhbGwgZGF0YTogcGFydGljaXBhbnQsIGNvbmRpdGlvbiwgc2NvcmUKIyMgT1ZFUkFMTAphbm92YV9vdmVyYWxsX2RhdGEgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIENCU19vdmVyYWxsKQoKIyMgU1RNCmFub3ZhX1NUTV9kYXRhIDwtCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgQ0JTX1NUTSkKCiMgYW5vdmFfU1RNX2RhdGEgPC0gCiMgICBjYmluZChtYWluX2FsbF9kYXRhX2ZpbmFsICU+JQojICAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24pLCAKIyAgIHNjb3Jlc1ssMV0pCiMgY29sbmFtZXMoYW5vdmFfU1RNX2RhdGEpIDwtIGMoInBhcnRpY2lwYW50IiwgImNvbmRpdGlvbiIsICJDQlNfU1RNIikKCiMgdGVzdGluZ19kYXRhIDwtCiMgICBjYmluZChtYWluX2FsbF9kYXRhX2ZpbmFsJENCU19vdmVyYWxsLAojICAgICAgICAgbWFpbl9hbGxfZGF0YV9maW5hbCRaU2NvcmVfRFMsCiMgICAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsJENCU19TVE0sCiMgICAgICAgICBzY29yZXNbLDFdLAojICAgICAgICAgbWFpbl9hbGxfZGF0YV9maW5hbCRDQlNfcmVhc29uLAojICAgICAgICAgc2NvcmVzWywyXSwKIyAgICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWwkQ0JTX3ZlcmJhbCwKIyAgICAgICAgIHNjb3Jlc1ssM10pCgojIyBSRUFTT04KYW5vdmFfcmVhc29uX2RhdGEgPC0KICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JQogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBDQlNfcmVhc29uKQoKIyBhbm92YV9yZWFzb25fZGF0YSA8LSAKIyAgIGNiaW5kKG1haW5fYWxsX2RhdGFfZmluYWwgJT4lCiMgICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiksIAojICAgc2NvcmVzWywxXSkKIyBjb2xuYW1lcyhhbm92YV9yZWFzb25fZGF0YSkgPC0gYygicGFydGljaXBhbnQiLCAiY29uZGl0aW9uIiwgIkNCU19yZWFzb24iKQoKIyMgVkVSQkFMCmFub3ZhX3ZlcmJhbF9kYXRhIDwtCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgQ0JTX3ZlcmJhbCkKCiMgYW5vdmFfdmVyYmFsX2RhdGEgPC0gCiMgICBjYmluZChtYWluX2FsbF9kYXRhX2ZpbmFsICU+JQojICAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24pLCAKIyAgIHNjb3Jlc1ssMV0pCiMgY29sbmFtZXMoYW5vdmFfdmVyYmFsX2RhdGEpIDwtIGMoInBhcnRpY2lwYW50IiwgImNvbmRpdGlvbiIsICJDQlNfdmVyYmFsIikKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX292ZXJhbGwgPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfb3ZlcmFsbF9kYXRhCiAgLCBkdiA9IC4oQ0JTX292ZXJhbGwpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCiMjIFNUTQphbm92YV9TVE0gPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfU1RNX2RhdGEKICAsIGR2ID0gLihDQlNfU1RNKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgojIyBSRUFTT04KYW5vdmFfcmVhc29uIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX3JlYXNvbl9kYXRhCiAgLCBkdiA9IC4oQ0JTX3JlYXNvbikKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKIyMgVkVSQkFMCmFub3ZhX3ZlcmJhbCA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV92ZXJiYWxfZGF0YQogICwgZHYgPSAuKENCU192ZXJiYWwpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCiMgY2FsY3VsYXRlICYgZXh0cmFjdCB0aGUgcmVzaWR1YWxzIGZyb20gdGhlIEFOT1ZBcyAtLSBmb3IgZWFjaAphbm92YV9vdmVyYWxsX3JlcyA8LSBkYXRhLmZyYW1lKCJyZXNpZHVhbHMiID0gYW5vdmFfb3ZlcmFsbCRhb3YkcmVzaWR1YWxzKQphbm92YV9TVE1fcmVzIDwtIGRhdGEuZnJhbWUoInJlc2lkdWFscyIgPSBhbm92YV9TVE0kYW92JHJlc2lkdWFscykKYW5vdmFfcmVhc29uX3JlcyA8LSBkYXRhLmZyYW1lKCJyZXNpZHVhbHMiID0gYW5vdmFfcmVhc29uJGFvdiRyZXNpZHVhbHMpCmFub3ZhX3ZlcmJhbF9yZXMgPC0gZGF0YS5mcmFtZSgicmVzaWR1YWxzIiA9IGFub3ZhX3ZlcmJhbCRhb3YkcmVzaWR1YWxzKQoKCmBgYAoKCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgdGhpcyBydW5zIGEgTUFOT1ZBIC0tIGp1c3QgZXhwbG9yZWQgdGhpcyBvcHRpb24gYnV0IGRpZG50IHJlcG9ydCBpdC4uLiAKIyBhbm92YV90ZXN0X2RhdGEgPC0gCiMgICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKIyAgIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBjb250YWlucygiWlNjb3JlXyIpKQojIAojICMgTUFOT1ZBIHRlc3QKIyByZXMubWFuIDwtIG1hbm92YShjYmluZChaU2NvcmVfRFMsIFpTY29yZV9EVCwgWlNjb3JlX0ZNLCBaU2NvcmVfR1IsIFpTY29yZV9NTCwgWlNjb3JlX09PTywgWlNjb3JlX1BBLCBaU2NvcmVfUCwgWlNjb3JlX1IsIFpTY29yZV9TUCwgWlNjb3JlX1NTLCBaU2NvcmVfVFMpIH4gY29uZGl0aW9uLCBkYXRhID0gYW5vdmFfdGVzdF9kYXRhKQojIHN1bW1hcnkocmVzLm1hbikKIyBzdW1tYXJ5LmFvdihyZXMubWFuKQpgYGAKCgojIyMjIE5vcm1hbGl0eQoKQ2hlY2sgcXFwbG90cyBmb3IgZWFjaC4uLgoKYGBge3J9CmdyaWQuYXJyYW5nZShnZ3FxcGxvdChhbm92YV9vdmVyYWxsX3JlcyRyZXNpZHVhbHMsIHlsYWIgPSAiT1ZFUkFMTCIsIHNoYXBlID0gMSksCiAgICAgICAgICAgICBnZ3FxcGxvdChhbm92YV9TVE1fcmVzJHJlc2lkdWFscywgeWxhYiA9ICJTVE0iLCBzaGFwZSA9IDEpLAogICAgICAgICAgICAgZ2dxcXBsb3QoYW5vdmFfcmVhc29uX3JlcyRyZXNpZHVhbHMsIHlsYWIgPSAiUkVBU09OSU5HIiwgc2hhcGUgPSAxKSwKICAgICAgICAgICAgIGdncXFwbG90KGFub3ZhX3ZlcmJhbF9yZXMkcmVzaWR1YWxzLCB5bGFiID0gIlZFUkJBTCIsIHNoYXBlID0gMSksCiAgICAgICAgICAgICBucm93ID0gMiwKICAgICAgICAgICAgIHRvcCA9IHRleHRfZ3JvYigiUS1RIFBsb3RzIEZvciBBbGwgQU5PVkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gImJvbGQiKSwKICAgICAgICAgICAgIGJvdHRvbSA9IHRleHRfZ3JvYigiTm9ybWFsaXR5IGlzIG1ldCBmb3IgcGxvdHMgd2VyZSBkYXRhIGZhbGxzIGFsb25nIG9yIGNsb3NlIHRvIHRoZSBsaW5lLiAqIFMtVyBwIDwgLjA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGp1c3QgPSAwKQogICAgICAgICAgICAgKQpgYGAKQ2hlY2sgaGlzdCBvZiByZXNpZHVhbHMuLi4KCmBgYHtyfQpncmlkLmFycmFuZ2UocXBsb3QoYW5vdmFfb3ZlcmFsbF9yZXMkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKSwKICAgICAgICAgICAgIHFwbG90KGFub3ZhX1NUTV9yZXMkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKSwKICAgICAgICAgICAgIHFwbG90KGFub3ZhX3JlYXNvbl9yZXMkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKSwKICAgICAgICAgICAgIHFwbG90KGFub3ZhX3ZlcmJhbF9yZXMkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKSwKICAgICAgICAgICAgIG5yb3cgPSAyLAogICAgICAgICAgICAgdG9wID0gdGV4dF9ncm9iKCJIaXN0b2dyYW0gb2YgUmVzaWR1bGFzIEZvciBBbGwgQU5PVkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gImJvbGQiKSwKICAgICAgICAgICAgIGJvdHRvbSA9IHRleHRfZ3JvYigiTm9ybWFsaXR5IGlzIG1ldCBmb3IgcGxvdHMgd2VyZSBkYXRhIGZhbGxzIGFsb25nIG9yIGNsb3NlIHRvIGEgbm9ybWFsIGN1cnZlLiAqIFMtVyBwIDwgLjA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGp1c3QgPSAwKQogICAgICAgICAgICAgKQoKYGBgCgpTaG93IHRoZSByZXN1bHRzIG9mIGEgU2hhcGlyby1XaWxrIHRlc3Qgb2Ygbm9ybWFsaXR5IGZvciBlYWNoLi4uIAoKYGBge3J9CnNoYXBpcm9fYWxsIDwtIHJiaW5kKGMoc2hhcGlyby50ZXN0KGFub3ZhX292ZXJhbGxfcmVzJHJlc2lkdWFscykkc3RhdGlzdGljLCBzaGFwaXJvLnRlc3QoYW5vdmFfb3ZlcmFsbF9yZXMkcmVzaWR1YWxzKSRwLnZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgYyhzaGFwaXJvLnRlc3QoYW5vdmFfU1RNX3JlcyRyZXNpZHVhbHMpJHN0YXRpc3RpYywgc2hhcGlyby50ZXN0KGFub3ZhX1NUTV9yZXMkcmVzaWR1YWxzKSRwLnZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgYyhzaGFwaXJvLnRlc3QoYW5vdmFfcmVhc29uX3JlcyRyZXNpZHVhbHMpJHN0YXRpc3RpYywgc2hhcGlyby50ZXN0KGFub3ZhX3JlYXNvbl9yZXMkcmVzaWR1YWxzKSRwLnZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgYyhzaGFwaXJvLnRlc3QoYW5vdmFfdmVyYmFsX3JlcyRyZXNpZHVhbHMpJHN0YXRpc3RpYywgc2hhcGlyby50ZXN0KGFub3ZhX3ZlcmJhbF9yZXMkcmVzaWR1YWxzKSRwLnZhbHVlKQogICAgICAgICAgICAgICAgICAgICApCmNvbG5hbWVzKHNoYXBpcm9fYWxsKSA8LSBjKCJXIiwgInAiKQpyb3duYW1lcyhzaGFwaXJvX2FsbCkgPC0gYygiT1ZFUkFMTCIsICJTVE0iLCAiUkVBU09OSU5HIiwgIlZFUkJBTCIpCgprYWJsZShzaGFwaXJvX2FsbCwgY2FwdGlvbiA9ICJSZXN1bHRzIG9mIHNoYXBpcm8td2lsayB0ZXN0IG9mIG5vcm1hbGl0eSBmb3IgYWxsIEFOT1ZBcy4iLCByb3cubmFtZXMgPSBUUlVFLCBhbGlnbiA9ICdjJywgZGlnaXRzID0gNCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKICBrYWJsZV9jbGFzc2ljKCkKCmBgYAoKUmV2aWV3IHNrZXcgJiBrdXJ0b3NpcyBmb3IgZWFjaC4uLiAKCi0gcmFuZ2Ugd2FudGVkOiBTa2V3ID0gICRccG0gMi4wJCAmIEt1cnRvc2lzID0gICRccG0gOS4wJCAgKFNjaG1pZGVyLCBaaWVnbGVyLCBEYW5heSwgQmV5ZXIsICYgQsO8aG5lciwgMjAxMCkKCmBgYHtyfQpza19hbGwgPC0gcmJpbmQoYyhwc3ljaDo6ZGVzY3JpYmUoYW5vdmFfb3ZlcmFsbF9kYXRhKSRza2V3WzNdLCBwc3ljaDo6ZGVzY3JpYmUoYW5vdmFfb3ZlcmFsbF9kYXRhKSRrdXJ0b3Npc1szXSksIAogICAgICAgICAgICAgICAgYyhwc3ljaDo6ZGVzY3JpYmUoYW5vdmFfU1RNX2RhdGEpJHNrZXdbM10sIHBzeWNoOjpkZXNjcmliZShhbm92YV9TVE1fZGF0YSkka3VydG9zaXNbM10pLCAKICAgICAgICAgICAgICAgIGMocHN5Y2g6OmRlc2NyaWJlKGFub3ZhX3JlYXNvbl9kYXRhKSRza2V3WzNdLCBwc3ljaDo6ZGVzY3JpYmUoYW5vdmFfcmVhc29uX2RhdGEpJGt1cnRvc2lzWzNdKSwgCiAgICAgICAgICAgICAgICBjKHBzeWNoOjpkZXNjcmliZShhbm92YV92ZXJiYWxfZGF0YSkkc2tld1szXSwgcHN5Y2g6OmRlc2NyaWJlKGFub3ZhX3ZlcmJhbF9kYXRhKSRrdXJ0b3Npc1szXSkKICAgICAgICAgICAgICAgICkKY29sbmFtZXMoc2tfYWxsKSA8LSBjKCJza2V3IiwgImt1dG9zaXMiKQpyb3duYW1lcyhza19hbGwpIDwtIGMoIk9WRVJBTEwiLCAiU1RNIiwgIlJFQVNPTklORyIsICJWRVJCQUwiKQoKa2FibGUoc2tfYWxsLCBjYXB0aW9uID0gIlNrZXcgYW5kIEt1cnRvc2lzIGZvciBhbGwgQU5PVkFzLiIsIHJvdy5uYW1lcyA9IFRSVUUsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQpgYGAKCiMjIyMgSG9tb2dlbmVpdHkgb2YgVmFyaWFuY2UKCkNoZWNrIGxldmVuZXMgZm9yIGVhY2ggQU5PVkEuLi4gCgpgYGB7cn0KCmxldmVuZXNfYWxsIDwtIHJiaW5kKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9vdmVyYWxsX2RhdGEsIENCU19vdmVyYWxsIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSksIAogICAgICAgICAgICAgICAgICAgICB1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfU1RNX2RhdGEsIENCU19TVE0gfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKSwgCiAgICAgICAgICAgICAgICAgICAgIHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9yZWFzb25fZGF0YSwgQ0JTX3JlYXNvbiB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpLCAKICAgICAgICAgICAgICAgICAgICAgdW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX3ZlcmJhbF9kYXRhLCBDQlNfdmVyYmFsIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSkKICAgICAgICAgICAgICAgICAgICAgKQpjb2xuYW1lcyhsZXZlbmVzX2FsbCkgPC0gYygiREYxIiwgIkRGMiIsICJGIiwgIkYyIiwgInAiLCAicDwuMDUiKQpyb3duYW1lcyhsZXZlbmVzX2FsbCkgPC0gYygiT1ZFUkFMTCIsICJTVE0iLCAiUkVBU09OSU5HIiwgIlZFUkJBTCIpCgoKa2FibGUobGV2ZW5lc19hbGxbLGMoMTozLCA1KV0sIGNhcHRpb24gPSAiTGV2ZW5lcyB0ZXN0IGZvciBhbGwgQU5PVkFzLiIsIHJvdy5uYW1lcyA9IFRSVUUsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogIGthYmxlX2NsYXNzaWMoKQogICAgICAgICAgICAgICAgICAgICAKYGBgCgoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyMjIyMjIFRBS0VOIEZST00gTUFSS0RPV04uLi4gCiMjIyMjIEFkanVzdGVkIEFOT1ZBKHMpCiMgU2luY2UgdGhlIHJlYXNvbmluZyBzY29yZSBkaWQgbm90IG1lZXQgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2UgYW5kIHNpbmNlIHRoZXJlIGFyZSB1bmVxdWFsIHNhbXBsZSBzaXplcywgYSBXaGl0ZS1jb3JyZWN0ZWQgRi10ZXN0IHdhcyBjb21wbGV0ZWQgZm9yIHJlYXNvbmluZy4gCgojIC0gU2luY2UgdGhlIGV6QU5PVkEgZnVuY3Rpb24gY2FuIG9ubHkgY29tcGxldGUgYSBXaGl0ZS1jb3JyZWN0ZWQgRi10ZXN0IG9uIGJldHdlZW4tc3ViamVjdCBmYWN0b3JzLCBhIHNlcGFyYXRlIEFOT1ZBIHdhcyBjb21wdXRlZCB1c2luZyB0aGlzIGNvcnJlY3Rpb24gZm9yIHRoZSBiZXR3ZWVuLXN1YmplY3QgZWZmZWN0cy4gQWRkaXRpb25hbGx5LCB0aGUgZWZmZWN0IHNpemVzIHdlcmUgY29tcHV0ZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgRXRhU3EgZnVuY3Rpb24uCgojICMgY29tcGxldGUgd2hpdGUtY29yciBBTk9WQSBmb3IgUkVBU09OCiMgYW5vdmFfcmVhc29uX3doaXRlIDwtIGV6QU5PVkEoCiMgICBkYXRhID0gYW5vdmFfcmVhc29uX2RhdGEKIyAgICwgZHYgPSAuKENCU19yZWFzb24pCiMgICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiMgICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKIyAgICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwojICAgLCBkZXRhaWxlZCA9IFRSVUUKIyAgICwgcmV0dXJuX2FvdiA9IFRSVUUKIyAgICwgd2hpdGUuYWRqdXN0ID0gVFJVRQojICAgKQojICMgY29tcHV0ZSBlZmZlY3Qgc2l6ZQojIGFub3ZhX3JlYXNvbl93aGl0ZV9lcyA8LSBFdGFTcShhbm92YV9yZWFzb25fd2hpdGUkYW92LCB0eXBlID0gMywgYW5vdmEgPSBGQUxTRSkKCgojIFRPIFNIT1cgS0FCTEUgVEFCTEU6IAojICAgCiMga2FibGUoY2JpbmQoYW5vdmFfcmVhc29uX3doaXRlJEFOT1ZBWzIsXSwgZGF0YS5mcmFtZSgiZ2VzIiA9IGMoYW5vdmFfcmVhc29uX3doaXRlX2VzWzJdKSkpLCBjYXB0aW9uID0gIlJFQVNPTklORyAtIG9uZS13YXkgQU5PVkEiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiMgICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lCiMgICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiMgICBrYWJsZV9jbGFzc2ljKCkKIyAgICMgdXNlIG9ubHkgaWYgaG9tb2dlbmVpdHkgbWV0Li4uIAojICAgIyBrYWJsZShhbm92YV9yZWFzb25fd2hpdGUkQU5PVkEsIGNhcHRpb24gPSAiUkVBU09OSU5HIC0gb25lLXdheSBBTk9WQSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKIyAgICMgICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAojICAgIyAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiMgICAjICAga2FibGVfY2xhc3NpYygpCiMgCiMgcGxvdChhbm92YV9yZWFzb25fZGF0YSRjb25kaXRpb24sIGFub3ZhX3JlYXNvbl9kYXRhJENCU19yZWFzb24pCmBgYAoKIyMjIFJlc3VsdHMKIyMjIyBEYXRhLURyaXZlbiAoSGFtcHNoaXJlIGV0IGFsLiwgMjAxMikKU2hvdyBhbm92YSB0YWJsZXMgZm9yIGVhY2ggQU5PVkEuLi4KYGBge3J9CiMgc2hvdyBBTk9WQSByZXN1bHRzIGluIGthYmxlIHRhYmxlIAprYWJsZShhbm92YV9vdmVyYWxsJEFOT1ZBWzIsXSwgY2FwdGlvbiA9ICJPVkVSQUxMIC0gb25lLXdheSBBTk9WQSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX292ZXJhbGxfZGF0YSRjb25kaXRpb24sIGFub3ZhX292ZXJhbGxfZGF0YSRDQlNfb3ZlcmFsbCkKCmthYmxlKGFub3ZhX1NUTSRBTk9WQVsyLF0sIGNhcHRpb24gPSAiU1RNIC0gb25lLXdheSBBTk9WQSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX1NUTV9kYXRhJGNvbmRpdGlvbiwgYW5vdmFfU1RNX2RhdGEkQ0JTX1NUTSkKCmthYmxlKGFub3ZhX3JlYXNvbiRBTk9WQVsyLF0sIGNhcHRpb24gPSAicmVhc29uIC0gb25lLXdheSBBTk9WQSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX3JlYXNvbl9kYXRhJGNvbmRpdGlvbiwgYW5vdmFfcmVhc29uX2RhdGEkQ0JTX3JlYXNvbikKCgprYWJsZShhbm92YV92ZXJiYWwkQU5PVkFbMixdLCBjYXB0aW9uID0gIlZFUkJBTCAtIG9uZS13YXkgQU5PVkEiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV92ZXJiYWxfZGF0YSRjb25kaXRpb24sIGFub3ZhX3ZlcmJhbF9kYXRhJENCU192ZXJiYWwpCmBgYAoKCiMjIyMgVGFzayBTZWxlY3Rpb24gQ29tcG9zaXRlIFNjb3JlcwojIyMjIyBUUyAtICBNRU1PUlkKYGBge3J9CiMjIEZPUiB0c19tZW1vcnkKYW5vdmFfZGF0YV90c19tZW1vcnkgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIENCU190c19tZW1vcnkpICU+JSAKICByZW5hbWUoc2NvcmUgPSBDQlNfdHNfbWVtb3J5KQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfdHNfbWVtb3J5IDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfdHNfbWVtb3J5CiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX3RzX21lbW9yeSRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX3RzX21lbW9yeSRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX3RzX21lbW9yeSRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV90c19tZW1vcnksIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX3RzX21lbW9yeSRBTk9WQSwgY2FwdGlvbiA9ICJ0c19tZW1vcnkgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV90c19tZW1vcnkkY29uZGl0aW9uLCBhbm92YV9kYXRhX3RzX21lbW9yeSRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX3RzX21lbW9yeSwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIE1lbW9yeSIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQoKYW5vdmFfdmlvbGluX21lbW9yeSA8LQogIGdncGxvdChhbm92YV9kYXRhX3RzX21lbW9yeSwgYWVzKHkgPSBzY29yZSwgeCA9IGNvbmRpdGlvbiwgY29sb3IgPSBjb25kaXRpb24pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgICAjIGFkZCB2aW9saW4gcGxvdAogICAgZ2VvbV92aW9saW4odHJpbSA9IEYsIHNob3cubGVnZW5kID0gRikgKwogICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byB2aW9saW5zCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKyAKICAgICMgYWRkIGxhYmVscwogICAgbGFicygKICAgICAgIHRpdGxlID0gIk1lbW9yeSBDb21wb3NpdGUgU2NvcmUgYnkgU21hcnRwaG9uZSBMb2NhdGlvbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJTUywgTUwsIFRTLCBQQSIsCiAgICAgICBjYXB0aW9uID0gIk5vdGU6IFRoZSBwbG90IHNob3dzIHRoZSBkZW5zaXR5IGN1cnZlIG9mIHRoZSBkYXRhICh2aW9saW4pLCBpbmR2IGRhdGEgZm9yIGVhY2ggcCAoY29sb3VyZWQgZG90cyksIGludGVycXVhcnRpbGUgcmFuZ2UgJiBtZWRpYW4gKGJsYWNrIGJveHBsb3QpLCBhbmQgdGhlIE0gJiBTRCAocmVkIGRvdHMgYW5kIHdoaXNrZXJzKSIsCiAgICAgICB4ID0gIlNtYXJ0cGhvbmUgTG9jYXRpb24iLCAKICAgICAgIHkgPSAiTWVtb3J5IENvbXBvc2l0ZSBTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpKwogICAgIyBhZGp1c3QgeSBheGlzIHNjYWxlCiAgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSkgKwogICAgIyBhZGQgbWVkaWFuICYgcXVhcnRpbGUgKGkuZS4sIGJveCBwbG90KQogICAgZ2VvbV9ib3hwbG90KGNvbG91ciA9ICJibGFjayIsIHdpZHRoID0gLjQ1LCBzaG93LmxlZ2VuZCA9IEYsIG91dGxpZXIuc2hhcGUgPSBOQSwgY29lZiA9IDApICsKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKwogICAgIyBhZGQgTSBwb2ludCAmIFNEIHdoaXNrZXIKICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgbXVsdD0xLCBnZW9tPSJwb2ludHJhbmdlIiwgY29sb3I9IiNCQjBBMjEiLCBzaGFwZT0xOCwgc2l6ZSA9IDEpICsgCiAgICAjIGdlb21fcG9pbnQoc3RhdD0ic3VtbWFyeSIsIHNoYXBlID0gMTgsIGNvbG91ciA9ICJibGFjayIsIGZ1biA9IG1lYW4sIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoLjkpLCBzaXplID0gNCwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgCiAgICAjIGFkZCBzdGF0cwogICAgICAjIG9tbmlidXMgdGVzdCAtLSBBTk9WQQogICAgICAjIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAiYW5vdmEiKSArCiAgICAjIGdlb21fc2lnbmlmKGNvbXBhcmlzb25zID0gbGlzdChjKCJEZXNrIiwgIk91dHNpZGUiKSksIG1hcF9zaWduaWZfbGV2ZWw9VFJVRSkgKyAKICAgICMgc3RhdF9wdmFsdWVfbWFudWFsKGtzdCwgbGFiZWwgPSAicCA9IHtwfSIpICsgCiAgICAjIGFkZCB0aGVtZQogICAgdGhlbWVfY2xhc3NpYygpICsKICAgICMgYWRkIHNwZWNpZmljIGZvcm1hdHRpbmcKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMpLAogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiKSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMyksIAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIikpCgoKICAgIAoKIyBzaG93IGZpZwphbm92YV92aW9saW5fbWVtb3J5CgojIGV4cG9ydCBwbG90CiMgZ2dzYXZlKGZpbGVuYW1lPSJmaWdfYW5vdmFfdmlvbGluX21lbW9yeV9vY3QxIiwgcGxvdCA9IGFub3ZhX3Zpb2xpbl9tZW1vcnksIGRldmljZSA9ICJqcGVnIiwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIsIGRwaSA9IDEwMDApCgpgYGAKCiMjIyMjIFRTIC0gUkVBU09OCmBgYHtyfQojIyBGT1IgdHNfcmVhc29uaW5nCmFub3ZhX2RhdGFfdHNfcmVhc29uIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBDQlNfdHNfcmVhc29uKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gQ0JTX3RzX3JlYXNvbikKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX3RzX3JlYXNvbiA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX3RzX3JlYXNvbgogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV90c19yZWFzb24kYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV90c19yZWFzb24kYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV90c19yZWFzb24kYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfdHNfcmVhc29uLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV90c19yZWFzb24kQU5PVkEsIGNhcHRpb24gPSAidHNfcmVhc29uIC0gb25lLXdheSBBTk9WQSBvbiBPc3BhbiBBYnNvbHV0ZSBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfdHNfcmVhc29uJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV90c19yZWFzb24kc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV90c19yZWFzb24sIC1wYXJ0aWNpcGFudCksIGNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBSZWFzb25pbmciLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKCmFub3ZhX3Zpb2xpbl9yZWFzb24gPC0KICBnZ3Bsb3QoYW5vdmFfZGF0YV90c19yZWFzb24sIGFlcyh5ID0gc2NvcmUsIHggPSBjb25kaXRpb24sIGNvbG9yID0gY29uZGl0aW9uKSwgc2hvdy5sZWdlbmQgPSBGKSArIAogICAgIyBhZGQgdmlvbGluIHBsb3QKICAgIGdlb21fdmlvbGluKHRyaW0gPSBGLCBzaG93LmxlZ2VuZCA9IEYpICsKICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gdmlvbGlucwogICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygnbGlnaHRzZWFncmVlbicsJ2RhcmtvcmNoaWQnLCAnZGVlcHNreWJsdWU0JykpICsgCiAgICAjIGFkZCBsYWJlbHMKICAgIGxhYnMoCiAgICAgICB0aXRsZSA9ICJSZWFzb25pbmcgQ29tcG9zaXRlIFNjb3JlIGJ5IFNtYXJ0cGhvbmUgTG9jYXRpb24iLAogICAgICAgc3VidGl0bGUgPSAiU1AsIFIsIFAsIE9PTyIsCiAgICAgICBjYXB0aW9uID0gIk5vdGU6IFRoZSBwbG90IHNob3dzIHRoZSBkZW5zaXR5IGN1cnZlIG9mIHRoZSBkYXRhICh2aW9saW4pLCBpbmR2IGRhdGEgZm9yIGVhY2ggcCAoY29sb3VyZWQgZG90cyksIGludGVycXVhcnRpbGUgcmFuZ2UgJiBtZWRpYW4gKGJsYWNrIGJveHBsb3QpLCBhbmQgdGhlIE0gJiBTRCAocmVkIGRvdHMgYW5kIHdoaXNrZXJzKSIsCiAgICAgICB4ID0gIlNtYXJ0cGhvbmUgTG9jYXRpb24iLCAKICAgICAgIHkgPSAiUmVhc29uaW5nIENvbXBvc2l0ZSBTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpKwogICAgIyBhZGp1c3QgeSBheGlzIHNjYWxlCiAgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSkgKwogICAgIyBhZGQgbWVkaWFuICYgcXVhcnRpbGUgKGkuZS4sIGJveCBwbG90KQogICAgZ2VvbV9ib3hwbG90KGNvbG91ciA9ICJibGFjayIsIHdpZHRoID0gLjQ1LCBzaG93LmxlZ2VuZCA9IEYsIG91dGxpZXIuc2hhcGUgPSBOQSwgY29lZiA9IDApICsKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKwogICAgIyBhZGQgTSBwb2ludCAmIFNEIHdoaXNrZXIKICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgbXVsdD0xLCBnZW9tPSJwb2ludHJhbmdlIiwgY29sb3I9IiNCQjBBMjEiLCBzaGFwZT0xOCwgc2l6ZSA9IDEpICsgCiAgICAjIGdlb21fcG9pbnQoc3RhdD0ic3VtbWFyeSIsIHNoYXBlID0gMTgsIGNvbG91ciA9ICJibGFjayIsIGZ1biA9IG1lYW4sIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoLjkpLCBzaXplID0gNCwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgCiAgICAjIGFkZCBzdGF0cwogICAgICAjIG9tbmlidXMgdGVzdCAtLSBBTk9WQQogICAgICAjIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAiYW5vdmEiKSArCiAgICAjIGdlb21fc2lnbmlmKGNvbXBhcmlzb25zID0gbGlzdChjKCJEZXNrIiwgIk91dHNpZGUiKSksIG1hcF9zaWduaWZfbGV2ZWw9VFJVRSkgKyAKICAgICMgc3RhdF9wdmFsdWVfbWFudWFsKGtzdCwgbGFiZWwgPSAicCA9IHtwfSIpICsgCiAgICAjIGFkZCB0aGVtZQogICAgdGhlbWVfY2xhc3NpYygpICsKICAgICMgYWRkIHNwZWNpZmljIGZvcm1hdHRpbmcKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMpLAogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiKSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMyksIAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIikpCgoKICAgIAoKIyBzaG93IGZpZwphbm92YV92aW9saW5fcmVhc29uCgojIGV4cG9ydCBwbG90CiMgZ2dzYXZlKGZpbGVuYW1lPSJmaWdfYW5vdmFfdmlvbGluX3JlYXNvbl9vY3QxIiwgcGxvdCA9IGFub3ZhX3Zpb2xpbl9yZWFzb24sIGRldmljZSA9ICJqcGVnIiwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIsIGRwaSA9IDEwMDApCgpgYGAKCiMjIyMjIFRTIC0gVkVSQkFMIEFCSUxJVFkKYGBge3J9CiMjIEZPUiB0c192ZXJiYWxhYgphbm92YV9kYXRhX3RzX3ZlcmJhbGFiIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBDQlNfdHNfdmVyYmFsYWIpICU+JSAKICByZW5hbWUoc2NvcmUgPSBDQlNfdHNfdmVyYmFsYWIpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV90c192ZXJiYWxhYiA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX3RzX3ZlcmJhbGFiCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX3RzX3ZlcmJhbGFiJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfdHNfdmVyYmFsYWIkYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV90c192ZXJiYWxhYiRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV90c192ZXJiYWxhYiwgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfdHNfdmVyYmFsYWIkQU5PVkEsIGNhcHRpb24gPSAidHNfdmVyYmFsYWIgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV90c192ZXJiYWxhYiRjb25kaXRpb24sIGFub3ZhX2RhdGFfdHNfdmVyYmFsYWIkc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV90c192ZXJiYWxhYiwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIFRTIFZlcmJhbCBBYmlsaXR5IiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCgphbm92YV92aW9saW5fdmVyYmFsYWIgPC0KICBnZ3Bsb3QoYW5vdmFfZGF0YV90c192ZXJiYWxhYiwgYWVzKHkgPSBzY29yZSwgeCA9IGNvbmRpdGlvbiwgY29sb3IgPSBjb25kaXRpb24pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgICAjIGFkZCB2aW9saW4gcGxvdAogICAgZ2VvbV92aW9saW4odHJpbSA9IEYsIHNob3cubGVnZW5kID0gRikgKwogICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byB2aW9saW5zCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKyAKICAgICMgYWRkIGxhYmVscwogICAgbGFicygKICAgICAgIHRpdGxlID0gIlZlcmJhbCBBYmlsaXR5IENvbXBvc2l0ZSBTY29yZSBieSBTbWFydHBob25lIExvY2F0aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIkRTLCBHUiIsCiAgICAgICBjYXB0aW9uID0gIk5vdGU6IFRoZSBwbG90IHNob3dzIHRoZSBkZW5zaXR5IGN1cnZlIG9mIHRoZSBkYXRhICh2aW9saW4pLCBpbmR2IGRhdGEgZm9yIGVhY2ggcCAoY29sb3VyZWQgZG90cyksIGludGVycXVhcnRpbGUgcmFuZ2UgJiBtZWRpYW4gKGJsYWNrIGJveHBsb3QpLCBhbmQgdGhlIE0gJiBTRCAocmVkIGRvdHMgYW5kIHdoaXNrZXJzKSIsCiAgICAgICB4ID0gIlNtYXJ0cGhvbmUgTG9jYXRpb24iLCAKICAgICAgIHkgPSAiVmVyYmFsIEFiaWxpdHkgQ29tcG9zaXRlIFNjb3JlIgogICAgICAgKSArIAogICAgIyBsYWJlbCBpbmR2IGNvbmRpdGlvbnMKICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiRGVzayIsICJQb2NrZXQvQmFnIiwgIk91dHNpZGUiKSkrCiAgICAjIGFkanVzdCB5IGF4aXMgc2NhbGUKICAgICMgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTMsIDMpKSArCiAgICAjIGFkZCBtZWRpYW4gJiBxdWFydGlsZSAoaS5lLiwgYm94IHBsb3QpCiAgICBnZW9tX2JveHBsb3QoY29sb3VyID0gImJsYWNrIiwgd2lkdGggPSAuNDUsIHNob3cubGVnZW5kID0gRiwgb3V0bGllci5zaGFwZSA9IE5BLCBjb2VmID0gMCkgKwogICAgIyBhZGQgaW5kdiBwcyBwb2ludHMKICAgIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIGFlcyhjb2xvciA9IGNvbmRpdGlvbiksIHNpemUgPSAyLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IC44KSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogICAgICAjIyBhbHRlcm5hdGl2ZSB0byBpbmR2IGRvdHMuLi4KICAgICAgICAjIGdlb21fZG90cGxvdChiaW5heGlzID0gJ3knLCBzdGFja2RpciA9ICdjZW50ZXInLCBkb3RzaXplID0gLjc1KSArICAKICAgICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byBpbmR2IGRvdHMKICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArCiAgICAjIGFkZCBNIHBvaW50ICYgU0Qgd2hpc2tlcgogICAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhPW1lYW5fc2RsLCBtdWx0PTEsIGdlb209InBvaW50cmFuZ2UiLCBjb2xvcj0iI0JCMEEyMSIsIHNoYXBlPTE4LCBzaXplID0gMSkgKyAKICAgICMgZ2VvbV9wb2ludChzdGF0PSJzdW1tYXJ5Iiwgc2hhcGUgPSAxOCwgY29sb3VyID0gImJsYWNrIiwgZnVuID0gbWVhbiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSguOSksIHNpemUgPSA0LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSAKICAgICMgYWRkIHN0YXRzCiAgICAgICMgb21uaWJ1cyB0ZXN0IC0tIEFOT1ZBCiAgICAgICMgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJhbm92YSIpICsKICAgICMgZ2VvbV9zaWduaWYoY29tcGFyaXNvbnMgPSBsaXN0KGMoIkRlc2siLCAiT3V0c2lkZSIpKSwgbWFwX3NpZ25pZl9sZXZlbD1UUlVFKSArIAogICAgIyBzdGF0X3B2YWx1ZV9tYW51YWwoa3N0LCBsYWJlbCA9ICJwID0ge3B9IikgKyAKICAgICMgYWRkIHRoZW1lCiAgICB0aGVtZV9jbGFzc2ljKCkgKwogICAgIyBhZGQgc3BlY2lmaWMgZm9ybWF0dGluZwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMyksCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDEyLCBmYWNlID0gIml0YWxpYyIpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSwgCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siKSkKCgogICAgCgojIHNob3cgZmlnCmFub3ZhX3Zpb2xpbl92ZXJiYWxhYgoKIyBleHBvcnQgcGxvdAojIGdnc2F2ZShmaWxlbmFtZT0iZmlnX2Fub3ZhX3Zpb2xpbl92ZXJiYWxhYl9vY3QxIiwgcGxvdCA9IGFub3ZhX3Zpb2xpbl92ZXJiYWxhYiwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKCmBgYAoKIyMjIyMgVFMgLSBDT05DRU5UUkFUSU9OCgpgYGB7cn0KIyMgRk9SIHRzX2Nvbgphbm92YV9kYXRhX3RzX2NvbiA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgQ0JTX3RzX2NvbikgJT4lIAogIHJlbmFtZShzY29yZSA9IENCU190c19jb24pCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV90c19jb24gPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfZGF0YV90c19jb24KICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfdHNfY29uJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfdHNfY29uJGFvdiRyZXNpZHVhbHMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIE9zcGFuIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjMpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfdHNfY29uJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX3RzX2Nvbiwgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfdHNfY29uJEFOT1ZBLCBjYXB0aW9uID0gInRzX2NvbiAtIG9uZS13YXkgQU5PVkEgb24gT3NwYW4gQWJzb2x1dGUgU2NvcmUiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKIyBhbm92YV90c19jb25fd2hpdGUgPC0gZXpBTk9WQSgKIyAgIGRhdGEgPSBhbm92YV9kYXRhX3RzX2NvbgojICAgLCBkdiA9IC4oc2NvcmUpCiMgICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiMgICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKIyAgICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwojICAgLCBkZXRhaWxlZCA9IFRSVUUKIyAgICwgcmV0dXJuX2FvdiA9IFRSVUUKIyAgICwgd2hpdGUuYWRqdXN0ID0gVFJVRQojICAgKQoKIyBjb21wdXRlIGVmZmVjdCBzaXplCiMgYW5vdmFfdHNfY29uX3doaXRlX2VzIDwtIEV0YVNxKGFub3ZhX3RzX2Nvbl93aGl0ZSRhb3YsIHR5cGUgPSAzLCBhbm92YSA9IEZBTFNFKQojIAojIGthYmxlKGNiaW5kKGFub3ZhX3RzX2Nvbl93aGl0ZSRBTk9WQVsyLF0sIGRhdGEuZnJhbWUoImdlcyIgPSBjKGFub3ZhX3RzX2Nvbl93aGl0ZV9lc1syXSkpKSwgY2FwdGlvbiA9ICJ0c19jb24gLSBvbmUtd2F5IEFOT1ZBIC0gd2hpdGUtY29yciIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKIyAgIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUKIyAgIGthYmxlX2NsYXNzaWMoKQogICAgIyBrYWJsZShhbm92YV90c19jb25fd2hpdGUkQU5PVkEsIGNhcHRpb24gPSAidHNfY29uIC0gb25lLXdheSBBTk9WQSBvbiBPc3BhbiBBYnNvbHV0ZSBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICAgICMgICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogICAgIyAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAgICAjICAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfdHNfY29uJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV90c19jb24kc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV90c19jb24sIC1wYXJ0aWNpcGFudCksIGNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBUUyBDb25jZW50cmF0aW9uIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCgoKYW5vdmFfdmlvbGluX2NvbiA8LQogIGdncGxvdChhbm92YV9kYXRhX3RzX2NvbiwgYWVzKHkgPSBzY29yZSwgeCA9IGNvbmRpdGlvbiwgY29sb3IgPSBjb25kaXRpb24pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgICAjIGFkZCB2aW9saW4gcGxvdAogICAgZ2VvbV92aW9saW4odHJpbSA9IEYsIHNob3cubGVnZW5kID0gRikgKwogICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byB2aW9saW5zCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKyAKICAgICMgYWRkIGxhYmVscwogICAgbGFicygKICAgICAgIHRpdGxlID0gIkNvbmNlbnRyYXRpb24gQ29tcG9zaXRlIFNjb3JlIGJ5IFNtYXJ0cGhvbmUgTG9jYXRpb24iLAogICAgICAgc3VidGl0bGUgPSAiRFQsIEZNIiwKICAgICAgIGNhcHRpb24gPSAiTm90ZTogVGhlIHBsb3Qgc2hvd3MgdGhlIGRlbnNpdHkgY3VydmUgb2YgdGhlIGRhdGEgKHZpb2xpbiksIGluZHYgZGF0YSBmb3IgZWFjaCBwIChjb2xvdXJlZCBkb3RzKSwgaW50ZXJxdWFydGlsZSByYW5nZSAmIG1lZGlhbiAoYmxhY2sgYm94cGxvdCksIGFuZCB0aGUgTSAmIFNEIChyZWQgZG90cyBhbmQgd2hpc2tlcnMpIiwKICAgICAgIHggPSAiU21hcnRwaG9uZSBMb2NhdGlvbiIsIAogICAgICAgeSA9ICJDb25jZW50cmF0aW9uIENvbXBvc2l0ZSBTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpKwogICAgIyBhZGp1c3QgeSBheGlzIHNjYWxlCiAgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSkgKwogICAgIyBhZGQgbWVkaWFuICYgcXVhcnRpbGUgKGkuZS4sIGJveCBwbG90KQogICAgZ2VvbV9ib3hwbG90KGNvbG91ciA9ICJibGFjayIsIHdpZHRoID0gLjQ1LCBzaG93LmxlZ2VuZCA9IEYsIG91dGxpZXIuc2hhcGUgPSBOQSwgY29lZiA9IDApICsKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKwogICAgIyBhZGQgTSBwb2ludCAmIFNEIHdoaXNrZXIKICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgbXVsdD0xLCBnZW9tPSJwb2ludHJhbmdlIiwgY29sb3I9IiNCQjBBMjEiLCBzaGFwZT0xOCwgc2l6ZSA9IDEpICsgCiAgICAjIGdlb21fcG9pbnQoc3RhdD0ic3VtbWFyeSIsIHNoYXBlID0gMTgsIGNvbG91ciA9ICJibGFjayIsIGZ1biA9IG1lYW4sIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoLjkpLCBzaXplID0gNCwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgCiAgICAjIGFkZCBzdGF0cwogICAgICAjIG9tbmlidXMgdGVzdCAtLSBBTk9WQQogICAgICAjIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAiYW5vdmEiKSArCiAgICAjIGdlb21fc2lnbmlmKGNvbXBhcmlzb25zID0gbGlzdChjKCJEZXNrIiwgIk91dHNpZGUiKSksIG1hcF9zaWduaWZfbGV2ZWw9VFJVRSkgKyAKICAgICMgc3RhdF9wdmFsdWVfbWFudWFsKGtzdCwgbGFiZWwgPSAicCA9IHtwfSIpICsgCiAgICAjIGFkZCB0aGVtZQogICAgdGhlbWVfY2xhc3NpYygpICsKICAgICMgYWRkIHNwZWNpZmljIGZvcm1hdHRpbmcKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMpLAogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiKSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMyksIAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIikpCgojIHNob3cgZmlnCmFub3ZhX3Zpb2xpbl9jb24KCiMgZXhwb3J0IHBsb3QKIyBnZ3NhdmUoZmlsZW5hbWU9ImZpZ19hbm92YV92aW9saW5fY29uX29jdDEiLCBwbG90ID0gYW5vdmFfdmlvbGluX2NvbiwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKYGBgCiMjIyMjIE1haW4gRWZmZWN0IFJlc3VsdHMKClRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgNCBBTk9WQSByZXN1bHRzIHRvZ2V0aGVyLCB3aGlsZSBhZGp1c3RpbmcgZm9yIG11bHRpcGxlIGNvbXBhcmlzb25zLiAKCi0gRmlyc3QsIHdlIHdpbGwgYWRqdXN0IHRoZSBwLXZhbHVlcy4gQSBIb2xtLUJvbmZlcnJvbmkgYWRqdXN0bWVudCB3YXMgdXNlZCB0byBhc3Nlc3MgdGhlIG1haW4gZWZmZWN0IG9mIHNtYXJ0cGhvbmUgbG9jYXRpb24gb24gQ0JzIGNvbXBvc2l0ZSBzY29yZS4gU2luY2UgNCBzZXBhcmF0ZSBzY29yZXMgd2VyZSB1c2VkLCB0aGlzIGFkanVzdG1lbnQgd2FzIGFwcGxpZWQgdG8gdGhlIHAtdmFsdWVzIHRvIGFjY291bnQgZm9yIG11bHRpcGxlIGFuYWx5c2VzLgotIFRoZW4sIGFsbCB0aGUgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIEFOT1ZBcyBhcmUgcGxhY2VkIGludG8gMSB0YWJsZSB0b2dldGhlci4KClRoZXJlIHdhcyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHNtYXJ0cGhvbmUgbG9jYXRpb24gb24gdmVyYmFsIGFiaWxpdHkgYW5kIG5vIG90aGVyIGNvbXBvc2l0ZSBzY29yZS4gUG9zdC1ob2NzIHdlcmUgbmVlZGVkIHRvIGRldGVybWluZSB3aGVyZSB0aGUgZGlmZmVyZW5jZXMgd2VyZSBmb3IgdmVyYmFsIGFiaWxpdHkuIAoKYGBge3J9CiMgZ2V0IGFsbCBBTk9WQSBkYXRhIGluIDEgZGYgJiBhZGp1c3QgcCB2YWx1ZXMKYW5vdmFfZGF0YV9hbGwgPC0gCiAgIyBnZXQgQU5PVkEgcmVzdWx0cwogIHRpYmJsZShjYmluZCh0aWJibGUoIk1lYXN1cmUiID0gYygiTWVtb3J5IiwgIlJlYXNvbmluZyIsICJWYXJiYWwgQWJpbGl0eSIsICJDb25jZW50cmF0aW9uIikpLCAKICAgICAgICAgICAgICAgcmJpbmQoYW5vdmFfdHNfbWVtb3J5JEFOT1ZBWzIsIGMoMjo3LCA5KV0sIGFub3ZhX3RzX3JlYXNvbiRBTk9WQVsyLCBjKDI6NywgOSldLAogICAgICAgICAgICAgICAgICAgYW5vdmFfdHNfdmVyYmFsYWIkQU5PVkFbMiwgYygyOjcsIDkpXSwgYW5vdmFfdHNfY29uJEFOT1ZBWzIsIGMoMjo3LCA5KV0KICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgKSAlPiUgCiAgIyBhcHBseSBwIGFkanVzdCAjIGNvdWxkIGFsc28gdXNlICJib25mZXJyb25pIgogIG11dGF0ZSgicCAoYWRqLikiID0gcC5hZGp1c3QocCwgbWV0aG9kID0gYygiaG9sbSIpLCBuID0gNCkpICU+JSAKICAKICAjIHJlIG9yZGVyIGNvbHMgCiBzZWxlY3QoYyhNZWFzdXJlOnAsICdwIChhZGouKScsIGdlcykpCiAgCiAgCiAgIyAjIGZvcm1hdCBzbyB0aGF0IHNpZyBwIHZhbHVlcyBzaG93biBpbiBib2xkIGZvbnQKICAjIG11dGF0ZShwID0gY2VsbF9zcGVjKHAsIGJvbGQgPSAoaWZlbHNlKHAgPCAuMDUsICJUUlVFIiwgIkZBTFNFIikpKSkKCiMgc2hvdyByZXN1bHRzIGluIHRhYmxlCmthYmxlKGFub3ZhX2RhdGFfYWxsLCBjYXB0aW9uID0gIk9uZS1XYXkgQU5PVkFzOiB0aGUgRWZmZWN0IG9mIFNtYXJ0cGhvbmUgTG9jYXRpb24gb24gRWFjaCBDQlMgQ29tcG9zaXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFQpICU+JSAKICAjIGJvbGQgdGhlIHNpZyBBTk9WQQogIHJvd19zcGVjKDMsIGJvbGQgPSBUKSAlPiUgCiAgY29sdW1uX3NwZWMoNzo4LCBib3JkZXJfbGVmdCA9IFQsIGJvcmRlcl9yaWdodCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKYGBgCgojIyMjIyBNYWluIEVmZmVjdCBWaXN1YWxpemF0aW9ucwoKVmlzdWFsaXplIHRoZSByZXN1bHRzIHRvZ2V0aGVyLi4uIChQYW5lbCkKCmBgYHtyfQojIGNyZWF0ZSBqb2luIGRhdGEgc2V0IHdpdGggYWxsIGNvbXBvc2l0ZSBzY29yZSBkYXRhCmFub3ZhX3Bsb3RfYWxsX2RhdGEgPC0gCiAgY2JpbmQoZGF0YS5mcmFtZSgiY29tcF9zY29yZSIgPSBjKHJlcCgxLCBucm93KGFub3ZhX2RhdGFfdHNfbWVtb3J5KSksIHJlcCgyLCBucm93KGFub3ZhX2RhdGFfdHNfcmVhc29uKSksIHJlcCgzLCBucm93KGFub3ZhX2RhdGFfdHNfdmVyYmFsYWIpKSwgcmVwKDQsIG5yb3coYW5vdmFfZGF0YV90c19jb24pKSkpLCAKICAgICAgICByYmluZCgKICAgICAgICAjIGNvbXBvc2l0ZSBzY29yZXMgZGF0YSAtLSBhbGwgc2NvcmUgY29scyBuZWVkIHRvIGJlIHRoZSBzYW1lLCBvdGhlciB3aXNlIHVzZSByZW5hbWUgdG8gcmVuYW1lIGNvbHMgb3Igd2lsbCBub3Qgam9pbiBjb3JyZWN0bHkKICAgICAgICAgICAgIyBkcGx5cjo6cmVuYW1lKG1vZF9zY29yZSA9IFNBRF9kZXBfc2NvcmUpLCAjIHJlbmFtZSBjb2x1bW4gdG8gam9pbiBjb3JyZWN0bHkKICAgICAgICBhbm92YV9kYXRhX3RzX21lbW9yeSAlPiUgc2VsZWN0KC1wYXJ0aWNpcGFudCksIAogICAgICAgIGFub3ZhX2RhdGFfdHNfcmVhc29uICU+JSBzZWxlY3QoLXBhcnRpY2lwYW50KSwgCiAgICAgICAgYW5vdmFfZGF0YV90c192ZXJiYWxhYiAlPiUgc2VsZWN0KC1wYXJ0aWNpcGFudCksIAogICAgICAgIGFub3ZhX2RhdGFfdHNfY29uICU+JSBzZWxlY3QoLXBhcnRpY2lwYW50KQogICAgICAgICkKICAgICAgICApICU+JSAKICBtdXRhdGUoY29tcF9zY29yZSA9IGZhY3Rvcihjb21wX3Njb3JlLCBsZXZlbHMgPSBjKDE6NCksIGxhYmVscyA9IGMoIihBKSBNZW1vcnkiLCAiKEIpIFJlYXNvbmluZyIsICIoQykgVmVyYmFsIEFiaWxpdHkiLCAiKEQpIENvbmNlbnRyYXRpb24iKSkpIAogICMgY29uZGl0aW9uIG11c3QgYmUgYSBmYWN0b3IsIGlmIG5vdCB1c2U6CiAgICAjIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoY29uZGl0aW9uLCBsYWJlbHMgPSBjKCJEZXNrIiwgIlBvY2tldC9CYWciLCAiT3V0c2lkZSIpKSkKCiMgc2VlIGdsaW1wc2Ugb2YgbmV3IGRhdGEgZnJhbWUKZ2xpbXBzZShhbm92YV9wbG90X2FsbF9kYXRhKQpgYGAKCmBgYHtyfQojIGNyZWF0ZSBwYW5lbCBmaWcKICAjIHRoaXMgaXMgdGhlIHNhbWUgYXMgaW5kdiBmaWdzICsgImZhY2V0X3dyYXAofmNvbXBfc2NvcmUsIG5jb2wgPSAyKSIgYXQgdGhlIGVuZAogICMgbmVlZCB0byBjaGFuZ2Ugc2l6ZXMgb2YgZG90cyB0byBmaXQgbmljZWx5CmFub3ZhX3Zpb2xpbl9hbGwgPC0KICBnZ3Bsb3QoYW5vdmFfcGxvdF9hbGxfZGF0YSwgYWVzKHkgPSBzY29yZSwgeCA9IGNvbmRpdGlvbiwgY29sb3IgPSBjb25kaXRpb24pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgICAjIGFkZCB2aW9saW4gcGxvdAogICAgZ2VvbV92aW9saW4odHJpbSA9IEYsIHNob3cubGVnZW5kID0gRikgKwogICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byB2aW9saW5zCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKyAKICAgICMgYWRkIGxhYmVscwogICAgbGFicygKICAgICAgICMgdGl0bGUgPSAiQ29uY2VudHJhdGlvbiBDb21wb3NpdGUgU2NvcmUgYnkgU21hcnRwaG9uZSBMb2NhdGlvbiIsCiAgICAgICAjIHN1YnRpdGxlID0gIkRULCBGTSIsCiAgICAgICAjIGNhcHRpb24gPSAiTm90ZTogVGhlIHBsb3Qgc2hvd3MgdGhlIGRlbnNpdHkgY3VydmUgb2YgdGhlIGRhdGEgKHZpb2xpbiksIGluZHYgZGF0YSBmb3IgZWFjaCBwIChjb2xvdXJlZCBkb3RzKSwgaW50ZXJxdWFydGlsZSByYW5nZSAmIG1lZGlhbiAoYmxhY2sgYm94cGxvdCksIGFuZCB0aGUgTSAmIFNEIChyZWQgZG90cyBhbmQgd2hpc2tlcnMpIiwKICAgICAgIHggPSAiU21hcnRwaG9uZSBMb2NhdGlvbiIsIAogICAgICAgeSA9ICJTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpICsKICAgICMgYWRqdXN0IHkgYXhpcyBzY2FsZQogICAgIyBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMywgMykpICsKICAgICMgYWRkIG1lZGlhbiAmIHF1YXJ0aWxlIChpLmUuLCBib3ggcGxvdCkKICAgIGdlb21fYm94cGxvdChjb2xvdXIgPSAiYmxhY2siLCB3aWR0aCA9IC40NSwgc2hvdy5sZWdlbmQgPSBGLCBvdXRsaWVyLnNoYXBlID0gTkEsIGNvZWYgPSAwKSArCiAgICAjIHN0YXRfYm94cGxvdChnZW9tID0gImVycm9yYmFyIiwgd2lkdGggPSAwLjI1LCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKyAjIHNob3dzIGVycm9yIGJhcnMKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gLjUsIHNoYXBlID0gMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKwogICAgIyBhZGQgTSBwb2ludCAmIFNEIHdoaXNrZXIKICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgbXVsdD0xLCBnZW9tPSJwb2ludHJhbmdlIiwgY29sb3I9IiNCQjBBMjEiLCBzaGFwZT0xOCwgc2l6ZSA9IC41NSkgKyAKICAgICMgZ2VvbV9wb2ludChzdGF0PSJzdW1tYXJ5Iiwgc2hhcGUgPSAxOCwgY29sb3VyID0gImJsYWNrIiwgZnVuID0gbWVhbiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSguOSksIHNpemUgPSA0LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSAKICAgICMgYWRkIHN0YXRzCiAgICAgICMgb21uaWJ1cyB0ZXN0IC0tIEFOT1ZBCiAgICAgICMgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJhbm92YSIpICsKICAgICMgZ2VvbV9zaWduaWYoY29tcGFyaXNvbnMgPSBsaXN0KGMoIkRlc2siLCAiT3V0c2lkZSIpKSwgbWFwX3NpZ25pZl9sZXZlbD1UUlVFKSArIAogICAgIyBzdGF0X3B2YWx1ZV9tYW51YWwoa3N0LCBsYWJlbCA9ICJwID0ge3B9IikgKyAKICAgICMgYWRkIHRoZW1lCiAgICB0aGVtZV9jbGFzc2ljKCkgKwogICAgIyBhZGQgc3BlY2lmaWMgZm9ybWF0dGluZwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMyksCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDEyLCBmYWNlID0gIml0YWxpYyIpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSwgCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siKSkgKwogICAgZmFjZXRfd3JhcCh+Y29tcF9zY29yZSwgbmNvbCA9IDIpCgojIHNob3cgcGxvdAphbm92YV92aW9saW5fYWxsCgojIGV4cG9ydCBwbG90cwojIGdnc2F2ZShmaWxlbmFtZT0iZmlnX2Fub3ZhX3Zpb2xpbl9hbGxfb2N0MSIsIHBsb3QgPSBhbm92YV92aW9saW5fYWxsLCBkZXZpY2UgPSAianBlZyIsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iLCBkcGkgPSAxMDAwKQoKYGBgCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIGNyZWF0ZSBwYW5lbCBmaWcgLS0gV0lUSCBCT1hQTE9UIE9VVExJRVJTIFNIT1dOCiAgIyB0aGlzIGlzIHRoZSBzYW1lIGFzIGluZHYgZmlncyArICJmYWNldF93cmFwKH5jb21wX3Njb3JlLCBuY29sID0gMikiIGF0IHRoZSBlbmQKICAjIG5lZWQgdG8gY2hhbmdlIHNpemVzIG9mIGRvdHMgdG8gZml0IG5pY2VseQphbm92YV92aW9saW5fYWxsX291dCA8LQogIGdncGxvdChhbm92YV9wbG90X2FsbF9kYXRhLCBhZXMoeSA9IHNjb3JlLCB4ID0gY29uZGl0aW9uLCBjb2xvciA9IGNvbmRpdGlvbiksIHNob3cubGVnZW5kID0gRikgKyAKICAgICMgYWRkIHZpb2xpbiBwbG90CiAgICBnZW9tX3Zpb2xpbih0cmltID0gRiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgICAjIGFkZCBjdXN0b20gY29sb3VyIHRvIHZpb2xpbnMKICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArIAogICAgIyBhZGQgbGFiZWxzCiAgICBsYWJzKAogICAgICAgIyB0aXRsZSA9ICJDb25jZW50cmF0aW9uIENvbXBvc2l0ZSBTY29yZSBieSBTbWFydHBob25lIExvY2F0aW9uIiwKICAgICAgICMgc3VidGl0bGUgPSAiRFQsIEZNIiwKICAgICAgICMgY2FwdGlvbiA9ICJOb3RlOiBUaGUgcGxvdCBzaG93cyB0aGUgZGVuc2l0eSBjdXJ2ZSBvZiB0aGUgZGF0YSAodmlvbGluKSwgaW5kdiBkYXRhIGZvciBlYWNoIHAgKGNvbG91cmVkIGRvdHMpLCBpbnRlcnF1YXJ0aWxlIHJhbmdlICYgbWVkaWFuIChibGFjayBib3hwbG90KSwgYW5kIHRoZSBNICYgU0QgKHJlZCBkb3RzIGFuZCB3aGlza2VycykiLAogICAgICAgeCA9ICJTbWFydHBob25lIExvY2F0aW9uIiwgCiAgICAgICB5ID0gIlNjb3JlIgogICAgICAgKSArIAogICAgIyBsYWJlbCBpbmR2IGNvbmRpdGlvbnMKICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiRGVzayIsICJQb2NrZXQvQmFnIiwgIk91dHNpZGUiKSkgKwogICAgIyBhZGp1c3QgeSBheGlzIHNjYWxlCiAgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSkgKwogICAgIyBhZGQgbWVkaWFuICYgcXVhcnRpbGUgKGkuZS4sIGJveCBwbG90KQogICAgZ2VvbV9ib3hwbG90KGNvbG91ciA9ICJibGFjayIsIHdpZHRoID0gLjQ1LCBzaG93LmxlZ2VuZCA9IEYsIG5vdGNoID0gRiwgb3V0bGllci5zaGFwZSA9IDgsIG91dGxpZXIuc2l6ZSA9IDEpICsKICAgIHN0YXRfYm94cGxvdChnZW9tID0gImVycm9yYmFyIiwgd2lkdGggPSAwLjI1LCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKwogICAgIyBhZGQgaW5kdiBwcyBwb2ludHMKICAgIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIGFlcyhjb2xvciA9IGNvbmRpdGlvbiksIHNpemUgPSAuNSwgc2hhcGUgPSAxLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IC44KSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogICAgICAjIyBhbHRlcm5hdGl2ZSB0byBpbmR2IGRvdHMuLi4KICAgICAgICAjIGdlb21fZG90cGxvdChiaW5heGlzID0gJ3knLCBzdGFja2RpciA9ICdjZW50ZXInLCBkb3RzaXplID0gLjc1KSArICAKICAgICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byBpbmR2IGRvdHMKICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArCiAgICAjIGFkZCBNIHBvaW50ICYgU0Qgd2hpc2tlcgogICAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhPW1lYW5fc2RsLCBtdWx0PTEsIGdlb209InBvaW50cmFuZ2UiLCBjb2xvcj0iI0JCMEEyMSIsIHNoYXBlPTE4LCBzaXplID0gLjU1KSArIAogICAgIyBnZW9tX3BvaW50KHN0YXQ9InN1bW1hcnkiLCBzaGFwZSA9IDE4LCBjb2xvdXIgPSAiYmxhY2siLCBmdW4gPSBtZWFuLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKC45KSwgc2l6ZSA9IDQsIHNob3cubGVnZW5kID0gRkFMU0UpIAogICAgIyBhZGQgc3RhdHMKICAgICAgIyBvbW5pYnVzIHRlc3QgLS0gQU5PVkEKICAgICAgIyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImFub3ZhIikgKwogICAgIyBnZW9tX3NpZ25pZihjb21wYXJpc29ucyA9IGxpc3QoYygiRGVzayIsICJPdXRzaWRlIikpLCBtYXBfc2lnbmlmX2xldmVsPVRSVUUpICsgCiAgICAjIHN0YXRfcHZhbHVlX21hbnVhbChrc3QsIGxhYmVsID0gInAgPSB7cH0iKSArIAogICAgIyBhZGQgdGhlbWUKICAgIHRoZW1lX2NsYXNzaWMoKSArCiAgICAjIGFkZCBzcGVjaWZpYyBmb3JtYXR0aW5nCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEzKSwKICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gMTIsIGZhY2UgPSAiaXRhbGljIiksCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpLCAKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIpKSArCiAgICBmYWNldF93cmFwKH5jb21wX3Njb3JlLCBuY29sID0gMikKCiMgc2hvdyBwbG90CmFub3ZhX3Zpb2xpbl9hbGxfb3V0CgojIGV4cG9ydCBwbG90cwojIGdnc2F2ZShmaWxlbmFtZT0iZmlnX2Fub3ZhX3Zpb2xpbl9hbGxfb2N0MU9VVFNJTkNMVURFRCIsIHBsb3QgPSBhbm92YV92aW9saW5fYWxsX291dCwgZGV2aWNlID0gImpwZWciLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gMTAwMCkKCmBgYAoKIyMjIyMjIFBvc3QtSG9jczogU21hcnRwaG9uZSBMb2NhdGlvbnMgLSBEZXNrLCBQb2NrZXQvQmFnLCBPdXRzaWRlCgpUaGUgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc21hcnRwaG9uZSBsb2NhdGlvbiB3YXMgZXhwbG9yZSBmdXRoZXIgd2l0aCBhIHBvc3QtaG9jIHRlc3QuIHNpbmNlIGFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyB3ZXJlIGNvbXBsZXRlZCwgYSBUdWtleSBIU0QgYWRqdXN0bWVudCB3YXMgdXNlZCAoYXMgc3VnZ2VzdGVkIGJ5IE1heHdlbGwgJiBEZWxhbmV5LCAyMDAzKS4KClRoZSByZXN1bHRzIGluZGljYXRlIHRoYXQgdGhlcmUgd2FzIGEgc2lnIGRpZmYgaW4gdmVyYmFsIGFiaWxpdHkgYmV0d2VlbiB0aGUgcG9ja2V0L2JhZyBhbmQgZGVzayBsb2NhdGlvbnMgYnV0IG5vIG90aGVyIGNvbXBhcmlzb25zLiBUaGF0IGlzLCBkZXNrIHBlcmZvcm1hbmNlIHdhcyBsb3dlciB0aGFuIHBvY2tldC9iYWcgcGVyZm9ybWFuY2UuIAoKYGBge3J9CiMgcnVuIHR1a2V5SFNEIHBvc3QtaG9jIGFuYWx5c2lzIG9uIHRoZSB2ZXJiYWwgYWJpbGl0eSBhb3YKcG9zdGhvY192ZXJiYWwgPC0gVHVrZXlIU0QoYW5vdmFfdHNfdmVyYmFsYWIkYW92LCAiY29uZGl0aW9uIikKCiMgbWFrZSBpbnRvIHRhYmxlIHRvIGFkZCBtZWFzdXJlIGNvbHVtbgpwb3N0aG9jX3ZlcmJhbF90IDwtIGNiaW5kKHRpYmJsZSgiY29tcGFyaXNvbiIgPSBjKCJQb2NrZXQvQmFnIHYgRGVzayIsICJPdXRzaWRlIHYgRGVzayIsICJPdXRzaWRlIHYgUG9ja2V0L0JhZyIpKSwgcG9zdGhvY192ZXJiYWwkY29uZGl0aW9uKQoKcm93bmFtZXMocG9zdGhvY192ZXJiYWxfdCkgPC0gTlVMTAoKIyBzaG93IHJlc3VsdHMgaW4gdGFibGUKa2FibGUocG9zdGhvY192ZXJiYWxfdCwgY2FwdGlvbiA9ICJQb3N0LUhvYyB0ZXN0cyBvZiBWZXJiYWwgQWJpbGl0eSBDb21wb3NpdGUgU2NvcmUgYWNyb3NzIHNtYXJ0cGhvbmUgbG9jYXRpbyBjb25kaXRpb25zLiIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ3JjY2NjJywgY29sLm5hbWVzID0gYygiQ29tcGFyaXNvbiIsICJEaWZmZXJlbmNlIiwgIkxvd2VyIiwgIlVwcGVyIiwgInAiKSkgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUKSAlPiUKICAjIGJvbGQgdGhlIHNpZyBBTk9WQQogIHJvd19zcGVjKDEsIGJvbGQgPSBUKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKYGBgCgoKIyMjIyBBbGwgaW5kdiB0YXNrcy4uLiAobm90IHotc2NvcmVkKQoKQW4gZXhwbG9yYXRvcnkgYW5hbHlzaXMgaW52ZXN0aWdhdGVkIHRoZSBlZmZlY3Qgb2Ygc21hcnRwaG9uZSBsb2NhdGlvbiBvbiB0aGUgaW5kaXZpZHVhbCBDQlMgdGVzdHMuIAoKU2luY2UgVmVyYmFsIEFiaWxpdHkgd2FzIHRoZSBvbmx5IGNvbXBvc2l0ZSBzY29yZSB3aGVyZSB0aGVyZSB3YXMgYSBzaWcgZGlmZiwgdGhlIDIgdGFza3Mgb2YgZm9jdXMgd2VyZTogRFMgJiBHUi4KIyMjIyBWaXN1YWwgQWJpbGl0eTogRFMgJiBHUgojIyMjIyBEaWdpdCBTcGFuIChEUykKYGBge3J9CiMjIEZPUiBEUwphbm92YV9kYXRhX0RTIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBgU2NvcmVfRGlnaXQgU3BhbmApICU+JQogIHJlbmFtZShzY29yZSA9IGBTY29yZV9EaWdpdCBTcGFuYCkKICAKICAjIGNvdWxkIGRvIHRoaXMgd2l0aCB6IHNjb3JlZCBkYXRhIHRvby4uLgogICMgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIFpTY29yZV9EUykgJT4lCiAgIyByZW5hbWUoc2NvcmUgPSBaU2NvcmVfRFMpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV9EUyA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX0RTCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX0RTJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfRFMkYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9EUyRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9EUywgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfRFMkQU5PVkEsIGNhcHRpb24gPSAiRFMgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9EUyRjb25kaXRpb24sIGFub3ZhX2RhdGFfRFMkc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9EUywgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBEUyIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQoKIyBtYWtlIHZpb2xpbiBwbG90CmFub3ZhX3Zpb2xpbl9EUyA8LQogIGdncGxvdChhbm92YV9kYXRhX0RTLCBhZXMoeSA9IHNjb3JlLCB4ID0gY29uZGl0aW9uLCBjb2xvciA9IGNvbmRpdGlvbiksIHNob3cubGVnZW5kID0gRikgKyAKICAgICMgYWRkIHZpb2xpbiBwbG90CiAgICBnZW9tX3Zpb2xpbih0cmltID0gRiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgICAjIGFkZCBjdXN0b20gY29sb3VyIHRvIHZpb2xpbnMKICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArIAogICAgIyBhZGQgbGFiZWxzCiAgICBsYWJzKAogICAgICAgdGl0bGUgPSAiRGlnaXQgU3BhbiBTY29yZSBieSBTbWFydHBob25lIExvY2F0aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVkIGluIFZpc3VhbCBBYmlsaXR5IENvbXBvc2l0ZSBTY29yZSB3aXRoIEdSLiIsCiAgICAgICBjYXB0aW9uID0gIk5vdGU6IFRoZSBwbG90IHNob3dzIHRoZSBkZW5zaXR5IGN1cnZlIG9mIHRoZSBkYXRhICh2aW9saW4pLCBpbmR2IGRhdGEgZm9yIGVhY2ggcCAoY29sb3VyZWQgZG90cyksIGludGVycXVhcnRpbGUgcmFuZ2UgJiBtZWRpYW4gKGJsYWNrIGJveHBsb3QpLCBhbmQgdGhlIE0gJiBTRCAocmVkIGRvdHMgYW5kIHdoaXNrZXJzKSIsCiAgICAgICB4ID0gIlNtYXJ0cGhvbmUgTG9jYXRpb24iLCAKICAgICAgIHkgPSAiRGlnaXQgU3BhbiBTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpKwogICAgIyBhZGp1c3QgeSBheGlzIHNjYWxlCiAgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSkgKwogICAgIyBhZGQgbWVkaWFuICYgcXVhcnRpbGUgKGkuZS4sIGJveCBwbG90KQogICAgZ2VvbV9ib3hwbG90KGNvbG91ciA9ICJibGFjayIsIHdpZHRoID0gLjQ1LCBzaG93LmxlZ2VuZCA9IEYsIG91dGxpZXIuc2hhcGUgPSBOQSwgY29lZiA9IDApICsKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKwogICAgIyBhZGQgTSBwb2ludCAmIFNEIHdoaXNrZXIKICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgbXVsdD0xLCBnZW9tPSJwb2ludHJhbmdlIiwgY29sb3I9IiNCQjBBMjEiLCBzaGFwZT0xOCwgc2l6ZSA9IDEpICsgCiAgICAjIGdlb21fcG9pbnQoc3RhdD0ic3VtbWFyeSIsIHNoYXBlID0gMTgsIGNvbG91ciA9ICJibGFjayIsIGZ1biA9IG1lYW4sIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoLjkpLCBzaXplID0gNCwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgCiAgICAjIGFkZCBzdGF0cwogICAgICAjIG9tbmlidXMgdGVzdCAtLSBBTk9WQQogICAgICAjIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAiYW5vdmEiKSArCiAgICAjIGdlb21fc2lnbmlmKGNvbXBhcmlzb25zID0gbGlzdChjKCJEZXNrIiwgIk91dHNpZGUiKSksIG1hcF9zaWduaWZfbGV2ZWw9VFJVRSkgKyAKICAgICMgc3RhdF9wdmFsdWVfbWFudWFsKGtzdCwgbGFiZWwgPSAicCA9IHtwfSIpICsgCiAgICAjIGFkZCB0aGVtZQogICAgdGhlbWVfY2xhc3NpYygpICsKICAgICMgYWRkIHNwZWNpZmljIGZvcm1hdHRpbmcKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMpLAogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiKSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMyksIAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIikpCgoKICAgIAoKIyBzaG93IGZpZwphbm92YV92aW9saW5fRFMKCiMgZXhwb3J0IHBsb3QKIyBnZ3NhdmUoZmlsZW5hbWU9ImZpZ19hbm92YV92aW9saW5fRFNfb2N0MTciLCBwbG90ID0gYW5vdmFfdmlvbGluX0RTLCBkZXZpY2UgPSAianBlZyIsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iLCBkcGkgPSAxMDAwKQpgYGAKCiMjIyMjIEdyYW1tYXRpY2FsIFJlYXNvbmluZyAoR1IpCmBgYHtyfQojIyBGT1IgR1IKYW5vdmFfZGF0YV9HUiA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgYFNjb3JlX0dyYW1tYXRpY2FsIFJlYXNvbmluZ2ApICU+JSAKICByZW5hbWUoc2NvcmUgPSBgU2NvcmVfR3JhbW1hdGljYWwgUmVhc29uaW5nYCkKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX0dSIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfR1IKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfR1IkYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9HUiRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IDEpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfR1IkYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfR1IsIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX0dSJEFOT1ZBLCBjYXB0aW9uID0gIkdSIC0gb25lLXdheSBBTk9WQSBvbiBPc3BhbiBBYnNvbHV0ZSBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfR1IkY29uZGl0aW9uLCBhbm92YV9kYXRhX0dSJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfR1IsIC1wYXJ0aWNpcGFudCksIGNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBDQlMgR1IiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKCiMgbWFrZSB2aW9saW4gcGxvdAphbm92YV92aW9saW5fR1IgPC0KICBnZ3Bsb3QoYW5vdmFfZGF0YV9HUiwgYWVzKHkgPSBzY29yZSwgeCA9IGNvbmRpdGlvbiwgY29sb3IgPSBjb25kaXRpb24pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgICAjIGFkZCB2aW9saW4gcGxvdAogICAgZ2VvbV92aW9saW4odHJpbSA9IEYsIHNob3cubGVnZW5kID0gRikgKwogICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byB2aW9saW5zCiAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdsaWdodHNlYWdyZWVuJywnZGFya29yY2hpZCcsICdkZWVwc2t5Ymx1ZTQnKSkgKyAKICAgICMgYWRkIGxhYmVscwogICAgbGFicygKICAgICAgIHRpdGxlID0gIkdyYW1tYXRpY2FsIFJlYXNvbmluZyBTY29yZSBieSBTbWFydHBob25lIExvY2F0aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVkIGluIFZpc3VhbCBBYmlsaXR5IENvbXBvc2l0ZSBTY29yZSB3aXRoIERTLiIsCiAgICAgICBjYXB0aW9uID0gIk5vdGU6IFRoZSBwbG90IHNob3dzIHRoZSBkZW5zaXR5IGN1cnZlIG9mIHRoZSBkYXRhICh2aW9saW4pLCBpbmR2IGRhdGEgZm9yIGVhY2ggcCAoY29sb3VyZWQgZG90cyksIGludGVycXVhcnRpbGUgcmFuZ2UgJiBtZWRpYW4gKGJsYWNrIGJveHBsb3QpLCBhbmQgdGhlIE0gJiBTRCAocmVkIGRvdHMgYW5kIHdoaXNrZXJzKSIsCiAgICAgICB4ID0gIlNtYXJ0cGhvbmUgTG9jYXRpb24iLCAKICAgICAgIHkgPSAiR3JhbW1hdGljYWwgUmVhc29uaW5nIFNjb3JlIgogICAgICAgKSArIAogICAgIyBsYWJlbCBpbmR2IGNvbmRpdGlvbnMKICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiRGVzayIsICJQb2NrZXQvQmFnIiwgIk91dHNpZGUiKSkrCiAgICAjIGFkanVzdCB5IGF4aXMgc2NhbGUKICAgICMgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTMsIDMpKSArCiAgICAjIGFkZCBtZWRpYW4gJiBxdWFydGlsZSAoaS5lLiwgYm94IHBsb3QpCiAgICBnZW9tX2JveHBsb3QoY29sb3VyID0gImJsYWNrIiwgd2lkdGggPSAuNDUsIHNob3cubGVnZW5kID0gRiwgb3V0bGllci5zaGFwZSA9IE5BLCBjb2VmID0gMCkgKwogICAgIyBhZGQgaW5kdiBwcyBwb2ludHMKICAgIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIGFlcyhjb2xvciA9IGNvbmRpdGlvbiksIHNpemUgPSAyLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IC44KSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogICAgICAjIyBhbHRlcm5hdGl2ZSB0byBpbmR2IGRvdHMuLi4KICAgICAgICAjIGdlb21fZG90cGxvdChiaW5heGlzID0gJ3knLCBzdGFja2RpciA9ICdjZW50ZXInLCBkb3RzaXplID0gLjc1KSArICAKICAgICAgIyBhZGQgY3VzdG9tIGNvbG91ciB0byBpbmR2IGRvdHMKICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArCiAgICAjIGFkZCBNIHBvaW50ICYgU0Qgd2hpc2tlcgogICAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhPW1lYW5fc2RsLCBtdWx0PTEsIGdlb209InBvaW50cmFuZ2UiLCBjb2xvcj0iI0JCMEEyMSIsIHNoYXBlPTE4LCBzaXplID0gMSkgKyAKICAgICMgZ2VvbV9wb2ludChzdGF0PSJzdW1tYXJ5Iiwgc2hhcGUgPSAxOCwgY29sb3VyID0gImJsYWNrIiwgZnVuID0gbWVhbiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSguOSksIHNpemUgPSA0LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSAKICAgICMgYWRkIHN0YXRzCiAgICAgICMgb21uaWJ1cyB0ZXN0IC0tIEFOT1ZBCiAgICAgICMgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJhbm92YSIpICsKICAgICMgZ2VvbV9zaWduaWYoY29tcGFyaXNvbnMgPSBsaXN0KGMoIkRlc2siLCAiT3V0c2lkZSIpKSwgbWFwX3NpZ25pZl9sZXZlbD1UUlVFKSArIAogICAgIyBzdGF0X3B2YWx1ZV9tYW51YWwoa3N0LCBsYWJlbCA9ICJwID0ge3B9IikgKyAKICAgICMgYWRkIHRoZW1lCiAgICB0aGVtZV9jbGFzc2ljKCkgKwogICAgIyBhZGQgc3BlY2lmaWMgZm9ybWF0dGluZwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMyksCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDEyLCBmYWNlID0gIml0YWxpYyIpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSwgCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siKSkKCgogICAgCgojIHNob3cgZmlnCmFub3ZhX3Zpb2xpbl9HUgoKIyBleHBvcnQgcGxvdAojIGdnc2F2ZShmaWxlbmFtZT0iZmlnX2Fub3ZhX3Zpb2xpbl9HUl9vY3QxNyIsIHBsb3QgPSBhbm92YV92aW9saW5fR1IsIGRldmljZSA9ICJqcGVnIiwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIsIGRwaSA9IDEwMDApCmBgYAoKIyMjIyMgUmVzdWx0czogQWRqdXN0ZWQKCkFzIGJlZm9yZSwgdGhlIHAgdmFsdWVzIHdlcmUgYWRqdXN0ZWQgZm9yIG11bHRpcGxlIGNvbXBhcmlzb25zIHVzaW5nIHRoZSBIb2xtLUJvbmZlcnJvbmkgYWRqdXN0bWVudC4uLiAKClJlc3VsdHMgc2hvd2VkIGEgc2lnIGVmZmVjdCBvZiBzbWFydHBob25lIGxvY2F0aW9uIG9uIERTIHNjb3JlLCBwID0gLjAzODUsIGJ1dCB0aGlzIHdhcyBub3QgdHJ1ZSBhZnRlciB0aGUgSC1CIGNvcnJlY3Rpb24sIHAgPSAuMTUzOS4gVGhlcmUgd2FzIG5vIHNpZyBlZmZlY3Qgb24gR1Igc2NvcmUgYmVmb3JlLCBwID0gLjEzMTIsIG9yIGFmdGVyIHRoZSBjb3JyZWN0aW9uLCBwID0gLjM5MzcuIAoKYGBge3J9CiMgZ2V0IGFsbCBBTk9WQSBkYXRhIGluIDEgZGYgJiBhZGp1c3QgcCB2YWx1ZXMKYW5vdmFfZGF0YV9EU19HUiA8LSAKICAjIGdldCBBTk9WQSByZXN1bHRzCiAgdGliYmxlKGNiaW5kKHRpYmJsZSgiTWVhc3VyZSIgPSBjKCJEUyIsICJHUiIpKSwgCiAgICAgICAgICAgICAgIHJiaW5kKCBhbm92YV9EUyRBTk9WQVsyLGMoMjo3LCA5KV0sIGFub3ZhX0dSJEFOT1ZBWzIsYygyOjcsIDkpXQogICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICApICU+JSAKICAjIGFwcGx5IHAgYWRqdXN0ICMgY291bGQgYWxzbyB1c2UgImJvbmZlcnJvbmkiCiAgbXV0YXRlKCJwIChhZGouKSIgPSBwLmFkanVzdChwLCBtZXRob2QgPSBjKCJob2xtIiksIG4gPSA0KSkgJT4lIAogIAogICMgcmUgb3JkZXIgY29scyAKIHNlbGVjdChjKE1lYXN1cmU6cCwgJ3AgKGFkai4pJywgZ2VzKSkKICAKICAKICAjICMgZm9ybWF0IHNvIHRoYXQgc2lnIHAgdmFsdWVzIHNob3duIGluIGJvbGQgZm9udAogICMgbXV0YXRlKHAgPSBjZWxsX3NwZWMocCwgYm9sZCA9IChpZmVsc2UocCA8IC4wNSwgIlRSVUUiLCAiRkFMU0UiKSkpKQoKIyBzaG93IHJlc3VsdHMgaW4gdGFibGUKa2FibGUoYW5vdmFfZGF0YV9EU19HUiwgY2FwdGlvbiA9ICJPbmUtV2F5IEFOT1ZBczogdGhlIEVmZmVjdCBvZiBTbWFydHBob25lIExvY2F0aW9uIG9uIERTIGFuZCBHUiBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFQpICU+JQogIGNvbHVtbl9zcGVjKDc6OCwgYm9yZGVyX2xlZnQgPSBULCBib3JkZXJfcmlnaHQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmBgYAoKIyMjIyMjIFBvc3QtSG9jczogU21hcnRwaG9uZSBMb2NhdGlvbnMgLSBEZXNrLCBQb2NrZXQvQmFnLCBPdXRzaWRlIGZvciBEUwoKVGhlIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHNtYXJ0cGhvbmUgbG9jYXRpb24gb24gRFMgc2NvcmUgd2FzIGV4cGxvcmVkIGZ1cnRoZXIgd2l0aCBhIHBvc3QtaG9jIHRlc3QuIHNpbmNlIGFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyB3ZXJlIGNvbXBsZXRlZCwgYSBUdWtleSBIU0QgYWRqdXN0bWVudCB3YXMgdXNlZCAoYXMgc3VnZ2VzdGVkIGJ5IE1heHdlbGwgJiBEZWxhbmV5LCAyMDAzKS4KClRoZSByZXN1bHRzIGluZGljYXRlIHRoYXQgdGhlcmUgd2FzIGEgc2lnIGRpZmYgaW4gdmVyYmFsIGFiaWxpdHkgYmV0d2VlbiB0aGUgcG9ja2V0L2JhZyBhbmQgZGVzayBsb2NhdGlvbnMgYnV0IG5vIG90aGVyIGNvbXBhcmlzb25zLiBUaGF0IGlzLCBkZXNrIHBlcmZvcm1hbmNlIHdhcyBsb3dlciB0aGFuIHBvY2tldC9iYWcgcGVyZm9ybWFuY2UuIAoKYGBge3J9CiMgcnVuIHR1a2V5SFNEIHBvc3QtaG9jIGFuYWx5c2lzIG9uIHRoZSBEUyBhb3YKcG9zdGhvY19EUyA8LSBUdWtleUhTRChhbm92YV9EUyRhb3YsICJjb25kaXRpb24iKQoKIyBtYWtlIGludG8gdGFibGUgdG8gYWRkIG1lYXN1cmUgY29sdW1uCnBvc3Rob2NfRFNfdCA8LSBjYmluZCh0aWJibGUoImNvbXBhcmlzb24iID0gYygiUG9ja2V0L0JhZyB2IERlc2siLCAiT3V0c2lkZSB2IERlc2siLCAiT3V0c2lkZSB2IFBvY2tldC9CYWciKSksIHBvc3Rob2NfRFMkY29uZGl0aW9uKQoKcm93bmFtZXMocG9zdGhvY19EU190KSA8LSBOVUxMCgojIHNob3cgcmVzdWx0cyBpbiB0YWJsZQprYWJsZShwb3N0aG9jX0RTX3QsIGNhcHRpb24gPSAiUG9zdC1Ib2MgdGVzdHMgb2YgRGlnaXQgU3BhbiBTY29yZSBhY3Jvc3Mgc21hcnRwaG9uZSBsb2NhdGlvIGNvbmRpdGlvbnMuIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAncmNjY2MnLCBjb2wubmFtZXMgPSBjKCJDb21wYXJpc29uIiwgIkRpZmZlcmVuY2UiLCAiTG93ZXIiLCAiVXBwZXIiLCAicCIpKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFQpICU+JQogICMgYm9sZCB0aGUgc2lnIEFOT1ZBCiAgcm93X3NwZWMoMSwgYm9sZCA9IFQpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpgYGAKCiMjIyMjIERTICYgR1IgVmlzdWFsaXphdGlvbnMKClZpc3VhbGl6ZSB0aGUgcmVzdWx0cyB0b2dldGhlci4uLiAoUGFuZWwpCgpgYGB7cn0KIyBjcmVhdGUgam9pbiBkYXRhIHNldCB3aXRoIERTICYgR1IgZGF0YQphbm92YV9wbG90X0RTR1JfZGF0YSA8LSAKICBjYmluZChkYXRhLmZyYW1lKCJ0YXNrIiA9IGMocmVwKDEsIG5yb3coYW5vdmFfZGF0YV9EUykpLCByZXAoMiwgbnJvdyhhbm92YV9kYXRhX0dSKSkpKSwgCiAgICAgICAgcmJpbmQoCiAgICAgICAgIyBEUyAmIEdSIHNjb3JlcyBkYXRhIC0tIGFsbCBzY29yZSBjb2xzIG5lZWQgdG8gYmUgdGhlIHNhbWUsIG90aGVyIHdpc2UgdXNlIHJlbmFtZSB0byByZW5hbWUgY29scyBvciB3aWxsIG5vdCBqb2luIGNvcnJlY3RseQogICAgICAgICAgICAjIGRwbHlyOjpyZW5hbWUobW9kX3Njb3JlID0gU0FEX2RlcF9zY29yZSksICMgcmVuYW1lIGNvbHVtbiB0byBqb2luIGNvcnJlY3RseQogICAgICAgIGFub3ZhX2RhdGFfRFMgJT4lIHNlbGVjdCgtcGFydGljaXBhbnQpLCAKICAgICAgICBhbm92YV9kYXRhX0dSICU+JSBzZWxlY3QoLXBhcnRpY2lwYW50KQogICAgICAgICkpICU+JSAKICBtdXRhdGUodGFzayA9IGZhY3Rvcih0YXNrLCBsZXZlbHMgPSBjKDE6MiksIGxhYmVscyA9IGMoIihBKSBEaWdpdCBTcGFuIiwgIihCKSBHcmFtYXRpY2FsIFJlYXNvbmluZyIpKSkgCiAgIyBjb25kaXRpb24gbXVzdCBiZSBhIGZhY3RvciwgaWYgbm90IHVzZToKICAgICMgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sIGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpKQoKIyBzZWUgZ2xpbXBzZSBvZiBuZXcgZGF0YSBmcmFtZQpnbGltcHNlKGFub3ZhX3Bsb3RfRFNHUl9kYXRhKQpgYGAKCgpBIGNvdXBsZSBvZiBvcHRpb25zIGZvciB0aGUgcGFuZWxzLi4uCgooMSkgUGFuZWwgZmlnIHVzaW5nIGZhY2V0X3dyYXAoKS4gTm90ZSBoZXJlIHRoZSBkaWZmZXJpbmcgc2NhbGVzIGJldHdlZW4gdGhlIDIgdGVzdHMgbmFrZXMgaXQgZGlmZmljdWx0IHRvIHNlZSBib3RoIG9uIHRoZSBzYW1lIHktYXhpcyBzY2FsZSwgc28gdGhleSBhcmUgc2V0IHRvIGJlIGRpZmZlcmVudC4gVGhpcyBob3dldmVyIG1ha2VzIHRoZSBmaWd1cmUgaGFyZGVyIHRvIGludGVycHJldCBzaW5jZSBzb21lb25lIG1pZ2h0IG1pc3MgdGhlIGRpZmZlcmVudCBzY2FsZXMuIApgYGB7cn0KCiMgY3JlYXRlIGZpZ3VyZSBjYXB0aW9uCnNjYXRhbGxfbm90ZSA9ICJOb3RlOiBUaGUgcGxvdCBzaG93cyB0aGUgZGVuc2l0eSBjdXJ2ZSBvZiB0aGUgZGF0YSAodmlvbGluKSwgaW5kdiBkYXRhIGZvciBlYWNoIHAgKGNvbG91cmVkIGRvdHMpLCBpbnRlcnF1YXJ0aWxlIHJhbmdlICYgbWVkaWFuIChibGFjayBib3hwbG90KSwgYW5kIHRoZSBNICYgU0QgKHJlZCBkb3RzIGFuZCB3aGlza2VycykiCnNjYXRhbGxfbm90ZSA9IHBhc3RlMChzdHJ3cmFwKHNjYXRhbGxfbm90ZSwgd2lkdGggPSA5MCksIGNvbGxhcHNlID0gIlxuIikKCiMgY3JlYXRlIHBhbmVsIGZpZwogICMgdGhpcyBpcyB0aGUgc2FtZSBhcyBpbmR2IGZpZ3MgKyAiZmFjZXRfd3JhcCh+dGFzaywgbmNvbCA9IDIpIiBhdCB0aGUgZW5kCiAgIyBuZWVkIHRvIGNoYW5nZSBzaXplcyBvZiBkb3RzIHRvIGZpdCBuaWNlbHkKYW5vdmFfdmlvbGluX0RTR1IgPC0KICBnZ3Bsb3QoYW5vdmFfcGxvdF9EU0dSX2RhdGEsIGFlcyh5ID0gc2NvcmUsIHggPSBjb25kaXRpb24sIGNvbG9yID0gY29uZGl0aW9uKSwgc2hvdy5sZWdlbmQgPSBGKSArIAogICAgIyBhZGQgdmlvbGluIHBsb3QKICAgIGdlb21fdmlvbGluKHRyaW0gPSBGLCBzaG93LmxlZ2VuZCA9IEYpICsKICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gdmlvbGlucwogICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygnbGlnaHRzZWFncmVlbicsJ2RhcmtvcmNoaWQnLCAnZGVlcHNreWJsdWU0JykpICsgCiAgICAjIGFkZCBsYWJlbHMKICAgIGxhYnMoCiAgICAgICB0aXRsZSA9ICJEUyAmIEdSIFNjb3JlIGJ5IFNtYXJ0cGhvbmUgTG9jYXRpb24iLAogICAgICAgIyBzdWJ0aXRsZSA9ICJEVCwgRk0iLAogICAgICAgY2FwdGlvbiA9IHNjYXRhbGxfbm90ZSwKICAgICAgIHggPSAiU21hcnRwaG9uZSBMb2NhdGlvbiIsIAogICAgICAgeSA9ICJTY29yZSIKICAgICAgICkgKyAKICAgICMgbGFiZWwgaW5kdiBjb25kaXRpb25zCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkRlc2siLCAiUG9ja2V0L0JhZyIsICJPdXRzaWRlIikpICsKICAgICMgYWRqdXN0IHkgYXhpcyBzY2FsZQogICAgIyBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMywgMykpICsKICAgICMgYWRkIG1lZGlhbiAmIHF1YXJ0aWxlIChpLmUuLCBib3ggcGxvdCkKICAgIGdlb21fYm94cGxvdChjb2xvdXIgPSAiYmxhY2siLCB3aWR0aCA9IC40NSwgc2hvdy5sZWdlbmQgPSBGLCBvdXRsaWVyLnNoYXBlID0gTkEsIGNvZWYgPSAwKSArCiAgICAjIHN0YXRfYm94cGxvdChnZW9tID0gImVycm9yYmFyIiwgd2lkdGggPSAwLjI1LCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKyAjIHNob3dzIGVycm9yIGJhcnMKICAgICMgYWRkIGluZHYgcHMgcG9pbnRzCiAgICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBhZXMoY29sb3IgPSBjb25kaXRpb24pLCBzaXplID0gLjUsIHNoYXBlID0gMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAuOCksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICAgICAgIyMgYWx0ZXJuYXRpdmUgdG8gaW5kdiBkb3RzLi4uCiAgICAgICAgIyBnZW9tX2RvdHBsb3QoYmluYXhpcyA9ICd5Jywgc3RhY2tkaXIgPSAnY2VudGVyJywgZG90c2l6ZSA9IC43NSkgKyAgCiAgICAgICMgYWRkIGN1c3RvbSBjb2xvdXIgdG8gaW5kdiBkb3RzCiAgICAgICAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJ2xpZ2h0c2VhZ3JlZW4nLCdkYXJrb3JjaGlkJywgJ2RlZXBza3libHVlNCcpKSArCiAgICAjIGFkZCBNIHBvaW50ICYgU0Qgd2hpc2tlcgogICAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhPW1lYW5fc2RsLCBtdWx0PTEsIGdlb209InBvaW50cmFuZ2UiLCBjb2xvcj0iI0JCMEEyMSIsIHNoYXBlPTE4LCBzaXplID0gLjU1KSArIAogICAgIyBnZW9tX3BvaW50KHN0YXQ9InN1bW1hcnkiLCBzaGFwZSA9IDE4LCBjb2xvdXIgPSAiYmxhY2siLCBmdW4gPSBtZWFuLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKC45KSwgc2l6ZSA9IDQsIHNob3cubGVnZW5kID0gRkFMU0UpIAogICAgIyBhZGQgc3RhdHMKICAgICAgIyBvbW5pYnVzIHRlc3QgLS0gQU5PVkEKICAgICAgIyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImFub3ZhIikgKwogICAgIyBnZW9tX3NpZ25pZihjb21wYXJpc29ucyA9IGxpc3QoYygiRGVzayIsICJPdXRzaWRlIikpLCBtYXBfc2lnbmlmX2xldmVsPVRSVUUpICsgCiAgICAjIHN0YXRfcHZhbHVlX21hbnVhbChrc3QsIGxhYmVsID0gInAgPSB7cH0iKSArIAogICAgIyBhZGQgdGhlbWUKICAgIHRoZW1lX2NsYXNzaWMoKSArCiAgICAjIGFkZCBzcGVjaWZpYyBmb3JtYXR0aW5nCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEzKSwKICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gMTIsIGZhY2UgPSAiaXRhbGljIiksCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpLCAKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIpKSArCiAgICBmYWNldF93cmFwKH50YXNrLCBuY29sID0gMiwgc2NhbGVzID0gImZyZWUiKQoKIyBzaG93IHBsb3QKYW5vdmFfdmlvbGluX0RTR1IKCiMgZXhwb3J0IHBsb3RzCiAgIyByZW1vdmUgY2FwdGlvbiAmIHRpdGxlIGlmIG5lZWRlZCBiZWZvcmUgZXhwb3J0aW5nCiMgZ2dzYXZlKGZpbGVuYW1lPSJmaWdfYW5vdmFfdmlvbGluX0RTR1Jfb2N0MTgiLCBwbG90ID0gYW5vdmFfdmlvbGluX0RTR1IsIGRldmljZSA9ICJqcGVnIiwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIsIGRwaSA9IDEwMDApCgpgYGAKCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgY3JlYXRlIGZpZ3VyZSBjYXB0aW9uCnNjYXRhbGxfbm90ZTIgPSAiTm90ZTogYWRkIG5vdGUgaGVyZS4uLiAiCnNjYXRhbGxfbm90ZTIgPSBwYXN0ZTAoc3Ryd3JhcChzY2F0YWxsX25vdGUsIHdpZHRoID0gOTApLCBjb2xsYXBzZSA9ICJcbiIpCgoKYW5vdmFfdmlvbGluX0RTR1IyIDwtIAogIGdyaWQuYXJyYW5nZShhbm92YV92aW9saW5fRFMsIGFub3ZhX3Zpb2xpbl9HUiwKICAgICAgICAgICAgICAgbnJvdyA9IDEsCiAgICAgICAgICAgICAgIHRvcCA9IHRleHRfZ3JvYigiRFMgJiBHUiBTY29yZSBieSBTbWFydHBob25lIExvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMCksICMgc2hvdyB0ZXh0IGluIGJvbGQKICAgICAgICAgICAgICAgYm90dG9tID0gdGV4dF9ncm9iKHNjYXRhbGxfbm90ZTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoanVzdCA9IDAsICMgc3BlY2lmeSBob3Jpem9udGFsIGp1c3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwLjA1LCAjIHNwZWNpZnkgb3JpZW50YXRpb24gb24geC1heGlzIChib3R0b20gTCA9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIml0YWxpYyIpICMgc2hvdyB0ZXh0IGluIGl0YWxpY3MKICAgICAgICAgICAgICAgKQpgYGAKCgojIyMjIyBPdGhlciBUYXNrcwpEb3VibGUgVHJvdWJsZSAoRFQpCmBgYHtyfQojIyBGT1IgRFQKYW5vdmFfZGF0YV9EVCA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgYFNjb3JlX0RvdWJsZSBUcm91YmxlYCkgJT4lIAogIHJlbmFtZShzY29yZSA9IGBTY29yZV9Eb3VibGUgVHJvdWJsZWApCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV9EVCA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX0RUCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX0RUJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfRFQkYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuNykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9EVCRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9EVCwgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfRFQkQU5PVkEsIGNhcHRpb24gPSAiRFQgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9EVCRjb25kaXRpb24sIGFub3ZhX2RhdGFfRFQkc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9EVCwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBEVCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQpgYGAKCkZlYXR1cmUgTWF0Y2ggKEZNKQpgYGB7cn0KIyMgRk9SIEZNCmFub3ZhX2RhdGFfRk0gPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIGBTY29yZV9GZWF0dXJlIE1hdGNoYCkgJT4lIAogIHJlbmFtZShzY29yZSA9IGBTY29yZV9GZWF0dXJlIE1hdGNoYCkKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX0ZNIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfRk0KICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfRk0kYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9GTSRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IDUpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfRk0kYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfRk0sIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX0ZNJEFOT1ZBLCBjYXB0aW9uID0gIkZNIC0gb25lLXdheSBBTk9WQSBvbiBPc3BhbiBBYnNvbHV0ZSBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgphbm92YV9GTV93aGl0ZSA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX0ZNCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICwgd2hpdGUuYWRqdXN0ID0gVFJVRQogICkKCiMgY29tcHV0ZSBlZmZlY3Qgc2l6ZQphbm92YV9GTV93aGl0ZV9lcyA8LSBFdGFTcShhbm92YV9GTV93aGl0ZSRhb3YsIHR5cGUgPSAzLCBhbm92YSA9IEZBTFNFKQoKa2FibGUoY2JpbmQoYW5vdmFfRk1fd2hpdGUkQU5PVkFbMixdLCBkYXRhLmZyYW1lKCJnZXMiID0gYyhhbm92YV9GTV93aGl0ZV9lc1syXSkpKSwgY2FwdGlvbiA9ICJGTSAtIG9uZS13YXkgQU5PVkEgLSB3aGl0ZS1jb3JyIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lCiAga2FibGVfY2xhc3NpYygpCgogICAgIyBrYWJsZShhbm92YV9GTV93aGl0ZSRBTk9WQSwgY2FwdGlvbiA9ICJ0c19jb24gLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogICAgIyAgIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAgICAjICAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICAgICMgICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9GTSRjb25kaXRpb24sIGFub3ZhX2RhdGFfRk0kc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9GTSwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBGTSIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQpgYGAKCk1vbmtleSBMYWRkZXIgKE1MKQpgYGB7cn0KIyMgRk9SIE1MCmFub3ZhX2RhdGFfTUwgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIGBTY29yZV9Nb25rZXkgTGFkZGVyYCkgJT4lIAogIHJlbmFtZShzY29yZSA9IGBTY29yZV9Nb25rZXkgTGFkZGVyYCkKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX01MIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfTUwKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfTUwkYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9NTCRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX01MJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX01MLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9NTCRBTk9WQSwgY2FwdGlvbiA9ICJNTCAtIG9uZS13YXkgQU5PVkEgb24gT3NwYW4gQWJzb2x1dGUgU2NvcmUiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX01MJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9NTCRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX01MLCAtcGFydGljaXBhbnQpLCBjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIE1MIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCmBgYAoKT2RkIE9uZSBPdXQgKE9PTykKYGBge3J9CiMjIEZPUiBPT08KYW5vdmFfZGF0YV9PT08gPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIGBTY29yZV9PZGQgT25lIE91dGApICU+JSAKICByZW5hbWUoc2NvcmUgPSBgU2NvcmVfT2RkIE9uZSBPdXRgKQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfT09PIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfT09PCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX09PTyRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX09PTyRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IDEpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfT09PJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX09PTywgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfT09PJEFOT1ZBLCBjYXB0aW9uID0gIk9PTyAtIG9uZS13YXkgQU5PVkEgb24gT3NwYW4gQWJzb2x1dGUgU2NvcmUiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX09PTyRjb25kaXRpb24sIGFub3ZhX2RhdGFfT09PJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfT09PLCAtcGFydGljaXBhbnQpLCBjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIE9PTyIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQpgYGAKClBhaXJlZCBBc3NvY2lhdGVzIChQQSkKYGBge3J9CiMjIEZPUiBQQQphbm92YV9kYXRhX1BBIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBgU2NvcmVfUGFpcmVkIEFzc29jaWF0ZXNgKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gYFNjb3JlX1BhaXJlZCBBc3NvY2lhdGVzYCkKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX1BBIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfUEEKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfUEEkYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9QQSRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC44KSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX1BBJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX1BBLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9QQSRBTk9WQSwgY2FwdGlvbiA9ICJQQSAtIG9uZS13YXkgQU5PVkEgb24gT3NwYW4gQWJzb2x1dGUgU2NvcmUiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX1BBJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9QQSRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX1BBLCAtcGFydGljaXBhbnQpLCBjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIFBBIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCmBgYAoKUG9seWdvbnMgKFApCmBgYHtyfQojIyBGT1IgUAphbm92YV9kYXRhX1AgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIFNjb3JlX1BvbHlnb25zKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gU2NvcmVfUG9seWdvbnMpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV9QIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfUAogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV9QJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfUCRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IDEpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfUCRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9QLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9QJEFOT1ZBLCBjYXB0aW9uID0gIlAgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9QJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9QJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfUCwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBQIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCmBgYAoKUm90YXRpb25zIChSKQpgYGB7cn0KIyMgRk9SIFIKYW5vdmFfZGF0YV9SIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBTY29yZV9Sb3RhdGlvbnMpICU+JSAKICByZW5hbWUoc2NvcmUgPSBTY29yZV9Sb3RhdGlvbnMpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV9SIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfUgogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV9SJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfUiRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IDUpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfUiRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9SLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9SJEFOT1ZBLCBjYXB0aW9uID0gIlIgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9SJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9SJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfUiwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBSIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCmBgYAoKU3BhdGlhbCBQbGFubmluZyAoU1ApCmBgYHtyfQojIyBGT1IgU1AKYW5vdmFfZGF0YV9TUCA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgYFNjb3JlX1NwYXRpYWwgUGxhbm5pbmdgKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gYFNjb3JlX1NwYXRpYWwgUGxhbm5pbmdgKQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfU1AgPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfZGF0YV9TUAogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV9TUCRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX1NQJGFvdiRyZXNpZHVhbHMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIE9zcGFuIFJlc2lkdWFscyIsIGJpbndpZHRoID0gMikgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9TUCRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9TUCwgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfU1AkQU5PVkEsIGNhcHRpb24gPSAiU1AgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9TUCRjb25kaXRpb24sIGFub3ZhX2RhdGFfU1Akc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9TUCwgLXBhcnRpY2lwYW50KSwgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBTUCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQpgYGAKClNwYXRpYWwgU3BhbiAoU1MpCmBgYHtyfQojIyBGT1IgU1MKYW5vdmFfZGF0YV9TUyA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgJ1Njb3JlX1NwYXRpYWwgU3BhbicpICU+JSAKICByZW5hbWUoc2NvcmUgPSAnU2NvcmVfU3BhdGlhbCBTcGFuJykKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX1NTIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfU1MKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfU1MkYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9TUyRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC41KSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX1NTJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX1NTLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9TUyRBTk9WQSwgY2FwdGlvbiA9ICJTUyAtIG9uZS13YXkgQU5PVkEgb24gT3NwYW4gQWJzb2x1dGUgU2NvcmUiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX1NTJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9TUyRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX1NTLCAtcGFydGljaXBhbnQpLCBjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIFNTIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCmBgYAoKVG9rZW4gU2VhcmNoIChUUykKYGBge3J9CiMjIEZPUiBUUwphbm92YV9kYXRhX1RTIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBgU2NvcmVfVG9rZW4gU2VhcmNoYCkgJT4lIAogIHJlbmFtZShzY29yZSA9IGBTY29yZV9Ub2tlbiBTZWFyY2hgKQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfVFMgPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfZGF0YV9UUwogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV9UUyRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX1RTJGFvdiRyZXNpZHVhbHMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIE9zcGFuIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjcpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfVFMkYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfVFMsIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX1RTJEFOT1ZBLCBjYXB0aW9uID0gIlRTIC0gb25lLXdheSBBTk9WQSBvbiBPc3BhbiBBYnNvbHV0ZSBTY29yZSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfVFMkY29uZGl0aW9uLCBhbm92YV9kYXRhX1RTJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfVFMsIC1wYXJ0aWNpcGFudCksIGNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBDQlMgVFMiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKYGBgCgo8IS0tICMjIyMjIENoZWNrIHdpdGhvdXQgb3V0bGllcnMgZnJvbSBDQlNfb3ZlcmFsbCAtLT4KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyAjIGluc3RhbGwgdGhlIHBhY2thZ2UKIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3N0YXRzcGxvdCIpCiMgCiMgIyBMb2FkIHRoZSBwYWNrYWdlCiMgbGlicmFyeShnZ3N0YXRzcGxvdCkKCiMgZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfdHNfdmVyYmFsYWIsIC1wYXJ0aWNpcGFudCksCiMgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIFRTIFZlcmJhbCBBYmlsaXR5ICggR1IgJiBEUykgJiBTbWFydHBob25lIExvY2F0aW9uIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCiMgCiMgZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfRFMsIC1wYXJ0aWNpcGFudCksCiMgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIERTIFRhc2sgYWxvbmUgJiBTbWFydHBob25lIExvY2F0aW9uIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCiMgCiMgZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfR1IsIC1wYXJ0aWNpcGFudCksCiMgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIEdSIFRhc2sgYWxvbmUgJiBTbWFydHBob25lIExvY2F0aW9uIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCgpgYGAKCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQoKIyAjIENyZWF0ZSBhIGJveHBsb3Qgb2YgdGhlIGRhdGFzZXQsIG91dGxpZXJzIGFyZSBzaG93biBhcyB0d28gZGlzdGluY3QgcG9pbnRzCiMgYW5vdmFfb3ZlcmFsbF9vdXRzIDwtIGJveHBsb3QoZGF0YSA9IHNlbGVjdChhbm92YV9vdmVyYWxsX2RhdGEsIC1wYXJ0aWNpcGFudCksIENCU19vdmVyYWxsfmNvbmRpdGlvbiwgcGxvdCA9IEZBTFNFKSRvdXQgIyB0aGlzIHdhcyBzYXZpbmcgYXMgb2RkIGZpbGUuLi4KIyAKIyAjQ3JlYXRlIGEgYm94cGxvdCB0aGF0IGxhYmVscyB0aGUgb3V0bGllcnMKIyBnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfb3ZlcmFsbF9kYXRhLCAtcGFydGljaXBhbnQpLAojIGNvbmRpdGlvbiwgQ0JTX292ZXJhbGwsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksICwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBPdmVyYWxsICYgU01hcnRwaG9uZSBMb2NhdGlvbiAtIFdJVEggT3V0bGllcnMgIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCiMgCiMgCiMgIyB4b3V0bGllcnNfZGF0YSA8LSBhbm92YV9vdmVyYWxsX2RhdGFbd2hpY2goYW5vdmFfb3ZlcmFsbF9kYXRhJENCU19vdmVyYWxsICVpbiUgYW5vdmFfb3ZlcmFsbF9vdXRzKSxdCiMgCiMgbmV3X2Rlc2sgPC0gc3Vic2V0KGFub3ZhX292ZXJhbGxfZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiZGVzayIpLCAhKENCU19vdmVyYWxsICVpbiUgYW5vdmFfb3ZlcmFsbF9vdXRzKSkKIyAjIG5ld19vdXQgPC0gc3Vic2V0KGFub3ZhX292ZXJhbGxfZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAib3V0c2lkZSIpLCAhKENCU19vdmVyYWxsICVpbiUgYW5vdmFfb3ZlcmFsbF9vdXRzWzEwOjExXSkpCiMgCiMgbmV3X2RhdGEgPC0gYW5vdmFfb3ZlcmFsbF9kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJkZXNrIikgJT4lIAojICAgYmluZF9yb3dzKG5ld19kZXNrKQojIAojIGdnYmV0d2VlbnN0YXRzKAojICAgbmV3X2RhdGEsCiMgY29uZGl0aW9uLCBDQlNfb3ZlcmFsbCwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIE92ZXJhbGwgJiBTTWFydHBob25lIExvY2F0aW9uIC0gT3V0bGllcnMgUmVtb3ZlZCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQojIAojIGdnYmV0d2VlbnN0YXRzKGFub3ZhX2RhdGFfRFMsCiMgY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIE92ZXJhbGwgJiBTTWFydHBob25lIExvY2F0aW9uIC0gT3V0bGllcnMgUmVtb3ZlZCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQojIAojIGdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9vdmVyYWxsX2RhdGEsIC1wYXJ0aWNpcGFudCkgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKSwKIyAgICAgICAgICAgICAgICBjb25kaXRpb24sIAojICAgICAgICAgICAgICAgIENCU19vdmVyYWxsLCAKIyAgICAgICAgICAgICAgICBvdXRsaWVyLnRhZ2dpbmcgPSBGLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCAsIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBDQlMgT3ZlcmFsbCAmIFNNYXJ0cGhvbmUgTG9jYXRpb24gLSBPdXRsaWVycyBSZW1vdmVkIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCiMgZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX292ZXJhbGxfZGF0YSwgLXBhcnRpY2lwYW50KSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAicG9ja2V0L2JhZyIpLAojICAgICAgICAgICAgICAgIGNvbmRpdGlvbiwgCiMgICAgICAgICAgICAgICAgQ0JTX292ZXJhbGwsIAojICAgICAgICAgICAgICAgIG91dGxpZXIudGFnZ2luZyA9IEYsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksICwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBPdmVyYWxsICYgU01hcnRwaG9uZSBMb2NhdGlvbiAtIE91dGxpZXJzIFJlbW92ZWQiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKIyBnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfb3ZlcmFsbF9kYXRhLCAtcGFydGljaXBhbnQpICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJvdXRzaWRlIiksCiMgICAgICAgICAgICAgICAgY29uZGl0aW9uLCAKIyAgICAgICAgICAgICAgICBDQlNfb3ZlcmFsbCwgCiMgICAgICAgICAgICAgICAgb3V0bGllci50YWdnaW5nID0gRiwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIE92ZXJhbGwgJiBTTWFydHBob25lIExvY2F0aW9uIC0gT3V0bGllcnMgUmVtb3ZlZCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQojIAojICMgYm94cGxvdChkYXRhID0gc2VsZWN0KG5ld19kYXRhLCAtcGFydGljaXBhbnQpLCBDQlNfb3ZlcmFsbH5jb25kaXRpb24pCgpgYGAKCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMjIEZPUiBORVcgREFUQQoKIyAjIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyAjIyBPVkVSQUxMCiMgYW5vdmFfbmV3IDwtIGV6QU5PVkEoCiMgICBkYXRhID0gbmV3X2RhdGEKIyAgICwgZHYgPSAuKENCU19vdmVyYWxsKQojICAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQojICAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiMgICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKIyAgICwgZGV0YWlsZWQgPSBUUlVFCiMgICAsIHJldHVybl9hb3YgPSBUUlVFCiMgICApCiMgCiMgZ2dxcXBsb3QoYW5vdmFfbmV3JGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQojIAojIHFwbG90KGFub3ZhX25ldyRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC43KSArIHRoZW1lX2NsYXNzaWMoKQojIAojIGthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9uZXckYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpbmV3ID0gNCwgYWxpZ24gPSAnYycpICU+JQojICAgIyBrYWJsZV9zdHlsaW5nKGJvb25ld3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKIyAgIGthYmxlX2NsYXNzaWMoKQojIAojIGthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBuZXdfZGF0YSwgQ0JTX292ZXJhbGwgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpbmV3ID0gNCwgYWxpZ24gPSAnYycpICU+JQojICAgIyByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAojICAgIyBrYWJsZV9zdHlsaW5nKGJvb25ld3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKIyAgIGthYmxlX2NsYXNzaWMoKQojIAojIGthYmxlKGFub3ZhX25ldyRBTk9WQSwgY2FwdGlvbiA9ICJuZXcgLSBvbmUtd2F5IEFOT1ZBIG9uIE9zcGFuIEFic29sdXRlIFNjb3JlIiwgZGlnaW5ldyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKIyAgIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiMgICAjIGthYmxlX3N0eWxpbmcoYm9vbmV3dHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAojICAga2FibGVfY2xhc3NpYygpCiMgCiMgcGxvdChuZXdfZGF0YSRjb25kaXRpb24sIG5ld19kYXRhJENCU19vdmVyYWxsKQpgYGAKCgo8IS0tIEF0dGVtcHRpbmcgYSBiYXIgZmlnLCBub3QgZ3JlYXQsIGxpa2UgdGhlIHZpb2xpbnMgbW9yZS4uLiAgLS0+CmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CgojIHhfdGVtcCA8LSBhbm92YV9vdmVyYWxsX2RhdGEgJT4lIHNlbGVjdCgtcGFydGljaXBhbnQpCiMgICBsb2NhdGlvbgojICMgcGxvdCBiYXIgZ3JhcGggLSBHT09ECiMgIyBhbm92YV9vdmVyYWxsX2JhciA8LSAKIyAgIGdncGxvdCh4X3RlbXAsIGFlcyh4ID0gY29uZGl0aW9uLCB5ID0gQ0JTX292ZXJhbGwpLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiMgICAjIGdncGxvdChvc3Bhbl9iYXJfZGF0YSwgYWVzKHggPSBsb2NhdGlvbiwgeSA9IHNjb3JlLCBmaWxsID0gcG93ZXIpLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiMgICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBmdW4gPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsgCiMgICAgICMgZ3VpZGVzKHNoYXBlID0gRkFMU0UpICsgCiMgICAjIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNhZGV0Ymx1ZTMiLCAiZGVlcHNreWJsdWU0IikpICsgCiMgICBsYWJzKHRpdGxlID0gIlBlcmZvcm1hbmNlIG9uIHRoZSBPU3BhbiBUYXNrIiwKIyAgICAgICAgc3VidGl0bGUgPSAiQXZlcmFnZSBBYnNvbHV0ZSBPU3BhbiBTY29yZSIsCiMgICAgICAgIHggPSAiU21hcnRwaG9uZSBMb2NhdGlvbiIsIAojICAgICAgICB5ID0gIlNjb3JlIiwgCiMgICAgICAgICMgZmlsbCA9ICJTbWFydHBob25lIFBvd2VyIiwKIyAgICAgICAgY2FwdGlvbiA9ICJOb3RlOiBTY29yZSBpcyB0aGUgbnVtYmVyIG9mIGNvcnJlY3QgbGV0dGVycyByZWNhbGxlZCBiYXNlZCBcbiBvbiBpZiBhbGwgbGV0dGVycyBpbiBhIGdpdmVuIGJsb2NrIHdlcmUgcmVjYWxsZWQgY29ycmVjdGx5LiIpICsKIyAgICAgICAgICMgdGhlICJcbiIgaGVyZSBkZW5vdGUgdGhhdCB5b3Ugd2FudCBhIG5ldyBsaW5lIGZvcm1lZCBpbiB0aGUgdGV4dAojICAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTIsIDIpKSArCiMgICAjc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjb2xzKSArCiMgICAjIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIGFlcyhjb2xvciA9IENCU19vdmVyYWxsKSwgc2l6ZSA9IDEsIAojICAgIyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gLjUzKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwojICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImRlZXBza3libHVlNCIsICJwdXJwbGU0IikpICsgCiMgICBnZW9tX3BvaW50KHN0YXQ9InN1bW1hcnkiLCBmdW49bWVhbiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSguOSksIHNpemUgPSAxLjUsIHNob3cubGVnZW5kID0gRkFMU0UpICsKIyAgIGdlb21fZXJyb3JiYXIoZGF0YSA9IGFub3ZhX292ZXJhbGxfZGF0YSwgc3RhdCA9ICJzdW1tYXJ5IiwgZnVubWluID0gZnVuY3Rpb24oeCkgbWVhbih4KSAtIHNkKHgpL3NxcnQobGVuZ3RoKHgpKSwgCiMgICAgICAgICAgICAgICAgIGZ1bm1heCA9IGZ1bmN0aW9uKHgpIG1lYW4oeCkgKyBzZCh4KS9zcXJ0KGxlbmd0aCh4KSksIHNpemU9IC41LCB3aWR0aD0gLjI1LCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKC45KSkgKwojICAgdGhlbWVfY2xhc3NpYygpICsKIyAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLCAKIyAgICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMpLCAKIyAgICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiKSwKIyAgICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkKIyAKIyAKIyAjIGV4cG9ydCBwbG90CiMgIyBnZ3NhdmUoZmlsZW5hbWU9ImZpZ19vc3Bhbl9iYXIiLCBwbG90ID0gb3NwYW5fYmFyLCBkZXZpY2UgPSAicG5nIiwKIyAjICAgICAgICBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gNTAwKQojIAojIAojIGdncGxvdCh4X3RlbXAsIGFlcyh4ID0gbG8pKQpgYGAKCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQoKICAjICMgdXNlIHNpbXBsaWZpZWQgZGF0YQogICMgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiAgIyAjIHBlcmZvcm0gdGhlIGxvbmc+d2lkZSBmdW5jdGlvbiBmb3IgZWFjaCBwYXJ0aWNpcGFudAogICMgZ3JvdXBfYnkocGFydGljaXBhbnQpICU+JSAKICAjICMgbWFrZSBkYXRhIHdpZGUKICAjIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb25kaXRpb24sICMgVmFyaWFibGUgd2hvc2UgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGNvbHVtbiBuYW1lcyAtLSBlbnRlciBtdWx0aXBsZSB3aXRoICJjKCkiCiAgIyAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IGMoQ0JTX292ZXJhbGwpKSAjIFZhcmlhYmxlIHdob3NlIHZhbHVlcyB3aWxsIHBvcHVsYXRlIHRoZSB0YWJsZeKAmXMgYmxvY2sgb2YgY2VsbCB2YWx1ZXMuCiAgIyAjIHJlbmFtZSAiVXNlci5FbWFpbCIgYXMgInBhcnRpY2lwYW50IiB0byBsaW5rIGZpbGVzCiMgCiMgQ0JTX292ZXJhbGxfZGVzayA8LSAKIyAgIGNiaW5kKG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAojICAgZmlsdGVyKGNvbmRpdGlvbiA9PSAiZGVzayIpICU+JSAKIyAgIHNlbGVjdChDQlNfb3ZlcmFsbCkgJT4lIAojICAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSksCiMgICAKIyAgIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAojICAgZmlsdGVyKGNvbmRpdGlvbiA9PSAicG9ja2V0L2JhZyIpICU+JSAKIyAgIHNlbGVjdChDQlNfb3ZlcmFsbCkgJT4lIAojICAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSksIAojICAgCiMgICBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKIyAgIGZpbHRlcihjb25kaXRpb24gPT0gIm91dHNpZGUiKSAlPiUgCiMgICBzZWxlY3QoQ0JTX292ZXJhbGwpICU+JSAKIyAgIHBpdm90X2xvbmdlcihldmVyeXRoaW5nKCkpIAojICAgICAgICAgKQojIAojICMjIHR1cm4geW91ciBkYXRhIGludG8gYSBzdGFuZCBhbG9uZSBkYXRhc2V0CiMgQ0JTX292ZXJhbGxfZGVzayA8LSAKIyBwbG90LmRhdF9kZXNrIDwtIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIAojICAgZHBseXI6Omdyb3VwX2J5KGNvbmRpdGlvbikgJT4lIAojICAgc3ByZWFkKENCU19vdmVyYWxsKQojICAgc3VtbWFyaXNlKENCU19vdmVyYWxsKQojICAgZmlsdGVyKGNvbmRpdGlvbiA9PSAiZGVzayIpICU+JSAKIyAgIHNlbGVjdChDQlNfb3ZlcmFsbCkgJT4lIAojICAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSkgCiMgCiMgcGxvdC5kYXRfZGVzayA8LSBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSAKIyAgIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKSAlPiUgCiMgICBzZWxlY3QoQ0JTX292ZXJhbGwpICU+JSAKIyAgIHBpdm90X2xvbmdlcihldmVyeXRoaW5nKCkpIAojIAojIHBsb3QuZGF0X2Rlc2sgPC0gbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgCiMgICBmaWx0ZXIoY29uZGl0aW9uID09ICJkZXNrIikgJT4lIAojICAgc2VsZWN0KENCU19vdmVyYWxsKSAlPiUgCiMgICBwaXZvdF9sb25nZXIoZXZlcnl0aGluZygpKSAKIyAKIyAKIyAjIyBpZGVudGlmeSB0aGUgdmFsdWVzIGZvciB0aGUgeC1heGlzCiMgeHYgPC0gYygtMiwgLTEsIDAsIDEsIDIpCiMgIyMgaWRlbnRpZnkgdGhlIG1pZGRsZSB2YWx1ZXMgZm9yIHRoZSB5LXRpY2sgbWFya3MKIyB5djEgPC0gYygtLjAyNSwtLjAyNSwtLjAyNSwtLjAyNSwtLjAyNSkKIyB5djIgPC0gYygtLjA2NSwtLjA2NSwtLjA2NSwtLjA2NSwtLjA2NSkKIyAjIyBpZGVudGlmeSB0aGUgdHJhbnNmb3JtYXRpb25zIGZvciB0aGUgdGljayBtYXJrIGxhYmVscyBvbiBvdGhlciBheGVzCiMgcnYgPC0geHYqIHNkKGFza19kcyRwb2ludHMpICsgbWVhbihhc2tfZHMkcG9pbnRzKQojIGlxIDwtIHh2KjE1ICsgMTAwCiMgCiMgIyMgbWFrZSB0aGUgcGxvdAojIGdncGxvdCgpICsgCiMgICBnZW9tX2RlbnNpdHkoZGF0YT1wbG90LmRhdCwgYWVzKHZhbHVlLCBmaWxsID0gbmFtZSksIGFscGhhPS4yKSArCiMgICAjIyBhZGQgYW4gYWJsaW5lIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUgcmF3IGRhdGEgYXhpcwojICAgZ2VvbV9hYmxpbmUoc2xvcGU9MCwgaW50ZXJjZXB0PS0uMDI1KSArIAojICAgIyMgYWRkIHNlZ21lbnRzIGZvciB0aGUgdGljayBtYXJrcwojICAgZ2VvbV9zZWdtZW50KGFlcyh4PXh2LCB5PXl2MSAtIC4wMDUsIHhlbmQ9eHYsIHllbmQ9eXYxICsgLjAwNSkpICsgCiMgICAjIyBhZGQgdGhlIHRleHQgbGFiZWxzCiMgICBnZW9tX3RleHQoYWVzKHg9eHYsIHkgPSB5djEgLSAuMDExLCBsYWJlbD1zcHJpbnRmKCIlLjJmIiwgcnYpKSkgKyAKIyAgICMjIHJlcGVhdCBhIGJpdCBsb3dlciBmb3IgdGhlIElRIGF4aXMKIyAgIGdlb21fYWJsaW5lKHNsb3BlPTAsIGludGVyY2VwdD0tLjA2NSkgKyAKIyAgIGdlb21fc2VnbWVudChhZXMoeD14diwgeT15djIgLSAuMDA1LCB4ZW5kPXh2LCB5ZW5kPXl2MiArIC4wMDUpKSArICAKIyAgIGdlb21fdGV4dChhZXMoeD14diwgeSA9IHl2MiAtIC4wMTEsIGxhYmVsPXNwcmludGYoIiUuMmYiLCBpcSkpKSArIAojICAgIyMgZm9ybWF0IHRoZSBhY3R1YWwgeC1heGlzCiMgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPS0zOjMsIGxhYmVscz1wYXJzZSh0ZXh0PXBhc3RlKC0zOjMsICcqc2lnbWEnKSkgLAojICAgICAgICAgICAgICAgICAgICAgICJTdGFuZGFyZCBkZXZpYXRpb24iKSArIAojICAgIyMgYWRkIGEgeS1heGlzIHRvIGlkZW50aWZ5IHRoZSB0d28gbmV3IHNjYWxlcy4KIyAgIHNjYWxlX3lfY29udGludW91cyhzZWMuYXhpcyA9IHNlY19heGlzKH4uLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygtLjAyNSwgLS4wNjUpLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiUmF3IERhdGEiLCAiSVEiKSkpICsgCiMgICAjIyBwdXQgdGhlIGxlZ2VuZCBvbiB0b3AgLSB0aGlzIGtlZXBzIGl0IGZyb20gYmVpbmcgcHVzaGVkIGFzaWRlIGZvciB0aGUgc2Vjb25kCiMgICAjIyB5LWF4aXMgbGFiZWxzLiAKIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0idG9wIikKIyAKIyBnZ3Bsb3QoZGF0YSA9IG5ld19kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJkZXNrIikgJT4lIHNlbGVjdChDQlNfb3ZlcmFsbCksIGFlcyh4ID0gQ0JTX292ZXJhbGwpKSArCiMgICBnZW9tX2RlbnNpdHkoKQojIAojIGdncGxvdChkYXRhID0gbmV3X2RhdGEsIGFlcyh4ID0gQ0JTX292ZXJhbGwsIGdyb3VwID0gY29uZGl0aW9uLCBmaWxsID0gY29uZGl0aW9uKSkrCiMgICBnZW9tX2RlbnNpdHkoYWRqdXN0ID0gMS41LCBhbHBoYSA9IC40KSArIAojICAgbGFicyh0aXRsZSA9ICJDQlMgT1ZFUkFMTCAtIE91dGxpZXJzIFJlbW92ZWQiKQojIAojIGdncGxvdChkYXRhID0gYW5vdmFfb3ZlcmFsbF9kYXRhLCBhZXMoeCA9IENCU19vdmVyYWxsLCBncm91cCA9IGNvbmRpdGlvbiwgZmlsbCA9IGNvbmRpdGlvbikpKwojICAgZ2VvbV9kZW5zaXR5KGFkanVzdCA9IDEuNSwgYWxwaGEgPSAuNCkgKyAKIyAgIGxhYnModGl0bGUgPSAiQ0JTIE9WRVJBTEwgLSBXaXRoIE91dGxpZXJzIikKCmBgYAoKIyMgUmVncmVzc2lvbgoKUnVuIGEgcmVncmVzc2lvbjoKCiMjIyAoMSkgTWVtb3J5CgotIGNyaXRlcmlvbjogQ0JTIE1lbW9yeSBDb21wb3NpdGUgU2NvcmUKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMgb25seQpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX21lbV9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBDQlNfdHNfbWVtb3J5IH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0pCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX21lbV9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX21lbV9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19tZW1fbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCByZWdfbWVtX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX21lbV9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX21lbV9tb2RlbCA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgQ0JTX3RzX21lbW9yeSB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfbWVtX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX21lbV9tb2RlbCRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKIyBob21vZ2VuZWl0eSAKcGxvdChyZWdfbWVtX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19tZW1fbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX21lbV9tb2RlbCkKYGBgCgojIyMgKDIpIFJlYXNvbmluZwoKLSBjcml0ZXJpb246IENCUyBSZWFzb25pbmcgQ29tcG9zaXRlIFNjb3JlCi0gcHJlZGljdG9yczogTk1QUTsgTVBJUTogSSwgU0ksIFZGTzsgU0FEOiBEZXAuLCBFQSwgQSwgRGlzdC4KICAtIGV4cGxvcmU6IGFnZSwgYWdlIG9mIGZpcnN0IHBob25lLCBkaXN0cmFjdGVkIGJ5IHBob25lCgpRdWVzIG9ubHkKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19yZWFzb25fbW9kZWxfcXVlcyA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgQ0JTX3RzX3JlYXNvbiB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19yZWFzb25fbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19yZWFzb25fbW9kZWxfcXVlcyRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKIyBob21vZ2VuZWl0eSAKcGxvdChyZWdfcmVhc29uX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX3JlYXNvbl9tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19yZWFzb25fbW9kZWxfcXVlcykKYGBgCgpBbGwKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19yZWFzb25fbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIENCU190c19yZWFzb24gfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX3JlYXNvbl9tb2RlbCRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19yZWFzb25fbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX3JlYXNvbl9tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfcmVhc29uX21vZGVsJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19yZWFzb25fbW9kZWwpCmBgYAoKIyMjICgzKSBWZXJiYWwgQWJpbGl0eQoKLSBjcml0ZXJpb246IENCUyBWZXJiYWwgQWJpbGl0eSBDb21wb3NpdGUgU2NvcmUKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ192ZXJiYWxfbW9kZWxfcXVlcyA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgQ0JTX3RzX3ZlcmJhbGFiIH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0pCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX3ZlcmJhbF9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX3ZlcmJhbF9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ192ZXJiYWxfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCByZWdfdmVyYmFsX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX3ZlcmJhbF9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX3ZlcmJhbF9tb2RlbCA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgQ0JTX3RzX3ZlcmJhbGFiIH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0gKyBhZ2UgKyBhZ2VfZmlyc3RfcGhvbmUgKyBkaXN0X2RhaWx5KQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ192ZXJiYWxfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfdmVyYmFsX21vZGVsJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ192ZXJiYWxfbW9kZWwkZml0dGVkLnZhbHVlcywgcmVnX3ZlcmJhbF9tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfdmVyYmFsX21vZGVsKQpgYGAKCiMjIyAoNCkgQ29uY2VudHJhdGlvbgoKLSBjcml0ZXJpb246IENCUyBDb25jZW50cmF0aW9uIENvbXBvc2l0ZSBTY29yZQotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX2Nvbl9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBDQlNfdHNfY29uIH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0pCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX2Nvbl9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX2Nvbl9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19jb25fbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCByZWdfY29uX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX2Nvbl9tb2RlbF9xdWVzKQoKIyB0YWJfbW9kZWwocmVnX2Nvbl9tb2RlbF9xdWVzLCBzaG93LnN0ZCA9IFQsIHNob3cuc3RhdCA9IFQsIHNob3cuZnN0YXQgPSBUKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX2Nvbl9tb2RlbCA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgQ0JTX3RzX2NvbiB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfY29uX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX2Nvbl9tb2RlbCRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKIyBob21vZ2VuZWl0eSAKcGxvdChyZWdfY29uX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19jb25fbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX2Nvbl9tb2RlbCkKYGBgCgojIyMgSW5kdiBUYXNrcwoKIyMjIyBTUwoKLSBjcml0ZXJpb246IENCUyBTUwotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX1NTX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9TUyB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19TU19tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX1NTX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX1NTX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX1NTX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX1NTX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfU1NfbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9TUyB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfU1NfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfU1NfbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX1NTX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19TU19tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfU1NfbW9kZWwpCmBgYAoKCiMjIyMgTUwKCi0gY3JpdGVyaW9uOiBDQlMgTUwKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19NTF9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfTUwgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfTUxfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19NTF9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19NTF9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIHJlZ19NTF9tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19NTF9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX01MX21vZGVsIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfTUwgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX01MX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX01MX21vZGVsJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19NTF9tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfTUxfbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX01MX21vZGVsKQpgYGAKCiMjIyMgVFMKCi0gY3JpdGVyaW9uOiBDQlMgVFMKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19UU19tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfVFMgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfVFNfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19UU19tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19UU19tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIHJlZ19UU19tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19UU19tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX1RTX21vZGVsIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfVFMgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX1RTX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX1RTX21vZGVsJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19UU19tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfVFNfbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX1RTX21vZGVsKQpgYGAKCiMjIyMgUEEKCi0gY3JpdGVyaW9uOiBDQlMgUEEKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19QQV9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfUEEgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfUEFfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19QQV9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19QQV9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIHJlZ19QQV9tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19QQV9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX1BBX21vZGVsIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfUEEgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX1BBX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX1BBX21vZGVsJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19QQV9tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfUEFfbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX1BBX21vZGVsKQpgYGAKCiMjIyMgU1AKCi0gY3JpdGVyaW9uOiBDQlMgU1AKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19TUF9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfU1AgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfU1BfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19TUF9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19TUF9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIHJlZ19TUF9tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19TUF9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX1NQX21vZGVsIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfU1AgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX1NQX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX1NQX21vZGVsJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19TUF9tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfU1BfbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX1NQX21vZGVsKQpgYGAKCiMjIyMgUgoKLSBjcml0ZXJpb246IENCUyBSCi0gcHJlZGljdG9yczogTk1QUTsgTVBJUTogSSwgU0ksIFZGTzsgU0FEOiBEZXAuLCBFQSwgQSwgRGlzdC4KICAtIGV4cGxvcmU6IGFnZSwgYWdlIG9mIGZpcnN0IHBob25lLCBkaXN0cmFjdGVkIGJ5IHBob25lCgpRdWVzCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfUl9tb2RlbF9xdWVzIDwtIAogIGxtKGRhdGEgPSBtYWluX2FsbF9kYXRhX2ZpbmFsLCAKICAgICBaU2NvcmVfUiB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19SX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfUl9tb2RlbF9xdWVzJHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgojIGhvbW9nZW5laXR5IApwbG90KHJlZ19SX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX1JfbW9kZWxfcXVlcyRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfUl9tb2RlbF9xdWVzKQpgYGAKCkFsbApgYGB7cn0KIyBydW4gbW9kZWwKcmVnX1JfbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9SIH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0gKyBhZ2UgKyBhZ2VfZmlyc3RfcGhvbmUgKyBkaXN0X2RhaWx5KQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19SX21vZGVsJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX1JfbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX1JfbW9kZWwkZml0dGVkLnZhbHVlcywgcmVnX1JfbW9kZWwkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX1JfbW9kZWwpCmBgYAoKIyMjIyBQCgotIGNyaXRlcmlvbjogQ0JTIFAKLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19QX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9QIH4gTk1QUV9zdW0gKyBNUElRX3N1bSArIE1QSVFfU0lfc3VtICsgTVBJUV9WRk9fc3VtICsgU0FEX2RlcF9zdW0gKyBTQURfZWFfc3VtICsgU0FEX2FjY2Vzc19zdW0gKyBTQURfZGlzdF9zdW0pCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX1BfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19QX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX1BfbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCByZWdfUF9tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19QX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfUF9tb2RlbCA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgWlNjb3JlX1AgfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX1BfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfUF9tb2RlbCRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKIyBob21vZ2VuZWl0eSAKcGxvdChyZWdfUF9tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfUF9tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfUF9tb2RlbCkKYGBgCgojIyMjIE9PTwoKLSBjcml0ZXJpb246IENCUyBPT08KLSBwcmVkaWN0b3JzOiBOTVBROyBNUElROiBJLCBTSSwgVkZPOyBTQUQ6IERlcC4sIEVBLCBBLCBEaXN0LgogIC0gZXhwbG9yZTogYWdlLCBhZ2Ugb2YgZmlyc3QgcGhvbmUsIGRpc3RyYWN0ZWQgYnkgcGhvbmUKClF1ZXMKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19PT09fbW9kZWxfcXVlcyA8LSAKICBsbShkYXRhID0gbWFpbl9hbGxfZGF0YV9maW5hbCwgCiAgICAgWlNjb3JlX09PTyB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19PT09fbW9kZWxfcXVlcyRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19PT09fbW9kZWxfcXVlcyRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKIyBob21vZ2VuZWl0eSAKcGxvdChyZWdfT09PX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX09PT19tb2RlbF9xdWVzJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19PT09fbW9kZWxfcXVlcykKYGBgCgpBbGwKYGBge3J9CiMgcnVuIG1vZGVsCnJlZ19PT09fbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9PT08gfiBOTVBRX3N1bSArIE1QSVFfc3VtICsgTVBJUV9TSV9zdW0gKyBNUElRX1ZGT19zdW0gKyBTQURfZGVwX3N1bSArIFNBRF9lYV9zdW0gKyBTQURfYWNjZXNzX3N1bSArIFNBRF9kaXN0X3N1bSArIGFnZSArIGFnZV9maXJzdF9waG9uZSArIGRpc3RfZGFpbHkpCgojIyBBc3N1bXB0aW9ucwojIHNob3cgaGlzdCBvZiByZXNpZHVhbHMKcXBsb3QocmVnX09PT19tb2RlbCRmaXR0ZWQudmFsdWVzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4wMikgKyB0aGVtZV9jbGFzc2ljKCkKCiMgY2hlY2sgbGluZWFyaXR5CmdncXFwbG90KHJlZ19PT09fbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX09PT19tb2RlbCRmaXR0ZWQudmFsdWVzLCByZWdfT09PX21vZGVsJHJlc2lkdWFscykgKyBhYmxpbmUoMCwwKSArIGFibGluZSh2ID0gMCkKCiMjIEludGVycHJldCBtb2RlbApzdW1tYXJ5KHJlZ19PT09fbW9kZWwpCmBgYAoKIyMjIyBGTQoKLSBjcml0ZXJpb246IENCUyBGTQotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX0ZNX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9GTSB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19GTV9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX0ZNX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0ZNX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX0ZNX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX0ZNX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfRk1fbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9GTSB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfRk1fbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfRk1fbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0ZNX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19GTV9tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfRk1fbW9kZWwpCmBgYAoKIyMjIyBEVAoKLSBjcml0ZXJpb246IENCUyBEVAotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX0RUX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9EVCB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19EVF9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX0RUX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0RUX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX0RUX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX0RUX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfRFRfbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9EVCB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfRFRfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfRFRfbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0RUX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19EVF9tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfRFRfbW9kZWwpCmBgYAoKIyMjIyBHUgoKLSBjcml0ZXJpb246IENCUyBHUgotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX0dSX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9HUiB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19HUl9tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX0dSX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0dSX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX0dSX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX0dSX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfR1JfbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9HUiB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfR1JfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfR1JfbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0dSX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19HUl9tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfR1JfbW9kZWwpCmBgYAoKIyMjIyBEUwoKLSBjcml0ZXJpb246IENCUyBEUwotIHByZWRpY3RvcnM6IE5NUFE7IE1QSVE6IEksIFNJLCBWRk87IFNBRDogRGVwLiwgRUEsIEEsIERpc3QuCiAgLSBleHBsb3JlOiBhZ2UsIGFnZSBvZiBmaXJzdCBwaG9uZSwgZGlzdHJhY3RlZCBieSBwaG9uZQoKUXVlcwpgYGB7cn0KIyBydW4gbW9kZWwKcmVnX0RTX21vZGVsX3F1ZXMgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9EUyB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtKQoKIyMgQXNzdW1wdGlvbnMKIyBzaG93IGhpc3Qgb2YgcmVzaWR1YWxzCnFwbG90KHJlZ19EU19tb2RlbF9xdWVzJGZpdHRlZC52YWx1ZXMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjAyKSArIHRoZW1lX2NsYXNzaWMoKQoKIyBjaGVjayBsaW5lYXJpdHkKZ2dxcXBsb3QocmVnX0RTX21vZGVsX3F1ZXMkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0RTX21vZGVsX3F1ZXMkZml0dGVkLnZhbHVlcywgcmVnX0RTX21vZGVsX3F1ZXMkcmVzaWR1YWxzKSArIGFibGluZSgwLDApICsgYWJsaW5lKHYgPSAwKQoKIyMgSW50ZXJwcmV0IG1vZGVsCnN1bW1hcnkocmVnX0RTX21vZGVsX3F1ZXMpCmBgYAoKQWxsCmBgYHtyfQojIHJ1biBtb2RlbApyZWdfRFNfbW9kZWwgPC0gCiAgbG0oZGF0YSA9IG1haW5fYWxsX2RhdGFfZmluYWwsIAogICAgIFpTY29yZV9EUyB+IE5NUFFfc3VtICsgTVBJUV9zdW0gKyBNUElRX1NJX3N1bSArIE1QSVFfVkZPX3N1bSArIFNBRF9kZXBfc3VtICsgU0FEX2VhX3N1bSArIFNBRF9hY2Nlc3Nfc3VtICsgU0FEX2Rpc3Rfc3VtICsgYWdlICsgYWdlX2ZpcnN0X3Bob25lICsgZGlzdF9kYWlseSkKCiMjIEFzc3VtcHRpb25zCiMgc2hvdyBoaXN0IG9mIHJlc2lkdWFscwpxcGxvdChyZWdfRFNfbW9kZWwkZml0dGVkLnZhbHVlcywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMDIpICsgdGhlbWVfY2xhc3NpYygpCgojIGNoZWNrIGxpbmVhcml0eQpnZ3FxcGxvdChyZWdfRFNfbW9kZWwkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCiMgaG9tb2dlbmVpdHkgCnBsb3QocmVnX0RTX21vZGVsJGZpdHRlZC52YWx1ZXMsIHJlZ19EU19tb2RlbCRyZXNpZHVhbHMpICsgYWJsaW5lKDAsMCkgKyBhYmxpbmUodiA9IDApCgojIyBJbnRlcnByZXQgbW9kZWwKc3VtbWFyeShyZWdfRFNfbW9kZWwpCmBgYAoKCgoKCjwhLS0gIyMgUmVncmVzc2lvbihzKSAtLT4KCjwhLS0gU2luY2UgdGhlcmUgd2FzIGEgc2lnIE1FIG9mIGxvY2F0aW9uIG9uIFZlcmJhbCBBYmlsaXR5IHBlcmZvcm1hbmNlLCB3ZSBjb21wbGV0ZWQgYSByZWdyZXNzaW9uIHRvIGFzc2VzcyB3aGljaCwgaWYgYW55LCBDQlMgdGFzayB3YXMgcmVzcG9uc2libGUgZm9yIHRoZSB2YXJpYW5jZSBpbiB0aGUgQ0JTX292ZXJhbGwgY29tcG9zaXRlIHNjb3JlLiBUaGlzIHdhcyBkb25lIGJ5IGNvbXBsZXRpbmcgYSByZWdyZXNzaW9uIHVzaW5nOiBjcml0ZXJpb24gPSBDQlNfb3ZlcmFsbCBzY29yZTsgcHJlZGljdG9yczogei1zY29yZWQgc2NvcmVzIGZvciBlYWNoIENCUyB0YXNrICgxMiB0b3RhbCkuIC0tPgoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBnZXQgZGF0YQpyZWdfZGF0YV9hbGwgPC0gbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgQ0JTX292ZXJhbGwsIFpTY29yZV9EUywgWlNjb3JlX0RULCBaU2NvcmVfRk0sIFpTY29yZV9HUiwgWlNjb3JlX01MLCBaU2NvcmVfT09PLCBaU2NvcmVfUEEsIFpTY29yZV9QLCBaU2NvcmVfUiwgWlNjb3JlX1NQLCBaU2NvcmVfU1MsIFpTY29yZV9UUykKCnJlZ19kYXRhIDwtIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIHNlbGVjdChjb25kaXRpb24sIENCU190c192ZXJiYWxhYiwgWlNjb3JlX0RTLCBaU2NvcmVfR1IpCgojIE11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIApDQlNfZml0X2FsbCA8LSBsbShDQlNfb3ZlcmFsbCB+IFpTY29yZV9EUyArIFpTY29yZV9EVCArIFpTY29yZV9GTSArIFpTY29yZV9HUiArIFpTY29yZV9NTCArIFpTY29yZV9PT08gKyBaU2NvcmVfUEEgKyBaU2NvcmVfUCArIFpTY29yZV9SICsgWlNjb3JlX1NQICsgWlNjb3JlX1NTICsgWlNjb3JlX1RTLCBkYXRhID0gcmVnX2RhdGFfYWxsKQpzdW1tYXJ5KENCU19maXRfYWxsKSAjIHNob3cgcmVzdWx0cwoKQ0JTX2ZpdCA8LSBsbShDQlNfdHNfdmVyYmFsYWIgfiBaU2NvcmVfRFMgKyBaU2NvcmVfR1IsIGRhdGEgPSByZWdfZGF0YSkKc3VtbWFyeShDQlNfZml0KSAjIHNob3cgcmVzdWx0cwoKIyBkaWFnbm9zdGljIHBsb3RzCmxheW91dChtYXRyaXgoYygxLDIsMyw0KSwyLDIpKSAjIG9wdGlvbmFsIDQgZ3JhcGhzL3BhZ2UKcGxvdChDQlNfZml0KQoKIy0tIFJ1biBtb2RlcmF0aW9uIGFuYWx5c2lzIHVzaW5nIG1vZGVyYXRpb24xKCkgaW4gdGhlIE1lTW9Cb290UiBwYWNrYWdlCiAgIyBub3RlOiBtb2RlcmF0b3IgKG0pIGFuZCBJViAoeCkgYXJlIHN3aXRjaGVkIHNpbmNlIG1vZGVyYXRvciBpcyBjb250aW51b3VzICYgSVYgaXMgY2F0ZWdvcmljYWwgaW4gcHJlc2VudCBzdHVkeQogICAgIyB3YXMgY2hlY2tlZCB2cy4gbWFudWFsIGxtKCkgdmVyc2lvbiAmIGNvbXB1dGVzIGV4YWN0IHNhbWUgdmFsdWVzCiAgIyBub3RlOiBhbmFseXNpcyBtZWFuLWNlbnRlcnMgdGhlIGNvbnRpbnVvdXMgdmFyIGF1dG9tYXRpY2FsbHkKICAjIG5vdGU6IHRoaXMgYW5hbHlzaXMgd2lsbCBjb21wYXJlOiBkZXNrIHZzLiBwb2NrZXQvYmFnJiAgZGVzayB2cy4gb3V0c2lkZSBpbml0aWFsbHkgCiAgICAjIHRoZW4sIHRoZSBkYXRhIGlzIHJlLW9yZ2FuaXplZCB0byBjb21wYXJlOiBwb2NrZXQvYmFnIHZzLiBvdXRzaWRlIAogICAgIyB0aGlzIHdhcyBzYXZlZCBpbnRvIDIgc2VwYXJhdGUgYW5hbHlzZXMsIGJ1dCBtb3N0IG91dHB1dCBpcyBjb21tb24gYi93IHRoZW0KCiMjIFNNQVJUUEhPTkUgREVQRU5ERU5DRSAjIwojIHJ1biAmIHNhdmUgYW5hbHlzaXMgdG8gdmlldyBjb21wb25lbnRzIHNlcGFyYXRlbHkgCiMgZm9yIGRlc2sgMXN0CgpsaWJyYXJ5KE1lTW9Cb290UikKIyBtb2RfU0FEX2RlcDEgPC0gIAp0ZXN0IDwtICAgbW9kZXJhdGlvbjEoeSA9ICJDQlNfb3ZlcmFsbCIsICMgRFYKICAgICAgICAgICAgICB4ID0gIlpTY29yZV9EVCIsICMgY29udGludW91cyB2YXIKICAgICAgICAgICAgICBtID0gImNvbmRpdGlvbiIsICMgY2F0ZWdvcmljYWwgdmFyIC0tIHdpbGwgc2hvdyBzaW1wbGUgc2xvcGVzCiAgICAgICAgICAgICAgY3ZzID0gTlVMTCwgIyBjb3ZhcmlhdGVzIChpZiBhbnkpCiAgICAgICAgICAgICAgZGYgPSByZWdfZGF0YV9hbGwsICMgZGF0YSBmcmFtZSBvZiBjb2x1bW5zCiAgICAgICAgICAgICAgd2l0aF9vdXQgPSBUKSAjIHJlbW92ZSBvdXRsaWVycwoKIyAjIE11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIC0tZGVzawojIENCU19maXRfZGVzayA8LSBsbShDQlNfb3ZlcmFsbCB+IFpTY29yZV9EUyArIFpTY29yZV9EVCArIFpTY29yZV9GTSArIFpTY29yZV9HUiArIFpTY29yZV9NTCArIFpTY29yZV9PT08gKyBaU2NvcmVfUEEgKyBaU2NvcmVfUCArIFpTY29yZV9SICsgWlNjb3JlX1NQICsgWlNjb3JlX1NTICsgWlNjb3JlX1RTLCBkYXRhID0gcmVnX2RhdGEgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKSkKIyBzdW1tYXJ5KENCU19maXRfZGVzaykgIyBzaG93IHJlc3VsdHMKIyAKIyAjIE11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIC0tcG9ja2V0L2JhZwojIENCU19maXRfcGIgPC0gbG0oQ0JTX292ZXJhbGwgfiBaU2NvcmVfRFMgKyBaU2NvcmVfRFQgKyBaU2NvcmVfRk0gKyBaU2NvcmVfR1IgKyBaU2NvcmVfTUwgKyBaU2NvcmVfT09PICsgWlNjb3JlX1BBICsgWlNjb3JlX1AgKyBaU2NvcmVfUiArIFpTY29yZV9TUCArIFpTY29yZV9TUyArIFpTY29yZV9UUywgZGF0YSA9IHJlZ19kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJwb2NrZXQvYmFnIikpCiMgc3VtbWFyeShDQlNfZml0X3BiKSAjIHNob3cgcmVzdWx0cwojIAojICMgTXVsdGlwbGUgTGluZWFyIFJlZ3Jlc3Npb24gLS1vdXRzaWRlCiMgQ0JTX2ZpdF9vdXQgPC0gbG0oQ0JTX292ZXJhbGwgfiBaU2NvcmVfRFMgKyBaU2NvcmVfRFQgKyBaU2NvcmVfRk0gKyBaU2NvcmVfR1IgKyBaU2NvcmVfTUwgKyBaU2NvcmVfT09PICsgWlNjb3JlX1BBICsgWlNjb3JlX1AgKyBaU2NvcmVfUiArIFpTY29yZV9TUCArIFpTY29yZV9TUyArIFpTY29yZV9UUywgZGF0YSA9IHJlZ19kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJvdXRzaWRlIikpCiMgc3VtbWFyeShDQlNfZml0X291dCkgIyBzaG93IHJlc3VsdHMKCnN1bW1hcnkodGVzdCRtb2RlbDEpCgpzdW1tYXJ5KENCU19maXQpCiMgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gImRlc2siKQoKIyBnZ2JldHdlZW5zdGF0cyhyZWdfZGF0YVssYygxLCAzKV0sCiMgICAgICAgICAgICAgICAgY29uZGl0aW9uLCAKIyAgICAgICAgICAgICAgICBhbGxfb2YoWlJhd19EUyksIAojICAgICAgICAgICAgICAgIG91dGxpZXIudGFnZ2luZyA9IEYsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksICwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBPdmVyYWxsICYgU01hcnRwaG9uZSBMb2NhdGlvbiAtIE91dGxpZXJzIFJlbW92ZWQiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKYGBgCgojIEV4cGxvcmF0b3J5IEFuYWx5c2VzCgojIyBGQTogQ0JTIFRhc2tzCgpFeHBsb3JhdG9yeSBGQSB3aXRoIGFsbCAxMiBDQlMgdGFza3MgCgojIyMjIENoZWNraW5nIHRoZSBEYXRhCgpUbyBwZXJmb3JtIHRoZSBmYWN0b3IgYW5hbHlzaXMsIHdlIGZpcnN0IGV4YW1pbmVkIHRoZSBkYXRhIGZvciAoMSkgbWlzc2luZyBkYXRhLCAoMikgY29ycmVsYXRpb25zIGJldHdlZW4gdGhlIGl0ZW1zLCBhbmQgKDMpIHRoZSBmYWN0b3JhYmlsaXR5IG9mIHRoZSBkYXRhLgoKIyMjIyMgMS4gTWlzc2luZyBEYXRhCgotICAgRnJvbSB0aGUgZGVzY3JpcHRpdmVzIHRhYmxlLCBpdCBzZWVtcyB0aGF0IHRoZXJlIGlzIG5vIG1pc3Npbmcgb3IgaW5jb21wbGV0ZSBkYXRhLiBUaGlzIHdhcyBjb25maXJtZWQgYnkgZmluZGluZyB0aGUgY29tcGxldGUgY2FzZXMsIHdoaWNoIHdlcmUgZXF1YWwgdG8gdGhlIHRvdGFsIHNhbXBsZSBzaXplIChpLmUuIGByIGZhX2NvbXBsZXRlYCkuIFRoZXJlZm9yZSwgbm8gZGF0YSB3YXMgcmVtb3ZlZCBkdWUgdG8gbWlzc2luZyB2YWx1ZXMgZm9yIHRoaXMgYW5hbHlzaXMgKihzZWUgZGVzY3JpcHRpdmVzIHRhYmxlIGJlbG93KSouCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKIyBnZXQgYSBkYXRhIGZyYW1lIHdpdGggdGhlIDEyIENCUyBaLXNjb3JlcyBmb3IgdGhlIEZBCmZhX2RhdGEgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbCAlPiUgZHBseXI6OnNlbGVjdChjb250YWlucygiWlNjb3JlXyIpKSAlPiUgICMgdXNlICJjb250YWlucygpIiB0byB1c2UgYSBzdHJpbmcgdG8gc2VsZWN0IGJhc2VkIG9uIHRoYXQgcGF0dGVybgogICMgcmUgb3JkZXIgdmFyaWFibGVzIHRvIG1hdGNoIEhhbXBzaGlyZSBldCBhbC4gKDIwMTIpIGZvciBlYXNpZXIgY29tcGFyaXNvbi4uLiAKICBzZWxlY3QoWlNjb3JlX1NTLCBaU2NvcmVfTUwsIFpTY29yZV9UUywgWlNjb3JlX1BBLCBaU2NvcmVfU1AsIFpTY29yZV9SLCBaU2NvcmVfUCwgWlNjb3JlX09PTywgWlNjb3JlX0ZNLCBaU2NvcmVfRFQsIFpTY29yZV9HUiwgWlNjb3JlX0RTKQoKCiMgZmluZCB0aGUgdG90YWwgY29tcGxldGUgY2FzZXMgdG8gZmluZCBhbnkgbWlzc2luZyBkYXRhIGZyb20gdGhlIGRhdGEgLS0gYW55IHBhcnRpY2lwYW50IHdpdGggbWlzc2luZyBkYXRhIG11c3QgYmUgcmVtb3ZlZApmYV9jb21wbGV0ZSA9IHN1bShjb21wbGV0ZS5jYXNlcyhmYV9kYXRhKSkKCiMgU2hvdyBkZXNjcmlwdGl2ZXMgZm9yIHRoZSBmYWN0b3IgYW5hbHlzaXMgZGF0YQpmYV9kZXMgPSBkZXNjcmliZShmYV9kYXRhKQoKIyBzaG93IGRlc2NyaXB0aXZlcyBpbiBrYWJsZSB0YWJsZSAKa2FibGUoZGVzY3JpYmUuYnkoZmFfZGF0YSksIGNhcHRpb24gPSAiRGVzY3JpcHRpdmVzIGZvciAxMiBDQlMgVGFza3MiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJywgZXNjYXBlID0gRkFMU0UpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpgYGAKCiMjIyMjIDIuIENvcnJlbGF0aW9ucyBiZXR3ZWVuIHRoZSBJdGVtcwoKLSAgIFRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbiB0aGUgaXRlbXMgd2VyZSBleGFtaW5lZCB0byBkZXRlcm1pbmUgaWYgdGhleSB3ZXJlIGVpdGhlciBub3QgaGlnaCBlbm91Z2ggKGkuZS4sIHIgXDwgLjMwKSBvciB0b28gaGlnaCAoaS5lLiwgciBcPiAuODApLgoKICAgIC0gICBUaGUgY29ycmVsYXRpb25zIGZvciB0aGUgMTIgdGFza3MgaW4gdGhlIENCUyByYW5nZWQgZnJvbSAqciooYHIgZmFfY29yJG5bMSwxXSAtIDJgKSBgciByb3VuZChtaW4oZmFfY29yJHJbd2hpY2goZmFfY29yJHIgPCAxKV0pLCAzKWAgdG8gKnIqKGByIGZhX2NvciRuWzEsMV0gLSAyYCkgYHIgcm91bmQobWF4KGZhX2NvciRyW3doaWNoKGZhX2NvciRyIDwgMSldKSwgMylgLCAqcCogYHIgcF9yb3VuZChtYXgoZmFfY29yJFBbd2hpY2goIWlzLm5hKGZhX2NvciRQKSldKSlgLgogICAgLSAgIEEgdmlzdWFsIGluc3BlY3Rpb24gb2YgdGhlIGNvcnJlbGF0aW9ucyBzaG93ZWQgdGhhdCB0aHcgdGFza3MgZGlkIHNob3cgbG93L3dlYWtlciBjb3JyZWxhdGlvbnMgdGhyb3VnaG91dCwgd2l0aCBvbmx5IDMgY29ycmVsYXRpb25zIGFib3ZlIC4zMC4gVGhlc2Ugd2lsbCBiZSBrZXB0IGluIG1pbmQgd2hlbiBjb21wbGV0aW5nIHRoZSBGQS4gVGhlcmUgd2VyZSBubyBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRvbyBtYW55IGhpZ2ggY29ycmVhdGlvbnMgZm9yIGFueSBpdGVtcy4KCi0gICBUbyBjaGVjayBmb3IgbXVsdGljb2xsaW5lYXJpdHksIHRoZSBkZXRlcm1pbmFudCBvZiB0aGUgY29ycmVsYXRpb24gbWF0cml4IHdhcyBjYWxjdWxhdGVkLiBUaGUgZGV0ZXJtaW5hbnQgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgbmVjZXNzYXJ5IHZhbHVlIG9mIDAuMDAwMDEgKGkuZS4sIGByIHJvdW5kKGZhX2RldCwgNSlgKSwgc28sIHRoZXJlIHdhcyBubyBpc3N1ZXMgd2l0aCBtdWx0aWNvbGxpbmVhcml0eSAoRmllbGQgZXQgYWwuLCAyMDEyKS4KCi0gICBUaGVyZWZvcmUsIGFsbCBpdGVtcyBpbiB0aGUgQ0JTIGNvcnJlbGF0ZWQgfnJlYXNvbmFibHkgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRob3V0IGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIGNvcnJlbGF0aW9uIHNvIG5vIGl0ZW1zIHdlcmUgcmVtb3ZlZCBhdCB0aGlzIHN0YWdlLgoKYGBge3J9CgojIGdldCB0aGUgcGVhcnNvbiBjb3JyZWxhdGlvbnMgYmV0d2VlbiBhbGwgaXRlbXMgKGFuZCBjb3JyZXNwb25kaW5nIHAtdmFsdWVzKQpmYV9jb3IgPSByY29ycihhcy5tYXRyaXgoZmFfZGF0YSksIHR5cGUgPSAicGVhcnNvbiIpIAoKIyBtYWtlIGEgdGFibGUgd2l0aCB0aGUgZGF0YSB0byBkaXNwbGF5IGl0IGJldHRlcgpmYV9jb3JfdCA9IGFzLmRhdGEuZnJhbWUoZmFfY29yJHIpCiAgIyBpbmNsdWRlIG9ubHkgdGhlIGxvd2VyIHRyaWFuZ2xlIG9mIHRoZSBkYXRhCiAgZmFfY29yX3RbdXBwZXIudHJpKGZhX2Nvcl90KV0gPSBOQQogIAojIGZpbmQgdGhlIGRldGVybWluYW50IG9mIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXgKZmFfZGV0ID0gZGV0KGZhX2NvciRyKQoKIyBQcmludCB0YWJsZSB1c2luZyBrYWJsZQogICMgbWFrZSBhbnkgTkFzIGFwcGVhciBhcyBibGFuayB3aXRoaW4ga2FibGUKICBvcHRzID0gb3B0aW9ucyhrbml0ci5rYWJsZS5OQSA9ICIiKQogICMgcHJpbnQgdGFibGUKICBrYWJsZShmYV9jb3JfdCwgY2FwdGlvbiA9ICJQZWFyc29uIENvcnJlbGF0aW9ucyBiZXR3ZWVuIEl0ZW1zIGluIHRoZSBTQUQiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJywgZXNjYXBlID0gRkFMU0UpICU+JQogICAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JQogICAgYWRkX2Zvb3Rub3RlKCJwIDwgLjAwMSIsIG5vdGF0aW9uID0gImFscGhhYmV0IikgJT4lIAogICAga2FibGVfY2xhc3NpYygpCiAgICAjIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG9wdGlvbnMgc28gdGhhdCAiTkEiIHNob3dzIHVwIGFnYWluCiAgICBvcHRpb25zKG9wdHMpCgpgYGAKCi0gICBBbm90aGVyIHdheSB0byB2aXN1YWxpemUgdGhpcyBpcyB1c2luZyBhIFNjYXR0ZXIgUGxvdCBNYXRyaXgKCiAgICAtICAgVGhpcyBzaG93czogKDEpIGEgc2NhdHRlciBwbG90IGJlbGxvdyB0aGUgbG93ZXIgZGlhZ29uYWwsIHdpdGggYSBsaW5lIG9mIGJlc3QgZml0IChyZWQpOyAoMikgYSBoaXN0b3JncmFtIGFuZCBkZW5zaXR5IHBsb3Qgb2YgdGhlIGl0ZW0gb24gdGhlIGRpYWdvbmFsOyBhbmQgKDMpIHRoZSBjb3JyZWxhdGlvbiB2YWx1ZXMgKHBlYXJzb24gcikgYWJvdmUgdGhlIGRpYWdvbmFsLCB3aXRoIGNvcnJlc3BvbmRpbmcgc2lnbmlmaWNhbmNlIHNob3duIHdpdGggYXN0ZXJpc2tzLiBUaGUgeC1heGlzIGluIGVhY2ggc2NhdHRlciBwbG90IHJlcHJlc2VudHMgdGhlIGNvbHVtbiB2YXJpYWJsZSBhbmQgdGhlIHktYXhpcyB0aGUgcm93IHZhcmlhYmxlLgoKYGBge3J9CiMgc2hvdyBhIFNQTE9NIChTY2F0dGVyIFBsb3QgTWF0cml4KSBvZiB0aGUgRGF0YSAKcGFpcnMucGFuZWxzKGZhX2RhdGEsIHBjaCA9ICIuIiwgZGVuc2l0eSA9IFRSVUUsIGVsbGlwc2VzID0gRkFMU0UsIGxtID0gVFJVRSwgZGlnaXRzID0gMiwgbWV0aG9kID0gInBlYXJzb24iLCBqaWdnbGUgPSBUUlVFLCBmYWN0b3IgPSAxLCBoaXN0LmNvbCA9ICJjYWRldGJsdWUzIiwgc3RhcnMgPSBUUlVFLCBnYXAgPSAuNSwgdmVyT2RkID0gVFJVRSwgaG9yT2RkID0gVFJVRSwgbWFpbiA9ICJTY2F0dGVyIFBsb3QgTWF0cml4IG9mIEl0ZW1zIGluIHRoZSBTQUQiKQoKYGBgCgojIyMjIyAzLiBGYWN0b3JhYmlsaXR5IG9mIHRoZSBEYXRhCgotICAgVGhpcyBhc3Nlc3NlZCBpZiB0aGVyZSB3ZXJlIG1lYW5pbmdmdWwgbGF0ZW50IGZhY3RvcnMgdG8gYmUgZm91bmQgd2l0aGluIHRoZSBkYXRhLCB3aGljaCB3YXMgYXNzZXNzZWQgaW4gdHdvIHdheXM6IEJhcmxldHQncyB0ZXN0IG9mIHNwaGVyaWNpdHkgZm9yIGNvcnJlbGF0aW9uIGFkZXF1YWN5IGFuZCB0aGUgS2Fpc2VyLU1leWVyLU9sa2luIG1lYXN1cmUgb2Ygc2FtcGxpbmcgYWRlcXVhY3kuCgogICAgLSAgICoqQmFybGV0dCdzIHRlc3Qgb2Ygc3BoZXJpY2l0eSBmb3IgY29ycmVsYXRpb24gYWRlcXVhY3kqKjoKCiAgICAgICAgLSAgIFRoaXMgdGVzdCB3YXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCwgd2hpY2ggc3VnZ2VzdGVkIGdvb2QgZmFjdG9yYWJpbGl0eSwgJFxjaGleezJ9JChgciBmYV9iYXJ0ZXN0JGRmYCkgPSBgciByb3VuZChmYV9iYXJ0ZXN0JGNoaXNxLCAyKWAsICpwKiBgciBwX3JvdW5kKGZhX2JhcnRlc3QkcC52YWx1ZSlgCgogICAgLSAgICoqS2Fpc2VyLU1leWVyLU9sa2luIG1lYXN1cmUgb2Ygc2FtcGxpbmcgYWRlcXVhY3kqKjoKCiAgICAgICAgLSAgIFRoaXMgbWVhc3VyZSBzaG93ZWQgYW4gb3ZlcmFsbCBtZWFzdXJlIG9mIHNhbXBsaW5nIGFkZXF1YWN5IChNU0EpIGFuZCBhbiBNU0EgcGVyIGl0ZW0uIFRoZSBvdmVyYWxsIE1TQSB3YXMgaGlnaGVyIHRoYW4gYm90aCB0aGUgbWluaW11bSBhbmQgcHJlZmVycmVkIGNyaXRlcmlhICgwLjUwIGFuZCAwLjYwLCByZXNwZWN0aXZlbHk7IEthaXNlciwgMTk3NCwgSHV0Y2hlc29uICYgU29mcm9uaW91LCAxOTk5KSwgJE1TQV97b3ZlcmFsbH0kID0gYHIgcm91bmQoZmFfa21vJE1TQSwgMilgLiBFYWNoIGl0ZW0ncyBNU0Egd2FzIGFsc28gaGlnaGVyIHRoYW4gdGhlIG1pbmltdW0gYW5kIHByZWZlcnJlZCBjcml0ZXJpYSwgJE1TQV97MS0xM30kID0gYHIgbWluKHJvdW5kKGZhX2ttbyRNU0FpLCAyKSlgIC0gYHIgbWF4KHJvdW5kKGZhX2ttbyRNU0FpLCAyKSlgLiBUaGUgdGFzayBPZGQgT25lIE91dCAoT09PKSB3YXMganVzdCBhYm92ZSB0aGUgbWludW11bSBjdXQtb2ZmICgnciByb3VuZChmYV9rbW8kTVNBaVs2XSwgMyknKSBhbmQgdGhlcmVmb3JlIHdhcyB3YXRjaGVkIGNhcmVmdWxseSBhZnRlci4gCgotICAgVGhlcmVmb3JlLCBib3RoIGZhY3RvcmFiaWxpdHkgdGVzdHMgY29uZmlybWVkIHRoYXQgdGhlIHBsYW5uZWQgZmFjdG9yIGFuYWx5c2lzIHdhcyBhcHByb3ByaWF0ZS4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgcnVuIHRoZSBCYXJsZXR0IFRlc3QKZmFfYmFydGVzdCA9IGNvcnRlc3QuYmFydGxldHQoZmFfZGF0YSkKZmFfYmFydGVzdAoKIyBydW4gdGhlIEtNTyAKZmFfa21vID0gS01PKGZhX2RhdGEpCmZhX2ttbwoKYGBgCgojIyMjIEV4dHJhY3QgRmFjdG9ycwoKTm93IHRoYXQgZmFjdG9yYWJpbGl0eSB3YXMgY29uZmlybWVkLCB3ZSBmb3VuZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdC4gVGhpcyB3YXMgZG9uZSB1c2luZzogKDEpIGEgcGFyYWxsZWwgYW5hbHlzaXMgc2NyZWUgcGxvdCwgKDIpIGVpZ2VuIHZhbHVlcyAoaS5lLiwgZnJvbSB0aGUgcGFyYWxsZWwgYW5hbHlzaXMpLCBhbmQgKDMpIHRoZSBmYWN0b3Igc3RydWN0dXJlIGJldHdlZW4gdGhlIHR3byBzb2x1dGlvbnMgKGkuZS4sIHVzaW5nIGZhY3RvciBkaWFncmFtcykuCgojIyMjIyAxLiBQYXJhbGxlbCBBbmFseXNpcyBTY3JlZSBQbG90LgoKVGhpcyBwbG90dGVkIHRoZSBlaWdlbnZhbHVlcyBmcm9tIHRoZSBkYXRhIGFuZCBhIHBhcmFsbGVsIGFuYWx5c2lzIHdoaWNoIGdlbmVyYXRlZCByYW5kb20gY29ycmVsYXRpb24gbWF0cmljZXMuIFRoZSBudW1iZXIgb2YgZmFjdG9ycyBpcyB0aGVuIGRldGVybWluZWQgYnkgY29tcGFyaW5nIHRoZSByZXN1bHRpbmcgZWlnZW52YWx1ZXMgdG8gdGhlIG9ic2VydmVkIGRhdGEsIHRoYXQgaXMsIG9ic2VydmVkIGVpZ2VudmFsdWVzIHRoYXQgd2VyZSBoaWdoZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyByYW5kb20gZWlnZW52YWx1ZXMgd2VyZSBtb3JlIGxpa2VseSB0byBmb3JtIG1lYW5pbmdmdWwgZmFjdG9ycy4KCi0gVGhlIHBhcmFsbGVsIGFuYWx5c2lzIHNjcmVlIHBsb3Qgc2hvd2VkIHRoYXQgdGhlcmUgYXJlIGByIGZhX3BhciRuY29tcGAgYXBwcm9wcmlhdGUgZmFjdG9ycyAoaS5lLiB1c2luZyB0aGUgcHJpbmNpcGFsIGNvbXBvbmVudHMgZXh0cmFjdGlvbiBtZXRob2QpLgotIFRoZSBzY3JlZSBwbG90IGFuZCBlaWdlbiB2YWx1ZXMgc2hvd2VkIHRoYXQgMyBvciA0IHByaW5jaXBsZSBjb21wb25lbnRzIGFyZSB1c2VmdWwuICAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgpmYV9wYXIgPC0gZmEucGFyYWxsZWwoZmFfZGF0YSwgbWFpbiA9ICJQYXJhbGxlbCBBbmFseXNpcyBTY3JlZSBQbG90IGZvciB0aGUgMTIgQ0JTIFRhc2tzIikKYGBgCgojIyMjIyAyLiBFaWdlbiBWYWx1ZXMKCkZvciBhIHNhbXBsZSBzaXplIGdyZWF0ZXIgdGhhbiAyNTAgKGkuZS4sIGByIGZhX2NvbXBsZXRlYCBjb21wbGV0ZSBjYXNlcykgdGhlIGF2ZXJhZ2UgY29tbXVuYWxpdGllcyAoaS5lLiwgdGhlIHByb3BvcnRpb24gb2YgY29tbW9uIHZhcmlhbmNlIHdpdGhpbiB0aGUgaXRlbXMpIGZvciB0aGUgMyBmYWN0b3IgKGByIHJvdW5kKG1lYW4oZmFfdHdvX3YkY29tbXVuYWxpdHkpLCAyKWApIGFuZCA0IGZhY3RvciAoYHIgcm91bmQobWVhbihmYV90aHJlZV92JGNvbW11bmFsaXR5KSwgMilgKSBzb2x1dGlvbnMgd2VyZSB3aWh0aW4gdGhlIGFjY2VwdGFibGUgdmFsdWUgKGkuZS4sIDAuNjA7IEZpZWxkIGV0IGFsLiwgMjAxMikuIFRoZXJlZm9yZSwgS2Fpc2VyJ3MgY3JpdGVyaW9uIChpLmUuLCBhIG1lYW5pbmdmdWwgZmFjdG9yIGhhcyBhbiBlaWdlbiB2YWx1ZSBncmVhdGVyIHRoYW4gMSkgd2FzIHVzZWQgZm9yIHRoZSBlaWdlbiB2YWx1ZXMuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGFsdGhvdWdoIHRoZSBhdmVyYWdlIGNvbW11bmFsaXRpZXMgd2VyZSBub3QgdmVyeSBoaWdoLCB0aGUgc2NyZWUgcGxvdCBhbmQgZmFjdG9yIGRpYWdyYW1zIHdlcmUgdXNlZCB0byBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBmYWN0b3JzLgoKLSAgIFRoZSBlaWdlbiB2YWx1ZXMgKHVucm90YXRlZCBzb2x1dGlvbikgc2hvd2VkIHRocmVlIG1lYW5pbmdmdWwgZmFjdG9ycyAoaS5lLiwgYHIgcm91bmQoZmFfcGFyJHBjLnZhbHVlc1sxOjNdLCAyKWApLCB3aGljaCAqc3VwcG9ydGVkIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24qIGFzIGEgYmV0dGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLgoKYGBge3J9CiMgRWlnZW4gdmFsdWVzCiAgIyB2aWV3IGVpZ2VuIHZhbHVlcyBmcm9tIHRoZSBwYXJhbGxlbCBhbmFseXNpcyBzY3JlZSBwbG90CiAgcm91bmQoZmFfcGFyJHBjLnZhbHVlcywgMykKYGBgCgojIyMjIyAzLiBGYWN0b3IgRGlhZ3JhbXMKCkEgZmFjdG9yIGRpYWdyYW0gZm9yIHRoZSB0d28tLCB0aHJlZS0sIGFuZCBmb3VyLWZhY3RvciBzb2x1dGlvbnMgKHJvdGF0ZWQgc29sdXRpb24pIHdhcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBzb2x1dGlvbiByZXByZXNlbnRzIHRoZSBtb3N0IGludGVycHJldGFibGUgc29sdXRpb24uIFRoZSBkaWFncmFtcyBzaG93IHRoZSBmYWN0b3IgbG9hZGluZ3MgZm9yIGVhY2ggaXRlbSBvbiB0aGUgZ2l2ZW4gZmFjdG9yIGZvciB3aGljaCB0aGV5IGxvYWQgdGhlIGhpZ2hlc3Qgb24uIFRoZSBpdGVtcyB3ZXJlIG9yZGVyZWQgKGkuZS4sIGRlc2NlbmRpbmcpIGJhc2VkIG9uIHRoZXNlIGxvYWRpbmdzLlwKKk5vdGU6IFRoZSBmYWN0b3IgZGlhZ3JhbXMgYXJlIGJhc2VkIG9uIHRoZSByb3RhdGVkIHNvbHV0aW9ucyB0byBiZXR0ZXIgZGlzdHJpYnV0ZSB0aGUgZmFjdG9yIGxvYWRpbmdzKgoKLSAgIFRoZSBmYWN0b3IgZGlhZ3JhbXMgc2hvd2VkIHRoYXQgdGhlIHR3byBmYWN0b3Igc29sdXRpb24gcmVzdWx0ZWQgaW4gbW9zdCBpdGVtcyBsb2FkaW5nIG9udG8gb25seSBvbmUgZmFjdG9yIGFuZCB3YXMgbm90IGVhc2lseSBpbnRlcnByZXRlZC4gVGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIHNob3dlZCBhIDItaXRlbSBmYWN0b3IsIHdoaWNoIGlzIG5vdCBlYXNpbHkgaW50ZXJwcmV0YWJsZSBhcyBpdCBkaWQgbm90IG1lZXQgdGhlIDMtaXRlbSBtaW51bXVtIChDb3N0ZWxsbyAmIE9zYm9ybiwgMjAwNSkuIFRoZSB0aHJlZSBhbmQgZm91ciBmYWN0b3Igc29sdXRpb25zIHNob3dlZCBiZXR0ZXIgZGlzdHJpYnV0aW9ucyBhbmQgd2VyZSBtb3JlIGludGVycHJldGFibGUuIEFmdGVyIHJldmlld2luZyB0aGUgaXRlbXMsIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBwcm92aWRlZCBhIGxvZ2ljYWwgc3RydWN0dXJlIGNvbXBhcmVkIHRvIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24uIFRoYXQgaXMsIHRoZSB0aGlyZCBmYWN0b3IgaW4gdGhlIDMtZmFjdG9yIHNvbHV0aW9uIGdyb3VwZWQgaXRlbXMgNiAmIDcgd2l0aCAxMiAmIDEzLCBob3dldmVyIGl0ZW1zIDYgJiA3IGFzayBhYm91dCBlbW90aW9uYWwgYXNzb2NpYXRpb25zIHdoZXJlYXMgaXRlbXMgMTIgJiAxMyBhcmUgcmVnYXJkaW5nIGF0dGVudGlvbi4gQWx0aG91Z2ggdGhlIGZvdXJ0aCBmYWN0b3IgaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIG9ubHkgY29udGFpbmVkIDIgaXRlbXMsIHRoZXNlIGl0ZW1zIHdlcmUgY29uc2lkZXJlZCB1bmlxdWUgaW4gdGhhdCB0aGV5IGFyZSB0aGUgb25seSBpdGVtcyBpbiB0aGUgU0FEIHdoaWNoIGFza2VkIHBhcnRpY2lwYW50cyBhYm91dCBhdHRlbnRpb24gd2l0aCByZXNwZWN0IHRvIHRoZWlyIHNtYXJ0cGhvbmUuIFRoZXJlZm9yZSwgdGhlICoqZm91ci1mYWN0b3IqKiBzb2x1dGlvbiB3YXMgY2hvc2VuLiAKClRoZXJlZm9yZSwgdGhlICoqdGhyZWUgZmFjdG9yIHNvbHV0aW9uKiogd2FzIGNob3NlbiB0byBiZXR0ZXIgcmVwcmVzZW50IHRoZSBkYXRhLgoKYGBge3IgZmFfZGlhZ3JhbXMsIG91dC53aWR0aD1jKCc1MCUnLCc1MCUnKSwgZmlnLnNob3c9J2hvbGQnfQojIy0tIFZBUklNQVggUk9UQVRJT04gIC0tIAojIHJ1biBhIGZhY3RvciBhbmFseXNpcyB0byBjb21wYXJlIHRoZSB0d28tIGFuZCB0aHJlZS1mYWN0b3Igc29sdXRpb25zIChubyByb3RhdGlvbikKICAjICMgMiBmYWN0b3Igc29sdXRpb24KICBmYV90d29fdiA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gMiwgZm0gPSAicGEiLCByb3RhdGUgPSAidmFyaW1heCIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV90d29fdiRsb2FkaW5ncykgPSBjKCJGYWN0b3IgMSIsICJGYWN0b3IgMiIpCiAgCiAgIyAzIGZhY3RvciBzb2x1dGlvbgogIGZhX3RocmVlX3YgPSBmYShmYV9kYXRhLCBuZmFjdG9ycyA9IDMsIGZtID0gInBhIiwgcm90YXRlID0gInZhcmltYXgiLCBzY29yZXMgPSBUKQogICAgIyBjaGFuZ2UgbmFtZSBpbiBsb2FkaW5ncyBmb3IgY2xhcml0eSB3aGVuIHZpc3VhbGl6aW5nIHRoZSBtb2RlbAogICAgY29sbmFtZXMoZmFfdGhyZWVfdiRsb2FkaW5ncykgPSBjKCJGYWN0b3IgMSIsICJGYWN0b3IgMiIsICJGYWN0b3IgMyIpCiAgCiAgIyA0IGZhY3RvciBzb2x1dGlvbgogIGZhX2ZvdXJfdiA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gNCwgZm0gPSAicGEiLCByb3RhdGUgPSAidmFyaW1heCIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV9mb3VyX3YkbG9hZGluZ3MpID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiLCAiRmFjdG9yIDQiKQogICAgCiAgIyA1IGZhY3RvciBzb2x1dGlvbgogIGZhX2ZpdmVfdiA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gNSwgZm0gPSAicGEiLCByb3RhdGUgPSAidmFyaW1heCIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV9maXZlX3YkbG9hZGluZ3MpID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiLCAiRmFjdG9yIDQiLCAiRmFjdG9yIDUiKQoKIyBGYWN0b3IgRGlhZ3JhbQogICMgMiBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX3R3b192LCBtYWluID0gIlR3byBGYWN0b3IgU29sdXRpb24gZm9yIHRoZSAxMiBDQlMgVGFza3MgKFZhcmltYXggUm90YXRpb24pIiwgc29ydCA9IFRSVUUsIGFkaiA9IDEsIGRpZ2l0cyA9IDIpCgogICMgMyBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX3RocmVlX3YsIG1haW4gPSAiVGhyZWUgRmFjdG9yIFNvbHV0aW9uIGZvciB0aGUgMTIgQ0JTIFRhc2tzIChWYXJpbWF4IFJvdGF0aW9uKSIsIHNvcnQgPSBUUlVFLCBhZGogPSAxLCBkaWdpdHMgPSAyKQogIAogICMgNCBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX2ZvdXJfdiwgbWFpbiA9ICJGb3VyIEZhY3RvciBTb2x1dGlvbiBmb3IgdGhlIDEyIENCUyBUYXNrcyAoVmFyaW1heCBSb3RhdGlvbikiLCBzb3J0ID0gVFJVRSwgYWRqID0gMSwgZGlnaXRzID0gMikKICAKICAjIDQgZmFjdG9yIHNvbHV0aW9uCiAgZmEuZGlhZ3JhbShmYV9maXZlX3YsIG1haW4gPSAiRml2ZSBGYWN0b3IgU29sdXRpb24gZm9yIHRoZSAxMiBDQlMgVGFza3MgKFZhcmltYXggUm90YXRpb24pIiwgc29ydCA9IFRSVUUsIGFkaiA9IDEsIGRpZ2l0cyA9IDIpCmBgYAoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KCiMjLS0gT0JMSU1JTiBST1RBVElPTiAtLSAgCiMgcnVuIGEgZmFjdG9yIGFuYWx5c2lzIHRvIGNvbXBhcmUgdGhlIHR3by0gYW5kIHRocmVlLWZhY3RvciBzb2x1dGlvbnMgKG5vIHJvdGF0aW9uKQogICMgMiBmYWN0b3Igc29sdXRpb24KICBmYV90d29fbyA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gMiwgZm0gPSAicGEiLCByb3RhdGUgPSAib2JsaW1pbiIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV90d29fbyRsb2FkaW5ncykgPSBjKCJGYWN0b3IgMSIsICJGYWN0b3IgMiIpCiAgCiAgIyAzIGZhY3RvciBzb2x1dGlvbgogIGZhX3RocmVlX28gPSBmYShmYV9kYXRhLCBuZmFjdG9ycyA9IDMsIGZtID0gInBhIiwgcm90YXRlID0gIm9ibGltaW4iLCBzY29yZXMgPSBUKQogICAgIyBjaGFuZ2UgbmFtZSBpbiBsb2FkaW5ncyBmb3IgY2xhcml0eSB3aGVuIHZpc3VhbGl6aW5nIHRoZSBtb2RlbAogICAgY29sbmFtZXMoZmFfdGhyZWVfbyRsb2FkaW5ncykgPSBjKCJGYWN0b3IgMSIsICJGYWN0b3IgMiIsICJGYWN0b3IgMyIpCiAgCiAgIyA0IGZhY3RvciBzb2x1dGlvbgogIGZhX2ZvdXJfbyA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gNCwgZm0gPSAicGEiLCByb3RhdGUgPSAib2JsaW1pbiIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV9mb3VyX28kbG9hZGluZ3MpID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiLCAiRmFjdG9yIDQiKQogICAgCiAgIyA1IGZhY3RvciBzb2x1dGlvbgogIGZhX2ZpdmVfbyA9IGZhKGZhX2RhdGEsIG5mYWN0b3JzID0gNSwgZm0gPSAicGEiLCByb3RhdGUgPSAib2JsaW1pbiIsIHNjb3JlcyA9IFQpCiAgICAjIGNoYW5nZSBuYW1lIGluIGxvYWRpbmdzIGZvciBjbGFyaXR5IHdoZW4gdmlzdWFsaXppbmcgdGhlIG1vZGVsCiAgICBjb2xuYW1lcyhmYV9maXZlX28kbG9hZGluZ3MpID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiLCAiRmFjdG9yIDQiLCAiRmFjdG9yIDUiKQoKIyBGYWN0b3IgRGlhZ3JhbQogICMgMiBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX3R3b19vLCBtYWluID0gIlR3byBGYWN0b3IgU29sdXRpb24gZm9yIHRoZSAxMiBDQlMgVGFza3MgKG9ibGltaW4gUm90YXRpb24pIiwgc29ydCA9IFRSVUUsIGFkaiA9IDEsIGRpZ2l0cyA9IDIpCgogICMgMyBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX3RocmVlX28sIG1haW4gPSAiVGhyZWUgRmFjdG9yIFNvbHV0aW9uIGZvciB0aGUgMTIgQ0JTIFRhc2tzIChvYmxpbWluIFJvdGF0aW9uKSIsIHNvcnQgPSBUUlVFLCBhZGogPSAxLCBkaWdpdHMgPSAyKQogIAogICMgNCBmYWN0b3Igc29sdXRpb24KICBmYS5kaWFncmFtKGZhX2ZvdXJfbywgbWFpbiA9ICJGb3VyIEZhY3RvciBTb2x1dGlvbiBmb3IgdGhlIDEyIENCUyBUYXNrcyAob2JsaW1pbiBSb3RhdGlvbikiLCBzb3J0ID0gVFJVRSwgYWRqID0gMSwgZGlnaXRzID0gMikKICAKICAjIDUgZmFjdG9yIHNvbHV0aW9uCiAgZmEuZGlhZ3JhbShmYV9maXZlX28sIG1haW4gPSAiRml2ZSBGYWN0b3IgU29sdXRpb24gZm9yIHRoZSAxMiBDQlMgVGFza3MgKG9ibGltaW4gUm90YXRpb24pIiwgc29ydCA9IFRSVUUsIGFkaiA9IDEsIGRpZ2l0cyA9IDIpCgpgYGAKCiMjIyMgU2ltcGxlIFN0cnVjdHVyZQpUSFJFRSBGQUNUT1IgU09MVVRJT04KCmBgYHtyfQoKIyBSb3RhdGVkIChpLmUuLCB2YXJpbWF4KSBGYWN0b3IgTG9hZGluZ3MgCnByaW50KGZhX3RocmVlX3YkbG9hZGluZ3MsIGN1dG9mZiA9IDAuMzAsIGRpZ2l0cyA9IDMpCgojIG1ha2UgZGF0YSBmcmFtZSB0byBzaG93IHZhbHVlcwpmYV9sb2FkX3RocmVlX3YgPC0gYXMuZGF0YS5mcmFtZShmYV90aHJlZV92JGxvYWRpbmdzWzE6MTIsXSkKCmBgYAoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KCiMgUm90YXRlZCAoaS5lLiwgdmFyaW1heCkgRmFjdG9yIExvYWRpbmdzIApwcmludChmYV90aHJlZV9vJGxvYWRpbmdzLCBjdXRvZmYgPSAwLjMwLCBkaWdpdHMgPSAzKQoKIyBtYWtlIGRhdGEgZnJhbWUgdG8gc2hvdyB2YWx1ZXMKZmFfbG9hZF90aHJlZV9vIDwtIGFzLmRhdGEuZnJhbWUoZmFfdGhyZWVfbyRsb2FkaW5nc1sxOjEyLF0pCgpgYGAKCkZPVVIgRkFDVE9SIFNPTFVUSU9OCgpgYGB7cn0KCiMgUm90YXRlZCAoaS5lLiwgdmFyaW1heCkgRmFjdG9yIExvYWRpbmdzIApwcmludChmYV9mb3VyX3YkbG9hZGluZ3MsIGN1dG9mZiA9IDAuMjAsIGRpZ2l0cyA9IDMpCgojIG1ha2UgZGF0YSBmcmFtZSB0byBzaG93IHZhbHVlcwpmYV9sb2FkX2ZvdXJfdiA8LSBhcy5kYXRhLmZyYW1lKGZhX2ZvdXJfdiRsb2FkaW5nc1sxOjEyLF0pCgpgYGAKCkZJVkUgRkFDVE9SIFNPTFVUSU9OCgpgYGB7cn0KCiMgUm90YXRlZCAoaS5lLiwgdmFyaW1heCkgRmFjdG9yIExvYWRpbmdzIApwcmludChmYV9maXZlX3YkbG9hZGluZ3MsIGN1dG9mZiA9IDAuMjAsIGRpZ2l0cyA9IDMpCgojIG1ha2UgZGF0YSBmcmFtZSB0byBzaG93IHZhbHVlcwpmYV9sb2FkX2ZpdmVfdiA8LSBhcy5kYXRhLmZyYW1lKGZhX2ZpdmVfdiRsb2FkaW5nc1sxOjEyLF0pCgpgYGAKCiMjIE5ldyBGYWN0b3IgU3RydWN0dXJlCgpBbiBhbHRlcm5hdGl2ZSBhbmFseXNpcywgd2hlcmUgdGhlIG5ldyBmYWN0b3Igc3RydWN0dXJlIGlzIHVzZWQgdG8gY29tcGxldGUgQU5PVkEgYW5hbHlzZXMuCgojIyMgQ29tcG9zaXRlIFNjb3JlcwoKRmlyc3QsIGEgbmV3IGRhdGEgZnJhbWUgd2FzIG1hZGUgd2l0aCB0aGUgbmV3IGNvbXBvc2l0ZSBzY29yZXMuIFRoZXNlIHNjb3JlcyB3ZXJlIGNhbGN1bGF0ZWQgYXMgaW4gV2lsZCBldCBhbC4gKDIwMTgpLCB3aGVyZSB0aGUgbm9ybWFsaXplZCBzY29yZXMgZm9yIGVhY2ggQ0JTIHRlc3QgYXJlIHRoZW4gdHJhbnNmb3JtZWQgaW50byAzIHNlcGFyYXRlIGNvbXBvc2l0ZSBzY29yZXMgdXNpbmcgdGhlIGZvcm11bGE6CgokJFkgPSBYIChBcl4rKV5UJCQKd2hlcmU6CgotICRZJCA9ICROJCB4IDMgbWF0cml4IG9mIHRoZSBjb21wb3NpdGUgc2NvcmVzIChTVE0sIFJlYXNvbmluZywgVmVyYmFsKQotICRYJCA9ICROJCB4IDEyIG1hdHJpeCBvZiB0aGUgMTIgQ0JTIHRlc3Qgei1zY29yZXMKLSAkQXIkID0gMTIgeCAzIG1hdHJpeCBvZiB2YXJpbWF4LXJvdGF0ZWQgZmFjdG9yIHdlaWdodHMgLyBsb2FkaW5nIGZyb20gdGhlIHByZXNlbnQgc3R1ZHkgCiAgICAKICAgIC0gc2hvd24gZWFybGllciBpbiB0aGUgW01hdHJpeCBBbHQgU2VjdGlvbl0oI21hdHJpeGFsdCkKClRoZSBmYWN0b3Igc3RydWN0dXJlIHVzZWQgd2FzIGFzIGZvbGxvd3M6CgpgYGB7ciBlY2hvPUZBTFNFfQprYWJsZShmYV9sb2FkX3RocmVlX3YsIGNhcHRpb24gPSAiRmFjdG9yIGxvYWRpbmdzIGZvciAxMiBDQlMgdGVzdCAoTiA9IDIzNykiLCBkaWdpdHMgPSAyLCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCmBgYAoKVGhlcmVmb3JlLCBlYWNoIGNvbXBvc2l0ZSBzY29yZSBlbmNvbXBhc3NlcyBhbGwgMTIgQ0JTIHRlc3RzLCB3ZWlnaHRlZCBieSB0aGVpciByZXNwZWN0aXZlIGZhY3RvciBsb2FkaW5nLiAKCgojIyMjIENhbGN1bGF0ZSBTY29yZXMKCkNhbGN1bGF0ZSBjb21wb3NpdGUgc2NvcmVzIHVzaW5nIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBkZXNjcmliZWQgYWJvdmUuLi4KCmBgYHtyfQojICMgYWRkIGNvbXBvc2l0ZSBzY29yZXMgYmFzZWQgb24gbWF0cml4IGNhbGN1bGF0aW9ucyAtLSBGT1IgTk9XIFRIRVkgUkVQTEFDRSBUSEUgT1JJR0lOQUwgU1RNLCBSRUFTT04sIGFuZCBWRVJCQUwKIyBnZXQgZGF0YSBmcm9tIG1haW5fYWxsX2RhdGFfZmluYWwKICAjIHRoaXMgaXMgdGhlICJYIiBpbiB0aGUgZXEKbWF0cml4X3Njb3JlWF9uZXdGQSA8LQogICMgdXNlICJjb250YWlucygpIiB0byB1c2UgYSBzdHJpbmcgdG8gc2VsZWN0IGJhc2VkIG9uIHRoYXQgcGF0dGVybgogIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIGRwbHlyOjpzZWxlY3QoY29udGFpbnMoIlpTY29yZV8iKSkgJT4lCiAgIyByZSBvcmRlciB2YXJpYWJsZXMgdG8gbWF0Y2ggSGFtcHNoaXJlIGV0IGFsLiAoMjAxMikgZm9yIGVhc2llciBjb21wYXJpc29uLi4uCiAgc2VsZWN0KFpTY29yZV9TUywgWlNjb3JlX01MLCBaU2NvcmVfVFMsIFpTY29yZV9QQSwgWlNjb3JlX1NQLCBaU2NvcmVfUiwgWlNjb3JlX0ZNLCBaU2NvcmVfUCwgWlNjb3JlX09PTywgWlNjb3JlX0RTLCBaU2NvcmVfR1IsIFpTY29yZV9EVCkKCiMgdHJhbnNwb3NlIHRoZSBtYXRyaXggc28gdGhhdCBpdCBpcyAxMiByb3dzIGJ5IE4gY29scyAKICAjIHRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsCm1hdHJpeF9zY29yZVhfbmV3RkEgPC0gdChhcy5tYXRyaXgobWF0cml4X3Njb3JlWF9uZXdGQSkpCgojIG1ha2UgbWF0cml4IHdpdGggZmFjdG9yIHN0cnVjdHVyZSAKICAjIHJlc3VsdCBpcyBhIG1hdHJpeCB3aXRoIDEyIHJvd3MgYW5kIDMgY29sdW1ucywgd2hpY2ggZGVwaWN0IHRoZSBsb2FkaW5ncyBmb3IgU1RNLCBSZWFzb25pbmcsIGFuZCBWZXJiYWwKICAjIHRoaXMgaXMgdGhlICJBcisiIGluIHRoZSBlcQptYXRyaXhfZmFjdG9yQXJfbmV3RkEgPC0gZmFfbG9hZF90aHJlZV92CgojIGNhbGN1bGF0ZSB0aGUgY29tcG9zaXRlIHNjb3JlcyB1c2luZyB0aGUgZXF1YXRpb24KICAjIHRoaXMgdXNlZCBtYXRyaXggbXVsdGlwbGljYXRpb24gKGkuZS4sIGEgZG90IHByb2R1Y3QgYi93IHRoZSAyIG1hdHJpY2VzKQogICMgdGhpcyBpcyB0aGUgIlkiIGluIHRoZSBlcQpzY29yZXNZX25ld0ZBIDwtIHQodChtYXRyaXhfZmFjdG9yQXJfbmV3RkEpICUqJSBtYXRyaXhfc2NvcmVYX25ld0ZBKQogICMgbWFrZSBzY29yZXMgYSB0aWJibGUKICBzY29yZXNZX25ld0ZBIDwtIGFzLnRpYmJsZShzY29yZXNZX25ld0ZBKQogICMgcmVuYW1lIGNvbHMKICBjb2xuYW1lcyhzY29yZXNZX25ld0ZBKSA8LSBjKCJDQlNfU1RNIiwgIkNCU19yZWFzb24iLCAiQ0JTX3ZlcmJhbCIpCgojIHVzZSB0aGlzIHRvIG1ha2UgQU5PVkEgZGF0YSBmcmFtZXMKYGBgCgoKTWFrZSBhIG5ldyBkYXRhIGZyYW1lIGluY2x1ZGluZyB0aGUgbmV3IGNvbXBvc2l0ZSBzY29yZSBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjb21wb3NpdGUgc2NvcmVzLi4uCmBgYHtyIGluY2x1ZGU9RkFMU0V9CgojIG1ha2UgbmV3IG1haW4gZGF0YSBmaWxlIHRvIGJlIHVzZWQgd2l0aCB0aGlzIGRhdGEgKGlmIG5lZWRlZCkKICAjIG5hbWVkOiAibWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQSIKCiAgIyBmaXJzdCwgY29weSB0aGUgZmluYWwgZGF0YSBzZXQKICBtYWluX2FsbF9kYXRhX2ZpbmFsX25ld0ZBIDwtIG1haW5fYWxsX2RhdGFfZmluYWwKCiAgIyBuZXh0LCByZXBsYWNlIHRoZSBleGlzdGluZyBDQlNfU1RNLCBDQlNfcmVhc29uLCBhbmQgQ0JTX3ZlcmJhbCB3aXRoIG5ldyB2ZXJzaW9ucwogIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkEkQ0JTX1NUTSA9IHNjb3Jlc1lfbmV3RkEkQ0JTX1NUTQogIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkEkQ0JTX3JlYXNvbiA9IHNjb3Jlc1lfbmV3RkEkQ0JTX3JlYXNvbgogIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkEkQ0JTX3ZlcmJhbCA9IHNjb3Jlc1lfbmV3RkEkQ0JTX3ZlcmJhbAoKIyB1c2UgdG8gcXVpY2tseSB2aWV3IGFsbCBjb21wb3NpdGUgc2NvcmVzIGZyb20gZmluYWwgJiBmaW5hbCB0ZW1wIGRhdGEgZmlsZXMgKHRvIHZpc3VhbGx5IGluc3BlY3QpCiAgIyBjYmluZChtYWluX2FsbF9kYXRhX2ZpbmFsJHBhcnRpY2lwYW50LCAKICAjICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWwkQ0JTX1NUTSwgCiAgIyAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsX25ld0ZBJENCU19TVE0sCiAgIyAgICAgICBtYWluX2FsbF9kYXRhX2ZpbmFsJENCU19yZWFzb24sIAogICMgICAgICAgbWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQSRDQlNfcmVhc29uLAogICMgICAgICAgbWFpbl9hbGxfZGF0YV9maW5hbCRDQlNfdmVyYmFsLCAKICAjICAgICAgIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkEkQ0JTX3ZlcmJhbCkKYGBgCiMjIyMgTWVhbiBDb21wb3NpdGUgU2NvcmVzCgpBZGQgc2ltcGxlIGNvbXBvc2l0ZSBzY29yZXMsIHdoaWNoIGFyZSB0aGUgYXZlcmFnZSBvZiBvbmx5IHRoZSBoaWdobHktbG9hZGVkIHRlc3QgZm9yIGVhY2ggZmFjdG9yLiBUaGlzIG1lYW50IGFzIGZvbGxvd3M6CgpPUFRJT04gMToKCi0gRjEgKDgpID0gU1MsIE1MLCBUUywgU1AsIFIsIFAsIEdSLCBEVAotIEYyICgyKSA9IEZNLCBEUwotIEYzICgxKSA9IE9PTwotIE5vdGU6IE9uZSB0ZXN0IHdhcyBub3QgaW5jbHVkZWQgaW4gYW55IGNvbXBvc2l0ZSBzaW5jZSB0aGV5IGRpZCBub3QgbG9hZCBzdHJvbmdseSBvbiBhIGZhY3RvciAoaS5lLiwgPiAuMzApLiBUaGlzIGxvYWRlZCBhdCAuMjUgb3IgaGlnaGVyIGZvciBvbmUgZmFjdG9yIChQQSkuCgoKT1BUSU9OIDI6IAoKLSBGMSAoOSkgPSBTUywgTUwsIFRTLCAoUEEpLCBTUCwgUiwgUCwgR1IsIERUCi0gRjIgKDIpID0gRk0sIERTCi0gRjMgKDEpID0gT09PCi0gTm90ZTogT25lIHRlc3QgZGlkIG5vdCBsb2FkIGF0ID4gLjMwLCBidXQgd2FzIHBsYWNlZCBpbiBhIGZhY3RvciBiYXNlZCBvbiB0aGUgaGlnaGVzdCBmYWN0b3IgdGhleSBkaWQgbG9hZCBvbi4gVGhlc2UgdGVzdHMgYXJlIGRlcGljdGVkIGluICgpOiBQQS4KCiMjIyMgQWRkIE9wIDEgJiAyCgpgYGB7cn0KIyBhZGQgY29tcG9zaXRlIHNjb3JlcwojIG1haW5fY29tX25ld0ZBIDwtIAojICAgbWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQSAlPiUgCiMgICAKbWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQV9vcCA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsX25ld0ZBICU+JSAKICBzZWxlY3QoU3RhcnREYXRlOkNCU190c19jb25SKSAlPiUgCiAgCiAgIyBmb3IgZWFjaCBwLi4uCiAgcm93d2lzZSgpICU+JSAKICAKICAjIyBPUFRJT04gMQogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBGMV8xIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX0YxXzEgPSAoc3VtKFpTY29yZV9TUywgWlNjb3JlX01MLCBaU2NvcmVfVFMsIFpTY29yZV9TUCwgWlNjb3JlX1IsIFpTY29yZV9QLCBaU2NvcmVfR1IsIFpTY29yZV9EVCkpLzgpICU+JSAKICAKICByb3d3aXNlKCkgJT4lIAogIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBGMl8xIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX0YyXzEgPSAoc3VtKFpTY29yZV9GTSwgWlNjb3JlX0RTKSkvMikgJT4lIAogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBGM18xIENCUyBzY29yZQogICAgICAjIE5PVCBBRERFRCBTSU5DRSBUSElTIElTIEpVU1QgVEhFIE9PIFNDT1JFIAogICMgZHBseXI6Om11dGF0ZShDQlNfRjNfMSA9IChzdW0oWlNjb3JlX09PTykpLzEpCiAgCiAgcm93d2lzZSgpICU+JSAKICAKICAjIyBPUFRJT04gMgogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBGMV8xIENCUyBzY29yZQogIGRwbHlyOjptdXRhdGUoQ0JTX0YxXzIgPSAoc3VtKFpTY29yZV9TUywgWlNjb3JlX01MLCBaU2NvcmVfVFMsIFpTY29yZV9QQSwgWlNjb3JlX1NQLCBaU2NvcmVfUiwgWlNjb3JlX1AsIFpTY29yZV9HUiwgWlNjb3JlX0RUKSkvOSkKICAKICAjIE5PVCBBRERFRCBTSU5DRSBUSElTIElTIEpVU1QgVEhFIE9PIFNDT1JFIAogICMgcm93d2lzZSgpICU+JSAKICAjIGFkZCBjb21wb3NpdGUgc2NvcmUgLS0gRjJfMSBDQlMgc2NvcmUKICAjIGRwbHlyOjptdXRhdGUoQ0JTX0YyXzIgPSAoc3VtKFpTY29yZV9GTSwgWlNjb3JlX0RULCBaU2NvcmVfRFMpKS8zKQogICMgYWRkIGNvbXBvc2l0ZSBzY29yZSAtLSBGM18xIENCUyBzY29yZQogICAgICAjIE5PVCBBRERFRCBTSU5DRSBUSElTIElTIEpVU1QgVEhFIE9PIFNDT1JFIAogICMgZHBseXI6Om11dGF0ZShDQlNfRjNfMiA9IChzdW0oWlNjb3JlX09PTykpLzEpCiAgICAKCgpgYGAKCiMjIyBBTk9WQSBSZXN1bHRzICh3LyBBc3N1bXB0aW9ucykKIyMjIyBNYXRyaXggU2NvcmVzCgpGYWN0b3IgMSAtIE5ldyBGQSBEYXRhCmBgYHtyfQojIyBGT1IgU1RNX25ldwphbm92YV9kYXRhX1NUTV9uZXcgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQSAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIENCU19TVE0pICU+JSAKICByZW5hbWUoc2NvcmUgPSBDQlNfU1RNKQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfU1RNX25ldyA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX1NUTV9uZXcKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfU1RNX25ldyRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX1NUTV9uZXckYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9TVE1fbmV3JGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX1NUTV9uZXcsIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX1NUTV9uZXckQU5PVkEsIGNhcHRpb24gPSAiQ0JTIEZhY3RvciAxIC0gb25lLXdheSBBTk9WQSAobWF0cml4KSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfU1RNX25ldyRjb25kaXRpb24sIGFub3ZhX2RhdGFfU1RNX25ldyRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX1NUTV9uZXcsIC1wYXJ0aWNpcGFudCksCmNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksICwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBGYWN0b3IgMSAmIFNtYXJ0cGhvbmUgTG9jYXRpb24gKG5ldyBGQSBkYXRhKSBNYXRyaXgiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKCmBgYAoKRmFjdG9yIDIgLSBOZXcgRkEgRGF0YQpgYGB7cn0KIyMgRk9SIHJlYXNvbl9uZXcKYW5vdmFfZGF0YV9yZWFzb25fbmV3IDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkEgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBDQlNfcmVhc29uKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gQ0JTX3JlYXNvbikKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX3JlYXNvbl9uZXcgPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfZGF0YV9yZWFzb25fbmV3CiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX3JlYXNvbl9uZXckYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9yZWFzb25fbmV3JGFvdiRyZXNpZHVhbHMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIE9zcGFuIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjMpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfcmVhc29uX25ldyRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9yZWFzb25fbmV3LCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9yZWFzb25fbmV3JEFOT1ZBLCBjYXB0aW9uID0gIkNCUyBGYWN0b3IgMiAtIG9uZS13YXkgQU5PVkEgKG1hdHJpeCkiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX3JlYXNvbl9uZXckY29uZGl0aW9uLCBhbm92YV9kYXRhX3JlYXNvbl9uZXckc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9yZWFzb25fbmV3LCAtcGFydGljaXBhbnQpLApjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCAsIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBDQlMgRmFjdG9yIDIgJiBTbWFydHBob25lIExvY2F0aW9uIChuZXcgRkEgZGF0YSkgTWF0cml4IiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCgpgYGAKCkZhY3RvciAzIC0gTmV3IEZBIERhdGEKYGBge3J9CiMjIEZPUiB2ZXJiYWxfbmV3CmFub3ZhX2RhdGFfdmVyYmFsX25ldyA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsX25ld0ZBICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgQ0JTX3ZlcmJhbCkgJT4lIAogIHJlbmFtZShzY29yZSA9IENCU192ZXJiYWwpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV92ZXJiYWxfbmV3IDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfdmVyYmFsX25ldwogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV92ZXJiYWxfbmV3JGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfdmVyYmFsX25ldyRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX3ZlcmJhbF9uZXckYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfdmVyYmFsX25ldywgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfdmVyYmFsX25ldyRBTk9WQSwgY2FwdGlvbiA9ICJDQlMgRmFjdG9yIDMgLSBvbmUtd2F5IEFOT1ZBIChtYXRyaXgpIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV92ZXJiYWxfbmV3JGNvbmRpdGlvbiwgYW5vdmFfZGF0YV92ZXJiYWxfbmV3JHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfdmVyYmFsX25ldywgLXBhcnRpY2lwYW50KSwKY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIEZhY3RvciAzICYgU21hcnRwaG9uZSBMb2NhdGlvbiAobmV3IEZBIGRhdGEpIE1hdHJpeCIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQoKYGBgCgojIyMjIE1lYW4gU2NvcmVzCkZhY3RvciAxIC0gTmV3IEZBIERhdGEgLS0gT1BUSU9OIDEKYGBge3J9CiMjIEZPUiBTVE1fbmV3CmFub3ZhX2RhdGFfRjFfMSA8LSAKICBtYWluX2FsbF9kYXRhX2ZpbmFsX25ld0ZBX29wICU+JSAKICBzZWxlY3QocGFydGljaXBhbnQsIGNvbmRpdGlvbiwgQ0JTX0YxXzEpICU+JSAKICByZW5hbWUoc2NvcmUgPSBDQlNfRjFfMSkKCiMgcnVuIGJldHdlZW4tc3ViamVjdHMgQU5PVkEgKElWOiBTbWFydHBob25lIExvY2F0aW9uOyBEVjogQ0JTIHBlcmZvcm1hbmNlKQojIyBPVkVSQUxMCmFub3ZhX0YxXzEgPC0gZXpBTk9WQSgKICBkYXRhID0gYW5vdmFfZGF0YV9GMV8xCiAgLCBkdiA9IC4oc2NvcmUpCiAgLCB3aWQgPSAuKHBhcnRpY2lwYW50KQogICwgYmV0d2VlbiA9IC4oY29uZGl0aW9uKQogICwgdHlwZSA9IDMgIyB1bmVxdWFsIHNhbXBsZSBzaXplcwogICwgZGV0YWlsZWQgPSBUUlVFCiAgLCByZXR1cm5fYW92ID0gVFJVRQogICkKCmdncXFwbG90KGFub3ZhX0YxXzEkYW92JHJlc2lkdWFscywgeWxhYiA9ICJDQlMiLCBzaGFwZSA9IDEpCgpxcGxvdChhbm92YV9GMV8xJGFvdiRyZXNpZHVhbHMsIG1haW4gPSAiSGlzdG9ncmFtIG9mIE9zcGFuIFJlc2lkdWFscyIsIGJpbndpZHRoID0gLjMpICsgdGhlbWVfY2xhc3NpYygpCgprYWJsZShhcy5udW1lcmljKHVubGlzdChzaGFwaXJvLnRlc3QoYW5vdmFfRjFfMSRhb3YkcmVzaWR1YWxzKSlbMToyXSksIGNhcHRpb24gPSAiU0hBUElSTyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZSh1bmxpc3QobGV2ZW5lVGVzdChkYXRhID0gYW5vdmFfZGF0YV9GMV8xLCBzY29yZSB+IGNvbmRpdGlvbiwgY2VudGVyID0gbWVhbikpW2MoMTozLCA1KV0sIGNhcHRpb24gPSAiTEVWRU5FUyIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgprYWJsZShhbm92YV9GMV8xJEFOT1ZBLCBjYXB0aW9uID0gIkNCUyBGYWN0b3IgMSAtIG9uZS13YXkgQU5PVkEgKG1lYW5zKSIsIGRpZ2l0cyA9IDQsIGFsaWduID0gJ2MnKSAlPiUKICByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgpwbG90KGFub3ZhX2RhdGFfRjFfMSRjb25kaXRpb24sIGFub3ZhX2RhdGFfRjFfMSRzY29yZSkKCmdnYmV0d2VlbnN0YXRzKHNlbGVjdChhbm92YV9kYXRhX0YxXzEsIC1wYXJ0aWNpcGFudCksCmNvbmRpdGlvbiwgc2NvcmUsIG91dGxpZXIudGFnZ2luZyA9IFRSVUUsIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9jbGFzc2ljKCksICwgdHlwZSA9ICJwYXJhbWV0cmljIiwgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLCBwYWlyd2lzZS5kaXNwbGF5ID0gImFsbCIsIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIiwgZWZmc2l6ZS50eXBlID0gImV0YSIsIHJlc3VsdHMuc3VidGl0bGUgPSBULCB0aXRsZSA9ICJBTk9WQSAtIENCUyBGYWN0b3IgMSAmIFNtYXJ0cGhvbmUgTG9jYXRpb24gKG5ldyBGQSBkYXRhKSBNZWFucyIsIHZhci5lcXVhbCA9IFQsIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0cmljIiwgY2VudHJhbGl0eS5wb2ludC5hcmdzID0gbGlzdChzaXplID0gMiksIG91dGxpZXIubGFiZWwuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpKQoKYGBgCgpGYWN0b3IgMiAtIE5ldyBGQSBEYXRhIC0tIE9QVElPTiAxCmBgYHtyfQojIyBGT1IgU1RNX25ldwphbm92YV9kYXRhX0YyXzEgPC0gCiAgbWFpbl9hbGxfZGF0YV9maW5hbF9uZXdGQV9vcCAlPiUgCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBjb25kaXRpb24sIENCU19GMl8xKSAlPiUgCiAgcmVuYW1lKHNjb3JlID0gQ0JTX0YyXzEpCgojIHJ1biBiZXR3ZWVuLXN1YmplY3RzIEFOT1ZBIChJVjogU21hcnRwaG9uZSBMb2NhdGlvbjsgRFY6IENCUyBwZXJmb3JtYW5jZSkKIyMgT1ZFUkFMTAphbm92YV9GMl8xIDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFub3ZhX2RhdGFfRjJfMQogICwgZHYgPSAuKHNjb3JlKQogICwgd2lkID0gLihwYXJ0aWNpcGFudCkKICAsIGJldHdlZW4gPSAuKGNvbmRpdGlvbikKICAsIHR5cGUgPSAzICMgdW5lcXVhbCBzYW1wbGUgc2l6ZXMKICAsIGRldGFpbGVkID0gVFJVRQogICwgcmV0dXJuX2FvdiA9IFRSVUUKICApCgpnZ3FxcGxvdChhbm92YV9GMl8xJGFvdiRyZXNpZHVhbHMsIHlsYWIgPSAiQ0JTIiwgc2hhcGUgPSAxKQoKcXBsb3QoYW5vdmFfRjJfMSRhb3YkcmVzaWR1YWxzLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBPc3BhbiBSZXNpZHVhbHMiLCBiaW53aWR0aCA9IC4zKSArIHRoZW1lX2NsYXNzaWMoKQoKa2FibGUoYXMubnVtZXJpYyh1bmxpc3Qoc2hhcGlyby50ZXN0KGFub3ZhX0YyXzEkYW92JHJlc2lkdWFscykpWzE6Ml0pLCBjYXB0aW9uID0gIlNIQVBJUk8iLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUodW5saXN0KGxldmVuZVRlc3QoZGF0YSA9IGFub3ZhX2RhdGFfRjJfMSwgc2NvcmUgfiBjb25kaXRpb24sIGNlbnRlciA9IG1lYW4pKVtjKDE6MywgNSldLCBjYXB0aW9uID0gIkxFVkVORVMiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKa2FibGUoYW5vdmFfRjJfMSRBTk9WQSwgY2FwdGlvbiA9ICJDQlMgRmFjdG9yIDEgLSBvbmUtd2F5IEFOT1ZBIChtZWFucykiLCBkaWdpdHMgPSA0LCBhbGlnbiA9ICdjJykgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKcGxvdChhbm92YV9kYXRhX0YyXzEkY29uZGl0aW9uLCBhbm92YV9kYXRhX0YyXzEkc2NvcmUpCgpnZ2JldHdlZW5zdGF0cyhzZWxlY3QoYW5vdmFfZGF0YV9GMl8xLCAtcGFydGljaXBhbnQpLApjb25kaXRpb24sIHNjb3JlLCBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfY2xhc3NpYygpLCAsIHR5cGUgPSAicGFyYW1ldHJpYyIsIHBhaXJ3aXNlLmNvbXBhcmlzb25zID0gVFJVRSwgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIsIGVmZnNpemUudHlwZSA9ICJldGEiLCByZXN1bHRzLnN1YnRpdGxlID0gVCwgdGl0bGUgPSAiQU5PVkEgLSBDQlMgRmFjdG9yIDIgJiBTbWFydHBob25lIExvY2F0aW9uIChuZXcgRkEgZGF0YSkgTWVhbnMiLCB2YXIuZXF1YWwgPSBULCBjZW50cmFsaXR5LnR5cGUgPSAicGFyYW1ldHJpYyIsIGNlbnRyYWxpdHkucG9pbnQuYXJncyA9IGxpc3Qoc2l6ZSA9IDIpLCBvdXRsaWVyLmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAyKSkKCmBgYAoKRmFjdG9yIDEgLSBOZXcgRkEgRGF0YSAtLSBPUFRJT04gMgpgYGB7cn0KIyMgRk9SIFNUTV9uZXcKYW5vdmFfZGF0YV9GMV8yIDwtIAogIG1haW5fYWxsX2RhdGFfZmluYWxfbmV3RkFfb3AgJT4lIAogIHNlbGVjdChwYXJ0aWNpcGFudCwgY29uZGl0aW9uLCBDQlNfRjFfMikgJT4lIAogIHJlbmFtZShzY29yZSA9IENCU19GMV8yKQoKIyBydW4gYmV0d2Vlbi1zdWJqZWN0cyBBTk9WQSAoSVY6IFNtYXJ0cGhvbmUgTG9jYXRpb247IERWOiBDQlMgcGVyZm9ybWFuY2UpCiMjIE9WRVJBTEwKYW5vdmFfRjFfMiA8LSBlekFOT1ZBKAogIGRhdGEgPSBhbm92YV9kYXRhX0YxXzIKICAsIGR2ID0gLihzY29yZSkKICAsIHdpZCA9IC4ocGFydGljaXBhbnQpCiAgLCBiZXR3ZWVuID0gLihjb25kaXRpb24pCiAgLCB0eXBlID0gMyAjIHVuZXF1YWwgc2FtcGxlIHNpemVzCiAgLCBkZXRhaWxlZCA9IFRSVUUKICAsIHJldHVybl9hb3YgPSBUUlVFCiAgKQoKZ2dxcXBsb3QoYW5vdmFfRjFfMiRhb3YkcmVzaWR1YWxzLCB5bGFiID0gIkNCUyIsIHNoYXBlID0gMSkKCnFwbG90KGFub3ZhX0YxXzIkYW92JHJlc2lkdWFscywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgT3NwYW4gUmVzaWR1YWxzIiwgYmlud2lkdGggPSAuMykgKyB0aGVtZV9jbGFzc2ljKCkKCmthYmxlKGFzLm51bWVyaWModW5saXN0KHNoYXBpcm8udGVzdChhbm92YV9GMV8yJGFvdiRyZXNpZHVhbHMpKVsxOjJdKSwgY2FwdGlvbiA9ICJTSEFQSVJPIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKHVubGlzdChsZXZlbmVUZXN0KGRhdGEgPSBhbm92YV9kYXRhX0YxXzIsIHNjb3JlIH4gY29uZGl0aW9uLCBjZW50ZXIgPSBtZWFuKSlbYygxOjMsIDUpXSwgY2FwdGlvbiA9ICJMRVZFTkVTIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCmthYmxlKGFub3ZhX0YxXzIkQU5PVkEsIGNhcHRpb24gPSAiQ0JTIEZhY3RvciAxIC0gb25lLXdheSBBTk9WQSAobWVhbnMpIiwgZGlnaXRzID0gNCwgYWxpZ24gPSAnYycpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCnBsb3QoYW5vdmFfZGF0YV9GMV8yJGNvbmRpdGlvbiwgYW5vdmFfZGF0YV9GMV8yJHNjb3JlKQoKZ2diZXR3ZWVuc3RhdHMoc2VsZWN0KGFub3ZhX2RhdGFfRjFfMiwgLXBhcnRpY2lwYW50KSwKY29uZGl0aW9uLCBzY29yZSwgb3V0bGllci50YWdnaW5nID0gVFJVRSwgZ2d0aGVtZSA9IGdncGxvdDI6OnRoZW1lX2NsYXNzaWMoKSwgLCB0eXBlID0gInBhcmFtZXRyaWMiLCBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsIHBhaXJ3aXNlLmRpc3BsYXkgPSAiYWxsIiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBlZmZzaXplLnR5cGUgPSAiZXRhIiwgcmVzdWx0cy5zdWJ0aXRsZSA9IFQsIHRpdGxlID0gIkFOT1ZBIC0gQ0JTIEZhY3RvciAxICYgU21hcnRwaG9uZSBMb2NhdGlvbiAobmV3IEZBIGRhdGEpIE1lYW5zIiwgdmFyLmVxdWFsID0gVCwgY2VudHJhbGl0eS50eXBlID0gInBhcmFtZXRyaWMiLCBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSAyKSwgb3V0bGllci5sYWJlbC5hcmdzID0gbGlzdChzaXplID0gMikpCgpgYGAKCiMgQWRkaXRpb25hbCBBbmFseXNlcyAoaWYgYW55KQo8IS0tICMjIENGQSAtLT4KCjwhLS0gSWYgdGltZSwgY29tcGxldGUgYSBDRkEgdXNpbmcgcGlsb3QgJi8gU3R1ZHkgMiBkYXRhIHRvIHNlZSBpZiBXYXJkIHZzLiBteSBmYWN0b3JzIGZpdCB0aGUgZGF0YSBiZXN0Li4uICAtLT4KYGBge3IgcGlsb3RfY2ZhLCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQoKIyMgRk9SIFBJTE9UIFNUVURZIERBVEEKbGlicmFyeShsYXZhYW4pCmxpYnJhcnkoc2VtUGxvdCkKIyBkYXRhCnBpbG90X2NmYV9kYXRhIDwtIHBpbG90X3N1cl9kYXRhICU+JSBzZWxlY3QocGFydGljaXBhbnQsIFNBRF8xOlNBRF8xMykKIyBzY2FsZSBkYXRhIHBlciBpdGVtCnBpbG90X2NmYV9kYXRhWywtYygxKV08LXNjYWxlKHBpbG90X2NmYV9kYXRhWywtYygxKV0pCiMgbWFrZSBwYXJ0aWNpcGFudCBmYWN0b3IKcGlsb3RfY2ZhX2RhdGEkcGFydGljaXBhbnQgPC0gZmFjdG9yKHBpbG90X2NmYV9kYXRhJHBhcnRpY2lwYW50KQoKIyBkZWZpbmUgdGhlIDMgbW9kZWxzIChzaW5nbGUgZmFjdG9yLCAyLWZhY3RvciwgMy1mYWN0b3IpCiMgcGlsb3RfY2ZhX21vZDEgPC0gJ2cgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zICsgU0FEXzQgKyBTQURfNSArIFNBRF82ICsgU0FEXzcgKyBTQURfOCArIFNBRF85ICsgU0FEXzEwICsgU0FEXzExICsgU0FEXzEyICsgU0FEXzEzJwojIAojIHBpbG90X2NmYV9tb2QyIDwtICcKIyBWID1+IFNBRF8xICsgU0FEXzIgKyBTQURfMyArIFNBRF80ICsgU0FEXzUgKyBTQURfNiAKIyBGID1+IFNBRF84ICsgU0FEXzkgKyBTQURfMTAgKyBTQURfMTEgKyBTQURfMTIKIyAnCiMgcGlsb3RfY2ZhX21vZDMgPC0gJwojIFYgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zICsgU0FEXzQgKyBTQURfNQojIEYgPX4gU0FEXzggKyBTQURfOSArIFNBRF8xMCArIFNBRF8xMQojIFEgPX4gU0FEXzcgKyBTQURfMTIgKyBTQURfMTMKIyAnCgpwaWxvdF9jZmFfbW9kMSA8LSAnU0FEID1+IFNBRF8xICsgU0FEXzIgKyBTQURfMyArIFNBRF80ICsgU0FEXzUgKyBTQURfNiArIFNBRF83ICsgU0FEXzggKyBTQURfOSArIFNBRF8xMCArIFNBRF8xMSArIFNBRF8xMiArIFNBRF8xMycKCnBpbG90X2NmYV9tb2QyIDwtICcKREVQX1cgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zICsgU0FEXzQgKyBTQURfNSArIFNBRF82CkVBX1cgPX4gU0FEXzggKyBTQURfOSArIFNBRF8xMCArIFNBRF8xMSArIFNBRF8xMgonCnBpbG90X2NmYV9tb2QzIDwtICcKREVQID1+IFNBRF8xICsgU0FEXzIgKyBTQURfMwpFQSA9fiBTQURfOCArIFNBRF85ICsgU0FEXzEwICsgU0FEXzExCkFDQyA9fiBTQURfNSArIFNBRF82ICsgU0FEXzcKRElTVCA9fiBTQURfMTIgKyBTQURfMTMKJwoKIyBydW4gc2NhbGVkIGRhdGEgd2l0aCBzaW5nbGUtZmFjdG9yIG1vZGVsCnBpbG90X2NmYV9maXQxIDwtIGxhdmFhbjo6Y2ZhKG1vZGVsID0gcGlsb3RfY2ZhX21vZDEsIAogICAgICAgICAgICAgICAgZGF0YSA9IHBpbG90X2NmYV9kYXRhLCAKICAgICAgICAgICAgICAgICMgc2FtcGxlLm5vYnMgPSAyNTAsICAKICAgICAgICAgICAgICAgIHN0ZC5sdiA9IFQpIAojIHN1bW1hcnkocGlsb3RfY2ZhX2ZpdDEsCiMgICAgICAgICBzdGFuZGFyZGl6ZWQ9VFJVRSwgCiMgICAgICAgICByc3F1YXJlID0gVFJVRSwKIyAgICAgICAgIGZpdC5tZWFzdXJlcz1UUlVFKQojIGZpdG1lYXN1cmVzKHBpbG90X2NmYV9maXQxKQpzZW1QYXRocyhwaWxvdF9jZmFfZml0MSwgCiAgICAgICAgIHdoYXRMYWJlbHM9InBhciIsIAogICAgICAgICBsYXlvdXQ9InRyZWUiKQoKa2FibGUoZml0bWVhc3VyZXMocGlsb3RfY2ZhX2ZpdDEpLCBjYXB0aW9uID0gIkZpdCBNZWFzdXJlczogTW9kZWwgMSIsIGRpZ2l0cyA9IDE1LCBhbGlnbiA9ICdjJykgJT4lCiAgIyByb3dfc3BlYygwLCBib2xkID0gVCkgJT4lIAogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsICJob3ZlciIsIGZ1bGxfd2lkdGggPSBGKSAlPiUgCiAga2FibGVfY2xhc3NpYygpCgojIHJ1biBzY2FsZWQgZGF0YSB3aXRoIDItZmFjdG9yIG1vZGVsCnBpbG90X2NmYV9maXQyIDwtIGxhdmFhbjo6Y2ZhKG1vZGVsID0gcGlsb3RfY2ZhX21vZDIsIAogICAgICAgICAgICAgICAgZGF0YSA9IHBpbG90X2NmYV9kYXRhLCAKICAgICAgICAgICAgICAgICMgc2FtcGxlLm5vYnMgPSAyNTAsICAKICAgICAgICAgICAgICAgIHN0ZC5sdiA9IFQpIAojIHN1bW1hcnkocGlsb3RfY2ZhX2ZpdDIsCiMgICAgICAgICBzdGFuZGFyZGl6ZWQ9VFJVRSwKIyAgICAgICAgIHJzcXVhcmUgPSBUUlVFLAojICAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCiMgZml0bWVhc3VyZXMocGlsb3RfY2ZhX2ZpdDIpCnNlbVBhdGhzKHBpbG90X2NmYV9maXQyLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCmthYmxlKGZpdG1lYXN1cmVzKHBpbG90X2NmYV9maXQyKSwgY2FwdGlvbiA9ICJGaXQgTWVhc3VyZXM6IE1vZGVsIDIiLCBkaWdpdHMgPSAxNSwgYWxpZ24gPSAnYycpICU+JQogICMgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKIyBydW4gc2NhbGVkIGRhdGEgdy8gMy1mYWN0b3IgbW9kZWwKcGlsb3RfY2ZhX2ZpdDMgPC0gbGF2YWFuOjpjZmEobW9kZWwgPSBwaWxvdF9jZmFfbW9kMywgCiAgICAgICAgICAgICAgICBkYXRhID0gcGlsb3RfY2ZhX2RhdGEsIAogICAgICAgICAgICAgICAgIyBzYW1wbGUubm9icyA9IDI1MCwgIAogICAgICAgICAgICAgICAgc3RkLmx2ID0gVCkgCiMgc3VtbWFyeShwaWxvdF9jZmFfZml0MywKIyAgICAgICAgIHN0YW5kYXJkaXplZD1UUlVFLCAKIyAgICAgICAgIHJzcXVhcmUgPSBUUlVFLAojICAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCiMgZml0bWVhc3VyZXMocGlsb3RfY2ZhX2ZpdDMpCnNlbVBhdGhzKHBpbG90X2NmYV9maXQzLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCmthYmxlKGZpdG1lYXN1cmVzKHBpbG90X2NmYV9maXQxKSwgY2FwdGlvbiA9ICJGaXQgTWVhc3VyZXM6IE1vZGVsIDMiLCBkaWdpdHMgPSAxNSwgYWxpZ24gPSAnYycpICU+JQogICMgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKIyBhbm92YXMuLi4gCmFub3ZhKHBpbG90X2NmYV9maXQxLCBwaWxvdF9jZmFfZml0MiwgcGlsb3RfY2ZhX2ZpdDMpCmFub3ZhKHBpbG90X2NmYV9maXQxLCBwaWxvdF9jZmFfZml0MikKYW5vdmEocGlsb3RfY2ZhX2ZpdDEsIHBpbG90X2NmYV9maXQzKQphbm92YShwaWxvdF9jZmFfZml0MiwgcGlsb3RfY2ZhX2ZpdDMpCgpgYGAKCgpgYGB7ciBtYWluX2NmYSwgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KCiMjIEZPUiBTdHVkeSAyIERBVEEKbGlicmFyeShsYXZhYW4pCmxpYnJhcnkoc2VtUGxvdCkKIyBkYXRhCmNmYV9kYXRhIDwtIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIHNlbGVjdChwYXJ0aWNpcGFudCwgU0FEXzE6U0FEXzEzKQojIHNjYWxlIGRhdGEgcGVyIGl0ZW0KY2ZhX2RhdGFbLC1jKDEpXTwtc2NhbGUoY2ZhX2RhdGFbLC1jKDEpXSkKIyBtYWtlIHBhcnRpY2lwYW50IGZhY3RvcgpjZmFfZGF0YSRwYXJ0aWNpcGFudCA8LSBmYWN0b3IoY2ZhX2RhdGEkcGFydGljaXBhbnQpCgojIGRlZmluZSB0aGUgMyBtb2RlbHMgKHNpbmdsZSBmYWN0b3IsIDItZmFjdG9yLCAzLWZhY3RvcikKY2ZhX21vZDEgPC0gJ2cgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zICsgU0FEXzQgKyBTQURfNSArIFNBRF82ICsgU0FEXzcgKyBTQURfOCArIFNBRF85ICsgU0FEXzEwICsgU0FEXzExICsgU0FEXzEyICsgU0FEXzEzJwoKY2ZhX21vZDIgPC0gJwpWID1+IFNBRF8xICsgU0FEXzIgKyBTQURfMyArIFNBRF80ICsgU0FEXzUgKyBTQURfNiAKRiA9fiBTQURfOCArIFNBRF85ICsgU0FEXzEwICsgU0FEXzExICsgU0FEXzEyCicKY2ZhX21vZDMgPC0gJwpERVAgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zCkVBID1+IFNBRF84ICsgU0FEXzkgKyBTQURfMTAgKyBTQURfMTEKQUNDID1+IFNBRF81ICsgU0FEXzYgKyBTQURfNwpESVNUID1+IFNBRF8xMiArIFNBRF8xMwonCgojIHJ1biBzY2FsZWQgZGF0YSB3aXRoIHNpbmdsZS1mYWN0b3IgbW9kZWwKY2ZhX2ZpdDEgPSBjZmEobW9kZWwgPSBjZmFfbW9kMSwgCiAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEsIAogICAgICAgICAgICAgICAgIyBzYW1wbGUubm9icyA9IDI1MCwgIAogICAgICAgICAgICAgICAgc3RkLmx2ID0gVCkgCiMgc3VtbWFyeShjZmFfZml0MSwKIyAgICAgICAgIHN0YW5kYXJkaXplZD1UUlVFLCAKIyAgICAgICAgIHJzcXVhcmUgPSBUUlVFLAojICAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCiMgZml0bWVhc3VyZXMoY2ZhX2ZpdDEpCnNlbVBhdGhzKGNmYV9maXQxLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCgprYWJsZShmaXRtZWFzdXJlcyhjZmFfZml0MSksIGNhcHRpb24gPSAiRml0IE1lYXN1cmVzOiBNb2RlbCAxIiwgZGlnaXRzID0gMTUsIGFsaWduID0gJ2MnKSAlPiUKICAjIHJvd19zcGVjKDAsIGJvbGQgPSBUKSAlPiUgCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgImhvdmVyIiwgZnVsbF93aWR0aCA9IEYpICU+JSAKICBrYWJsZV9jbGFzc2ljKCkKCiMgcnVuIHNjYWxlZCBkYXRhIHdpdGggMi1mYWN0b3IgbW9kZWwKY2ZhX2ZpdDIgPSBjZmEobW9kZWwgPSBjZmFfbW9kMiwgCiAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEsIAogICAgICAgICAgICAgICAgIyBzYW1wbGUubm9icyA9IDI1MCwgIAogICAgICAgICAgICAgICAgc3RkLmx2ID0gVCkgCiMgc3VtbWFyeShjZmFfZml0MiwKIyAgICAgICAgIHN0YW5kYXJkaXplZD1UUlVFLCAKIyAgICAgICAgIHJzcXVhcmUgPSBUUlVFLAojICAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCiMgZml0bWVhc3VyZXMoY2ZhX2ZpdDIpCnNlbVBhdGhzKGNmYV9maXQyLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCmthYmxlKGZpdG1lYXN1cmVzKGNmYV9maXQyKSwgY2FwdGlvbiA9ICJGaXQgTWVhc3VyZXM6IE1vZGVsIDIiLCBkaWdpdHMgPSAxNSwgYWxpZ24gPSAnYycpICU+JQogICMgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKIyBydW4gc2NhbGVkIGRhdGEgdy8gMy1mYWN0b3IgbW9kZWwKY2ZhX2ZpdDMgPSBjZmEobW9kZWwgPSBjZmFfbW9kMywgCiAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEsIAogICAgICAgICAgICAgICAgIyBzYW1wbGUubm9icyA9IDI1MCwgIAogICAgICAgICAgICAgICAgc3RkLmx2ID0gVCkgCiMgc3VtbWFyeShjZmFfZml0MywKIyAgICAgICAgIHN0YW5kYXJkaXplZD1UUlVFLCAKIyAgICAgICAgIHJzcXVhcmUgPSBUUlVFLAojICAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCiMgZml0bWVhc3VyZXMoY2ZhX2ZpdDMpCnNlbVBhdGhzKGNmYV9maXQzLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCmthYmxlKGZpdG1lYXN1cmVzKGNmYV9maXQxKSwgY2FwdGlvbiA9ICJGaXQgTWVhc3VyZXM6IE1vZGVsIDMiLCBkaWdpdHMgPSAxNSwgYWxpZ24gPSAnYycpICU+JQogICMgcm93X3NwZWMoMCwgYm9sZCA9IFQpICU+JSAKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCAiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lIAogIGthYmxlX2NsYXNzaWMoKQoKYW5vdmEoY2ZhX2ZpdDEsIGNmYV9maXQyLCBjZmFfZml0MykKYW5vdmEoY2ZhX2ZpdDEsIGNmYV9maXQyKQphbm92YShjZmFfZml0MSwgY2ZhX2ZpdDMpCmFub3ZhKGNmYV9maXQyLCBjZmFfZml0MykKCgpgYGAKCmBgYHtyIHN0YXRzX29mX2Rvb21fc2NyaXB0LCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIGxpYnJhcnkobGF2YWFuKQojIGxpYnJhcnkoc2VtUGxvdCkKIyBkYXRhCmNmYV9kYXRhIDwtIG1haW5fYWxsX2RhdGFfZmluYWwgJT4lIHNlbGVjdChwYXJ0aWNpcGFudCwgU0FEXzE6U0FEXzEzKQojIHNjYWxlIGRhdGEgcGVyIGl0ZW0KY2ZhX2RhdGFbLC1jKDEpXTwtc2NhbGUoY2ZhX2RhdGFbLC1jKDEpXSkKIyBtYWtlIHBhcnRpY2lwYW50IGZhY3RvcgpjZmFfZGF0YSRwYXJ0aWNpcGFudCA8LSBmYWN0b3IoY2ZhX2RhdGEkcGFydGljaXBhbnQpCgoKIyBub24tc3RhbmRhcmRpemVkCmNmYV9kYXRhMiA8LSBtYWluX2FsbF9kYXRhX2ZpbmFsICU+JSBzZWxlY3QocGFydGljaXBhbnQsIFNBRF8xOlNBRF8xMykKY2ZhX2RhdGEyJHBhcnRpY2lwYW50IDwtIGZhY3RvcihjZmFfZGF0YTIkcGFydGljaXBhbnQpCiMjZXhhbXBsZSAxIC0gb25lIGxhdGVudCB2YXJpYWJsZQojI2VudGVyIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXgKIyB3aXNjNC5jb3IgPSBsYXZfbWF0cml4X2xvd2VyMmZ1bGwoYygxLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNzIsMSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY0LDAuNjMsMSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUxLDAuNDgsMC4zNywxLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzcsMC4zOCwwLjM4LDAuMzgsMSkpCgojIGVudGVyIHRoZSBTRHMKIyB3aXNjNC5zZCA9IGMoMy4wMSAsIDMuMDMgLCAyLjk5ICwgMi44OSAsIDIuOTgpCgojIG5hbWUgdGhlIHZhcmlhYmxlcwojIGNvbG5hbWVzKHdpc2M0LmNvcikgPSAKIyAgIHJvd25hbWVzKHdpc2M0LmNvcikgPSAKIyAgIGMoIkluZm9ybWF0aW9uIiwgIlNpbWlsYXJpdGllcyIsIAojICAgICAiV29yZC5SZWFzb25pbmciLCAiTWF0cml4LlJlYXNvbmluZyIsICJQaWN0dXJlLkNvbmNlcHRzIikKIyAKIyBuYW1lcyh3aXNjNC5zZCkgPSAgYygiSW5mb3JtYXRpb24iLCAiU2ltaWxhcml0aWVzIiwgCiMgICAgICAgICAgICAgICAgICAgICAgIldvcmQuUmVhc29uaW5nIiwgIk1hdHJpeC5SZWFzb25pbmciLCAKIyAgICAgICAgICAgICAgICAgICAgICAgIlBpY3R1cmUuQ29uY2VwdHMiKQoKIyBjb252ZXJ0IGNvcnJlbGF0aW9ucyBhbmQgU0RzIHRvIGNvdmFyYWluY2VzCiMgd2lzYzQuY292ID0gY29yMmNvdih3aXNjNC5jb3Isd2lzYzQuc2QpCgojIHNwZWNpZnkgc2luZ2xlIGZhY3RvciBtb2RlbAp3aXNjNC5tb2RlbCA8LSAnZyA9fiBTQURfMSArIFNBRF8yICsgU0FEXzMgKyBTQURfNCArIFNBRF81ICsgU0FEXzYgKyBTQURfNyArIFNBRF84ICsgU0FEXzkgKyBTQURfMTAgKyBTQURfMTEgKyBTQURfMTIgKyBTQURfMTMnCiMgZml0IG1vZGVsCiMgd2lzYzQuZml0ID0gY2ZhKG1vZGVsID0gd2lzYzQubW9kZWwsIAojICAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEsIAojICAgICAgICAgICAgICAgICBzYW1wbGUubm9icyA9IDI1MCwgIAojICAgICAgICAgICAgICAgICBzdGQubHYgPSBUKSAjIGxlYXZlIG9mZiBmb3Igbm93IGFuZCBjYW4gc2VlIHN0YW5kYXJkaXplZCB2ZXJzaW9uIGFmdGVyIGluIG91dHB1dAoKd2lzYzQuZml0ID0gY2ZhKG1vZGVsID0gd2lzYzQubW9kZWwsIAogICAgICAgICAgICAgICAgZGF0YSA9IGNmYV9kYXRhMiwgCiAgICAgICAgICAgICAgICAjIHNhbXBsZS5ub2JzID0gMjUwLCAgCiAgICAgICAgICAgICAgICBzdGQubHYgPSBGQUxTRSkgIyBsZWF2ZSBvZmYgZm9yIG5vdyBhbmQgY2FuIHNlZSBzdGFuZGFyZGl6ZWQgdmVyc2lvbiBhZnRlciBpbiBvdXRwdXQKCgp3aXNjNC5maXRTID0gY2ZhKG1vZGVsID0gd2lzYzQubW9kZWwsIAogICAgICAgICAgICAgICAgZGF0YSA9IGNmYV9kYXRhLCAKICAgICAgICAgICAgICAgICMgc2FtcGxlLm5vYnMgPSAyNTAsICAKICAgICAgICAgICAgICAgIHN0ZC5sdiA9IFQpIAoKYW5vdmEod2lzYzQuZml0Uywgd2lzYzQuZml0UzIsIHdpc2M0LmZpdFMzKQphbm92YSh3aXNjNC5maXRTLCB3aXNjNC5maXRTMikKYW5vdmEod2lzYzQuZml0UzIsIHdpc2M0LmZpdFMzKQoKIyBleGFtaW5lIHBhcmFtZXRlciBlc3RpbWF0ZXMKc3VtbWFyeSh3aXNjNC5maXQsCiAgICAgICAgc3RhbmRhcmRpemVkPVRSVUUsIAogICAgICAgIHJzcXVhcmUgPSBUUlVFLAogICAgICAgIGZpdC5tZWFzdXJlcz1UUlVFKQoKIyNub3RlIHlvdSBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZyAtIAojI2dpdmVzIHlvdSB0aGUgQ0lzCnBhcmFtZXRlcmVzdGltYXRlcyh3aXNjNC5maXQsCiAgICAgICAgICAgICAgICAgICBzdGFuZGFyZGl6ZWQ9VFJVRSkKCiMjb3RoZXIgbmV3IGZ1bmN0aW9ucwpmaXR0ZWQod2lzYzQuZml0KSAjI2xvb2sgYXQgY292IHRhYmxlCnJlc2lkdWFscyh3aXNjNC5maXQpICMjbG9vayBhdCByZXNpZHVhbHMKZml0bWVhc3VyZXMod2lzYzQuZml0KSAjI2ZpdCBpbmRpY2VzCm1vZGlmaWNhdGlvbmluZGljZXMod2lzYzQuZml0KSAjI21vZGlmaWNhdGlvbiBpbmRpY2VzCiAgIyBnaXZlcyB5b3UgdGhlIGRpZmZlcmVudCBhZGRpdGlvbmFsIHBhcnRzIHRvIHRoZSBtb2RlbCBpZiBhIGdpdmVuIHJlYWx0aW9uc2hpcCBpcyBhZGRlZAogICAgIyB0aGUgIm1pIiBjb2x1bW4gc2hvd3MgeW91IGJ5IGhvdyBtdWNoIHRoZSBjaGktc3F1YXJlIHdvdWxkIGRlY3JlYXNlICh3YW50IGl0IGFzIGxvdyBhcyBwb3NzaWJsZSkKICAgICMgc2hvdWxkIGJlIGNhcmVmdWwgc2luY2UgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgbm90IG1ha2UgdGhlb3JldGljYWwgc2Vuc2UsIHVzdWFsbHkgb25seSBtb2RpZnkgaWYgZml0IGluZGljaWVzIGxvb2sgcG9vcgoKIyNkcmF3IHRoZSBtb2RlbAojIHRoZXNlIGFyZSB0aGUgc2FtZT8/CnNlbVBhdGhzKHdpc2M0LmZpdCwgCiAgICAgICAgIHdoYXRMYWJlbHM9InBhciIsIAogICAgICAgICBsYXlvdXQ9InRyZWUiKQoKc2VtUGF0aHMod2lzYzQuZml0LCAKICAgICAgICAgd2hhdExhYmVscz0ic3RkIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCgojI2V4YW1wbGUgMiAtIG9ubHkgc3RhbmRhcmRpemVkIG9uIGxhdGVudAp3aXNjNC5maXQuU3RkID0gY2ZhKHdpc2M0Lm1vZGVsLCAKICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEsIAogICAgICAgICAgICAgICAgICAgICMgc2FtcGxlLm5vYnM9NTUwLCAKICAgICAgICAgICAgICAgICAgICBzdGQubHY9VFJVRSkKd2lzYzQuZml0LlN0ZDIgPSBjZmEod2lzYzQubW9kZWwsIAogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjZmFfZGF0YTIsIAogICAgICAgICAgICAgICAgICAgICMgc2FtcGxlLm5vYnM9NTUwLCAKICAgICAgICAgICAgICAgICAgICBzdGQubHY9RikKCnN1bW1hcnkod2lzYzQuZml0LlN0ZCwKICAgICAgICBzdGFuZGFyZGl6ZWQ9VFJVRSwgCiAgICAgICAgcnNxdWFyZSA9IFRSVUUsCiAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCgpwYXJhbWV0ZXJlc3RpbWF0ZXMod2lzYzQuZml0LlN0ZCwKICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkaXplZD1UUlVFKQpmaXR0ZWQod2lzYzQuZml0LlN0ZCkgIyNsb29rIGF0IGNvdiB0YWJsZQpyZXNpZHVhbHMod2lzYzQuZml0LlN0ZCkgIyNsb29rIGF0IHJlc2lkdWFscwpmaXRtZWFzdXJlcyh3aXNjNC5maXQuU3RkKSAjI2ZpdCBpbmRpY2VzCm1vZGlmaWNhdGlvbmluZGljZXMod2lzYzQuZml0LlN0ZCkgIyNtb2RpZmljYXRpb24gaW5kaWNlcwoKc2VtUGF0aHMod2lzYzQuZml0LlN0ZCwgCiAgICAgICAgIHdoYXRMYWJlbHM9InBhciIsIAogICAgICAgICBsYXlvdXQ9InRyZWUiKQoKIyNleGFtcGxlIDMgLSB0d28gZmFjdG9yIG1vZGVsCndpc2M0Lm1vZGVsMiA8LSAnClYgPX4gU0FEXzEgKyBTQURfMiArIFNBRF8zICsgU0FEXzQgKyBTQURfNSArIFNBRF82IApGID1+IFNBRF84ICsgU0FEXzkgKyBTQURfMTAgKyBTQURfMTEgKyBTQURfMTIKJwp3aXNjNC5tb2RlbDMgPC0gJwpWID1+IFNBRF8xICsgU0FEXzIgKyBTQURfMyArIFNBRF80ICsgU0FEXzUKRiA9fiBTQURfOCArIFNBRF85ICsgU0FEXzEwICsgU0FEXzExClEgPX4gU0FEXzcgKyBTQURfMTIgKyBTQURfMTMKJwp3aXNjNC5maXQyID0gY2ZhKHdpc2M0Lm1vZGVsMiwgCiAgICAgICAgICAgICAgICAgZGF0YSA9IGNmYV9kYXRhMiwgCiAgICAgICAgICAgICAgICAgIyBzYW1wbGUubm9icz01NTAsCiAgICAgICAgICAgICAgICAgc3RkLmx2ID0gRikKCndpc2M0LmZpdDMgPSBjZmEod2lzYzQubW9kZWwzLCAKICAgICAgICAgICAgICAgICBkYXRhID0gY2ZhX2RhdGEyLCAKICAgICAgICAgICAgICAgICAjIHNhbXBsZS5ub2JzPTU1MCwKICAgICAgICAgICAgICAgICBzdGQubHYgPSBGKQoKc3VtbWFyeSh3aXNjNC5maXQyLAogICAgICAgIHN0YW5kYXJkaXplZD1UUlVFLCAKICAgICAgICByc3F1YXJlID0gVFJVRSwKICAgICAgICBmaXQubWVhc3VyZXM9VFJVRSkKCnBhcmFtZXRlcmVzdGltYXRlcyh3aXNjNC5maXQyLAogICAgICAgICAgICAgICAgICAgc3RhbmRhcmRpemVkPVRSVUUpCmZpdHRlZCh3aXNjNC5maXQyKSAjI2xvb2sgYXQgY292IHRhYmxlCnJlc2lkdWFscyh3aXNjNC5maXQyKSAjI2xvb2sgYXQgcmVzaWR1YWxzCmZpdG1lYXN1cmVzKHdpc2M0LmZpdDIpICMjZml0IGluZGljZXMKbW9kaWZpY2F0aW9uaW5kaWNlcyh3aXNjNC5maXQyKSAjI21vZGlmaWNhdGlvbiBpbmRpY2VzCgphbm92YSh3aXNjNC5maXQsIHdpc2M0LmZpdDIpCgpzZW1QYXRocyh3aXNjNC5maXQyLCAKICAgICAgICAgd2hhdExhYmVscz0ic3RkIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCgojI2Z1bGx5IGxhdGVudCBtb2RlbAp3aXNjNFNFTS5tb2RlbCA9ICcKIyBkZWZpbmUgbGF0ZW50IHZhcmlhYmxlcwpWID1+IGEqSW5mb3JtYXRpb24gKyBiKlNpbWlsYXJpdGllcyArIGMqV29yZC5SZWFzb25pbmcgCkYgPX4gZCpNYXRyaXguUmVhc29uaW5nICsgZSpQaWN0dXJlLkNvbmNlcHRzCiMgZGVmaW5lIHN0cnVjdHVyYWwgcmVsYXRpb25zClZ+aypGCicKd2lzYzRTRU0uZml0ID0gY2ZhKHdpc2M0U0VNLm1vZGVsLCAKICAgICAgICAgICAgICAgICAgIHNhbXBsZS5jb3Y9d2lzYzQuY292LCAKICAgICAgICAgICAgICAgICAgIHNhbXBsZS5ub2JzPTU1MCwKICAgICAgICAgICAgICAgICAgIHN0ZC5sdiA9IEYpCgpzdW1tYXJ5KHdpc2M0U0VNLmZpdCwKICAgICAgICBzdGFuZGFyZGl6ZWQ9VFJVRSwgCiAgICAgICAgcnNxdWFyZSA9IFRSVUUsCiAgICAgICAgZml0Lm1lYXN1cmVzPVRSVUUpCgpwYXJhbWV0ZXJlc3RpbWF0ZXMod2lzYzRTRU0uZml0LAogICAgICAgICAgICAgICAgICAgc3RhbmRhcmRpemVkPVRSVUUpCmZpdHRlZCh3aXNjNFNFTS5maXQpICMjbG9vayBhdCBjb3YgdGFibGUKcmVzaWR1YWxzKHdpc2M0U0VNLmZpdCkgIyNsb29rIGF0IHJlc2lkdWFscwpmaXRtZWFzdXJlcyh3aXNjNFNFTS5maXQpICMjZml0IGluZGljZXMKbW9kaWZpY2F0aW9uaW5kaWNlcyh3aXNjNFNFTS5maXQpICMjbW9kaWZpY2F0aW9uIGluZGljZXMKCnNlbVBhdGhzKHdpc2M0LmZpdCwgCiAgICAgICAgIHdoYXRMYWJlbHM9InBhciIsIAogICAgICAgICBsYXlvdXQ9InRyZWUiKQpzZW1QYXRocyh3aXNjNC5maXQyLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZTIiKQpzZW1QYXRocyh3aXNjNC5maXQzLCAKICAgICAgICAgd2hhdExhYmVscz0icGFyIiwgCiAgICAgICAgIGxheW91dD0idHJlZSIpCmBgYA==