Kaitlin Kavlie PSYC-541

Lab #11: Choropleths

I ran the packages below.

library(tidyverse)
library(broom)
library(plotly)
library(tidycensus)      
library(sf)              
library(leaflet)         
library(trendyy)
library(usdata)          

Then I entered, ran, and removed my census API key.

census_api_key("70254b0b13d46bff0d9a603bf6343509f408cf44", overwrite = TRUE)
To install your API key for use in future sessions, run this function with `install = TRUE`.
  1. I selected the cigarette smoking data set and created a choropleth map with leaflet.

I used the first code to read in the cigarette smoking data.

cig_smoking <- read_csv("Cig_smoking_percent.csv")
states_leaflet <- get_acs(geography = "state",               
                  variables = "B01003_001",          
                  geometry = TRUE)                   
Getting data from the 2016-2020 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.

  |                                                                                                                                                              
  |                                                                                                                                                        |   0%
  |                                                                                                                                                              
  |=                                                                                                                                                       |   1%
  |                                                                                                                                                              
  |==                                                                                                                                                      |   1%
  |                                                                                                                                                              
  |===                                                                                                                                                     |   2%
  |                                                                                                                                                              
  |====                                                                                                                                                    |   3%
  |                                                                                                                                                              
  |=====                                                                                                                                                   |   3%
  |                                                                                                                                                              
  |======                                                                                                                                                  |   4%
  |                                                                                                                                                              
  |=======                                                                                                                                                 |   4%
  |                                                                                                                                                              
  |=======                                                                                                                                                 |   5%
  |                                                                                                                                                              
  |========                                                                                                                                                |   5%
  |                                                                                                                                                              
  |=========                                                                                                                                               |   6%
  |                                                                                                                                                              
  |==========                                                                                                                                              |   6%
  |                                                                                                                                                              
  |==========                                                                                                                                              |   7%
  |                                                                                                                                                              
  |===========                                                                                                                                             |   7%
  |                                                                                                                                                              
  |============                                                                                                                                            |   8%
  |                                                                                                                                                              
  |=============                                                                                                                                           |   8%
  |                                                                                                                                                              
  |=============                                                                                                                                           |   9%
  |                                                                                                                                                              
  |==============                                                                                                                                          |   9%
  |                                                                                                                                                              
  |===============                                                                                                                                         |  10%
  |                                                                                                                                                              
  |================                                                                                                                                        |  10%
  |                                                                                                                                                              
  |================                                                                                                                                        |  11%
  |                                                                                                                                                              
  |=================                                                                                                                                       |  11%
  |                                                                                                                                                              
  |==================                                                                                                                                      |  12%
  |                                                                                                                                                              
  |===================                                                                                                                                     |  13%
  |                                                                                                                                                              
  |====================                                                                                                                                    |  13%
  |                                                                                                                                                              
  |=====================                                                                                                                                   |  14%
  |                                                                                                                                                              
  |======================                                                                                                                                  |  14%
  |                                                                                                                                                              
  |======================                                                                                                                                  |  15%
  |                                                                                                                                                              
  |=======================                                                                                                                                 |  15%
  |                                                                                                                                                              
  |========================                                                                                                                                |  16%
  |                                                                                                                                                              
  |=========================                                                                                                                               |  16%
  |                                                                                                                                                              
  |==========================                                                                                                                              |  17%
  |                                                                                                                                                              
  |===========================                                                                                                                             |  18%
  |                                                                                                                                                              
  |============================                                                                                                                            |  18%
  |                                                                                                                                                              
  |============================                                                                                                                            |  19%
  |                                                                                                                                                              
  |=============================                                                                                                                           |  19%
  |                                                                                                                                                              
  |==============================                                                                                                                          |  19%
  |                                                                                                                                                              
  |==============================                                                                                                                          |  20%
  |                                                                                                                                                              
  |===============================                                                                                                                         |  20%
  |                                                                                                                                                              
  |===============================                                                                                                                         |  21%
  |                                                                                                                                                              
  |================================                                                                                                                        |  21%
  |                                                                                                                                                              
  |=================================                                                                                                                       |  22%
  |                                                                                                                                                              
  |==================================                                                                                                                      |  22%
  |                                                                                                                                                              
  |===================================                                                                                                                     |  23%
  |                                                                                                                                                              
  |====================================                                                                                                                    |  24%
  |                                                                                                                                                              
  |=====================================                                                                                                                   |  24%
  |                                                                                                                                                              
  |======================================                                                                                                                  |  25%
  |                                                                                                                                                              
  |=======================================                                                                                                                 |  25%
  |                                                                                                                                                              
  |=======================================                                                                                                                 |  26%
  |                                                                                                                                                              
  |========================================                                                                                                                |  26%
  |                                                                                                                                                              
  |========================================                                                                                                                |  27%
  |                                                                                                                                                              
  |=========================================                                                                                                               |  27%
  |                                                                                                                                                              
  |==========================================                                                                                                              |  27%
  |                                                                                                                                                              
  |==========================================                                                                                                              |  28%
  |                                                                                                                                                              
  |===========================================                                                                                                             |  28%
  |                                                                                                                                                              
  |===========================================                                                                                                             |  29%
  |                                                                                                                                                              
  |============================================                                                                                                            |  29%
  |                                                                                                                                                              
  |=============================================                                                                                                           |  29%
  |                                                                                                                                                              
  |=============================================                                                                                                           |  30%
  |                                                                                                                                                              
  |==============================================                                                                                                          |  30%
  |                                                                                                                                                              
  |===============================================                                                                                                         |  31%
  |                                                                                                                                                              
  |================================================                                                                                                        |  32%
  |                                                                                                                                                              
  |=================================================                                                                                                       |  32%
  |                                                                                                                                                              
  |==================================================                                                                                                      |  33%
  |                                                                                                                                                              
  |===================================================                                                                                                     |  33%
  |                                                                                                                                                              
  |====================================================                                                                                                    |  34%
  |                                                                                                                                                              
  |=====================================================                                                                                                   |  35%
  |                                                                                                                                                              
  |======================================================                                                                                                  |  35%
  |                                                                                                                                                              
  |======================================================                                                                                                  |  36%
  |                                                                                                                                                              
  |=======================================================                                                                                                 |  36%
  |                                                                                                                                                              
  |========================================================                                                                                                |  37%
  |                                                                                                                                                              
  |=========================================================                                                                                               |  38%
  |                                                                                                                                                              
  |==========================================================                                                                                              |  38%
  |                                                                                                                                                              
  |===========================================================                                                                                             |  39%
  |                                                                                                                                                              
  |============================================================                                                                                            |  39%
  |                                                                                                                                                              
  |============================================================                                                                                            |  40%
  |                                                                                                                                                              
  |=============================================================                                                                                           |  40%
  |                                                                                                                                                              
  |==============================================================                                                                                          |  41%
  |                                                                                                                                                              
  |===============================================================                                                                                         |  41%
  |                                                                                                                                                              
  |================================================================                                                                                        |  42%
  |                                                                                                                                                              
  |=================================================================                                                                                       |  43%
  |                                                                                                                                                              
  |==================================================================                                                                                      |  43%
  |                                                                                                                                                              
  |==================================================================                                                                                      |  44%
  |                                                                                                                                                              
  |===================================================================                                                                                     |  44%
  |                                                                                                                                                              
  |====================================================================                                                                                    |  44%
  |                                                                                                                                                              
  |====================================================================                                                                                    |  45%
  |                                                                                                                                                              
  |=====================================================================                                                                                   |  45%
  |                                                                                                                                                              
  |=====================================================================                                                                                   |  46%
  |                                                                                                                                                              
  |======================================================================                                                                                  |  46%
  |                                                                                                                                                              
  |=======================================================================                                                                                 |  47%
  |                                                                                                                                                              
  |========================================================================                                                                                |  47%
  |                                                                                                                                                              
  |========================================================================                                                                                |  48%
  |                                                                                                                                                              
  |=========================================================================                                                                               |  48%
  |                                                                                                                                                              
  |==========================================================================                                                                              |  49%
  |                                                                                                                                                              
  |===========================================================================                                                                             |  49%
  |                                                                                                                                                              
  |============================================================================                                                                            |  50%
  |                                                                                                                                                              
  |=============================================================================                                                                           |  50%
  |                                                                                                                                                              
  |=============================================================================                                                                           |  51%
  |                                                                                                                                                              
  |==============================================================================                                                                          |  51%
  |                                                                                                                                                              
  |===============================================================================                                                                         |  52%
  |                                                                                                                                                              
  |================================================================================                                                                        |  52%
  |                                                                                                                                                              
  |================================================================================                                                                        |  53%
  |                                                                                                                                                              
  |=================================================================================                                                                       |  53%
  |                                                                                                                                                              
  |=================================================================================                                                                       |  54%
  |                                                                                                                                                              
  |==================================================================================                                                                      |  54%
  |                                                                                                                                                              
  |===================================================================================                                                                     |  54%
  |                                                                                                                                                              
  |===================================================================================                                                                     |  55%
  |                                                                                                                                                              
  |====================================================================================                                                                    |  55%
  |                                                                                                                                                              
  |=====================================================================================                                                                   |  56%
  |                                                                                                                                                              
  |======================================================================================                                                                  |  57%
  |                                                                                                                                                              
  |=======================================================================================                                                                 |  57%
  |                                                                                                                                                              
  |========================================================================================                                                                |  58%
  |                                                                                                                                                              
  |=========================================================================================                                                               |  58%
  |                                                                                                                                                              
  |=========================================================================================                                                               |  59%
  |                                                                                                                                                              
  |==========================================================================================                                                              |  59%
  |                                                                                                                                                              
  |===========================================================================================                                                             |  60%
  |                                                                                                                                                              
  |============================================================================================                                                            |  60%
  |                                                                                                                                                              
  |=============================================================================================                                                           |  61%
  |                                                                                                                                                              
  |==============================================================================================                                                          |  62%
  |                                                                                                                                                              
  |===============================================================================================                                                         |  62%
  |                                                                                                                                                              
  |===============================================================================================                                                         |  63%
  |                                                                                                                                                              
  |================================================================================================                                                        |  63%
  |                                                                                                                                                              
  |=================================================================================================                                                       |  64%
  |                                                                                                                                                              
  |==================================================================================================                                                      |  64%
  |                                                                                                                                                              
  |==================================================================================================                                                      |  65%
  |                                                                                                                                                              
  |===================================================================================================                                                     |  65%
  |                                                                                                                                                              
  |====================================================================================================                                                    |  66%
  |                                                                                                                                                              
  |=====================================================================================================                                                   |  66%
  |                                                                                                                                                              
  |======================================================================================================                                                  |  67%
  |                                                                                                                                                              
  |=======================================================================================================                                                 |  68%
  |                                                                                                                                                              
  |========================================================================================================                                                |  68%
  |                                                                                                                                                              
  |=========================================================================================================                                               |  69%
  |                                                                                                                                                              
  |==========================================================================================================                                              |  69%
  |                                                                                                                                                              
  |==========================================================================================================                                              |  70%
  |                                                                                                                                                              
  |===========================================================================================================                                             |  70%
  |                                                                                                                                                              
  |===========================================================================================================                                             |  71%
  |                                                                                                                                                              
  |============================================================================================================                                            |  71%
  |                                                                                                                                                              
  |=============================================================================================================                                           |  71%
  |                                                                                                                                                              
  |=============================================================================================================                                           |  72%
  |                                                                                                                                                              
  |==============================================================================================================                                          |  72%
  |                                                                                                                                                              
  |==============================================================================================================                                          |  73%
  |                                                                                                                                                              
  |===============================================================================================================                                         |  73%
  |                                                                                                                                                              
  |================================================================================================================                                        |  74%
  |                                                                                                                                                              
  |=================================================================================================================                                       |  74%
  |                                                                                                                                                              
  |==================================================================================================================                                      |  75%
  |                                                                                                                                                              
  |===================================================================================================================                                     |  76%
  |                                                                                                                                                              
  |====================================================================================================================                                    |  76%
  |                                                                                                                                                              
  |=====================================================================================================================                                   |  77%
  |                                                                                                                                                              
  |======================================================================================================================                                  |  77%
  |                                                                                                                                                              
  |======================================================================================================================                                  |  78%
  |                                                                                                                                                              
  |=======================================================================================================================                                 |  78%
  |                                                                                                                                                              
  |=======================================================================================================================                                 |  79%
  |                                                                                                                                                              
  |========================================================================================================================                                |  79%
  |                                                                                                                                                              
  |=========================================================================================================================                               |  79%
  |                                                                                                                                                              
  |=========================================================================================================================                               |  80%
  |                                                                                                                                                              
  |==========================================================================================================================                              |  80%
  |                                                                                                                                                              
  |===========================================================================================================================                             |  81%
  |                                                                                                                                                              
  |============================================================================================================================                            |  82%
  |                                                                                                                                                              
  |=============================================================================================================================                           |  82%
  |                                                                                                                                                              
  |=============================================================================================================================                           |  83%
  |                                                                                                                                                              
  |==============================================================================================================================                          |  83%
  |                                                                                                                                                              
  |===============================================================================================================================                         |  83%
  |                                                                                                                                                              
  |===============================================================================================================================                         |  84%
  |                                                                                                                                                              
  |================================================================================================================================                        |  84%
  |                                                                                                                                                              
  |=================================================================================================================================                       |  85%
  |                                                                                                                                                              
  |==================================================================================================================================                      |  85%
  |                                                                                                                                                              
  |===================================================================================================================================                     |  86%
  |                                                                                                                                                              
  |====================================================================================================================================                    |  87%
  |                                                                                                                                                              
  |=====================================================================================================================================                   |  87%
  |                                                                                                                                                              
  |=====================================================================================================================================                   |  88%
  |                                                                                                                                                              
  |======================================================================================================================================                  |  88%
  |                                                                                                                                                              
  |=======================================================================================================================================                 |  89%
  |                                                                                                                                                              
  |========================================================================================================================================                |  89%
  |                                                                                                                                                              
  |========================================================================================================================================                |  90%
  |                                                                                                                                                              
  |=========================================================================================================================================               |  90%
  |                                                                                                                                                              
  |==========================================================================================================================================              |  91%
  |                                                                                                                                                              
  |===========================================================================================================================================             |  91%
  |                                                                                                                                                              
  |===========================================================================================================================================             |  92%
  |                                                                                                                                                              
  |============================================================================================================================================            |  92%
  |                                                                                                                                                              
  |=============================================================================================================================================           |  93%
  |                                                                                                                                                              
  |==============================================================================================================================================          |  93%
  |                                                                                                                                                              
  |==============================================================================================================================================          |  94%
  |                                                                                                                                                              
  |===============================================================================================================================================         |  94%
  |                                                                                                                                                              
  |================================================================================================================================================        |  94%
  |                                                                                                                                                              
  |================================================================================================================================================        |  95%
  |                                                                                                                                                              
  |=================================================================================================================================================       |  95%
  |                                                                                                                                                              
  |==================================================================================================================================================      |  96%
  |                                                                                                                                                              
  |===================================================================================================================================================     |  97%
  |                                                                                                                                                              
  |====================================================================================================================================================    |  97%
  |                                                                                                                                                              
  |====================================================================================================================================================    |  98%
  |                                                                                                                                                              
  |=====================================================================================================================================================   |  98%
  |                                                                                                                                                              
  |======================================================================================================================================================  |  99%
  |                                                                                                                                                              
  |======================================================================================================================================================= |  99%
  |                                                                                                                                                              
  |========================================================================================================================================================| 100%
