Reinaldo Zezela University of Derby, UK r.zezela1@unimail.derby.ac.uk May 2018
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
- Looding the flights On-time Performance dataset.
- Create Data Frame: CARRIER
CODE = c( "AA", "AS", "B6", "DL", "EV", "F9", "HA", "NK", "OO", "UA", "VX", "WN" )
DESCRIPTION <- c("American Airlines Inc.", "Alaska Airlines Inc.", "JetBlue Airways", "Delta Air Lines Inc.", "ExpressJet Airlines Inc.", "Frontier Airlines Inc.", "Hawaiian Airlines Inc.", "Spirit Air Lines", "SkyWest Airlines Inc.", "United Air Lines Inc.", "Virgin America", "Southwest Airlines Co.")
CARRIER <- data.frame(CODE, DESCRIPTION)
CARRIER
2.0 Exploratory Data Analysis ———————————————–
- The Average Arrival Delays (Minutes) by Airline in 2017
# Prepare data: group mean Arrival delay by Airline in 2017
tbl_avg <- FLIGHTS %>%
group_by(CARRIER) %>%
summarise(avg_Arr_delay = round(mean(ARR_DELAY_NEW, na.rm = TRUE), digits=2)) %>%
arrange(.$avg_Arr_delay)
head(tbl_avg)
** Merge the subset(tbl_avg) with CARRIER table (data frame) in order to get the Airline name
#CARRIER
head(m1)
*Plotting average arrival delay by Airline
ggplot(m1, aes(x=reorder(DESCRIPTION,avg_Arr_delay), y=avg_Arr_delay)) +
geom_bar(stat="identity", fill="tomato") +
xlab("Airline") +
ylab("Average Arrival Delay") +
theme(axis.text.x = element_text(angle=90))

3.0 Cause of Delay
*3.1 Cumulative minutes delayed by cause of delay
*Plotting Causes of delay
ggplot(tbl_delay_type, aes(x=MONTH)) +
geom_line(aes(y=CARRIER_DELAY, color = "darkred")) +
geom_line(aes(y=WEATHER_DELAY, color="steelblue"), linetype="twodash") +
geom_line(aes(y=NAS_DELAY, color = "#999999")) +
geom_line(aes(y=SECURITY_DELAY, color = "#E69F00")) +
geom_line(aes(y=LATE_AIRCRAFT_DELAY, color = "black")) +
#scale_fill_discrete(name="Cause of Delay", labels=c("CARRIER_DELAY", "WEATHER_DELAY", "NAS_DELAY", "SECURITY_DELAY", "LATE_AIRCRAFT_DELAY" )) +
scale_y_continuous(name ="Cumulative minutes delayed by cause of delay", labels = scales::comma ) +
scale_color_discrete(name = "Cause of Delay", labels=c("CARRIER_DELAY", "WEATHER_DELAY", "NAS_DELAY", "SECURITY_DELAY", "LATE_AIRCRAFT_DELAY" )) +
theme_minimal()

5.General Delay Trends

5.1. Plotting facet_wrap - General Delay Trends

