SOLUTIONS


Tutorial 4, Probability, Statistics and Modelling 2, BSc Security and Crime Science, UCL


Outcomes of this tutorial

In this tutorial, you will:


Task 1-3 are to be done in R. Task 4-6 in JASP.

Task 1: Evaluation of driving campaign

You are tasked to evaluate a safe driving campaign. On 150 road crossing, a local police force implemented a safe-driving cmapign through ads that promote better driving practices. As a control, they chose 150 comparable crossings where no such campaign was run. At each locaiton, police officers evaluated the driving behavior by assigning a score from 0-100. Higher scores, indicate better driving practices.

You are now asked to decide whether or not the funding for the campaign should be extended.

Provide an answer in the NHST framework and in the Bayesian framework.

The data are located in ./data/tutorial4/driving_data.csv.

#your code here

##load libraries
library(BayesFactor)

##read the data
driving_data = read.csv('./data/tutorial4/driving_data.csv', header=T)

##check for any data problems/missing values
summary(driving_data$safe_driving_score)

###exclude the score that is higher than 100
driving_data = driving_data[driving_data$safe_driving_score <= 100, ]

##look at the data
head(driving_data)

##get the means
tapply(driving_data$safe_driving_score, driving_data$intervention, mean)

##NHST
t.test(formula = safe_driving_score ~ intervention, data=driving_data)

##Bayesian
ttestBF(formula = safe_driving_score ~ intervention, data=driving_data)

What do you advice? Should the funding be continued?

#type your answer here

# NHST reveals no significant difference, i.e. little informative value 
# ... we cannot say that they differ, but can also not conclude that there is no effect
# Bayesian hyp testing showed a BF10 of 0.696, conversely, BF01 = 1/0.696 = 1.44
# ... the data were 1.44 times more likely under H0 (i.e. no difference) than under HA (i.e. that there is a difference)
# ... this is considered anecdotal evidence (http://daniellakens.blogspot.com/2016/01/power-analysis-for-default-bayesian-t.html)

# taken together: we cannot conclude much from the data. Note that in the Bayesian framework, we would encourage more data to be collected since we update the evidence constantly. In the NHST framework, more data would lead to significant results and might not be desirable.

Task 2: Revisiting fraud data

Load the dataframe damage_data from ./data/tutorial4/analyst_data.RData. In that dataframe, you have 1000 observations each for junior and senior analysts and the damage they caused for their employers in fine that needed to be paid for compliance issues. You are in charge of leading a new, better statistical insights team and your employer asks you whether junior or senior analysts are more problematic.

Provide an answer from both the frequentist and the Bayesian perspective.

#your code here

##load the data
load('data/tutorial4/analyst_data.RData')

##look at the data
head(damage_data)

##get the means
tapply(damage_data$damage_caused, damage_data$analyst_level, mean)

##NHST
t.test(damage_caused ~ analyst_level, data=damage_data)

### significant difference: conclusion is that junior > senior

## effect size
d = 23.94*(sqrt(1/1000 + 1/1000))
d

## large effect size


## Bayesian
ttestBF(formula = damage_caused ~ analyst_level, data=damage_data)

### very large BF10: extreme evidence for junior > senior

Task 3: Original data