state_colors <- colorNumeric(palette = "viridis", domain = states_leaflet$estimate)

states_leaflet %>% 
  leaflet() %>% 
  addTiles() %>%
  addPolygons(weight = 1,
              fillColor = ~state_colors(estimate), 
              label = ~paste0(NAME, ", income = ", estimate),           
              highlight = highlightOptions(weight = 2)) %>% 
  setView(-95, 40, zoom = 4) %>% 
  addLegend(pal = state_colors, values = ~estimate)
Warning: sf layer has inconsistent datum (+proj=longlat +datum=NAD83 +no_defs).
Need '+proj=longlat +datum=WGS84'
cig_colors <- colorNumeric(palette = "viridis", domain = cig_smoking$Cig_percent)

states_leaflet %>% 
  leaflet() %>% 
  addTiles() %>%
  addPolygons(weight = 1,
              fillColor = ~cig_colors(Cig_percent), 
              label = ~paste0(location, ", Cigarette percentage = ", Cig_percent),           
              highlight = highlightOptions(weight = 2)) %>% 
  setView(-95, 40, zoom = 4) %>% 
  addLegend(pal = cig_colors, values = ~Cig_percent)
Warning: sf layer has inconsistent datum (+proj=longlat +datum=NAD83 +no_defs).
Need '+proj=longlat +datum=WGS84'
Error in paste0(location, ", Cigarette percentage = ", Cig_percent) : 
  object 'Cig_percent' not found
  1. I chose the term ‘smoking’ to examine Google searches for, since it is in close relation to cigarettes. Then I created a choropleth.
