Read files

Function to read files

Read all files and arrange the data

Manually correction for problematic genes

Plot: reads without faetures

Plot: reads not aligned

Make DDS

Average samples

Pre-filtering

Compute DESeq2

estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
using 'apeglm' for LFC shrinkage. If used in published research, please cite:
    Zhu, A., Ibrahim, J.G., Love, M.I. (2018) Heavy-tailed prior distributions for
    sequence count data: removing the noise and preserving large differences.
    Bioinformatics. https://doi.org/10.1093/bioinformatics/bty895

In green genes highly expressed in vesicles but not in cells.

In red genes highly expressed in cells but not in the vesicles.

Warning message:
In as.data.frame(readDcf(file.path(rsconnectDir, deploymentFile)),  :
  internal error -3 in R_decompress1
gene average.ecoli average.vesicles baseMean log2FoldChange lfcSE stat pvalue padj link
lpp 64646.667 273260.00 194665.64 2.7100867 0.1649231 16.4324271 0.0000000 0.0000000 1
dps 73352.333 104814.67 94271.77 1.1328300 0.3580515 3.1638748 0.0015568 0.0038089 2
ompA 53168.000 85668.33 74126.32 1.3032907 0.2221734 5.8660971 0.0000000 0.0000000 3
ompX 38285.333 64484.67 55041.29 1.3798479 0.1702291 8.1058276 0.0000000 0.0000000 4
rplY 24667.000 55314.33 44060.72 1.7882230 0.2599776 6.8783720 0.0000000 0.0000000 5
rpmE 19532.000 54047.67 41185.99 2.0924890 0.1869062 11.1953951 0.0000000 0.0000000 6
ahpC 50614.667 28372.00 37659.91 -0.2064387 0.1678389 -1.2299811 0.2187042 0.3008149 7
rpoH 48413.000 27183.67 36044.40 -0.2018743 0.2170226 -0.9301995 0.3522678 0.4483504 8
gapC 22412.333 39333.33 33102.31 1.4537857 0.2662692 5.4598332 0.0000000 0.0000002 9
hdeA 35736.000 28136.33 31837.50 0.2734231 0.2239510 1.2209056 0.2221218 0.3041469 10
rpmB 26267.000 33569.00 31222.96 0.9773197 0.2015746 4.8484267 0.0000012 0.0000053 11
cspA 45035.000 19674.33 30006.64 -0.5648464 0.2802290 -2.0156602 0.0438355 0.0748492 12
rpsA 26070.000 30255.67 28927.54 0.8657653 0.2383232 3.6327362 0.0002804 0.0007942 13
infC 36116.000 22705.33 28386.98 -0.0381180 0.1918163 -0.1987216 0.8424805 0.8896777 14
acpP 10326.333 37813.00 27502.08 2.5030348 0.1815764 13.7850216 0.0000000 0.0000000 15
rpoA 26073.333 27151.67 27089.49 0.6940296 0.2222330 3.1229814 0.0017903 0.0043354 16
dnaK 9451.667 37137.67 26708.84 2.5646188 0.2996609 8.5584021 0.0000000 0.0000000 17
ompC 26710.667 25223.33 26105.22 0.5602536 0.2305841 2.4297144 0.0151107 0.0290267 18
rpmI 31232.667 21938.00 25972.47 0.1207508 0.1920288 0.6288160 0.5294695 0.6219050 19
rpmF 15268.333 29648.67 24379.94 1.5913510 0.2436218 6.5320550 0.0000000 0.0000000 20
rpsB 34217.667 17078.67 24045.40 -0.3626045 0.2671686 -1.3572123 0.1747138 0.2478780 21
rplJ 33518.333 16151.67 23005.48 -0.3892700 0.3617770 -1.0759943 0.2819298 0.3703093 22
yfcZ 14178.667 27684.00 22828.00 1.5874138 0.2481763 6.3963145 0.0000000 0.0000000 23
rplT 24491.333 20243.67 22225.90 0.3576544 0.1923944 1.8589647 0.0630321 0.1031808 24
rplA 23908.000 20424.67 22028.18 0.4180488 0.2094002 1.9964105 0.0458893 0.0778589 25
rpsO 15127.333 24091.00 20886.93 1.3008786 0.2730182 4.7648053 0.0000019 0.0000078 26
pflB 33086.333 12756.33 20865.55 -0.7231451 0.3137060 -2.3051685 0.0211571 0.0391402 27
yjbJ 2789.333 31627.33 20661.11 4.1305047 0.3227783 12.7967225 0.0000000 0.0000000 28
rplE 13804.333 22364.00 19219.17 1.3461619 0.2689524 5.0052050 0.0000006 0.0000025 29
rplM 10910.000 23917.67 19109.55 1.7829314 0.3007764 5.9277629 0.0000000 0.0000000 30
lpxC 26566.333 13702.67 18978.60 -0.3169031 0.2403540 -1.3184846 0.1873415 0.2625815 31
secY 16037.667 20148.33 18806.45 0.9644556 0.1951182 4.9429303 0.0000008 0.0000034 32
gltX 22734.667 14189.67 17808.83 -0.0561086 0.1857645 -0.3020418 0.7626202 0.8221849 33
rplN 14334.333 19489.00 17680.15 1.0887234 0.2504251 4.3475004 0.0000138 0.0000498 34
rpsD 12110.667 20754.33 17638.29 1.4131124 0.2267058 6.2332443 0.0000000 0.0000000 35
ymdF 4693.000 25141.67 17394.24 3.0476376 0.2777163 10.9739234 0.0000000 0.0000000 36
fusA 16450.667 17531.67 17311.76 0.7235594 0.2388876 3.0288699 0.0024547 0.0057681 37
tsf 17230.333 16289.67 16913.20 0.5591520 0.2386217 2.3432566 0.0191162 0.0357667 38
rplK 16293.333 16950.00 16908.63 0.6984038 0.2004159 3.4847726 0.0004926 0.0013289 39
osmB 1949.333 25727.00 16648.43 4.3694682 0.2666722 16.3851670 0.0000000 0.0000000 40
rpsC 21929.333 12484.67 16355.46 -0.1716489 0.3144539 -0.5458635 0.5851598 0.6711066 41
rplL 22092.333 12108.33 16110.93 -0.2126371 0.3638662 -0.5843827 0.5589629 0.6482283 42
rpmG 11825.667 17451.33 15503.66 1.1856309 0.2249170 5.2714141 0.0000001 0.0000007 43
yceD 13425.000 16019.67 15205.98 0.8935798 0.2470912 3.6163963 0.0002987 0.0008371 44
sra 5984.333 20606.00 15110.77 2.4067048 0.2201034 10.9344274 0.0000000 0.0000000 45
cspE 10217.000 17109.00 14630.06 1.3753946 0.1949544 7.0549563 0.0000000 0.0000000 46
rpsI 8151.333 18204.33 14466.02 1.8088648 0.3101922 5.8314330 0.0000000 0.0000000 47
eno 13187.667 14456.33 14107.16 0.7879623 0.2730388 2.8858981 0.0039030 0.0087439 48
rpsU 12084.000 14889.00 13990.25 0.9289145 0.2083660 4.4580911 0.0000083 0.0000312 49
zapB 8985.667 15554.33 13199.38 1.4250514 0.1802939 7.9040447 0.0000000 0.0000000 50
# coli = read.xlsx("C:/Users/rotemh.WISMAIN/Google Drive/@מגדל השן/vesicles/@78/e_coli.xlsx",1)
LS0tDQp0aXRsZTogIkUuIGNvbGkiDQphdXRob3I6ICJSb3RlbSBIYWRhciINCmRhdGU6ICIyMHRoIFRldmV0IDU3NzkiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCmxpYnJhcnkoREVTZXEyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh4bHN4KQ0KYGBgDQoNCiMjIyMgUmVhZCBmaWxlcw0KYGBge3IsIHdhcm5pbmcgPSBGLCBtZXNzYWdlID0gRiwgZWNobyA9IEZ9DQphbGwuZmlsZW5hbWVzID0gbGlzdC5maWxlcygiY291bnRzIikNCnBhdCA9ICJbVkRdRSINCnZlc2ljbGVzLmNvbGkuZmlsZXMgPSBncmVwKHggPSBhbGwuZmlsZW5hbWVzLCBwYXR0ZXJuID0gcGF0KQ0KdG9yZWFkID0gcGFzdGUwKCJjb3VudHMvIixhbGwuZmlsZW5hbWVzW3Zlc2ljbGVzLmNvbGkuZmlsZXNdKQ0KYGBgDQojIyMjIEZ1bmN0aW9uIHRvIHJlYWQgZmlsZXMNCmBgYHtyLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0KcmVhZGZpbGUgPSBmdW5jdGlvbihmaWxlLm5hbWUpIHsNCiAgcmVhZC5jc3YoZmlsZS5uYW1lLCBzZXAgPSAiXHQiLCBoZWFkZXIgPSBGKSAtPiB4DQogIG5hbWVzKHgpID0gcGFzdGUwKHN1YnN0cihmaWxlLm5hbWUsIDgsIDEwKSwgIi4iLCBzZXEoeCkpDQogIHJldHVybih4KQ0KfQ0KYGBgDQojIyMjIFJlYWQgYWxsIGZpbGVzIGFuZCBhcnJhbmdlIHRoZSBkYXRhDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCmRhdGEgPSBsYXBwbHkodG9yZWFkLCByZWFkZmlsZSkNCmNvbWJpbmVkID0gYmluZF9jb2xzKGRhdGFbMTo2XSkNCiMgQ2hlY2sgaWYgdGhlcmUgaXMgc29tZSBwcm9ibGVtIGFuZCBmaWxlcyBub3QgbWF0Y2ggKHBhcnRpYWwhKQ0KdHJ5KGlmKHN1bShjb21iaW5lZFssMV0gIT0gY29tYmluZWRbLDRdICYgY29tYmluZWRbLDFdICE9IGNvbWJpbmVkWyw0XSkgPiAwKQ0KICBzdG9wKCJjb2x1bW5zIGRvZXMgbm90IG1hdGNoIikpDQojIHRha2Ugb25seSBtZWFuaW5nIGZ1bGwgY29sdW1ucw0KY29tYmluZWQgPSBjb21iaW5lZFssYygxLDIsMyw2LDksMTIsMTUsMTgpXQ0KbmFtZXMoY29tYmluZWQpWzE6Ml08LSBjKCJjZHMiLCAiZ2VuZSIpDQojIyBUYWtlIGxhc3QgbGluZSB3aXRoIGdlbmVyYWwgZmVhdHVyZSBvZiBhbGlnbm1lbnQNCnN1bW0udGFibGUgPSBjb21iaW5lZFtncmVwKHggPSBjb21iaW5lZFssMV0sIHBhdHRlcm4gPSAiX18iKSxdDQpjb21iaW5lZCA9IGNvbWJpbmVkW2dyZXAoeCA9IGNvbWJpbmVkWywxXSwgcGF0dGVybiA9ICJfXyIsIGludmVydCA9IFQpLF0NCmBgYA0KIyMjIyBNYW51YWxseSBjb3JyZWN0aW9uIGZvciBwcm9ibGVtYXRpYyBnZW5lcw0KYGBge3IsIHdhcm5pbmcgPSBGLCBtZXNzYWdlID0gRiwgZWNobyA9IEZ9DQpsZXZlbHMoY29tYmluZWQkZ2VuZSk9YyhsZXZlbHMoY29tYmluZWQkZ2VuZSksICJkbmFaIiwgInliYVIiKQ0KY29tYmluZWQkZ2VuZVtncmVwKGNvbWJpbmVkJGNkcywgcGF0dGVybiA9ICJBQUM3MzU3MiIpXSA9ICJkbmFaIg0KY29tYmluZWQkZ2VuZVtncmVwKGNvbWJpbmVkJGNkcywgcGF0dGVybiA9ICJBWUMwODE4MCIpXSA9ICJ5YmFSIg0KYGBgDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCiMgR2VuZSBuYW1lcyBhcyByb3dzDQpyb3cubmFtZXMoY29tYmluZWQpPWNvbWJpbmVkJGdlbmUNCmBgYA0KIyMjIFBsb3Q6IHJlYWRzIHdpdGhvdXQgZmFldHVyZXMNCmBgYHtyLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0KbmZwID0gc3VtbS50YWJsZVsxLDM6OF0gLyAoYXBwbHkoY29tYmluZWRbLDM6OF0sIDIsIHN1bSkgKyBzdW1tLnRhYmxlWzEsMzo4XSkNCmJhcnBsb3QoYXMubnVtZXJpYyhuZnApKjEwMCwgbmFtZXMuYXJnID0gbmFtZXMobmZwKSkNCnRpdGxlKG1haW4gPSAiUmVhZHMgd2l0aG91dCBmZWF0dXJlIiwgeSA9ICIlIikNCmBgYA0KIyMjIFBsb3Q6IHJlYWRzIG5vdCBhbGlnbmVkDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCm5hciA9IHN1bW0udGFibGVbNCwzOjhdIC8gKGFwcGx5KGNvbWJpbmVkWywzOjhdLCAyLCBzdW0pICsgc3VtbS50YWJsZVsxLDM6OF0pDQpiYXJwbG90KGFzLm51bWVyaWMobmFyKSoxMDAsIG5hbWVzLmFyZyA9IG5hbWVzKG5hcikpDQp0aXRsZShtYWluID0gIlJlYWRzIG5vdCBhbGlnbmVkIiwgeSA9ICIlIikNCmBgYA0KIyMjIyMgTWFrZSBERFMNCmBgYHtyLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0KY3RzID0gYXMubWF0cml4KGNvbWJpbmVkWyxzZXEoMyxsZW5ndGgoY29tYmluZWQpKV0pDQoNCmNvbGRhdGEgPWRhdGEuZnJhbWUoc3RyX3N1Yihjb2xuYW1lcyhjdHMpLDEsLTQpLCByb3cubmFtZXMgPSBjb2xuYW1lcyhjdHMpKQ0KY29sbmFtZXMoY29sZGF0YSk9InNhbXBsZSINCmRkcyA9IERFU2VxRGF0YVNldEZyb21NYXRyaXgoY291bnREYXRhID0gY3RzLCBjb2xEYXRhID0gY29sZGF0YSwgZGVzaWduID0gfnNhbXBsZSkNCmBgYA0KIyMjIyBBdmVyYWdlIHNhbXBsZXMNCmBgYHtyLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0KIyBzdHJfc3ViKG5hbWVzKGNvbWJpbmVkKSwgMSwgLTQpDQpjb21iaW5lZCA9IGNvbWJpbmVkICU+JSBtdXRhdGUoDQphdmVyYWdlLmVjb2xpID0gYXBwbHkoY29tYmluZWRbLGdyZXAobmFtZXMoY29tYmluZWQpLCBwYXR0ZXJuID0gIkQiKV0sIDEsIG1lYW4pDQopICU+JSBtdXRhdGUoDQphdmVyYWdlLnZlc2ljbGVzID0gYXBwbHkoY29tYmluZWRbLGdyZXAobmFtZXMoY29tYmluZWQpLCBwYXR0ZXJuID0gIlYiKV0sIDEsIG1lYW4pDQopDQphdmcgPSBjb21iaW5lZFssYygyLDksMTApXQ0KIyBhdmcgJT4lIGFycmFuZ2UoZGVzYyhhdmVyYWdlLmVjb2xpKSkNCmBgYA0KIyMjIyBQcmUtZmlsdGVyaW5nDQpgYGB7ciBQcmUtZmlsdGVyaW5nLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0Ka2VlcCA8LSByb3dTdW1zKGNvdW50cyhkZHMpKSA+PSAxMA0KZGRzIDwtIGRkc1trZWVwLF0NCmRkcyRzYW1wbGUgPSBmYWN0b3IoZGRzJHNhbXBsZSwgbGV2ZWxzID0gYygiREUiLCAiVkUiKSkNCmBgYA0KIyMjIyBDb21wdXRlIERFU2VxMg0KYGBge3IsIHdhcm5pbmcgPSBGLCBtZXNzYWdlID0gRiwgZWNobyA9IEZ9DQpkZHMgPC0gREVTZXEoZGRzKQ0KcmVzIDwtIHJlc3VsdHMoZGRzKQ0KDQpzaHIgPSBsZmNTaHJpbmsoZGRzLCBjb2VmID0gcmVzdWx0c05hbWVzKGRkcylbMl0sIHR5cGU9ImFwZWdsbSIpDQojIHJlcyA9IGxmY1NocmluayhkZHMsIGNvZWYgPSByZXN1bHRzTmFtZXMoZGRzKVsyXSwgdHlwZT0iYXBlZ2xtIikNCg0KYGBgDQoNCmBgYHtyLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIGVjaG8gPSBGfQ0KdG9wbG90MSA9IGRhdGEuZnJhbWUocmVzKSAlPiUgDQogIHJvd25hbWVzX3RvX2NvbHVtbigpICU+JSAgDQogIGFycmFuZ2UobG9nMkZvbGRDaGFuZ2UpICU+JSANCiAgc2xpY2UoMToxMCkNCiMgdG9wbG90MSA9IHRvcGxvdDEgJT4lIHRvcF9uKDEwLCBsb2cyRm9sZENoYW5nZSkNCmdncGxvdCh0b3Bsb3QxLCBhZXMoeCA9IHJvd25hbWUsIHkgPSBsb2cyRm9sZENoYW5nZSwgZXJyb3IgPSBsZmNTRSkpICsNCiAgZ2VvbV9jb2woKSArIA0KICBnZ3RpdGxlKCJMb3dlc3QgZm9sZGNoYW5nZSBhYnVuZGFuY2UgaW4gdmVzaWNsZXMiKSArIA0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCnRvcGxvdDIgPSBkYXRhLmZyYW1lKHJlcykgJT4lDQogIHJvd25hbWVzX3RvX2NvbHVtbigpICU+JSAgDQogIGFycmFuZ2UoZGVzYyhsb2cyRm9sZENoYW5nZSkpIA0KdG9wbG90MiA9IHRvcGxvdDIgJT4lIHRvcF9uKDEwLCBsb2cyRm9sZENoYW5nZSkNCmdncGxvdCh0b3Bsb3QyLCBhZXMoeCA9IHJvd25hbWUsIHkgPSBsb2cyRm9sZENoYW5nZSwgZXJyb3IgPSBsZmNTRSkpICsNCiAgZ2VvbV9jb2woKSArIA0KICBnZ3RpdGxlKCJIaWdoZXN0IGZvbGRjaGFuZ2UgYWJ1bmRhbmNlIGluIHZlc2ljbGVzIikgKyANCiAgdGhlbWVfY2xhc3NpYygpDQoNCmBgYA0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCnRvcGxvdDMgPSBjb21iaW5lZCAlPiUNCiAgYXJyYW5nZShkZXNjKGF2ZXJhZ2UuZWNvbGkpKSANCnRvcGxvdDMgPSB0b3Bsb3QzICU+JSB0b3BfbigyMCwgYXZlcmFnZS5lY29saSkgJT4lIA0KICBzZWxlY3QoZ2VuZSwgYXZlcmFnZS5lY29saSwgYXZlcmFnZS52ZXNpY2xlcykgJT4lIA0KICBnYXRoZXIodmFsdWUgPSBhdmVyYWdlLmV4cHJlc3Npb24sIHNhbXBsZSwgMjozKQ0KdG9wbG90MyRzYW1wbGVbdG9wbG90MyRzYW1wbGUgPT0gImF2ZXJhZ2UuZWNvbGkiXSA9ICJFLmNvbGkiDQp0b3Bsb3QzJHNhbXBsZVt0b3Bsb3QzJHNhbXBsZSA9PSAiYXZlcmFnZS52ZXNpY2xlcyJdID0gInZlc2ljbGVzIg0KDQoNCmcxID0gZ2dwbG90KHRvcGxvdDMsIGFlcyh4ID0gcmVvcmRlcihnZW5lLCBzZXFfYWxvbmcoZ2VuZSksIHdpZHRoID0gNTAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLCBmaWxsID0gc2FtcGxlDQogICAgICAgICAgICAgICAgICAgICAgICAsIHkgPSBhdmVyYWdlLmV4cHJlc3Npb24pKSArIA0KICBnZW9tX2NvbChwb3NpdGlvbj0iZG9kZ2UiKSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpICsNCiAgbGFicyh4ID0gImdlbmVzIiwgdGl0bGUgPSAiVG9wIDIwIGV4cHJlc3NlZCBnZW5lcyIsIHkgPSAiYXZlcmFnZSBleHByZXNzaW9uIiwgZmlsbCA9ICIiKSsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUoIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjcwLCBoanVzdCA9IDAsIHZqdXN0ID0gMCkNCiAgICAgICAgLCB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MjApDQogICAgICAgICwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkNCiAgICAgICAgLCBsZWdlbmQucG9zaXRpb24gPSBjKDAuOCwgMC44KSkNCiMgZ2dwbG90bHkoZzEsIHdpZHRoID0gODAwKQ0KZzENCmBgYA0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCmxvbmcgPSAzMDANCnBlcmNlbnRhZ2UgPSB2ZWN0b3IobGVuZ3RoID0gbG9uZykNCmZvciAoaSBpbiBzZXFfYWxvbmcocGVyY2VudGFnZSkpew0KICB0YWtlID0gaQ0KICB0b3AxMDBiYWMgPSB1bmxpc3QoYXMubGlzdChjb21iaW5lZCAlPiUgYXJyYW5nZShkZXNjKGF2ZXJhZ2UuZWNvbGkpKSAlPiUgc2xpY2UoMTp0YWtlKSAlPiUgc2VsZWN0KGdlbmUpKSkNCiAgdG9wMTAwdmVzID0gdW5saXN0KGFzLmxpc3QoY29tYmluZWQgJT4lIGFycmFuZ2UoZGVzYyhhdmVyYWdlLnZlc2ljbGVzKSkgJT4lIHNsaWNlKDE6dGFrZSkgJT4lIHNlbGVjdChnZW5lKSkpDQogIHBlcmNlbnRhZ2VbaV0gPSBsZW5ndGgoaW50ZXJzZWN0KHRvcDEwMGJhYywgdG9wMTAwdmVzKSkvdGFrZQ0KfQ0KcGxvdChwZXJjZW50YWdlWzIwOjMwMF0sIHhsYWIgPSAidG9wIE4gZ2VuZXMgWzIwOjMwMF0iLCB5bGFiID0gInJhdGlvIikNCnRpdGxlKCJwZXJjZW50YWdlIG9mIGdlbmVzIGNvbW1vbiBpbiB2ZXNpY2xlcyBmcm9tIHRoZSBjb21tb24gZ2VuZXMgaW4gYmFjdGVyaWEiKQ0KDQoNCm1lYW4ocGVyY2VudGFnZVsyMDozMDBdKQ0KYGBgDQoNCg0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCnByZXVybCA9ICJodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2dlbmU/dGVybT0oIg0Kc3VmdXJsID0gIltnZW5lXSklMjBBTkQlMjAoRXNjaGVyaWNoaWElMjBjb2xpJTIwc3RyLiUyMEstMTIlMjBzdWJzdHIuJTIwTUcxNjU1W29yZ25dKSUyMEFORCUyMGFsaXZlW3Byb3BdJTIwTk9UJTIwbmV3ZW50cnlbZ2VuZV0mc29ydD13ZWlnaHQiDQoNCmFsbF90YWJsZSA9IHJlcyAlPiUgZGF0YS5mcmFtZSgpICU+JSANCnJvd25hbWVzX3RvX2NvbHVtbigpICU+JSANCnJlbmFtZShnZW5lID0gcm93bmFtZSkNCg0KYWxsX3RhYmxlID0gbWVyZ2UoY29tYmluZWRbLGMoMiw5LDEwKV0sIGFsbF90YWJsZSkNCmFsbF90YWJsZSRsaW5rcyA9IHBhc3RlMChwcmV1cmwsIGFsbF90YWJsZSRnZW5lLCBzdWZ1cmwpDQpgYGANCg0KDQo8cD48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDpncmVlbiI+PHNwYW4gc3R5bGU9ImNvbG9yOndoaXRlIj5JbiBncmVlbiBnZW5lcyBoaWdobHkgZXhwcmVzc2VkIGluIHZlc2ljbGVzIGJ1dCBub3QgaW4gY2VsbHM8L3NwYW4+PC9zcGFuPi48L3A+DQo8cD48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDpyZWQiPkluIHJlZCBnZW5lcyBoaWdobHkgZXhwcmVzc2VkIGluIGNlbGxzIGJ1dCBub3QgaW4gdGhlIHZlc2ljbGVzPC9zcGFuPi48L3A+DQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBlY2hvID0gRn0NCmZpZnR5ID0gNTANCnRvcDUwYmFjID0gYWxsX3RhYmxlICU+JSBhcnJhbmdlKGRlc2MoYXZlcmFnZS5lY29saSkpICU+JSBzbGljZSgxOmZpZnR5KQ0KdG9wNTB2ZXMgPSBhbGxfdGFibGUgJT4lIGFycmFuZ2UoZGVzYyhhdmVyYWdlLnZlc2ljbGVzKSkgJT4lIHNsaWNlKDE6ZmlmdHkpDQoNCmhpZ2hfaW5fYmFjdGVyaWFfbm90X2luX3ZlcyA9IHNldGRpZmYodG9wNTBiYWMkZ2VuZSwgdG9wNTB2ZXMkZ2VuZSkNCmhpZ2hfaW5fdmVzaWNsZXNfbm90X2luX2JhYyA9IHNldGRpZmYodG9wNTB2ZXMkZ2VuZSwgdG9wNTBiYWMkZ2VuZSkNCg0KbmljZVRhYmxlID0gYWxsX3RhYmxlICU+JQ0KZGF0YS5mcmFtZSgpICU+JQ0KYXJyYW5nZShkZXNjKGJhc2VNZWFuKSkgJT4lIA0KbXV0YXRlKGxpbmsgPSAxOm4oKSkgJT4lIA0KbXV0YXRlKGxpbmsgPSBjZWxsX3NwZWMobGluaywgbGluayA9IGxpbmtzLCBib2xkID0gVCwgY29sb3IgPSAiIzAwMDBGRiIsIHVuZGVybGluZSA9IFQpKSAlPiUgDQpzZWxlY3QoLWxpbmtzKSAlPiUgDQpzbGljZSgxOihmaWZ0eSkpDQoNCg0KDQpuaWNlVGFibGUgJT4lIA0Ka2FibGUoZXNjYXBlID0gRiwgYWxpZ24gPSAiYyIpICU+JSANCmthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpICU+JSANCnJvd19zcGVjKG1hdGNoKGhpZ2hfaW5fYmFjdGVyaWFfbm90X2luX3ZlcywgbmljZVRhYmxlJGdlbmUgLG5vbWF0Y2ggPSAwKQ0KICAgICAgICAgLCBiYWNrZ3JvdW5kID0gIiNENzI2MUUiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCnJvd19zcGVjKG1hdGNoKGhpZ2hfaW5fdmVzaWNsZXNfbm90X2luX2JhYywgbmljZVRhYmxlJGdlbmUgLG5vbWF0Y2ggPSAwKQ0KICAgICAgICAgLCBiYWNrZ3JvdW5kID0gImdyZWVuIiwgY29sb3IgPSAid2hpdGUiKSAlPiUgDQpyb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gImdyZXkiKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEwLCBjb2xvciA9ICIjMDAwMEZGIiwgdW5kZXJsaW5lID0gVCkNCg0KDQpgYGANCmBgYHtyfQ0KIyBjb2xpID0gcmVhZC54bHN4KCJDOi9Vc2Vycy9yb3RlbWguV0lTTUFJTi9Hb29nbGUgRHJpdmUvQNee15LXk9ecINeU16nXny92ZXNpY2xlcy9ANzgvZV9jb2xpLnhsc3giLDEpDQpgYGANCg0K