Conceptual Questions

1,It took Finland about 50 years to go through its demographic transition around the turn of the 20th century. For this question, go to populationpyramid.net, choose a country in Asia, Africa, or Central or South America that is currently in the third stage or later of its demographic transition. Look back in time to find a year in which it was in the second stage. Then figure out approximately how many years it took the country to enter the third stage In your answer, tell me: Name of the country, year it was in the second stage, years to third stage. Did this country take more or less time than Finland. Try to think of at least two reasons why that might be the case and write a short description of your reasoning. Note: If you can’t find when the country was in its second stage, look for a different country.

The country I found is China, it’s started it’s third state in 2015 to now, The year for cHINA in second stage is around 1991. the population growth for age group 0-4 is around 5.9% for males and 5.4% for females. you can see a clear boom in its fertility rate around 1991. and China takes a lot less time than Finland to enter it’s third stage around 2015. which is just 25 years compare to finland. the fertality rate had a steady fall since 2015.

first reason is the end of China’s one-child policy in 1979. After almost 10 years of fertality constractuion happening in China, Chinese people finally get to started reportduce a lot of kid once again to have enough kid to help labour fource. Back then China is a huge aggreculture society, more kids means better return in aggreculture. So we can see they get into

I belive the best reason is the trememdious growth cause by political reason happening in China since 1992. China decided to open their market to global investors and largely subsidized on it’s manufacture industry. Which lead to a trememdious growth in it’s GDP. The overall economny had a super boom since then. That caused their citizen to focus on it’s economy growth and ignored the fertality. So As China economy getting stronger and stronger, the fertaliuty rate doped to around 2.5 % for both males and females. and We can see China eneter into the third stage around 2015.

