Libraries

## First specify the packages of interest
packages = c("tidyverse", "sjlabelled","ggplot2","broom","GGally", "viridis", "janitor","lubridate","forecast","fpp3","quantmod","fpp2","ggthemes","hrbrthemes","correlation","see","ggraph","plotly","dplyr", "gganimate")

## Now load or install&load all
package.check <- lapply(
  packages,
  FUN = function(x) {
    if (!require(x, character.only = TRUE)) {
      install.packages(x, dependencies = TRUE)
      library(x, character.only = TRUE)
    }
  }
)

Data source

OWD<-read.csv("https://covid.ourworldindata.org/data/owid-covid-data.csv")
head(OWD)

Time variable

OWD$date<- as.POSIXct(OWD$date, format = "%Y-%m-%d")
OWD$date<-as.Date(OWD$date,format='%Y/%m/%d')# convert time date into a date variable
OWD<-OWD %>%
  dplyr::mutate(year = lubridate::year(date), 
                month = lubridate::month(date), 
                day = lubridate::day(date))
##  Convert numeric month numeric values to name abbreviations
OWD$month<- month.abb[OWD$month] 
## remove all empty variables (columns) from dataset (janitor package)
OWD<-OWD %>%
  remove_empty("cols") #select either row or cols or both
dim(OWD)# there are not empty columns
[1] 123539     68
# substitute negative values from columns with NA-s
OWD<-OWD
OWD[OWD<0] <- 0 

Plot time series

OWD.1<-OWD %>%
  dplyr::filter(location == "World")
fig <- plot_ly(OWD.1, x = ~date)
fig <- fig %>% add_lines(y = ~total_cases, name = "Total Cases")
fig <- fig %>% add_lines(y = ~total_deaths, name = "Total Deaths")
fig <- fig %>% layout(
    title = "Covid daily cumulative Cases and Deaths",
    xaxis = list(
      rangeselector = list(
        buttons = list(
          list(
            count = 3,
            label = "3 mo",
            step = "month",
            stepmode = "backward"),
          list(
            count = 6,
            label = "6 mo",
            step = "month",
            stepmode = "backward"),
          list(
            count = 1,
            label = "1 yr",
            step = "year",
            stepmode = "backward"),
          list(
            count = 1,
            label = "YTD",
            step = "year",
            stepmode = "todate"),
          list(step = "all"))),

      rangeslider = list(type = "date")),

    yaxis = list(title = "Number of Cases"))

fig

BoxPlot

OWD.2<-OWD %>%
 filter(continent %in% c("Europe", "North America","Asia","Africa","South America","Oceania"))
fig <- plot_ly(OWD.2, x = ~total_deaths, color = ~continent, type = "box")

fig
Warning: Ignoring 17296 observations
Warning: Ignoring 17296 observations
OWD.eu<-OWD %>%
 filter(continent %in% c("Europe"))

fig <- plot_ly(OWD.eu, type = 'scatter', mode = 'lines')%>%
  add_trace(x = ~date, y = ~people_vaccinated,color=~location)%>%
  layout(showlegend = F, title='Time Series of people vaccinated for Europe',
         xaxis = list(rangeslider = list(visible = T),
                      rangeselector=list(
                        buttons=list(
                          list(count=1, label="1m", step="month", stepmode="backward"),
                          list(count=6, label="6m", step="month", stepmode="backward"),
                          list(count=1, label="YTD", step="year", stepmode="todate"),
                          list(count=1, label="1y", step="year", stepmode="backward"),
                          list(step="all")
                        ))))
fig <- fig %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', margin = 0.1, width = 900)
Warning: Specifying width/height in layout() is now deprecated.
Please specify in ggplotly() or plot_ly()
fig
Warning in RColorBrewer::brewer.pal(N, "Set2") :
  n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

Warning in RColorBrewer::brewer.pal(N, "Set2") :
  n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

Warning in RColorBrewer::brewer.pal(N, "Set2") :
  n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

Warning in RColorBrewer::brewer.pal(N, "Set2") :
  n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

New cases dynamic evolution of Covid-19

library(gganimate)
OWD_1<-subset(OWD, location != "Asia")
OWD_1<-subset(OWD_1, location!="Europe")
OWD_1<-subset(OWD_1, location!="North America")
OWD_1<-subset(OWD_1, location!="South America")
OWD_1<-subset(OWD_1, location!="World")
OWD_1<-subset(OWD_1, location!="European Union")
OWD_1<-subset(OWD_1, location!="International")
OWD_1<-subset(OWD_1, location!="Oceania")
OWD_1<-subset(OWD_1, location!="Africa")

# OWD_1 has World and other location removed
OWD_4<-OWD_1 %>%
 filter(date >= as.Date("2021-09-01"))

p <- OWD_4 %>%
  filter(new_cases > 0 & new_cases < 40000000) %>%
  arrange(location, date) %>%
  group_by(location) %>%
  mutate(new_cases_cum = cumsum(new_cases)) %>%
  group_by(date) %>%
  top_n(10, new_cases_cum) %>%
  mutate(location = factor(location)) %>%
  mutate(rank = dense_rank(-new_cases_cum)) %>%
  ungroup %>%
  ggplot() + 
  aes(rank, group = location, fill = location, color = location) +
  geom_tile(aes(y = new_cases_cum/2,height = new_cases_cum, width = 0.9), alpha = 0.8, color = NA) + 
  geom_text(aes(y = 0, label = paste(location, " ")), vjust = 0.2, hjust = 1) +
  coord_flip(clip = "off", expand = FALSE) +
  scale_y_continuous(labels = scales::comma) +
  scale_x_reverse() +
  guides(color = FALSE, fill = FALSE) +
  labs(title='{closest_state}', x = "", y = "Total cases") +
  theme(plot.title = element_text(hjust = 0, size = 22),axis.ticks.y = element_blank(),axis.text.y  = element_blank(),plot.margin = margin(1,1,1,4, "cm"))
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
p+transition_states(date, transition_length = 20)

