file.exists("C:\\Users\\Yash\\Desktop\\Mental Health Data\\Mental Health Analysis\\mental_health_finaldata_1.csv")
[1] FALSE
df <- read.csv("mental_health_finaldata_1.csv")

#Exploring the Dataset:

head(df)

#Summarising the Dataset:

summary(df)
     Age               Gender           Occupation        Days_Indoors      
 Length:824         Length:824         Length:824         Length:824        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 Growing_Stress     Quarantine_Frustrations Changes_Habits     Mental_Health_History
 Length:824         Length:824              Length:824         Length:824           
 Class :character   Class :character        Class :character   Class :character     
 Mode  :character   Mode  :character        Mode  :character   Mode  :character     
 Weight_Change      Mood_Swings        Coping_Struggles   Work_Interest     
 Length:824         Length:824         Length:824         Length:824        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 Social_Weakness   
 Length:824        
 Class :character  
 Mode  :character  

#Checking for NA Values:

str(df)
'data.frame':   824 obs. of  13 variables:
 $ Age                    : chr  "20-25" "30-Above" "30-Above" "25-30" ...
 $ Gender                 : chr  "Female" "Male" "Female" "Male" ...
 $ Occupation             : chr  "Corporate" "Others" "Student" "Others" ...
 $ Days_Indoors           : chr  "1-14 days" "31-60 days" "Go out Every day" "1-14 days" ...
 $ Growing_Stress         : chr  "Yes" "Yes" "No" "Yes" ...
 $ Quarantine_Frustrations: chr  "Yes" "Yes" "No" "No" ...
 $ Changes_Habits         : chr  "No" "Maybe" "Yes" "Maybe" ...
 $ Mental_Health_History  : chr  "Yes" "No" "No" "No" ...
 $ Weight_Change          : chr  "Yes" "No" "No" "Maybe" ...
 $ Mood_Swings            : chr  "Medium" "High" "Medium" "Medium" ...
 $ Coping_Struggles       : chr  "No" "No" "Yes" "No" ...
 $ Work_Interest          : chr  "No" "No" "Maybe" "Maybe" ...
 $ Social_Weakness        : chr  "Yes" "Yes" "No" "Yes" ...
sum(is.na(df))
[1] 0

#Importing the ggplot and tidyverse libraries:

library(ggplot2,tidyverse)

#Gender distribution:

gender_counts <- table(df$Gender)
gender_percentages <- prop.table(gender_counts) * 100
pie(gender_counts, labels = paste(names(gender_counts), sprintf("%.1f%%", gender_percentages)), main = "Gender Distribution")

#Observation: The data set is more female oriented, with females taking up to 52.7% of the data set.

#Age Category distribution:

ggplot(df, aes(x = factor(Age, levels = c("16-20", "20-25", "25-30", "30-Above")), fill = Age)) + 
  geom_bar() +
  labs(title = "Distribution of Age Categories", x = "Age Categories", y = "Count") + 
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Observation: The data set comprises of people aged 30 and above.

We can also observe that the focus is also on the youth, with age bracket 16-20 being involved heavily in the data mining/collection.

#Distribution by Occupation:

ggplot(df, aes(x = factor(Occupation, levels = c("Business","Corporate","Housewife","Others","Student")), fill = Occupation))+
  geom_bar()+
  labs(title = "Occupation Distribution", x = "Occupation", y = "Count")+
  theme_dark()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Observation:

It can be observed that majority of the people of the data set are housewives.

It also includes students, as observed earlier that the data set also includes youth more.

#Visual relationship between stress and weight gain:

ggplot(df, aes(x = Growing_Stress, fill = Weight_Change))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Weight Change across Growing Stress Categories", x = "Growing Stress", y = "Count")+
  theme_bw()

#Observation: The weight change appears to be normally distributed around zero, with most data points falling within the range of -30 to 30.

There is a small but noticeable skew towards negative weight change, meaning that there are slightly more data points showing weight loss than weight gain.

The distribution of weight change appears to be similar across all three growing stress categories (“Maybe”, “No”, and “Yes”).

#Visual representation of Habit changes in accordance with Growing Stress:

ggplot(df, aes(x = Growing_Stress, fill = Changes_Habits))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Change in Habits across Growing Stress Categories", x = "Growing Stress", y = "Count")+
  theme_bw()