Another reason is the influcture isn’t build enough for this huge growth in kid and GDP. As population is relatively huge, but the infscture isnt enough for the population, People are frastured about having a kid and are not able to raise them because of the expencise cost. you can also see the furtality rate droped a lot since 2015 when it’s GDP are very high.

  1. The Millennium Development Goals (https://www.who.int/news-room/fact-sheets/detail/millennium-development-goals-(mdgs)) were 8 goals set forth by the United Nations in the late 1990s that were meant to serve as a framework for reducing extreme poverty along multiple dimensions by 2015. Consult the file “africa-millennium-development-goals.xlsx” found in github or at https://data.humdata.org/dataset/africa-millennium-development-goals.

Choose one goal and two countries. State the goal, the countries, the measures used to assess progress in the goal, and compare and contrast the progress of the two countries toward achieving that goal.

country<-"UKR"

births_by_year <- readHMDweb(CNTRY="UKR", item="Births",username="knoxm@uw.edu", password="Pat01edd!") 

mortality_by_year_age <- readHMDweb(CNTRY= "UKR", item="Deaths_1x1",username="knoxm@uw.edu", password="Pat01edd!")

view(mortality_by_year_age)

DF<- data.frame(africa_millennium_development_goals)

I choose Millennium Development Goal 1: Eradicate extreme poverty and hunger, and the two countries I want to compare is Gambia and Botswana. the measures used to assess progress in the goal is Prevalence of underweight children under-five years of age iun % and we can see that Gambia is doing a lot better than Botswana in Goal 1, we can see the value for all Gambia value is a lot more than Botswana. you can see the value for Botswana’s Goal 1 is a lot smaller than Gmabia, Botswana’s value is mostly 3.4,5 single numbers, but for Gambia, it’s a lot better, and the value is mostly around 30-60, And we can see Gambia are doing better in achieving the goal. and from the Employment to population ratio 15-24 yrs (%), the is a lot better in Gambia too. So I believe Gambia is doing a lot better than Botswana.

  1. You are a young RA working at the World Bank. It’s 4:55 and your boss just came into your cubicle to tell you that he has a meeting at 8 am to discuss new anti-poverty strategies in the fictional country of Portlandia. He hands you the following information and asks for a poverty profile. Oh, and he has a tennis game in 20 minutes, so could you include some policy recommendations and have the report on his desk by the morning?

    The paper he hands you says:

    Portlandia is a small, poor country where the people are divided into four equal sized groups consisting of 1000 people each. One group earns $100 a year, one earns $500 a year, one earns $900 a year, and the final group earns $1500 a year. The poverty line is set at $1000. We have a budget of $300,000 for poverty
    alleviation.

    3.1 Please calculate the Head Count Ratio, and Income Gap Ratio for this country. (Include code, but this could just be simple calculations.)

    3 groups only with income $100 a year, $500 a year, and $900 a year.


Head_Count_Ratio_Portlandia<- (3000/4000)
Head_Count_Ratio_Portlandia
[1] 0.75
p<- 1000
q<-3000

Income_Gap_Ratio <- (((p-100)/p*1000+(p-500)/p*1000+(p-900)/p*1000)/q)
Income_Gap_Ratio
[1] 0.5
new_head_count_ratio <- (1000+600)/4000
view(new_head_count_ratio)
3.2 The World Bank\'s policy is to minimize head count ratio. What will your recommendation be? What will the new head count ratio be? (Include code)

I will purpose to reduce the income from the 1500 high income group, we can higher their tax, and even have tax cut for the lower income group, with them lowering their income, We can have a better asset allocation, we can narrower income gap. so the new head count ratio will be (1000+600)/4000=0.4


new_head_count_ratio <- (1000+600)/4000

new_head_count_ratio
[1] 0.4
3.3 Do you think this is the correct approach to poverty alleviation? Why or why not?

I think it's a correct approach to poverty alleviation, as rich people is making a lot more money than the poor, the tax cut we provide to lower income group will have more incentives for them to work better and they have higher potential to have higher income. and if the rich are paying more tax, we will have more money to provide more subsidy to the poor. they may have more education, better nutriction. it's a good way to poverty alleviation. 

  1. Calculate Total Fertility Rates The female population (in thousands) and births by mother’s age group in Brazil in 2005 are in the table below. (The first chunk is the data, the second is there to display it nicely.) Use this data to calculate the Total Fertility Rate for Brazil at this time.

fertility_brazil<-as.data.frame(matrix(c(8128,8531,8844, 8118, 7209, 6715, 6409,367.9,530.2,449.6, 264.4, 126.5, 38.4, 6.8), nrow=7, ncol=2, dimnames=list(c("15-19","20-24","25-29","30-34","35-39","40-44","45-49"), c("Population_Thousands","Births_Thousands"))))

fertility_brazil

total_fertility_Brazil <- 5*(367.9/8128+530.2/8531+449.6/8844+264.4/8118+126.5/7209+38.4/6715+6.8/6409)

total_fertility_Brazil
[1] 1.075732
  1. For this question, we will practice reading in some real data from the Human Mortality Database at UC Berkeley. Follow the steps in the lab to get an account and access the data you need. Modify the code in the lab exercise above to calculate and then plot the Age Specific Mortality Rates for a single year for a country other than the US. (Note: The list of countries is here https://www.mortality.org/Data/DataAvailability. They are mostly western countries, and I recommend picking a Scandinavian country to get a long and more interesting time series.)

Hint: Rather than aggregating over all deaths, you are going to filter the data for one year only, then calculate ASMR for that year.

The country I choose is from UKR, we can see the summary for the mortality thats goup by years.
Year Crude_Deaths
Min. :1959 Min. :296171
1st Qu.:1972 1st Qu.:446195
Median :1986 Median :600590
Mean :1986 Mean :579948
3rd Qu.:2000 3rd Qu.:740416
Max. :2013 Max. :792587
births_by_year <- readHMDweb(CNTRY="UKR", item="Births", username="knoxm@uw.edu", password="Pat01edd!" )

mortality_by_year_age <- readHMDweb(CNTRY="UKR", item="Deaths_1x1", username="knoxm@uw.edu", password="Pat01edd!")

head(mortality_by_year_age)
 
mortality_by_year<-mortality_by_year_age %>%
  group_by(Year) %>%
  summarise(Crude_Deaths =sum(Total))

head(mortality_by_year)

summary(mortality_by_year)
      Year       Crude_Deaths   
 Min.   :1959   Min.   :296171  
 1st Qu.:1972   1st Qu.:446195  
 Median :1986   Median :600590  
 Mean   :1986   Mean   :579948  
 3rd Qu.:2000   3rd Qu.:740416  
 Max.   :2013   Max.   :792587  
 

mortality_by_year_age_1960 <- filter(mortality_by_year_age, Year==1960)

head(mortality_by_year_age_1960)

mortality_by_year_age <- readHMDweb(CNTRY="UKR", item="Deaths_1x1", username="knoxm@uw.edu", password="Pat01edd!")

mortality_by_year <- aggregate(x=mortality_by_year_age[3:5], by=list(Year=mortality_by_year_age$Year), FUN=sum) 

mortality_by_year <- dplyr::select(mortality_by_year, Year, Total)

mortality_by_year <- dplyr::rename(mortality_by_year, Crude_Deaths=Total)  

head(mortality_by_year)

ASMR_CHINA<-matrix(c(22,60, 18,8,3,43), nrow=3, ncol=2, dimnames=list(c("<15","15-64",">64"),   c("Pop_Percent","Deaths_per_1000")))

population_by_year_age <- readHMDweb(CNTRY="UKR", item="Population", username="knoxm@uw.edu", password="Pat01edd!") 

pop_by_year<-population_by_year_age %>%
  group_by(Year) %>%
  summarise(Population_Total =sum(Total1))

head(pop_by_year)
NA

malthus <- merge(pop_by_year, mortality_by_year, by='Year', all=FALSE) 
malthus <- merge(malthus, births_by_year, by='Year')

births_by_year <- readHMDweb(CNTRY="UKR", item="Births", username="knoxm@uw.edu", password="Pat01edd!") 
births_by_year <- dplyr::select(births_by_year, Year, Total)
births_by_year <- dplyr::rename(births_by_year, Crude_Births=Total)

head(births_by_year)

population_by_year_age <- readHMDweb(CNTRY="UKR", item="Population", username="knoxm@uw.edu", password="Pat01edd!") 

pop_by_year <- aggregate(x=population_by_year_age[4:9], by=list(Year=population_by_year_age$Year), FUN=sum) 

pop_by_year <- aggregate(x = population_by_year_age[4:9], by=list(Year=population_by_year_age$Year), FUN = sum)

pop_by_year <- dplyr::select(pop_by_year, Year, Total1)%>%
  
dplyr::rename(Population_Total=Total1)

head(pop_by_year)
#Merge both Birth date and Death rate into a data frame malthus.

malthus <- merge(pop_by_year, mortality_by_year_age_1960, by='Year', all=FALSE)

malthus <- merge(pop_by_year, mortality_by_year, by='Year', all=FALSE)

malthus <- merge(malthus, births_by_year, by='Year', all = FALSE)

malthus <- merge(malthus, mortality_by_year$Crude_Deaths, all = FALSE)

malthus$CBR <- malthus$Crude_Births/malthus$Population_Total
malthus$CMR <- malthus$Crude_Deaths/malthus$Population_Total

head(malthus)
NA

#PLOT THE GRAPH for "malthus Plot for UKR"

malthus %>% ggplot(aes(x=CMR, y= CBR))+geom_point()+ ggtitle("malthus Plot for UKR")


#plot a smoothed line on the data

malthus %>%
  ggplot(aes(x=CMR, y=CBR))+geom_point()+geom_smooth(method=lm, formula= y~poly(x,3))+ggtitle("Malthus Plot for UKR with Fitted Polynomial")

6, Using the data you downloaded for problem 5, calculate the crude mortality rate for the country and year chosen.

#the year I choose for UKR is 1960

mortality_by_year_age_1960 <- filter(mortality_by_year_age, Year==1960)

head(mortality_by_year_age_1960)

crude_m_rate_1960 <- filter(malthus, Year==1960)

#we can see the CMR for 1960 is 0.006974601

head(crude_m_rate_1960)

head(malthus)
NA
LS0tDQp0aXRsZTogIjQ0OCBQcm9ibGVtIFNldCAxIg0KYXV0aG9yOiAiV2Fpd2FuZyBMYW0iDQpkYXRlOiAnMjAyMi0xMC0yNScNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KcGFjbWFuOjpwX2xvYWQoSE1ESEZEcGx1cywgdGlkeXZlcnNlLCBnZ3Bsb3QyLCBkcGx5ciwgbGF0dGljZSkNCg0KbGlicmFyeSgiZ2dwbG90MiIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpsaWJyYXJ5KCJITURIRkRwbHVzIikNCg0KYGBgDQoNCiMjIyBDb25jZXB0dWFsIFF1ZXN0aW9ucw0KDQoxLEl0IHRvb2sgRmlubGFuZCBhYm91dCA1MCB5ZWFycyB0byBnbyB0aHJvdWdoIGl0cyBkZW1vZ3JhcGhpYyB0cmFuc2l0aW9uIGFyb3VuZCB0aGUgdHVybiBvZiB0aGUgMjB0aCBjZW50dXJ5LiBGb3IgdGhpcyBxdWVzdGlvbiwgZ28gdG8gcG9wdWxhdGlvbnB5cmFtaWQubmV0LCBjaG9vc2UgYSBjb3VudHJ5IGluIEFzaWEsIEFmcmljYSwgb3IgQ2VudHJhbCBvciBTb3V0aCBBbWVyaWNhIHRoYXQgaXMgY3VycmVudGx5IGluIHRoZSB0aGlyZCBzdGFnZSBvciBsYXRlciBvZiBpdHMgZGVtb2dyYXBoaWMgdHJhbnNpdGlvbi4gTG9vayBiYWNrIGluIHRpbWUgdG8gZmluZCBhIHllYXIgaW4gd2hpY2ggaXQgd2FzIGluIHRoZSBzZWNvbmQgc3RhZ2UuIFRoZW4gZmlndXJlIG91dCBhcHByb3hpbWF0ZWx5IGhvdyBtYW55IHllYXJzIGl0IHRvb2sgdGhlIGNvdW50cnkgdG8gZW50ZXIgdGhlIHRoaXJkIHN0YWdlIEluIHlvdXIgYW5zd2VyLCB0ZWxsIG1lOiBOYW1lIG9mIHRoZSBjb3VudHJ5LCB5ZWFyIGl0IHdhcyBpbiB0aGUgc2Vjb25kIHN0YWdlLCB5ZWFycyB0byB0aGlyZCBzdGFnZS4gRGlkIHRoaXMgY291bnRyeSB0YWtlIG1vcmUgb3IgbGVzcyB0aW1lIHRoYW4gRmlubGFuZC4gVHJ5IHRvIHRoaW5rIG9mIGF0IGxlYXN0IHR3byByZWFzb25zIHdoeSB0aGF0IG1pZ2h0IGJlIHRoZSBjYXNlIGFuZCB3cml0ZSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHlvdXIgcmVhc29uaW5nLiBOb3RlOiBJZiB5b3UgY2FuJ3QgZmluZCB3aGVuIHRoZSBjb3VudHJ5IHdhcyBpbiBpdHMgc2Vjb25kIHN0YWdlLCBsb29rIGZvciBhIGRpZmZlcmVudCBjb3VudHJ5Lg0KDQpUaGUgY291bnRyeSBJIGZvdW5kIGlzIENoaW5hLCBpdCdzIHN0YXJ0ZWQgaXQncyB0aGlyZCBzdGF0ZSBpbiAyMDE1IHRvIG5vdywgVGhlIHllYXIgZm9yIGNISU5BIGluIHNlY29uZCBzdGFnZSBpcyBhcm91bmQgMTk5MS4gdGhlIHBvcHVsYXRpb24gZ3Jvd3RoIGZvciBhZ2UgZ3JvdXAgMC00IGlzIGFyb3VuZCA1LjklIGZvciBtYWxlcyBhbmQgNS40JSBmb3IgZmVtYWxlcy4geW91IGNhbiBzZWUgYSBjbGVhciBib29tIGluIGl0cyBmZXJ0aWxpdHkgcmF0ZSBhcm91bmQgMTk5MS4gYW5kIENoaW5hIHRha2VzIGEgbG90IGxlc3MgdGltZSB0aGFuIEZpbmxhbmQgdG8gZW50ZXIgaXQncyB0aGlyZCBzdGFnZSBhcm91bmQgMjAxNS4gd2hpY2ggaXMganVzdCAyNSB5ZWFycyBjb21wYXJlIHRvIGZpbmxhbmQuIHRoZSBmZXJ0YWxpdHkgcmF0ZSBoYWQgYSBzdGVhZHkgZmFsbCBzaW5jZSAyMDE1Lg0KDQpmaXJzdCByZWFzb24gaXMgdGhlIGVuZCBvZiBDaGluYSdzIG9uZS1jaGlsZCBwb2xpY3kgaW4gMTk3OS4gQWZ0ZXIgYWxtb3N0IDEwIHllYXJzIG9mIGZlcnRhbGl0eSBjb25zdHJhY3R1aW9uIGhhcHBlbmluZyBpbiBDaGluYSwgQ2hpbmVzZSBwZW9wbGUgZmluYWxseSBnZXQgdG8gc3RhcnRlZCByZXBvcnRkdWNlIGEgbG90IG9mIGtpZCBvbmNlIGFnYWluIHRvIGhhdmUgZW5vdWdoIGtpZCB0byBoZWxwIGxhYm91ciBmb3VyY2UuIEJhY2sgdGhlbiBDaGluYSBpcyBhIGh1Z2UgYWdncmVjdWx0dXJlIHNvY2lldHksIG1vcmUga2lkcyBtZWFucyBiZXR0ZXIgcmV0dXJuIGluIGFnZ3JlY3VsdHVyZS4gU28gd2UgY2FuIHNlZSB0aGV5IGdldCBpbnRvDQoNCkkgYmVsaXZlIHRoZSBiZXN0IHJlYXNvbiBpcyB0aGUgdHJlbWVtZGlvdXMgZ3Jvd3RoIGNhdXNlIGJ5IHBvbGl0aWNhbCByZWFzb24gaGFwcGVuaW5nIGluIENoaW5hIHNpbmNlIDE5OTIuIENoaW5hIGRlY2lkZWQgdG8gb3BlbiB0aGVpciBtYXJrZXQgdG8gZ2xvYmFsIGludmVzdG9ycyBhbmQgbGFyZ2VseSBzdWJzaWRpemVkIG9uIGl0J3MgbWFudWZhY3R1cmUgaW5kdXN0cnkuIFdoaWNoIGxlYWQgdG8gYSB0cmVtZW1kaW91cyBncm93dGggaW4gaXQncyBHRFAuIFRoZSBvdmVyYWxsIGVjb25vbW55IGhhZCBhIHN1cGVyIGJvb20gc2luY2UgdGhlbi4gVGhhdCBjYXVzZWQgdGhlaXIgY2l0aXplbiB0byBmb2N1cyBvbiBpdCdzIGVjb25vbXkgZ3Jvd3RoIGFuZCBpZ25vcmVkIHRoZSBmZXJ0YWxpdHkuIFNvIEFzIENoaW5hIGVjb25vbXkgZ2V0dGluZyBzdHJvbmdlciBhbmQgc3Ryb25nZXIsIHRoZSBmZXJ0YWxpdXR5IHJhdGUgZG9wZWQgdG8gYXJvdW5kIDIuNSAlIGZvciBib3RoIG1hbGVzIGFuZCBmZW1hbGVzLiBhbmQgV2UgY2FuIHNlZSBDaGluYSBlbmV0ZXIgaW50byB0aGUgdGhpcmQgc3RhZ2UgYXJvdW5kIDIwMTUuDQoNCkFub3RoZXIgcmVhc29uIGlzIHRoZSBpbmZsdWN0dXJlIGlzbid0IGJ1aWxkIGVub3VnaCBmb3IgdGhpcyBodWdlIGdyb3d0aCBpbiBraWQgYW5kIEdEUC4gQXMgcG9wdWxhdGlvbiBpcyByZWxhdGl2ZWx5IGh1Z2UsIGJ1dCB0aGUgaW5mc2N0dXJlIGlzbnQgZW5vdWdoIGZvciB0aGUgcG9wdWxhdGlvbiwgUGVvcGxlIGFyZSBmcmFzdHVyZWQgYWJvdXQgaGF2aW5nIGEga2lkIGFuZCBhcmUgbm90IGFibGUgdG8gcmFpc2UgdGhlbSBiZWNhdXNlIG9mIHRoZSBleHBlbmNpc2UgY29zdC4geW91IGNhbiBhbHNvIHNlZSB0aGUgZnVydGFsaXR5IHJhdGUgZHJvcGVkIGEgbG90IHNpbmNlIDIwMTUgd2hlbiBpdCdzIEdEUCBhcmUgdmVyeSBoaWdoLg0KDQoyLiAgVGhlIE1pbGxlbm5pdW0gRGV2ZWxvcG1lbnQgR29hbHMgKFtodHRwczovL3d3dy53aG8uaW50L25ld3Mtcm9vbS9mYWN0LXNoZWV0cy9kZXRhaWwvbWlsbGVubml1bS1kZXZlbG9wbWVudC1nb2Fscy0obWRncyldKGh0dHBzOi8vd3d3Lndoby5pbnQvbmV3cy1yb29tL2ZhY3Qtc2hlZXRzL2RldGFpbC9taWxsZW5uaXVtLWRldmVsb3BtZW50LWdvYWxzLShtZGdzKSl7LnVyaX0pIHdlcmUgOCBnb2FscyBzZXQgZm9ydGggYnkgdGhlIFVuaXRlZCBOYXRpb25zIGluIHRoZSBsYXRlIDE5OTBzIHRoYXQgd2VyZSBtZWFudCB0byBzZXJ2ZSBhcyBhIGZyYW1ld29yayBmb3IgcmVkdWNpbmcgZXh0cmVtZSBwb3ZlcnR5IGFsb25nIG11bHRpcGxlIGRpbWVuc2lvbnMgYnkgMjAxNS4gQ29uc3VsdCB0aGUgZmlsZSAiYWZyaWNhLW1pbGxlbm5pdW0tZGV2ZWxvcG1lbnQtZ29hbHMueGxzeCIgZm91bmQgaW4gZ2l0aHViIG9yIGF0IDxodHRwczovL2RhdGEuaHVtZGF0YS5vcmcvZGF0YXNldC9hZnJpY2EtbWlsbGVubml1bS1kZXZlbG9wbWVudC1nb2Fscz4uDQoNCkNob29zZSBvbmUgZ29hbCBhbmQgdHdvIGNvdW50cmllcy4gU3RhdGUgdGhlIGdvYWwsIHRoZSBjb3VudHJpZXMsIHRoZSBtZWFzdXJlcyB1c2VkIHRvIGFzc2VzcyBwcm9ncmVzcyBpbiB0aGUgZ29hbCwgYW5kIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBwcm9ncmVzcyBvZiB0aGUgdHdvIGNvdW50cmllcyB0b3dhcmQgYWNoaWV2aW5nIHRoYXQgZ29hbC4NCg0KYGBge1J9DQpjb3VudHJ5PC0iVUtSIg0KDQpiaXJ0aHNfYnlfeWVhciA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJCaXJ0aHMiLHVzZXJuYW1lPSJrbm94bUB1dy5lZHUiLCBwYXNzd29yZD0iUGF0MDFlZGQhIikgDQoNCm1vcnRhbGl0eV9ieV95ZWFyX2FnZSA8LSByZWFkSE1Ed2ViKENOVFJZPSAiVUtSIiwgaXRlbT0iRGVhdGhzXzF4MSIsdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKQ0KDQp2aWV3KG1vcnRhbGl0eV9ieV95ZWFyX2FnZSkNCg0KREY8LSBkYXRhLmZyYW1lKGFmcmljYV9taWxsZW5uaXVtX2RldmVsb3BtZW50X2dvYWxzKQ0KDQoNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KSSBjaG9vc2UgTWlsbGVubml1bSBEZXZlbG9wbWVudCBHb2FsIDE6IEVyYWRpY2F0ZSBleHRyZW1lIHBvdmVydHkgYW5kIGh1bmdlciwgYW5kIHRoZSB0d28gY291bnRyaWVzIEkgd2FudCB0byBjb21wYXJlIGlzIEdhbWJpYSBhbmQgQm90c3dhbmEuIHRoZSBtZWFzdXJlcyB1c2VkIHRvIGFzc2VzcyBwcm9ncmVzcyBpbiB0aGUgZ29hbCBpcyBQcmV2YWxlbmNlIG9mIHVuZGVyd2VpZ2h0IGNoaWxkcmVuIHVuZGVyLWZpdmUgeWVhcnMgb2YgYWdlIGl1biAlIGFuZCB3ZSBjYW4gc2VlIHRoYXQgR2FtYmlhIGlzIGRvaW5nIGEgbG90IGJldHRlciB0aGFuIEJvdHN3YW5hIGluIEdvYWwgMSwgd2UgY2FuIHNlZSB0aGUgdmFsdWUgZm9yIGFsbCBHYW1iaWEgdmFsdWUgaXMgYSBsb3QgbW9yZSB0aGFuIEJvdHN3YW5hLiB5b3UgY2FuIHNlZSB0aGUgdmFsdWUgZm9yIEJvdHN3YW5hJ3MgR29hbCAxIGlzIGEgbG90IHNtYWxsZXIgdGhhbiBHbWFiaWEsIEJvdHN3YW5hJ3MgdmFsdWUgaXMgbW9zdGx5IDMuNCw1IHNpbmdsZSBudW1iZXJzLCBidXQgZm9yIEdhbWJpYSwgaXQncyBhIGxvdCBiZXR0ZXIsIGFuZCB0aGUgdmFsdWUgaXMgbW9zdGx5IGFyb3VuZCAzMC02MCwgQW5kIHdlIGNhbiBzZWUgR2FtYmlhIGFyZSBkb2luZyBiZXR0ZXIgaW4gYWNoaWV2aW5nIHRoZSBnb2FsLiBhbmQgZnJvbSB0aGUgRW1wbG95bWVudCB0byBwb3B1bGF0aW9uIHJhdGlvIDE1LTI0IHlycyAoJSksIHRoZSBpcyBhIGxvdCBiZXR0ZXIgaW4gR2FtYmlhIHRvby4gU28gSSBiZWxpZXZlIEdhbWJpYSBpcyBkb2luZyBhIGxvdCBiZXR0ZXIgdGhhbiBCb3Rzd2FuYS4NCg0KMy4gIFlvdSBhcmUgYSB5b3VuZyBSQSB3b3JraW5nIGF0IHRoZSBXb3JsZCBCYW5rLiBJdCdzIDQ6NTUgYW5kIHlvdXIgYm9zcyBqdXN0IGNhbWUgaW50byB5b3VyIGN1YmljbGUgdG8gdGVsbCB5b3UgdGhhdCBoZSBoYXMgYSBtZWV0aW5nIGF0IDggYW0gdG8gZGlzY3VzcyBuZXcgYW50aS1wb3ZlcnR5IHN0cmF0ZWdpZXMgaW4gdGhlIGZpY3Rpb25hbCBjb3VudHJ5IG9mIFBvcnRsYW5kaWEuIEhlIGhhbmRzIHlvdSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBhc2tzIGZvciBhIHBvdmVydHkgcHJvZmlsZS4gT2gsIGFuZCBoZSBoYXMgYSB0ZW5uaXMgZ2FtZSBpbiAyMCBtaW51dGVzLCBzbyBjb3VsZCB5b3UgaW5jbHVkZSBzb21lIHBvbGljeSByZWNvbW1lbmRhdGlvbnMgYW5kIGhhdmUgdGhlIHJlcG9ydCBvbiBoaXMgZGVzayBieSB0aGUgbW9ybmluZz8NCg0KICAgIFRoZSBwYXBlciBoZSBoYW5kcyB5b3Ugc2F5czoNCg0KICAgIFBvcnRsYW5kaWEgaXMgYSBzbWFsbCwgcG9vciBjb3VudHJ5IHdoZXJlIHRoZSBwZW9wbGUgYXJlIGRpdmlkZWQgaW50byBmb3VyIGVxdWFsIHNpemVkIGdyb3VwcyBjb25zaXN0aW5nIG9mIDEwMDAgcGVvcGxlIGVhY2guIE9uZSBncm91cCBlYXJucyBcJDEwMCBhIHllYXIsIG9uZSBlYXJucyBcJDUwMCBhIHllYXIsIG9uZSBlYXJucyBcJDkwMCBhIHllYXIsIGFuZCB0aGUgZmluYWwgZ3JvdXAgZWFybnMgXCQxNTAwIGEgeWVhci4gVGhlIHBvdmVydHkgbGluZSBpcyBzZXQgYXQgXCQxMDAwLiBXZSBoYXZlIGEgYnVkZ2V0IG9mIFwkMzAwLDAwMCBmb3IgcG92ZXJ0eVwNCiAgICBhbGxldmlhdGlvbi4NCg0KICAgIDMuMSBQbGVhc2UgY2FsY3VsYXRlIHRoZSBIZWFkIENvdW50IFJhdGlvLCBhbmQgSW5jb21lIEdhcCBSYXRpbyBmb3IgdGhpcyBjb3VudHJ5LiAoSW5jbHVkZSBjb2RlLCBidXQgdGhpcyBjb3VsZCBqdXN0IGJlIHNpbXBsZSBjYWxjdWxhdGlvbnMuKQ0KDQogICAgMyBncm91cHMgb25seSB3aXRoIGluY29tZSBcJDEwMCBhIHllYXIsIFwkNTAwIGEgeWVhciwgYW5kIFwkOTAwIGEgeWVhci4NCg0KYGBge3J9DQoNCkhlYWRfQ291bnRfUmF0aW9fUG9ydGxhbmRpYTwtICgzMDAwLzQwMDApDQpIZWFkX0NvdW50X1JhdGlvX1BvcnRsYW5kaWENCg0KcDwtIDEwMDANCnE8LTMwMDANCg0KSW5jb21lX0dhcF9SYXRpbyA8LSAoKChwLTEwMCkvcCoxMDAwKyhwLTUwMCkvcCoxMDAwKyhwLTkwMCkvcCoxMDAwKS9xKQ0KSW5jb21lX0dhcF9SYXRpbw0KDQpuZXdfaGVhZF9jb3VudF9yYXRpbyA8LSAoMTAwMCs2MDApLzQwMDANCnZpZXcobmV3X2hlYWRfY291bnRfcmF0aW8pDQoNCmBgYA0KDQogICAgMy4yIFRoZSBXb3JsZCBCYW5rXCdzIHBvbGljeSBpcyB0byBtaW5pbWl6ZSBoZWFkIGNvdW50IHJhdGlvLiBXaGF0IHdpbGwgeW91ciByZWNvbW1lbmRhdGlvbiBiZT8gV2hhdCB3aWxsIHRoZSBuZXcgaGVhZCBjb3VudCByYXRpbyBiZT8gKEluY2x1ZGUgY29kZSkNCg0KSSB3aWxsIHB1cnBvc2UgdG8gcmVkdWNlIHRoZSBpbmNvbWUgZnJvbSB0aGUgMTUwMCBoaWdoIGluY29tZSBncm91cCwgd2UgY2FuIGhpZ2hlciB0aGVpciB0YXgsIGFuZCBldmVuIGhhdmUgdGF4IGN1dCBmb3IgdGhlIGxvd2VyIGluY29tZSBncm91cCwgd2l0aCB0aGVtIGxvd2VyaW5nIHRoZWlyIGluY29tZSwgV2UgY2FuIGhhdmUgYSBiZXR0ZXIgYXNzZXQgYWxsb2NhdGlvbiwgd2UgY2FuIG5hcnJvd2VyIGluY29tZSBnYXAuIHNvIHRoZSBuZXcgaGVhZCBjb3VudCByYXRpbyB3aWxsIGJlICgxMDAwKzYwMCkvNDAwMD0wLjQNCg0KYGBge1J9DQoNCm5ld19oZWFkX2NvdW50X3JhdGlvIDwtICgxMDAwKzYwMCkvNDAwMA0KDQpuZXdfaGVhZF9jb3VudF9yYXRpbw0KDQpgYGANCg0KICAgIDMuMyBEbyB5b3UgdGhpbmsgdGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwb3ZlcnR5IGFsbGV2aWF0aW9uPyBXaHkgb3Igd2h5IG5vdD8NCg0KICAgIEkgdGhpbmsgaXQncyBhIGNvcnJlY3QgYXBwcm9hY2ggdG8gcG92ZXJ0eSBhbGxldmlhdGlvbiwgYXMgcmljaCBwZW9wbGUgaXMgbWFraW5nIGEgbG90IG1vcmUgbW9uZXkgdGhhbiB0aGUgcG9vciwgdGhlIHRheCBjdXQgd2UgcHJvdmlkZSB0byBsb3dlciBpbmNvbWUgZ3JvdXAgd2lsbCBoYXZlIG1vcmUgaW5jZW50aXZlcyBmb3IgdGhlbSB0byB3b3JrIGJldHRlciBhbmQgdGhleSBoYXZlIGhpZ2hlciBwb3RlbnRpYWwgdG8gaGF2ZSBoaWdoZXIgaW5jb21lLiBhbmQgaWYgdGhlIHJpY2ggYXJlIHBheWluZyBtb3JlIHRheCwgd2Ugd2lsbCBoYXZlIG1vcmUgbW9uZXkgdG8gcHJvdmlkZSBtb3JlIHN1YnNpZHkgdG8gdGhlIHBvb3IuIHRoZXkgbWF5IGhhdmUgbW9yZSBlZHVjYXRpb24sIGJldHRlciBudXRyaWN0aW9uLiBpdCdzIGEgZ29vZCB3YXkgdG8gcG92ZXJ0eSBhbGxldmlhdGlvbi4gDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo0LiAgQ2FsY3VsYXRlIFRvdGFsIEZlcnRpbGl0eSBSYXRlcyBUaGUgZmVtYWxlIHBvcHVsYXRpb24gKGluIHRob3VzYW5kcykgYW5kIGJpcnRocyBieSBtb3RoZXIncyBhZ2UgZ3JvdXAgaW4gQnJhemlsIGluIDIwMDUgYXJlIGluIHRoZSB0YWJsZSBiZWxvdy4gKFRoZSBmaXJzdCBjaHVuayBpcyB0aGUgZGF0YSwgdGhlIHNlY29uZCBpcyB0aGVyZSB0byBkaXNwbGF5IGl0IG5pY2VseS4pIFVzZSB0aGlzIGRhdGEgdG8gY2FsY3VsYXRlIHRoZSBUb3RhbCBGZXJ0aWxpdHkgUmF0ZSBmb3IgQnJhemlsIGF0IHRoaXMgdGltZS4NCg0KYGBge3J9DQoNCmZlcnRpbGl0eV9icmF6aWw8LWFzLmRhdGEuZnJhbWUobWF0cml4KGMoODEyOCw4NTMxLDg4NDQsIDgxMTgsIDcyMDksIDY3MTUsIDY0MDksMzY3LjksNTMwLjIsNDQ5LjYsIDI2NC40LCAxMjYuNSwgMzguNCwgNi44KSwgbnJvdz03LCBuY29sPTIsIGRpbW5hbWVzPWxpc3QoYygiMTUtMTkiLCIyMC0yNCIsIjI1LTI5IiwiMzAtMzQiLCIzNS0zOSIsIjQwLTQ0IiwiNDUtNDkiKSwgYygiUG9wdWxhdGlvbl9UaG91c2FuZHMiLCJCaXJ0aHNfVGhvdXNhbmRzIikpKSkNCg0KZmVydGlsaXR5X2JyYXppbA0KDQp0b3RhbF9mZXJ0aWxpdHlfQnJhemlsIDwtIDUqKDM2Ny45LzgxMjgrNTMwLjIvODUzMSs0NDkuNi84ODQ0KzI2NC40LzgxMTgrMTI2LjUvNzIwOSszOC40LzY3MTUrNi44LzY0MDkpDQoNCnRvdGFsX2ZlcnRpbGl0eV9CcmF6aWwNCg0KYGBgDQoNCjUuICBGb3IgdGhpcyBxdWVzdGlvbiwgd2Ugd2lsbCBwcmFjdGljZSByZWFkaW5nIGluIHNvbWUgcmVhbCBkYXRhIGZyb20gdGhlIEh1bWFuIE1vcnRhbGl0eSBEYXRhYmFzZSBhdCBVQyBCZXJrZWxleS4gRm9sbG93IHRoZSBzdGVwcyBpbiB0aGUgbGFiIHRvIGdldCBhbiBhY2NvdW50IGFuZCBhY2Nlc3MgdGhlIGRhdGEgeW91IG5lZWQuIE1vZGlmeSB0aGUgY29kZSBpbiB0aGUgbGFiIGV4ZXJjaXNlIGFib3ZlIHRvIGNhbGN1bGF0ZSBhbmQgdGhlbiBwbG90IHRoZSBBZ2UgU3BlY2lmaWMgTW9ydGFsaXR5IFJhdGVzIGZvciBhIHNpbmdsZSB5ZWFyIGZvciBhIGNvdW50cnkgb3RoZXIgdGhhbiB0aGUgVVMuIChOb3RlOiBUaGUgbGlzdCBvZiBjb3VudHJpZXMgaXMgaGVyZSA8aHR0cHM6Ly93d3cubW9ydGFsaXR5Lm9yZy9EYXRhL0RhdGFBdmFpbGFiaWxpdHk+LiBUaGV5IGFyZSBtb3N0bHkgd2VzdGVybiBjb3VudHJpZXMsIGFuZCBJIHJlY29tbWVuZCBwaWNraW5nIGEgU2NhbmRpbmF2aWFuIGNvdW50cnkgdG8gZ2V0IGEgbG9uZyBhbmQgbW9yZSBpbnRlcmVzdGluZyB0aW1lIHNlcmllcy4pDQoNCkhpbnQ6IFJhdGhlciB0aGFuIGFnZ3JlZ2F0aW5nIG92ZXIgYWxsIGRlYXRocywgeW91IGFyZSBnb2luZyB0byBmaWx0ZXIgdGhlIGRhdGEgZm9yIG9uZSB5ZWFyIG9ubHksIHRoZW4gY2FsY3VsYXRlIEFTTVIgZm9yIHRoYXQgeWVhci4NCg0KLS0tDQpUaGUgY291bnRyeSBJIGNob29zZSBpcyBmcm9tIFVLUiwgd2UgY2FuIHNlZSB0aGUgc3VtbWFyeSBmb3IgdGhlIG1vcnRhbGl0eSB0aGF0cyBnb3VwIGJ5IHllYXJzLiANCiAgICBZZWFyICAgICAgIENydWRlX0RlYXRocyAgIA0KIE1pbi4gICA6MTk1OSAgIE1pbi4gICA6Mjk2MTcxICANCiAxc3QgUXUuOjE5NzIgICAxc3QgUXUuOjQ0NjE5NSAgDQogTWVkaWFuIDoxOTg2ICAgTWVkaWFuIDo2MDA1OTAgIA0KIE1lYW4gICA6MTk4NiAgIE1lYW4gICA6NTc5OTQ4ICANCiAzcmQgUXUuOjIwMDAgICAzcmQgUXUuOjc0MDQxNiAgDQogTWF4LiAgIDoyMDEzICAgTWF4LiAgIDo3OTI1ODcgDQotLS0NCg0KYGBge1J9DQpiaXJ0aHNfYnlfeWVhciA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJCaXJ0aHMiLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIgKQ0KDQptb3J0YWxpdHlfYnlfeWVhcl9hZ2UgPC0gcmVhZEhNRHdlYihDTlRSWT0iVUtSIiwgaXRlbT0iRGVhdGhzXzF4MSIsIHVzZXJuYW1lPSJrbm94bUB1dy5lZHUiLCBwYXNzd29yZD0iUGF0MDFlZGQhIikNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcl9hZ2UpDQogDQptb3J0YWxpdHlfYnlfeWVhcjwtbW9ydGFsaXR5X2J5X3llYXJfYWdlICU+JQ0KICBncm91cF9ieShZZWFyKSAlPiUNCiAgc3VtbWFyaXNlKENydWRlX0RlYXRocyA9c3VtKFRvdGFsKSkNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcikNCg0Kc3VtbWFyeShtb3J0YWxpdHlfYnlfeWVhcikNCiANCmBgYA0KDQpgYGB7Un0NCg0KbW9ydGFsaXR5X2J5X3llYXJfYWdlXzE5NjAgPC0gZmlsdGVyKG1vcnRhbGl0eV9ieV95ZWFyX2FnZSwgWWVhcj09MTk2MCkNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcl9hZ2VfMTk2MCkNCg0KbW9ydGFsaXR5X2J5X3llYXJfYWdlIDwtIHJlYWRITUR3ZWIoQ05UUlk9IlVLUiIsIGl0ZW09IkRlYXRoc18xeDEiLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIpDQoNCm1vcnRhbGl0eV9ieV95ZWFyIDwtIGFnZ3JlZ2F0ZSh4PW1vcnRhbGl0eV9ieV95ZWFyX2FnZVszOjVdLCBieT1saXN0KFllYXI9bW9ydGFsaXR5X2J5X3llYXJfYWdlJFllYXIpLCBGVU49c3VtKSANCg0KbW9ydGFsaXR5X2J5X3llYXIgPC0gZHBseXI6OnNlbGVjdChtb3J0YWxpdHlfYnlfeWVhciwgWWVhciwgVG90YWwpDQoNCm1vcnRhbGl0eV9ieV95ZWFyIDwtIGRwbHlyOjpyZW5hbWUobW9ydGFsaXR5X2J5X3llYXIsIENydWRlX0RlYXRocz1Ub3RhbCkgIA0KDQpoZWFkKG1vcnRhbGl0eV9ieV95ZWFyKQ0KYGBgDQoNCmBgYHtyfQ0KDQpBU01SX0NISU5BPC1tYXRyaXgoYygyMiw2MCwgMTgsOCwzLDQzKSwgbnJvdz0zLCBuY29sPTIsIGRpbW5hbWVzPWxpc3QoYygiPDE1IiwiMTUtNjQiLCI+NjQiKSwgICBjKCJQb3BfUGVyY2VudCIsIkRlYXRoc19wZXJfMTAwMCIpKSkNCg0KcG9wdWxhdGlvbl9ieV95ZWFyX2FnZSA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJQb3B1bGF0aW9uIiwgdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKSANCg0KcG9wX2J5X3llYXI8LXBvcHVsYXRpb25fYnlfeWVhcl9hZ2UgJT4lDQogIGdyb3VwX2J5KFllYXIpICU+JQ0KICBzdW1tYXJpc2UoUG9wdWxhdGlvbl9Ub3RhbCA9c3VtKFRvdGFsMSkpDQoNCmhlYWQocG9wX2J5X3llYXIpDQoNCmBgYA0KDQpgYGB7cn0NCg0KbWFsdGh1cyA8LSBtZXJnZShwb3BfYnlfeWVhciwgbW9ydGFsaXR5X2J5X3llYXIsIGJ5PSdZZWFyJywgYWxsPUZBTFNFKSANCm1hbHRodXMgPC0gbWVyZ2UobWFsdGh1cywgYmlydGhzX2J5X3llYXIsIGJ5PSdZZWFyJykNCg0KYmlydGhzX2J5X3llYXIgPC0gcmVhZEhNRHdlYihDTlRSWT0iVUtSIiwgaXRlbT0iQmlydGhzIiwgdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKSANCmJpcnRoc19ieV95ZWFyIDwtIGRwbHlyOjpzZWxlY3QoYmlydGhzX2J5X3llYXIsIFllYXIsIFRvdGFsKQ0KYmlydGhzX2J5X3llYXIgPC0gZHBseXI6OnJlbmFtZShiaXJ0aHNfYnlfeWVhciwgQ3J1ZGVfQmlydGhzPVRvdGFsKQ0KDQpoZWFkKGJpcnRoc19ieV95ZWFyKQ0KYGBgDQoNCmBgYHtSfQ0KDQpwb3B1bGF0aW9uX2J5X3llYXJfYWdlIDwtIHJlYWRITUR3ZWIoQ05UUlk9IlVLUiIsIGl0ZW09IlBvcHVsYXRpb24iLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIpIA0KDQpwb3BfYnlfeWVhciA8LSBhZ2dyZWdhdGUoeD1wb3B1bGF0aW9uX2J5X3llYXJfYWdlWzQ6OV0sIGJ5PWxpc3QoWWVhcj1wb3B1bGF0aW9uX2J5X3llYXJfYWdlJFllYXIpLCBGVU49c3VtKSANCg0KcG9wX2J5X3llYXIgPC0gYWdncmVnYXRlKHggPSBwb3B1bGF0aW9uX2J5X3llYXJfYWdlWzQ6OV0sIGJ5PWxpc3QoWWVhcj1wb3B1bGF0aW9uX2J5X3llYXJfYWdlJFllYXIpLCBGVU4gPSBzdW0pDQoNCnBvcF9ieV95ZWFyIDwtIGRwbHlyOjpzZWxlY3QocG9wX2J5X3llYXIsIFllYXIsIFRvdGFsMSklPiUNCiAgDQpkcGx5cjo6cmVuYW1lKFBvcHVsYXRpb25fVG90YWw9VG90YWwxKQ0KDQpoZWFkKHBvcF9ieV95ZWFyKQ0KYGBgDQoNCmBgYHtSfQ0KI01lcmdlIGJvdGggQmlydGggZGF0ZSBhbmQgRGVhdGggcmF0ZSBpbnRvIGEgZGF0YSBmcmFtZSBtYWx0aHVzLg0KDQptYWx0aHVzIDwtIG1lcmdlKHBvcF9ieV95ZWFyLCBtb3J0YWxpdHlfYnlfeWVhcl9hZ2VfMTk2MCwgYnk9J1llYXInLCBhbGw9RkFMU0UpDQoNCm1hbHRodXMgPC0gbWVyZ2UocG9wX2J5X3llYXIsIG1vcnRhbGl0eV9ieV95ZWFyLCBieT0nWWVhcicsIGFsbD1GQUxTRSkNCg0KbWFsdGh1cyA8LSBtZXJnZShtYWx0aHVzLCBiaXJ0aHNfYnlfeWVhciwgYnk9J1llYXInLCBhbGwgPSBGQUxTRSkNCg0KbWFsdGh1cyA8LSBtZXJnZShtYWx0aHVzLCBtb3J0YWxpdHlfYnlfeWVhciRDcnVkZV9EZWF0aHMsIGFsbCA9IEZBTFNFKQ0KDQptYWx0aHVzJENCUiA8LSBtYWx0aHVzJENydWRlX0JpcnRocy9tYWx0aHVzJFBvcHVsYXRpb25fVG90YWwNCm1hbHRodXMkQ01SIDwtIG1hbHRodXMkQ3J1ZGVfRGVhdGhzL21hbHRodXMkUG9wdWxhdGlvbl9Ub3RhbA0KDQpoZWFkKG1hbHRodXMpDQoNCmBgYA0KDQpgYGB7Un0NCg0KI1BMT1QgVEhFIEdSQVBIIGZvciAibWFsdGh1cyBQbG90IGZvciBVS1IiDQoNCm1hbHRodXMgJT4lIGdncGxvdChhZXMoeD1DTVIsIHk9IENCUikpK2dlb21fcG9pbnQoKSsgZ2d0aXRsZSgibWFsdGh1cyBQbG90IGZvciBVS1IiKQ0KDQpgYGANCg0KYGBge1J9DQoNCiNwbG90IGEgc21vb3RoZWQgbGluZSBvbiB0aGUgZGF0YQ0KDQptYWx0aHVzICU+JQ0KICBnZ3Bsb3QoYWVzKHg9Q01SLCB5PUNCUikpK2dlb21fcG9pbnQoKStnZW9tX3Ntb290aChtZXRob2Q9bG0sIGZvcm11bGE9IHl+cG9seSh4LDMpKStnZ3RpdGxlKCJNYWx0aHVzIFBsb3QgZm9yIFVLUiB3aXRoIEZpdHRlZCBQb2x5bm9taWFsIikNCg0KYGBgDQoNCjYsIFVzaW5nIHRoZSBkYXRhIHlvdSBkb3dubG9hZGVkIGZvciBwcm9ibGVtIDUsIGNhbGN1bGF0ZSB0aGUgY3J1ZGUgbW9ydGFsaXR5IHJhdGUgZm9yIHRoZSBjb3VudHJ5IGFuZCB5ZWFyIGNob3Nlbi4NCg0KYGBge1J9DQojdGhlIHllYXIgSSBjaG9vc2UgZm9yIFVLUiBpcyAxOTYwDQoNCm1vcnRhbGl0eV9ieV95ZWFyX2FnZV8xOTYwIDwtIGZpbHRlcihtb3J0YWxpdHlfYnlfeWVhcl9hZ2UsIFllYXI9PTE5NjApDQoNCmhlYWQobW9ydGFsaXR5X2J5X3llYXJfYWdlXzE5NjApDQoNCmNydWRlX21fcmF0ZV8xOTYwIDwtIGZpbHRlcihtYWx0aHVzLCBZZWFyPT0xOTYwKQ0KDQojd2UgY2FuIHNlZSB0aGUgQ01SIGZvciAxOTYwIGlzIDAuMDA2OTc0NjAxDQoNCmhlYWQoY3J1ZGVfbV9yYXRlXzE5NjApDQoNCmhlYWQobWFsdGh1cykNCg0KYGBgDQo=