Rendering [=>-----------------------------------------------------] at 5.9 fps ~ eta: 17s
Rendering [=>-----------------------------------------------------] at 5.6 fps ~ eta: 17s
Rendering [==>------------------------------------------------------] at 6 fps ~ eta: 16s
Rendering [==>----------------------------------------------------] at 6.4 fps ~ eta: 15s
Rendering [===>---------------------------------------------------] at 6.7 fps ~ eta: 14s
Rendering [====>----------------------------------------------------] at 7 fps ~ eta: 13s
Rendering [====>--------------------------------------------------] at 7.2 fps ~ eta: 13s
Rendering [=====>-------------------------------------------------] at 7.3 fps ~ eta: 12s
Rendering [=====>-------------------------------------------------] at 7.5 fps ~ eta: 12s
Rendering [======>------------------------------------------------] at 7.5 fps ~ eta: 12s
Rendering [======>------------------------------------------------] at 7.6 fps ~ eta: 11s
Rendering [=======>-----------------------------------------------] at 7.7 fps ~ eta: 11s
Rendering [=======>-----------------------------------------------] at 7.8 fps ~ eta: 11s
Rendering [========>----------------------------------------------] at 7.9 fps ~ eta: 11s
Rendering [========>----------------------------------------------] at 7.9 fps ~ eta: 10s
Rendering [=========>-----------------------------------------------] at 8 fps ~ eta: 10s
Rendering [=========>---------------------------------------------] at 8.1 fps ~ eta: 10s
Rendering [==========>--------------------------------------------] at 8.1 fps ~ eta: 10s
Rendering [===========>-------------------------------------------] at 8.1 fps ~ eta: 10s
Rendering [============>------------------------------------------] at 8.2 fps ~ eta:  9s
Rendering [=============>-----------------------------------------] at 8.2 fps ~ eta:  9s
Rendering [=============>-----------------------------------------] at 8.3 fps ~ eta:  9s
Rendering [==============>----------------------------------------] at 8.3 fps ~ eta:  9s
Rendering [===============>---------------------------------------] at 8.4 fps ~ eta:  8s
Rendering [================>--------------------------------------] at 8.4 fps ~ eta:  8s
Rendering [=================>-------------------------------------] at 8.4 fps ~ eta:  8s
Rendering [=================>-------------------------------------] at 8.5 fps ~ eta:  8s
Rendering [==================>------------------------------------] at 8.4 fps ~ eta:  8s
Rendering [===================>-----------------------------------] at 8.4 fps ~ eta:  8s
Rendering [===================>-----------------------------------] at 8.3 fps ~ eta:  8s
Rendering [====================>----------------------------------] at 8.3 fps ~ eta:  7s
Rendering [=====================>---------------------------------] at 8.4 fps ~ eta:  7s
Rendering [======================>--------------------------------] at 8.4 fps ~ eta:  7s
Rendering [=======================>-------------------------------] at 8.4 fps ~ eta:  7s
Rendering [=======================>-------------------------------] at 8.5 fps ~ eta:  7s
Rendering [========================>------------------------------] at 8.5 fps ~ eta:  6s
Rendering [=========================>-----------------------------] at 8.5 fps ~ eta:  6s
Rendering [=========================>-----------------------------] at 8.6 fps ~ eta:  6s
Rendering [==========================>----------------------------] at 8.4 fps ~ eta:  6s
Rendering [===========================>---------------------------] at 8.5 fps ~ eta:  6s
Rendering [============================>--------------------------] at 8.4 fps ~ eta:  6s
Rendering [=============================>-------------------------] at 8.5 fps ~ eta:  5s
Rendering [==============================>------------------------] at 8.5 fps ~ eta:  5s
Rendering [===============================>-----------------------] at 8.5 fps ~ eta:  5s
Rendering [===============================>-----------------------] at 8.6 fps ~ eta:  5s
Rendering [================================>----------------------] at 8.6 fps ~ eta:  5s
Rendering [=================================>---------------------] at 8.6 fps ~ eta:  5s
Rendering [=================================>---------------------] at 8.6 fps ~ eta:  4s
Rendering [==================================>--------------------] at 8.6 fps ~ eta:  4s
Rendering [===================================>-------------------] at 8.6 fps ~ eta:  4s
Rendering [====================================>------------------] at 8.6 fps ~ eta:  4s
Rendering [=====================================>-----------------] at 8.6 fps ~ eta:  4s
Rendering [=====================================>-----------------] at 8.6 fps ~ eta:  3s
Rendering [======================================>----------------] at 8.6 fps ~ eta:  3s
Rendering [=======================================>---------------] at 8.6 fps ~ eta:  3s
Rendering [=======================================>---------------] at 8.5 fps ~ eta:  3s
Rendering [========================================>--------------] at 8.6 fps ~ eta:  3s
Rendering [=========================================>-------------] at 8.6 fps ~ eta:  3s
Rendering [==========================================>------------] at 8.6 fps ~ eta:  3s
Rendering [==========================================>------------] at 8.6 fps ~ eta:  2s
Rendering [===========================================>-----------] at 8.6 fps ~ eta:  2s
Rendering [============================================>----------] at 8.7 fps ~ eta:  2s
Rendering [=============================================>---------] at 8.7 fps ~ eta:  2s
Rendering [==============================================>--------] at 8.6 fps ~ eta:  2s
Rendering [==============================================>--------] at 8.7 fps ~ eta:  2s
Rendering [===============================================>-------] at 8.7 fps ~ eta:  1s
Rendering [================================================>------] at 8.6 fps ~ eta:  1s
Rendering [=================================================>-----] at 8.6 fps ~ eta:  1s
Rendering [=================================================>-----] at 8.7 fps ~ eta:  1s
Rendering [==================================================>----] at 8.7 fps ~ eta:  1s
Rendering [===================================================>---] at 8.7 fps ~ eta:  1s
Rendering [====================================================>--] at 8.7 fps ~ eta:  0s
Rendering [=====================================================>-] at 8.7 fps ~ eta:  0s
Rendering [=====================================================>-] at 8.8 fps ~ eta:  0s
Rendering [=======================================================] at 8.8 fps ~ eta:  0s
                                                                                         


