1 Introduction

This data set contains information on employee attrition. It has 1470 rows and 35 columns. The variables include age, gender, job satisfaction, environment satisfaction, education field, job role, income, overtime, percentage salary hike, tenure, training time, years in current role, marital status, and more. With these variables, this data set can be used to predict turnover, and find differences between the group that stayed or left.

dat <- read.csv(file="https://github.com/chinwex/STA553/raw/main/w10/EmployeeAttritionData.csv")

1.1 Objectives of this Analysis

The following are the questions and objectives that describe and explain the main purpose of this analysis.

  1. To predict which employees are more likely to leave.
  2. What is the percentage of employees that have left the company?
  3. Are there any notable patterns in terms of employee attrition based on gender, age, department, job role and job satisfaction?

1.2 Data Management

A binary variable Attrition count was added to the dataset which takes the value of 0 and 1. The value, 0, represents people who are still with the company whereas 1 represents people who left. Another variable, Age category was created which combined the ages into 5 different groups: less than 25, 25 to 34, 35 to 44, 45 to 55 and 55 and above.

dat$Attritioncount <- ifelse(dat$Attrition == "Yes", 1, 0)
dat$Agecat <- ifelse(dat$Age < 25, "Less than 25",
                     ifelse(dat$Age >= 25 & dat$Age < 35, "25-34",
                            ifelse(dat$Age >= 35 & dat$Age < 45, "35-44",
                                   ifelse(dat$Age >= 45 & dat$Age < 55, "45-54", "55 and Above"))))
write.csv(dat, file = "C:\\Users\\echef\\Documents\\STA553\\week 10\\Attrition_data.csv")

The final dataset can be found here: https://github.com/chinwex/STA553/raw/main/w10/Attrition_data.csv

2 Employee Attrition Dashboard

This dashboard was designed to identify the patterns of attrition in the company based on several factors such as gender, age, job role, job satisfaction, monthly income, department, and years at the company.



2.1 Attrition Summary

  • The total number of employees in the company = 1470
  • Average Age of Employees = 37
  • Average monthly income = 6503
  • Average hourly rate = 66
  • The number of employees recorded to have left = 237
  • Percentage Attrition = 16.1%

2.2 Attrition by Department and Job Role

The bulk of employees that leave the organisation work in research and development. Positions mainly affected are the Laboratory Technician and Research Scientist roles. Employees in the department of Human Resources have the lowest attrition rates, which may be because they are also the smallest department in the organisation. Overall, managers have the company’s lowest attrition rates.

2.3 Attrition by Age

Employees whose ages lie between 25 and 34 are most likely to leave. That may be due to the fact that they are the group with the highest number of workers whereas those that are 55 or older are most likely to stay.

2.4 Attrition by Age and Gender

In all age groups, males have higher attrition counts than females. Males who are between the ages of 25 and 34 have the highest attrition counts while females who are 55 or older have the lowest attrition counts.

2.5 Monthly Income by Years at Company

There is a linear association between monthly income and years at the company. The higher the number of years spent by a worker in the company, the more the monthly income. For example, employees who have spent 37 years in the company, have a median monthly income of 13,872 while those who have spent just 1 year, have a median monthly income of 3,346. Also, attrition rates are higher among people with lower working years at the company.

2.6 Attrition by Job Satisfaction

There are 4 levels of job satisfaction - low, medium, high and very high. From the dashboard, this was assessed with a line plot showing the total attrition at each job satisfaction level for every department. Irrespective of the job satisfaction level, employees from Human resources still maintained the lowest attrition counts. Overall, workers with high job satisfaction have the highest attrition counts.

3 Employee Attrition StoryPoint



