Questions

  1. From which countries have the most refugees originated?
  2. Which countries have been most supportive in rehoming refugees?
  3. How much of an effect did the conflict in Syria and Afghanistan have on global refugee numbers?
  4. Are the countries that have been historically supportive of rehoming refugees been as supportive during this conflict?

Import Libraries

library(tidyverse)
library(scales)   # needed for formatting y-axis labels to non-scientific type
library(gridExtra)

Import Dataset

On a first look at the dataset, the first two rows of the dataset do not contain data. The third row contains the actual headings. Let’s strip the first two rows from the dataset and set the first row as the column headings

refugees <- read_csv("./data/refugee_data.csv", col_names = TRUE, skip = 3)

Data Wrangling

Changing column headings to remove special characters and make it lowercase Also change some column names

# Remove special characters from headings, make all column headings lowercase
colnames(refugees) <- tolower(gsub("\\.|\\-|\\(|\\)|\\s|/", "",colnames(refugees)))
# Rename Country column and refugees
refugees <- refugees %>%
    rename(countryofresidence = countryterritoryofasylumresidence,
           refugeesinc = refugeesinclrefugeelikesituations)

1. From which countries have the most refugees originated?

By far the most refugees have originated from Afghanistan.

# Select all rows that contain the total population of refugees from a country for each year
# Roll up dataset to overall refugees per country
mostref <- refugees %>%
    select(origin, totalpopulation) %>%
    group_by(origin) %>%
    summarize(
        refugees_per_country = sum(totalpopulation,na.rm=TRUE)
    ) %>% 
    # na.rm = TRUE so that SUM will treat NA as 0 and math can be done
    arrange(desc(refugees_per_country)) %>% # rearrange based on count
    filter(
        # Filter to the top 95% of countries
        refugees_per_country > quantile(refugees_per_country, 0.95),
        # Filter out all unknown origin from dataset since it's not useful data
        origin !="Various/Unknown"
    )
# Change origin into a factor so ggplot will honor the sort order
mostref$origin <- factor(mostref$origin, levels=mostref$origin)
# A simple bar plot where X is the country of origin and Y is the number of refugees that originated from that country
refugees_per_country_plot <- ggplot(
    mostref,
    aes(x=origin, y=refugees_per_country/1000000,fill=refugees_per_country)
    ) + 
    geom_col() + 
    # Get rid of scientific notation
    scale_y_continuous(labels = comma) +
    labs(
        title="Top 5% Countries From Which Refugees Have Originated", 
        x="Country", 
        y="Number of Refugees (in millions)") +
    theme_minimal() +
    theme(
        axis.text.x=element_text(angle=0),
        axis.text.y=element_text(angle=0),
        legend.position = "null"
    ) +
    coord_flip()
                                    
print(refugees_per_country_plot)

2. Which countries have been most supportive in rehoming refugees?

# Select all rows that contain the total population of refugees for each year
# Roll up dataset to overall refugees per country
refugee_support <- refugees %>%
    select(countryofresidence, totalpopulation) %>%
    group_by(countryofresidence) %>%
    summarize(
        refugees_per_country = sum(totalpopulation,na.rm=TRUE)
    ) %>% 
    # na.rm = TRUE so that SUM will treat NA as 0 and math can be done
    arrange(desc(refugees_per_country)) %>% # rearrange based on count
    filter(
        # Filter to the top 95% largest refugee populations of countries 
        refugees_per_country > quantile(refugees_per_country, 0.95)
    )
# Change origin into a factor so ggplot will honor the sort order
refugee_support$countryofresidence <- factor(refugee_support$countryofresidence, levels=refugee_support$countryofresidence)
# A simple bar plot where X is the country of origin and Y is the number of refugees that originated from that country
refugee_residence_plot <- ggplot(
    refugee_support,
    aes(x=countryofresidence, y=refugees_per_country/1000000,fill=refugees_per_country)
    ) + 
    geom_col() + 
    # Get rid of scientific notation
    scale_y_continuous(labels = comma) +
    labs(
        title="Top 5% Largest Refugee Populations", 
        x="Country", 
        y="Number of Refugees (in millions)") +
    theme_minimal() +
    theme(
        axis.text.x=element_text(angle=0),
        axis.text.y=element_text(angle=0),
        legend.position = "null"
    ) +
    coord_flip()
                                    