Inserting image 1 at 0.00s (1%)...
Inserting image 2 at 0.10s (2%)...
Inserting image 3 at 0.20s (3%)...
Inserting image 4 at 0.30s (4%)...
Inserting image 5 at 0.40s (5%)...
Inserting image 6 at 0.50s (6%)...
Inserting image 7 at 0.60s (7%)...
Inserting image 8 at 0.70s (8%)...
Inserting image 9 at 0.80s (9%)...
Inserting image 10 at 0.90s (10%)...
Inserting image 11 at 1.00s (11%)...
Inserting image 12 at 1.10s (12%)...
Inserting image 13 at 1.20s (13%)...
Inserting image 14 at 1.30s (14%)...
Inserting image 15 at 1.40s (15%)...
Inserting image 16 at 1.50s (16%)...
Inserting image 17 at 1.60s (17%)...
Inserting image 18 at 1.70s (18%)...
Inserting image 19 at 1.80s (19%)...
Inserting image 20 at 1.90s (20%)...
Inserting image 21 at 2.00s (21%)...
Inserting image 22 at 2.10s (22%)...
Inserting image 23 at 2.20s (23%)...
Inserting image 24 at 2.30s (24%)...
Inserting image 25 at 2.40s (25%)...
Inserting image 26 at 2.50s (26%)...
Inserting image 27 at 2.60s (27%)...
Inserting image 28 at 2.70s (28%)...
Inserting image 29 at 2.80s (29%)...
Inserting image 30 at 2.90s (30%)...
Inserting image 31 at 3.00s (31%)...
Inserting image 32 at 3.10s (32%)...
Inserting image 33 at 3.20s (33%)...
Inserting image 34 at 3.30s (34%)...
Inserting image 35 at 3.40s (35%)...
Inserting image 36 at 3.50s (36%)...
Inserting image 37 at 3.60s (37%)...
Inserting image 38 at 3.70s (38%)...
Inserting image 39 at 3.80s (39%)...
Inserting image 40 at 3.90s (40%)...
Inserting image 41 at 4.00s (41%)...
Inserting image 42 at 4.10s (42%)...
Inserting image 43 at 4.20s (43%)...
Inserting image 44 at 4.30s (44%)...
Inserting image 45 at 4.40s (45%)...
Inserting image 46 at 4.50s (46%)...
Inserting image 47 at 4.60s (47%)...
Inserting image 48 at 4.70s (48%)...
Inserting image 49 at 4.80s (49%)...
Inserting image 50 at 4.90s (50%)...
Inserting image 51 at 5.00s (51%)...
Inserting image 52 at 5.10s (52%)...
Inserting image 53 at 5.20s (53%)...
Inserting image 54 at 5.30s (54%)...
Inserting image 55 at 5.40s (55%)...
Inserting image 56 at 5.50s (56%)...
Inserting image 57 at 5.60s (57%)...
Inserting image 58 at 5.70s (58%)...
Inserting image 59 at 5.80s (59%)...
Inserting image 60 at 5.90s (60%)...
Inserting image 61 at 6.00s (61%)...
Inserting image 62 at 6.10s (62%)...
Inserting image 63 at 6.20s (63%)...
Inserting image 64 at 6.30s (64%)...
Inserting image 65 at 6.40s (65%)...
Inserting image 66 at 6.50s (66%)...
Inserting image 67 at 6.60s (67%)...
Inserting image 68 at 6.70s (68%)...
Inserting image 69 at 6.80s (69%)...
Inserting image 70 at 6.90s (70%)...
Inserting image 71 at 7.00s (71%)...
Inserting image 72 at 7.10s (72%)...
Inserting image 73 at 7.20s (73%)...
Inserting image 74 at 7.30s (74%)...
Inserting image 75 at 7.40s (75%)...
Inserting image 76 at 7.50s (76%)...
Inserting image 77 at 7.60s (77%)...
Inserting image 78 at 7.70s (78%)...
Inserting image 79 at 7.80s (79%)...
Inserting image 80 at 7.90s (80%)...
Inserting image 81 at 8.00s (81%)...
Inserting image 82 at 8.10s (82%)...
Inserting image 83 at 8.20s (83%)...
Inserting image 84 at 8.30s (84%)...
Inserting image 85 at 8.40s (85%)...
Inserting image 86 at 8.50s (86%)...
Inserting image 87 at 8.60s (87%)...
Inserting image 88 at 8.70s (88%)...
Inserting image 89 at 8.80s (89%)...
Inserting image 90 at 8.90s (90%)...
Inserting image 91 at 9.00s (91%)...
Inserting image 92 at 9.10s (92%)...
Inserting image 93 at 9.20s (93%)...
Inserting image 94 at 9.30s (94%)...
Inserting image 95 at 9.40s (95%)...
Inserting image 96 at 9.50s (96%)...
Inserting image 97 at 9.60s (97%)...
Inserting image 98 at 9.70s (98%)...
Inserting image 99 at 9.80s (99%)...
Inserting image 100 at 9.90s (100%)...
Encoding to gif... done!

