# Clear workspace:
# rm(list = ls())
# # Load some packages:
library(rvest)
library(tidyverse)
library(magrittr)
#
# # A function collect Vietnam population data for both sexes with input is a given year:
#
# get_population_by_year <- function(year_selected) {
# base_url <- "https://www.census.gov/data-tools/demo/idb/region.php?N=%20Results%20&T=15&A=separate&RT=0&Y="
# link <- paste0(base_url, year_selected, "&R=-1&C=VM")
#
# link %>%
# read_html() %>%
# html_table(fill = TRUE) %>%
# .[[1]] -> pop_df
#
# names(pop_df) <- str_replace_all(names(pop_df), " ", "_")
# return(pop_df)
#
# }
#
# # Get data from 2000 to 2027:
#
# pop_data <- lapply(2000:2027, get_population_by_year)
#
# # Convert pop_data to data frame:
#
# pop_data_df <- do.call("bind_rows", pop_data)
# Data Preprocessing:
# saveRDS(pop_final,'D:\\VUDT\\8.TRAINING\\Chart\\pop_final.RDS')
pop_final <- readRDS('D:\\VUDT\\8.TRAINING\\Chart\\pop_final.RDS')
# pop_final <- pop_data_df %>%
# select(Year, Age, Male_Population, Female_Population) %>%
# filter(Age %in% as.character(20:35)) %>%
# mutate(Age = as.integer(Age)) %>%
# mutate_if(is.character, function(x) {str_replace_all(x, "\\,", "") %>% as.integer()}) %>%
# select(-Age) %>%
# gather(Gender, n_pop, -Year) %>%
# group_by(Year, Gender) %>%
# summarise(total_pop = sum(n_pop)) %>%
# ungroup()
pop_final_wide <- pop_final %>%
spread(key = "Gender", value = "total_pop") %>%
mutate(n_gap = Male_Population - Female_Population,
max_gap_gender = case_when(n_gap == max(n_gap) ~ "Yes", TRUE ~ "No"),
max_female_pop = case_when(Female_Population == max(Female_Population) ~ "Yes", TRUE ~ "No"),
max_male_pop = case_when(Male_Population == max(Male_Population) ~ "Yes", TRUE ~ "No"),
label_text = case_when(Year == 2000 ~ "2000", Year == 2027 ~ "2027", Year == 2018 ~ "2018", TRUE ~ ""),
label_color = case_when(Year == 2018 ~ "firebrick", TRUE ~ "gray60"),
rate_fa = n_gap / Male_Population)
upper_num <- pop_final_wide %>%
filter(Year == 2018) %>%
pull(Female_Population) / 1000000
low_num <- pop_final_wide %>%
pull(Female_Population) %>%
min() / 1000000
gender_pop_gap <- pop_final_wide %>%
filter(Year == 2018) %>%
pull(n_gap)
# install.packages('extrafont')
library(extrafont)
my_font <- "OfficinaSansITC"
ggplot() +
geom_segment(data = pop_final_wide %>% mutate(Female_Population = Female_Population / 1000000, Male_Population = Male_Population / 1000000),
aes(x = Year, xend = Year, y = Female_Population, yend = Male_Population),
size = 0.7,
color = "gray70") +
geom_segment(data = pop_final_wide %>% mutate(Female_Population = Female_Population / 1000000, Male_Population = Male_Population / 1000000),
aes(x = 2018, xend = 2018, y = low_num, yend = upper_num - 0.008*upper_num),
color = "firebrick",
arrow = arrow(length = unit(0.2, "cm")),
size = 0.5, alpha = 0.4) +
geom_point(data = pop_final %>% mutate(total_pop = total_pop / 1000000), aes(Year, total_pop, color = Gender), size = 4) +
annotate("text", label = "Trong n\u0103m 2018, c\u00F3 773.765\n \u0111a\u0300n \u00F4ng \u0111\u00F4\u0323c th\u00E2n.",
family = my_font,
x = 2010,
y = 12.1,
color = "gray20",
size = 4.5, hjust = 0, vjust = 1) +
scale_color_manual(name = "", values = c("#3E606F", "#8C3F4D"), labels = c("N\u01B0\u0303", "Nam")) +
scale_x_continuous(breaks = seq(2000, 2027, 1), labels = pop_final_wide$label_text) +
scale_y_continuous(labels = c("11", "12", "13", "14")) +
theme(plot.background = element_rect(fill = "#EFF2F4", color = NA)) +
theme(panel.background = element_rect(fill = "#EFF2F4", color = NA)) +
theme(legend.background = element_rect(fill = "#EFF2F4", color = NA)) +
theme(legend.text = element_text(family = my_font, size = 10, face = "bold", color = "gray20")) +
theme(plot.margin = unit(c(1, 1, 1, 1), "cm")) +
theme(axis.text.x = element_text(face = "bold", size = 14, color = pop_final_wide$label_color, family = my_font)) +
theme(axis.text.y = element_text(color = "gray30", face = "bold", size = 14, family = my_font)) +
theme(plot.title = element_text(family = my_font, size = 20, color = "gray20")) +
theme(plot.subtitle = element_text(family = my_font, size = 14, color = "gray30")) +
theme(plot.caption = element_text(family = my_font, size = 14, color = "gray50")) +
theme(axis.ticks = element_blank()) +
theme(panel.grid.major.x = element_blank()) +
theme(panel.grid.minor.x = element_blank()) +
theme(legend.position = "top") +
theme(axis.title.y = element_text(family = my_font, size = 12, colour = "gray20")) +
labs(x = NULL, y = "D\u00E2n s\u1ED1 trong \u0111\u1ED9 tu\u1ED5i k\u1EBFt h\u00F4n\n (Tri\u00EA\u0323u ng\u01B0\u01A1\u0300i)",
title = "T\u1EA1i sao h\u00E0ng tri\u1EC7u \u0111\u00E0n \u00F4ng Vi\u1EC7t Nam\n ph\u1EA3i s\u1ED1ng \u0111\u1ED9c th\u00E2n trong t\u01B0\u01A1ng lai?",
subtitle = "Ta\u0323i Vi\u00EA\u0323t Nam t\u01B0\u0300 nh\u1EEFng n\u0103m 2000, kho\u1EA3ng c\u00E1ch gi\u1EDBi t\u00EDnh \u1EDF nh\u00F3m tu\u1ED5i\n k\u1EBFt h\u00F4n (t\u1EEB 20 \u0111\u1EBFn 35) \u0111\u00E3 t\u0103ng l\u00EAn nhanh cho\u0301ng\r s\u00F4\u0301 l\u01B0\u01A1\u0323ng\r nam gi\u01A1\u0301i\n v\u01B0\u1EE3t tr\u1ED9i so v\u1EDBi n\u01B0\u0303 gi\u01A1\u0301i\r\n",
caption = "Ngu\u00F4\u0300n: https://www.census.gov") -> a3
a3
LS0tDQp0aXRsZTogIuG6viDEkWFuZyBsw6AgeHUgdGjhur8iDQphIXV0aG9yOiAiUkNoYXJ0Ig0KZGF0ZTogIk1heSAyNywgMjAxOSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICAjIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6ICJmbGF0bHkiDQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsd2FybmluZyA9IEYsZXJyb3IgPSBGLG1lc3NhZ2UgPSBGKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KICAgICAgICAgICAgICMgQ2xlYXIgd29ya3NwYWNlOiANCiAgICAgICAgICAgICAjIHJtKGxpc3QgPSBscygpKQ0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgIyBMb2FkIHNvbWUgcGFja2FnZXM6IA0KICAgICAgICAgICAgIGxpYnJhcnkocnZlc3QpDQogICAgICAgICAgICAgbGlicmFyeSh0aWR5dmVyc2UpDQogICAgICAgICAgICAgbGlicmFyeShtYWdyaXR0cikNCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgIyBBIGZ1bmN0aW9uIGNvbGxlY3QgVmlldG5hbSBwb3B1bGF0aW9uIGRhdGEgZm9yIGJvdGggc2V4ZXMgd2l0aCBpbnB1dCBpcyBhIGdpdmVuIHllYXI6IA0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyBnZXRfcG9wdWxhdGlvbl9ieV95ZWFyIDwtIGZ1bmN0aW9uKHllYXJfc2VsZWN0ZWQpIHsNCiAgICAgICAgICAgICAjICAgYmFzZV91cmwgPC0gImh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvZGF0YS10b29scy9kZW1vL2lkYi9yZWdpb24ucGhwP049JTIwUmVzdWx0cyUyMCZUPTE1JkE9c2VwYXJhdGUmUlQ9MCZZPSINCiAgICAgICAgICAgICAjICAgbGluayA8LSBwYXN0ZTAoYmFzZV91cmwsIHllYXJfc2VsZWN0ZWQsICImUj0tMSZDPVZNIikNCiAgICAgICAgICAgICAjICAgDQogICAgICAgICAgICAgIyAgIGxpbmsgJT4lIA0KICAgICAgICAgICAgICMgICAgIHJlYWRfaHRtbCgpICU+JSANCiAgICAgICAgICAgICAjICAgICBodG1sX3RhYmxlKGZpbGwgPSBUUlVFKSAlPiUgDQogICAgICAgICAgICAgIyAgICAgLltbMV1dIC0+IHBvcF9kZg0KICAgICAgICAgICAgICMgICANCiAgICAgICAgICAgICAjICAgbmFtZXMocG9wX2RmKSA8LSBzdHJfcmVwbGFjZV9hbGwobmFtZXMocG9wX2RmKSwgIiAiLCAiXyIpDQogICAgICAgICAgICAgIyAgIHJldHVybihwb3BfZGYpDQogICAgICAgICAgICAgIyAgIA0KICAgICAgICAgICAgICMgfQ0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyAjIEdldCBkYXRhIGZyb20gMjAwMCB0byAyMDI3OiANCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgcG9wX2RhdGEgPC0gbGFwcGx5KDIwMDA6MjAyNywgZ2V0X3BvcHVsYXRpb25fYnlfeWVhcikNCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgIyBDb252ZXJ0IHBvcF9kYXRhIHRvIGRhdGEgZnJhbWU6IA0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyBwb3BfZGF0YV9kZiA8LSBkby5jYWxsKCJiaW5kX3Jvd3MiLCBwb3BfZGF0YSkgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgRGF0YSBQcmVwcm9jZXNzaW5nOiANCiAgICAgICAgICAgICAjIHNhdmVSRFMocG9wX2ZpbmFsLCdEOlxcVlVEVFxcOC5UUkFJTklOR1xcQ2hhcnRcXHBvcF9maW5hbC5SRFMnKQ0KICAgICAgICAgICAgIHBvcF9maW5hbCA8LSByZWFkUkRTKCdEOlxcVlVEVFxcOC5UUkFJTklOR1xcQ2hhcnRcXHBvcF9maW5hbC5SRFMnKSAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgcG9wX2ZpbmFsIDwtIHBvcF9kYXRhX2RmICU+JSANCiAgICAgICAgICAgICAjICAgc2VsZWN0KFllYXIsIEFnZSwgTWFsZV9Qb3B1bGF0aW9uLCBGZW1hbGVfUG9wdWxhdGlvbikgJT4lIA0KICAgICAgICAgICAgICMgICBmaWx0ZXIoQWdlICVpbiUgYXMuY2hhcmFjdGVyKDIwOjM1KSkgJT4lIA0KICAgICAgICAgICAgICMgICBtdXRhdGUoQWdlID0gYXMuaW50ZWdlcihBZ2UpKSAlPiUgDQogICAgICAgICAgICAgIyAgIG11dGF0ZV9pZihpcy5jaGFyYWN0ZXIsIGZ1bmN0aW9uKHgpIHtzdHJfcmVwbGFjZV9hbGwoeCwgIlxcLCIsICIiKSAlPiUgYXMuaW50ZWdlcigpfSkgJT4lIA0KICAgICAgICAgICAgICMgICBzZWxlY3QoLUFnZSkgJT4lIA0KICAgICAgICAgICAgICMgICBnYXRoZXIoR2VuZGVyLCBuX3BvcCwgLVllYXIpICU+JSANCiAgICAgICAgICAgICAjICAgZ3JvdXBfYnkoWWVhciwgR2VuZGVyKSAlPiUgDQogICAgICAgICAgICAgIyAgIHN1bW1hcmlzZSh0b3RhbF9wb3AgPSBzdW0obl9wb3ApKSAlPiUgDQogICAgICAgICAgICAgIyAgIHVuZ3JvdXAoKQ0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIHBvcF9maW5hbF93aWRlIDwtIHBvcF9maW5hbCAlPiUgDQogICAgICAgICAgICAgICBzcHJlYWQoa2V5ID0gIkdlbmRlciIsIHZhbHVlID0gInRvdGFsX3BvcCIpICU+JSANCiAgICAgICAgICAgICAgIG11dGF0ZShuX2dhcCA9IE1hbGVfUG9wdWxhdGlvbiAtIEZlbWFsZV9Qb3B1bGF0aW9uLCANCiAgICAgICAgICAgICAgICAgICAgICBtYXhfZ2FwX2dlbmRlciA9IGNhc2Vfd2hlbihuX2dhcCA9PSBtYXgobl9nYXApIH4gIlllcyIsIFRSVUUgfiAiTm8iKSwgDQogICAgICAgICAgICAgICAgICAgICAgbWF4X2ZlbWFsZV9wb3AgPSBjYXNlX3doZW4oRmVtYWxlX1BvcHVsYXRpb24gPT0gbWF4KEZlbWFsZV9Qb3B1bGF0aW9uKSB+ICJZZXMiLCBUUlVFIH4gIk5vIiksIA0KICAgICAgICAgICAgICAgICAgICAgIG1heF9tYWxlX3BvcCA9IGNhc2Vfd2hlbihNYWxlX1BvcHVsYXRpb24gPT0gbWF4KE1hbGVfUG9wdWxhdGlvbikgfiAiWWVzIiwgVFJVRSB+ICJObyIpLCANCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbF90ZXh0ID0gY2FzZV93aGVuKFllYXIgPT0gMjAwMCB+ICIyMDAwIiwgWWVhciA9PSAyMDI3IH4gIjIwMjciLCBZZWFyID09IDIwMTggfiAiMjAxOCIsIFRSVUUgfiAiIiksIA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX2NvbG9yID0gY2FzZV93aGVuKFllYXIgPT0gMjAxOCB+ICJmaXJlYnJpY2siLCBUUlVFIH4gImdyYXk2MCIpLCANCiAgICAgICAgICAgICAgICAgICAgICByYXRlX2ZhID0gbl9nYXAgLyBNYWxlX1BvcHVsYXRpb24pDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgdXBwZXJfbnVtIDwtIHBvcF9maW5hbF93aWRlICU+JSANCiAgICAgICAgICAgICAgIGZpbHRlcihZZWFyID09IDIwMTgpICU+JSANCiAgICAgICAgICAgICAgIHB1bGwoRmVtYWxlX1BvcHVsYXRpb24pIC8gMTAwMDAwMA0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIGxvd19udW0gPC0gcG9wX2ZpbmFsX3dpZGUgJT4lIA0KICAgICAgICAgICAgICAgcHVsbChGZW1hbGVfUG9wdWxhdGlvbikgJT4lIA0KICAgICAgICAgICAgICAgbWluKCkgLyAxMDAwMDAwDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgZ2VuZGVyX3BvcF9nYXAgPC0gcG9wX2ZpbmFsX3dpZGUgJT4lIA0KICAgICAgICAgICAgICAgZmlsdGVyKFllYXIgPT0gMjAxOCkgJT4lIA0KICAgICAgICAgICAgICAgcHVsbChuX2dhcCkgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgIyBpbnN0YWxsLnBhY2thZ2VzKCdleHRyYWZvbnQnKQ0KICAgICAgICAgICAgIGxpYnJhcnkoZXh0cmFmb250KQ0KICAgICAgICAgICAgIG15X2ZvbnQgPC0gIk9mZmljaW5hU2Fuc0lUQyINCiAgICAgICAgICAgICANCiAgICAgICAgICAgICBnZ3Bsb3QoKSArIA0KICAgICAgICAgICAgICAgZ2VvbV9zZWdtZW50KGRhdGEgPSBwb3BfZmluYWxfd2lkZSAlPiUgbXV0YXRlKEZlbWFsZV9Qb3B1bGF0aW9uID0gRmVtYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwLCBNYWxlX1BvcHVsYXRpb24gPSBNYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IFllYXIsIHhlbmQgPSBZZWFyLCB5ID0gRmVtYWxlX1BvcHVsYXRpb24sIHllbmQgPSBNYWxlX1BvcHVsYXRpb24pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyYXk3MCIpICsNCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgZ2VvbV9zZWdtZW50KGRhdGEgPSBwb3BfZmluYWxfd2lkZSAlPiUgbXV0YXRlKEZlbWFsZV9Qb3B1bGF0aW9uID0gRmVtYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwLCBNYWxlX1BvcHVsYXRpb24gPSBNYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IDIwMTgsIHhlbmQgPSAyMDE4LCB5ID0gbG93X251bSwgeWVuZCA9IHVwcGVyX251bSAtIDAuMDA4KnVwcGVyX251bSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImZpcmVicmljayIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gYXJyb3cobGVuZ3RoID0gdW5pdCgwLjIsICJjbSIpKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgYWxwaGEgPSAwLjQpICsgDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgIGdlb21fcG9pbnQoZGF0YSA9IHBvcF9maW5hbCAlPiUgbXV0YXRlKHRvdGFsX3BvcCA9IHRvdGFsX3BvcCAvIDEwMDAwMDApLCBhZXMoWWVhciwgdG90YWxfcG9wLCBjb2xvciA9IEdlbmRlciksIHNpemUgPSA0KSArIA0KICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICBhbm5vdGF0ZSgidGV4dCIsIGxhYmVsID0gIlRyb25nIG5cdTAxMDNtIDIwMTgsIGNcdTAwRjMgNzczLjc2NVxuIFx1MDExMWFcdTAzMDBuIFx1MDBGNG5nIFx1MDExMVx1MDBGNFx1MDMyM2MgdGhcdTAwRTJuLiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gbXlfZm9udCwgDQogICAgICAgICAgICAgICAgICAgICAgICB4ID0gMjAxMCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAxMi4xLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyYXkyMCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDQuNSwgaGp1c3QgPSAwLCB2anVzdCA9IDEpICsgDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIiIsIHZhbHVlcyA9IGMoIiMzRTYwNkYiLCAiIzhDM0Y0RCIpLCBsYWJlbHMgPSBjKCJOXHUwMUIwXHUwMzAzIiwgIk5hbSIpKSArIA0KICAgICAgICAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDAwLCAyMDI3LCAxKSwgbGFiZWxzID0gcG9wX2ZpbmFsX3dpZGUkbGFiZWxfdGV4dCkgKyANCiAgICAgICAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjKCIxMSIsICIxMiIsICIxMyIsICIxNCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI0VGRjJGNCIsIGNvbG9yID0gTkEpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNFRkYyRjQiLCBjb2xvciA9IE5BKSkgKw0KICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjRUZGMkY0IiwgY29sb3IgPSBOQSkpICsgDQogICAgICAgICAgICAgICB0aGVtZShsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gImdyYXkyMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMSwgMSwgMSwgMSksICJjbSIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0LCBjb2xvciA9IHBvcF9maW5hbF93aWRlJGxhYmVsX2NvbG9yLCBmYW1pbHkgPSBteV9mb250KSkgKw0KICAgICAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JheTMwIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0LCBmYW1pbHkgPSBteV9mb250KSkgKw0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMjAsIGNvbG9yID0gImdyYXkyMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTQsIGNvbG9yID0gImdyYXkzMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IG15X2ZvbnQsIHNpemUgPSAxNCwgY29sb3IgPSAiZ3JheTUwIikpICsgDQogICAgICAgICAgICAgICB0aGVtZShheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsNCiAgICAgICAgICAgICAgIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTIsIGNvbG91ciA9ICJncmF5MjAiKSkgKyANCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgbGFicyh4ID0gTlVMTCwgeSA9ICJEXHUwMEUybiBzXHUxRUQxIHRyb25nIFx1MDExMVx1MUVEOSB0dVx1MUVENWkga1x1MUVCRnQgaFx1MDBGNG5cbiAoVHJpXHUwMEVBXHUwMzIzdSBuZ1x1MDFCMFx1MDFBMVx1MDMwMGkpIiwgDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlRcdTFFQTFpIHNhbyBoXHUwMEUwbmcgdHJpXHUxRUM3dSBcdTAxMTFcdTAwRTBuIFx1MDBGNG5nIFZpXHUxRUM3dCBOYW1cbiBwaFx1MUVBM2kgc1x1MUVEMW5nIFx1MDExMVx1MUVEOWMgdGhcdTAwRTJuIHRyb25nIHRcdTAxQjBcdTAxQTFuZyBsYWk/IiwgDQogICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIlRhXHUwMzIzaSBWaVx1MDBFQVx1MDMyM3QgTmFtIHRcdTAxQjBcdTAzMDAgbmhcdTFFRUZuZyBuXHUwMTAzbSAyMDAwLCBraG9cdTFFQTNuZyBjXHUwMEUxY2ggZ2lcdTFFREJpIHRcdTAwRURuaCBcdTFFREYgbmhcdTAwRjNtIHR1XHUxRUQ1aVxuIGtcdTFFQkZ0IGhcdTAwRjRuICh0XHUxRUVCIDIwIFx1MDExMVx1MUVCRm4gMzUpIFx1MDExMVx1MDBFMyB0XHUwMTAzbmcgbFx1MDBFQW4gbmhhbmggY2hvXHUwMzAxbmdcciBzXHUwMEY0XHUwMzAxIGxcdTAxQjBcdTAxQTFcdTAzMjNuZ1xyIG5hbSBnaVx1MDFBMVx1MDMwMWlcbiB2XHUwMUIwXHUxRUUzdCB0clx1MUVEOWkgc28gdlx1MUVEQmkgblx1MDFCMFx1MDMwMyBnaVx1MDFBMVx1MDMwMWlcclxuIiwgDQogICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiTmd1XHUwMEY0XHUwMzAwbjogaHR0cHM6Ly93d3cuY2Vuc3VzLmdvdiIpICAgICAgIC0+IGEzICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQphMw0KICAgICAgICAgICAgIA0KDQpgYGANCg0K