print(refugee_residence_plot)

grid.arrange(refugees_per_country_plot,refugee_residence_plot)

3a. How much of an effect did the conflict in Syria and Afghanistan have on global refugee numbers?

# Let's find all the refugees total for the years of the conflict(s)
# Syria (2011-present)
# Afghanistan (1989-present)
syrianconflict <- refugees %>%
    select(year,origin,totalpopulation) %>%
    group_by(origin, year) %>%
    summarize(
    refugees_per_country = sum(totalpopulation,na.rm=TRUE)
    ) %>%
    filter(year > 2010) %>%
    arrange(year)
# Break down by refugees originating in Syria and Afghanistan, compared to the rest of the world

3b. Are the countries that have been historically supportive of rehoming refugees been as supportive during this conflict?

Test plot: Total refugees over time, by country

Selecting every country results in R freaking out trying to plot the whole thing so let’s try just two countries

totalref <- refugees %>%
    select(countryofresidence, year, totalpopulation) %>%
    filter(countryofresidence == "United States of America" | countryofresidence == "France")
    
total_ref_over_time_plot <- ggplot(totalref, aes(x=year, y=totalpopulation, color =countryofresidence)) +
    geom_line()
print(total_ref_over_time_plot)

LS0tDQp0aXRsZTogIlJlZnVnZWUgRGF0YSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIFF1ZXN0aW9ucw0KDQoxLiBGcm9tIHdoaWNoIGNvdW50cmllcyBoYXZlIHRoZSBtb3N0IHJlZnVnZWVzIG9yaWdpbmF0ZWQ/DQoyLiBXaGljaCBjb3VudHJpZXMgaGF2ZSBiZWVuIG1vc3Qgc3VwcG9ydGl2ZSBpbiByZWhvbWluZyByZWZ1Z2Vlcz8NCjMuIEhvdyBtdWNoIG9mIGFuIGVmZmVjdCBkaWQgdGhlIGNvbmZsaWN0IGluIFN5cmlhIGFuZCBBZmdoYW5pc3RhbiBoYXZlIG9uIGdsb2JhbCByZWZ1Z2VlIG51bWJlcnM/DQo0LiBBcmUgdGhlIGNvdW50cmllcyB0aGF0IGhhdmUgYmVlbiBoaXN0b3JpY2FsbHkgc3VwcG9ydGl2ZSBvZiByZWhvbWluZyByZWZ1Z2VlcyBiZWVuIGFzIHN1cHBvcnRpdmUgZHVyaW5nIHRoaXMgY29uZmxpY3Q/DQoNCiMgSW1wb3J0IExpYnJhcmllcw0KYGBge3IgSW1wb3J0IExpYnJhcmllcywgcmVzdWx0cz0naGlkZSd9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoc2NhbGVzKSAgICMgbmVlZGVkIGZvciBmb3JtYXR0aW5nIHktYXhpcyBsYWJlbHMgdG8gbm9uLXNjaWVudGlmaWMgdHlwZQ0KbGlicmFyeShncmlkRXh0cmEpDQpgYGANCg0KIyBJbXBvcnQgRGF0YXNldA0KDQo+IE9uIGEgZmlyc3QgbG9vayBhdCB0aGUgZGF0YXNldCwgdGhlIGZpcnN0IHR3byByb3dzIG9mIHRoZSBkYXRhc2V0IGRvIG5vdCBjb250YWluIGRhdGEuIFRoZSB0aGlyZCByb3cgY29udGFpbnMgdGhlIGFjdHVhbCBoZWFkaW5ncy4gTGV0J3Mgc3RyaXAgdGhlIGZpcnN0IHR3byByb3dzIGZyb20gdGhlIGRhdGFzZXQgYW5kIHNldCB0aGUgZmlyc3Qgcm93IGFzIHRoZSBjb2x1bW4gaGVhZGluZ3MNCg0KYGBge3IgSW1wb3J0IENTViwgcmVzdWx0cz0naGlkZSd9DQpyZWZ1Z2VlcyA8LSByZWFkX2NzdigiLi9kYXRhL3JlZnVnZWVfZGF0YS5jc3YiLCBjb2xfbmFtZXMgPSBUUlVFLCBza2lwID0gMykNCmBgYA0KDQojIERhdGEgV3JhbmdsaW5nDQoNCj4gQ2hhbmdpbmcgY29sdW1uIGhlYWRpbmdzIHRvIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1ha2UgaXQgbG93ZXJjYXNlDQo+IEFsc28gY2hhbmdlIHNvbWUgY29sdW1uIG5hbWVzDQoNCmBgYHtyIERhdGEgd3JhbmdsaW5nLCByZXN1bHRzPSdoaWRlJ30NCiMgUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBmcm9tIGhlYWRpbmdzLCBtYWtlIGFsbCBjb2x1bW4gaGVhZGluZ3MgbG93ZXJjYXNlDQpjb2xuYW1lcyhyZWZ1Z2VlcykgPC0gdG9sb3dlcihnc3ViKCJcXC58XFwtfFxcKHxcXCl8XFxzfC8iLCAiIixjb2xuYW1lcyhyZWZ1Z2VlcykpKQ0KDQojIFJlbmFtZSBDb3VudHJ5IGNvbHVtbiBhbmQgcmVmdWdlZXMNCnJlZnVnZWVzIDwtIHJlZnVnZWVzICU+JQ0KICAgIHJlbmFtZShjb3VudHJ5b2ZyZXNpZGVuY2UgPSBjb3VudHJ5dGVycml0b3J5b2Zhc3lsdW1yZXNpZGVuY2UsDQogICAgICAgICAgIHJlZnVnZWVzaW5jID0gcmVmdWdlZXNpbmNscmVmdWdlZWxpa2VzaXR1YXRpb25zKQ0KYGBgDQoNCiMjIDEuIEZyb20gd2hpY2ggY291bnRyaWVzIGhhdmUgdGhlIG1vc3QgcmVmdWdlZXMgb3JpZ2luYXRlZD8NCg0KPiBCeSBmYXIgdGhlIG1vc3QgcmVmdWdlZXMgaGF2ZSBvcmlnaW5hdGVkIGZyb20gQWZnaGFuaXN0YW4uDQoNCmBgYHtyIENvdW50cmllcyBvZiBncmVhdGVzdCByZWZ1Z2VlIG9yaWdpbn0NCg0KIyBTZWxlY3QgYWxsIHJvd3MgdGhhdCBjb250YWluIHRoZSB0b3RhbCBwb3B1bGF0aW9uIG9mIHJlZnVnZWVzIGZyb20gYSBjb3VudHJ5IGZvciBlYWNoIHllYXINCiMgUm9sbCB1cCBkYXRhc2V0IHRvIG92ZXJhbGwgcmVmdWdlZXMgcGVyIGNvdW50cnkNCm1vc3RyZWYgPC0gcmVmdWdlZXMgJT4lDQogICAgc2VsZWN0KG9yaWdpbiwgdG90YWxwb3B1bGF0aW9uKSAlPiUNCiAgICBncm91cF9ieShvcmlnaW4pICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgICAgcmVmdWdlZXNfcGVyX2NvdW50cnkgPSBzdW0odG90YWxwb3B1bGF0aW9uLG5hLnJtPVRSVUUpDQogICAgKSAlPiUgDQogICAgIyBuYS5ybSA9IFRSVUUgc28gdGhhdCBTVU0gd2lsbCB0cmVhdCBOQSBhcyAwIGFuZCBtYXRoIGNhbiBiZSBkb25lDQogICAgYXJyYW5nZShkZXNjKHJlZnVnZWVzX3Blcl9jb3VudHJ5KSkgJT4lICMgcmVhcnJhbmdlIGJhc2VkIG9uIGNvdW50DQogICAgZmlsdGVyKA0KICAgICAgICAjIEZpbHRlciB0byB0aGUgdG9wIDk1JSBvZiBjb3VudHJpZXMNCiAgICAgICAgcmVmdWdlZXNfcGVyX2NvdW50cnkgPiBxdWFudGlsZShyZWZ1Z2Vlc19wZXJfY291bnRyeSwgMC45NSksDQogICAgICAgICMgRmlsdGVyIG91dCBhbGwgdW5rbm93biBvcmlnaW4gZnJvbSBkYXRhc2V0IHNpbmNlIGl0J3Mgbm90IHVzZWZ1bCBkYXRhDQogICAgICAgIG9yaWdpbiAhPSJWYXJpb3VzL1Vua25vd24iDQogICAgKQ0KDQojIENoYW5nZSBvcmlnaW4gaW50byBhIGZhY3RvciBzbyBnZ3Bsb3Qgd2lsbCBob25vciB0aGUgc29ydCBvcmRlcg0KbW9zdHJlZiRvcmlnaW4gPC0gZmFjdG9yKG1vc3RyZWYkb3JpZ2luLCBsZXZlbHM9bW9zdHJlZiRvcmlnaW4pDQoNCiMgQSBzaW1wbGUgYmFyIHBsb3Qgd2hlcmUgWCBpcyB0aGUgY291bnRyeSBvZiBvcmlnaW4gYW5kIFkgaXMgdGhlIG51bWJlciBvZiByZWZ1Z2VlcyB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGF0IGNvdW50cnkNCnJlZnVnZWVzX3Blcl9jb3VudHJ5X3Bsb3QgPC0gZ2dwbG90KA0KICAgIG1vc3RyZWYsDQogICAgYWVzKHg9b3JpZ2luLCB5PXJlZnVnZWVzX3Blcl9jb3VudHJ5LzEwMDAwMDAsZmlsbD1yZWZ1Z2Vlc19wZXJfY291bnRyeSkNCiAgICApICsgDQogICAgZ2VvbV9jb2woKSArIA0KICAgICMgR2V0IHJpZCBvZiBzY2llbnRpZmljIG5vdGF0aW9uDQogICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArDQogICAgbGFicygNCiAgICAgICAgdGl0bGU9IlRvcCA1JSBDb3VudHJpZXMgRnJvbSBXaGljaCBSZWZ1Z2VlcyBIYXZlIE9yaWdpbmF0ZWQiLCANCiAgICAgICAgeD0iQ291bnRyeSIsIA0KICAgICAgICB5PSJOdW1iZXIgb2YgUmVmdWdlZXMgKGluIG1pbGxpb25zKSIpICsNCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIHRoZW1lKA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChhbmdsZT0wKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm51bGwiDQogICAgKSArDQogICAgY29vcmRfZmxpcCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCnByaW50KHJlZnVnZWVzX3Blcl9jb3VudHJ5X3Bsb3QpDQoNCmBgYA0KDQojIzIuIFdoaWNoIGNvdW50cmllcyBoYXZlIGJlZW4gbW9zdCBzdXBwb3J0aXZlIGluIHJlaG9taW5nIHJlZnVnZWVzPw0KDQpgYGB7ciBDb3VudHJpZXMgd2l0aCBsYXJnZXN0IHJlZnVnZWUgcG9wdWxhdGlvbn0NCiMgU2VsZWN0IGFsbCByb3dzIHRoYXQgY29udGFpbiB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiByZWZ1Z2VlcyBmb3IgZWFjaCB5ZWFyDQojIFJvbGwgdXAgZGF0YXNldCB0byBvdmVyYWxsIHJlZnVnZWVzIHBlciBjb3VudHJ5DQpyZWZ1Z2VlX3N1cHBvcnQgPC0gcmVmdWdlZXMgJT4lDQogICAgc2VsZWN0KGNvdW50cnlvZnJlc2lkZW5jZSwgdG90YWxwb3B1bGF0aW9uKSAlPiUNCiAgICBncm91cF9ieShjb3VudHJ5b2ZyZXNpZGVuY2UpICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgICAgcmVmdWdlZXNfcGVyX2NvdW50cnkgPSBzdW0odG90YWxwb3B1bGF0aW9uLG5hLnJtPVRSVUUpDQogICAgKSAlPiUgDQogICAgIyBuYS5ybSA9IFRSVUUgc28gdGhhdCBTVU0gd2lsbCB0cmVhdCBOQSBhcyAwIGFuZCBtYXRoIGNhbiBiZSBkb25lDQogICAgYXJyYW5nZShkZXNjKHJlZnVnZWVzX3Blcl9jb3VudHJ5KSkgJT4lICMgcmVhcnJhbmdlIGJhc2VkIG9uIGNvdW50DQogICAgZmlsdGVyKA0KICAgICAgICAjIEZpbHRlciB0byB0aGUgdG9wIDk1JSBsYXJnZXN0IHJlZnVnZWUgcG9wdWxhdGlvbnMgb2YgY291bnRyaWVzIA0KICAgICAgICByZWZ1Z2Vlc19wZXJfY291bnRyeSA+IHF1YW50aWxlKHJlZnVnZWVzX3Blcl9jb3VudHJ5LCAwLjk1KQ0KICAgICkNCg0KIyBDaGFuZ2Ugb3JpZ2luIGludG8gYSBmYWN0b3Igc28gZ2dwbG90IHdpbGwgaG9ub3IgdGhlIHNvcnQgb3JkZXINCnJlZnVnZWVfc3VwcG9ydCRjb3VudHJ5b2ZyZXNpZGVuY2UgPC0gZmFjdG9yKHJlZnVnZWVfc3VwcG9ydCRjb3VudHJ5b2ZyZXNpZGVuY2UsIGxldmVscz1yZWZ1Z2VlX3N1cHBvcnQkY291bnRyeW9mcmVzaWRlbmNlKQ0KDQojIEEgc2ltcGxlIGJhciBwbG90IHdoZXJlIFggaXMgdGhlIGNvdW50cnkgb2Ygb3JpZ2luIGFuZCBZIGlzIHRoZSBudW1iZXIgb2YgcmVmdWdlZXMgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhhdCBjb3VudHJ5DQpyZWZ1Z2VlX3Jlc2lkZW5jZV9wbG90IDwtIGdncGxvdCgNCiAgICByZWZ1Z2VlX3N1cHBvcnQsDQogICAgYWVzKHg9Y291bnRyeW9mcmVzaWRlbmNlLCB5PXJlZnVnZWVzX3Blcl9jb3VudHJ5LzEwMDAwMDAsZmlsbD1yZWZ1Z2Vlc19wZXJfY291bnRyeSkNCiAgICApICsgDQogICAgZ2VvbV9jb2woKSArIA0KICAgICMgR2V0IHJpZCBvZiBzY2llbnRpZmljIG5vdGF0aW9uDQogICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArDQogICAgbGFicygNCiAgICAgICAgdGl0bGU9IlRvcCA1JSBMYXJnZXN0IFJlZnVnZWUgUG9wdWxhdGlvbnMiLCANCiAgICAgICAgeD0iQ291bnRyeSIsIA0KICAgICAgICB5PSJOdW1iZXIgb2YgUmVmdWdlZXMgKGluIG1pbGxpb25zKSIpICsNCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIHRoZW1lKA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChhbmdsZT0wKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm51bGwiDQogICAgKSArDQogICAgY29vcmRfZmxpcCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCnByaW50KHJlZnVnZWVfcmVzaWRlbmNlX3Bsb3QpDQpgYGANCg0KYGBge3J9DQpncmlkLmFycmFuZ2UocmVmdWdlZXNfcGVyX2NvdW50cnlfcGxvdCxyZWZ1Z2VlX3Jlc2lkZW5jZV9wbG90KQ0KYGBgDQoNCiMjIDNhLiBIb3cgbXVjaCBvZiBhbiBlZmZlY3QgZGlkIHRoZSBjb25mbGljdCBpbiBTeXJpYSBhbmQgQWZnaGFuaXN0YW4gaGF2ZSBvbiBnbG9iYWwgcmVmdWdlZSBudW1iZXJzPw0KDQpgYGB7cn0NCiMgTGV0J3MgZmluZCBhbGwgdGhlIHJlZnVnZWVzIHRvdGFsIGZvciB0aGUgeWVhcnMgb2YgdGhlIGNvbmZsaWN0KHMpDQojIFN5cmlhICgyMDExLXByZXNlbnQpDQojIEJyZWFrIGRvd24gYnkgcmVmdWdlZXMgb3JpZ2luYXRpbmcgaW4gU3lyaWEgYW5kIEFmZ2hhbmlzdGFuLCBjb21wYXJlZCB0byB0aGUgcmVzdCBvZiB0aGUgd29ybGQNCg0Kc3lyaWFuY29uZmxpY3QgPC0gcmVmdWdlZXMgJT4lDQogICAgc2VsZWN0KHllYXIsb3JpZ2luLHRvdGFscG9wdWxhdGlvbikgJT4lDQogICAgbXV0YXRlKCkgJT4lICNub24tc3lyaWFuIHJlZnVnZWVzDQogICAgZ3JvdXBfYnkob3JpZ2luLCB5ZWFyKSAlPiUNCiAgICBzdW1tYXJpemUoDQogICAgcmVmdWdlZXNfcGVyX2NvdW50cnkgPSBzdW0odG90YWxwb3B1bGF0aW9uLG5hLnJtPVRSVUUpDQogICAgKSAlPiUNCiAgICBmaWx0ZXIoeWVhciA+IDIwMTApICU+JQ0KICAgIGFycmFuZ2UoeWVhcikNCg0KIyBBZmdoYW5pc3RhbiAoMTk4OS1wcmVzZW50KQ0KYGBgDQoNCiMjIDNiLiBBcmUgdGhlIGNvdW50cmllcyB0aGF0IGhhdmUgYmVlbiBoaXN0b3JpY2FsbHkgc3VwcG9ydGl2ZSBvZiByZWhvbWluZyByZWZ1Z2VlcyBiZWVuIGFzIHN1cHBvcnRpdmUgZHVyaW5nIHRoaXMgY29uZmxpY3Q/DQoNCg0KDQojIFRlc3QgcGxvdDogVG90YWwgcmVmdWdlZXMgb3ZlciB0aW1lLCBieSBjb3VudHJ5DQo+IFNlbGVjdGluZyBldmVyeSBjb3VudHJ5IHJlc3VsdHMgaW4gUiBmcmVha2luZyBvdXQgdHJ5aW5nIHRvIHBsb3QgdGhlIHdob2xlIHRoaW5nIHNvIGxldCdzIHRyeSBqdXN0IHR3byBjb3VudHJpZXMNCg0KYGBge3IgVGVzdH0NCg0KdG90YWxyZWYgPC0gcmVmdWdlZXMgJT4lDQogICAgc2VsZWN0KGNvdW50cnlvZnJlc2lkZW5jZSwgeWVhciwgdG90YWxwb3B1bGF0aW9uKSAlPiUNCiAgICBmaWx0ZXIoY291bnRyeW9mcmVzaWRlbmNlID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiIHwgY291bnRyeW9mcmVzaWRlbmNlID09ICJGcmFuY2UiKQ0KICAgIA0KdG90YWxfcmVmX292ZXJfdGltZV9wbG90IDwtIGdncGxvdCh0b3RhbHJlZiwgYWVzKHg9eWVhciwgeT10b3RhbHBvcHVsYXRpb24sIGNvbG9yID1jb3VudHJ5b2ZyZXNpZGVuY2UpKSArDQogICAgZ2VvbV9saW5lKCkNCg0KcHJpbnQodG90YWxfcmVmX292ZXJfdGltZV9wbG90KQ0KYGBg