Group/Individual Details

Executive Statement

Coles and Woolworths are two of the largest supermarket systems in Australia. They both have the wide range of product categories that meet the customers’ demand such as fruit, vegetables, meat, drinks, cosmetics, medicine, and so on from many difference brands that will satisfy any customers’ need. They both usually apply promotions, sales, discounts and special price. This is a price war between these two supermarkets. Therefore, we should investigate which supermarket is cheaper and if there is a statistically significant difference between prices by performing an appropriate hypothesis testing. To do this, we randomly chose a sample of 30 matched products with the original price from each supermarket. We use paired samples t-test to determine this hypothesis with null hypothesis is mean difference is 0 and alternative hypothesis is mean difference is not 0. After aggregating, summarizing and visualizing the data, using Q-Q plot to check normality of the differences, we calculated the paired samples t-test in R and R reported that mean of differences is -0.36, t=-2.47 is more extreme than critical value -2.05, p-value is less than significant level and 95% CI[-0.66 -0.06] does not capture Null Hypothesis; therefore, we reject Null Hypothesis and conclude that there is a statistically significant mean difference between products’ price in Coles and Woolworths. More specifically, Woolworths is cheaper than Coles by 0.06AUD to 0.66AUD.

Load Packages and Data

library(ggplot2)
library(dplyr)
library(lattice)
library(Hmisc)
library(knitr)

Summary Statistics

knitr::kable(Coles_Woolworths, caption="Coles vs Woolworths")
Product COLES WOOLWORTHS
Pepsi Max 375ml cans (24 packs) 21.77 21.50
Kirks Pasito 375ml cans (10 packs) 9.56 8.90
Cocacola Diet Coke 375 cans (30 packs) 37.07 34.45
Fanta Orange Flavour 375ml cans (24 packs) 30.25 28.20
Liddells Lactose Free Full Cream Milk 1l 2.00 2.00
Almond Breeze Unsweetened Almond Milk 1l 2.50 2.70
Nestcafe Café Menu Coffee Sachets Cappuchino 10 packs 7.25 6.59
Maximus Blue Bring It On 1l 3.30 3.00
Pace Farm Caged Eggs Extra Large 12 packs 700g 5.00 5.00
Pace Farm Eco Organic Free Range Eggs 6 packs 300g 5.50 5.49
Maggie Beer Paste Spiced Pear 100g 6.58 5.98
South Cape Edam Cheese 200g 6.60 6.30
Banana 1kg 3.50 3.50
Seedless Watermelon 1kg 2.50 2.70
Royal Gala Apple 1kg 5.00 4.50
Fuji Apple 1kg 3.00 5.00
Lady Finger Banana 1kg 6.50 6.90
Red Capsicum 1kg 7.50 7.90
Potato Sweet Gold 1kg 5.00 5.00
Green Capsicum 1kg 6.90 6.00
Berri Grape Juice 2l 4.68 4.29
V8 Vegetable Juice Pineapple Passion 1.25l 4.94 4.60
Green & Black's Organic Dark Chocolate 70% 100g 4.40 4.10
Cadbury Coco Block Chocolate 70% Cocoa Dark Orange 100g 4.40 4.00
Wrigley Extra Peppermint Chewing Gum 3 pack 81g 4.73 4.00
Wrigley's Eclipse Mints Spearmint 34g 2.86 2.60
Uncle Ben's Express Rice Special Fried Rice 250g 3.58 3.25
Sunrice Basmati Rice 5kg 19.80 18.00
MasterFoods Tomato Sauce 920ml 5.16 5.00
Hp Top Down Barbecue Sauce 390ml 5.50 5.00

Coles summary

Coles_Woolworths%>%summarise(Min=min(COLES,na.rm=TRUE),Q1=quantile(COLES,probs=.25,na.rm=TRUE),Median=median(COLES,na.rm=TRUE),Q3=quantile(COLES,probs=.75,na.rm=TRUE),Max=max(COLES,na.rm=TRUE),Mean=mean(COLES,na.rm=TRUE),SD=sd(COLES,na.rm=TRUE),n=n(),Missing=sum(is.na(COLES)))

