Science/Health Science/Data Science Module

Topic 7B: Big Data II (\(p\)-value adjustments)


Example R code solutions for the Week 7 Science/Health Science/Data Science Computer Lab, which uses data from Series GSE184932 on the NCBI Gene Expression Omnibus website are presented below.

This computer lab is designed to run alongside the content in the Introduction to Bioinformatics in R supplement. It might be helpful to have this material open as you look through these solutions.

1 Introduction

1.1 Example

No answer required.

2 The p.adjust function

2.1

Example R code is provided below.

base_p_values <- c(0.0003, 0.0085, 0.001, 0.0001, 0.045, 0.62, 0.009, 0.18, 0.92, 0.02)

2.2

There are 7 \(p\)-values below 0.05, so we would find 7 genes to be significantly differentially expressed.

2.3

p.adjust(base_p_values, method = "bonferroni")
##  [1] 0.003 0.085 0.010 0.001 0.450 1.000 0.090 1.000 1.000 0.200

2.4

Using the Bonferroni correction, we find that only 3 of the \(p\)-values are now below 0.05.

2.5

No answer required.

2.6

Example R code is provided below.

# Check all p-values
p.adjust(base_p_values, method = "holm")
##  [1] 0.0027 0.0595 0.0080 0.0010 0.1800 1.0000 0.0595 0.5400 1.0000 0.1000
p.adjust(base_p_values, method = "hochberg")
##  [1] 0.0027 0.0540 0.0080 0.0010 0.1800 0.9200 0.0540 0.5400 0.9200 0.1000
p.adjust(base_p_values, method = "hommel")
##  [1] 0.0027 0.0510 0.0080 0.0010 0.1800 0.9200 0.0540 0.5400 0.9200 0.1000
# Compute number of significant p-values
c(sum(p.adjust(base_p_values, method = "holm") < .05), 
  sum(p.adjust(base_p_values, method = "hochberg") < .05),
  sum(p.adjust(base_p_values, method = "hommel") < .05)
)
## [1] 3 3 3

All three methods result in 3 \(p\)-values below 0.05. The Hochberg and Hommel methods produce near-identical results.

3 False Discovery Rate

3.1

Example R code is provided below.

p.adjust(base_p_values, method = "fdr")
##  [1] 0.001500000 0.018000000 0.003333333 0.001000000 0.064285714 0.688888889
##  [7] 0.018000000 0.225000000 0.920000000 0.033333333

3.2

We see that there are 6 \(p\)-values below 0.05. The FDR method has been less stringent than the FWER methods, but has still removed one gene from contention.

4 SARS-CoV-2 Study \(p\)-values

4.1

No answer required

4.2

Example R code is provided below.

sars_data <- read.csv(file = "sars_data.csv", header = T)
head(sars_data)
##       X...gene_id  gene_name           gene_biotype class pvalue.Mock_vs_VIC_2h
## 1 ENSG00000227232     WASH7P unprocessed_pseudogene human             0.5676453
## 2 ENSG00000278267  MIR6859-1                  miRNA human             0.5187192
## 3 ENSG00000237613    FAM138A                 lncRNA human             0.5946020
## 4 ENSG00000238009 AL627309.1                 lncRNA human             0.5253038
## 5 ENSG00000268903 AL627309.6   processed_pseudogene human             0.9834197
## 6 ENSG00000269981 AL627309.7   processed_pseudogene human             0.6993969
##   pvalue.Mock_vs_VIC_8h pvalue.Mock_vs_VIC_24h
## 1             0.8024090              0.9301996
## 2             0.7168021              0.3527285
## 3             0.5627110              0.8575999
## 4             0.8059737              0.9089223
## 5             0.3954552              0.4628377
## 6             0.6707460              0.9460855
summary(sars_data)
##  X...gene_id         gene_name         gene_biotype          class          
##  Length:30491       Length:30491       Length:30491       Length:30491      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  pvalue.Mock_vs_VIC_2h pvalue.Mock_vs_VIC_8h pvalue.Mock_vs_VIC_24h
##  Min.   :0.00000       Min.   :0.00000       Min.   :0.0000        
##  1st Qu.:0.01217       1st Qu.:0.04519       1st Qu.:0.1410        
##  Median :0.33624       Median :0.40727       Median :0.4893        
##  Mean   :0.38358       Mean   :0.42098       Mean   :0.4710        
##  3rd Qu.:0.72346       3rd Qu.:0.75839       3rd Qu.:0.7836        
##  Max.   :0.99996       Max.   :0.99994       Max.   :1.0000