6.Heatmap

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
LS0tDQp0aXRsZTogJ0RhdGEgQW5hbHlzaXMgQWlybGluZSBPbi10aW1lIFBlcmZvcm1hbmNlICcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0DQotLS0NClJlaW5hbGRvIFplemVsYSANClVuaXZlcnNpdHkgb2YgRGVyYnksIFVLDQpyLnplemVsYTFAdW5pbWFpbC5kZXJieS5hYy51ayANCk1heSAyMDE4DQoNCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNCg0KKiBMb29kaW5nIHRoZSBmbGlnaHRzIE9uLXRpbWUgUGVyZm9ybWFuY2UgZGF0YXNldC4NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQpGTElHSFRTIDwtIHJlYWQuY3N2KCJGTElHSFRTLmNzdiIpDQoNCmhlYWQoRkxJR0hUUykNCg0KYGBgDQoNCiogQ3JlYXRlIERhdGEgRnJhbWU6IENBUlJJRVINCg0KYGBge3J9DQpDT0RFID0gYyggIkFBIiwgIkFTIiwgIkI2IiwgIkRMIiwgIkVWIiwgIkY5IiwgIkhBIiwgIk5LIiwgIk9PIiwgIlVBIiwgIlZYIiwgIldOIiApDQogIERFU0NSSVBUSU9OIDwtIGMoIkFtZXJpY2FuIEFpcmxpbmVzIEluYy4iLCAiQWxhc2thIEFpcmxpbmVzIEluYy4iLCAiSmV0Qmx1ZSBBaXJ3YXlzIiwgIkRlbHRhIEFpciBMaW5lcyBJbmMuIiwgIkV4cHJlc3NKZXQgQWlybGluZXMgSW5jLiIsICJGcm9udGllciBBaXJsaW5lcyBJbmMuIiwgIkhhd2FpaWFuIEFpcmxpbmVzIEluYy4iLCAiU3Bpcml0IEFpciBMaW5lcyIsICJTa3lXZXN0IEFpcmxpbmVzIEluYy4iLCAiVW5pdGVkIEFpciBMaW5lcyBJbmMuIiwgIlZpcmdpbiBBbWVyaWNhIiwgIlNvdXRod2VzdCBBaXJsaW5lcyBDby4iKQ0KICBDQVJSSUVSIDwtIGRhdGEuZnJhbWUoQ09ERSwgREVTQ1JJUFRJT04pDQoNCiAgQ0FSUklFUg0KDQpgYGANCg0KICANCiMyLjAgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqIFRoZSBBdmVyYWdlIEFycml2YWwgRGVsYXlzIChNaW51dGVzKSBieSBBaXJsaW5lIGluIDIwMTcNCg0KYGBge3J9DQojIFByZXBhcmUgZGF0YTogZ3JvdXAgbWVhbiBBcnJpdmFsIGRlbGF5IGJ5IEFpcmxpbmUgaW4gMjAxNw0KdGJsX2F2ZyA8LSBGTElHSFRTICU+JQ0KICBncm91cF9ieShDQVJSSUVSKSAlPiUNCnN1bW1hcmlzZShhdmdfQXJyX2RlbGF5ID0gcm91bmQobWVhbihBUlJfREVMQVlfTkVXLCBuYS5ybSA9IFRSVUUpLCBkaWdpdHM9MikpICU+JQ0KICBhcnJhbmdlKC4kYXZnX0Fycl9kZWxheSkNCg0KaGVhZCh0YmxfYXZnKQ0KYGBgDQoNCg0KKiogTWVyZ2UgdGhlIHN1YnNldCh0YmxfYXZnKSB3aXRoIENBUlJJRVIgdGFibGUgKGRhdGEgZnJhbWUpIGluIG9yZGVyIHRvIGdldCB0aGUgQWlybGluZSBuYW1lDQpgYGB7cn0NCiNDQVJSSUVSDQoNCm0xIDwtIG1lcmdlKHRibF9hdmcsIENBUlJJRVIsIGJ5LnggPSJDQVJSSUVSIiwgYnkueSA9ICJDT0RFIiApDQoNCmhlYWQobTEpDQpgYGANCg0KKlBsb3R0aW5nIGF2ZXJhZ2UgYXJyaXZhbCBkZWxheSBieSBBaXJsaW5lDQoNCmBgYHtyfQ0KIyBwbG90IGF2ZXJhZ2UgYXJyaXZhbCBkZWxheSBieSBBaXJsaW5lIC0gU29sdXRpb24yDQpnZ3Bsb3QobTEsIGFlcyh4PXJlb3JkZXIoREVTQ1JJUFRJT04sYXZnX0Fycl9kZWxheSksIHk9YXZnX0Fycl9kZWxheSkpICsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBmaWxsPSJ0b21hdG8iKSArDQogIGdlb21fdGV4dChhZXMobGFiZWw9YXZnX0Fycl9kZWxheSksdmp1c3Q9MS42LCBjb2xvcj0id2hpdGUiLCBzaXplPTMuNSkgKw0KICB4bGFiKCJBaXJsaW5lIikgKw0KICB5bGFiKCJBdmVyYWdlIEFycml2YWwgRGVsYXkiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkNCmBgYA0KDQoNCg0KIyAzLjAJQ2F1c2Ugb2YgRGVsYXkNCg0KKjMuMSBDdW11bGF0aXZlIG1pbnV0ZXMgZGVsYXllZCBieSBjYXVzZSBvZiBkZWxheQ0KDQpgYGB7cn0NCkZMSUdIVFMkRkxfREFURSA8LSBhcy5EYXRlKEZMSUdIVFMkRkxfREFURSwiJWQvJW0vJVkiKSANCg0KaGVhZChGTElHSFRTKQ0KDQp0YmxfZGVsYXlfdHlwZSA8LSBGTElHSFRTICU+JQ0KICBtdXRhdGUoTU9OVEggPSBmbG9vcl9kYXRlKEZMX0RBVEUsIm1vbnRoIikpICU+JQ0KICBncm91cF9ieShNT05USCkgJT4lDQogIHN1bW1hcmlzZShDQVJSSUVSX0RFTEFZPXN1bShDQVJSSUVSX0RFTEFZLG5hLnJtID0gVFJVRSksIFdFQVRIRVJfREVMQVk9c3VtKFdFQVRIRVJfREVMQVksbmEucm0gPSBUUlVFKSwgTkFTX0RFTEFZPXN1bShOQVNfREVMQVksbmEucm0gPSBUUlVFKSwgU0VDVVJJVFlfREVMQVk9c3VtKFNFQ1VSSVRZX0RFTEFZLG5hLnJtID0gVFJVRSksIExBVEVfQUlSQ1JBRlRfREVMQVk9c3VtKExBVEVfQUlSQ1JBRlRfREVMQVksbmEucm0gPSBUUlVFKSkgDQoNCg0KI2NvbG5hbWVzKHRibF9kZWxheV90eXBlKSA8LSBjKCJNT05USCIsIkNBUlJJRVJfREVMQVkiLCAiV0VBVEhFUl9ERUxBWSIsICJOQVNfREVMQVkiLCAiU0VDVVJJVFlfREVMQVkiLCAiTEFURV9BSVJDUkFGVF9ERUxBWSIgKQ0KDQpoZWFkKHRibF9kZWxheV90eXBlKQ0KYGBgDQoNCg0KKlBsb3R0aW5nIENhdXNlcyBvZiBkZWxheQ0KYGBge3J9DQpnZ3Bsb3QodGJsX2RlbGF5X3R5cGUsIGFlcyh4PU1PTlRIKSkgKw0KICBnZW9tX2xpbmUoYWVzKHk9Q0FSUklFUl9ERUxBWSwgY29sb3IgPSAiZGFya3JlZCIpKSArDQogIGdlb21fbGluZShhZXMoeT1XRUFUSEVSX0RFTEFZLCBjb2xvcj0ic3RlZWxibHVlIiksIGxpbmV0eXBlPSJ0d29kYXNoIikgKw0KICBnZW9tX2xpbmUoYWVzKHk9TkFTX0RFTEFZLCBjb2xvciA9ICIjOTk5OTk5IikpICsNCiAgZ2VvbV9saW5lKGFlcyh5PVNFQ1VSSVRZX0RFTEFZLCBjb2xvciA9ICIjRTY5RjAwIikpICsgIA0KICBnZW9tX2xpbmUoYWVzKHk9TEFURV9BSVJDUkFGVF9ERUxBWSwgY29sb3IgPSAiYmxhY2siKSkgKw0KICAjc2NhbGVfZmlsbF9kaXNjcmV0ZShuYW1lPSJDYXVzZSBvZiBEZWxheSIsIGxhYmVscz1jKCJDQVJSSUVSX0RFTEFZIiwgIldFQVRIRVJfREVMQVkiLCAiTkFTX0RFTEFZIiwgIlNFQ1VSSVRZX0RFTEFZIiwgIkxBVEVfQUlSQ1JBRlRfREVMQVkiICkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSJDdW11bGF0aXZlIG1pbnV0ZXMgZGVsYXllZCBieSBjYXVzZSBvZiBkZWxheSIsIGxhYmVscyA9IHNjYWxlczo6Y29tbWEgKSArDQogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKG5hbWUgPSAiQ2F1c2Ugb2YgRGVsYXkiLCBsYWJlbHM9YygiQ0FSUklFUl9ERUxBWSIsICJXRUFUSEVSX0RFTEFZIiwgIk5BU19ERUxBWSIsICJTRUNVUklUWV9ERUxBWSIsICJMQVRFX0FJUkNSQUZUX0RFTEFZIiApKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCg0KIzQuMCBPTiBUSU1FIFBFUkZPUk1BTkNFOiBBcnJpdmVkIGZsaWdodHMNCg0KDQpPTiBUSU1FIFBFUkZPUk1BTkNFOiBJbiAyMDE3LCA3OS4yOCBwZXJjZW50IG9mIHRoZSBmbGlnaHRzIGF0IFVTIGFpcnBvcnRzIGFycml2ZWQgd2l0aGluIDE1IG1pbnV0ZXMgb2YgdGhlIHNjaGVkdWxlZCBhcnJpdmFsIHRpbWUuDQoNClBlcmNlbnQgb2YgQXJyaXZhbCB3aXRoaW4gMTUgbWludXRlcyBvZiBzY2hlZHVsZQ0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dyZXBlbCkNCg0KZGYgPC0gRkxJR0hUUyAlPiUNCiAgZmlsdGVyKCFpcy5uYShERUxBWV9TVEFUVVMpKSAlPiUNCiAgZ3JvdXBfYnkoQ0FSUklFUiklPiUNCiAgc3VtbWFyaXNlKE51bV9mbGlnaHRzPW4oKSwNCiAgICAgICAgICAgIE51bV9PbnRpbWU9c3VtKERFTEFZX1NUQVRVUz09MCksDQogICAgICAgICAgICBQQ1Q9IHJvdW5kKE51bV9PbnRpbWUvTnVtX2ZsaWdodHMsNCkqMTAwKQ0KDQoNCnJlZl9hdmcgPC0gZGYgJT4lDQogIHN1bW1hcmlzZShhdmVyYWdlPW1lYW4oUENUKSkgJT4lDQogIC4kYXZlcmFnZQ0KDQpyZWZfYXZnIDwtIHJvdW5kKHJlZl9hdmcsMikNCg0KZGYkZGVsYXlfdHlwZSA8LSBpZmVsc2UoZGYkUENUIDwgcmVmX2F2ZywgImJlbG93IiwgImFib3ZlIikgICMgYWJvdmUgLyBiZWxvdyBhdmcgZmxhZw0KDQptMiA8LSBtZXJnZShkZiwgQ0FSUklFUiwgYnkueCA9IkNBUlJJRVIiLCBieS55ID0gIkNPREUiICkNCg0KIyBQbG90IC0gc29sdXRpb24gMw0KZ2dwbG90KG0yLCBhZXMoeD1OdW1fZmxpZ2h0cywgeT1QQ1QsIGxhYmVsPSBERVNDUklQVElPTiAsIGNvbG9yPWRlbGF5X3R5cGUpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemU9TnVtX2ZsaWdodHMpKSArDQogICNnZW9tX3RleHQoaGp1c3QgPSAwLjIsIHZqdXN0PS0wLjgpICsNCiAgZ2VvbV90ZXh0X3JlcGVsKCkgKw0KICAjc2NhbGVfeF9sb2cxMCgpICsNCiAgI3NjYWxlX3lfbG9nMTAoKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0iTnVtYmVyIG9mIGZsaWdodHMiLCBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hICkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSJQZXJjZW50IG9mIEFycml2YWwgd2l0aGluIDE1IG1pbnV0ZXMiICkNCiAgI3hsYWIoIk51bWJlciBvZiBmbGlnaHRzIikgKw0KICB5bGFiKCJQZXJjZW50IG9mIEFycml2YWwgd2l0aGluIDE1IG1pbnV0ZXMiKSArDQogIGdndGl0bGUoIkluIDIwMTcsIDc5LjI4JSBvZiB0aGUgZmxpZ2h0cyBhcnJpdmVkIHdpdGhpbiAxNSBtaW51dGVzLiIpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdD1yZWZfYXZnKSwgbHR5PTIpICsNCiAgc2NhbGVfY29sb3JfZGlzY3JldGUobmFtZT0iRGVsYXlfVHlwZSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KDQoNCiM1LkdlbmVyYWwgRGVsYXkgVHJlbmRzIA0KDQpgYGB7cn0NCmRmIDwtIEZMSUdIVFMlPiUNCiAgZ3JvdXBfYnkoRkxfREFURSwgREFZX09GX1dFRUssIENBUlJJRVIpJT4lDQogIHN1bW1hcmlzZShBVkdfREVQX0RFTEFZPSBtZWFuKERFUF9ERUxBWV9ORVcsbmEucm09VFJVRSkpDQoNCmRmJEZMX0RBVEUgPC0gYXMuRGF0ZShkZiRGTF9EQVRFLCAiJWQvJW0vJVkiKQ0KDQpyZXF1aXJlKHNjYWxlcykNCg0KZ2dwbG90KGRmLCBhZXMoeD1GTF9EQVRFLCB5PUFWR19ERVBfREVMQVkpKSArDQogIGdlb21fcG9pbnQoKSArIA0KICAjc3RhdF9zbW9vdGgobWV0aG9kID0gImxvZXNzIikgKw0KICBnZW9tX3Ntb290aChjb2xvciA9ICdSZWQnLCBtZXRob2QgPSAnbG9lc3MnLCBzZT1GQUxTRSkgKw0KICAjZmFjZXRfd3JhcCh+IENBUlJJRVIpICsNCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IGRhdGVfYnJlYWtzKCJtb250aHMiKSwNCiAgICAgICAgICAgICAgIGxhYmVscyA9IGRhdGVfZm9ybWF0KCIlYiIpKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkNCmBgYA0KDQojIzUuMS4gUGxvdHRpbmcgZmFjZXRfd3JhcCAtIEdlbmVyYWwgRGVsYXkgVHJlbmRzIA0KDQpgYGB7cn0NCg0KbV9UUkVORF9ERUxBWSA8LSBtZXJnZShkZixDQVJSSUVSLCBieS54ID0gIkNBUlJJRVIiLCBieS55ID0gIkNPREUiKQ0KDQojaGVhZChtX1RSRU5EX0RFTEFZKQ0KDQoNCiMgUGxvdHRpbmcgQWlybGluZSBuYW1lIC0gR2VuZXRhbCBUcmVuZCBEZWxheQ0KDQpnZ3Bsb3QobV9UUkVORF9ERUxBWSwgYWVzKHg9RkxfREFURSwgeT1BVkdfREVQX0RFTEFZKSkgKw0KICBnZW9tX3BvaW50KCkgKyANCiAgI3N0YXRfc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIpICsNCiAgZ2VvbV9zbW9vdGgoY29sb3IgPSAnUmVkJywgbWV0aG9kID0gJ2xvZXNzJywgc2U9RkFMU0UpICsNCiAgZmFjZXRfd3JhcCh+IERFU0NSSVBUSU9OKSArDQogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBkYXRlX2JyZWFrcygibW9udGhzIiksDQogICAgICAgICAgICAgICBsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJWIiKSkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQpgYGANCg0KDQoNCg0KDQojNi5IZWF0bWFwDQoNCmBgYHtyfQ0KZGYgPC0gRkxJR0hUUyAlPiUNCiAgZ3JvdXBfYnkoRkxfREFURSxDQVJSSUVSLERFUF9USU1FX0JMSyxEQVlfT0ZfV0VFSykgJT4lDQogIHN1bW1hcmlzZShBVkdfREVQX0RFTEFZPW1lYW4oREVQX0RFTEFZX05FVyxuYS5ybT1UUlVFKSkNCg0KZGYkRkxfREFURSA8LSBhcy5EYXRlKGRmJEZMX0RBVEUsICIlZC8lbS8lWSIpIA0KZGYkQ0FSUklFUiA8LSBhcy5mYWN0b3IoZGYkQ0FSUklFUikNCmRmJERBWV9PRl9XRUVLIDwtIGFzLmZhY3RvcihkZiREQVlfT0ZfV0VFSykNCmRmJERFUF9USU1FX0JMSyA8LSBhcy5mYWN0b3IoZGYkREVQX1RJTUVfQkxLKQ0KDQojIFBsb3QNCmdncGxvdChkZiwgYWVzKHg9REVQX1RJTUVfQkxLLHk9REFZX09GX1dFRUssIGZpbGw9QVZHX0RFUF9ERUxBWSApKSArDQogIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3c9IiMwMEFGQkIiLCBoaWdoPSJibGFjayIpICsNCiAgI3NjYWxlX2ZpbGxfZ3JhZGllbnQobG93PSIjMDBBRkJCIiwgaGlnaD0iI0ZDNEUwNyIpICsNCiAgI3NjYWxlX2NvbG9yX2dyYWRpZW50MihtaWRwb2ludCA9IG1pZCwgbG93ID0gImJsdWUiLCBtaWQgPSAid2hpdGUiLCBoaWdoID0gInJlZCIsIHNwYWNlID0gIkxhYiIpICsNCiAgI2ZhY2V0X2dyaWQoQ0FSUklFUiB+IGFzLmZhY3Rvcihmb3JtYXQoZGYkRkxfREFURSwgIiViIikpICkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQo=