For my survey project I decided to gather people’s opinions on LGBT+ representation in television. Participants were given three questions about themselves and then ten statements regarding LGBT+ representation which they would rank on how much they agrred with them. In order to analyze the answers to my survey I turned the data into a csv file and used tidyverse and the read function to input the data into RStudio.
library(tidyverse)
survey <- read_csv("Survey Responses - Form Responses 1.csv")
First I wanted to look at my demographic questions. I had three questions asking the participant’s age, if they were a member of the LGBT+ community, and if they identified with the pronouns they were given at birth. The first code chunk below counts the participants in the different age categories. The majority of participants fell into the 18 to 24 years old and the 40 to 60 years old category.
survey <- survey %>%
mutate(age = as.factor(age))
survey %>%
count(age)
This next code chunk counts how many participants identified as LGBT+. Exactly two-thirds of the participants stated that they were not members of the LGBT+ community.
survey <- survey %>%
mutate(lbgt = as.factor(lgbt))
survey %>%
count(lgbt)
The code chunk below counts the answers from the question about peoples’ pronouns. The vast majority of people that took the survey still use the pronouns they were given at birth.
survey <- survey %>%
mutate(pronouns = as.factor(pronouns))
survey %>%
count(pronouns)
To analyze my survey, I looked at how people answered based on age and if they identified as LGBT+. For the first statement was, “LGBT+ representation is not something I think about when watching television”. The first graph shows how different age categories answered. The majority of 18 to 24 participants somewhat disagreed with the statement. The majority of 25 to 39 participants agreed with the statement. The majority of participants 40 to 60 agreed with the statement. There was only one participant over 60 and they somewhat agreed with the statement. The majority of participants under 18 somewhat agreed with the statements.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q1)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "LGBT+ representation is not something I think about when watching television.")

This graph shows the answers for statement one based on if the participants identified as LGBT+. The majority of participants that did not identify as LGBT+ agreed with the statement. The second most picked answer was that the participant felt neutral towards the statement. The majority of participants that identified as LGBT+ somewhat disagreed with the statement. The second most picked answer for LGBT+ particiapnts was that they disagreed.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q1)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "LGBT+ representation is not something I think about when watching television.")

The second statement was, “When watching television, I often have a harder time finding shows with characters that have the same sexual orientation as me.” For participants ages 18 to 24, there was a pretty even split between agree/somewhat agree answers and disagree/somewhat disagree answers but there were slightly more for agree/somewhat agree. The majority of participants ages in all other age groups disagreed with the statement.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q2)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "When watching television, I often have a harder time finding shows with
characters that have the same sexual orientation as me.")

For the second statement, the majority of participants that disagreed with the statement did not identify as LGBT+ disagreed with the statement. The majority of participants that did somewhat agreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q2)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "When watching television, I often have a harder time finding shows with
characters that have the same sexual orientation as me.")

The third statement was, “I think there is enough representation of the LGBT+ community on television.” The majority of participants ages 18 to 24 overall disagreed/somewhat disagreed with the statement. Participants ages 25 to 39 mostly agreed with the statement. The majority of the participants ages 40 to 60 disagreed/somewhat disagreed with the statement. The over 60 participant disagreed. The majority of participants under 18 somewhat disagreed with the statement.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q3)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "I think there is enough representation of the LGBT+ community on television.")

For the third statement, the majority of participants who did not identify as LGBT+ disagreed/somewhat disagreed with the statement. The majority of participants who did identify as LGBT+ disagreed/somewhat disagreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q3)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "I think there is enough representation of the LGBT+ community on television.")

The fourth statement was “Having more or less LGBT+ representation in television would not impact my viewing experience.” The majority of participants ages 18 to 24 agreed with the statement. The second most picked answer for the age group was neutral. The participants ages 25 to 39 were evenly split on agreed/somewhat agreed and somewhat disagreed/disagreed with the statement. The participants ages 40 to 60 mostly agreed with the statement. The over 60 participant somewhat disagreed with the statement. The particiapnts under 18 were split evenly between agreed, somewhat agreed, and somewhat disagreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q4)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "Having more or less LGBT+ representation in television
would not impact my viewing experience.")

For the fourth statement, the majority of participants that did not identify as LGBT+ agreed with the statement. The majority of participants that do identify as LGBT+ somewhat agreed/agreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q4)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "Having more or less LGBT+ representation in television
would not impact my viewing experience.")

The fifth statement was, “LGBT+ characters in television often do well at accurately representing members of the LGBT+ community.” The majority of participants ages 18 to 24 somewhat disagreed/disagreed with the statement. The vast majority of participants ages 25 to 39 were neutral toward the statement. The majority participants ages 40 to 60 somewhat agreed. The participant over 60 disagreed. The participants under 18 were split evenly between agreed, somewhat agreed, and somewhat disagreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q5)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "LGBT+ characters in television often do well at accurately
representing members of the LGBT+ community.")

For the fifth statement, the majority of participants that did not identify as LGBT+ were neutral toward the statement. The majority of participants that did identify as LGBT+ somewhat disagreed/disagreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q5)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "LGBT+ characters in television often do well at accurately
representing members of the LGBT+ community.")

The sixth statement was, “Relationships between LGBT+ characters in television often do well at representing LGBT+ relationships in satisfying ways.” The majority of participants ages 18 to 24 were neutral toward the statement. The majority of participants ages 25 to 39 were neutral. The majority of participants ages 40 to 60 somewhat agreed. The participant over 60 disagreed. The participants under 18 were split by agreed, somewhat agreed, and somewhat disagreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q6)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "Relationships between LGBT+ characters in television often do well at
representing LGBT+ relationships in satisfying ways.")

