Tableau Assignment: Bank Marketing

0.1 Introduction.

For this assignment I chose the dataset “BankMarketingCSV” to draw insights how marketing campaigns are used and targeted. This dataset includes multiple variables such as age of participants, account balances, occupations, education, duration of the marketing campaign and also how many times a participant was called before the campaign and called during the marketing campaign. This data was used to create a dashboard and a story to share specific insights from the data using Tableau.

library(lubridate) 


x <- getURL("https://jessgorr01.github.io/jGorrCV/wk10/BankMarketingCSV.csv")
Banks <- read.csv(text = x)

Now that the data has been subsetted, it is time to create the map in tableau.

When at the two scatterplots, they show significant insights. First let’s start with number of contacts before the campaign. This scatter plot shows that the higher account balances were contacted exponentially more before marketing campaigns before the lower accounts. This scatterplot also showed that those with higher educations tended to have higher account balances. Now looking at the graph for contacts during the marketing campaign, it also supported this idea.Another insight from this scatterplot showed that married individuals had higher account balances, which makes sense as two individuals shared the account.

Moving on to the second story point, which displayed differences in the categorical variables. Both these bar charts reinforce the scatterplots. Married accounts have higher balances than the others. In the education bar chart, those with secondary and Tertiary have higher account balances than the less educated groups.

Finally the last story point displaces the distribution of two variables, Age of the participants and duration of the campaign. The median age for the participants was 35 and the distrubtion for the duration was scewed right, meaning most of the campains were short.