nicotine <- trendy("nicotine", 
                   geo = "US", 
                   from = "2019-01-01", to = "2020-01-01")


nicotine_states <- nicotine %>%
  get_interest_region()

nicotine_states
NA

###this doesn’t work either, keep getting errors for addPolygon function

nicotine_colors <-colorNumeric(palette = "viridis", domain = nicotine_states$hits)

states_leaflet %>% 
  rename(location = NAME) %>%
  inner_join(nicotine_states)
Joining, by = "location"
Simple feature collection with 51 features and 9 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -179.1489 ymin: 18.91036 xmax: 179.7785 ymax: 71.36516
Geodetic CRS:  NAD83
First 10 features:
   GEOID    location   variable estimate moe hits  keyword geo gprop                       geometry
1     35  New Mexico B01003_001  2097021  NA   62 nicotine  US   web MULTIPOLYGON (((-109.0502 3...
2     06  California B01003_001 39346023  NA   66 nicotine  US   web MULTIPOLYGON (((-118.6044 3...
3     01     Alabama B01003_001  4893186  NA   67 nicotine  US   web MULTIPOLYGON (((-88.05338 3...
4     13     Georgia B01003_001 10516579  NA   76 nicotine  US   web MULTIPOLYGON (((-81.27939 3...
5     05    Arkansas B01003_001  3011873  NA   87 nicotine  US   web MULTIPOLYGON (((-94.61792 3...
6     41      Oregon B01003_001  4176346  NA   68 nicotine  US   web MULTIPOLYGON (((-123.6647 4...
7     28 Mississippi B01003_001  2981835  NA   75 nicotine  US   web MULTIPOLYGON (((-88.50297 3...
8     08    Colorado B01003_001  5684926  NA   78 nicotine  US   web MULTIPOLYGON (((-109.0603 3...
9     49        Utah B01003_001  3151239  NA   69 nicotine  US   web MULTIPOLYGON (((-114.053 37...
10    40    Oklahoma B01003_001  3949342  NA   78 nicotine  US   web MULTIPOLYGON (((-103.0026 3...
  leaflet() %>% 
  addTiles() %>%
  addPolygons(weight = 1, 
              fillColor = ~nicotine_colors(hits), 
              label = ~paste0(location, ", Search volume = ", hits), 
              highlight = highlightOptions(weight = 2)) %>% 
  setView(-95, 40, zoom = 4) %>% 
  addLegend(pal = nicotine_colors, values = ~hits)
Error in derivePolygons(data, lng, lat, missing(lng), missing(lat), "addPolygons") : 
  Polygon data not found; please provide addPolygons with data and/or lng/lat arguments
  1. I did a linear model relating the CDC data to the google search term, and created a plotly scatterplot of the relationship.
nicotine_model <- lm(cig_smoking ~ Cig_percent, data = nicotine_data)
Error in is.data.frame(data) : object 'nicotine_data' not found
nicotine_data %>%
  drop_na() %>% 
  plot_ly(x = ~hits, 
          y = ~Cig_percent,
          hoverinfo = "text", 
          text = ~paste("State: ", location, "<br>", "Nicotine's search rate: ", hits, "<br>", "Cig smoking percent:", Cig_percent)) %>% 
  add_markers(showlegend = F) %>% 
  add_lines(y = ~fitted(nicotine_model)) %>% 
  layout(title = "Relationship between google searches for 'nicotine' and smoking percent rates, by state",
   xaxis = list(title = "Google search volume for 'nicotine'"),
   yaxis = list(title = "State smoking rate, per capita"))
  1. I chose a second google search term that is relevant to your chosen CDC data and created a choropleth map.
smoking <- trendy("smoking", 
                   geo = "US", 
                   from = "2019-01-01", to = "2020-01-01")


smoking_states <- smoking %>%
  get_interest_region()

smoking_states
NA
smoking_states %>%
  mutate(State = state2abbr(location)) %>%
  inner_join(cig_smoking)
Joining, by = "State"
smoking_colors <-colorNumeric(palette = "viridis", domain = smoking_states$hits)

states_leaflet %>% 
  rename(location = NAME) %>%
  inner_join(smoking_states)
Joining, by = "location"
Simple feature collection with 51 features and 9 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -179.1489 ymin: 18.91036 xmax: 179.7785 ymax: 71.36516
Geodetic CRS:  NAD83
First 10 features:
   GEOID    location   variable estimate moe hits keyword geo gprop                       geometry
1     35  New Mexico B01003_001  2097021  NA   62 smoking  US   web MULTIPOLYGON (((-109.0502 3...
2     06  California B01003_001 39346023  NA   75 smoking  US   web MULTIPOLYGON (((-118.6044 3...
3     01     Alabama B01003_001  4893186  NA   87 smoking  US   web MULTIPOLYGON (((-88.05338 3...
4     13     Georgia B01003_001 10516579  NA   90 smoking  US   web MULTIPOLYGON (((-81.27939 3...
5     05    Arkansas B01003_001  3011873  NA   88 smoking  US   web MULTIPOLYGON (((-94.61792 3...
6     41      Oregon B01003_001  4176346  NA   85 smoking  US   web MULTIPOLYGON (((-123.6647 4...
7     28 Mississippi B01003_001  2981835  NA   75 smoking  US   web MULTIPOLYGON (((-88.50297 3...
8     08    Colorado B01003_001  5684926  NA   90 smoking  US   web MULTIPOLYGON (((-109.0603 3...
9     49        Utah B01003_001  3151239  NA   68 smoking  US   web MULTIPOLYGON (((-114.053 37...
10    40    Oklahoma B01003_001  3949342  NA   98 smoking  US   web MULTIPOLYGON (((-103.0026 3...
  leaflet() %>% 
  addTiles() %>%
  addPolygons(weight = 1,
              fillColor = ~smoking_colors(Cig_percent), 
              label = ~paste0(location, ", Cigarette percentage = ", Cig_percent),           
              highlight = highlightOptions(weight = 2)) %>% 
  setView(-95, 40, zoom = 4) %>% 
  addLegend(pal = smoking_colors, values = ~hits)
Error in derivePolygons(data, lng, lat, missing(lng), missing(lat), "addPolygons") : 
  Polygon data not found; please provide addPolygons with data and/or lng/lat arguments
  1. I did a linear model and plotly graph between smoking and the CDC data.
smoking_model <- lm(Cig_smoking ~ hits, data = smoking_data)
Error in is.data.frame(data) : object 'smoking_data' not found
smoking_data %>% 
  drop_na() %>% 
  plot_ly(x = ~hits, 
          y = ~Cig_smoking,
          hoverinfo = "text", 
          text = ~paste("State: ", location, "<br>", "'Smoking's search rate: ", hits, "<br>", "Cigarette Smoking: ", cig_smoking)) %>% 
  add_markers(showlegend = F) %>% 
  add_lines(y = ~fitted(smoking_model)) %>% 
  layout(title = "Relationship between google searches for 'smoking' and rates of cigarette smoking, by state",
   xaxis = list(title = "Google search volume for 'smoking'"),
   yaxis = list(title = "State cigarette smoking rate, per capita"))
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpLYWl0bGluIEthdmxpZSBQU1lDLTU0MQ0KDQpMYWIgIzExOiBDaG9yb3BsZXRocw0KDQoNCg0KSSByYW4gdGhlIHBhY2thZ2VzIGJlbG93Lg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeSh0aWR5Y2Vuc3VzKSAgICAgIA0KbGlicmFyeShzZikgICAgICAgICAgICAgIA0KbGlicmFyeShsZWFmbGV0KSAgICAgICAgIA0KbGlicmFyeSh0cmVuZHl5KQ0KbGlicmFyeSh1c2RhdGEpICAgICAgICAgIA0KYGBgDQoNClRoZW4gSSBlbnRlcmVkLCByYW4sIGFuZCByZW1vdmVkIG15IGNlbnN1cyBBUEkga2V5Lg0KDQpgYGB7cn0NCmNlbnN1c19hcGlfa2V5KCI3MDI1NGIwYjEzZDQ2YmZmMGQ5YTYwM2JmNjM0MzUwOWY0MDhjZjQ0Iiwgb3ZlcndyaXRlID0gVFJVRSkNCmBgYA0KDQoNCg0KDQoxLiBJIHNlbGVjdGVkIHRoZSBjaWdhcmV0dGUgc21va2luZyBkYXRhIHNldCBhbmQgY3JlYXRlZCBhIGNob3JvcGxldGggbWFwIHdpdGggbGVhZmxldC4NCg0KSSB1c2VkIHRoZSBmaXJzdCBjb2RlIHRvIHJlYWQgaW4gdGhlIGNpZ2FyZXR0ZSBzbW9raW5nIGRhdGEuDQpgYGB7cn0NCmNpZ19zbW9raW5nIDwtIHJlYWRfY3N2KCJDaWdfc21va2luZ19wZXJjZW50LmNzdiIpDQpgYGANCg0KDQpgYGB7cn0NCnN0YXRlc19sZWFmbGV0IDwtIGdldF9hY3MoZ2VvZ3JhcGh5ID0gInN0YXRlIiwgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyA9ICJCMDEwMDNfMDAxIiwgICAgICAgICAgDQogICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IFRSVUUpICAgICAgICAgICAgICAgICAgIA0KYGBgDQoNCmBgYHtyfQ0Kc3RhdGVfY29sb3JzIDwtIGNvbG9yTnVtZXJpYyhwYWxldHRlID0gInZpcmlkaXMiLCBkb21haW4gPSBzdGF0ZXNfbGVhZmxldCRlc3RpbWF0ZSkNCg0Kc3RhdGVzX2xlYWZsZXQgJT4lIA0KICBsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JQ0KICBhZGRQb2x5Z29ucyh3ZWlnaHQgPSAxLA0KICAgICAgICAgICAgICBmaWxsQ29sb3IgPSB+c3RhdGVfY29sb3JzKGVzdGltYXRlKSwgDQogICAgICAgICAgICAgIGxhYmVsID0gfnBhc3RlMChOQU1FLCAiLCBpbmNvbWUgPSAiLCBlc3RpbWF0ZSksICAgICAgICAgICANCiAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgPSAyKSkgJT4lIA0KICBzZXRWaWV3KC05NSwgNDAsIHpvb20gPSA0KSAlPiUgDQogIGFkZExlZ2VuZChwYWwgPSBzdGF0ZV9jb2xvcnMsIHZhbHVlcyA9IH5lc3RpbWF0ZSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmNpZ19jb2xvcnMgPC0gY29sb3JOdW1lcmljKHBhbGV0dGUgPSAidmlyaWRpcyIsIGRvbWFpbiA9IGNpZ19zbW9raW5nJENpZ19wZXJjZW50KQ0KDQpzdGF0ZXNfbGVhZmxldCAlPiUgDQogIGxlYWZsZXQoKSAlPiUgDQogIGFkZFRpbGVzKCkgJT4lDQogIGFkZFBvbHlnb25zKHdlaWdodCA9IDEsDQogICAgICAgICAgICAgIGZpbGxDb2xvciA9IH5jaWdfY29sb3JzKENpZ19wZXJjZW50KSwgDQogICAgICAgICAgICAgIGxhYmVsID0gfnBhc3RlMChsb2NhdGlvbiwgIiwgQ2lnYXJldHRlIHBlcmNlbnRhZ2UgPSAiLCBDaWdfcGVyY2VudCksICAgICAgICAgICANCiAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgPSAyKSkgJT4lIA0KICBzZXRWaWV3KC05NSwgNDAsIHpvb20gPSA0KSAlPiUgDQogIGFkZExlZ2VuZChwYWwgPSBjaWdfY29sb3JzLCB2YWx1ZXMgPSB+Q2lnX3BlcmNlbnQpDQpgYGANCg0KDQoNCjIuIEkgY2hvc2UgdGhlIHRlcm0gJ3Ntb2tpbmcnIHRvIGV4YW1pbmUgR29vZ2xlIHNlYXJjaGVzIGZvciwgc2luY2UgaXQgaXMgaW4gY2xvc2UgcmVsYXRpb24gdG8gY2lnYXJldHRlcy4gVGhlbiBJIGNyZWF0ZWQgYSBjaG9yb3BsZXRoLg0KDQoNCmBgYHtyfQ0Kbmljb3RpbmUgPC0gdHJlbmR5KCJuaWNvdGluZSIsIA0KICAgICAgICAgICAgICAgICAgIGdlbyA9ICJVUyIsIA0KICAgICAgICAgICAgICAgICAgIGZyb20gPSAiMjAxOS0wMS0wMSIsIHRvID0gIjIwMjAtMDEtMDEiKQ0KDQoNCm5pY290aW5lX3N0YXRlcyA8LSBuaWNvdGluZSAlPiUNCiAgZ2V0X2ludGVyZXN0X3JlZ2lvbigpDQoNCm5pY290aW5lX3N0YXRlcw0KDQpgYGANCg0KDQoNCiMjI3RoaXMgZG9lc24ndCB3b3JrIGVpdGhlciwga2VlcCBnZXR0aW5nIGVycm9ycyBmb3IgYWRkUG9seWdvbiBmdW5jdGlvbg0KYGBge3J9DQpuaWNvdGluZV9jb2xvcnMgPC1jb2xvck51bWVyaWMocGFsZXR0ZSA9ICJ2aXJpZGlzIiwgZG9tYWluID0gbmljb3RpbmVfc3RhdGVzJGhpdHMpDQoNCnN0YXRlc19sZWFmbGV0ICU+JSANCiAgcmVuYW1lKGxvY2F0aW9uID0gTkFNRSkgJT4lDQogIGlubmVyX2pvaW4obmljb3RpbmVfc3RhdGVzKQ0KICBsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JQ0KICBhZGRQb2x5Z29ucyh3ZWlnaHQgPSAxLCANCiAgICAgICAgICAgICAgZmlsbENvbG9yID0gfm5pY290aW5lX2NvbG9ycyhoaXRzKSwgDQogICAgICAgICAgICAgIGxhYmVsID0gfnBhc3RlMChsb2NhdGlvbiwgIiwgU2VhcmNoIHZvbHVtZSA9ICIsIGhpdHMpLCANCiAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgPSAyKSkgJT4lIA0KICBzZXRWaWV3KC05NSwgNDAsIHpvb20gPSA0KSAlPiUgDQogIGFkZExlZ2VuZChwYWwgPSBuaWNvdGluZV9jb2xvcnMsIHZhbHVlcyA9IH5oaXRzKQ0KYGBgDQoNCg0KMy4gSSBkaWQgYSBsaW5lYXIgbW9kZWwgcmVsYXRpbmcgdGhlIENEQyBkYXRhIHRvIHRoZSBnb29nbGUgc2VhcmNoIHRlcm0sIGFuZCBjcmVhdGVkIGEgcGxvdGx5IHNjYXR0ZXJwbG90IG9mIHRoZSByZWxhdGlvbnNoaXAuDQoNCg0KDQpgYGB7cn0NCm5pY290aW5lX21vZGVsIDwtIGxtKGNpZ19zbW9raW5nIH4gQ2lnX3BlcmNlbnQsIGRhdGEgPSBuaWNvdGluZV9kYXRhKQ0KZ2xhbmNlKG5pY290aW5lX21vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0Kbmljb3RpbmVfZGF0YSAlPiUNCiAgZHJvcF9uYSgpICU+JSANCiAgcGxvdF9seSh4ID0gfmhpdHMsIA0KICAgICAgICAgIHkgPSB+Q2lnX3BlcmNlbnQsDQogICAgICAgICAgaG92ZXJpbmZvID0gInRleHQiLCANCiAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJTdGF0ZTogIiwgbG9jYXRpb24sICI8YnI+IiwgIk5pY290aW5lJ3Mgc2VhcmNoIHJhdGU6ICIsIGhpdHMsICI8YnI+IiwgIkNpZyBzbW9raW5nIHBlcmNlbnQ6IiwgQ2lnX3BlcmNlbnQpKSAlPiUgDQogIGFkZF9tYXJrZXJzKHNob3dsZWdlbmQgPSBGKSAlPiUgDQogIGFkZF9saW5lcyh5ID0gfmZpdHRlZChuaWNvdGluZV9tb2RlbCkpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdvb2dsZSBzZWFyY2hlcyBmb3IgJ25pY290aW5lJyBhbmQgc21va2luZyBwZXJjZW50IHJhdGVzLCBieSBzdGF0ZSIsDQogICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiR29vZ2xlIHNlYXJjaCB2b2x1bWUgZm9yICduaWNvdGluZSciKSwNCiAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJTdGF0ZSBzbW9raW5nIHJhdGUsIHBlciBjYXBpdGEiKSkNCg0KYGBgDQoNCjQuIEkgY2hvc2UgYSBzZWNvbmQgZ29vZ2xlIHNlYXJjaCB0ZXJtIHRoYXQgaXMgcmVsZXZhbnQgdG8geW91ciBjaG9zZW4gQ0RDIGRhdGEgYW5kIGNyZWF0ZWQgYSBjaG9yb3BsZXRoIG1hcC4NCg0KYGBge3J9DQpzbW9raW5nIDwtIHRyZW5keSgic21va2luZyIsIA0KICAgICAgICAgICAgICAgICAgIGdlbyA9ICJVUyIsIA0KICAgICAgICAgICAgICAgICAgIGZyb20gPSAiMjAxOS0wMS0wMSIsIHRvID0gIjIwMjAtMDEtMDEiKQ0KDQoNCnNtb2tpbmdfc3RhdGVzIDwtIHNtb2tpbmcgJT4lDQogIGdldF9pbnRlcmVzdF9yZWdpb24oKQ0KDQpzbW9raW5nX3N0YXRlcw0KDQpgYGANCg0KDQpgYGB7cn0NCnNtb2tpbmdfc3RhdGVzICU+JQ0KICBtdXRhdGUoU3RhdGUgPSBzdGF0ZTJhYmJyKGxvY2F0aW9uKSkgJT4lDQogIGlubmVyX2pvaW4oY2lnX3Ntb2tpbmcpDQoNCmBgYA0KDQoNCmBgYHtyfQ0Kc21va2luZ19jb2xvcnMgPC1jb2xvck51bWVyaWMocGFsZXR0ZSA9ICJ2aXJpZGlzIiwgZG9tYWluID0gc21va2luZ19zdGF0ZXMkaGl0cykNCg0Kc3RhdGVzX2xlYWZsZXQgJT4lIA0KICByZW5hbWUobG9jYXRpb24gPSBOQU1FKSAlPiUNCiAgaW5uZXJfam9pbihzbW9raW5nX3N0YXRlcykNCiAgbGVhZmxldCgpICU+JSANCiAgYWRkVGlsZXMoKSAlPiUNCiAgYWRkUG9seWdvbnMod2VpZ2h0ID0gMSwNCiAgICAgICAgICAgICAgZmlsbENvbG9yID0gfnNtb2tpbmdfY29sb3JzKENpZ19wZXJjZW50KSwgDQogICAgICAgICAgICAgIGxhYmVsID0gfnBhc3RlMChsb2NhdGlvbiwgIiwgQ2lnYXJldHRlIHBlcmNlbnRhZ2UgPSAiLCBDaWdfcGVyY2VudCksICAgICAgICAgICANCiAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgPSAyKSkgJT4lIA0KICBzZXRWaWV3KC05NSwgNDAsIHpvb20gPSA0KSAlPiUgDQogIGFkZExlZ2VuZChwYWwgPSBzbW9raW5nX2NvbG9ycywgdmFsdWVzID0gfmhpdHMpDQpgYGANCg0KDQo1LiBJIGRpZCBhIGxpbmVhciBtb2RlbCBhbmQgcGxvdGx5IGdyYXBoIGJldHdlZW4gc21va2luZyBhbmQgdGhlIENEQyBkYXRhLiANCg0KDQoNCg0KYGBge3J9DQpzbW9raW5nX21vZGVsIDwtIGxtKENpZ19zbW9raW5nIH4gaGl0cywgZGF0YSA9IHNtb2tpbmdfZGF0YSkNCg0KZ2xhbmNlKHNtb2tpbmdfbW9kZWwpDQp0aWR5KHNtb2tpbmdfbW9kZWwpDQpgYGANCg0KDQoNCmBgYHtyfQ0Kc21va2luZ19kYXRhICU+JSANCiAgZHJvcF9uYSgpICU+JSANCiAgcGxvdF9seSh4ID0gfmhpdHMsIA0KICAgICAgICAgIHkgPSB+Q2lnX3Ntb2tpbmcsDQogICAgICAgICAgaG92ZXJpbmZvID0gInRleHQiLCANCiAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJTdGF0ZTogIiwgbG9jYXRpb24sICI8YnI+IiwgIidTbW9raW5nJ3Mgc2VhcmNoIHJhdGU6ICIsIGhpdHMsICI8YnI+IiwgIkNpZ2FyZXR0ZSBTbW9raW5nOiAiLCBjaWdfc21va2luZykpICU+JSANCiAgYWRkX21hcmtlcnMoc2hvd2xlZ2VuZCA9IEYpICU+JSANCiAgYWRkX2xpbmVzKHkgPSB+Zml0dGVkKHNtb2tpbmdfbW9kZWwpKSAlPiUgDQogIGxheW91dCh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBnb29nbGUgc2VhcmNoZXMgZm9yICdzbW9raW5nJyBhbmQgcmF0ZXMgb2YgY2lnYXJldHRlIHNtb2tpbmcsIGJ5IHN0YXRlIiwNCiAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJHb29nbGUgc2VhcmNoIHZvbHVtZSBmb3IgJ3Ntb2tpbmcnIiksDQogICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiU3RhdGUgY2lnYXJldHRlIHNtb2tpbmcgcmF0ZSwgcGVyIGNhcGl0YSIpKQ0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==