For the sixth statement, the majority of participants that did not identify as LGBT+ were neutral toward the statement. The majority of participants that did identify as LGBt+ were split pretty evenly between somewhat agreed/agreed and somewhat disagreed/disagreed.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q6)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "Relationships between LGBT+ characters in television often do well at
representing LGBT+ relationships in satisfying ways.")

The seventh statement was, “Queerbaiting (hinting at a romantic same-sex relationship between two characters but never depicting it) is an acceptable form of LGBT+ representation in television.” Participants ages 18 to 24 overall disagreed/somewhat disagreed with the statement. The majority of participants ages 25 to 39 were neutral towards the statement. The majority of participants ages 40 to 60 disagreed with the statement. The participant over 60 somewhat disagreed with the statement. The majority of participants under 18 disagreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q7)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "Queerbaiting is an acceptable form of LGBT+ representation in television.")

For the seventh statement, the majority of participants that did not identify as LGBT+ disagreed with the statement. The majority of participants who did identify as LGBT+ disagreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q7)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "Queerbaiting is an acceptable form of LGBT+ representation in television.")

The eighth statement was, “Television has done much better at not using negative or harmful stereotypes while depicting LGBT+ characters than it has in the past.” The majority of the 18 to 24, 25 to 39, and over 60 age groups somewhat agreed with the statement. The majority of 40 to 60 and under 18 age groups agreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q8)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "Television has done much better at not using negative or harmful stereotypes
while depicting LGBT+ characters than it has in the past.")

For the eighth statement, the majority of both the participants that did not identify as LGBT+ and the ones that did somewhat agreed with it.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q8)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "Television has done much better at not using negative or harmful stereotypes
while depicting LGBT+ characters than it has in the past.")

The ninth statement was, “I think that there is nothing television needs to do to further improve the portrayal of the LGBT+ community in television.” The majority of participants in the 18 to 24 age group disagreed with the statement. The majority of participants in the 25 to 39 age group were split between agreed/somewhat agreed and disagreed/somewhat disagreed. The majority of participants ages 40 to 60 disagreed/somewhat disagreed. THe participant over 60 disagreed with the statement and the majority of participants under 18 disagreed/somewhat disagreed.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q9)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "I think that there is nothing television needs to do to further improve the
portrayal of the LGBT+ community in television.")

For the ninth statement, the majority of people who did not identify as LGBT+ disagreed/somewhat disagreed with the statement. Overall the participants who did identify as LGBT+ disagreed/somewhat disagreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q9)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "I think that there is nothing television needs to do to further improve the
portrayal of the LGBT+ community in television.")

The tenth statement was, “I think that it is important for television shows to include LGBT+ representation.” The majority of all age groups agreed/somewhat agreed with that statement.
#Age
survey %>%
drop_na() %>%
ggplot(aes(x = age, fill = q10)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Age of Participants",
title = "I think that it is important for television shows to include LGBT+ representation.")

For the tenth statement, the majority of the participants that did not identify as LGBT+ and the ones that did agreed with the statement.
#Are they in the LGBT+ community
survey %>%
drop_na() %>%
ggplot(aes(x = lgbt, fill = q10)) +
geom_bar(position = "fill") +
scale_fill_viridis_d() +
theme_minimal() +
labs(y = "Number of people",
x = "Is the participant a member of the LGBT+ community?",
title = "I think that it is important for television shows to include LGBT+ representation.")