You will use data from a paper published in Applied Cognitive Psychology. The paper (OA at https://onlinelibrary.wiley.com/doi/full/10.1002/acp.3439) replicated an experiment that found that people who are deceptive about their future plans struggle to be as detailed as truth-tellers. Here, the outcome variable of interest was the number of specific time references in the participants’ answers to interview questions (e.g. “9am”, “half past seven”) as counted by instructed human coders.

Load the data from ./data/tutorial4/replication_data.csv and test:

  1. whether the findings replicated using the NHST framework
  2. what Bayesian statistics concludes.
#your code here
## load the data
replication_data = read.csv('./data/tutorial4/replication_data.csv', header=T)

##NHST t-test (note: we have a direction here!)
t.test(replication_data$specific_time_refs ~ replication_data$condition, alternative = 'g')

##Bayesian test
ttestBF(formula = specific_time_refs ~ condition
        , data = replication_data)

What is your conclusion?

#write your answer here

#- NHST t-test is non-significany: all we can say is that we do not reject H0
#- BF10 is 0.24
#- in other words: BF01 is 1/0.24 = 4.17; this is substantial evidence for H0 over H1
#- we have thus evidence that there is no difference

Task 4: “Evaluation of driving campaign” in JASP

You are tasked to evaluate a safe driving campaign. On 150 road crossing, a local police force implemented a safe-driving cmapign through ads that promote better driving practices. As a control, they chose 150 comparable crossings where no such campaign was run. At each locaiton, police officers evaluated the driving behavior by assigning a score from 0-100. Higher scores, indicate better driving practices.

You are now asked to decide whether or not the funding for the campaign should be extended.

Provide an answer in the NHST framework and in the Bayesian framework.

Conduct these analyses in JASP

Task 5: “Revisiting fraud data” in JASP

Load the dataframe damage_data from ./data/tutorial4/analyst_data.RData. In that dataframe, you have 1000 observations each for junior and senior analysts and the damage they caused for their employers in fine that needed to be paid for compliance issues. You are in charge of leading a new, better statistical insights team and your employer asks you whether junior or senior analysts are more problematic.

Provide an answer from both the frequentist and the Bayesian perspective.

Conduct these analyses in JASP

Task 6: “Original data” in JASP

You will use data from a paper published in Applied Cognitive Psychology. The paper (OA at https://onlinelibrary.wiley.com/doi/full/10.1002/acp.3439) replicated an experiment that found that people who are deceptive about their future plans struggle to be as detailed as truth-tellers. Here, the outcome variable of interest was the number of specific time references in the participants’ answers to interview questions (e.g. “9am”, “half past seven”) as counted by instructed human coders.

Load the data from ./data/tutorial4/replication_data.csv and test:

  1. whether the findings replicated using the NHST framework
  2. what Bayesian statistics concludes.

Conduct these analyses in JASP

END


LS0tCnRpdGxlOiAnU29sdXRpb25zOiBCYXllc2lhbiBoeXBvdGhlc2lzIHRlc3RpbmcnCmF1dGhvcjogQiBLbGVpbmJlcmcKZGF0ZTogNSBNYXJjaCAyMDE5CnN1YnRpdGxlOiBEZXB0IG9mIFNlY3VyaXR5IGFuZCBDcmltZSBTY2llbmNlLCBVQ0wKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKKipTT0xVVElPTlMqKgoKLS0tCgpUdXRvcmlhbCA0LCBQcm9iYWJpbGl0eSwgU3RhdGlzdGljcyBhbmQgTW9kZWxsaW5nIDIsIEJTYyBTZWN1cml0eSBhbmQgQ3JpbWUgU2NpZW5jZSwgVUNMCgotLS0KCiMjIE91dGNvbWVzIG9mIHRoaXMgdHV0b3JpYWwKCkluIHRoaXMgdHV0b3JpYWwsIHlvdSB3aWxsOgoKLSBhcHBseSBOSFNUIGFuZCBCYXllc2lhbiBoeXBvdGhlc2lzIHRlc3RpbmcKICAgIC0gdXNpbmcgUgogICAgLSB1c2luZyBKQVNQCgotLS0KCioqVGFzayAxLTMgYXJlIHRvIGJlIGRvbmUgaW4gUi4gVGFzayA0LTYgaW4gSkFTUC4qKgoKIyMgVGFzayAxOiBFdmFsdWF0aW9uIG9mIGRyaXZpbmcgY2FtcGFpZ24KCllvdSBhcmUgdGFza2VkIHRvIGV2YWx1YXRlIGEgc2FmZSBkcml2aW5nIGNhbXBhaWduLiBPbiAxNTAgcm9hZCBjcm9zc2luZywgYSBsb2NhbCBwb2xpY2UgZm9yY2UgaW1wbGVtZW50ZWQgYSBzYWZlLWRyaXZpbmcgY21hcGlnbiB0aHJvdWdoIGFkcyB0aGF0IHByb21vdGUgYmV0dGVyIGRyaXZpbmcgcHJhY3RpY2VzLiBBcyBhIGNvbnRyb2wsIHRoZXkgY2hvc2UgMTUwIGNvbXBhcmFibGUgY3Jvc3NpbmdzIHdoZXJlIG5vIHN1Y2ggY2FtcGFpZ24gd2FzIHJ1bi4gQXQgZWFjaCBsb2NhaXRvbiwgcG9saWNlIG9mZmljZXJzIGV2YWx1YXRlZCB0aGUgZHJpdmluZyBiZWhhdmlvciBieSBhc3NpZ25pbmcgYSBzY29yZSBmcm9tIDAtMTAwLiBIaWdoZXIgc2NvcmVzLCBpbmRpY2F0ZSBiZXR0ZXIgZHJpdmluZyBwcmFjdGljZXMuCgpZb3UgYXJlIG5vdyBhc2tlZCB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdGhlIGZ1bmRpbmcgZm9yIHRoZSBjYW1wYWlnbiBzaG91bGQgYmUgZXh0ZW5kZWQuCgpQcm92aWRlIGFuIGFuc3dlciBpbiB0aGUgTkhTVCBmcmFtZXdvcmsgYW5kIGluIHRoZSBCYXllc2lhbiBmcmFtZXdvcmsuCgpUaGUgZGF0YSBhcmUgbG9jYXRlZCBpbiBgLi9kYXRhL3R1dG9yaWFsNC9kcml2aW5nX2RhdGEuY3N2YC4KCmBgYHtyfQojeW91ciBjb2RlIGhlcmUKCiMjbG9hZCBsaWJyYXJpZXMKbGlicmFyeShCYXllc0ZhY3RvcikKCiMjcmVhZCB0aGUgZGF0YQpkcml2aW5nX2RhdGEgPSByZWFkLmNzdignLi9kYXRhL3R1dG9yaWFsNC9kcml2aW5nX2RhdGEuY3N2JywgaGVhZGVyPVQpCgojI2NoZWNrIGZvciBhbnkgZGF0YSBwcm9ibGVtcy9taXNzaW5nIHZhbHVlcwpzdW1tYXJ5KGRyaXZpbmdfZGF0YSRzYWZlX2RyaXZpbmdfc2NvcmUpCgojIyNleGNsdWRlIHRoZSBzY29yZSB0aGF0IGlzIGhpZ2hlciB0aGFuIDEwMApkcml2aW5nX2RhdGEgPSBkcml2aW5nX2RhdGFbZHJpdmluZ19kYXRhJHNhZmVfZHJpdmluZ19zY29yZSA8PSAxMDAsIF0KCiMjbG9vayBhdCB0aGUgZGF0YQpoZWFkKGRyaXZpbmdfZGF0YSkKCiMjZ2V0IHRoZSBtZWFucwp0YXBwbHkoZHJpdmluZ19kYXRhJHNhZmVfZHJpdmluZ19zY29yZSwgZHJpdmluZ19kYXRhJGludGVydmVudGlvbiwgbWVhbikKCiMjTkhTVAp0LnRlc3QoZm9ybXVsYSA9IHNhZmVfZHJpdmluZ19zY29yZSB+IGludGVydmVudGlvbiwgZGF0YT1kcml2aW5nX2RhdGEpCgojI0JheWVzaWFuCnR0ZXN0QkYoZm9ybXVsYSA9IHNhZmVfZHJpdmluZ19zY29yZSB+IGludGVydmVudGlvbiwgZGF0YT1kcml2aW5nX2RhdGEpCmBgYAoKV2hhdCBkbyB5b3UgYWR2aWNlPyBTaG91bGQgdGhlIGZ1bmRpbmcgYmUgY29udGludWVkPwoKYGBge3J9CiN0eXBlIHlvdXIgYW5zd2VyIGhlcmUKCiMgTkhTVCByZXZlYWxzIG5vIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGkuZS4gbGl0dGxlIGluZm9ybWF0aXZlIHZhbHVlIAojIC4uLiB3ZSBjYW5ub3Qgc2F5IHRoYXQgdGhleSBkaWZmZXIsIGJ1dCBjYW4gYWxzbyBub3QgY29uY2x1ZGUgdGhhdCB0aGVyZSBpcyBubyBlZmZlY3QKIyBCYXllc2lhbiBoeXAgdGVzdGluZyBzaG93ZWQgYSBCRjEwIG9mIDAuNjk2LCBjb252ZXJzZWx5LCBCRjAxID0gMS8wLjY5NiA9IDEuNDQKIyAuLi4gdGhlIGRhdGEgd2VyZSAxLjQ0IHRpbWVzIG1vcmUgbGlrZWx5IHVuZGVyIEgwIChpLmUuIG5vIGRpZmZlcmVuY2UpIHRoYW4gdW5kZXIgSEEgKGkuZS4gdGhhdCB0aGVyZSBpcyBhIGRpZmZlcmVuY2UpCiMgLi4uIHRoaXMgaXMgY29uc2lkZXJlZCBhbmVjZG90YWwgZXZpZGVuY2UgKGh0dHA6Ly9kYW5pZWxsYWtlbnMuYmxvZ3Nwb3QuY29tLzIwMTYvMDEvcG93ZXItYW5hbHlzaXMtZm9yLWRlZmF1bHQtYmF5ZXNpYW4tdC5odG1sKQoKIyB0YWtlbiB0b2dldGhlcjogd2UgY2Fubm90IGNvbmNsdWRlIG11Y2ggZnJvbSB0aGUgZGF0YS4gTm90ZSB0aGF0IGluIHRoZSBCYXllc2lhbiBmcmFtZXdvcmssIHdlIHdvdWxkIGVuY291cmFnZSBtb3JlIGRhdGEgdG8gYmUgY29sbGVjdGVkIHNpbmNlIHdlIHVwZGF0ZSB0aGUgZXZpZGVuY2UgY29uc3RhbnRseS4gSW4gdGhlIE5IU1QgZnJhbWV3b3JrLCBtb3JlIGRhdGEgd291bGQgbGVhZCB0byBzaWduaWZpY2FudCByZXN1bHRzIGFuZCBtaWdodCBub3QgYmUgZGVzaXJhYmxlLgpgYGAKCgojIyBUYXNrIDI6IFJldmlzaXRpbmcgZnJhdWQgZGF0YQoKTG9hZCB0aGUgZGF0YWZyYW1lIGBkYW1hZ2VfZGF0YWAgZnJvbSBgLi9kYXRhL3R1dG9yaWFsNC9hbmFseXN0X2RhdGEuUkRhdGFgLiBJbiB0aGF0IGRhdGFmcmFtZSwgeW91IGhhdmUgMTAwMCBvYnNlcnZhdGlvbnMgZWFjaCBmb3IganVuaW9yIGFuZCBzZW5pb3IgYW5hbHlzdHMgYW5kIHRoZSBkYW1hZ2UgdGhleSBjYXVzZWQgZm9yIHRoZWlyIGVtcGxveWVycyBpbiBmaW5lIHRoYXQgbmVlZGVkIHRvIGJlIHBhaWQgZm9yIGNvbXBsaWFuY2UgaXNzdWVzLiBZb3UgYXJlIGluIGNoYXJnZSBvZiBsZWFkaW5nIGEgbmV3LCBiZXR0ZXIgc3RhdGlzdGljYWwgaW5zaWdodHMgdGVhbSBhbmQgeW91ciBlbXBsb3llciBhc2tzIHlvdSB3aGV0aGVyIGp1bmlvciBvciBzZW5pb3IgYW5hbHlzdHMgYXJlIG1vcmUgcHJvYmxlbWF0aWMuCgpQcm92aWRlIGFuIGFuc3dlciBmcm9tIGJvdGggdGhlIGZyZXF1ZW50aXN0IGFuZCB0aGUgQmF5ZXNpYW4gcGVyc3BlY3RpdmUuCgpgYGB7cn0KI3lvdXIgY29kZSBoZXJlCgojI2xvYWQgdGhlIGRhdGEKbG9hZCgnZGF0YS90dXRvcmlhbDQvYW5hbHlzdF9kYXRhLlJEYXRhJykKCiMjbG9vayBhdCB0aGUgZGF0YQpoZWFkKGRhbWFnZV9kYXRhKQoKIyNnZXQgdGhlIG1lYW5zCnRhcHBseShkYW1hZ2VfZGF0YSRkYW1hZ2VfY2F1c2VkLCBkYW1hZ2VfZGF0YSRhbmFseXN0X2xldmVsLCBtZWFuKQoKIyNOSFNUCnQudGVzdChkYW1hZ2VfY2F1c2VkIH4gYW5hbHlzdF9sZXZlbCwgZGF0YT1kYW1hZ2VfZGF0YSkKCiMjIyBzaWduaWZpY2FudCBkaWZmZXJlbmNlOiBjb25jbHVzaW9uIGlzIHRoYXQganVuaW9yID4gc2VuaW9yCgojIyBlZmZlY3Qgc2l6ZQpkID0gMjMuOTQqKHNxcnQoMS8xMDAwICsgMS8xMDAwKSkKZAoKIyMgbGFyZ2UgZWZmZWN0IHNpemUKCgojIyBCYXllc2lhbgp0dGVzdEJGKGZvcm11bGEgPSBkYW1hZ2VfY2F1c2VkIH4gYW5hbHlzdF9sZXZlbCwgZGF0YT1kYW1hZ2VfZGF0YSkKCiMjIyB2ZXJ5IGxhcmdlIEJGMTA6IGV4dHJlbWUgZXZpZGVuY2UgZm9yIGp1bmlvciA+IHNlbmlvcgpgYGAKCiMjIFRhc2sgMzogT3JpZ2luYWwgZGF0YQoKWW91IHdpbGwgdXNlIGRhdGEgZnJvbSBhIHBhcGVyIHB1Ymxpc2hlZCBpbiBBcHBsaWVkIENvZ25pdGl2ZSBQc3ljaG9sb2d5LiBUaGUgcGFwZXIgWyhPQSBhdCBodHRwczovL29ubGluZWxpYnJhcnkud2lsZXkuY29tL2RvaS9mdWxsLzEwLjEwMDIvYWNwLjM0MzkpXShodHRwczovL29ubGluZWxpYnJhcnkud2lsZXkuY29tL2RvaS9mdWxsLzEwLjEwMDIvYWNwLjM0MzkpIHJlcGxpY2F0ZWQgYW4gZXhwZXJpbWVudCB0aGF0IGZvdW5kIHRoYXQgcGVvcGxlIHdobyBhcmUgZGVjZXB0aXZlIGFib3V0IHRoZWlyIGZ1dHVyZSBwbGFucyBzdHJ1Z2dsZSB0byBiZSBhcyBkZXRhaWxlZCBhcyB0cnV0aC10ZWxsZXJzLiBIZXJlLCB0aGUgb3V0Y29tZSB2YXJpYWJsZSBvZiBpbnRlcmVzdCB3YXMgdGhlIG51bWJlciBvZiBzcGVjaWZpYyB0aW1lIHJlZmVyZW5jZXMgaW4gdGhlIHBhcnRpY2lwYW50cycgYW5zd2VycyB0byBpbnRlcnZpZXcgcXVlc3Rpb25zIChlLmcuICI5YW0iLCAiaGFsZiBwYXN0IHNldmVuIikgYXMgY291bnRlZCBieSBpbnN0cnVjdGVkIGh1bWFuIGNvZGVycy4KCkxvYWQgdGhlIGRhdGEgZnJvbSBgLi9kYXRhL3R1dG9yaWFsNC9yZXBsaWNhdGlvbl9kYXRhLmNzdmAgYW5kIHRlc3Q6CgoxLiB3aGV0aGVyIHRoZSBmaW5kaW5ncyByZXBsaWNhdGVkIHVzaW5nIHRoZSBOSFNUIGZyYW1ld29yawoyLiB3aGF0IEJheWVzaWFuIHN0YXRpc3RpY3MgY29uY2x1ZGVzLgoKYGBge3J9CiN5b3VyIGNvZGUgaGVyZQojIyBsb2FkIHRoZSBkYXRhCnJlcGxpY2F0aW9uX2RhdGEgPSByZWFkLmNzdignLi9kYXRhL3R1dG9yaWFsNC9yZXBsaWNhdGlvbl9kYXRhLmNzdicsIGhlYWRlcj1UKQoKIyNOSFNUIHQtdGVzdCAobm90ZTogd2UgaGF2ZSBhIGRpcmVjdGlvbiBoZXJlISkKdC50ZXN0KHJlcGxpY2F0aW9uX2RhdGEkc3BlY2lmaWNfdGltZV9yZWZzIH4gcmVwbGljYXRpb25fZGF0YSRjb25kaXRpb24sIGFsdGVybmF0aXZlID0gJ2cnKQoKIyNCYXllc2lhbiB0ZXN0CnR0ZXN0QkYoZm9ybXVsYSA9IHNwZWNpZmljX3RpbWVfcmVmcyB+IGNvbmRpdGlvbgogICAgICAgICwgZGF0YSA9IHJlcGxpY2F0aW9uX2RhdGEpCmBgYAoKV2hhdCBpcyB5b3VyIGNvbmNsdXNpb24/CgpgYGB7cn0KI3dyaXRlIHlvdXIgYW5zd2VyIGhlcmUKCiMtIE5IU1QgdC10ZXN0IGlzIG5vbi1zaWduaWZpY2FueTogYWxsIHdlIGNhbiBzYXkgaXMgdGhhdCB3ZSBkbyBub3QgcmVqZWN0IEgwCiMtIEJGMTAgaXMgMC4yNAojLSBpbiBvdGhlciB3b3JkczogQkYwMSBpcyAxLzAuMjQgPSA0LjE3OyB0aGlzIGlzIHN1YnN0YW50aWFsIGV2aWRlbmNlIGZvciBIMCBvdmVyIEgxCiMtIHdlIGhhdmUgdGh1cyBldmlkZW5jZSB0aGF0IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UKYGBgCgoKLS0tCgojIyBUYXNrIDQ6ICJFdmFsdWF0aW9uIG9mIGRyaXZpbmcgY2FtcGFpZ24iIGluIEpBU1AKCllvdSBhcmUgdGFza2VkIHRvIGV2YWx1YXRlIGEgc2FmZSBkcml2aW5nIGNhbXBhaWduLiBPbiAxNTAgcm9hZCBjcm9zc2luZywgYSBsb2NhbCBwb2xpY2UgZm9yY2UgaW1wbGVtZW50ZWQgYSBzYWZlLWRyaXZpbmcgY21hcGlnbiB0aHJvdWdoIGFkcyB0aGF0IHByb21vdGUgYmV0dGVyIGRyaXZpbmcgcHJhY3RpY2VzLiBBcyBhIGNvbnRyb2wsIHRoZXkgY2hvc2UgMTUwIGNvbXBhcmFibGUgY3Jvc3NpbmdzIHdoZXJlIG5vIHN1Y2ggY2FtcGFpZ24gd2FzIHJ1bi4gQXQgZWFjaCBsb2NhaXRvbiwgcG9saWNlIG9mZmljZXJzIGV2YWx1YXRlZCB0aGUgZHJpdmluZyBiZWhhdmlvciBieSBhc3NpZ25pbmcgYSBzY29yZSBmcm9tIDAtMTAwLiBIaWdoZXIgc2NvcmVzLCBpbmRpY2F0ZSBiZXR0ZXIgZHJpdmluZyBwcmFjdGljZXMuCgpZb3UgYXJlIG5vdyBhc2tlZCB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdGhlIGZ1bmRpbmcgZm9yIHRoZSBjYW1wYWlnbiBzaG91bGQgYmUgZXh0ZW5kZWQuCgpQcm92aWRlIGFuIGFuc3dlciBpbiB0aGUgTkhTVCBmcmFtZXdvcmsgYW5kIGluIHRoZSBCYXllc2lhbiBmcmFtZXdvcmsuCgoqKkNvbmR1Y3QgdGhlc2UgYW5hbHlzZXMgaW4gSkFTUCoqCgojIyBUYXNrIDU6ICJSZXZpc2l0aW5nIGZyYXVkIGRhdGEiIGluIEpBU1AKCkxvYWQgdGhlIGRhdGFmcmFtZSBgZGFtYWdlX2RhdGFgIGZyb20gYC4vZGF0YS90dXRvcmlhbDQvYW5hbHlzdF9kYXRhLlJEYXRhYC4gSW4gdGhhdCBkYXRhZnJhbWUsIHlvdSBoYXZlIDEwMDAgb2JzZXJ2YXRpb25zIGVhY2ggZm9yIGp1bmlvciBhbmQgc2VuaW9yIGFuYWx5c3RzIGFuZCB0aGUgZGFtYWdlIHRoZXkgY2F1c2VkIGZvciB0aGVpciBlbXBsb3llcnMgaW4gZmluZSB0aGF0IG5lZWRlZCB0byBiZSBwYWlkIGZvciBjb21wbGlhbmNlIGlzc3Vlcy4gWW91IGFyZSBpbiBjaGFyZ2Ugb2YgbGVhZGluZyBhIG5ldywgYmV0dGVyIHN0YXRpc3RpY2FsIGluc2lnaHRzIHRlYW0gYW5kIHlvdXIgZW1wbG95ZXIgYXNrcyB5b3Ugd2hldGhlciBqdW5pb3Igb3Igc2VuaW9yIGFuYWx5c3RzIGFyZSBtb3JlIHByb2JsZW1hdGljLgoKUHJvdmlkZSBhbiBhbnN3ZXIgZnJvbSBib3RoIHRoZSBmcmVxdWVudGlzdCBhbmQgdGhlIEJheWVzaWFuIHBlcnNwZWN0aXZlLgoKCioqQ29uZHVjdCB0aGVzZSBhbmFseXNlcyBpbiBKQVNQKioKCiMjIFRhc2sgNjogIk9yaWdpbmFsIGRhdGEiIGluIEpBU1AKCllvdSB3aWxsIHVzZSBkYXRhIGZyb20gYSBwYXBlciBwdWJsaXNoZWQgaW4gQXBwbGllZCBDb2duaXRpdmUgUHN5Y2hvbG9neS4gVGhlIHBhcGVyIFsoT0EgYXQgaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvZnVsbC8xMC4xMDAyL2FjcC4zNDM5KV0oaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvZnVsbC8xMC4xMDAyL2FjcC4zNDM5KSByZXBsaWNhdGVkIGFuIGV4cGVyaW1lbnQgdGhhdCBmb3VuZCB0aGF0IHBlb3BsZSB3aG8gYXJlIGRlY2VwdGl2ZSBhYm91dCB0aGVpciBmdXR1cmUgcGxhbnMgc3RydWdnbGUgdG8gYmUgYXMgZGV0YWlsZWQgYXMgdHJ1dGgtdGVsbGVycy4gSGVyZSwgdGhlIG91dGNvbWUgdmFyaWFibGUgb2YgaW50ZXJlc3Qgd2FzIHRoZSBudW1iZXIgb2Ygc3BlY2lmaWMgdGltZSByZWZlcmVuY2VzIGluIHRoZSBwYXJ0aWNpcGFudHMnIGFuc3dlcnMgdG8gaW50ZXJ2aWV3IHF1ZXN0aW9ucyAoZS5nLiAiOWFtIiwgImhhbGYgcGFzdCBzZXZlbiIpIGFzIGNvdW50ZWQgYnkgaW5zdHJ1Y3RlZCBodW1hbiBjb2RlcnMuCgpMb2FkIHRoZSBkYXRhIGZyb20gYC4vZGF0YS90dXRvcmlhbDQvcmVwbGljYXRpb25fZGF0YS5jc3ZgIGFuZCB0ZXN0OgoKMS4gd2hldGhlciB0aGUgZmluZGluZ3MgcmVwbGljYXRlZCB1c2luZyB0aGUgTkhTVCBmcmFtZXdvcmsKMi4gd2hhdCBCYXllc2lhbiBzdGF0aXN0aWNzIGNvbmNsdWRlcy4KCgoqKkNvbmR1Y3QgdGhlc2UgYW5hbHlzZXMgaW4gSkFTUCoqCgojIyBFTkQKCi0tLQoK