#Observations: The bar for “Maybe” in the “Yes” stress category is the tallest, which means that there are more data points where people reported significant changes in habits when they perceived high stress.

there is a relationship between stress and changes in habits. People who perceive more stress are more likely to report changes in their habits, and these changes are more likely to be significant.

#Visual representation of mood swings in accordance with growing stress:

ggplot(df, aes(x = Growing_Stress, fill = Mood_Swings))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Change in Mood across Growing Stress Categories", x = "Growing Stress", y = "Count")+
  theme_bw()

#Observations: The bar for “High” in “Yes” suggests that there are more people who reported feeling much more negative when they perceived high stress.

there is a relationship between growing stress and mood swings. People who perceive more stress are more likely to report feeling more negative moods.

#Distribution of Struggles across growing stress:

ggplot(df, aes(x = Growing_Stress, fill = Coping_Struggles))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Coping Struggles across Growing Stress Categories", x = "Growing Stress", y = "Count")+
  theme_bw()

#Observations: There is a positive relationship between coping struggles and stress. People who perceive more stress are more likely to report experiencing coping struggles.

#Distribution of social weakness across growing stress:

ggplot(df, aes(x = Growing_Stress, fill = Social_Weakness))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Social Weakness across Growing Stress Categories", x = "Growing Stress", y = "Count")+
  theme_bw()

#Observations: There is a positive relationship between stress and social weakness. People who experience more stress tend to report feeling more socially weak.

#Distribution of change in habits across mental health history:

ggplot(df, aes(x = Mental_Health_History, fill = Changes_Habits))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Change in Habits across Mental Health History", x = "Mental Health History", y = "Count")+
  theme_bw()

#Observations: The distribution of changes in habits appears to be similar across all three mental health history categories. There is no clear pattern to suggest that people with a history of mental health problems are more or less likely to report changes in their habits.The graph does not provide strong evidence for a relationship between mental health history and changes in habits.

#Distribution of struggles across mental health history:

ggplot(df, aes(x = Mental_Health_History, fill = Coping_Struggles))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Struggles across Mental Health History", x = "Mental Health History", y = "Count")+
  theme_bw()

#Observations: There is a positive relationship between struggles and mental health issues. Someone with a history of mental health issues is struggling in daily life.

#Distribution of social weakness across mental health history:

ggplot(df, aes(x = Mental_Health_History, fill = Social_Weakness))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Social Weakness across Mental Health History", x = "Mental Health History", y = "Count")+
  theme_bw()

#Observations: There is a potential correlation between a history of mental health issues and increased social weakness. People with a histry of menatal health issues struggle socially and are weak in their social life.

#Distribution of occupation by gender:

ggplot(df, aes(x = Gender, fill = Occupation))+
  geom_bar(position = "dodge")+
  labs(title = "Distribution of Occupation by Gender",x = "Gender", y = "Count")+
  theme_minimal()

#Observations: Women - most of the women surveyed for this data set are students and housewives. Men - as compared to women, surprisingly, women are more into business than men. The data set shows that most of the men are into corporate jobs and also help at home with household.̥