LS0tDQp0aXRsZTogIkFuYWx5dGljIERhc2JvYXJkcyB3aXRoIFRhYmxlYXUiDQphdXRob3I6ICJFY2hlZnUgQ2hpbndlbmR1Ig0KZGF0ZTogIjQvOS8yMDI0Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGZpZ193aWR0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICB0aGVtZTogcmVhZGFibGUNCi0tLQ0KICAgICAgDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KZGl2I1RPQyBsaSB7DQogICAgbGlzdC1zdHlsZTpub25lOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgDQogIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5kYXRlIHsgDQogIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgeyANCiAgICAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMiB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQpoMyB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIGZvbnQtZmFjZTogYm9sZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KaDQgeyANCiAgICAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KICAgLyogY2VudGVyIG1hcHMgdXNpbmcgY2h1bmsgb3B0aW9uOiBmaWcuYWxpZ249J2NlbnRlcicgKi8NCi5odG1sLXdpZGdldCB7DQogICAgbWFyZ2luOiBhdXRvOw0KfQ0KPC9zdHlsZT4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQoNCiMgSW50cm9kdWN0aW9uDQpUaGlzIGRhdGEgc2V0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGVtcGxveWVlIGF0dHJpdGlvbi4gSXQgaGFzIDE0NzAgcm93cyBhbmQgMzUgY29sdW1ucy4gVGhlIHZhcmlhYmxlcyBpbmNsdWRlIGFnZSwgZ2VuZGVyLCBqb2Igc2F0aXNmYWN0aW9uLCBlbnZpcm9ubWVudCBzYXRpc2ZhY3Rpb24sIGVkdWNhdGlvbiBmaWVsZCwgam9iIHJvbGUsIGluY29tZSwgb3ZlcnRpbWUsIHBlcmNlbnRhZ2Ugc2FsYXJ5IGhpa2UsIHRlbnVyZSwgdHJhaW5pbmcgdGltZSwgeWVhcnMgaW4gY3VycmVudCByb2xlLCBtYXJpdGFsIHN0YXR1cywgYW5kIG1vcmUuIFdpdGggdGhlc2UgdmFyaWFibGVzLCB0aGlzIGRhdGEgc2V0IGNhbiBiZSB1c2VkIHRvIHByZWRpY3QgdHVybm92ZXIsIGFuZCBmaW5kIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGdyb3VwIHRoYXQgc3RheWVkIG9yIGxlZnQuDQoNCmBgYHtyfQ0KZGF0IDwtIHJlYWQuY3N2KGZpbGU9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaGlud2V4L1NUQTU1My9yYXcvbWFpbi93MTAvRW1wbG95ZWVBdHRyaXRpb25EYXRhLmNzdiIpDQpgYGANCg0KIyMgT2JqZWN0aXZlcyBvZiB0aGlzIEFuYWx5c2lzDQoNClRoZSBmb2xsb3dpbmcgYXJlIHRoZSBxdWVzdGlvbnMgYW5kIG9iamVjdGl2ZXMgdGhhdCBkZXNjcmliZSBhbmQgZXhwbGFpbiB0aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgYW5hbHlzaXMuDQoNCjEuIFRvIHByZWRpY3Qgd2hpY2ggZW1wbG95ZWVzIGFyZSBtb3JlIGxpa2VseSB0byBsZWF2ZS4NCjIuIFdoYXQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgZW1wbG95ZWVzIHRoYXQgaGF2ZSBsZWZ0IHRoZSBjb21wYW55Pw0KMy4gQXJlIHRoZXJlIGFueSBub3RhYmxlIHBhdHRlcm5zIGluIHRlcm1zIG9mIGVtcGxveWVlIGF0dHJpdGlvbiBiYXNlZCBvbiBnZW5kZXIsIGFnZSwgZGVwYXJ0bWVudCwgam9iIHJvbGUgYW5kIGpvYiBzYXRpc2ZhY3Rpb24/DQoNCiMjIERhdGEgTWFuYWdlbWVudA0KQSBiaW5hcnkgdmFyaWFibGUgYEF0dHJpdGlvbiBjb3VudGAgd2FzIGFkZGVkIHRvIHRoZSBkYXRhc2V0IHdoaWNoIHRha2VzIHRoZSB2YWx1ZSBvZiAwIGFuZCAxLiBUaGUgdmFsdWUsIDAsIHJlcHJlc2VudHMgcGVvcGxlIHdobyBhcmUgc3RpbGwgd2l0aCB0aGUgY29tcGFueSB3aGVyZWFzIDEgcmVwcmVzZW50cyBwZW9wbGUgd2hvIGxlZnQuDQpBbm90aGVyIHZhcmlhYmxlLCBgQWdlIGNhdGVnb3J5YCB3YXMgY3JlYXRlZCB3aGljaCBjb21iaW5lZCB0aGUgYWdlcyBpbnRvIDUgZGlmZmVyZW50IGdyb3VwczogbGVzcyB0aGFuIDI1LCAyNSB0byAzNCwgMzUgdG8gNDQsIDQ1IHRvIDU1IGFuZCA1NSBhbmQgYWJvdmUuDQoNCmBgYHtyfQ0KZGF0JEF0dHJpdGlvbmNvdW50IDwtIGlmZWxzZShkYXQkQXR0cml0aW9uID09ICJZZXMiLCAxLCAwKQ0KZGF0JEFnZWNhdCA8LSBpZmVsc2UoZGF0JEFnZSA8IDI1LCAiTGVzcyB0aGFuIDI1IiwNCiAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkYXQkQWdlID49IDI1ICYgZGF0JEFnZSA8IDM1LCAiMjUtMzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkYXQkQWdlID49IDM1ICYgZGF0JEFnZSA8IDQ1LCAiMzUtNDQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZGF0JEFnZSA+PSA0NSAmIGRhdCRBZ2UgPCA1NSwgIjQ1LTU0IiwgIjU1IGFuZCBBYm92ZSIpKSkpDQoNCmBgYA0KDQpgYGB7cn0NCndyaXRlLmNzdihkYXQsIGZpbGUgPSAiQzpcXFVzZXJzXFxlY2hlZlxcRG9jdW1lbnRzXFxTVEE1NTNcXHdlZWsgMTBcXEF0dHJpdGlvbl9kYXRhLmNzdiIpDQpgYGANCg0KVGhlIGZpbmFsIGRhdGFzZXQgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGlud2V4L1NUQTU1My9yYXcvbWFpbi93MTAvQXR0cml0aW9uX2RhdGEuY3N2IA0KDQojIEVtcGxveWVlIEF0dHJpdGlvbiBEYXNoYm9hcmQNCg0KVGhpcyBkYXNoYm9hcmQgd2FzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IHRoZSBwYXR0ZXJucyBvZiBhdHRyaXRpb24gaW4gdGhlIGNvbXBhbnkgYmFzZWQgb24gc2V2ZXJhbCBmYWN0b3JzIHN1Y2ggYXMgZ2VuZGVyLCBhZ2UsIGpvYiByb2xlLCBqb2Igc2F0aXNmYWN0aW9uLCBtb250aGx5IGluY29tZSwgZGVwYXJ0bWVudCwgYW5kIHllYXJzIGF0IHRoZSBjb21wYW55Lg0KDQpcDQoNCjx0YWJsZSBib3JkZXIgPSAwIGJvcmRlcmNvbG9yPSJkYXJrZ3JlZW4iIGJnY29sb3I9JyNmNmY2ZjYnICB3aWR0aD0xMDAlICBhbGlnbiA9IGNlbnRlcj4NCjx0cj4NCjx0ZD4NCg0KPGRpdiBjbGFzcz0ndGFibGVhdVBsYWNlaG9sZGVyJyBpZD0ndml6MTcxMjY2NjA2Njk5Nycgc3R5bGU9J3Bvc2l0aW9uOiByZWxhdGl2ZSc+DQo8bm9zY3JpcHQ+PGEgaHJlZj0nIyc+DQo8aW1nIGFsdD0nICcgDQpzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztFbSYjNDc7RW1wbG95ZWVBdHRyaXRpb25kYXRhXzE3MTI2NDIwMzU3NjYwJiM0NztEYXNoYm9hcmQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz4NCjwvYT4NCjwvbm9zY3JpcHQ+DQo8b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IA0KPHBhcmFtIG5hbWU9J2VtYmVkX2NvZGVfdmVyc2lvbicgdmFsdWU9JzMnIC8+IDxwYXJhbSBuYW1lPSdzaXRlX3Jvb3QnIHZhbHVlPScnIC8+DQo8cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0VtcGxveWVlQXR0cml0aW9uZGF0YV8xNzEyNjQyMDM1NzY2MCYjNDc7RGFzaGJvYXJkJyAvPg0KPHBhcmFtIG5hbWU9J3RhYnMnIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0ndG9vbGJhcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7RW0mIzQ3O0VtcGxveWVlQXR0cml0aW9uZGF0YV8xNzEyNjQyMDM1NzY2MCYjNDc7RGFzaGJvYXJkJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3RhdGljX2ltYWdlJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLUdCJyAvPg0KPHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPg0KPC9vYmplY3Q+PC9kaXY+ICAgICAgICAgICAgICAgIA0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgDQp2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXoxNzEyNjY2MDY2OTk3Jyk7ICAgICAgICAgICAgICAgICAgICANCnZhciB2aXpFbGVtZW50ID0gZGl2RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07ICAgICAgICAgICAgICAgICAgICANCmlmICggZGl2RWxlbWVudC5vZmZzZXRXaWR0aCA+IDgwMCApIHsgdml6RWxlbWVudC5zdHlsZS5taW5XaWR0aD0nOTAwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhXaWR0aD0nMTAwJSc7DQp2aXpFbGVtZW50LnN0eWxlLm1pbkhlaWdodD0nOTMwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMC43NSkrJ3B4Jzt9IGVsc2UgaWYgKCBkaXZFbGVtZW50Lm9mZnNldFdpZHRoID4gNTAwICkgeyB2aXpFbGVtZW50LnN0eWxlLm1pbldpZHRoPSc5MDBweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heFdpZHRoPScxMDAlJzsNCnZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSc5MzBweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heEhlaWdodD0oZGl2RWxlbWVudC5vZmZzZXRXaWR0aCowLjc1KSsncHgnO30gZWxzZSB7IHZpekVsZW1lbnQuc3R5bGUubWluV2lkdGg9JzkwMHB4JzsNCnZpekVsZW1lbnQuc3R5bGUubWF4V2lkdGg9JzEwMCUnO3ZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PScyMTAwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMS43NykrJ3B4Jzt9ICAgICAgICAgICAgICAgICAgICAgDQp2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyAgICAgICAgICAgICAgICAgICAgDQpzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KXA0KDQojIyBBdHRyaXRpb24gU3VtbWFyeQ0KDQotIFRoZSB0b3RhbCBudW1iZXIgb2YgZW1wbG95ZWVzIGluIHRoZSBjb21wYW55ID0gMTQ3MCANCi0gQXZlcmFnZSBBZ2Ugb2YgRW1wbG95ZWVzID0gMzcNCi0gQXZlcmFnZSBtb250aGx5IGluY29tZSA9IDY1MDMNCi0gQXZlcmFnZSBob3VybHkgcmF0ZSA9IDY2DQotIFRoZSBudW1iZXIgb2YgZW1wbG95ZWVzIHJlY29yZGVkIHRvIGhhdmUgbGVmdCA9IDIzNw0KLSBQZXJjZW50YWdlIEF0dHJpdGlvbiA9IDE2LjElDQoNCiMjIEF0dHJpdGlvbiBieSBEZXBhcnRtZW50IGFuZCBKb2IgUm9sZQ0KVGhlIGJ1bGsgb2YgZW1wbG95ZWVzIHRoYXQgbGVhdmUgdGhlIG9yZ2FuaXNhdGlvbiB3b3JrIGluIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudC4gUG9zaXRpb25zIG1haW5seSBhZmZlY3RlZCBhcmUgdGhlIExhYm9yYXRvcnkgVGVjaG5pY2lhbiBhbmQgUmVzZWFyY2ggU2NpZW50aXN0IHJvbGVzLiBFbXBsb3llZXMgaW4gdGhlIGRlcGFydG1lbnQgb2YgSHVtYW4gUmVzb3VyY2VzIGhhdmUgdGhlIGxvd2VzdCBhdHRyaXRpb24gcmF0ZXMsIHdoaWNoIG1heSBiZSBiZWNhdXNlIHRoZXkgYXJlIGFsc28gdGhlIHNtYWxsZXN0IGRlcGFydG1lbnQgaW4gdGhlIG9yZ2FuaXNhdGlvbi4gT3ZlcmFsbCwgbWFuYWdlcnMgaGF2ZSB0aGUgY29tcGFueSdzIGxvd2VzdCBhdHRyaXRpb24gcmF0ZXMuDQoNCiMjIEF0dHJpdGlvbiBieSBBZ2UNCkVtcGxveWVlcyB3aG9zZSBhZ2VzIGxpZSBiZXR3ZWVuIDI1IGFuZCAzNCBhcmUgbW9zdCBsaWtlbHkgdG8gbGVhdmUuIFRoYXQgbWF5IGJlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIHRoZSBncm91cCB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHdoZXJlYXMgdGhvc2UgdGhhdCBhcmUgNTUgb3Igb2xkZXIgYXJlIG1vc3QgbGlrZWx5IHRvIHN0YXkuIA0KDQojIyBBdHRyaXRpb24gYnkgQWdlIGFuZCBHZW5kZXINCkluIGFsbCBhZ2UgZ3JvdXBzLCBtYWxlcyBoYXZlIGhpZ2hlciBhdHRyaXRpb24gY291bnRzIHRoYW4gZmVtYWxlcy4gTWFsZXMgd2hvIGFyZSBiZXR3ZWVuIHRoZSBhZ2VzIG9mIDI1IGFuZCAzNCBoYXZlIHRoZSBoaWdoZXN0IGF0dHJpdGlvbiBjb3VudHMgd2hpbGUgZmVtYWxlcyB3aG8gYXJlIDU1IG9yIG9sZGVyIGhhdmUgdGhlIGxvd2VzdCBhdHRyaXRpb24gY291bnRzLg0KDQojIyBNb250aGx5IEluY29tZSBieSBZZWFycyBhdCBDb21wYW55DQpUaGVyZSBpcyBhIGxpbmVhciBhc3NvY2lhdGlvbiBiZXR3ZWVuIG1vbnRobHkgaW5jb21lIGFuZCB5ZWFycyBhdCB0aGUgY29tcGFueS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyIG9mIHllYXJzIHNwZW50IGJ5IGEgd29ya2VyIGluIHRoZSBjb21wYW55LCB0aGUgbW9yZSB0aGUgbW9udGhseSBpbmNvbWUuIEZvciBleGFtcGxlLCBlbXBsb3llZXMgd2hvIGhhdmUgc3BlbnQgMzcgeWVhcnMgaW4gdGhlIGNvbXBhbnksIGhhdmUgYSBtZWRpYW4gbW9udGhseSBpbmNvbWUgb2YgMTMsODcyIHdoaWxlIHRob3NlIHdobyBoYXZlIHNwZW50IGp1c3QgMSB5ZWFyLCBoYXZlIGEgbWVkaWFuIG1vbnRobHkgaW5jb21lIG9mIDMsMzQ2LiBBbHNvLCBhdHRyaXRpb24gcmF0ZXMgYXJlIGhpZ2hlciBhbW9uZyBwZW9wbGUgd2l0aCBsb3dlciB3b3JraW5nIHllYXJzIGF0IHRoZSBjb21wYW55Lg0KDQojIyBBdHRyaXRpb24gYnkgSm9iIFNhdGlzZmFjdGlvbg0KVGhlcmUgYXJlIDQgbGV2ZWxzIG9mIGpvYiBzYXRpc2ZhY3Rpb24gLSBsb3csIG1lZGl1bSwgaGlnaCBhbmQgdmVyeSBoaWdoLiBGcm9tIHRoZSBkYXNoYm9hcmQsIHRoaXMgd2FzIGFzc2Vzc2VkIHdpdGggYSBsaW5lIHBsb3Qgc2hvd2luZyB0aGUgdG90YWwgYXR0cml0aW9uIGF0IGVhY2ggam9iIHNhdGlzZmFjdGlvbiBsZXZlbCBmb3IgZXZlcnkgZGVwYXJ0bWVudC4gSXJyZXNwZWN0aXZlIG9mIHRoZSBqb2Igc2F0aXNmYWN0aW9uIGxldmVsLCBlbXBsb3llZXMgZnJvbSBIdW1hbiByZXNvdXJjZXMgc3RpbGwgbWFpbnRhaW5lZCB0aGUgbG93ZXN0IGF0dHJpdGlvbiBjb3VudHMuIE92ZXJhbGwsIHdvcmtlcnMgd2l0aCBoaWdoIGpvYiBzYXRpc2ZhY3Rpb24gaGF2ZSB0aGUgaGlnaGVzdCBhdHRyaXRpb24gY291bnRzLg0KDQojIEVtcGxveWVlIEF0dHJpdGlvbiBTdG9yeVBvaW50DQoNClwNCg0KPHRhYmxlIGJvcmRlciA9IDAgYm9yZGVyY29sb3I9ImRhcmtncmVlbiIgYmdjb2xvcj0nI2Y2ZjZmNicgIHdpZHRoPTEwMCUgIGFsaWduID0gY2VudGVyPg0KPHRyPg0KPHRkPg0KDQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyNjY2NDU2NDYyJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz4NCjxub3NjcmlwdD4NCjxhIGhyZWY9JyMnPjxpbWcgYWx0PScgJyANCnNyYz0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O0VtJiM0NztFbXBsb3llZUF0dHJpdGlvbmRhdGFfMTcxMjY0MjAzNTc2NjAmIzQ3O1N0b3J5cG9pbnQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+DQo8L25vc2NyaXB0PjxvYmplY3QgY2xhc3M9J3RhYmxlYXVWaXonICBzdHlsZT0nZGlzcGxheTpub25lOyc+DQo8cGFyYW0gbmFtZT0naG9zdF91cmwnIHZhbHVlPSdodHRwcyUzQSUyRiUyRnB1YmxpYy50YWJsZWF1LmNvbSUyRicgLz4gDQo8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gDQo8cGFyYW0gbmFtZT0nc2l0ZV9yb290JyB2YWx1ZT0nJyAvPg0KPHBhcmFtIG5hbWU9J25hbWUnIHZhbHVlPSdFbXBsb3llZUF0dHJpdGlvbmRhdGFfMTcxMjY0MjAzNTc2NjAmIzQ3O1N0b3J5cG9pbnQnIC8+DQo8cGFyYW0gbmFtZT0ndGFicycgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztFbSYjNDc7RW1wbG95ZWVBdHRyaXRpb25kYXRhXzE3MTI2NDIwMzU3NjYwJiM0NztTdG9yeXBvaW50JiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3RhdGljX2ltYWdlJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nbGFuZ3VhZ2UnIHZhbHVlPSdlbi1HQicgLz4NCjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz4NCjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICAgICANCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gICAgICAgICAgICAgICAgICAgIA0KdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjY2NjQ1NjQ2MicpOyAgICAgICAgICAgICAgICAgICAgDQp2YXIgdml6RWxlbWVudCA9IGRpdkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOyAgICAgICAgICAgICAgICAgICAgDQp2aXpFbGVtZW50LnN0eWxlLndpZHRoPSc5MDBweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9JzkzMHB4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KXA0K