4.3

# First, we select only the values in the 
# `pvalue.Mock_vs_VIC_2h` column that are less than 0.01
sars_data_2h_base <- sars_data[sars_data$pvalue.Mock_vs_VIC_2h < 0.01,]
# Then we assess the number of rows remaining - each row represents a gene
nrow(sars_data_2h_base)
## [1] 7427

So based on the base \(p\)-values, there are 7427 differentially expressed genes at the 2 hour post-infection time point.

4.4

sars_data$pvalue_VIC_2h_fdr <- p.adjust(sars_data$pvalue.Mock_vs_VIC_2h, method = "fdr")

4.5

Example R code is provided below.

sars_data_low_pvalue_genes_2h <- sars_data[sars_data$pvalue_VIC_2h_fdr  < 0.01,]
dim(sars_data_low_pvalue_genes_2h)
## [1] 6179    8

We can see that following FDR correction we now have 6179 significant genes, a reduction of 1248 genes.

4.6

Example R code for the 8 hour time point is provided below:

sars_data_8h_base <- sars_data[sars_data$pvalue.Mock_vs_VIC_8h < 0.01,]
dim(sars_data_8h_base)
## [1] 5904    8
sars_data$pvalue_VIC_8h_fdr <- p.adjust(sars_data$pvalue.Mock_vs_VIC_8h, method = "fdr")
sars_data_low_pvalue_genes_8h <- sars_data[sars_data$pvalue_VIC_8h_fdr  < 0.01,]
dim(sars_data_low_pvalue_genes_8h)
## [1] 4652    9

Here we obtain 4652 FDR corrected significant genes, reduced from 5904 identified using the base \(p\)-values.


Example R code for the 24 hour time point is provided below:

sars_data_24h_base <- sars_data[sars_data$pvalue.Mock_vs_VIC_24h < 0.01,]
dim(sars_data_24h_base)
## [1] 3312    9
sars_data$pvalue_VIC_24h_fdr <- p.adjust(sars_data$pvalue.Mock_vs_VIC_24h, method = "fdr")
sars_data_low_pvalue_genes_24h <- sars_data[sars_data$pvalue_VIC_24h_fdr  < 0.01,]
dim(sars_data_low_pvalue_genes_24h)
## [1] 1907   10

Here we obtain 1907 FDR corrected significant genes, reduced from 3312 identified using the base \(p\)-values.

For this example, it might be important to compare gene expression differences between different time points in order to determine appropriate treatments (e.g. which drug(s) will be most efficacious when treating patients), or in a broader context, when compared with other data, to help identify between different coronavirus strains. Can you think of any other reasons?


That’s everything covered, well done.


References


These notes have been prepared by Rupert Kuveke. The copyright for the material in these notes resides with the author named above, with the Department of Mathematics and Statistics and with La Trobe University. Copyright in this work is vested in La Trobe University including all La Trobe University branding and naming. Unless otherwise stated, material within this work is licensed under a Creative Commons Attribution-Non Commercial-Non Derivatives License BY-NC-ND.