LS0tDQp0aXRsZTogIkludGVyYWN0aXZlIFRhYmxlYXUgR3JhcGhpY3MgYW5kIERhc2hib2FyZHMiDQphdXRob3I6ICJKZXNzaWNhIEdvcnIiDQpkYXRlOiAiV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogbm8NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiByZWFkYWJsZQ0KLS0tDQogICAgICANCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpkaXYjVE9DIGxpIHsNCiAgICBsaXN0LXN0eWxlOm5vbmU7DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5hdXRob3IgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMSB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMnB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgyIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCmgzIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgZm9udC1mYWNlOiBib2xkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQpoNCB7IA0KICAgIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQogICAvKiBjZW50ZXIgbWFwcyB1c2luZyBjaHVuayBvcHRpb246IGZpZy5hbGlnbj0nY2VudGVyJyAqLw0KLmh0bWwtd2lkZ2V0IHsNCiAgICBtYXJnaW46IGF1dG87DQp9DQo8L3N0eWxlPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgic2YiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygic2YiKQ0KICAgbGlicmFyeShzZikNCn0NCmlmICghcmVxdWlyZSgidGVycmEiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygidGVycmEiKQ0KICAgbGlicmFyeSh0ZXJyYSkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCmlmICghcmVxdWlyZSgiZHBseXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQ0KICAgbGlicmFyeShkcGx5cikNCn0NCmlmICghcmVxdWlyZSgicG5nIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJwbmciKSAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJwbmciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcERhdGEiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInNwRGF0YSIpICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInNwRGF0YSIpDQp9DQppZiAoIXJlcXVpcmUoImNvbG91cnBpY2tlciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiY29sb3VycGlja2VyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImNvbG91cnBpY2tlciIpDQp9DQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdpZnNraSIpDQp9DQppZiAoIXJlcXVpcmUoIm1hZ2ljayIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibWFnaWNrIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hZ2ljayIpDQp9DQojaWYgKCFyZXF1aXJlKCJzcERhdGFMYXJnZSIpKSB7DQogIyAgIGluc3RhbGwucGFja2FnZXMoInNwRGF0YUxhcmdlIikgICAgICAgICAgICAgIA0KICAgIyBsaWJyYXJ5KCJzcERhdGFMYXJnZSIpDQojfQ0KIyMjIGdncGxvdCBhbmQgZXh0ZW5zaW9ucw0KaWYgKCFyZXF1aXJlKCJnZ3Bsb3QyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdncGxvdDIiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJnZ2FuaW1hdGUiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdnYW5pbWF0ZSIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ2FuaW1hdGUiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0bWFwIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJ0bWFwIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInRtYXAiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzZiIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic2YiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgic2YiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWdyaXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRpZ3JpcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJ0aWdyaXMiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJtYXB2aWV3IikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYXB2aWV3IikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hcHZpZXciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInBhbmRlciIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJwYW5kZXIiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsYXR0aWNlIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsYXR0aWNlIikNCmxpYnJhcnkoImxhdHRpY2UiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3AiKQ0KbGlicmFyeSgic3AiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmbGV0IikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsZWFmbGV0IikNCmxpYnJhcnkoImxlYWZsZXQiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmcG9wIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsZWFmcG9wIikNCmxpYnJhcnkoImxlYWZwb3AiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmZW0iKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZlbSIpDQpsaWJyYXJ5KCJsZWFmZW0iKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcERhdGFMYXJnZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3BEYXRhTGFyZ2UiLCByZXBvcyA9ICJodHRwczovL2dlb2NvbXByLnItdW5pdmVyc2UuZGV2IikNCmxpYnJhcnkoInNwRGF0YUxhcmdlIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHdpZGdldHMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImh0bWx3aWRnZXRzIikNCmxpYnJhcnkoImh0bWx3aWRnZXRzIikNCn0NCmlmICghcmVxdWlyZSgibGVhZmxldC5leHRyYXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZsZXQuZXh0cmFzIikNCmxpYnJhcnkoImxlYWZsZXQuZXh0cmFzIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sdG9vbHMiKQ0KbGlicmFyeSgiaHRtbHRvb2xzIikNCn0NCmlmKCFyZXF1aXJlKCJwbmciKSl7DQogIGluc3RhbGwucGFja2FnZXMoInBuZyIpDQogIGxpYnJhcnkocG5nKQ0KfQ0KaWYoIXJlcXVpcmUoInZpcmlkaXMiKSl7DQogIGluc3RhbGwucGFja2FnZXMoInZpcmlkaXMiKQ0KICBsaWJyYXJ5KHZpcmlkaXMpDQp9DQppZighcmVxdWlyZSgiZ2dtYXAiKSl7DQogIGluc3RhbGwucGFja2FnZXMoImdnbWFwIikNCiAgbGlicmFyeShnZ21hcCkNCn0NCmlmKCFyZXF1aXJlKCJ3ZWJzaG90Iikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ3ZWJzaG90IikNCiAgbGlicmFyeSh3ZWJzaG90KQ0KfQ0KaWYoIXJlcXVpcmUoImh0bWx3aWRnZXRzIikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sd2lkZ2V0cyIpDQogIGxpYnJhcnkoaHRtbHdpZGdldHMpDQp9DQppZighcmVxdWlyZSgiYW5pbWF0aW9uIikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJhbmltYXRpb24iKQ0KICBsaWJyYXJ5KGFuaW1hdGlvbikNCn0NCmlmKCFyZXF1aXJlKCJnaWZza2kiKSl7DQogIGluc3RhbGwucGFja2FnZXMoImdpZnNraSIpDQogIGxpYnJhcnkoZ2lmc2tpKQ0KfQ0KaWYoIXJlcXVpcmUoImh0bWxUYWJsZSIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbFRhYmxlIikNCiAgbGlicmFyeShodG1sVGFibGUpDQp9DQppZighcmVxdWlyZSgibWFncml0dHIiKSl7DQogIGluc3RhbGwucGFja2FnZXMoIm1hZ3JpdHRyIikNCiAgbGlicmFyeShtYWdyaXR0cikNCn0NCg0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgICAjIEluc3RhbGwgUkN1cmwgcGFja2FnZQ0KICAgIGxpYnJhcnkoIlJDdXJsIikNCn0NCg0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICANCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkEpDQpgYGANCg0KVGFibGVhdSBBc3NpZ25tZW50OiBCYW5rIE1hcmtldGluZw0KDQojIyBJbnRyb2R1Y3Rpb24uDQoNCg0KRm9yIHRoaXMgYXNzaWdubWVudCBJIGNob3NlIHRoZSBkYXRhc2V0ICJCYW5rTWFya2V0aW5nQ1NWIiB0byBkcmF3IGluc2lnaHRzIGhvdyBtYXJrZXRpbmcgY2FtcGFpZ25zIGFyZSB1c2VkIGFuZCB0YXJnZXRlZC4gVGhpcyBkYXRhc2V0IGluY2x1ZGVzIG11bHRpcGxlIHZhcmlhYmxlcyBzdWNoIGFzIGFnZSBvZiBwYXJ0aWNpcGFudHMsIGFjY291bnQgYmFsYW5jZXMsIG9jY3VwYXRpb25zLCBlZHVjYXRpb24sIGR1cmF0aW9uIG9mIHRoZSBtYXJrZXRpbmcgY2FtcGFpZ24gYW5kIGFsc28gaG93IG1hbnkgdGltZXMgYSBwYXJ0aWNpcGFudCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgY2FtcGFpZ24gYW5kIGNhbGxlZCBkdXJpbmcgdGhlIG1hcmtldGluZyBjYW1wYWlnbi4gVGhpcyBkYXRhIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGRhc2hib2FyZCBhbmQgYSBzdG9yeSB0byBzaGFyZSBzcGVjaWZpYyBpbnNpZ2h0cyBmcm9tIHRoZSBkYXRhIHVzaW5nIFRhYmxlYXUuDQoNCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcid9DQpsaWJyYXJ5KGx1YnJpZGF0ZSkgDQoNCg0KeCA8LSBnZXRVUkwoImh0dHBzOi8vamVzc2dvcnIwMS5naXRodWIuaW8vakdvcnJDVi93azEwL0JhbmtNYXJrZXRpbmdDU1YuY3N2IikNCkJhbmtzIDwtIHJlYWQuY3N2KHRleHQgPSB4KQ0KDQoNCmBgYA0KDQoNCk5vdyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHN1YnNldHRlZCwgaXQgaXMgdGltZSB0byBjcmVhdGUgdGhlIG1hcCBpbiB0YWJsZWF1LiANCg0KPHRhYmxlPg0KPHRyPg0KPHRkPg0KDQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyODA0OTkwMzkwJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz48bm9zY3JpcHQ+PGEgaHJlZj0nIyc+PGltZyBhbHQ9J0Rhc2hib2FyZCA0ICcgc3JjPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7QmEmIzQ3O0JhbmtNYXJrZXRpbmdpbnNpZ2h0c0Rhc2gmIzQ3O0Rhc2hib2FyZDQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+PC9ub3NjcmlwdD48b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPjxwYXJhbSBuYW1lPSdob3N0X3VybCcgdmFsdWU9J2h0dHBzJTNBJTJGJTJGcHVibGljLnRhYmxlYXUuY29tJTJGJyAvPiA8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gPHBhcmFtIG5hbWU9J3NpdGVfcm9vdCcgdmFsdWU9JycgLz48cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0JhbmtNYXJrZXRpbmdpbnNpZ2h0c0Rhc2gmIzQ3O0Rhc2hib2FyZDQnIC8+PHBhcmFtIG5hbWU9J3RhYnMnIHZhbHVlPSdubycgLz48cGFyYW0gbmFtZT0ndG9vbGJhcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nc3RhdGljX2ltYWdlJyB2YWx1ZT0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O0JhJiM0NztCYW5rTWFya2V0aW5naW5zaWdodHNEYXNoJiM0NztEYXNoYm9hcmQ0JiM0NzsxLnBuZycgLz4gPHBhcmFtIG5hbWU9J2FuaW1hdGVfdHJhbnNpdGlvbicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zdGF0aWNfaW1hZ2UnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9vdmVybGF5JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X2NvdW50JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLVVTJyAvPjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz48L29iamVjdD48L2Rpdj4gICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjgwNDk5MDM5MCcpOyAgICAgICAgICAgICAgICAgICAgdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIGlmICggZGl2RWxlbWVudC5vZmZzZXRXaWR0aCA+IDgwMCApIHsgdml6RWxlbWVudC5zdHlsZS53aWR0aD0nMTAwMHB4Jzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0nODI3cHgnO30gZWxzZSBpZiAoIGRpdkVsZW1lbnQub2Zmc2V0V2lkdGggPiA1MDAgKSB7IHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMDBweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9JzgyN3B4Jzt9IGVsc2UgeyB2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0nMTg3N3B4Jzt9ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gJ2h0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL2phdmFzY3JpcHRzL2FwaS92aXpfdjEuanMnOyAgICAgICAgICAgICAgICAgICAgdml6RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHRFbGVtZW50LCB2aXpFbGVtZW50KTsgICAgICAgICAgICAgICAgPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KDQoNCjx0YWJsZT4NCjx0cj4NCjx0ZD4NCjxkaXYgY2xhc3M9J3RhYmxlYXVQbGFjZWhvbGRlcicgaWQ9J3ZpejE3MTI4MDQ1ODQ3ODUnIHN0eWxlPSdwb3NpdGlvbjogcmVsYXRpdmUnPjxub3NjcmlwdD48YSBocmVmPScjJz48aW1nIGFsdD0nQmFuayBNYXJrZXRpbmcgSW5zaWdodHMgJyBzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztCYSYjNDc7QmFua01hcmtldGluZ2luc2lnaHRzJiM0NztTdG9yeTEmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+PC9ub3NjcmlwdD48b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPjxwYXJhbSBuYW1lPSdob3N0X3VybCcgdmFsdWU9J2h0dHBzJTNBJTJGJTJGcHVibGljLnRhYmxlYXUuY29tJTJGJyAvPiA8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gPHBhcmFtIG5hbWU9J3NpdGVfcm9vdCcgdmFsdWU9JycgLz48cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0JhbmtNYXJrZXRpbmdpbnNpZ2h0cyYjNDc7U3RvcnkxJyAvPjxwYXJhbSBuYW1lPSd0YWJzJyB2YWx1ZT0nbm8nIC8+PHBhcmFtIG5hbWU9J3Rvb2xiYXInIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztCYSYjNDc7QmFua01hcmtldGluZ2luc2lnaHRzJiM0NztTdG9yeTEmIzQ3OzEucG5nJyAvPiA8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zcGlubmVyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfY291bnQnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2xhbmd1YWdlJyB2YWx1ZT0nZW4tVVMnIC8+PHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjgwNDU4NDc4NScpOyAgICAgICAgICAgICAgICAgICAgdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMTZweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9Jzk5MXB4JzsgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7ICAgICAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIDwvc2NyaXB0PiAgIA0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQoNCldoZW4gYXQgdGhlIHR3byBzY2F0dGVycGxvdHMsIHRoZXkgc2hvdyBzaWduaWZpY2FudCBpbnNpZ2h0cy4gRmlyc3QgbGV0J3Mgc3RhcnQgd2l0aCBudW1iZXIgb2YgY29udGFjdHMgYmVmb3JlIHRoZSBjYW1wYWlnbi4gVGhpcyBzY2F0dGVyIHBsb3Qgc2hvd3MgdGhhdCB0aGUgaGlnaGVyIGFjY291bnQgYmFsYW5jZXMgd2VyZSBjb250YWN0ZWQgZXhwb25lbnRpYWxseSBtb3JlIGJlZm9yZSBtYXJrZXRpbmcgY2FtcGFpZ25zIGJlZm9yZSB0aGUgbG93ZXIgYWNjb3VudHMuIFRoaXMgc2NhdHRlcnBsb3QgYWxzbyBzaG93ZWQgdGhhdCB0aG9zZSB3aXRoIGhpZ2hlciBlZHVjYXRpb25zIHRlbmRlZCB0byBoYXZlIGhpZ2hlciBhY2NvdW50IGJhbGFuY2VzLiBOb3cgbG9va2luZyBhdCB0aGUgZ3JhcGggZm9yIGNvbnRhY3RzIGR1cmluZyB0aGUgbWFya2V0aW5nIGNhbXBhaWduLCBpdCBhbHNvIHN1cHBvcnRlZCB0aGlzIGlkZWEuQW5vdGhlciBpbnNpZ2h0IGZyb20gdGhpcyBzY2F0dGVycGxvdCBzaG93ZWQgdGhhdCBtYXJyaWVkIGluZGl2aWR1YWxzIGhhZCBoaWdoZXIgYWNjb3VudCBiYWxhbmNlcywgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdHdvIGluZGl2aWR1YWxzIHNoYXJlZCB0aGUgYWNjb3VudC4NCg0KTW92aW5nIG9uIHRvIHRoZSBzZWNvbmQgc3RvcnkgcG9pbnQsIHdoaWNoIGRpc3BsYXllZCBkaWZmZXJlbmNlcyBpbiB0aGUgY2F0ZWdvcmljYWwgdmFyaWFibGVzLiBCb3RoIHRoZXNlIGJhciBjaGFydHMgcmVpbmZvcmNlIHRoZSBzY2F0dGVycGxvdHMuIE1hcnJpZWQgYWNjb3VudHMgaGF2ZSBoaWdoZXIgYmFsYW5jZXMgdGhhbiB0aGUgb3RoZXJzLiBJbiB0aGUgZWR1Y2F0aW9uIGJhciBjaGFydCwgdGhvc2Ugd2l0aCBzZWNvbmRhcnkgYW5kIFRlcnRpYXJ5IGhhdmUgaGlnaGVyIGFjY291bnQgYmFsYW5jZXMgdGhhbiB0aGUgbGVzcyBlZHVjYXRlZCBncm91cHMuDQoNCkZpbmFsbHkgdGhlIGxhc3Qgc3RvcnkgcG9pbnQgZGlzcGxhY2VzIHRoZSBkaXN0cmlidXRpb24gb2YgdHdvIHZhcmlhYmxlcywgQWdlIG9mIHRoZSBwYXJ0aWNpcGFudHMgYW5kIGR1cmF0aW9uIG9mIHRoZSBjYW1wYWlnbi4gVGhlIG1lZGlhbiBhZ2UgZm9yIHRoZSBwYXJ0aWNpcGFudHMgd2FzIDM1IGFuZCB0aGUgZGlzdHJ1YnRpb24gZm9yIHRoZSBkdXJhdGlvbiB3YXMgc2Nld2VkIHJpZ2h0LCBtZWFuaW5nIG1vc3Qgb2YgdGhlIGNhbXBhaW5zIHdlcmUgc2hvcnQuDQoNCg==