1 Neonicotinoids Background

Neonicotinoids, often referred to as “neonics”, are a class of synthetic, neurotoxic insecticides that are widely used on agricultural crops, lawns, gardens, and in pet treatments. They work by permanently binding to the nerve cells of insects, overstimulating and destroying them. However, their impact extends beyond the targeted pests. Studies have shown that neonicotinoids can have acute and sub-lethal effects on honey bees, including limited reproductive rates, impaired foraging abilities, increased susceptibility to disease, and decreased learning abilities. Chronic exposure to neonicotinoids has been linked to significant harm to honey bee colonies, particularly during colder winters. This exposure can lead to Colony Collapse Disorder (CCD), a phenomenon where bees abandon their hives over the winter and eventually die. The decline in honey bee populations due to neonicotinoids poses a serious threat to ecosystem health and food security, given the crucial role bees play as pollinators.
Citations: Effects of Neonicotinoids on Humans and Bees - NRDC.ORG

2 Data Source

Honey Bees and Neonicotinoids Pesticides From USDA Data:
From USGS Data:

Dataset is missing all values for New Hampshire, Massachusetts, Connecticut, and Rhode Island. Data set is also missing values for Maryland, Delaware, South Carolina, Oklahoma, Nevada, and New Mexico for select years.

#import data
beeData <- na.omit(read.csv("https://tkelleman.github.io/tkweb/Week10/vHoneyNeonic_v02.csv"))

#Create column lowNeonic showing "low" for if values in nAllNeonic is less than 1000, between 1000-10,000 as "moderate", and greater than 10,000 as  "high"
beeData <- beeData %>%
  mutate(catNeonic = case_when(
    nAllNeonic < 1000 ~ "low",
    nAllNeonic >= 1000 & nAllNeonic <= 10000 ~ "moderate",
    nAllNeonic > 10000 ~ "high"
  ))

summary(beeData)
    state               numcol        yieldpercol       totalprod       
 Length:761         Min.   :  2000   Min.   : 19.00   Min.   :   84000  
 Class :character   1st Qu.:  9000   1st Qu.: 46.00   1st Qu.:  462000  
 Mode  :character   Median : 27000   Median : 57.00   Median : 1581000  
                    Mean   : 62858   Mean   : 59.72   Mean   : 4226796  
                    3rd Qu.: 65000   3rd Qu.: 70.00   3rd Qu.: 4200000  
                    Max.   :510000   Max.   :128.00   Max.   :46410000  
     stocks           priceperlb      prodvalue             year     
 Min.   :    8000   Min.   :0.490   Min.   :  162000   Min.   :1998  
 1st Qu.:  121000   1st Qu.:1.040   1st Qu.:  892000   1st Qu.:2002  
 Median :  433000   Median :1.470   Median : 2122000   Median :2007  
 Mean   : 1289880   Mean   :1.689   Mean   : 5576555   Mean   :2007  
 3rd Qu.: 1436000   3rd Qu.:2.040   3rd Qu.: 5599000   3rd Qu.:2011  
 Max.   :13800000   Max.   :7.090   Max.   :83859000   Max.   :2016  
  StateName            Region          nCLOTHIANIDIN      nIMIDACLOPRID     
 Length:761         Length:761         Min.   :     0.0   Min.   :     3.2  
 Class :character   Class :character   1st Qu.:     0.0   1st Qu.:   937.5  
 Mode  :character   Mode  :character   Median :   336.7   Median :  3698.9  
                                       Mean   : 10890.9   Mean   : 10019.4  
                                       3rd Qu.:  6569.3   3rd Qu.: 10588.6  
                                       Max.   :278498.8   Max.   :150569.3  
 nTHIAMETHOXAM      nACETAMIPRID      nTHIACLOPRID      nAllNeonic      
 Min.   :    0.0   Min.   :    0.0   Min.   :   0.0   Min.   :     3.2  
 1st Qu.:   29.7   1st Qu.:    0.0   1st Qu.:   0.0   1st Qu.:  1631.8  
 Median : 1156.3   Median :   16.0   Median :   0.0   Median :  8402.1  
 Mean   : 6225.1   Mean   :  729.0   Mean   : 120.5   Mean   : 27984.9  
 3rd Qu.: 7777.0   3rd Qu.:  349.1   3rd Qu.:   0.0   3rd Qu.: 33508.2  
 Max.   :64834.6   Max.   :36480.3   Max.   :4273.2   Max.   :403011.6  
  catNeonic        
 Length:761        
 Class :character  
 Mode  :character  
                   
                   
                   