LS0tDQp0aXRsZTogIlNUTTEwMDE6IENvbXB1dGVyIExhYiA3QiBTb2x1dGlvbnMiDQpvdXRwdXQ6DQogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjogDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KYmlibGlvZ3JhcGh5OiBTVE0xMDAxX0RTX0NMX3JlZmVyZW5jZXMuYmliIA0KbGluay1jaXRhdGlvbnM6IHllcw0KLS0tDQoNCjxzdHlsZT4NCiNUT0Mgew0KICBiYWNrZ3JvdW5kOiB1cmwoImh0dHBzOi8vd3d3LmxhdHJvYmUuZWR1LmF1L19tZWRpYS9sYS10cm9iZS1hcGkvdjUvaW1nL2xvZ28uc3ZnIik7DQogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsNCiAgcGFkZGluZy10b3A6IDgwcHggIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCjwvc3R5bGU+DQoNCiMjIyBTY2llbmNlL0hlYWx0aCBTY2llbmNlL0RhdGEgU2NpZW5jZSBNb2R1bGUgey19DQoNCiMjIyBUb3BpYyA3QjogQmlnIERhdGEgSUkgKCRwJC12YWx1ZSBhZGp1c3RtZW50cykgey19DQoNCjxicj4NCg0KRXhhbXBsZSBSIGNvZGUgc29sdXRpb25zIGZvciB0aGUgW1dlZWsgNyBTY2llbmNlL0hlYWx0aCBTY2llbmNlL0RhdGEgU2NpZW5jZSBDb21wdXRlciBMYWJdKGh0dHBzOi8vcnB1YnMuY29tL0xUVV9TVE0xMDAxL1NNRFNNQ0w3KSwgd2hpY2ggdXNlcyBkYXRhIGZyb20gW1NlcmllcyBHU0UxODQ5MzIgb24gdGhlIE5DQkkgR2VuZSBFeHByZXNzaW9uIE9tbmlidXMgd2Vic2l0ZV0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW8vcXVlcnkvYWNjLmNnaT9hY2M9R1NFMTg0OTMyKSBhcmUgcHJlc2VudGVkIGJlbG93Lg0KDQpUaGlzIGNvbXB1dGVyIGxhYiBpcyBkZXNpZ25lZCB0byBydW4gYWxvbmdzaWRlIHRoZSBjb250ZW50IGluIHRoZSBbSW50cm9kdWN0aW9uIHRvIEJpb2luZm9ybWF0aWNzIGluIFIgc3VwcGxlbWVudF0oaHR0cHM6Ly9ib29rZG93bi5vcmcvcmVoay9zdG0xMDAxX2RzbV9pbnRyb2R1Y3Rpb25fdG9fYmlvaW5mb3JtYXRpY3NfaW5fci8pLiBJdCBtaWdodCBiZSBoZWxwZnVsIHRvIGhhdmUgdGhpcyBtYXRlcmlhbCBvcGVuIGFzIHlvdSBsb29rIHRocm91Z2ggdGhlc2Ugc29sdXRpb25zLg0KDQojIEludHJvZHVjdGlvbg0KIA0KIyMgRXhhbXBsZQ0KDQpObyBhbnN3ZXIgcmVxdWlyZWQuDQoNCiMgVGhlIGBwLmFkanVzdGAgZnVuY3Rpb24NCg0KIyMgDQoNCkV4YW1wbGUgUiBjb2RlIGlzIHByb3ZpZGVkIGJlbG93Lg0KDQpgYGAge3IsIGV2YWwgPSBULCBpbmNsdWRlID0gVH0NCmJhc2VfcF92YWx1ZXMgPC0gYygwLjAwMDMsIDAuMDA4NSwgMC4wMDEsIDAuMDAwMSwgMC4wNDUsIDAuNjIsIDAuMDA5LCAwLjE4LCAwLjkyLCAwLjAyKQ0KYGBgDQoNCiMjDQoNClRoZXJlIGFyZSA3ICRwJC12YWx1ZXMgYmVsb3cgMC4wNSwgc28gd2Ugd291bGQgZmluZCA3IGdlbmVzIHRvIGJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkLg0KDQoNCiMjIA0KDQpgYGAge3IsIGV2YWwgPSBULCBpbmNsdWRlID0gVCwgbWVzc2FnZSA9IEYsIHdhcm5pbmcgPSBGfQ0KcC5hZGp1c3QoYmFzZV9wX3ZhbHVlcywgbWV0aG9kID0gImJvbmZlcnJvbmkiKQ0KYGBgDQoNCiMjDQoNClVzaW5nIHRoZSBCb25mZXJyb25pIGNvcnJlY3Rpb24sIHdlIGZpbmQgdGhhdCBvbmx5IDMgb2YgdGhlICRwJC12YWx1ZXMgYXJlIG5vdyBiZWxvdyAwLjA1Lg0KDQojIw0KDQpObyBhbnN3ZXIgcmVxdWlyZWQuDQoNCiMjDQoNCkV4YW1wbGUgUiBjb2RlIGlzIHByb3ZpZGVkIGJlbG93Lg0KDQpgYGAge3IsIGV2YWwgPSBULCBpbmNsdWRlID0gVH0NCiMgQ2hlY2sgYWxsIHAtdmFsdWVzDQpwLmFkanVzdChiYXNlX3BfdmFsdWVzLCBtZXRob2QgPSAiaG9sbSIpDQpwLmFkanVzdChiYXNlX3BfdmFsdWVzLCBtZXRob2QgPSAiaG9jaGJlcmciKQ0KcC5hZGp1c3QoYmFzZV9wX3ZhbHVlcywgbWV0aG9kID0gImhvbW1lbCIpDQoNCiMgQ29tcHV0ZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgcC12YWx1ZXMNCmMoc3VtKHAuYWRqdXN0KGJhc2VfcF92YWx1ZXMsIG1ldGhvZCA9ICJob2xtIikgPCAuMDUpLCANCiAgc3VtKHAuYWRqdXN0KGJhc2VfcF92YWx1ZXMsIG1ldGhvZCA9ICJob2NoYmVyZyIpIDwgLjA1KSwNCiAgc3VtKHAuYWRqdXN0KGJhc2VfcF92YWx1ZXMsIG1ldGhvZCA9ICJob21tZWwiKSA8IC4wNSkNCikNCmBgYA0KDQpBbGwgdGhyZWUgbWV0aG9kcyByZXN1bHQgaW4gMyAkcCQtdmFsdWVzIGJlbG93IDAuMDUuDQpUaGUgSG9jaGJlcmcgYW5kIEhvbW1lbCBtZXRob2RzIHByb2R1Y2UgbmVhci1pZGVudGljYWwgcmVzdWx0cy4NCg0KIyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZQ0KDQojIw0KDQpFeGFtcGxlIFIgY29kZSBpcyBwcm92aWRlZCBiZWxvdy4NCg0KYGBgIHtyLCBldmFsID0gVCwgaW5jbHVkZSA9IFR9DQpwLmFkanVzdChiYXNlX3BfdmFsdWVzLCBtZXRob2QgPSAiZmRyIikNCmBgYA0KDQojIw0KDQpXZSBzZWUgdGhhdCB0aGVyZSBhcmUgNiAkcCQtdmFsdWVzIGJlbG93IDAuMDUuIFRoZSBGRFIgbWV0aG9kIGhhcyBiZWVuIGxlc3Mgc3RyaW5nZW50IHRoYW4gdGhlIEZXRVIgbWV0aG9kcywgYnV0IGhhcyBzdGlsbCByZW1vdmVkIG9uZSBnZW5lIGZyb20gY29udGVudGlvbi4NCg0KIyBTQVJTLUNvVi0yIFN0dWR5ICRwJC12YWx1ZXMNCg0KIyMNCg0KTm8gYW5zd2VyIHJlcXVpcmVkDQoNCiMjDQoNCkV4YW1wbGUgUiBjb2RlIGlzIHByb3ZpZGVkIGJlbG93Lg0KDQpgYGAge3IsIGV2YWwgPSBGLCBpbmNsdWRlID0gVH0NCnNhcnNfZGF0YSA8LSByZWFkLmNzdihmaWxlID0gInNhcnNfZGF0YS5jc3YiLCBoZWFkZXIgPSBUKQ0KYGBgDQoNCmBgYCB7ciwgZXZhbCA9IFQsIGluY2x1ZGUgPSBGfQ0Kc2Fyc19kYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSAiZGF0YS9zYXJzX2RhdGEuY3N2IiwgaGVhZGVyID0gVCkNCmBgYA0KDQpgYGAge3IsIGV2YWwgPSBULCBpbmNsdWRlID0gVH0NCmhlYWQoc2Fyc19kYXRhKQ0Kc3VtbWFyeShzYXJzX2RhdGEpDQpgYGANCg0KIyMNCg0KYGBgIHtyLCBldmFsID0gVCwgaW5jbHVkZSA9IFR9DQojIEZpcnN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgdmFsdWVzIGluIHRoZSANCiMgYHB2YWx1ZS5Nb2NrX3ZzX1ZJQ18yaGAgY29sdW1uIHRoYXQgYXJlIGxlc3MgdGhhbiAwLjAxDQpzYXJzX2RhdGFfMmhfYmFzZSA8LSBzYXJzX2RhdGFbc2Fyc19kYXRhJHB2YWx1ZS5Nb2NrX3ZzX1ZJQ18yaCA8IDAuMDEsXQ0KIyBUaGVuIHdlIGFzc2VzcyB0aGUgbnVtYmVyIG9mIHJvd3MgcmVtYWluaW5nIC0gZWFjaCByb3cgcmVwcmVzZW50cyBhIGdlbmUNCm5yb3coc2Fyc19kYXRhXzJoX2Jhc2UpDQpgYGANCg0KU28gYmFzZWQgb24gdGhlIGJhc2UgJHAkLXZhbHVlcywgdGhlcmUgYXJlIDc0MjcgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGF0IHRoZSAyIGhvdXIgcG9zdC1pbmZlY3Rpb24gdGltZSBwb2ludC4NCg0KIyMNCg0KYGBgIHtyLCBldmFsID0gVCwgaW5jbHVkZSA9IFR9DQpzYXJzX2RhdGEkcHZhbHVlX1ZJQ18yaF9mZHIgPC0gcC5hZGp1c3Qoc2Fyc19kYXRhJHB2YWx1ZS5Nb2NrX3ZzX1ZJQ18yaCwgbWV0aG9kID0gImZkciIpDQpgYGANCg0KIyMNCg0KRXhhbXBsZSBSIGNvZGUgaXMgcHJvdmlkZWQgYmVsb3cuDQoNCmBgYCB7ciwgZXZhbCA9IFQsIGluY2x1ZGUgPSBUfQ0Kc2Fyc19kYXRhX2xvd19wdmFsdWVfZ2VuZXNfMmggPC0gc2Fyc19kYXRhW3NhcnNfZGF0YSRwdmFsdWVfVklDXzJoX2ZkciAgPCAwLjAxLF0NCmRpbShzYXJzX2RhdGFfbG93X3B2YWx1ZV9nZW5lc18yaCkNCmBgYA0KDQpXZSBjYW4gc2VlIHRoYXQgZm9sbG93aW5nIEZEUiBjb3JyZWN0aW9uIHdlIG5vdyBoYXZlIDYxNzkgc2lnbmlmaWNhbnQgZ2VuZXMsIGEgcmVkdWN0aW9uIG9mIGByIDc0MjctNjE3OWAgZ2VuZXMuDQoNCiMjDQoNCkV4YW1wbGUgUiBjb2RlIGZvciB0aGUgOCBob3VyIHRpbWUgcG9pbnQgaXMgcHJvdmlkZWQgYmVsb3c6DQoNCmBgYCB7ciwgZXZhbCA9IFQsIGluY2x1ZGUgPSBUfQ0Kc2Fyc19kYXRhXzhoX2Jhc2UgPC0gc2Fyc19kYXRhW3NhcnNfZGF0YSRwdmFsdWUuTW9ja192c19WSUNfOGggPCAwLjAxLF0NCmRpbShzYXJzX2RhdGFfOGhfYmFzZSkNCnNhcnNfZGF0YSRwdmFsdWVfVklDXzhoX2ZkciA8LSBwLmFkanVzdChzYXJzX2RhdGEkcHZhbHVlLk1vY2tfdnNfVklDXzhoLCBtZXRob2QgPSAiZmRyIikNCnNhcnNfZGF0YV9sb3dfcHZhbHVlX2dlbmVzXzhoIDwtIHNhcnNfZGF0YVtzYXJzX2RhdGEkcHZhbHVlX1ZJQ184aF9mZHIgIDwgMC4wMSxdDQpkaW0oc2Fyc19kYXRhX2xvd19wdmFsdWVfZ2VuZXNfOGgpDQpgYGANCg0KSGVyZSB3ZSBvYnRhaW4gNDY1MiBGRFIgY29ycmVjdGVkIHNpZ25pZmljYW50IGdlbmVzLCByZWR1Y2VkIGZyb20gNTkwNCBpZGVudGlmaWVkIHVzaW5nIHRoZSBiYXNlICRwJC12YWx1ZXMuDQoNCjxicj4NCg0KRXhhbXBsZSBSIGNvZGUgZm9yIHRoZSAyNCBob3VyIHRpbWUgcG9pbnQgaXMgcHJvdmlkZWQgYmVsb3c6DQoNCmBgYCB7ciwgZXZhbCA9IFQsIGluY2x1ZGUgPSBUfQ0Kc2Fyc19kYXRhXzI0aF9iYXNlIDwtIHNhcnNfZGF0YVtzYXJzX2RhdGEkcHZhbHVlLk1vY2tfdnNfVklDXzI0aCA8IDAuMDEsXQ0KZGltKHNhcnNfZGF0YV8yNGhfYmFzZSkNCnNhcnNfZGF0YSRwdmFsdWVfVklDXzI0aF9mZHIgPC0gcC5hZGp1c3Qoc2Fyc19kYXRhJHB2YWx1ZS5Nb2NrX3ZzX1ZJQ18yNGgsIG1ldGhvZCA9ICJmZHIiKQ0Kc2Fyc19kYXRhX2xvd19wdmFsdWVfZ2VuZXNfMjRoIDwtIHNhcnNfZGF0YVtzYXJzX2RhdGEkcHZhbHVlX1ZJQ18yNGhfZmRyICA8IDAuMDEsXQ0KZGltKHNhcnNfZGF0YV9sb3dfcHZhbHVlX2dlbmVzXzI0aCkNCmBgYA0KDQpIZXJlIHdlIG9idGFpbiAxOTA3IEZEUiBjb3JyZWN0ZWQgc2lnbmlmaWNhbnQgZ2VuZXMsIHJlZHVjZWQgZnJvbSAzMzEyIGlkZW50aWZpZWQgdXNpbmcgdGhlIGJhc2UgJHAkLXZhbHVlcy4NCg0KRm9yIHRoaXMgZXhhbXBsZSwgaXQgbWlnaHQgYmUgaW1wb3J0YW50IHRvIGNvbXBhcmUgZ2VuZSBleHByZXNzaW9uIGRpZmZlcmVuY2VzIGJldHdlZW4gZGlmZmVyZW50IHRpbWUgcG9pbnRzIGluIG9yZGVyIHRvIGRldGVybWluZSBhcHByb3ByaWF0ZSB0cmVhdG1lbnRzIChlLmcuIHdoaWNoIGRydWcocykgd2lsbCBiZSBtb3N0IGVmZmljYWNpb3VzIHdoZW4gdHJlYXRpbmcgcGF0aWVudHMpLCBvciBpbiBhIGJyb2FkZXIgY29udGV4dCwgd2hlbiBjb21wYXJlZCB3aXRoIG90aGVyIGRhdGEsIHRvIGhlbHAgaWRlbnRpZnkgYmV0d2VlbiBkaWZmZXJlbnQgY29yb25hdmlydXMgc3RyYWlucy4gQ2FuIHlvdSB0aGluayBvZiBhbnkgb3RoZXIgcmVhc29ucz8NCg0KPGJyPg0KDQojIyMjIFRoYXQncyBldmVyeXRoaW5nIGNvdmVyZWQsIHdlbGwgZG9uZS4gIyMjIyB7LX0NCg0KPGJyPg0KDQojIFJlZmVyZW5jZXMgey0gI1JlZn0NCjxkaXYgaWQ9InJlZnMiPjwvZGl2Pg0KDQo8YnI+DQoNCjxmb250IGNvbG9yID0gImdyZXkiPg0KVGhlc2Ugbm90ZXMgaGF2ZSBiZWVuIHByZXBhcmVkIGJ5IFJ1cGVydCBLdXZla2UuIFRoZSBjb3B5cmlnaHQgZm9yIHRoZSBtYXRlcmlhbCBpbiB0aGVzZSBub3RlcyByZXNpZGVzIHdpdGggdGhlIGF1dGhvciBuYW1lZCBhYm92ZSwgd2l0aCB0aGUgRGVwYXJ0bWVudCBvZiBNYXRoZW1hdGljcyBhbmQgU3RhdGlzdGljcyBhbmQgd2l0aCBMYSBUcm9iZSBVbml2ZXJzaXR5LiBDb3B5cmlnaHQgaW4gdGhpcyB3b3JrIGlzIHZlc3RlZCBpbiBMYSBUcm9iZSBVbml2ZXJzaXR5IGluY2x1ZGluZyBhbGwgTGEgVHJvYmUgVW5pdmVyc2l0eSBicmFuZGluZyBhbmQgbmFtaW5nLiBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCwgbWF0ZXJpYWwgd2l0aGluIHRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uIENvbW1lcmNpYWwtTm9uIERlcml2YXRpdmVzIExpY2Vuc2UgDQo8YSBocmVmID0gImh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC80LjAvQ0MiIHRhcmdldD0iX2JsYW5rIj4gQlktTkMtTkQuIDwvYT4NCjwvZm9udD4=