LS0tDQp0aXRsZTogIk1lbnRhbCBIZWFsdGggQW5hbHlzaXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmZpbGUuZXhpc3RzKCJDOlxcVXNlcnNcXFlhc2hcXERlc2t0b3BcXE1lbnRhbCBIZWFsdGggRGF0YVxcTWVudGFsIEhlYWx0aCBBbmFseXNpc1xcbWVudGFsX2hlYWx0aF9maW5hbGRhdGFfMS5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0KZGYgPC0gcmVhZC5jc3YoIm1lbnRhbF9oZWFsdGhfZmluYWxkYXRhXzEuY3N2IikNCmBgYA0KDQojRXhwbG9yaW5nIHRoZSBEYXRhc2V0Og0KDQpgYGB7cn0NCmhlYWQoZGYpDQpgYGANCg0KI1N1bW1hcmlzaW5nIHRoZSBEYXRhc2V0Og0KDQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpgYGANCg0KI0NoZWNraW5nIGZvciBOQSBWYWx1ZXM6DQoNCmBgYHtyfQ0Kc3RyKGRmKQ0Kc3VtKGlzLm5hKGRmKSkNCmBgYA0KDQojSW1wb3J0aW5nIHRoZSBnZ3Bsb3QgYW5kIHRpZHl2ZXJzZSBsaWJyYXJpZXM6DQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyLHRpZHl2ZXJzZSkNCmBgYA0KDQojR2VuZGVyIGRpc3RyaWJ1dGlvbjoNCg0KYGBge3J9DQpnZW5kZXJfY291bnRzIDwtIHRhYmxlKGRmJEdlbmRlcikNCmdlbmRlcl9wZXJjZW50YWdlcyA8LSBwcm9wLnRhYmxlKGdlbmRlcl9jb3VudHMpICogMTAwDQpwaWUoZ2VuZGVyX2NvdW50cywgbGFiZWxzID0gcGFzdGUobmFtZXMoZ2VuZGVyX2NvdW50cyksIHNwcmludGYoIiUuMWYlJSIsIGdlbmRlcl9wZXJjZW50YWdlcykpLCBtYWluID0gIkdlbmRlciBEaXN0cmlidXRpb24iKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9uKjogVGhlIGRhdGEgc2V0IGlzIG1vcmUgZmVtYWxlIG9yaWVudGVkLCB3aXRoIGZlbWFsZXMgdGFraW5nIHVwIHRvIDUyLjclIG9mIHRoZSBkYXRhIHNldC4NCg0KI0FnZSBDYXRlZ29yeSBkaXN0cmlidXRpb246DQoNCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoeCA9IGZhY3RvcihBZ2UsIGxldmVscyA9IGMoIjE2LTIwIiwgIjIwLTI1IiwgIjI1LTMwIiwgIjMwLUFib3ZlIikpLCBmaWxsID0gQWdlKSkgKyANCiAgZ2VvbV9iYXIoKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIEFnZSBDYXRlZ29yaWVzIiwgeCA9ICJBZ2UgQ2F0ZWdvcmllcyIsIHkgPSAiQ291bnQiKSArIA0KICB0aGVtZV9taW5pbWFsKCkgKyANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQpcIypPYnNlcnZhdGlvbio6IFRoZSBkYXRhIHNldCBjb21wcmlzZXMgb2YgcGVvcGxlIGFnZWQgMzAgYW5kIGFib3ZlLg0KDQpXZSBjYW4gYWxzbyBvYnNlcnZlIHRoYXQgdGhlIGZvY3VzIGlzIGFsc28gb24gdGhlIHlvdXRoLCB3aXRoIGFnZSBicmFja2V0IDE2LTIwIGJlaW5nIGludm9sdmVkIGhlYXZpbHkgaW4gdGhlIGRhdGEgbWluaW5nL2NvbGxlY3Rpb24uDQoNCiNEaXN0cmlidXRpb24gYnkgT2NjdXBhdGlvbjoNCg0KYGBge3J9DQpnZ3Bsb3QoZGYsIGFlcyh4ID0gZmFjdG9yKE9jY3VwYXRpb24sIGxldmVscyA9IGMoIkJ1c2luZXNzIiwiQ29ycG9yYXRlIiwiSG91c2V3aWZlIiwiT3RoZXJzIiwiU3R1ZGVudCIpKSwgZmlsbCA9IE9jY3VwYXRpb24pKSsNCiAgZ2VvbV9iYXIoKSsNCiAgbGFicyh0aXRsZSA9ICJPY2N1cGF0aW9uIERpc3RyaWJ1dGlvbiIsIHggPSAiT2NjdXBhdGlvbiIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfZGFyaygpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9uKjoNCg0KSXQgY2FuIGJlIG9ic2VydmVkIHRoYXQgbWFqb3JpdHkgb2YgdGhlIHBlb3BsZSBvZiB0aGUgZGF0YSBzZXQgYXJlIGhvdXNld2l2ZXMuDQoNCkl0IGFsc28gaW5jbHVkZXMgc3R1ZGVudHMsIGFzIG9ic2VydmVkIGVhcmxpZXIgdGhhdCB0aGUgZGF0YSBzZXQgYWxzbyBpbmNsdWRlcyB5b3V0aCBtb3JlLg0KDQojVmlzdWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN0cmVzcyBhbmQgd2VpZ2h0IGdhaW46DQoNCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoeCA9IEdyb3dpbmdfU3RyZXNzLCBmaWxsID0gV2VpZ2h0X0NoYW5nZSkpKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBXZWlnaHQgQ2hhbmdlIGFjcm9zcyBHcm93aW5nIFN0cmVzcyBDYXRlZ29yaWVzIiwgeCA9ICJHcm93aW5nIFN0cmVzcyIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9uKjogVGhlIHdlaWdodCBjaGFuZ2UgYXBwZWFycyB0byBiZSBub3JtYWxseSBkaXN0cmlidXRlZCBhcm91bmQgemVybywgd2l0aCBtb3N0IGRhdGEgcG9pbnRzIGZhbGxpbmcgd2l0aGluIHRoZSByYW5nZSBvZiAtMzAgdG8gMzAuDQoNClRoZXJlIGlzIGEgc21hbGwgYnV0IG5vdGljZWFibGUgc2tldyB0b3dhcmRzIG5lZ2F0aXZlIHdlaWdodCBjaGFuZ2UsIG1lYW5pbmcgdGhhdCB0aGVyZSBhcmUgc2xpZ2h0bHkgbW9yZSBkYXRhIHBvaW50cyBzaG93aW5nIHdlaWdodCBsb3NzIHRoYW4gd2VpZ2h0IGdhaW4uDQoNClRoZSBkaXN0cmlidXRpb24gb2Ygd2VpZ2h0IGNoYW5nZSBhcHBlYXJzIHRvIGJlIHNpbWlsYXIgYWNyb3NzIGFsbCB0aHJlZSBncm93aW5nIHN0cmVzcyBjYXRlZ29yaWVzICgiTWF5YmUiLCAiTm8iLCBhbmQgIlllcyIpLg0KDQojVmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIEhhYml0IGNoYW5nZXMgaW4gYWNjb3JkYW5jZSB3aXRoIEdyb3dpbmcgU3RyZXNzOg0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHggPSBHcm93aW5nX1N0cmVzcywgZmlsbCA9IENoYW5nZXNfSGFiaXRzKSkrDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikrDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIENoYW5nZSBpbiBIYWJpdHMgYWNyb3NzIEdyb3dpbmcgU3RyZXNzIENhdGVnb3JpZXMiLCB4ID0gIkdyb3dpbmcgU3RyZXNzIiwgeSA9ICJDb3VudCIpKw0KICB0aGVtZV9idygpDQpgYGANCg0KXCMqT2JzZXJ2YXRpb25zKjogVGhlIGJhciBmb3IgIk1heWJlIiBpbiB0aGUgIlllcyIgc3RyZXNzIGNhdGVnb3J5IGlzIHRoZSB0YWxsZXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGFyZSBtb3JlIGRhdGEgcG9pbnRzIHdoZXJlIHBlb3BsZSByZXBvcnRlZCBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhhYml0cyB3aGVuIHRoZXkgcGVyY2VpdmVkIGhpZ2ggc3RyZXNzLg0KDQp0aGVyZSBpcyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN0cmVzcyBhbmQgY2hhbmdlcyBpbiBoYWJpdHMuIFBlb3BsZSB3aG8gcGVyY2VpdmUgbW9yZSBzdHJlc3MgYXJlIG1vcmUgbGlrZWx5IHRvIHJlcG9ydCBjaGFuZ2VzIGluIHRoZWlyIGhhYml0cywgYW5kIHRoZXNlIGNoYW5nZXMgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIHNpZ25pZmljYW50Lg0KDQojVmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIG1vb2Qgc3dpbmdzIGluIGFjY29yZGFuY2Ugd2l0aCBncm93aW5nIHN0cmVzczoNCg0KYGBge3J9DQpnZ3Bsb3QoZGYsIGFlcyh4ID0gR3Jvd2luZ19TdHJlc3MsIGZpbGwgPSBNb29kX1N3aW5ncykpKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBDaGFuZ2UgaW4gTW9vZCBhY3Jvc3MgR3Jvd2luZyBTdHJlc3MgQ2F0ZWdvcmllcyIsIHggPSAiR3Jvd2luZyBTdHJlc3MiLCB5ID0gIkNvdW50IikrDQogIHRoZW1lX2J3KCkNCmBgYA0KDQpcIypPYnNlcnZhdGlvbnMqOiBUaGUgYmFyIGZvciAiSGlnaCIgaW4gIlllcyIgc3VnZ2VzdHMgdGhhdCB0aGVyZSBhcmUgbW9yZSBwZW9wbGUgd2hvIHJlcG9ydGVkIGZlZWxpbmcgbXVjaCBtb3JlIG5lZ2F0aXZlIHdoZW4gdGhleSBwZXJjZWl2ZWQgaGlnaCBzdHJlc3MuDQoNCnRoZXJlIGlzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gZ3Jvd2luZyBzdHJlc3MgYW5kIG1vb2Qgc3dpbmdzLiBQZW9wbGUgd2hvIHBlcmNlaXZlIG1vcmUgc3RyZXNzIGFyZSBtb3JlIGxpa2VseSB0byByZXBvcnQgZmVlbGluZyBtb3JlIG5lZ2F0aXZlIG1vb2RzLg0KDQojRGlzdHJpYnV0aW9uIG9mIFN0cnVnZ2xlcyBhY3Jvc3MgZ3Jvd2luZyBzdHJlc3M6DQoNCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoeCA9IEdyb3dpbmdfU3RyZXNzLCBmaWxsID0gQ29waW5nX1N0cnVnZ2xlcykpKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBDb3BpbmcgU3RydWdnbGVzIGFjcm9zcyBHcm93aW5nIFN0cmVzcyBDYXRlZ29yaWVzIiwgeCA9ICJHcm93aW5nIFN0cmVzcyIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9ucyo6IFRoZXJlIGlzIGEgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gY29waW5nIHN0cnVnZ2xlcyBhbmQgc3RyZXNzLiBQZW9wbGUgd2hvIHBlcmNlaXZlIG1vcmUgc3RyZXNzIGFyZSBtb3JlIGxpa2VseSB0byByZXBvcnQgZXhwZXJpZW5jaW5nIGNvcGluZyBzdHJ1Z2dsZXMuDQoNCiNEaXN0cmlidXRpb24gb2Ygc29jaWFsIHdlYWtuZXNzIGFjcm9zcyBncm93aW5nIHN0cmVzczoNCg0KYGBge3J9DQpnZ3Bsb3QoZGYsIGFlcyh4ID0gR3Jvd2luZ19TdHJlc3MsIGZpbGwgPSBTb2NpYWxfV2Vha25lc3MpKSsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKSsNCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb24gb2YgU29jaWFsIFdlYWtuZXNzIGFjcm9zcyBHcm93aW5nIFN0cmVzcyBDYXRlZ29yaWVzIiwgeCA9ICJHcm93aW5nIFN0cmVzcyIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9uczoqIFRoZXJlIGlzIGEgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3RyZXNzIGFuZCBzb2NpYWwgd2Vha25lc3MuIFBlb3BsZSB3aG8gZXhwZXJpZW5jZSBtb3JlIHN0cmVzcyB0ZW5kIHRvIHJlcG9ydCBmZWVsaW5nIG1vcmUgc29jaWFsbHkgd2Vhay4NCg0KI0Rpc3RyaWJ1dGlvbiBvZiBjaGFuZ2UgaW4gaGFiaXRzIGFjcm9zcyBtZW50YWwgaGVhbHRoIGhpc3Rvcnk6DQoNCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoeCA9IE1lbnRhbF9IZWFsdGhfSGlzdG9yeSwgZmlsbCA9IENoYW5nZXNfSGFiaXRzKSkrDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikrDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIENoYW5nZSBpbiBIYWJpdHMgYWNyb3NzIE1lbnRhbCBIZWFsdGggSGlzdG9yeSIsIHggPSAiTWVudGFsIEhlYWx0aCBIaXN0b3J5IiwgeSA9ICJDb3VudCIpKw0KICB0aGVtZV9idygpDQpgYGANCg0KXCMqT2JzZXJ2YXRpb25zOiogVGhlIGRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VzIGluIGhhYml0cyBhcHBlYXJzIHRvIGJlIHNpbWlsYXIgYWNyb3NzIGFsbCB0aHJlZSBtZW50YWwgaGVhbHRoIGhpc3RvcnkgY2F0ZWdvcmllcy4gVGhlcmUgaXMgbm8gY2xlYXIgcGF0dGVybiB0byBzdWdnZXN0IHRoYXQgcGVvcGxlIHdpdGggYSBoaXN0b3J5IG9mIG1lbnRhbCBoZWFsdGggcHJvYmxlbXMgYXJlIG1vcmUgb3IgbGVzcyBsaWtlbHkgdG8gcmVwb3J0IGNoYW5nZXMgaW4gdGhlaXIgaGFiaXRzLlRoZSBncmFwaCBkb2VzIG5vdCBwcm92aWRlIHN0cm9uZyBldmlkZW5jZSBmb3IgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgaGVhbHRoIGhpc3RvcnkgYW5kIGNoYW5nZXMgaW4gaGFiaXRzLg0KDQojRGlzdHJpYnV0aW9uIG9mIHN0cnVnZ2xlcyBhY3Jvc3MgbWVudGFsIGhlYWx0aCBoaXN0b3J5Og0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHggPSBNZW50YWxfSGVhbHRoX0hpc3RvcnksIGZpbGwgPSBDb3BpbmdfU3RydWdnbGVzKSkrDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikrDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIFN0cnVnZ2xlcyBhY3Jvc3MgTWVudGFsIEhlYWx0aCBIaXN0b3J5IiwgeCA9ICJNZW50YWwgSGVhbHRoIEhpc3RvcnkiLCB5ID0gIkNvdW50IikrDQogIHRoZW1lX2J3KCkNCmBgYA0KDQpcIypPYnNlcnZhdGlvbnM6KiBUaGVyZSBpcyBhIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN0cnVnZ2xlcyBhbmQgbWVudGFsIGhlYWx0aCBpc3N1ZXMuIFNvbWVvbmUgd2l0aCBhIGhpc3Rvcnkgb2YgbWVudGFsIGhlYWx0aCBpc3N1ZXMgaXMgc3RydWdnbGluZyBpbiBkYWlseSBsaWZlLg0KDQojRGlzdHJpYnV0aW9uIG9mIHNvY2lhbCB3ZWFrbmVzcyBhY3Jvc3MgbWVudGFsIGhlYWx0aCBoaXN0b3J5Og0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHggPSBNZW50YWxfSGVhbHRoX0hpc3RvcnksIGZpbGwgPSBTb2NpYWxfV2Vha25lc3MpKSsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKSsNCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb24gb2YgU29jaWFsIFdlYWtuZXNzIGFjcm9zcyBNZW50YWwgSGVhbHRoIEhpc3RvcnkiLCB4ID0gIk1lbnRhbCBIZWFsdGggSGlzdG9yeSIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNClwjKk9ic2VydmF0aW9uczoqIFRoZXJlIGlzIGEgcG90ZW50aWFsIGNvcnJlbGF0aW9uIGJldHdlZW4gYSBoaXN0b3J5IG9mIG1lbnRhbCBoZWFsdGggaXNzdWVzIGFuZCBpbmNyZWFzZWQgc29jaWFsIHdlYWtuZXNzLiBQZW9wbGUgd2l0aCBhIGhpc3RyeSBvZiBtZW5hdGFsIGhlYWx0aCBpc3N1ZXMgc3RydWdnbGUgc29jaWFsbHkgYW5kIGFyZSB3ZWFrIGluIHRoZWlyIHNvY2lhbCBsaWZlLg0KDQojRGlzdHJpYnV0aW9uIG9mIG9jY3VwYXRpb24gYnkgZ2VuZGVyOg0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHggPSBHZW5kZXIsIGZpbGwgPSBPY2N1cGF0aW9uKSkrDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikrDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIE9jY3VwYXRpb24gYnkgR2VuZGVyIix4ID0gIkdlbmRlciIsIHkgPSAiQ291bnQiKSsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KXCMqT2JzZXJ2YXRpb25zOiogV29tZW4gLSBtb3N0IG9mIHRoZSB3b21lbiBzdXJ2ZXllZCBmb3IgdGhpcyBkYXRhIHNldCBhcmUgc3R1ZGVudHMgYW5kIGhvdXNld2l2ZXMuIE1lbiAtIGFzIGNvbXBhcmVkIHRvIHdvbWVuLCBzdXJwcmlzaW5nbHksIHdvbWVuIGFyZSBtb3JlIGludG8gYnVzaW5lc3MgdGhhbiBtZW4uIFRoZSBkYXRhIHNldCBzaG93cyB0aGF0IG1vc3Qgb2YgdGhlIG1lbiBhcmUgaW50byBjb3Jwb3JhdGUgam9icyBhbmQgYWxzbyBoZWxwIGF0IGhvbWUgd2l0aCBob3VzZWhvbGQuzKU=