Total Vaccinations dynamic evolution of Covid-19

p <- OWD_4 %>%
  filter(total_vaccinations > 0 & total_vaccinations < 3400000000) %>%
  arrange(location, date) %>%
  group_by(location) %>%
  mutate(total_vaccinations_cum = cumsum(total_vaccinations)) %>%
  group_by(date) %>%
  top_n(10, total_vaccinations_cum) %>%
  mutate(location = factor(location)) %>%
  mutate(rank = dense_rank(-total_vaccinations_cum)) %>%
  ungroup %>%
  ggplot() + 
  aes(rank, group = location, fill = location, color = location) +
  geom_tile(aes(y = total_vaccinations_cum/2,height = total_vaccinations_cum, width = 0.9), alpha = 0.8, color = NA) + 
  geom_text(aes(y = 0, label = paste(location, " ")), vjust = 0.2, hjust = 1) +
  coord_flip(clip = "off", expand = FALSE) +
  scale_y_continuous(labels = scales::comma) +
  scale_x_reverse() +
  guides(color = FALSE, fill = FALSE) +
  labs(title='{closest_state}', x = "", y = "Total Vaccinations") +
  theme(plot.title = element_text(hjust = 0, size = 22),axis.ticks.y = element_blank(),axis.text.y  = element_blank(),plot.margin = margin(1,1,1,4, "cm"))
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
p+transition_states(date, transition_length = 20)

Rendering [=>------------------------------------------------------] at 12 fps ~ eta:  8s
Rendering [=>------------------------------------------------------] at 10 fps ~ eta:  9s
Rendering [==>----------------------------------------------------] at 9.8 fps ~ eta: 10s
Rendering [===>---------------------------------------------------] at 9.9 fps ~ eta:  9s
Rendering [===>---------------------------------------------------] at 9.7 fps ~ eta: 10s
Rendering [====>--------------------------------------------------] at 9.5 fps ~ eta: 10s
Rendering [=====>-------------------------------------------------] at 9.4 fps ~ eta: 10s
Rendering [=====>-------------------------------------------------] at 9.4 fps ~ eta:  9s
Rendering [======>------------------------------------------------] at 9.5 fps ~ eta:  9s
Rendering [======>------------------------------------------------] at 9.4 fps ~ eta:  9s
Rendering [=======>-----------------------------------------------] at 8.9 fps ~ eta: 10s
Rendering [========>------------------------------------------------] at 9 fps ~ eta:  9s
Rendering [========>----------------------------------------------] at 9.1 fps ~ eta:  9s
Rendering [=========>---------------------------------------------] at 9.1 fps ~ eta:  9s
Rendering [=========>---------------------------------------------] at 9.2 fps ~ eta:  9s
Rendering [==========>--------------------------------------------] at 9.2 fps ~ eta:  9s
Rendering [===========>-------------------------------------------] at 9.2 fps ~ eta:  9s
Rendering [===========>-------------------------------------------] at 9.1 fps ~ eta:  9s
Rendering [============>------------------------------------------] at 9.2 fps ~ eta:  8s
Rendering [=============>-----------------------------------------] at 9.3 fps ~ eta:  8s
Rendering [==============>----------------------------------------] at 9.3 fps ~ eta:  8s
Rendering [===============>-----------------------------------------] at 9 fps ~ eta:  8s
Rendering [===============>---------------------------------------] at 9.1 fps ~ eta:  8s
Rendering [================>--------------------------------------] at 8.8 fps ~ eta:  8s
Rendering [=================>-------------------------------------] at 8.8 fps ~ eta:  8s
Rendering [==================>------------------------------------] at 8.8 fps ~ eta:  7s
Rendering [===================>-----------------------------------] at 8.9 fps ~ eta:  7s
Rendering [====================>----------------------------------] at 8.9 fps ~ eta:  7s
Rendering [=====================>-----------------------------------] at 9 fps ~ eta:  7s
Rendering [=====================>---------------------------------] at 8.8 fps ~ eta:  7s
Rendering [======================>--------------------------------] at 8.8 fps ~ eta:  7s
Rendering [======================>--------------------------------] at 8.9 fps ~ eta:  7s
Rendering [=======================>-------------------------------] at 8.9 fps ~ eta:  6s
Rendering [=======================>-------------------------------] at 8.8 fps ~ eta:  6s
Rendering [========================>------------------------------] at 8.8 fps ~ eta:  6s
Rendering [=========================>-----------------------------] at 8.8 fps ~ eta:  6s
Rendering [=========================>-----------------------------] at 8.9 fps ~ eta:  6s
Rendering [==========================>----------------------------] at 8.9 fps ~ eta:  6s
Rendering [===========================>---------------------------] at 8.9 fps ~ eta:  6s
Rendering [============================>--------------------------] at 8.9 fps ~ eta:  5s
Rendering [==============================>--------------------------] at 9 fps ~ eta:  5s
Rendering [===============================>-------------------------] at 9 fps ~ eta:  5s
Rendering [================================>------------------------] at 9 fps ~ eta:  5s
Rendering [=================================>-----------------------] at 9 fps ~ eta:  5s
Rendering [================================>----------------------] at 9.1 fps ~ eta:  4s
Rendering [==================================>----------------------] at 9 fps ~ eta:  4s
Rendering [==================================>--------------------] at 9.1 fps ~ eta:  4s
Rendering [===================================>-------------------] at 9.1 fps ~ eta:  4s
Rendering [====================================>------------------] at 9.1 fps ~ eta:  4s
Rendering [======================================>------------------] at 9 fps ~ eta:  4s
Rendering [=====================================>-----------------] at 9.1 fps ~ eta:  3s
Rendering [=======================================>-----------------] at 9 fps ~ eta:  3s
Rendering [========================================>----------------] at 9 fps ~ eta:  3s
Rendering [=========================================>---------------] at 9 fps ~ eta:  3s
Rendering [==========================================>--------------] at 9 fps ~ eta:  3s
Rendering [===========================================>-------------] at 9 fps ~ eta:  3s
Rendering [===========================================>-------------] at 9 fps ~ eta:  2s
Rendering [==========================================>------------] at 8.9 fps ~ eta:  2s
Rendering [===========================================>-----------] at 8.9 fps ~ eta:  2s
Rendering [============================================>----------] at 8.9 fps ~ eta:  2s
Rendering [=============================================>---------] at 8.9 fps ~ eta:  2s
Rendering [==============================================>--------] at 8.9 fps ~ eta:  2s
Rendering [===============================================>-------] at 8.8 fps ~ eta:  1s
Rendering [================================================>------] at 8.9 fps ~ eta:  1s
Rendering [=================================================>-----] at 8.9 fps ~ eta:  1s
Rendering [==================================================>----] at 8.9 fps ~ eta:  1s
Rendering [===================================================>---] at 8.9 fps ~ eta:  1s
Rendering [====================================================>--] at 8.9 fps ~ eta:  0s
Rendering [=====================================================>-] at 8.9 fps ~ eta:  0s
Rendering [=========================================================] at 9 fps ~ eta:  0s
                                                                                         