Woolworths summary

Coles_Woolworths%>%summarise(Min=min(WOOLWORTHS,na.rm=TRUE),Q1=quantile(WOOLWORTHS,probs=.25,na.rm=TRUE),Median=median(WOOLWORTHS,na.rm=TRUE),Q3=quantile(WOOLWORTHS,probs=.75,na.rm=TRUE),Max=max(WOOLWORTHS,na.rm=TRUE),Mean=mean(WOOLWORTHS,na.rm=TRUE),SD=sd(WOOLWORTHS,na.rm=TRUE),n=n(),Missing=sum(is.na(WOOLWORTHS)))

Data Visualisation

matplot(t(data.frame(Coles_Woolworths$COLES,Coles_Woolworths$WOOLWORTHS)),type="b",pch=19,col=1,lty=1,ylab="Price",xlab="Supermaket",xaxt="n")
axis(1,at=1:2,labels=c("COLES","WOOLWORTHS"))

Descriptive statistics for the mean difference

Coles_Woolworths<-Coles_Woolworths%>%mutate(d=WOOLWORTHS-COLES)
Coles_Woolworths
Coles_Woolworths%>%summarise(Min=min(d,na.rm=TRUE),Q1=quantile(d,probs=.25,na.rm=TRUE),Median=median(d,na.rm=TRUE),Q3=quantile(d,probs=.75,na.rm=TRUE),Max=max(d,na.rm=TRUE),Mean=mean(d,na.rm=TRUE),SD=sd(d,na.rm=TRUE),n=n(),Missing=sum(is.na(d)))

The mean difference is -0.36. On average, the price difference Coles’s and Woolworths’s products is 0.36$.

qqPlot(Coles_Woolworths$d,dist="norm")

The differences appear to be approximately normally distributed, we continue with the paired samples t-test.

Hypothesis Test

We need to use Paired samples t-test because a data point - a product’s price from the first group - Coles can only be paired with a product’s price from the second group - Woolworths. Besides that, Paired samples t-test method is more power than other method in detecting the statisticallysignificant mean change difference when we measure the same sample twice. In this case, we want to conclude if Coles or Woolworths is cheaper by mesuring the same products’ price in Coles and Woolworths. Therefore, Paired samples t-test is an appropriate hypothesis test to investigate it. My hypothesis is that Woolworths is cheaper than Coles. The mean difference is denoted: \[\mu_\Delta\] The statistical hypotheses for the paired samples t-test are as follows: \[H_0:\mu_\Delta=0\] \[H_A:\mu_\Delta\neq0\] Use the 0.05 level of significance.

t.test(Coles_Woolworths$WOOLWORTHS,Coles_Woolworths$COLES,paired=TRUE,alternative = "two.side")

    Paired t-test

data:  Coles_Woolworths$WOOLWORTHS and Coles_Woolworths$COLES
t = -2.4666, df = 29, p-value = 0.01979
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.6633806 -0.0619527
sample estimates:
mean of the differences 
             -0.3626667 

Degrees of freedom are: df=30-1=29 The critical value for the paired samples t-test, assuming a two tailed test with 0.05 level of significance, is:

qt(p=0.025,df=29)
[1] -2.04523

Interpretation

Therefore, there is a statistically significant mean difference between products’ price in Coles and Woolworths.

Discussion

We used a Paired samples t-test to check the significant mean difference between products’ price in Coles and Woolworths supermarkets and the results are that this paired t-test in this case is statistically significant. Coles and Woolworths have statistically significant mean difference between products’ price, t(df=29)=-2.47, 95%[-0.66 -0.06]. In this case, we will pay less in Woolworths, and there can be 95% confident that the difference is between -0.66AUD and -0.06AUD, with the estimated difference equal to -0.36AUD. Or in more specifically, Woolworths is less expensive by 0.06AUD to 0.66AUD.In this investigation, the sample is 30 products that are randomly chose, that can bias the result because 30 is very small in comparison to many products in Coles and Woolworths. Besides that, the price data in this investigation is original price, we did not mention and research on promotion price or discounts; therefore, the investigation result could be difference from practical in some products. However, this investigation has brought the overview in comparing products’ price in Coles and Woolworths. There is a statistically significant mean difference between them in common products. For the next investigation, we should investigate on the larger sample size, and in the specific categories to have more objective perspectives.

LS0tDQp0aXRsZTogIk1BVEgxMzI0IEFzc2lnbm1lbnQgMyINCnN1YnRpdGxlOiAiU3VwZXJtYXJrZXQgUHJpY2UgV2FycyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIEdyb3VwL0luZGl2aWR1YWwgRGV0YWlscw0KDQoqIFN0dWRlbnQgTmFtZTogU2FtIER1YyBUcmlldSAoczM2NTE4NTQpDQoNCiMjIEV4ZWN1dGl2ZSBTdGF0ZW1lbnQNCg0KQ29sZXMgYW5kIFdvb2x3b3J0aHMgYXJlIHR3byBvZiB0aGUgbGFyZ2VzdCBzdXBlcm1hcmtldCBzeXN0ZW1zIGluIEF1c3RyYWxpYS4gVGhleSBib3RoIGhhdmUgdGhlIHdpZGUgcmFuZ2Ugb2YgcHJvZHVjdCBjYXRlZ29yaWVzIHRoYXQgbWVldCB0aGUgY3VzdG9tZXJzJyBkZW1hbmQgc3VjaCBhcyBmcnVpdCwgdmVnZXRhYmxlcywgbWVhdCwgZHJpbmtzLCBjb3NtZXRpY3MsIG1lZGljaW5lLCBhbmQgc28gb24gZnJvbSBtYW55IGRpZmZlcmVuY2UgYnJhbmRzIHRoYXQgd2lsbCBzYXRpc2Z5IGFueSBjdXN0b21lcnMnIG5lZWQuIFRoZXkgYm90aCB1c3VhbGx5IGFwcGx5IHByb21vdGlvbnMsIHNhbGVzLCBkaXNjb3VudHMgYW5kIHNwZWNpYWwgcHJpY2UuIFRoaXMgaXMgYSBwcmljZSB3YXIgYmV0d2VlbiB0aGVzZSB0d28gc3VwZXJtYXJrZXRzLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGljaCBzdXBlcm1hcmtldCBpcyBjaGVhcGVyIGFuZCBpZiB0aGVyZSBpcyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHByaWNlcyBieSBwZXJmb3JtaW5nIGFuIGFwcHJvcHJpYXRlIGh5cG90aGVzaXMgdGVzdGluZy4gVG8gZG8gdGhpcywgd2UgcmFuZG9tbHkgY2hvc2UgYSBzYW1wbGUgb2YgMzAgbWF0Y2hlZCBwcm9kdWN0cyB3aXRoIHRoZSBvcmlnaW5hbCBwcmljZSBmcm9tIGVhY2ggc3VwZXJtYXJrZXQuIFdlIHVzZSBwYWlyZWQgc2FtcGxlcyB0LXRlc3QgdG8gZGV0ZXJtaW5lIHRoaXMgaHlwb3RoZXNpcyB3aXRoIG51bGwgaHlwb3RoZXNpcyBpcyBtZWFuIGRpZmZlcmVuY2UgaXMgMCBhbmQgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcyBpcyBtZWFuIGRpZmZlcmVuY2UgaXMgbm90IDAuIEFmdGVyIGFnZ3JlZ2F0aW5nLCBzdW1tYXJpemluZyBhbmQgdmlzdWFsaXppbmcgdGhlIGRhdGEsIHVzaW5nIFEtUSBwbG90IHRvIGNoZWNrIG5vcm1hbGl0eSBvZiB0aGUgZGlmZmVyZW5jZXMsIHdlIGNhbGN1bGF0ZWQgdGhlIHBhaXJlZCBzYW1wbGVzIHQtdGVzdCBpbiBSIGFuZCBSIHJlcG9ydGVkIHRoYXQgbWVhbiBvZiBkaWZmZXJlbmNlcyBpcyAtMC4zNiwgdD0tMi40NyBpcyBtb3JlIGV4dHJlbWUgdGhhbiBjcml0aWNhbCB2YWx1ZSAtMi4wNSwgcC12YWx1ZSBpcyBsZXNzIHRoYW4gc2lnbmlmaWNhbnQgbGV2ZWwgYW5kIDk1JSBDSVstMC42NiAtMC4wNl0gZG9lcyBub3QgY2FwdHVyZSBOdWxsIEh5cG90aGVzaXM7IHRoZXJlZm9yZSwgd2UgcmVqZWN0IE51bGwgSHlwb3RoZXNpcyBhbmQgY29uY2x1ZGUgdGhhdCB0aGVyZSBpcyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gcHJvZHVjdHMnIHByaWNlIGluIENvbGVzIGFuZCBXb29sd29ydGhzLiBNb3JlIHNwZWNpZmljYWxseSwgV29vbHdvcnRocyBpcyBjaGVhcGVyIHRoYW4gQ29sZXMgYnkgMC4wNkFVRCB0byAwLjY2QVVELiANCg0KIyMgTG9hZCBQYWNrYWdlcyBhbmQgRGF0YQ0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KYGBgDQpgYGB7cn0NCmxpYnJhcnkobGF0dGljZSkNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KEhtaXNjKQ0KYGBgDQpgYGB7cn0NCmxpYnJhcnkoa25pdHIpDQpgYGANCiMjIFN1bW1hcnkgU3RhdGlzdGljcw0KYGBge3J9DQprbml0cjo6a2FibGUoQ29sZXNfV29vbHdvcnRocywgY2FwdGlvbj0iQ29sZXMgdnMgV29vbHdvcnRocyIpDQpgYGANCiMjIyBDb2xlcyBzdW1tYXJ5DQpgYGB7cn0NCkNvbGVzX1dvb2x3b3J0aHMlPiVzdW1tYXJpc2UoTWluPW1pbihDT0xFUyxuYS5ybT1UUlVFKSxRMT1xdWFudGlsZShDT0xFUyxwcm9icz0uMjUsbmEucm09VFJVRSksTWVkaWFuPW1lZGlhbihDT0xFUyxuYS5ybT1UUlVFKSxRMz1xdWFudGlsZShDT0xFUyxwcm9icz0uNzUsbmEucm09VFJVRSksTWF4PW1heChDT0xFUyxuYS5ybT1UUlVFKSxNZWFuPW1lYW4oQ09MRVMsbmEucm09VFJVRSksU0Q9c2QoQ09MRVMsbmEucm09VFJVRSksbj1uKCksTWlzc2luZz1zdW0oaXMubmEoQ09MRVMpKSkNCmBgYA0KIyMjIFdvb2x3b3J0aHMgc3VtbWFyeQ0KYGBge3J9DQpDb2xlc19Xb29sd29ydGhzJT4lc3VtbWFyaXNlKE1pbj1taW4oV09PTFdPUlRIUyxuYS5ybT1UUlVFKSxRMT1xdWFudGlsZShXT09MV09SVEhTLHByb2JzPS4yNSxuYS5ybT1UUlVFKSxNZWRpYW49bWVkaWFuKFdPT0xXT1JUSFMsbmEucm09VFJVRSksUTM9cXVhbnRpbGUoV09PTFdPUlRIUyxwcm9icz0uNzUsbmEucm09VFJVRSksTWF4PW1heChXT09MV09SVEhTLG5hLnJtPVRSVUUpLE1lYW49bWVhbihXT09MV09SVEhTLG5hLnJtPVRSVUUpLFNEPXNkKFdPT0xXT1JUSFMsbmEucm09VFJVRSksbj1uKCksTWlzc2luZz1zdW0oaXMubmEoV09PTFdPUlRIUykpKQ0KYGBgDQojIyMgRGF0YSBWaXN1YWxpc2F0aW9uDQpgYGB7cn0NCm1hdHBsb3QodChkYXRhLmZyYW1lKENvbGVzX1dvb2x3b3J0aHMkQ09MRVMsQ29sZXNfV29vbHdvcnRocyRXT09MV09SVEhTKSksdHlwZT0iYiIscGNoPTE5LGNvbD0xLGx0eT0xLHlsYWI9IlByaWNlIix4bGFiPSJTdXBlcm1ha2V0Iix4YXh0PSJuIikNCmF4aXMoMSxhdD0xOjIsbGFiZWxzPWMoIkNPTEVTIiwiV09PTFdPUlRIUyIpKQ0KYGBgDQojIyMgRGVzY3JpcHRpdmUgc3RhdGlzdGljcyBmb3IgdGhlIG1lYW4gZGlmZmVyZW5jZQ0KYGBge3J9DQpDb2xlc19Xb29sd29ydGhzPC1Db2xlc19Xb29sd29ydGhzJT4lbXV0YXRlKGQ9V09PTFdPUlRIUy1DT0xFUykNCkNvbGVzX1dvb2x3b3J0aHMNCmBgYA0KYGBge3J9DQpDb2xlc19Xb29sd29ydGhzJT4lc3VtbWFyaXNlKE1pbj1taW4oZCxuYS5ybT1UUlVFKSxRMT1xdWFudGlsZShkLHByb2JzPS4yNSxuYS5ybT1UUlVFKSxNZWRpYW49bWVkaWFuKGQsbmEucm09VFJVRSksUTM9cXVhbnRpbGUoZCxwcm9icz0uNzUsbmEucm09VFJVRSksTWF4PW1heChkLG5hLnJtPVRSVUUpLE1lYW49bWVhbihkLG5hLnJtPVRSVUUpLFNEPXNkKGQsbmEucm09VFJVRSksbj1uKCksTWlzc2luZz1zdW0oaXMubmEoZCkpKQ0KYGBgDQpUaGUgbWVhbiBkaWZmZXJlbmNlIGlzIC0wLjM2LiBPbiBhdmVyYWdlLCB0aGUgcHJpY2UgZGlmZmVyZW5jZSBDb2xlcydzIGFuZCBXb29sd29ydGhzJ3MgcHJvZHVjdHMgaXMgMC4zNiQuIA0KYGBge3J9DQpxcVBsb3QoQ29sZXNfV29vbHdvcnRocyRkLGRpc3Q9Im5vcm0iKQ0KYGBgDQpUaGUgZGlmZmVyZW5jZXMgYXBwZWFyIHRvIGJlIGFwcHJveGltYXRlbHkgbm9ybWFsbHkgZGlzdHJpYnV0ZWQsIHdlIGNvbnRpbnVlIHdpdGggdGhlIHBhaXJlZCBzYW1wbGVzIHQtdGVzdC4NCg0KIyMgSHlwb3RoZXNpcyBUZXN0DQpXZSBuZWVkIHRvIHVzZSBQYWlyZWQgc2FtcGxlcyB0LXRlc3QgYmVjYXVzZSBhIGRhdGEgcG9pbnQgLSBhIHByb2R1Y3QncyBwcmljZSBmcm9tIHRoZSBmaXJzdCBncm91cCAtIENvbGVzIGNhbiBvbmx5IGJlIHBhaXJlZCB3aXRoIGEgcHJvZHVjdCdzIHByaWNlIGZyb20gdGhlIHNlY29uZCBncm91cCAtIFdvb2x3b3J0aHMuIEJlc2lkZXMgdGhhdCwgUGFpcmVkIHNhbXBsZXMgdC10ZXN0IG1ldGhvZCBpcyBtb3JlIHBvd2VyIHRoYW4gb3RoZXIgbWV0aG9kIGluIGRldGVjdGluZyB0aGUgc3RhdGlzdGljYWxseXNpZ25pZmljYW50IG1lYW4gY2hhbmdlIGRpZmZlcmVuY2Ugd2hlbiB3ZSBtZWFzdXJlIHRoZSBzYW1lIHNhbXBsZSB0d2ljZS4gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGNvbmNsdWRlIGlmIENvbGVzIG9yIFdvb2x3b3J0aHMgaXMgY2hlYXBlciBieSBtZXN1cmluZyB0aGUgc2FtZSBwcm9kdWN0cycgcHJpY2UgaW4gQ29sZXMgYW5kIFdvb2x3b3J0aHMuIFRoZXJlZm9yZSwgUGFpcmVkIHNhbXBsZXMgdC10ZXN0IGlzIGFuIGFwcHJvcHJpYXRlIGh5cG90aGVzaXMgdGVzdCB0byBpbnZlc3RpZ2F0ZSBpdC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IFdvb2x3b3J0aHMgaXMgY2hlYXBlciB0aGFuIENvbGVzLg0KVGhlIG1lYW4gZGlmZmVyZW5jZSBpcyBkZW5vdGVkOg0KJCRcbXVfXERlbHRhJCQNClRoZSBzdGF0aXN0aWNhbCBoeXBvdGhlc2VzIGZvciB0aGUgcGFpcmVkIHNhbXBsZXMgdC10ZXN0IGFyZSBhcyBmb2xsb3dzOg0KJCRIXzA6XG11X1xEZWx0YT0wJCQNCiQkSF9BOlxtdV9cRGVsdGFcbmVxMCQkDQpVc2UgdGhlIDAuMDUgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlLg0KYGBge3J9DQp0LnRlc3QoQ29sZXNfV29vbHdvcnRocyRXT09MV09SVEhTLENvbGVzX1dvb2x3b3J0aHMkQ09MRVMscGFpcmVkPVRSVUUsYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGUiKQ0KYGBgDQpEZWdyZWVzIG9mIGZyZWVkb20gYXJlOiBkZj0zMC0xPTI5DQpUaGUgY3JpdGljYWwgdmFsdWUgZm9yIHRoZSBwYWlyZWQgc2FtcGxlcyB0LXRlc3QsIGFzc3VtaW5nIGEgdHdvIHRhaWxlZCB0ZXN0IHdpdGggMC4wNSBsZXZlbCBvZiBzaWduaWZpY2FuY2UsIGlzOg0KYGBge3J9DQpxdChwPTAuMDI1LGRmPTI5KQ0KYGBgDQojIyBJbnRlcnByZXRhdGlvbg0KKiAgIFRoZSBjcml0aWNhbCB2YWx1ZXMgYXJlICsyLjA1Ly0yLjA1LiBBcyB0PS0yLjQ3IGlzIG1vcmUgZXh0cmVtZSB0aGFuIC0yLjA1LCB3ZSByZWplY3QgTnVsbCBIeXBvdGhlc2lzLg0KKiAgIHAtdmFsdWUgPCAwLjA1LCBzbyBOdWxsIEh5cG90aGVzaXMgc2hvdWxkIGJlIHJlamVjdGVkLg0KKiAgIFRoZSA5NSUgQ0kgb2YgdGhlIG1lYW4gZGlmZmVyZW5jZSBpcyBmb3VuZCB0byBiZSBbLTAuNjYgLTAuMDZdIHRoYXQgZG9zZSBub3QgY2FwdHVyZSBOdWxsIEh5cG90aGVzaXMsIHdlIHNob3VsZCByZWplY3QgaXQuDQoNClRoZXJlZm9yZSwgdGhlcmUgaXMgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IG1lYW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHByb2R1Y3RzJyBwcmljZSBpbiBDb2xlcyBhbmQgV29vbHdvcnRocy4NCg0KIyMgRGlzY3Vzc2lvbiANCg0KV2UgdXNlZCBhIFBhaXJlZCBzYW1wbGVzIHQtdGVzdCB0byBjaGVjayB0aGUgc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gcHJvZHVjdHMnIHByaWNlIGluIENvbGVzIGFuZCBXb29sd29ydGhzIHN1cGVybWFya2V0cyBhbmQgdGhlIHJlc3VsdHMgYXJlIHRoYXQgdGhpcyBwYWlyZWQgdC10ZXN0IGluIHRoaXMgY2FzZSBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LiBDb2xlcyBhbmQgV29vbHdvcnRocyBoYXZlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gcHJvZHVjdHMnIHByaWNlLCB0KGRmPTI5KT0tMi40NywgOTUlWy0wLjY2IC0wLjA2XS4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHBheSBsZXNzIGluIFdvb2x3b3J0aHMsIGFuZCB0aGVyZSBjYW4gYmUgOTUlIGNvbmZpZGVudCB0aGF0IHRoZSBkaWZmZXJlbmNlIGlzIGJldHdlZW4gLTAuNjZBVUQgYW5kIC0wLjA2QVVELCB3aXRoIHRoZSBlc3RpbWF0ZWQgZGlmZmVyZW5jZSBlcXVhbCB0byAtMC4zNkFVRC4gT3IgaW4gbW9yZSBzcGVjaWZpY2FsbHksIFdvb2x3b3J0aHMgaXMgbGVzcyBleHBlbnNpdmUgYnkgMC4wNkFVRCB0byAwLjY2QVVELkluIHRoaXMgaW52ZXN0aWdhdGlvbiwgdGhlIHNhbXBsZSBpcyAzMCBwcm9kdWN0cyB0aGF0IGFyZSByYW5kb21seSBjaG9zZSwgdGhhdCBjYW4gYmlhcyB0aGUgcmVzdWx0IGJlY2F1c2UgMzAgaXMgdmVyeSBzbWFsbCBpbiBjb21wYXJpc29uIHRvIG1hbnkgcHJvZHVjdHMgaW4gQ29sZXMgYW5kIFdvb2x3b3J0aHMuIEJlc2lkZXMgdGhhdCwgdGhlIHByaWNlIGRhdGEgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIG9yaWdpbmFsIHByaWNlLCB3ZSBkaWQgbm90IG1lbnRpb24gYW5kIHJlc2VhcmNoIG9uIHByb21vdGlvbiBwcmljZSBvciBkaXNjb3VudHM7IHRoZXJlZm9yZSwgdGhlIGludmVzdGlnYXRpb24gcmVzdWx0IGNvdWxkIGJlIGRpZmZlcmVuY2UgZnJvbSBwcmFjdGljYWwgaW4gc29tZSBwcm9kdWN0cy4gSG93ZXZlciwgdGhpcyBpbnZlc3RpZ2F0aW9uIGhhcyBicm91Z2h0IHRoZSBvdmVydmlldyBpbiBjb21wYXJpbmcgcHJvZHVjdHMnIHByaWNlIGluIENvbGVzIGFuZCBXb29sd29ydGhzLiBUaGVyZSBpcyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpbiBjb21tb24gcHJvZHVjdHMuIEZvciB0aGUgbmV4dCBpbnZlc3RpZ2F0aW9uLCB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgb24gdGhlIGxhcmdlciBzYW1wbGUgc2l6ZSwgYW5kIGluIHRoZSBzcGVjaWZpYyBjYXRlZ29yaWVzIHRvIGhhdmUgbW9yZSBvYmplY3RpdmUgcGVyc3BlY3RpdmVzLg0KDQo=