For the most part, participants agreed that there could be more LGBT+ representation on television and that the current representation could improve.
LS0tDQp0aXRsZTogIk9waW5pb25zIG9uIExHQlQrIFJlcHJlc2VudGF0aW9uIGluIFRlbGV2aXNpb24iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpGb3IgbXkgc3VydmV5IHByb2plY3QgSSBkZWNpZGVkIHRvIGdhdGhlciBwZW9wbGUncyBvcGluaW9ucyBvbiBMR0JUKyByZXByZXNlbnRhdGlvbiBpbiB0ZWxldmlzaW9uLiBQYXJ0aWNpcGFudHMgd2VyZSBnaXZlbiB0aHJlZSBxdWVzdGlvbnMgYWJvdXQgdGhlbXNlbHZlcyBhbmQgdGhlbiB0ZW4gc3RhdGVtZW50cyByZWdhcmRpbmcgTEdCVCsgcmVwcmVzZW50YXRpb24gd2hpY2ggdGhleSB3b3VsZCByYW5rIG9uIGhvdyBtdWNoIHRoZXkgYWdycmVkIHdpdGggdGhlbS4gSW4gb3JkZXIgdG8gYW5hbHl6ZSB0aGUgYW5zd2VycyB0byBteSBzdXJ2ZXkgSSB0dXJuZWQgdGhlIGRhdGEgaW50byBhIGNzdiBmaWxlIGFuZCB1c2VkIHRpZHl2ZXJzZSBhbmQgdGhlIHJlYWQgZnVuY3Rpb24gdG8gaW5wdXQgdGhlIGRhdGEgaW50byBSU3R1ZGlvLg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0Kc3VydmV5IDwtIHJlYWRfY3N2KCJTdXJ2ZXkgUmVzcG9uc2VzIC0gRm9ybSBSZXNwb25zZXMgMS5jc3YiKQ0KYGBgDQoNCkZpcnN0IEkgd2FudGVkIHRvIGxvb2sgYXQgbXkgZGVtb2dyYXBoaWMgcXVlc3Rpb25zLiBJIGhhZCB0aHJlZSBxdWVzdGlvbnMgYXNraW5nIHRoZSBwYXJ0aWNpcGFudCdzIGFnZSwgaWYgdGhleSB3ZXJlIGEgbWVtYmVyIG9mIHRoZSBMR0JUKyBjb21tdW5pdHksIGFuZCBpZiB0aGV5IGlkZW50aWZpZWQgd2l0aCB0aGUgcHJvbm91bnMgdGhleSB3ZXJlIGdpdmVuIGF0IGJpcnRoLiBUaGUgZmlyc3QgY29kZSBjaHVuayBiZWxvdyBjb3VudHMgdGhlIHBhcnRpY2lwYW50cyBpbiB0aGUgZGlmZmVyZW50IGFnZSBjYXRlZ29yaWVzLiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGZlbGwgaW50byB0aGUgMTggdG8gMjQgeWVhcnMgb2xkIGFuZCB0aGUgNDAgdG8gNjAgeWVhcnMgb2xkIGNhdGVnb3J5LiANCg0KYGBge3J9DQpzdXJ2ZXkgPC0gc3VydmV5ICU+JSANCiAgbXV0YXRlKGFnZSA9IGFzLmZhY3RvcihhZ2UpKQ0KDQpzdXJ2ZXkgJT4lIA0KICBjb3VudChhZ2UpDQpgYGANCg0KVGhpcyBuZXh0IGNvZGUgY2h1bmsgY291bnRzIGhvdyBtYW55IHBhcnRpY2lwYW50cyBpZGVudGlmaWVkIGFzIExHQlQrLiBFeGFjdGx5IHR3by10aGlyZHMgb2YgdGhlIHBhcnRpY2lwYW50cyBzdGF0ZWQgdGhhdCB0aGV5IHdlcmUgbm90IG1lbWJlcnMgb2YgdGhlIExHQlQrIGNvbW11bml0eS4gDQoNCmBgYHtyfQ0Kc3VydmV5IDwtIHN1cnZleSAlPiUgDQogIG11dGF0ZShsYmd0ID0gYXMuZmFjdG9yKGxnYnQpKQ0KDQpzdXJ2ZXkgJT4lIA0KICBjb3VudChsZ2J0KQ0KYGBgDQoNClRoZSBjb2RlIGNodW5rIGJlbG93IGNvdW50cyB0aGUgYW5zd2VycyBmcm9tIHRoZSBxdWVzdGlvbiBhYm91dCBwZW9wbGVzJyBwcm9ub3Vucy4gVGhlIHZhc3QgbWFqb3JpdHkgb2YgcGVvcGxlIHRoYXQgdG9vayB0aGUgc3VydmV5IHN0aWxsIHVzZSB0aGUgcHJvbm91bnMgdGhleSB3ZXJlIGdpdmVuIGF0IGJpcnRoLiANCg0KYGBge3J9DQpzdXJ2ZXkgPC0gc3VydmV5ICU+JSANCiAgbXV0YXRlKHByb25vdW5zID0gYXMuZmFjdG9yKHByb25vdW5zKSkNCg0Kc3VydmV5ICU+JSANCiAgY291bnQocHJvbm91bnMpDQpgYGANCg0KVG8gYW5hbHl6ZSBteSBzdXJ2ZXksIEkgbG9va2VkIGF0IGhvdyBwZW9wbGUgYW5zd2VyZWQgYmFzZWQgb24gYWdlIGFuZCBpZiB0aGV5IGlkZW50aWZpZWQgYXMgTEdCVCsuIEZvciB0aGUgZmlyc3Qgc3RhdGVtZW50IHdhcywgIkxHQlQrIHJlcHJlc2VudGF0aW9uIGlzIG5vdCBzb21ldGhpbmcgSSB0aGluayBhYm91dCB3aGVuIHdhdGNoaW5nIHRlbGV2aXNpb24iLiBUaGUgZmlyc3QgZ3JhcGggc2hvd3MgaG93IGRpZmZlcmVudCBhZ2UgY2F0ZWdvcmllcyBhbnN3ZXJlZC4gVGhlIG1ham9yaXR5IG9mIDE4IHRvIDI0IHBhcnRpY2lwYW50cyBzb21ld2hhdCBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgbWFqb3JpdHkgb2YgMjUgdG8gMzkgcGFydGljaXBhbnRzIGFncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgNDAgdG8gNjAgYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gVGhlcmUgd2FzIG9ubHkgb25lIHBhcnRpY2lwYW50IG92ZXIgNjAgYW5kIHRoZXkgc29tZXdoYXQgYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB1bmRlciAxOCBzb21ld2hhdCBhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50cy4gDQoNCmBgYHtyfQ0KI0FnZQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCBmaWxsID0gcTEpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIkxHQlQrIHJlcHJlc2VudGF0aW9uIGlzIG5vdCBzb21ldGhpbmcgSSB0aGluayBhYm91dCB3aGVuIHdhdGNoaW5nIHRlbGV2aXNpb24uIikNCmBgYA0KDQpUaGlzIGdyYXBoIHNob3dzIHRoZSBhbnN3ZXJzIGZvciBzdGF0ZW1lbnQgb25lIGJhc2VkIG9uIGlmIHRoZSBwYXJ0aWNpcGFudHMgaWRlbnRpZmllZCBhcyBMR0JUKy4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB0aGF0IGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gVGhlIHNlY29uZCBtb3N0IHBpY2tlZCBhbnN3ZXIgd2FzIHRoYXQgdGhlIHBhcnRpY2lwYW50IGZlbHQgbmV1dHJhbCB0b3dhcmRzIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgdGhhdCBpZGVudGlmaWVkIGFzIExHQlQrIHNvbWV3aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBzZWNvbmQgbW9zdCBwaWNrZWQgYW5zd2VyIGZvciBMR0JUKyBwYXJ0aWNpYXBudHMgd2FzIHRoYXQgdGhleSBkaXNhZ3JlZWQuIA0KDQpgYGB7cn0NCiNBcmUgdGhleSBpbiB0aGUgTEdCVCsgY29tbXVuaXR5DQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsZ2J0LCBmaWxsID0gcTEpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiSXMgdGhlIHBhcnRpY2lwYW50IGEgbWVtYmVyIG9mIHRoZSBMR0JUKyBjb21tdW5pdHk/IiwgDQogICAgICAgdGl0bGUgPSAiTEdCVCsgcmVwcmVzZW50YXRpb24gaXMgbm90IHNvbWV0aGluZyBJIHRoaW5rIGFib3V0IHdoZW4gd2F0Y2hpbmcgdGVsZXZpc2lvbi4iKQ0KYGBgDQoNClRoZSBzZWNvbmQgc3RhdGVtZW50IHdhcywgIldoZW4gd2F0Y2hpbmcgdGVsZXZpc2lvbiwgSSBvZnRlbiBoYXZlIGEgaGFyZGVyIHRpbWUgZmluZGluZyBzaG93cyB3aXRoIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBzYW1lIHNleHVhbCBvcmllbnRhdGlvbiBhcyBtZS4iIEZvciBwYXJ0aWNpcGFudHMgYWdlcyAxOCB0byAyNCwgdGhlcmUgd2FzIGEgcHJldHR5IGV2ZW4gc3BsaXQgYmV0d2VlbiBhZ3JlZS9zb21ld2hhdCBhZ3JlZSBhbnN3ZXJzIGFuZCBkaXNhZ3JlZS9zb21ld2hhdCBkaXNhZ3JlZSBhbnN3ZXJzIGJ1dCB0aGVyZSB3ZXJlIHNsaWdodGx5IG1vcmUgZm9yIGFncmVlL3NvbWV3aGF0IGFncmVlLiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGFnZXMgaW4gYWxsIG90aGVyIGFnZSBncm91cHMgZGlzYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gDQoNCmBgYHtyfQ0KI0FnZQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCBmaWxsID0gcTIpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIldoZW4gd2F0Y2hpbmcgdGVsZXZpc2lvbiwgSSBvZnRlbiBoYXZlIGEgaGFyZGVyIHRpbWUgZmluZGluZyBzaG93cyB3aXRoIA0KICAgICAgIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBzYW1lIHNleHVhbCBvcmllbnRhdGlvbiBhcyBtZS4iKQ0KYGBgDQoNCkZvciB0aGUgc2Vjb25kIHN0YXRlbWVudCwgdGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB0aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQgZGlkIG5vdCBpZGVudGlmeSBhcyBMR0JUKyBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHRoYXQgZGlkIHNvbWV3aGF0IGFncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIA0KDQpgYGB7cn0NCiNBcmUgdGhleSBpbiB0aGUgTEdCVCsgY29tbXVuaXR5DQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsZ2J0LCBmaWxsID0gcTIpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiSXMgdGhlIHBhcnRpY2lwYW50IGEgbWVtYmVyIG9mIHRoZSBMR0JUKyBjb21tdW5pdHk/IiwgDQogICAgICAgdGl0bGUgPSAiV2hlbiB3YXRjaGluZyB0ZWxldmlzaW9uLCBJIG9mdGVuIGhhdmUgYSBoYXJkZXIgdGltZSBmaW5kaW5nIHNob3dzIHdpdGggDQogICAgICAgY2hhcmFjdGVycyB0aGF0IGhhdmUgdGhlIHNhbWUgc2V4dWFsIG9yaWVudGF0aW9uIGFzIG1lLiIpDQpgYGANCg0KVGhlIHRoaXJkIHN0YXRlbWVudCB3YXMsICJJIHRoaW5rIHRoZXJlIGlzIGVub3VnaCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTEdCVCsgY29tbXVuaXR5IG9uIHRlbGV2aXNpb24uIiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGFnZXMgMTggdG8gMjQgb3ZlcmFsbCBkaXNhZ3JlZWQvc29tZXdoYXQgZGlzYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gUGFydGljaXBhbnRzIGFnZXMgMjUgdG8gMzkgbW9zdGx5IGFncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiB0aGUgcGFydGljaXBhbnRzIGFnZXMgNDAgdG8gNjAgZGlzYWdyZWVkL3NvbWV3aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBvdmVyIDYwIHBhcnRpY2lwYW50IGRpc2FncmVlZC4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB1bmRlciAxOCBzb21ld2hhdCBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQWdlDQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIGZpbGwgPSBxMykpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoeSA9ICJOdW1iZXIgb2YgcGVvcGxlIiwgDQogICAgICAgeCA9ICJBZ2Ugb2YgUGFydGljaXBhbnRzIiwgDQogICAgICAgdGl0bGUgPSAiSSB0aGluayB0aGVyZSBpcyBlbm91Z2ggcmVwcmVzZW50YXRpb24gb2YgdGhlIExHQlQrIGNvbW11bml0eSBvbiB0ZWxldmlzaW9uLiIpDQpgYGANCg0KRm9yIHRoZSB0aGlyZCBzdGF0ZW1lbnQsIHRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgd2hvIGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgZGlzYWdyZWVkL3NvbWV3aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgd2hvIGRpZCBpZGVudGlmeSBhcyBMR0JUKyBkaXNhZ3JlZWQvc29tZXdoYXQgZGlzYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gDQoNCmBgYHtyfQ0KI0FyZSB0aGV5IGluIHRoZSBMR0JUKyBjb21tdW5pdHkNCnN1cnZleSAlPiUgDQogIGRyb3BfbmEoKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxnYnQsIGZpbGwgPSBxMykpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoeSA9ICJOdW1iZXIgb2YgcGVvcGxlIiwgDQogICAgICAgeCA9ICJJcyB0aGUgcGFydGljaXBhbnQgYSBtZW1iZXIgb2YgdGhlIExHQlQrIGNvbW11bml0eT8iLCANCiAgICAgICB0aXRsZSA9ICJJIHRoaW5rIHRoZXJlIGlzIGVub3VnaCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTEdCVCsgY29tbXVuaXR5IG9uIHRlbGV2aXNpb24uIikNCmBgYA0KDQpUaGUgZm91cnRoIHN0YXRlbWVudCB3YXMgIkhhdmluZyBtb3JlIG9yIGxlc3MgTEdCVCsgcmVwcmVzZW50YXRpb24gaW4gdGVsZXZpc2lvbiB3b3VsZCBub3QgaW1wYWN0IG15IHZpZXdpbmcgZXhwZXJpZW5jZS4iIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyAxOCB0byAyNCBhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgc2Vjb25kIG1vc3QgcGlja2VkIGFuc3dlciBmb3IgdGhlIGFnZSBncm91cCB3YXMgbmV1dHJhbC4gVGhlIHBhcnRpY2lwYW50cyBhZ2VzIDI1IHRvIDM5IHdlcmUgZXZlbmx5IHNwbGl0IG9uIGFncmVlZC9zb21ld2hhdCBhZ3JlZWQgYW5kIHNvbWV3aGF0IGRpc2FncmVlZC9kaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgcGFydGljaXBhbnRzIGFnZXMgNDAgdG8gNjAgbW9zdGx5IGFncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBvdmVyIDYwIHBhcnRpY2lwYW50IHNvbWV3aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBwYXJ0aWNpYXBudHMgdW5kZXIgMTggd2VyZSBzcGxpdCBldmVubHkgYmV0d2VlbiBhZ3JlZWQsIHNvbWV3aGF0IGFncmVlZCwgYW5kIHNvbWV3aGF0IGRpc2FncmVlZC4gDQoNCmBgYHtyfQ0KI0FnZQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCBmaWxsID0gcTQpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIkhhdmluZyBtb3JlIG9yIGxlc3MgTEdCVCsgcmVwcmVzZW50YXRpb24gaW4gdGVsZXZpc2lvbiANCiAgICAgICB3b3VsZCBub3QgaW1wYWN0IG15IHZpZXdpbmcgZXhwZXJpZW5jZS4iKQ0KYGBgDQoNCkZvciB0aGUgZm91cnRoIHN0YXRlbWVudCwgdGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB0aGF0IGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB0aGF0IGRvIGlkZW50aWZ5IGFzIExHQlQrIHNvbWV3aGF0IGFncmVlZC9hZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQXJlIHRoZXkgaW4gdGhlIExHQlQrIGNvbW11bml0eQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbGdidCwgZmlsbCA9IHE0KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIkhhdmluZyBtb3JlIG9yIGxlc3MgTEdCVCsgcmVwcmVzZW50YXRpb24gaW4gdGVsZXZpc2lvbiANCiAgICAgICB3b3VsZCBub3QgaW1wYWN0IG15IHZpZXdpbmcgZXhwZXJpZW5jZS4iKQ0KYGBgDQoNClRoZSBmaWZ0aCBzdGF0ZW1lbnQgd2FzLCAiTEdCVCsgY2hhcmFjdGVycyBpbiB0ZWxldmlzaW9uIG9mdGVuIGRvIHdlbGwgYXQgYWNjdXJhdGVseSByZXByZXNlbnRpbmcgbWVtYmVycyBvZiB0aGUgTEdCVCsgY29tbXVuaXR5LiIgVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBhZ2VzIDE4IHRvIDI0IHNvbWV3aGF0IGRpc2FncmVlZC9kaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgdmFzdCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyAyNSB0byAzOSB3ZXJlIG5ldXRyYWwgdG93YXJkIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBwYXJ0aWNpcGFudHMgYWdlcyA0MCB0byA2MCBzb21ld2hhdCBhZ3JlZWQuIFRoZSBwYXJ0aWNpcGFudCBvdmVyIDYwIGRpc2FncmVlZC4gVGhlIHBhcnRpY2lwYW50cyB1bmRlciAxOCB3ZXJlIHNwbGl0IGV2ZW5seSBiZXR3ZWVuIGFncmVlZCwgc29tZXdoYXQgYWdyZWVkLCBhbmQgc29tZXdoYXQgZGlzYWdyZWVkLg0KDQpgYGB7cn0NCiNBZ2UNCnN1cnZleSAlPiUgDQogIGRyb3BfbmEoKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGFnZSwgZmlsbCA9IHE1KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIkFnZSBvZiBQYXJ0aWNpcGFudHMiLCANCiAgICAgICB0aXRsZSA9ICJMR0JUKyBjaGFyYWN0ZXJzIGluIHRlbGV2aXNpb24gb2Z0ZW4gZG8gd2VsbCBhdCBhY2N1cmF0ZWx5IA0KICAgICAgIHJlcHJlc2VudGluZyBtZW1iZXJzIG9mIHRoZSBMR0JUKyBjb21tdW5pdHkuIikNCmBgYA0KDQpGb3IgdGhlIGZpZnRoIHN0YXRlbWVudCwgdGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyB0aGF0IGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgd2VyZSBuZXV0cmFsIHRvd2FyZCB0aGUgc3RhdGVtZW50LiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHRoYXQgZGlkIGlkZW50aWZ5IGFzIExHQlQrIHNvbWV3aGF0IGRpc2FncmVlZC9kaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQXJlIHRoZXkgaW4gdGhlIExHQlQrIGNvbW11bml0eQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbGdidCwgZmlsbCA9IHE1KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIkxHQlQrIGNoYXJhY3RlcnMgaW4gdGVsZXZpc2lvbiBvZnRlbiBkbyB3ZWxsIGF0IGFjY3VyYXRlbHkgDQogICAgICAgcmVwcmVzZW50aW5nIG1lbWJlcnMgb2YgdGhlIExHQlQrIGNvbW11bml0eS4iKQ0KYGBgDQoNClRoZSBzaXh0aCBzdGF0ZW1lbnQgd2FzLCAiUmVsYXRpb25zaGlwcyBiZXR3ZWVuIExHQlQrIGNoYXJhY3RlcnMgaW4gdGVsZXZpc2lvbiBvZnRlbiBkbyB3ZWxsIGF0IHJlcHJlc2VudGluZyBMR0JUKyByZWxhdGlvbnNoaXBzIGluIHNhdGlzZnlpbmcgd2F5cy4iIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyAxOCB0byAyNCB3ZXJlIG5ldXRyYWwgdG93YXJkIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyAyNSB0byAzOSB3ZXJlIG5ldXRyYWwuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyA0MCB0byA2MCBzb21ld2hhdCBhZ3JlZWQuIFRoZSBwYXJ0aWNpcGFudCBvdmVyIDYwIGRpc2FncmVlZC4gVGhlIHBhcnRpY2lwYW50cyB1bmRlciAxOCB3ZXJlIHNwbGl0IGJ5IGFncmVlZCwgc29tZXdoYXQgYWdyZWVkLCBhbmQgc29tZXdoYXQgZGlzYWdyZWVkLiANCg0KYGBge3J9DQojQWdlDQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIGZpbGwgPSBxNikpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoeSA9ICJOdW1iZXIgb2YgcGVvcGxlIiwgDQogICAgICAgeCA9ICJBZ2Ugb2YgUGFydGljaXBhbnRzIiwgDQogICAgICAgdGl0bGUgPSAiUmVsYXRpb25zaGlwcyBiZXR3ZWVuIExHQlQrIGNoYXJhY3RlcnMgaW4gdGVsZXZpc2lvbiBvZnRlbiBkbyB3ZWxsIGF0IA0KICAgICAgIHJlcHJlc2VudGluZyBMR0JUKyByZWxhdGlvbnNoaXBzIGluIHNhdGlzZnlpbmcgd2F5cy4iKQ0KYGBgDQoNCkZvciB0aGUgc2l4dGggc3RhdGVtZW50LCB0aGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHRoYXQgZGlkIG5vdCBpZGVudGlmeSBhcyBMR0JUKyB3ZXJlIG5ldXRyYWwgdG93YXJkIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgdGhhdCBkaWQgaWRlbnRpZnkgYXMgTEdCdCsgd2VyZSBzcGxpdCBwcmV0dHkgZXZlbmx5IGJldHdlZW4gc29tZXdoYXQgYWdyZWVkL2FncmVlZCBhbmQgc29tZXdoYXQgZGlzYWdyZWVkL2Rpc2FncmVlZC4gDQoNCmBgYHtyfQ0KI0FyZSB0aGV5IGluIHRoZSBMR0JUKyBjb21tdW5pdHkNCnN1cnZleSAlPiUgDQogIGRyb3BfbmEoKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxnYnQsIGZpbGwgPSBxNikpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoeSA9ICJOdW1iZXIgb2YgcGVvcGxlIiwgDQogICAgICAgeCA9ICJJcyB0aGUgcGFydGljaXBhbnQgYSBtZW1iZXIgb2YgdGhlIExHQlQrIGNvbW11bml0eT8iLCANCiAgICAgICB0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gTEdCVCsgY2hhcmFjdGVycyBpbiB0ZWxldmlzaW9uIG9mdGVuIGRvIHdlbGwgYXQgDQogICAgICAgcmVwcmVzZW50aW5nIExHQlQrIHJlbGF0aW9uc2hpcHMgaW4gc2F0aXNmeWluZyB3YXlzLiIpDQpgYGANCg0KVGhlIHNldmVudGggc3RhdGVtZW50IHdhcywgIlF1ZWVyYmFpdGluZyAoaGludGluZyBhdCBhIHJvbWFudGljIHNhbWUtc2V4IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byBjaGFyYWN0ZXJzIGJ1dCBuZXZlciBkZXBpY3RpbmcgaXQpIGlzIGFuIGFjY2VwdGFibGUgZm9ybSBvZiBMR0JUKyByZXByZXNlbnRhdGlvbiBpbiB0ZWxldmlzaW9uLiIgUGFydGljaXBhbnRzIGFnZXMgMTggdG8gMjQgb3ZlcmFsbCBkaXNhZ3JlZWQvc29tZXdoYXQgZGlzYWdyZWVkIHdpdGggdGhlIHN0YXRlbWVudC4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBhZ2VzIDI1IHRvIDM5IHdlcmUgbmV1dHJhbCB0b3dhcmRzIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYWdlcyA0MCB0byA2MCBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgcGFydGljaXBhbnQgb3ZlciA2MCBzb21ld2hhdCBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHVuZGVyIDE4IGRpc2FncmVlZC4gDQoNCmBgYHtyfQ0KI0FnZQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCBmaWxsID0gcTcpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIlF1ZWVyYmFpdGluZyBpcyBhbiBhY2NlcHRhYmxlIGZvcm0gb2YgTEdCVCsgcmVwcmVzZW50YXRpb24gaW4gdGVsZXZpc2lvbi4iKQ0KYGBgDQoNCkZvciB0aGUgc2V2ZW50aCBzdGF0ZW1lbnQsIHRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgdGhhdCBkaWQgbm90IGlkZW50aWZ5IGFzIExHQlQrIGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgd2hvIGRpZCBpZGVudGlmeSBhcyBMR0JUKyBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQXJlIHRoZXkgaW4gdGhlIExHQlQrIGNvbW11bml0eQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbGdidCwgZmlsbCA9IHE3KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIlF1ZWVyYmFpdGluZyBpcyBhbiBhY2NlcHRhYmxlIGZvcm0gb2YgTEdCVCsgcmVwcmVzZW50YXRpb24gaW4gdGVsZXZpc2lvbi4iKQ0KYGBgDQoNClRoZSBlaWdodGggc3RhdGVtZW50IHdhcywgIlRlbGV2aXNpb24gaGFzIGRvbmUgbXVjaCBiZXR0ZXIgYXQgbm90IHVzaW5nIG5lZ2F0aXZlIG9yIGhhcm1mdWwgc3RlcmVvdHlwZXMgd2hpbGUgZGVwaWN0aW5nIExHQlQrIGNoYXJhY3RlcnMgdGhhbiBpdCBoYXMgaW4gdGhlIHBhc3QuIiBUaGUgbWFqb3JpdHkgb2YgdGhlIDE4IHRvIDI0LCAyNSB0byAzOSwgYW5kIG92ZXIgNjAgYWdlIGdyb3VwcyBzb21ld2hhdCBhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiBUaGUgbWFqb3JpdHkgb2YgNDAgdG8gNjAgYW5kIHVuZGVyIDE4IGFnZSBncm91cHMgYWdyZWVkLiANCg0KYGBge3J9DQojQWdlDQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIGZpbGwgPSBxOCkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnMoeSA9ICJOdW1iZXIgb2YgcGVvcGxlIiwgDQogICAgICAgeCA9ICJBZ2Ugb2YgUGFydGljaXBhbnRzIiwgDQogICAgICAgdGl0bGUgPSAiVGVsZXZpc2lvbiBoYXMgZG9uZSBtdWNoIGJldHRlciBhdCBub3QgdXNpbmcgbmVnYXRpdmUgb3IgaGFybWZ1bCBzdGVyZW90eXBlcyANCiAgICAgICB3aGlsZSBkZXBpY3RpbmcgTEdCVCsgY2hhcmFjdGVycyB0aGFuIGl0IGhhcyBpbiB0aGUgcGFzdC4iKQ0KYGBgDQoNCkZvciB0aGUgZWlnaHRoIHN0YXRlbWVudCwgdGhlIG1ham9yaXR5IG9mIGJvdGggdGhlIHBhcnRpY2lwYW50cyB0aGF0IGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgYW5kIHRoZSBvbmVzIHRoYXQgZGlkIHNvbWV3aGF0IGFncmVlZCB3aXRoIGl0LiANCg0KYGBge3J9DQojQXJlIHRoZXkgaW4gdGhlIExHQlQrIGNvbW11bml0eQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbGdidCwgZmlsbCA9IHE4KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIlRlbGV2aXNpb24gaGFzIGRvbmUgbXVjaCBiZXR0ZXIgYXQgbm90IHVzaW5nIG5lZ2F0aXZlIG9yIGhhcm1mdWwgc3RlcmVvdHlwZXMgDQogICAgICAgd2hpbGUgZGVwaWN0aW5nIExHQlQrIGNoYXJhY3RlcnMgdGhhbiBpdCBoYXMgaW4gdGhlIHBhc3QuIikNCmBgYA0KDQpUaGUgbmludGggc3RhdGVtZW50IHdhcywgIkkgdGhpbmsgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRlbGV2aXNpb24gbmVlZHMgdG8gZG8gdG8gZnVydGhlciBpbXByb3ZlIHRoZSBwb3J0cmF5YWwgb2YgdGhlIExHQlQrIGNvbW11bml0eSBpbiB0ZWxldmlzaW9uLiIgVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBpbiB0aGUgMTggdG8gMjQgYWdlIGdyb3VwIGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIFRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gdGhlIDI1IHRvIDM5IGFnZSBncm91cCB3ZXJlIHNwbGl0IGJldHdlZW4gYWdyZWVkL3NvbWV3aGF0IGFncmVlZCBhbmQgZGlzYWdyZWVkL3NvbWV3aGF0IGRpc2FncmVlZC4gVGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBhZ2VzIDQwIHRvIDYwIGRpc2FncmVlZC9zb21ld2hhdCBkaXNhZ3JlZWQuIFRIZSBwYXJ0aWNpcGFudCBvdmVyIDYwIGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQgYW5kIHRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgdW5kZXIgMTggZGlzYWdyZWVkL3NvbWV3aGF0IGRpc2FncmVlZC4gDQoNCmBgYHtyfQ0KI0FnZQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCBmaWxsID0gcTkpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIkkgdGhpbmsgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRlbGV2aXNpb24gbmVlZHMgdG8gZG8gdG8gZnVydGhlciBpbXByb3ZlIHRoZSANCiAgICAgICBwb3J0cmF5YWwgb2YgdGhlIExHQlQrIGNvbW11bml0eSBpbiB0ZWxldmlzaW9uLiIpDQpgYGANCg0KRm9yIHRoZSBuaW50aCBzdGF0ZW1lbnQsIHRoZSBtYWpvcml0eSBvZiBwZW9wbGUgd2hvIGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgZGlzYWdyZWVkL3NvbWV3aGF0IGRpc2FncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIE92ZXJhbGwgdGhlIHBhcnRpY2lwYW50cyB3aG8gZGlkIGlkZW50aWZ5IGFzIExHQlQrIGRpc2FncmVlZC9zb21ld2hhdCBkaXNhZ3JlZWQgd2l0aCB0aGUgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQXJlIHRoZXkgaW4gdGhlIExHQlQrIGNvbW11bml0eQ0Kc3VydmV5ICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbGdidCwgZmlsbCA9IHE5KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIkkgdGhpbmsgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRlbGV2aXNpb24gbmVlZHMgdG8gZG8gdG8gZnVydGhlciBpbXByb3ZlIHRoZSANCiAgICAgICBwb3J0cmF5YWwgb2YgdGhlIExHQlQrIGNvbW11bml0eSBpbiB0ZWxldmlzaW9uLiIpDQpgYGANCg0KVGhlIHRlbnRoIHN0YXRlbWVudCB3YXMsICJJIHRoaW5rIHRoYXQgaXQgaXMgaW1wb3J0YW50IGZvciB0ZWxldmlzaW9uIHNob3dzIHRvIGluY2x1ZGUgTEdCVCsgcmVwcmVzZW50YXRpb24uIiBUaGUgbWFqb3JpdHkgb2YgYWxsIGFnZSBncm91cHMgYWdyZWVkL3NvbWV3aGF0IGFncmVlZCB3aXRoIHRoYXQgc3RhdGVtZW50LiANCg0KYGBge3J9DQojQWdlDQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIGZpbGwgPSBxMTApKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHkgPSAiTnVtYmVyIG9mIHBlb3BsZSIsIA0KICAgICAgIHggPSAiQWdlIG9mIFBhcnRpY2lwYW50cyIsIA0KICAgICAgIHRpdGxlID0gIkkgdGhpbmsgdGhhdCBpdCBpcyBpbXBvcnRhbnQgZm9yIHRlbGV2aXNpb24gc2hvd3MgdG8gaW5jbHVkZSBMR0JUKyByZXByZXNlbnRhdGlvbi4iKQ0KYGBgDQoNCkZvciB0aGUgdGVudGggc3RhdGVtZW50LCB0aGUgbWFqb3JpdHkgb2YgdGhlIHBhcnRpY2lwYW50cyB0aGF0IGRpZCBub3QgaWRlbnRpZnkgYXMgTEdCVCsgYW5kIHRoZSBvbmVzIHRoYXQgZGlkIGFncmVlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuIA0KDQpgYGB7cn0NCiNBcmUgdGhleSBpbiB0aGUgTEdCVCsgY29tbXVuaXR5DQpzdXJ2ZXkgJT4lIA0KICBkcm9wX25hKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsZ2J0LCBmaWxsID0gcTEwKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh5ID0gIk51bWJlciBvZiBwZW9wbGUiLCANCiAgICAgICB4ID0gIklzIHRoZSBwYXJ0aWNpcGFudCBhIG1lbWJlciBvZiB0aGUgTEdCVCsgY29tbXVuaXR5PyIsIA0KICAgICAgIHRpdGxlID0gIkkgdGhpbmsgdGhhdCBpdCBpcyBpbXBvcnRhbnQgZm9yIHRlbGV2aXNpb24gc2hvd3MgdG8gaW5jbHVkZSBMR0JUKyByZXByZXNlbnRhdGlvbi4iKQ0KYGBgDQoNCkZvciB0aGUgbW9zdCBwYXJ0LCBwYXJ0aWNpcGFudHMgYWdyZWVkIHRoYXQgdGhlcmUgY291bGQgYmUgbW9yZSBMR0JUKyByZXByZXNlbnRhdGlvbiBvbiB0ZWxldmlzaW9uIGFuZCB0aGF0IHRoZSBjdXJyZW50IHJlcHJlc2VudGF0aW9uIGNvdWxkIGltcHJvdmUuIA0K