Inserting image 1 at 0.00s (1%)...
Inserting image 2 at 0.10s (2%)...
Inserting image 3 at 0.20s (3%)...
Inserting image 4 at 0.30s (4%)...
Inserting image 5 at 0.40s (5%)...
Inserting image 6 at 0.50s (6%)...
Inserting image 7 at 0.60s (7%)...
Inserting image 8 at 0.70s (8%)...
Inserting image 9 at 0.80s (9%)...
Inserting image 10 at 0.90s (10%)...
Inserting image 11 at 1.00s (11%)...
Inserting image 12 at 1.10s (12%)...
Inserting image 13 at 1.20s (13%)...
Inserting image 14 at 1.30s (14%)...
Inserting image 15 at 1.40s (15%)...
Inserting image 16 at 1.50s (16%)...
Inserting image 17 at 1.60s (17%)...
Inserting image 18 at 1.70s (18%)...
Inserting image 19 at 1.80s (19%)...
Inserting image 20 at 1.90s (20%)...
Inserting image 21 at 2.00s (21%)...
Inserting image 22 at 2.10s (22%)...
Inserting image 23 at 2.20s (23%)...
Inserting image 24 at 2.30s (24%)...
Inserting image 25 at 2.40s (25%)...
Inserting image 26 at 2.50s (26%)...
Inserting image 27 at 2.60s (27%)...
Inserting image 28 at 2.70s (28%)...
Inserting image 29 at 2.80s (29%)...
Inserting image 30 at 2.90s (30%)...
Inserting image 31 at 3.00s (31%)...
Inserting image 32 at 3.10s (32%)...
Inserting image 33 at 3.20s (33%)...
Inserting image 34 at 3.30s (34%)...
Inserting image 35 at 3.40s (35%)...
Inserting image 36 at 3.50s (36%)...
Inserting image 37 at 3.60s (37%)...
Inserting image 38 at 3.70s (38%)...
Inserting image 39 at 3.80s (39%)...
Inserting image 40 at 3.90s (40%)...
Inserting image 41 at 4.00s (41%)...
Inserting image 42 at 4.10s (42%)...
Inserting image 43 at 4.20s (43%)...
LS0tDQp0aXRsZTogIlRIRSBQT1dFUiINCnN1YnRpdGxlOiAiRGF0YSBTY2llbmNlIGFuZCB0ZWNobm9sb2d5IFdvcmtzaG9wIFRpcmFuYSAxNSYxNiBPY3RvYmVyIDIwMjEiDQphdXRob3I6ICJFcmFsZGEgR2ppa2EiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIExpYnJhcmllcw0KYGBge3J9DQojIyBGaXJzdCBzcGVjaWZ5IHRoZSBwYWNrYWdlcyBvZiBpbnRlcmVzdA0KcGFja2FnZXMgPSBjKCJ0aWR5dmVyc2UiLCAic2psYWJlbGxlZCIsImdncGxvdDIiLCJicm9vbSIsIkdHYWxseSIsICJ2aXJpZGlzIiwgImphbml0b3IiLCJsdWJyaWRhdGUiLCJmb3JlY2FzdCIsImZwcDMiLCJxdWFudG1vZCIsImZwcDIiLCJnZ3RoZW1lcyIsImhyYnJ0aGVtZXMiLCJjb3JyZWxhdGlvbiIsInNlZSIsImdncmFwaCIsInBsb3RseSIsImRwbHlyIiwgImdnYW5pbWF0ZSIpDQoNCiMjIE5vdyBsb2FkIG9yIGluc3RhbGwmbG9hZCBhbGwNCnBhY2thZ2UuY2hlY2sgPC0gbGFwcGx5KA0KICBwYWNrYWdlcywNCiAgRlVOID0gZnVuY3Rpb24oeCkgew0KICAgIGlmICghcmVxdWlyZSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7DQogICAgICBpbnN0YWxsLnBhY2thZ2VzKHgsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQogICAgICBsaWJyYXJ5KHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkNCiAgICB9DQogIH0NCikNCmBgYA0KDQojIERhdGEgc291cmNlDQpgYGB7cn0NCk9XRDwtcmVhZC5jc3YoImh0dHBzOi8vY292aWQub3Vyd29ybGRpbmRhdGEub3JnL2RhdGEvb3dpZC1jb3ZpZC1kYXRhLmNzdiIpDQpoZWFkKE9XRCkNCmBgYA0KIyBUaW1lIHZhcmlhYmxlDQpgYGB7cn0NCk9XRCRkYXRlPC0gYXMuUE9TSVhjdChPV0QkZGF0ZSwgZm9ybWF0ID0gIiVZLSVtLSVkIikNCk9XRCRkYXRlPC1hcy5EYXRlKE9XRCRkYXRlLGZvcm1hdD0nJVkvJW0vJWQnKSMgY29udmVydCB0aW1lIGRhdGUgaW50byBhIGRhdGUgdmFyaWFibGUNCk9XRDwtT1dEICU+JQ0KICBkcGx5cjo6bXV0YXRlKHllYXIgPSBsdWJyaWRhdGU6OnllYXIoZGF0ZSksIA0KICAgICAgICAgICAgICAgIG1vbnRoID0gbHVicmlkYXRlOjptb250aChkYXRlKSwgDQogICAgICAgICAgICAgICAgZGF5ID0gbHVicmlkYXRlOjpkYXkoZGF0ZSkpDQojIyAgQ29udmVydCBudW1lcmljIG1vbnRoIG51bWVyaWMgdmFsdWVzIHRvIG5hbWUgYWJicmV2aWF0aW9ucw0KT1dEJG1vbnRoPC0gbW9udGguYWJiW09XRCRtb250aF0gDQojIyByZW1vdmUgYWxsIGVtcHR5IHZhcmlhYmxlcyAoY29sdW1ucykgZnJvbSBkYXRhc2V0IChqYW5pdG9yIHBhY2thZ2UpDQpPV0Q8LU9XRCAlPiUNCiAgcmVtb3ZlX2VtcHR5KCJjb2xzIikgI3NlbGVjdCBlaXRoZXIgcm93IG9yIGNvbHMgb3IgYm90aA0KZGltKE9XRCkjIHRoZXJlIGFyZSBub3QgZW1wdHkgY29sdW1ucw0KIyBzdWJzdGl0dXRlIG5lZ2F0aXZlIHZhbHVlcyBmcm9tIGNvbHVtbnMgd2l0aCBOQS1zDQpPV0Q8LU9XRA0KT1dEW09XRDwwXSA8LSAwIA0KDQpgYGANCiMgUGxvdCB0aW1lIHNlcmllcw0KYGBge3J9DQpPV0QuMTwtT1dEICU+JQ0KICBkcGx5cjo6ZmlsdGVyKGxvY2F0aW9uID09ICJXb3JsZCIpDQpmaWcgPC0gcGxvdF9seShPV0QuMSwgeCA9IH5kYXRlKQ0KZmlnIDwtIGZpZyAlPiUgYWRkX2xpbmVzKHkgPSB+dG90YWxfY2FzZXMsIG5hbWUgPSAiVG90YWwgQ2FzZXMiKQ0KZmlnIDwtIGZpZyAlPiUgYWRkX2xpbmVzKHkgPSB+dG90YWxfZGVhdGhzLCBuYW1lID0gIlRvdGFsIERlYXRocyIpDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoDQogICAgdGl0bGUgPSAiQ292aWQgZGFpbHkgY3VtdWxhdGl2ZSBDYXNlcyBhbmQgRGVhdGhzIiwNCiAgICB4YXhpcyA9IGxpc3QoDQogICAgICByYW5nZXNlbGVjdG9yID0gbGlzdCgNCiAgICAgICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICAgICAgbGlzdCgNCiAgICAgICAgICAgIGNvdW50ID0gMywNCiAgICAgICAgICAgIGxhYmVsID0gIjMgbW8iLA0KICAgICAgICAgICAgc3RlcCA9ICJtb250aCIsDQogICAgICAgICAgICBzdGVwbW9kZSA9ICJiYWNrd2FyZCIpLA0KICAgICAgICAgIGxpc3QoDQogICAgICAgICAgICBjb3VudCA9IDYsDQogICAgICAgICAgICBsYWJlbCA9ICI2IG1vIiwNCiAgICAgICAgICAgIHN0ZXAgPSAibW9udGgiLA0KICAgICAgICAgICAgc3RlcG1vZGUgPSAiYmFja3dhcmQiKSwNCiAgICAgICAgICBsaXN0KA0KICAgICAgICAgICAgY291bnQgPSAxLA0KICAgICAgICAgICAgbGFiZWwgPSAiMSB5ciIsDQogICAgICAgICAgICBzdGVwID0gInllYXIiLA0KICAgICAgICAgICAgc3RlcG1vZGUgPSAiYmFja3dhcmQiKSwNCiAgICAgICAgICBsaXN0KA0KICAgICAgICAgICAgY291bnQgPSAxLA0KICAgICAgICAgICAgbGFiZWwgPSAiWVREIiwNCiAgICAgICAgICAgIHN0ZXAgPSAieWVhciIsDQogICAgICAgICAgICBzdGVwbW9kZSA9ICJ0b2RhdGUiKSwNCiAgICAgICAgICBsaXN0KHN0ZXAgPSAiYWxsIikpKSwNCg0KICAgICAgcmFuZ2VzbGlkZXIgPSBsaXN0KHR5cGUgPSAiZGF0ZSIpKSwNCg0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1iZXIgb2YgQ2FzZXMiKSkNCg0KZmlnDQpgYGANCg0KIyBCb3hQbG90DQpgYGB7cn0NCk9XRC4yPC1PV0QgJT4lDQogZmlsdGVyKGNvbnRpbmVudCAlaW4lIGMoIkV1cm9wZSIsICJOb3J0aCBBbWVyaWNhIiwiQXNpYSIsIkFmcmljYSIsIlNvdXRoIEFtZXJpY2EiLCJPY2VhbmlhIikpDQpmaWcgPC0gcGxvdF9seShPV0QuMiwgeCA9IH50b3RhbF9kZWF0aHMsIGNvbG9yID0gfmNvbnRpbmVudCwgdHlwZSA9ICJib3giKQ0KDQpmaWcNCmBgYA0KDQpgYGB7cn0NCk9XRC5ldTwtT1dEICU+JQ0KIGZpbHRlcihjb250aW5lbnQgJWluJSBjKCJFdXJvcGUiKSkNCg0KZmlnIDwtIHBsb3RfbHkoT1dELmV1LCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ2xpbmVzJyklPiUNCiAgYWRkX3RyYWNlKHggPSB+ZGF0ZSwgeSA9IH5wZW9wbGVfdmFjY2luYXRlZCxjb2xvcj1+bG9jYXRpb24pJT4lDQogIGxheW91dChzaG93bGVnZW5kID0gRiwgdGl0bGU9J1RpbWUgU2VyaWVzIG9mIHBlb3BsZSB2YWNjaW5hdGVkIGZvciBFdXJvcGUnLA0KICAgICAgICAgeGF4aXMgPSBsaXN0KHJhbmdlc2xpZGVyID0gbGlzdCh2aXNpYmxlID0gVCksDQogICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzZWxlY3Rvcj1saXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1saXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KGNvdW50PTEsIGxhYmVsPSIxbSIsIHN0ZXA9Im1vbnRoIiwgc3RlcG1vZGU9ImJhY2t3YXJkIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoY291bnQ9NiwgbGFiZWw9IjZtIiwgc3RlcD0ibW9udGgiLCBzdGVwbW9kZT0iYmFja3dhcmQiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChjb3VudD0xLCBsYWJlbD0iWVREIiwgc3RlcD0ieWVhciIsIHN0ZXBtb2RlPSJ0b2RhdGUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChjb3VudD0xLCBsYWJlbD0iMXkiLCBzdGVwPSJ5ZWFyIiwgc3RlcG1vZGU9ImJhY2t3YXJkIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qoc3RlcD0iYWxsIikNCiAgICAgICAgICAgICAgICAgICAgICAgICkpKSkNCmZpZyA8LSBmaWcgJT4lDQogIGxheW91dCgNCiAgICAgICAgIHhheGlzID0gbGlzdCh6ZXJvbGluZWNvbG9yID0gJyNmZmZmJywNCiAgICAgICAgICAgICAgICAgICAgICB6ZXJvbGluZXdpZHRoID0gMiwNCiAgICAgICAgICAgICAgICAgICAgICBncmlkY29sb3IgPSAnZmZmZicpLA0KICAgICAgICAgeWF4aXMgPSBsaXN0KHplcm9saW5lY29sb3IgPSAnI2ZmZmYnLA0KICAgICAgICAgICAgICAgICAgICAgIHplcm9saW5ld2lkdGggPSAyLA0KICAgICAgICAgICAgICAgICAgICAgIGdyaWRjb2xvciA9ICdmZmZmJyksDQogICAgICAgICBwbG90X2JnY29sb3I9JyNlNWVjZjYnLCBtYXJnaW4gPSAwLjEsIHdpZHRoID0gOTAwKQ0KZmlnDQpgYGANCiMgTmV3IGNhc2VzIGR5bmFtaWMgZXZvbHV0aW9uIG9mIENvdmlkLTE5DQpgYGB7cn0NCmxpYnJhcnkoZ2dhbmltYXRlKQ0KT1dEXzE8LXN1YnNldChPV0QsIGxvY2F0aW9uICE9ICJBc2lhIikNCk9XRF8xPC1zdWJzZXQoT1dEXzEsIGxvY2F0aW9uIT0iRXVyb3BlIikNCk9XRF8xPC1zdWJzZXQoT1dEXzEsIGxvY2F0aW9uIT0iTm9ydGggQW1lcmljYSIpDQpPV0RfMTwtc3Vic2V0KE9XRF8xLCBsb2NhdGlvbiE9IlNvdXRoIEFtZXJpY2EiKQ0KT1dEXzE8LXN1YnNldChPV0RfMSwgbG9jYXRpb24hPSJXb3JsZCIpDQpPV0RfMTwtc3Vic2V0KE9XRF8xLCBsb2NhdGlvbiE9IkV1cm9wZWFuIFVuaW9uIikNCk9XRF8xPC1zdWJzZXQoT1dEXzEsIGxvY2F0aW9uIT0iSW50ZXJuYXRpb25hbCIpDQpPV0RfMTwtc3Vic2V0KE9XRF8xLCBsb2NhdGlvbiE9Ik9jZWFuaWEiKQ0KT1dEXzE8LXN1YnNldChPV0RfMSwgbG9jYXRpb24hPSJBZnJpY2EiKQ0KDQojIE9XRF8xIGhhcyBXb3JsZCBhbmQgb3RoZXIgbG9jYXRpb24gcmVtb3ZlZA0KT1dEXzQ8LU9XRF8xICU+JQ0KIGZpbHRlcihkYXRlID49IGFzLkRhdGUoIjIwMjEtMDktMDEiKSkNCg0KcCA8LSBPV0RfNCAlPiUNCiAgZmlsdGVyKG5ld19jYXNlcyA+IDAgJiBuZXdfY2FzZXMgPCA0MDAwMDAwMCkgJT4lDQogIGFycmFuZ2UobG9jYXRpb24sIGRhdGUpICU+JQ0KICBncm91cF9ieShsb2NhdGlvbikgJT4lDQogIG11dGF0ZShuZXdfY2FzZXNfY3VtID0gY3Vtc3VtKG5ld19jYXNlcykpICU+JQ0KICBncm91cF9ieShkYXRlKSAlPiUNCiAgdG9wX24oMTAsIG5ld19jYXNlc19jdW0pICU+JQ0KICBtdXRhdGUobG9jYXRpb24gPSBmYWN0b3IobG9jYXRpb24pKSAlPiUNCiAgbXV0YXRlKHJhbmsgPSBkZW5zZV9yYW5rKC1uZXdfY2FzZXNfY3VtKSkgJT4lDQogIHVuZ3JvdXAgJT4lDQogIGdncGxvdCgpICsgDQogIGFlcyhyYW5rLCBncm91cCA9IGxvY2F0aW9uLCBmaWxsID0gbG9jYXRpb24sIGNvbG9yID0gbG9jYXRpb24pICsNCiAgZ2VvbV90aWxlKGFlcyh5ID0gbmV3X2Nhc2VzX2N1bS8yLGhlaWdodCA9IG5ld19jYXNlc19jdW0sIHdpZHRoID0gMC45KSwgYWxwaGEgPSAwLjgsIGNvbG9yID0gTkEpICsgDQogIGdlb21fdGV4dChhZXMoeSA9IDAsIGxhYmVsID0gcGFzdGUobG9jYXRpb24sICIgIikpLCB2anVzdCA9IDAuMiwgaGp1c3QgPSAxKSArDQogIGNvb3JkX2ZsaXAoY2xpcCA9ICJvZmYiLCBleHBhbmQgPSBGQUxTRSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSkgKw0KICBzY2FsZV94X3JldmVyc2UoKSArDQogIGd1aWRlcyhjb2xvciA9IEZBTFNFLCBmaWxsID0gRkFMU0UpICsNCiAgbGFicyh0aXRsZT0ne2Nsb3Nlc3Rfc3RhdGV9JywgeCA9ICIiLCB5ID0gIlRvdGFsIGNhc2VzIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDIyKSxheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCksYXhpcy50ZXh0LnkgID0gZWxlbWVudF9ibGFuaygpLHBsb3QubWFyZ2luID0gbWFyZ2luKDEsMSwxLDQsICJjbSIpKQ0KDQpwK3RyYW5zaXRpb25fc3RhdGVzKGRhdGUsIHRyYW5zaXRpb25fbGVuZ3RoID0gMjApDQpgYGANCiMgVG90YWwgVmFjY2luYXRpb25zIGR5bmFtaWMgZXZvbHV0aW9uIG9mIENvdmlkLTE5DQpgYGB7cn0NCnAgPC0gT1dEXzQgJT4lDQogIGZpbHRlcih0b3RhbF92YWNjaW5hdGlvbnMgPiAwICYgdG90YWxfdmFjY2luYXRpb25zIDwgMzQwMDAwMDAwMCkgJT4lDQogIGFycmFuZ2UobG9jYXRpb24sIGRhdGUpICU+JQ0KICBncm91cF9ieShsb2NhdGlvbikgJT4lDQogIG11dGF0ZSh0b3RhbF92YWNjaW5hdGlvbnNfY3VtID0gY3Vtc3VtKHRvdGFsX3ZhY2NpbmF0aW9ucykpICU+JQ0KICBncm91cF9ieShkYXRlKSAlPiUNCiAgdG9wX24oMTAsIHRvdGFsX3ZhY2NpbmF0aW9uc19jdW0pICU+JQ0KICBtdXRhdGUobG9jYXRpb24gPSBmYWN0b3IobG9jYXRpb24pKSAlPiUNCiAgbXV0YXRlKHJhbmsgPSBkZW5zZV9yYW5rKC10b3RhbF92YWNjaW5hdGlvbnNfY3VtKSkgJT4lDQogIHVuZ3JvdXAgJT4lDQogIGdncGxvdCgpICsgDQogIGFlcyhyYW5rLCBncm91cCA9IGxvY2F0aW9uLCBmaWxsID0gbG9jYXRpb24sIGNvbG9yID0gbG9jYXRpb24pICsNCiAgZ2VvbV90aWxlKGFlcyh5ID0gdG90YWxfdmFjY2luYXRpb25zX2N1bS8yLGhlaWdodCA9IHRvdGFsX3ZhY2NpbmF0aW9uc19jdW0sIHdpZHRoID0gMC45KSwgYWxwaGEgPSAwLjgsIGNvbG9yID0gTkEpICsgDQogIGdlb21fdGV4dChhZXMoeSA9IDAsIGxhYmVsID0gcGFzdGUobG9jYXRpb24sICIgIikpLCB2anVzdCA9IDAuMiwgaGp1c3QgPSAxKSArDQogIGNvb3JkX2ZsaXAoY2xpcCA9ICJvZmYiLCBleHBhbmQgPSBGQUxTRSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSkgKw0KICBzY2FsZV94X3JldmVyc2UoKSArDQogIGd1aWRlcyhjb2xvciA9IEZBTFNFLCBmaWxsID0gRkFMU0UpICsNCiAgbGFicyh0aXRsZT0ne2Nsb3Nlc3Rfc3RhdGV9JywgeCA9ICIiLCB5ID0gIlRvdGFsIFZhY2NpbmF0aW9ucyIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAyMiksYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpLGF4aXMudGV4dC55ICA9IGVsZW1lbnRfYmxhbmsoKSxwbG90Lm1hcmdpbiA9IG1hcmdpbigxLDEsMSw0LCAiY20iKSkNCg0KcCt0cmFuc2l0aW9uX3N0YXRlcyhkYXRlLCB0cmFuc2l0aW9uX2xlbmd0aCA9IDIwKQ0KYGBgDQoNCg==