#Save data as CSV file
write.csv(beeData, "beeDataUpdated.csv", row.names = FALSE)

3 Data Summary

Minimal data manipulation was performed. Incomplete observations were removed using the na.omit and a new column (catNeonic) was genertated categorizing the nAllNeonic values into “low” (less than 1000), “moderate” (between 1000 and 10000, inclusive), and “high” (greater than 10000). The final dataset included 761 observations of 17 variables.

4 Tableau Dashboard


5 Conclusions from Tableau Dashboard

Using the Filter - State Name in the bottom right corner users can select all, one, or multiple states to filter charts. General trends visible in the data are a steady increase in neonicotinoid usage until ~2014 and a sudden drop in usage, due to Federal regulation changes. There is a wide variety in usage of all neonicotinoids by state as shown in the map with some states adopting this policy earlier than others. More recent data points could shed light on the economic impact of decreased use of these pesticides. Data like this drives EPA policy on best practices for agriculture to reduce the harm to native species while maintaining crop yields.

6 Storyboard Version

LS0tDQp0aXRsZTogIldlZWsgMTAgLSBUYWJsZWF1IERhc2hib2FyZHMiDQphdXRob3I6ICJUaW0gS2VsbGVtYW4iDQpkYXRlOiAiMjAyNC0wNC0zIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IG5vDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBmaWdfd2lkdGg6IDgNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICANCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IG5vDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgZmlnX3dpZHRoOiA1DQogICAgZmlnX2hlaWdodDogNA0KLS0tDQoNCmBgYHs9aHRtbH0NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCmRpdiNUT0MgbGkgew0KICAgIGxpc3Qtc3R5bGU6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Z3JheTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogICAgY29sb3I6ICM3ODBjMGM7DQp9DQoNCi8qIG1vdXNlIG92ZXIgbGluayAqLw0KZGl2I1RPQyBhOmhvdmVyIHsNCiAgY29sb3I6IHJlZDsNCn0NCg0KLyogdW52aXNpdGVkIGxpbmsgKi8NCmRpdiNUT0MgYTpsaW5rIHsNCiAgY29sb3I6IGJsdWU7DQp9DQoNCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya2JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogIGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7DQp9DQpoNC5hdXRob3IgeyANCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuZGF0ZSB7IA0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgxIHsNCiAgICBmb250LXNpemU6IDI0cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDIgew0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IA0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi8qIHVudmlzaXRlZCBsaW5rICovDQphOmxpbmsgew0KICBjb2xvcjogZ3JlZW47DQp9DQoNCi8qIHZpc2l0ZWQgbGluayAqLw0KYTp2aXNpdGVkIHsNCiAgY29sb3I6IGdyZWVuOw0KfQ0KDQovKiBtb3VzZSBvdmVyIGxpbmsgKi8NCmE6aG92ZXIgew0KICBjb2xvcjogcmVkOw0KfQ0KDQovKiBzZWxlY3RlZCBsaW5rICovDQphOmFjdGl2ZSB7DQogIGNvbG9yOiB5ZWxsb3c7DQp9DQo8L3N0eWxlPg0KYGBgDQotLS0NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQpvcHRpb25zKHJlcG9zID0gbGlzdChDUkFOPSJodHRwOi8vY3Jhbi5yc3R1ZGlvLmNvbS8iKSkNCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgiY293cGxvdCIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJjb3dwbG90IikNCiAgIGxpYnJhcnkoY293cGxvdCkNCn0NCmlmICghcmVxdWlyZSgibGF0ZXgyZXhwIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImxhdGV4MmV4cCIpDQogICBsaWJyYXJ5KGxhdGV4MmV4cCkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCmlmICghcmVxdWlyZSgiZ2FwbWluZGVyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImdhcG1pbmRlciIpDQogICBsaWJyYXJ5KGdhcG1pbmRlcikNCn0NCmlmICghcmVxdWlyZSgicG5nIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJwbmciKSAgICAgICAgICAgICAjIEluc3RhbGwgcG5nIHBhY2thZ2UNCiAgICBsaWJyYXJ5KCJwbmciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgIyBJbnN0YWxsIFJDdXJsIHBhY2thZ2UNCiAgICBsaWJyYXJ5KCJSQ3VybCIpDQp9DQppZiAoIXJlcXVpcmUoImNvbG91cnBpY2tlciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiY29sb3VycGlja2VyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImNvbG91cnBpY2tlciIpDQp9DQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdpZnNraSIpDQp9DQppZiAoIXJlcXVpcmUoIm1hZ2ljayIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibWFnaWNrIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hZ2ljayIpDQp9DQppZiAoIXJlcXVpcmUoImdyRGV2aWNlcyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ3JEZXZpY2VzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdyRGV2aWNlcyIpDQp9DQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zDQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dwbG90MiIpDQp9DQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdnYW5pbWF0ZSIpDQp9DQppZiAoIXJlcXVpcmUoImdncmlkZ2VzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3JpZGdlcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ3JpZGdlcyIpDQp9DQppZiAoIXJlcXVpcmUoImdyYXBoaWNzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJncmFwaGljcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJncmFwaGljcyIpDQp9DQppZiAoIXJlcXVpcmUoImRwbHlyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJkcGx5ciIpDQp9DQppZiAoIXJlcXVpcmUoImx1YnJpZGF0ZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImx1YnJpZGF0ZSIpDQp9DQppZiAoIXJlcXVpcmUoInRtYXAiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRtYXAiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgidG1hcCIpDQp9DQppZiAoIXJlcXVpcmUoInNmIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJzZiIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJzZiIpDQp9DQoNCmlmICghcmVxdWlyZSgibGVhZmxldCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmbGV0IikNCn0NCmlmICghcmVxdWlyZSgibGVhZnBvcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZnBvcCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmcG9wIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sdG9vbHMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiaHRtbHRvb2xzIikNCn0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRSwgICANCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BKQ0KYGBgDQojIE5lb25pY290aW5vaWRzIEJhY2tncm91bmQNCk5lb25pY290aW5vaWRzLCBvZnRlbiByZWZlcnJlZCB0byBhcyDigJxuZW9uaWNz4oCdLCBhcmUgYSBjbGFzcyBvZiBzeW50aGV0aWMsIG5ldXJvdG94aWMgaW5zZWN0aWNpZGVzIHRoYXQgYXJlIHdpZGVseSB1c2VkIG9uIGFncmljdWx0dXJhbCBjcm9wcywgbGF3bnMsIGdhcmRlbnMsIGFuZCBpbiBwZXQgdHJlYXRtZW50cy4gVGhleSB3b3JrIGJ5IHBlcm1hbmVudGx5IGJpbmRpbmcgdG8gdGhlIG5lcnZlIGNlbGxzIG9mIGluc2VjdHMsIG92ZXJzdGltdWxhdGluZyBhbmQgZGVzdHJveWluZyB0aGVtLiBIb3dldmVyLCB0aGVpciBpbXBhY3QgZXh0ZW5kcyBiZXlvbmQgdGhlIHRhcmdldGVkIHBlc3RzLiBTdHVkaWVzIGhhdmUgc2hvd24gdGhhdCBuZW9uaWNvdGlub2lkcyBjYW4gaGF2ZSBhY3V0ZSBhbmQgc3ViLWxldGhhbCBlZmZlY3RzIG9uIGhvbmV5IGJlZXMsIGluY2x1ZGluZyBsaW1pdGVkIHJlcHJvZHVjdGl2ZSByYXRlcywgaW1wYWlyZWQgZm9yYWdpbmcgYWJpbGl0aWVzLCBpbmNyZWFzZWQgc3VzY2VwdGliaWxpdHkgdG8gZGlzZWFzZSwgYW5kIGRlY3JlYXNlZCBsZWFybmluZyBhYmlsaXRpZXMuIENocm9uaWMgZXhwb3N1cmUgdG8gbmVvbmljb3Rpbm9pZHMgaGFzIGJlZW4gbGlua2VkIHRvIHNpZ25pZmljYW50IGhhcm0gdG8gaG9uZXkgYmVlIGNvbG9uaWVzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGNvbGRlciB3aW50ZXJzLiBUaGlzIGV4cG9zdXJlIGNhbiBsZWFkIHRvIENvbG9ueSBDb2xsYXBzZSBEaXNvcmRlciAoQ0NEKSwgYSBwaGVub21lbm9uIHdoZXJlIGJlZXMgYWJhbmRvbiB0aGVpciBoaXZlcyBvdmVyIHRoZSB3aW50ZXIgYW5kIGV2ZW50dWFsbHkgZGllLiBUaGUgZGVjbGluZSBpbiBob25leSBiZWUgcG9wdWxhdGlvbnMgZHVlIHRvIG5lb25pY290aW5vaWRzIHBvc2VzIGEgc2VyaW91cyB0aHJlYXQgdG8gZWNvc3lzdGVtIGhlYWx0aCBhbmQgZm9vZCBzZWN1cml0eSwgZ2l2ZW4gdGhlIGNydWNpYWwgcm9sZSBiZWVzIHBsYXkgYXMgcG9sbGluYXRvcnMuDQo8YnI+DQpDaXRhdGlvbnM6IEVmZmVjdHMgb2YgTmVvbmljb3Rpbm9pZHMgb24gSHVtYW5zIGFuZCBCZWVzIC0gTlJEQy5PUkcNCg0KIyBEYXRhIFNvdXJjZQ0KSG9uZXkgQmVlcyBhbmQgTmVvbmljb3Rpbm9pZHMgUGVzdGljaWRlcyANCjx1bD4NCjxsaT5LYWdnbGUgTGluazogaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy9rZXZpbnptaXRoL2hvbmV5LXdpdGgtbmVvbmljLXBlc3RpY2lkZS9kYXRhDQo8bGk+T3JpZ2luYWwgRGF0YTogQ29sbGVjdGVkIGJ5IFVTREEgYW5kIFVTR0ENCjwvdWw+DQoNCkZyb20gVVNEQSBEYXRhOiA8YnI+DQo8dWw+DQogIDxsaT5udW1jb2w6IE51bWJlciBvZiBob25leSBwcm9kdWNpbmcgY29sb25pZXMuIEhvbmV5IHByb2R1Y2luZyBjb2xvbmllcyBhcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9uaWVzIGZyb20gd2hpY2ggaG9uZXkgd2FzIHRha2VuIGR1cmluZyB0aGUgeWVhci4gSXQgaXMgcG9zc2libGUgdG8gdGFrZSBob25leSBmcm9tIGNvbG9uaWVzIHdoaWNoIGRpZCBub3Qgc3Vydml2ZSB0aGUgZW50aXJlIHllYXIgPGJyPg0KICA8bGk+eWllbGRwZXJjb2w6IEhvbmV5IHlpZWxkIHBlciBjb2xvbnkuIFVuaXQgaXMgcG91bmRzIDxicj4NCiAgPGxpPnRvdGFscHJvZDogVG90YWwgcHJvZHVjdGlvbiAobnVtY29sIHggeWllbGRwZXJjb2wpLiBVbml0IGlzIHBvdW5kcyA8YnI+DQogIDxsaT5zdG9ja3M6IFJlZmVycyB0byBzdG9ja3MgaGVsZCBieSBwcm9kdWNlcnMuIFVuaXQgaXMgcG91bmRzIDxicj4NCiAgPGxpPnByaWNlcGVybGI6IFJlZmVycyB0byBhdmVyYWdlIHByaWNlIHBlciBwb3VuZCBiYXNlZCBvbiBleHBhbmRlZCBzYWxlcy4gVW5pdCBpcyBkb2xsYXJzLiA8YnI+DQogIDxsaT5wcm9kdmFsdWU6IFZhbHVlIG9mIHByb2R1Y3Rpb24gKHRvdGFscHJvZCB4IHByaWNlcGVybGIpLiBVbml0IGlzIGRvbGxhcnMuIDxicj4NCiAgICA8YnI+DQogPC91bD4NCkZyb20gVVNHUyBEYXRhOiA8YnI+DQo8dWw+DQogIDxsaT5uQ0xPVEhJQU5JRElOOiBUaGUgYW1vdW50IGluIGtnIG9mIENsb3RoaWFuaWRpbiBhcHBsaWVkIDxicj4NCiAgPGxpPm5JTUlEQUNMT1BSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgSW1pZGFjbG9wcmlkIGFwcGxpZWQgPGJyPg0KICA8bGk+blRISUFNRVRIT1hBTTogVGhlIGFtb3VudCBpbiBrZyBvZiBUaGlhbWV0aG94YW0gYXBwbGllZCA8YnI+DQogIDxsaT5uQUNFVEFNSVBSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgQWNldGFtaXByaWQgYXBwbGllZCA8YnI+DQogIDxsaT5uVEhJQUNMT1BSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgVGhpYWNsb3ByaWQgYXBwbGllZCA8YnI+DQogIDxsaT5uQWxsTmVvbmljOiBUaGUgYW1vdW50IGluIGtnIG9mIGFsbCBOZW9uaWNzIGFwcGxpZWQgPSAobkNMT1RISUFOSURJTiArIG5JTUlEQUNMT1BSSUQgKyBuVEhJQU1FVEhPWEFNICsgbkFDRVRBTUlQUklEICsgblRISUFDTE9QUklEKSA8YnI+DQo8L3VsPg0KRGF0YXNldCBpcyBtaXNzaW5nIGFsbCB2YWx1ZXMgZm9yIE5ldyBIYW1wc2hpcmUsIE1hc3NhY2h1c2V0dHMsIENvbm5lY3RpY3V0LCBhbmQgUmhvZGUgSXNsYW5kLiBEYXRhIHNldCBpcyBhbHNvIG1pc3NpbmcgdmFsdWVzIGZvciBNYXJ5bGFuZCwgRGVsYXdhcmUsIFNvdXRoIENhcm9saW5hLCBPa2xhaG9tYSwgTmV2YWRhLCBhbmQgTmV3IE1leGljbyBmb3Igc2VsZWN0IHllYXJzLg0KYGBge3IgZXZhbD1UUlVFfQ0KDQojaW1wb3J0IGRhdGENCmJlZURhdGEgPC0gbmEub21pdChyZWFkLmNzdigiaHR0cHM6Ly90a2VsbGVtYW4uZ2l0aHViLmlvL3Rrd2ViL1dlZWsxMC92SG9uZXlOZW9uaWNfdjAyLmNzdiIpKQ0KDQojQ3JlYXRlIGNvbHVtbiBsb3dOZW9uaWMgc2hvd2luZyAibG93IiBmb3IgaWYgdmFsdWVzIGluIG5BbGxOZW9uaWMgaXMgbGVzcyB0aGFuIDEwMDAsIGJldHdlZW4gMTAwMC0xMCwwMDAgYXMgIm1vZGVyYXRlIiwgYW5kIGdyZWF0ZXIgdGhhbiAxMCwwMDAgYXMgICJoaWdoIg0KYmVlRGF0YSA8LSBiZWVEYXRhICU+JQ0KICBtdXRhdGUoY2F0TmVvbmljID0gY2FzZV93aGVuKA0KICAgIG5BbGxOZW9uaWMgPCAxMDAwIH4gImxvdyIsDQogICAgbkFsbE5lb25pYyA+PSAxMDAwICYgbkFsbE5lb25pYyA8PSAxMDAwMCB+ICJtb2RlcmF0ZSIsDQogICAgbkFsbE5lb25pYyA+IDEwMDAwIH4gImhpZ2giDQogICkpDQoNCnN1bW1hcnkoYmVlRGF0YSkNCg0KI1NhdmUgZGF0YSBhcyBDU1YgZmlsZQ0Kd3JpdGUuY3N2KGJlZURhdGEsICJiZWVEYXRhVXBkYXRlZC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KIyBEYXRhIFN1bW1hcnkNCk1pbmltYWwgZGF0YSBtYW5pcHVsYXRpb24gd2FzIHBlcmZvcm1lZC4gSW5jb21wbGV0ZSBvYnNlcnZhdGlvbnMgd2VyZSByZW1vdmVkIHVzaW5nIHRoZSBuYS5vbWl0IGFuZCBhIG5ldyBjb2x1bW4gKGNhdE5lb25pYykgd2FzIGdlbmVydGF0ZWQgY2F0ZWdvcml6aW5nIHRoZSBuQWxsTmVvbmljIHZhbHVlcyBpbnRvIOKAnGxvd+KAnSAobGVzcyB0aGFuIDEwMDApLCDigJxtb2RlcmF0ZeKAnSAoYmV0d2VlbiAxMDAwIGFuZCAxMDAwMCwgaW5jbHVzaXZlKSwgYW5kIOKAnGhpZ2jigJ0gKGdyZWF0ZXIgdGhhbiAxMDAwMCkuIFRoZSBmaW5hbCBkYXRhc2V0IGluY2x1ZGVkIDc2MSBvYnNlcnZhdGlvbnMgb2YgMTcgdmFyaWFibGVzLiANCg0KIyBUYWJsZWF1IERhc2hib2FyZA0KPHRhYmxlIGJvcmRlciA9IDAgYm9yZGVyY29sb3I9ImJsYWNrIiBiZ2NvbG9yPScjZjZmNmY2JyAgd2lkdGg9MTAwJSAgYWxpZ24gPSBjZW50ZXI+DQo8dHI+DQo8dGQ+DQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyNzk4NzI3NTcyJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz4NCjxub3NjcmlwdD4NCjxhIGhyZWY9JyMnPjxpbWcgYWx0PSdEYXNoYm9hcmQgMSAnIHNyYz0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O1dlJiM0NztXZWVrMTAtVF9LZWxsZW1hbiYjNDc7RGFzaGJvYXJkMSYjNDc7MV9yc3MucG5nJyBzdHlsZT0nYm9yZGVyOiBub25lJyAvPjwvYT4NCjwvbm9zY3JpcHQ+DQo8b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IA0KPHBhcmFtIG5hbWU9J2VtYmVkX2NvZGVfdmVyc2lvbicgdmFsdWU9JzMnIC8+IA0KPHBhcmFtIG5hbWU9J3BhdGgnIHZhbHVlPSd2aWV3cyYjNDc7V2VlazEwLVRfS2VsbGVtYW4mIzQ3O0Rhc2hib2FyZDE/Omxhbmd1YWdlPWVuLVVTJmFtcDs6ZW1iZWQ9dHJ1ZSZhbXA7cHVibGlzaD15ZXMmYW1wOzpzaWQ9JyAvPiANCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7V2UmIzQ3O1dlZWsxMC1UX0tlbGxlbWFuJiM0NztEYXNoYm9hcmQxJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zcGlubmVyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfb3ZlcmxheScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLVVTJyAvPg0KPHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPg0KPC9vYmplY3Q+PC9kaXY+ICAgICAgICAgICAgICAgIA0KDQo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+ICAgICAgICAgICAgICAgICAgICANCnZhciBkaXZFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpejE3MTI3OTg3Mjc1NzInKTsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIA0Kdml6RWxlbWVudC5zdHlsZS5taW5XaWR0aD0nMTEyMHB4JzsNCnZpekVsZW1lbnQuc3R5bGUubWF4V2lkdGg9JzE0MjBweCc7DQp2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzsNCnZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSc1ODdweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heEhlaWdodD0nODg3cHgnOw0Kdml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMC43NSkrJ3B4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgDQo8L3NjcmlwdD4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPGJyPg0KDQojIENvbmNsdXNpb25zIGZyb20gVGFibGVhdSBEYXNoYm9hcmQNClVzaW5nIHRoZSBGaWx0ZXIgLSBTdGF0ZSBOYW1lIGluIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIHVzZXJzIGNhbiBzZWxlY3QgYWxsLCBvbmUsIG9yIG11bHRpcGxlIHN0YXRlcyB0byBmaWx0ZXIgY2hhcnRzLiBHZW5lcmFsIHRyZW5kcyB2aXNpYmxlIGluIHRoZSBkYXRhIGFyZSBhIHN0ZWFkeSBpbmNyZWFzZSBpbiBuZW9uaWNvdGlub2lkIHVzYWdlIHVudGlsIH4yMDE0IGFuZCBhIHN1ZGRlbiBkcm9wIGluIHVzYWdlLCBkdWUgdG8gRmVkZXJhbCByZWd1bGF0aW9uIGNoYW5nZXMuIFRoZXJlIGlzIGEgd2lkZSB2YXJpZXR5IGluIHVzYWdlIG9mIGFsbCBuZW9uaWNvdGlub2lkcyBieSBzdGF0ZSBhcyBzaG93biBpbiB0aGUgbWFwIHdpdGggc29tZSBzdGF0ZXMgYWRvcHRpbmcgdGhpcyBwb2xpY3kgZWFybGllciB0aGFuIG90aGVycy4gTW9yZSByZWNlbnQgZGF0YSBwb2ludHMgY291bGQgc2hlZCBsaWdodCBvbiB0aGUgZWNvbm9taWMgaW1wYWN0IG9mIGRlY3JlYXNlZCB1c2Ugb2YgdGhlc2UgcGVzdGljaWRlcy4gRGF0YSBsaWtlIHRoaXMgZHJpdmVzIEVQQSBwb2xpY3kgb24gYmVzdCBwcmFjdGljZXMgZm9yIGFncmljdWx0dXJlIHRvIHJlZHVjZSB0aGUgaGFybSB0byBuYXRpdmUgc3BlY2llcyB3aGlsZSBtYWludGFpbmluZyBjcm9wIHlpZWxkcy4NCg0KIyBTdG9yeWJvYXJkIFZlcnNpb24NCjx0YWJsZSBib3JkZXIgPSAwIGJvcmRlcmNvbG9yPSJibGFjayIgYmdjb2xvcj0nI2Y2ZjZmNicgIHdpZHRoPTEwMCUgIGFsaWduID0gY2VudGVyPg0KPHRyPg0KPHRkPg0KPGRpdiBjbGFzcz0ndGFibGVhdVBsYWNlaG9sZGVyJyBpZD0ndml6MTcxMjgwMjkzOTQ5Micgc3R5bGU9J3Bvc2l0aW9uOiByZWxhdGl2ZSc+DQo8bm9zY3JpcHQ+DQo8YSBocmVmPScjJz48aW1nIGFsdD0nTmVvbmljb3Rpbm9pZHMgUGVzdGljaWRlIFVzZSBpbiB0aGUgVVMgYW5kIGl0cyBJbXBhY3Qgb24gSW1wYWN0IG9uIEhvbmV5IFByb2R1Y3Rpb24gJyBzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztaTSYjNDc7Wk1SSjNXTVMyJiM0NzsxX3Jzcy5wbmcnIHN0eWxlPSdib3JkZXI6IG5vbmUnIC8+PC9hPg0KPC9ub3NjcmlwdD4NCjxvYmplY3QgY2xhc3M9J3RhYmxlYXVWaXonICBzdHlsZT0nZGlzcGxheTpub25lOyc+DQo8cGFyYW0gbmFtZT0naG9zdF91cmwnIHZhbHVlPSdodHRwcyUzQSUyRiUyRnB1YmxpYy50YWJsZWF1LmNvbSUyRicgLz4gDQo8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gDQo8cGFyYW0gbmFtZT0ncGF0aCcgdmFsdWU9J3NoYXJlZCYjNDc7Wk1SSjNXTVMyJyAvPiANCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztaTSYjNDc7Wk1SSjNXTVMyJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X3NwaW5uZXInIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9vdmVybGF5JyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfY291bnQnIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nbGFuZ3VhZ2UnIHZhbHVlPSdlbi1VUycgLz4NCjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz4NCjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgDQp2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXoxNzEyODAyOTM5NDkyJyk7ICAgICAgICAgICAgICAgICAgICANCnZhciB2aXpFbGVtZW50ID0gZGl2RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMTZweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9Jzk5MXB4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgDQo8L3NjcmlwdD4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg==