This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
library(ggplot2)
library(plotly)
library(dplyr)
library(readr)
library(lubridate)
library(stringr)
library(ggthemes)
library(extrafont)
library(gapminder)
official_table <- read.csv(file='AAPL_Pre_Official_DB_7_31.csv',check.names=F,stringsAsFactors = F)#Reading the official file
month_summary<- subset(official_table) %>% group_by(Month) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for months by volume
month_plt <- ggplot(month_summary,aes(x=Month,y=Mean_volume)) #import dataset into ggplot2
month_plt + geom_line() +
theme_minimal() +
scale_fill_gradient(low = "black", high = "#8de1f0") +
labs(title = "Total Volume By months") +
theme(panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
text = element_text(family="DM Sans"),
plot.title = element_text(hjust = 0.5),
legend.position = "none")

NA
year_summary_season <- subset(official_table) %>% group_by(Year, Season) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_summary_season <- ggplot(year_summary_season,aes(x=Year,y=Mean_volume,color=Season)) #import dataset into ggplot2
plt_year_summary_season + geom_point() + labs(x="Year", y="Mean_volume", color="Season", title ="Summary of Volume per Season & Year" )#add scatter plot with labels

year_lastTenSeason <- subset(official_table, Year > 2015 & Year <= 2020) %>% group_by(Year, Season) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_lastTenSeason <- ggplot(year_lastTenSeason,aes(x=Year,y=Mean_volume,color=Season)) #import dataset into ggplot2
plt_year_lastTenSeason + geom_point() + labs(x="Year", y="Mean_volume", color="Season", title="Summary of Volume in Last 5 Years for Seasons")#add scatter plot with labels

year_summary_quarter <- subset(official_table) %>% group_by(Year, Quarter) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_summary_quarter <- ggplot(year_summary_quarter,aes(x=Year,y=Mean_volume,color=Quarter)) #import dataset into ggplot2
plt_year_summary_quarter + geom_point() + labs(x="Year", y="Mean_volume", color="Quarter", title ="Summary of Volume per Quarters & Year")#add scatter plot with labels

NA
NA
year_lastTenQuarter <- subset(official_table, Year > 2015 & Year <= 2020) %>% group_by(Year, Quarter) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_lastTenQuarter <- ggplot(year_lastTenQuarter,aes(x=Year,y=Mean_volume,color=Quarter)) #import dataset into ggplot2
plt_year_lastTenQuarter + geom_point() + labs(x="Year", y="Mean_volume", color="Quarters", title="Summary of Volume in Last 5 Years for Quarters")#add scatter plot with labels

month_summary_Gain_Loss_Open_season <- subset(official_table) %>% group_by(Gain_Loss_Open, Month , Season) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for Gain_Loss_Open in each seasons for the months
plt_month_summary_Gain_Loss_Open_season <- ggplot(month_summary_Gain_Loss_Open_season,aes(x=Month,y=Mean_volume,color=Season,shape = Gain_Loss_Open)) #import dataset into ggplot2
plt_month_summary_Gain_Loss_Open_season + geom_point() + labs(x="Month", y="Mean_volume", color="Season", shape ="Gain_Loss_Open")#add scatter plot with labels

month_summary_Gain_Loss_Open_quarter <- subset(official_table) %>% group_by(Gain_Loss_Open, Month , Quarter) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for Gain_Loss_Open in each quarters for the months
plt_month_summary_Gain_Loss_Open <- ggplot(month_summary_Gain_Loss_Open_quarter,aes(x=Month,y=Mean_volume,color=Quarter,shape = Gain_Loss_Open)) #import dataset into ggplot2
plt_month_summary_Gain_Loss_Open + geom_point() + labs(x="Month", y="Mean_volume", color="Quarter", shape ="Gain_Loss_Open")#add scatter plot with labels

#create summary table for quarter by volume
quarter_summary_<- subset(official_table) %>% group_by(Quarter) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep')
##create summary table for Gain_Loss_Open in each quarter
quarter_summary_Gain_Loss_Open <- subset(official_table) %>%
group_by(Gain_Loss_Open, Quarter) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Open <-
ggplot(quarter_summary_Gain_Loss_Open,
aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Open))
#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Open + geom_point() +
labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Open",
color="Quarter", shape ="Gain_Loss_Open")

##create summary table for Gain_Loss_Closein each quarter
quarter_summary_Gain_Loss_Close <- subset(official_table) %>%
group_by(Gain_Loss_Close, Quarter) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Close <-
ggplot(quarter_summary_Gain_Loss_Close,
aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Close))
#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Close + geom_point() +
labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Close",
color="Quarter", shape ="Gain_Loss_Close")

##create summary table for Gain_Loss_High in each quarter
quarter_summary_Gain_Loss_High <- subset(official_table) %>%
group_by(Gain_Loss_High, Quarter) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_High <-
ggplot(quarter_summary_Gain_Loss_High,
aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_High))
#add scatter plot with labels
plt_quarter_summary_Gain_Loss_High + geom_point() +
labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_High",
color="Quarter", shape ="Gain_Loss_High")

##create summary table for Gain_Loss_Low in each quarter
quarter_summary_Gain_Loss_Low <- subset(official_table) %>%
group_by(Gain_Loss_Low, Quarter) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Low <-
ggplot(quarter_summary_Gain_Loss_Low,
aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Low))
#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Low + geom_point() +
labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Low",
color="Quarter", shape ="Gain_Loss_Low")

#create summary table for season by volume
season_summary_<- subset(official_table) %>% group_by(Season) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep')
##create summary table for Gain_Loss_Open in each season
season_summary_Gain_Loss_Open <- subset(official_table) %>%
group_by(Gain_Loss_Open, Season) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_season_summary_Gain_Loss_Open <-
ggplot(season_summary_Gain_Loss_Open,
aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Open))
#add scatter plot with labels
plt_season_summary_Gain_Loss_Open + geom_point() +
labs(x="Season", y="Mean_volume", title ="Season_G/L_Open",
color="Season", shape ="Gain_Loss_Open")

##create summary table for Gain_Loss_Close in each season
season_summary_Gain_Loss_Close <- subset(official_table) %>%
group_by(Gain_Loss_Close, Season) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_season_summary_Gain_Loss_Close <-
ggplot(season_summary_Gain_Loss_Close,
aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Close))
#add scatter plot with labels
plt_season_summary_Gain_Loss_Close + geom_point() +
labs(x="Season", y="Mean_volume", title ="Season_G/L_Close",
color="Season", shape ="Gain_Loss_Close")

##create summary table for Gain_Loss_High in each season
season_summary_Gain_Loss_High <- subset(official_table) %>%
group_by(Gain_Loss_High, Season) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_season_summary_Gain_Loss_High <-
ggplot(season_summary_Gain_Loss_High,
aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_High))
#add scatter plot with labels
plt_season_summary_Gain_Loss_High + geom_point() +
labs(x="Season", y="Mean_volume", title ="Season_G/L_High",
color="Season", shape ="Gain_Loss_High")

##create summary table for Gain_Loss_Low in each season
season_summary_Gain_Loss_Low <- subset(official_table) %>%
group_by(Gain_Loss_Low, Season) %>%
summarize(Mean_volume=mean(Volume), .groups = 'keep') #
#import dataset into ggplot2
plt_season_summary_Gain_Loss_Low <-
ggplot(season_summary_Gain_Loss_Low,
aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Low))
#add scatter plot with labels
plt_season_summary_Gain_Loss_Low + geom_point() +
labs(x="Season", y="Mean_volume", title ="Season_G/L_Low",
color="Season", shape ="Gain_Loss_Low")

NA
NA
NA
NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIApgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkcikKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShnZ3RoZW1lcykKbGlicmFyeShleHRyYWZvbnQpCmxpYnJhcnkoZ2FwbWluZGVyKQoKYGBgCgoKYGBge3J9Cm9mZmljaWFsX3RhYmxlIDwtIHJlYWQuY3N2KGZpbGU9J0FBUExfUHJlX09mZmljaWFsX0RCXzdfMzEuY3N2JyxjaGVjay5uYW1lcz1GLHN0cmluZ3NBc0ZhY3RvcnMgPSBGKSNSZWFkaW5nIHRoZSBvZmZpY2lhbCBmaWxlCm1vbnRoX3N1bW1hcnk8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSBncm91cF9ieShNb250aCkgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgbW9udGhzIGJ5IHZvbHVtZSAKbW9udGhfcGx0IDwtIGdncGxvdChtb250aF9zdW1tYXJ5LGFlcyh4PU1vbnRoLHk9TWVhbl92b2x1bWUpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCm1vbnRoX3BsdCArIGdlb21fbGluZSgpICsgCiAgCiAgdGhlbWVfbWluaW1hbCgpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAiIzhkZTFmMCIpICsKICBsYWJzKHRpdGxlID0gIlRvdGFsIFZvbHVtZSBCeSBtb250aHMiKSArCgogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5PSJETSBTYW5zIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQogIApgYGAKCgpgYGB7cn0KCnllYXJfc3VtbWFyeV9zZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoWWVhciwgU2Vhc29uKSAgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZQoKCnBsdF95ZWFyX3N1bW1hcnlfc2Vhc29uIDwtIGdncGxvdCh5ZWFyX3N1bW1hcnlfc2Vhc29uLGFlcyh4PVllYXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9zdW1tYXJ5X3NlYXNvbiArIGdlb21fcG9pbnQoKSArIGxhYnMoeD0iWWVhciIsIHk9Ik1lYW5fdm9sdW1lIiwgY29sb3I9IlNlYXNvbiIsIHRpdGxlID0iU3VtbWFyeSBvZiBWb2x1bWUgcGVyIFNlYXNvbiAmIFllYXIiICkjYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwoKYGBgCmBgYHtyfQp5ZWFyX2xhc3RUZW5TZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlLCBZZWFyID4gMjAxNSAmIFllYXIgPD0gMjAyMCkgJT4lIGdyb3VwX2J5KFllYXIsIFNlYXNvbikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKcGx0X3llYXJfbGFzdFRlblNlYXNvbiA8LSBnZ3Bsb3QoeWVhcl9sYXN0VGVuU2Vhc29uLGFlcyh4PVllYXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9sYXN0VGVuU2Vhc29uICsgZ2VvbV9wb2ludCgpICsgbGFicyh4PSJZZWFyIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iU2Vhc29uIiwgdGl0bGU9IlN1bW1hcnkgb2YgVm9sdW1lIGluIExhc3QgNSBZZWFycyBmb3IgU2Vhc29ucyIpI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKYGBgCgpgYGB7cn0KeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIgPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoWWVhciwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKCnBsdF95ZWFyX3N1bW1hcnlfcXVhcnRlciA8LSBnZ3Bsb3QoeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIsYWVzKHg9WWVhcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIgKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9IlllYXIiLCB5PSJNZWFuX3ZvbHVtZSIsIGNvbG9yPSJRdWFydGVyIiwgdGl0bGUgPSJTdW1tYXJ5IG9mIFZvbHVtZSBwZXIgUXVhcnRlcnMgJiBZZWFyIikjYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwoKCmBgYApgYGB7cn0KeWVhcl9sYXN0VGVuUXVhcnRlciA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUsIFllYXIgPiAyMDE1ICYgWWVhciA8PSAyMDIwKSAlPiUgZ3JvdXBfYnkoWWVhciwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKcGx0X3llYXJfbGFzdFRlblF1YXJ0ZXIgPC0gZ2dwbG90KHllYXJfbGFzdFRlblF1YXJ0ZXIsYWVzKHg9WWVhcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9sYXN0VGVuUXVhcnRlciArIGdlb21fcG9pbnQoKSArIGxhYnMoeD0iWWVhciIsIHk9Ik1lYW5fdm9sdW1lIiwgY29sb3I9IlF1YXJ0ZXJzIiwgdGl0bGU9IlN1bW1hcnkgb2YgVm9sdW1lIGluIExhc3QgNSBZZWFycyBmb3IgUXVhcnRlcnMiKSNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCmBgYAoKCgpgYGB7cn0KbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIE1vbnRoICwgU2Vhc29uKSAgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX09wZW4gaW4gZWFjaCBzZWFzb25zIGZvciB0aGUgbW9udGhzCgpwbHRfbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gPC0gZ2dwbG90KG1vbnRoX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW5fc2Vhc29uLGFlcyh4PU1vbnRoLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX09wZW4pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9Ik1vbnRoIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfT3BlbiIpI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKCgptb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuX3F1YXJ0ZXIgPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIE1vbnRoICwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19PcGVuIGluIGVhY2ggcXVhcnRlcnMgZm9yIHRoZSBtb250aHMKCnBsdF9tb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuIDwtIGdncGxvdChtb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuX3F1YXJ0ZXIsYWVzKHg9TW9udGgseT1NZWFuX3ZvbHVtZSxjb2xvcj1RdWFydGVyLHNoYXBlID0gR2Fpbl9Mb3NzX09wZW4pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgoKcGx0X21vbnRoX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9Ik1vbnRoIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iUXVhcnRlciIsIHNoYXBlID0iR2Fpbl9Mb3NzX09wZW4iKSNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCgojY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIHF1YXJ0ZXIgYnkgdm9sdW1lIApxdWFydGVyX3N1bW1hcnlfPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoUXVhcnRlcikgJT4lIAogIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpIAoKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19PcGVuIGluIGVhY2ggcXVhcnRlciAKcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuIDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19PcGVuLCBRdWFydGVyKSAgJT4lIAogIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICMKCiNpbXBvcnQgZGF0YXNldCBpbnRvIGdncGxvdDIKcGx0X3F1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfT3BlbiA8LSAKICBnZ3Bsb3QocXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuLAogICAgICAgICBhZXMoeD1RdWFydGVyLHk9TWVhbl92b2x1bWUsY29sb3I9UXVhcnRlcixzaGFwZSA9IEdhaW5fTG9zc19PcGVuKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJRdWFydGVyIiwgeT0iTWVhbl92b2x1bWUiLCB0aXRsZSA9IlF1YXJ0ZXJfRy9MX09wZW4iLAogICAgICAgY29sb3I9IlF1YXJ0ZXIiLCBzaGFwZSA9IkdhaW5fTG9zc19PcGVuIikKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19DbG9zZWluIGVhY2ggcXVhcnRlciAKcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfQ2xvc2UsIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSAKICBnZ3Bsb3QocXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSwKICAgICAgICAgYWVzKHg9UXVhcnRlcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIsc2hhcGUgPSBHYWluX0xvc3NfQ2xvc2UpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0Nsb3NlICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJRdWFydGVyIiwgeT0iTWVhbl92b2x1bWUiLCB0aXRsZSA9IlF1YXJ0ZXJfRy9MX0Nsb3NlIiwKICAgICAgIGNvbG9yPSJRdWFydGVyIiwgc2hhcGUgPSJHYWluX0xvc3NfQ2xvc2UiKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0hpZ2ggaW4gZWFjaCBxdWFydGVyIApxdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgCiAgZ3JvdXBfYnkoR2Fpbl9Mb3NzX0hpZ2gsIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoIDwtIAogIGdncGxvdChxdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2gsCiAgICAgICAgIGFlcyh4PVF1YXJ0ZXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1RdWFydGVyLHNoYXBlID0gR2Fpbl9Mb3NzX0hpZ2gpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlF1YXJ0ZXIiLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iUXVhcnRlcl9HL0xfSGlnaCIsCiAgICAgICBjb2xvcj0iUXVhcnRlciIsIHNoYXBlID0iR2Fpbl9Mb3NzX0hpZ2giKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0xvdyBpbiBlYWNoIHF1YXJ0ZXIgCnF1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfTG93IDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19Mb3csIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19Mb3cgPC0gCiAgZ2dwbG90KHF1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfTG93LAogICAgICAgICBhZXMoeD1RdWFydGVyLHk9TWVhbl92b2x1bWUsY29sb3I9UXVhcnRlcixzaGFwZSA9IEdhaW5fTG9zc19Mb3cpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyArIGdlb21fcG9pbnQoKSArIAogIGxhYnMoeD0iUXVhcnRlciIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJRdWFydGVyX0cvTF9Mb3ciLAogICAgICAgY29sb3I9IlF1YXJ0ZXIiLCBzaGFwZSA9IkdhaW5fTG9zc19Mb3ciKQoKI2NyZWF0ZSBzdW1tYXJ5IHRhYmxlIGZvciBzZWFzb24gYnkgdm9sdW1lIApzZWFzb25fc3VtbWFyeV88LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSBncm91cF9ieShTZWFzb24pICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX09wZW4gaW4gZWFjaCBzZWFzb24Kc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgCiAgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIFNlYXNvbikgICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjCgojaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCnBsdF9zZWFzb25fc3VtbWFyeV9HYWluX0xvc3NfT3BlbiA8LSAKICBnZ3Bsb3Qoc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4sCiAgICAgICAgIGFlcyh4PVNlYXNvbix5PU1lYW5fdm9sdW1lLGNvbG9yPVNlYXNvbixzaGFwZSA9IEdhaW5fTG9zc19PcGVuKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlNlYXNvbiIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJTZWFzb25fRy9MX09wZW4iLAogICAgICAgY29sb3I9IlNlYXNvbiIsIHNoYXBlID0iR2Fpbl9Mb3NzX09wZW4iKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0Nsb3NlIGluIGVhY2ggc2Vhc29uCnNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfQ2xvc2UsIFNlYXNvbikgICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjCgojaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCnBsdF9zZWFzb25fc3VtbWFyeV9HYWluX0xvc3NfQ2xvc2UgPC0gCiAgZ2dwbG90KHNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSwKICAgICAgICAgYWVzKHg9U2Vhc29uLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX0Nsb3NlKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0Nsb3NlICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJTZWFzb24iLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iU2Vhc29uX0cvTF9DbG9zZSIsCiAgICAgICBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfQ2xvc2UiKQoKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19IaWdoIGluIGVhY2ggc2Vhc29uCnNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoIDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19IaWdoLCBTZWFzb24pICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggPC0gCiAgZ2dwbG90KHNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoLAogICAgICAgICBhZXMoeD1TZWFzb24seT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24sc2hhcGUgPSBHYWluX0xvc3NfSGlnaCkpIAoKI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKcGx0X3NlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJTZWFzb24iLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iU2Vhc29uX0cvTF9IaWdoIiwKICAgICAgIGNvbG9yPSJTZWFzb24iLCBzaGFwZSA9IkdhaW5fTG9zc19IaWdoIikKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19Mb3cgaW4gZWFjaCBzZWFzb24Kc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfTG93LCBTZWFzb24pICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyA8LSAKICBnZ3Bsb3Qoc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdywKICAgICAgICAgYWVzKHg9U2Vhc29uLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX0xvdykpIAoKI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKcGx0X3NlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19Mb3cgKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlNlYXNvbiIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJTZWFzb25fRy9MX0xvdyIsCiAgICAgICBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfTG93IikKCgoKCmBgYAo=