Name: series-workflowc6q9l Phase: Failed StartedAt: 2026-08-10 11:17:38 +0000 UTC FinishedAt: 2026-08-10 11:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6q9l[0] Phase: Succeeded StartedAt: 2026-08-10 11:17:38 +0000 UTC FinishedAt: 2026-08-10 11:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6q9l[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 11:17:38 +0000 UTC FinishedAt: 2026-08-10 11:22:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVhM2NkYTAwZmNiYjY2ZjEzYzNmODAwODBkNmRjMWZlOTdjYjJjNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9wb3J0LmMgYi9uZXQvZGV2bGluay9wb3J0LmNcbmluZGV4IDE1MjhmMmQxNDhkZmMuLjZhOTg1N2JmNzlkYTEgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9wb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL3BvcnQuY1xuQEAgLTcwOCw3ICYjNDM7NzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC1cdTAwM2VvcHM7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fb3BzdGF0ZSBvcHN0YXRlO1xuJiM0MztcdGVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlO1xuIFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKHRiW0RFVkxJTktfUE9SVF9GVU5DVElPTl9BVFRSX0hXX0FERFJdIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFvcHMtXHUwMDNlcG9ydF9mbl9od19hZGRyX3NldCkge1xuQEAgLTcyMSw2ICYjNDM7NzI0LDIwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdCAgICBcJiMzNDtGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHN0YXRlIHNldHRpbmdcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4mIzQzO1x0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0IFx1MDAyNlx1MDAyNiAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7XG4mIzQzO1x0XHRlcnIgPSBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQoZGV2bGlua19wb3J0LCBcdTAwMjZzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2b3BzdGF0ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXRlID09IERFVkxJTktfUE9SVF9GTl9TVEFURV9BQ1RJVkUpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnMgY2FuJiMzOTt0IGJlIGNvbmZpZ3VyZWQgd2hlbiBwb3J0IGlzIHVwXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF0dHIgPSB0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9DQVBTXTtcbiBcdGlmIChhdHRyKSB7XG4gXHRcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEzY2RhMDBmY2JiNjZmMTNjM2Y4MDA4MGQ2ZGMxZmU5N2NiMmM3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDExOjE5OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvcG9ydC5jIGIvbmV0L2RldmxpbmsvcG9ydC5jCmluZGV4IDE1MjhmMmQxNDhkZmMuLjZhOTg1N2JmNzlkYTEgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9wb3J0LmMKQEAgLTcwOCw3ICYjNDM7NzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCwKIAkJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC0mZ3Q7b3BzOwomIzQzOwllbnVtIGRldmxpbmtfcG9ydF9mbl9vcHN0YXRlIG9wc3RhdGU7CiYjNDM7CWVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBubGF0dHIgKmF0dHI7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAodGJbREVWTElOS19QT1JUX0ZVTkNUSU9OX0FUVFJfSFdfQUREUl0gJmFtcDsmYW1wOwogCSAgICAhb3BzLSZndDtwb3J0X2ZuX2h3X2FkZHJfc2V0KSB7CkBAIC03MjEsNiAmIzQzOzcyNCwyMCBAQCBzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsCiAJCQkJICAgICYjMzQ7RnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBzdGF0ZSBzZXR0aW5nJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQomIzQzOwlpZiAoZGV2bGlua19wb3J0LSZndDthdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiAmYW1wOyZhbXA7CiYjNDM7CSAgICBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0ICZhbXA7JmFtcDsgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkgewomIzQzOwkJZXJyID0gb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldChkZXZsaW5rX3BvcnQsICZhbXA7c3RhdGUsCiYjNDM7CQkJCQkgICAgICZhbXA7b3BzdGF0ZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCWlmIChzdGF0ZSA9PSBERVZMSU5LX1BPUlRfRk5fU1RBVEVfQUNUSVZFKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnMgY2FuJiMzOTt0IGJlIGNvbmZpZ3VyZWQgd2hlbiBwb3J0IGlzIHVwJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJYXR0ciA9IHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX0NBUFNdOwogCWlmIChhdHRyKSB7CiAJCXN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGRldmxpbmsgUG9ydCBGdW5jdGlvbiBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2suIFNwZWNpZmljYWxseSwgaWYgdGhlIHBvcnQgZmxhdm91ciBpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCwgYW5kIHRoZSBgb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldGAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBidXQgdGhlIGB0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9TVEFURV1gIGF0dHJpYnV0ZSBpc24mIzM5O3QgZXhwbGljaXRseSBwcm92aWRlZCwgdGhlbiB0aGUgcGF0Y2ggY2FsbHMgYG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXRgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRWAsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvdWxkIGNyZWF0ZSBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24gaWYgdHJpZ2dlcmVkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlLCBhbmQsIGlmIHNvLCBkb2VzIGl0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBtYXliZSBldmVuIGZ1enppbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgIGlzIGNhbGxlZCBmcm9tLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBkZXZsaW5rIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBwcm9iYWJseSBzb21ld2hlcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyBhIHBvcnQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgIGluIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBjYWxsIGhpZXJhcmNoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvcG9ydC5jPTY5Nj1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mbl9zdGF0ZV9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzA1LVxubmV0L2RldmxpbmsvcG9ydC5jOjcwNjpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXG5uZXQvZGV2bGluay9wb3J0LmMtNzA3LVx0XHRcdFx0XHQgIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmM9Nzk4PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpwb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy04MTEtXG5uZXQvZGV2bGluay9wb3J0LmM6ODEyOlx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHBvcnQsIHRiLCBleHRhY2spO1xubmV0L2RldmxpbmsvcG9ydC5jLTgxMy1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgRGV2bGluayBQb3J0IEZ1bmN0aW9uIFNldCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBob3cgZGV2bGluayBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGRldmljZXMsIHNwZWNpZmljYWxseSBmb3Igc2V0dGluZyB1cCBwb3J0IGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY2FuIHNlZSB0aGF0IHRoaXMgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRgIHJvdXRpbmUgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gdGhlIGRldmxpbmsgbmV0bGluayBoYW5kbGVycy4gVGhhdOKAmXMgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBhY3Rpb24gaXMgaW5pdGlhdGVkLgoKTm93LCBteSBmb2N1cyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIEkgc2VlIHRoYXQgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRgIGZpcnN0IGNhbGxzIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSB2YWxpZGF0aW9uIHN0ZXAgaW52b2x2ZWQgYmVmb3JlIGFjdHVhbGx5IG1ha2luZyB0aGUgY2hhbmdlLiBTbWFydCBtb3ZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHZhbGlkYXRpb24gc3RlcCwgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHNhZmVseS4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaW5ncywgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGFuZCB0cmlnZ2VycyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGF0JiMzOTtzIGJlaW5nIHNldCwgd2hhdCYjMzk7cyBiZWluZyBhZmZlY3RlZCwgYW5kIG1heWJlIHdoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGNyb3AgdXAuIFRoaXMga2luZCBvZiBvdmVydmlldyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmM9NzA2PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzk3LVxubmV0L2RldmxpbmsvcG9ydC5jOjc5ODpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbm5ldC9kZXZsaW5rL3BvcnQuYy03OTktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTg1MD1pbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTg2Ny1cbm5ldC9kZXZsaW5rL3BvcnQuYzo4Njg6XHRcdGVyciA9IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoZGV2bGlua19wb3J0LCBhdHRyLCBleHRhY2spO1xubmV0L2RldmxpbmsvcG9ydC5jLTg2OS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBhcyBhIG5ldGxpbmsgaGFuZGxlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgbmV0bGluayBoYW5kbGVycyBhcmUgb2Z0ZW4gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSYjMzk7cmUgdHlwaWNhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiBiZSBjb21wbGV4LCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIHRoaW5ncyB0byB3b3JrIG9uLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSByZWxhdGVkIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBpZiBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb3ZlcmFsbCBkZXZsaW5rIGNvbmZpZ3VyYXRpb247IHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfbmxfcG9ydF9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jPTcwMj1jb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZGV2bGlua19ubF9vcHNbNzVdID0ge1xuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtNzM5LVx0XHQucHJlX2RvaXRcdD0gZGV2bGlua19ubF9wcmVfZG9pdF9wb3J0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYzo3NDA6XHRcdC5kb2l0XHRcdD0gZGV2bGlua19ubF9wb3J0X3NldF9kb2l0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03NDEtXHRcdC5wb3N0X2RvaXRcdD0gZGV2bGlua19ubF9wb3N0X2RvaXQsXG4tLVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaD01MD1pbnQgZGV2bGlua19ubF9wb3J0X2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTEtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjUyOmludCBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oLTUzLWludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTc5OD1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtODQ5LVxubmV0L2RldmxpbmsvcG9ydC5jOjg1MDppbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvZGV2bGluay9wb3J0LmMtODUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBJbnF1aXJ5OiBEZXZsaW5rIFByZXNlbmNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgZGV2bGlua2AuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHNldmVyYWwgcmVhc29ucywgd2hldGhlciBJJiMzOTttIHdvcmtpbmcgb24gbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVncmF0aW9uLCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG9yIGV2ZW4gYSBtb3JlIGdlbmVyYWwgc3lzdGVtcy1sZXZlbCBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFRoZSBzcGVjaWZpYyBLY29uZmlnIGZyYWdtZW50IGluIHF1ZXN0aW9uIHdpbGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvZiBgZGV2bGlua2Agc3VwcG9ydC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcmVsZXZhbnQgdHJpc3RhdGVzIHRoYXQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgdGhlIERldmxpbmsgTnVhbmNlKioKClJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEkmIzM5O20gaGl0dGluZyBhIG1lbnRhbCBzcGVlZCBidW1wIGhlcmUuLi4gaXMgYGRldmxpbmtgIGZ1bmN0aW9uYWxpdHkgYmFrZWQgKmRpcmVjdGx5KiBpbnRvIHRoZSBjb3JlIG9mIC5ORVQgQ29yZSwgb3IgaXMgaXQgZGVsaXZlcmVkIGFzIGEgY29tcG9uZW50IHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgLk5FVCBTREs/IFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIGNydWNpYWwgZm9yIGhvdyBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHRoaXMgdGhpbmcuIFNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYnVpbHQgaW4gZGlyZWN0bHkgaW1wYWN0cyB0aGUgZGVncmVlIHRvIHdoaWNoIGl0IGNhbiBiZSBjdXN0b21pemVkLiBJdCBhbHNvIGNoYW5nZXMgbXkgbWVudGFsIG1vZGVsIGZvciB0aGUgYnVpbGQgcHJvY2VzcywgdGhlIGRlcGxveW1lbnRzIGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBUaGlzIGZvdW5kYXRpb25hbCBrbm93bGVkZ2UgaXMgcHJldHR5IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgTWFrZWZpbGUqKgoKT2theSwgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGUgRGV2bGluayBzdWJzeXN0ZW0gcmVzaWRlcywgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgbWUgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gYnVpbGQgZGVwZW5kZW5jaWVzIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBEZXZsaW5rIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgYnVpbGQgZmxhZywgYSBkZXBlbmRlbmN5IGNoYWluLCBvciBldmVuIGp1c3QgY29uZmlybWluZyB0aGUgcHJlc2VuY2Ugb2YgYSB0YXJnZXQgSSBleHBlY3RlZCB0byBzZWUuIFBlcmhhcHMgSSYjMzk7bSBkaWFnbm9zaW5nIGEgYnVpbGQgZmFpbHVyZSByZWxhdGVkIHRvIERldmxpbmssIG9yIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNlbGVjdGl2ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgcGFydGljdWxhciBEZXZsaW5rIGZlYXR1cmUgZm9yIGEgY3VzdG9tIGJ1aWxkLiBUaGUgTWFrZWZpbGUgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgYWxsIG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgRGV2bGluayBidWlsZCBwcm9jZXNzLCBzbyB0aGF0IGlzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xubmV0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xubmV0L01ha2VmaWxlLTI3LW9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX0RFVkxJTktgKioKCk9rYXksIHNvIGBDT05GSUdfTkVUX0RFVkxJTktgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWNsYXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIEtub3dpbmcgaXRzIGxvY2F0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMsIHRvIGZpbmQgdGhlIHNvdXJjZS4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBoZWxwIG1lIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIGRldmljZS1zcGVjaWZpYyBvcHRpb24sIG9yIHBhcnQgb2YgYSBtb3JlIHNwZWNpYWxpemVkIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2VtZW50IGlzIHN0ZXAgb25lIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3OT1jb25maWcgTkVUX1NPQ0tfTVNHXG4tLVxubmV0L0tjb25maWctNDg2LVxubmV0L0tjb25maWc6NDg3OmNvbmZpZyBORVRfREVWTElOS1xubmV0L0tjb25maWctNDg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9vbGVhbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHNlbGVjdGVkLCBvciBhdCBsZWFzdCBpbmZsdWVuY2VkLCBieSBhIGRyaXZlciBzb21ld2hlcmUgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGJvb2xlYW4sIGl0JiMzOTtzIGVpdGhlciBvbiBvciBvZmYsIHNvIGl0cyB1c2UgaXMgcHJldHR5IGRlZmluaXRpdmUuIFRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGFjdHVhbGx5ICpzZXR0aW5nKiB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb2RlIHBhdGg/IFdoaWNoIGRyaXZlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQ/IE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgc3RhcnQgc2xldXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnPTQwPWNvbmZpZyBDUllQVE9fREVWX09DVEVPTlRYMl9DUFRcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZzo1MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnLTUzLVx0aGVscFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cdHNlbGVjdCBEUExMXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjc6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctOC1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MTEtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MTY4PWNvbmZpZyBDQU5fS1ZBU0VSX1BDSUVGRFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBQQ0llIEZEIGNhcmRzXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoxNzE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTMzLVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcJiMzNDtcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTcwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnPTE5PWNvbmZpZyBFTkFfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZz0xNjk9Y29uZmlnIFBEU19DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnOjE3MzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTc0LVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjA3PWNvbmZpZyBCTlhUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Mi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz02OD1jb25maWcgTElRVUlESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3NjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc9Mj1jb25maWcgRlNMX0RQQUEyX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXHRzZWxlY3QgRlNMX1hHTUFDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnOjg6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWc9Nj1jb25maWcgRlVOX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cdHNlbGVjdCBGVU5fQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQVJNNjQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xNDU9Y29uZmlnIElYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTAtXHRzZWxlY3QgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUyLVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjI5PWNvbmZpZyBJNDBFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzUtXHRzZWxlY3QgTElCSUVfQURNSU5RXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzAyLVx0c2VsZWN0IExJQklFX0ZXTE9HIGlmIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDQtXHRzZWxlY3QgUEFDS0lOR1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMS1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc9Nj1jb25maWcgUFJFU1RFUkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTI4PWNvbmZpZyBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzMtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz02PWNvbmZpZyBNTFg1X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMS1cdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZz02PWNvbmZpZyBNTFhGV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXHRzZWxlY3QgWFpfREVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6ODpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVx0c2VsZWN0IE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyNzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjMtXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yNS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWc9NzY9Y29uZmlnIFFFRFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cdHNlbGVjdCBSRUdNQVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzUtXHRpbXBseSBQSFlfVElfR01JSV9TRUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9Nj1jb25maWcgRElOR0hBSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctOC0gICAgZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6OTogICAgc2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTEwLSAgICBoZWxwXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTctXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbmRyaXZlcnMvcHRwL0tjb25maWc6MjE4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOS1cdHNlbGVjdCBDUkMxNlxuLS1cbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG5uZXQvZHNhL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbm5ldC9kc2EvS2NvbmZpZy0xMi1cdGltcGx5IE5FVF9TRUxGVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0ZGV2c2ltJiMzOTtzIERldmxpbmsgU3VwcG9ydCoqCgpPa2F5LCBzbyBgTkVUREVWU0lNYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYE5FVF9ERVZMSU5LYC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxldmVyYWdlIGl0IGZvciBzb21lIGRldmxpbmsgdGVzdGluZy4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBoYXMgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBkZXZsaW5rX3BvcnQtJmd0O2F0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgYG5ldGRldnNpbWAgYWN0dWFsbHkgKnN1cHBvcnQqIHRoYXQgc3BlY2lmaWMgZmxhdm9yLCBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYD8gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIHRlc3QgdG8gYmUgdmFsaWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGFuZCB2ZXJpZnkgaXRzIGNhcGFiaWxpdGllcy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBmbGF2b3IgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgb3IgZW11bGF0ZWQgd2l0aGluIHRoZSBzaW11bGF0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGxpa2UgeW91OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAqKgoKT2theSwgc28gSSYjMzk7dmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBhcHBsaWNhdGlvbiBvZiBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBkZXRlcm1pbmUgd2hhdCBkcml2ZXJzIGFjdHVhbGx5IGxldmVyYWdlIHRoaXMgc3BlY2lmaWMgZmxhdm9yIG9mIGBERVZMSU5LX1BPUlRgLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIGFuZCBzdGFydCBzZWFyY2hpbmcgd2l0aGluIHRoZSBkcml2ZXIgdHJlZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkLiBJZGVhbGx5LCBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBkZXZpY2VzIGFuZCBuZXR3b3JraW5nIGNoaXBzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhpcyBmbGF2b3VyIG9mIHBvcnQsIHdoaWNoIHdvdWxkIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBsYXRmb3JtcyBtaWdodCBiZSByZWxldmFudCBmb3IgbXkgaW50ZXJlc3RzLiBPbmNlIEkgZ2V0IHRoZSBuYW1lcyBvZiBzb21lIHJlbGV2YW50IGRyaXZlcnMsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhlaXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGBkZXZsaW5rYCBpbmZyYXN0cnVjdHVyZSB0byBjb25maWd1cmUgdGhlc2Ugc3BlY2lhbGl6ZWQgcG9ydHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhbmQgd2h5IHRoZXNlIHBvcnQgdHlwZXMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM9NjIzPWljZV9kZXZsaW5rX3BvcnRfbmV3X2NoZWNrX2F0dHIoc3RydWN0IGljZV9wZiAqcGYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM6NjI3Olx0aWYgKG5ld19hdHRyLVx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtNjI4LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGbGF2b3VyIG90aGVyIHRoYW4gcGNpc2YgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgaWNlX2RldmxpbmtfcG9ydF9zZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjgyMjogKiBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgcG9ydHMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODIzLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTg2MD1pbnQgaWNlX2RldmxpbmtfY3JlYXRlX3NmX3BvcnQoc3RydWN0IGljZV9keW5hbWljX3BvcnQgKmR5bl9wb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM6ODczOlx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXHRhdHRycy5wY2lfc2YucGYgPSBwZi1cdTAwM2Vody5wZl9pZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jPTI2NT1tbHg1X3NmX25ld19jaGVja19hdHRyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfbmV3X2F0dHJzICpuZXdfYXR0cixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zZi9kZXZsaW5rLmM6MjcwOlx0aWYgKG5ld19hdHRyLVx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI3MS1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RHJpdmVyIHN1cHBvcnRzIG9ubHkgU0YgcG9ydCBhZGRpdGlvblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBgaWNlYCBhbmQgYG1seDVgIGRyaXZlcnMgYXJlIHV0aWxpemluZyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IGBpY2VgIGlzIEludGVsLCBhbmQgYG1seDVgIGlzIE1lbGxhbm94LiBOb3csIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/CgpIb2xkIG9uLi4uIGBtbHg1YCBpcyBub3RvcmlvdXMgZm9yIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIEkgYmVsaWV2ZSBgaWNlYCBkb2VzIHRvbywgcmlnaHQ/IERhbW4uIFRoYXQmIzM5O3MgYSBodXJkbGUuIEJ1dCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRyaXZlcnMgb3V0IHRoZXJlIHVzaW5nIHRoaXMgcGFydGljdWxhciBmbGF2b3VyIG9mIERFVkxJTksgcG9ydC4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGZ1bGwgc2VhcmNoIG9mIHRoZSB0cmVlIGZvciBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBhbmQgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3Q9MTc9RGV2bGluayBwb3J0IGZsYXZvdXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdC0zNi0gICAgICAgdmlydHVhbCBmdW5jdGlvbiAoVkYpLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdDozNzogICAqIC0gYGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdC0zOC0gICAgIC0gVGhpcyBpbmRpY2F0ZXMgYW4gZXN3aXRjaCBwb3J0IHJlcHJlc2VudGluZyBhIHBvcnQgb2YgUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy02MjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcdGlmIChuZXdfYXR0ci1cdTAwM2VmbGF2b3VyICE9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Rmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjEtICogUmVzZXJ2ZSBhIHN1YmZ1bmN0aW9uIG51bWJlciBmb3IgdGhpcyBwb3J0LiBPbmx5IGNhbGxlZCBmb3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMy0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcdGF0dHJzLmZsYXZvdXIgPSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODc0LVx0YXR0cnMucGNpX3NmLnBmID0gcGYtXHUwMDNlaHcucGZfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcdGlmIChuZXdfYXR0ci1cdTAwM2VmbGF2b3VyICE9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0RyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cJiMzNDspO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg9MjAxPWVudW0gZGV2bGlua19wb3J0X2ZsYXZvdXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmgtMjIwLVx0XHRcdFx0ICAgICAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg6MjIxOlx0REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGLCAvKiBSZXByZXNlbnRzIGVzd2l0Y2ggcG9ydFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjItXHRcdFx0XHQgICAgICAqIGZvciB0aGUgUENJIFNGLiBJdCBpcyBhbiBpbnRlcm5hbFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0yMjk9c3RhdGljIGludCBkZXZsaW5rX25sX3BvcnRfYXR0cnNfcHV0KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTI2MS1cdFx0YnJlYWs7XG5uZXQvZGV2bGluay9wb3J0LmM6MjYyOlx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XG5uZXQvZGV2bGluay9wb3J0LmMtMjYzLVx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmM9NzA2PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzI2LVx0fVxubmV0L2RldmxpbmsvcG9ydC5jOjcyNzpcdGlmIChkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXHUwMDI2XHUwMDI2XG5uZXQvZGV2bGluay9wb3J0LmMtNzI4LVx0ICAgIG9wcy1cdTAwM2Vwb3J0X2ZuX3N0YXRlX2dldCBcdTAwMjZcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz05MTc9aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy05NDgtXHR9XG5uZXQvZGV2bGluay9wb3J0LmM6OTQ5Olx0aWYgKG5ld19hdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbm5ldC9kZXZsaW5rL3BvcnQuYy05NTAtXHQgICAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0xNDQ3PXZvaWQgZGV2bGlua19wb3J0X2F0dHJzX3BjaV9zZl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LCB1MzIgY29udHJvbGxlcixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ1My1cbm5ldC9kZXZsaW5rL3BvcnQuYzoxNDU0Olx0X19kZXZsaW5rX3BvcnRfYXR0cnNfc2V0KGRldmxpbmtfcG9ydCwgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKTtcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDU1LVx0YXR0cnMtXHUwMDNlcGNpX3NmLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0xNDg4PWludCBkZXZsX3BvcnRfZm5fZGV2bGlua19zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDkyLVxubmV0L2RldmxpbmsvcG9ydC5jOjE0OTM6XHRpZiAoV0FSTl9PTihkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciAhPSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgfHxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDk0LVx0XHQgICAgZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLnBjaV9zZi5leHRlcm5hbCkpXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTE1MjE9c3RhdGljIGludCBfX2RldmxpbmtfcG9ydF9waHlzX3BvcnRfbmFtZV9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcwLVx0XHRicmVhaztcbm5ldC9kZXZsaW5rL3BvcnQuYzoxNTcxOlx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XG5uZXQvZGV2bGluay9wb3J0LmMtMTU3Mi1cdFx0aWYgKGF0dHJzLVx1MDAzZXBjaV9zZi5leHRlcm5hbCB8fCBhdHRycy1cdTAwM2VwY2lfc2YuY29udHJvbGxlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9uIG9mIGEgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBhIHF1ZXN0aW9uIHBvcHMgdXA6IGBuZXRkZXZzaW1gICpkZWZpbml0ZWx5KiBkb2VzbiYjMzk7dCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2hpY2ggbWVhbnMgdGhpcyBuZXcgY29kZSBwYXRoIHRoYXQmIzM5O3MgYWRkZWQgaGVyZSBpcyBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgUUVNVSBzZXR1cHMuIFRoZSBwYXRjaCBpbmNsdWRlcyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJaWYgKGRldmxpbmtfcG9ydC0mZ3Q7YXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgJmFtcDsmYW1wOwoJICAgIG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXQgJmFtcDsmYW1wOyAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7CgkJZXJyID0gb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldChkZXZsaW5rX3BvcnQsICZhbXA7c3RhdGUsCgkJCQkJICAgICAmYW1wO29wc3RhdGUsIGV4dGFjayk7CmBgYAoKUmlnaHQsIGlmIHRoZSBmbGF2b3IgaXNuJiMzOTt0IGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLCB0aGF0IGVudGlyZSBjaHVuayBpcyBza2lwcGVkLiBTbyB0aGUgKm9ubHkqIHdheSB0aGlzIG5ldyBsb2dpYyBleGVjdXRlcyBpcyBpZiBgZGV2bGlua19wb3J0LSZndDthdHRycy5mbGF2b3VyYCBpcywgaW4gZmFjdCwgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIEFuZCB0aGF0IGZsYXZvdXIgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYGljZWAgYW5kIGBtbHg1YCBkcml2ZXJzLCBhbmQgdGhvc2UgZHJpdmVycyBhcmVuJiMzOTt0IGV2ZW4gZW11bGF0ZWQgaW4gUUVNVSwgb3IgYXQgbGVhc3QgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBhIHdheSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB0aGlzIG5ldyBjb2RlIHdvdWxkIGJlIGltcG9zc2libGUgdG8gdHJpZ2dlciBpbiBhbnkgb2YgbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VLgoKQnV0IGhvbGQgb24uLi4gQ291bGQgd2Ugc29tZWhvdyAqZm9yY2UqIHRoZSBjcmVhdGlvbiBvZiBhIHBvcnQgd2l0aCB0aGF0IGZsYXZvdXIgdXNpbmcgYGRldmxpbmtfcG9ydF9uZXdgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IHF1ZXN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGZsZXhpYmlsaXR5IGluIHBvcnQgY3JlYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfbmxfcG9ydF9uZXdfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmM9OTA3PWludCBkZXZsaW5rX25sX3BvcnRfdW5zcGxpdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTkxNi1cbm5ldC9kZXZsaW5rL3BvcnQuYzo5MTc6aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2RldmxpbmsvcG9ydC5jLTkxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdGAuCgoqKkRlY29uc3RydWN0aW5nIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgKioKCkFscmlnaHQsIEkmIzM5O20gZXhhbWluaW5nIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb246IGl0JiMzOTtzIGNsZWFybHkgaGFuZGxpbmcgdGhlIE5FVExJTksgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBuZXcgcG9ydHMgd2l0aGluIGEgZGV2bGluayBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIHNldHRpbmcgdXAgdGhlc2UgcG9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gcGFyc2UgdGhlIE5FVExJTksgbWVzc2FnZSwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgKGVzcGVjaWFsbHkgdGhvc2UgcHJvdmlkZWQgYnkgdGhlIHVzZXIpLCBhbmQgdGhlbiB0cmFuc2xhdGUgdGhvc2UgcGFyYW1ldGVycyBpbnRvIHRoZSBuZWNlc3NhcnkgY2FsbHMgdG8gdGhlIHVuZGVybHlpbmcgZGV2bGluayBkcml2ZXIuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIHdpbGwgbGlrZWx5IGludm9sdmUgYWxsb2NhdGluZyBzb21lIHBvcnQtc3BlY2lmaWMgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIChsaWtlIHRoZSBwb3J0IHR5cGUsIHBoeXNpY2FsIHBvcnQgZGV0YWlscywgYW5kIHBvdGVudGlhbGx5IGxpbmsgc2V0dGluZ3MgbGlrZSBNVFUsIHNwZWVkLCBhbmQgYXV0by1uZWdvdGlhdGlvbiwgcGx1cyB0aGUgYXNzb2NpYXRlZCBxdWV1ZXMpLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBwb3J0IHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZCBieSB0aGUgZGV2bGluayBjb3JlLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O20gaW1hZ2luaW5nIHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciB2YWxpZCBwYXJhbWV0ZXJzLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHBvcnQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW50ZWdyYXRlcyB3aXRoIGFueSBleGlzdGluZyBoYXJkd2FyZSBmZWF0dXJlcywgYW5kIHdpbGwgcHJvcGVybHkgdmFsaWRhdGUgYW55IHBhcmFtZXRlcnMgZnJvbSB0aGUgdXNlci4gQW5kIG9mIGNvdXJzZSwgbWFraW5nIHN1cmUgdGhlIHVzZXIgaXMgaW5mb3JtZWQgb2YgYW55IGlzc3Vlcy4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29uZmlybSBhbGwgcGFyYW1ldGVycyBhcmUgY29ycmVjdGx5IHZhbGlkYXRlZC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBvcnQgaXMgY29ycmVjdGx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGV2bGluayBjb3JlLCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgc28gdGhhdCBldmVyeXRoaW5nIHdvcmtzIGNvcnJlY3RseSwgY29uc2lzdGVudGx5LCBhbmQgcmVsaWFibHkuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgbm90aW5nIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbiBoYXMgb24gb3RoZXIgbW9kdWxlcyBvciBwYXJ0cyBvZiB0aGUgZGV2bGluayBzeXN0ZW0uIE5vdyBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNzpcdGludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA5MTg6XHR7XG4gOTE5Olx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiA5MjA6XHRcdHN0cnVjdCBkZXZsaW5rX3BvcnRfbmV3X2F0dHJzIG5ld19hdHRycyA9IHt9O1xuIDkyMTpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cdTAwM2VkZXZsaW5rO1xuIDkyMjpcdFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xuIDkyMzpcdFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbiA5MjQ6XHRcdGludCBlcnI7XG4gOTI1Olx0XG4gOTI2Olx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXBvcnRfbmV3KVxuIDkyNzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTI4Olx0XG4gOTI5Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfRkxBVk9VUl0gfHxcbiA5MzA6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSkge1xuIDkzMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1BvcnQgZmxhdm91ciBvciBQQ0kgUEYgYXJlIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDkzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzM6XHRcdH1cbiA5MzQ6XHRcdG5ld19hdHRycy5mbGF2b3VyID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSk7XG4gOTM1Olx0XHRuZXdfYXR0cnMucGZudW0gPVxuIDkzNjpcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9QRl9OVU1CRVJdKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0lOREVYXSkge1xuIDkzOTpcdFx0XHQvKiBQb3J0IGluZGV4IG9mIHRoZSBuZXcgcG9ydCBiZWluZyBjcmVhdGVkIGJ5IGRyaXZlci4gKi9cbiA5NDA6XHRcdFx0bmV3X2F0dHJzLnBvcnRfaW5kZXggPVxuIDk0MTpcdFx0XHRcdG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfSU5ERVhdKTtcbiA5NDI6XHRcdFx0bmV3X2F0dHJzLnBvcnRfaW5kZXhfdmFsaWQgPSB0cnVlO1xuIDk0MzpcdFx0fVxuIDk0NDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfQ09OVFJPTExFUl9OVU1CRVJdKSB7XG4gOTQ1Olx0XHRcdG5ld19hdHRycy5jb250cm9sbGVyID1cbiA5NDY6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0NPTlRST0xMRVJfTlVNQkVSXSk7XG4gOTQ3Olx0XHRcdG5ld19hdHRycy5jb250cm9sbGVyX3ZhbGlkID0gdHJ1ZTtcbiA5NDg6XHRcdH1cbiA5NDk6XHRcdGlmIChuZXdfYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXHUwMDI2XHUwMDI2XG4gOTUwOlx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xuIDk1MTpcdFx0XHRuZXdfYXR0cnMuc2ZudW0gPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9TRl9OVU1CRVJdKTtcbiA5NTI6XHRcdFx0bmV3X2F0dHJzLnNmbnVtX3ZhbGlkID0gdHJ1ZTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcbiA5NTU6XHRcdGVyciA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXBvcnRfbmV3KGRldmxpbmssIFx1MDAyNm5ld19hdHRycyxcbiA5NTY6XHRcdFx0XHRcdCAgICAgZXh0YWNrLCBcdTAwMjZkZXZsaW5rX3BvcnQpO1xuIDk1NzpcdFx0aWYgKGVycilcbiA5NTg6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTk6XHRcbiA5NjA6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuIDk2MTpcdFx0aWYgKCFtc2cpIHtcbiA5NjI6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA5NjM6XHRcdFx0Z290byBlcnJfb3V0X3BvcnRfZGVsO1xuIDk2NDpcdFx0fVxuIDk2NTpcdFx0ZXJyID0gZGV2bGlua19ubF9wb3J0X2ZpbGwobXNnLCBkZXZsaW5rX3BvcnQsIERFVkxJTktfQ01EX1BPUlRfTkVXLFxuIDk2NjpcdFx0XHRcdFx0ICAgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsIDAsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gZGV2bGluayBQb3J0IENyZWF0aW9uKioKCk9rYXksIHNvIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYSBuZXcgcG9ydCB3aXRoaW4gdGhlIGBkZXZsaW5rYCBmcmFtZXdvcmsuIFJpZ2h0LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBgZGV2bGluay0mZ3Q7b3BzLSZndDtwb3J0X25ld2AuIEhtbSwgc28gdGhhdCBtZWFucyB0aGUgY29yZSBwb3J0IGNyZWF0aW9uIGxvZ2ljIGlzIGRlbGVnYXRlZCB0byB0aGUgYGRldmxpbmtgIGRldmljZSYjMzk7cyBzcGVjaWZpYyBkcml2ZXIuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBkZWZpbmUgYW5kIGltcGxlbWVudCB0aGF0IGBwb3J0X25ld2Agb3BlcmF0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgcmlnaHQ/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgZHJpdmVyIGNvZGUgYW5kIHNlZSBob3cgdmFyaW91cyBuZXR3b3JrIGRldmljZXMgaGFuZGxlIHBvcnQgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBhbGwgdGhhdCBnb29kIHN0dWZmIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwucG9ydF9uZXdcXHMqPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTMyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGljZV9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTM0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMzUwOlx0LnBvcnRfbmV3ID0gaWNlX2RldmxpbmtfcG9ydF9uZXcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTM1MS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmM9MzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbWx4NV9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTM4OC0jaWZkZWYgQ09ORklHX01MWDVfU0ZfTUFOQUdFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzozODk6XHQucG9ydF9uZXcgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9uZXcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTM5MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgcG9ydF9uZXdgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKmljZSogYW5kICptbHg1KiBhcmUgdGhlIG9ubHkgb25lcyBjdXJyZW50bHkgaW1wbGVtZW50aW5nIGBwb3J0X25ld2AuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIGEgYnJvYWRlciBzZXQgb2YgbmV0d29yayBkcml2ZXJzIHRvIGhhdmUgaW1wbGVtZW50ZWQgdGhhdCBmdW5jdGlvbiBieSBub3cuIFdhaXQgYSBzZWNvbmQuLi4gKm5ldGRldnNpbSogZG9lc24mIzM5O3QgaW1wbGVtZW50IGBwb3J0X25ld2A/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB3aHkgYG5ldGRldnNpbWAgaXMgbWlzc2luZyB0aGUgYHBvcnRfbmV3YCBmZWF0dXJlIC0gSSB0aG91Z2h0IHRoYXQgd291bGQgaGF2ZSBiZWVuIHVzZWQgZm9yIHNpbXVsYXRpb24gcHVycG9zZXMuIE5lZWQgdG8gZmxhZyB0aGF0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSByZWxhdGl2ZWx5IGVhc3kgaW1wbGVtZW50YXRpb24gdG8gYWRkLCBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIHdoeSBgbmV0ZGV2c2ltYCBkb2VzIG5vdCBoYXZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnBvcnRfbmV3XFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXRkZXZzaW1gIERldmxpbmsgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGRldmxpbmsgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRldmxpbmsgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGluZ3MuIEFyZSB0aGV5IGFkaGVyaW5nIHRvIHRoZSBzdGFuZGFyZCBkZXZsaW5rIEFQST8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRldmlhdGlvbnMgb3Igb3B0aW1pemF0aW9ucz8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBjb3VsZCBiZSB1c2VkIGluIHNvbWUgZnV0dXJlIHdvcmsuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldmxpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQwOT1uc2ltX2Rldl9kZXZsaW5rX3RyYXBfZHJvcF9jb3VudGVyX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDI1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNi1cdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE2NDg9aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1My1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNjU0Olx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2NfbnMoXHUwMDI2bnNpbV9kZXZfZGV2bGlua19vcHMsIHNpemVvZigqbnNpbV9kZXYpLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTUtXHRcdFx0XHQgbnNpbV9idXNfZGV2LVx1MDAzZWluaXRpYWxfbmV0LCBcdTAwMjZuc2ltX2J1c19kZXYtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBgbnNpbV9kZXZfZGV2bGlua19vcHNgIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgY29kZSByZWxhdGVkIHRvIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBvciBmdW5jdGlvbnMgd2l0aGluIGEgc3BlY2lmaWMgZHJpdmVyIG9yIHN1YnN5c3RlbSByZWxhdGVkIHRvIHNpbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMuIEdpdmVuIHRoZSBgZGV2bGlua2AgcHJlZml4LCBJJiMzOTtkIHdhZ2VyIGl0JiMzOTtzIGdvdCBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBgZGV2bGlua2AgaW5mcmFzdHJ1Y3R1cmUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCByZWdpc3RlcmluZyBhIHNpbXVsYXRlZCBkZXZpY2Ugd2l0aGluIHRoZSBgZGV2bGlua2Agc3lzdGVtPyBPciBwZXJoYXBzIG1hbmFnaW5nIGl0cyByZXNvdXJjZXMsIGxpa2UgcG9ydHMgb3IgdmlydHVhbCBmdW5jdGlvbnMsIHRocm91Z2ggdGhlIGBkZXZsaW5rYCBpbnRlcmZhY2U/IEFyZSB0aGVyZSBjdXN0b20gYXR0cmlidXRlcyBvciBzdGF0aXN0aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGBuc2ltYCBkZXZpY2UgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQgd2l0aGluIGBkZXZsaW5rYCYjMzk7cyBzdHJ1Y3R1cmU/CgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2Agc3RydWN0dXJlLiBBcmUgdGhlcmUgYHByb2JlYCwgYHJlbW92ZWAsIGBnZXRfcGFyYW1zYCwgYHNldF9wYXJhbXNgLCBgYXR0cl9nZXRgLCBgYXR0cl9zZXRgIChvciBzaW1pbGFyKSBmdW5jdGlvbnM/IFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHR5cGVzIGZvciBlYWNoIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBvdXQgd2lsbCBiZSBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93LgoKRmluYWxseSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHNpbXVsYXRpb24gbG9naWMuIERvZXMgaXQgdHJpZ2dlciBhbnkgY2FsbGJhY2tzIG9yIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBgbnNpbWAgZnJhbWV3b3JrIGl0c2VsZj8gVGhpcyBjb3VsZCBpbnZvbHZlIGRldmljZSBlbXVsYXRpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBvciBvdGhlciBzaW11bGF0ZWQgYWN0aXZpdGllcy4gVW5kZXJzdGFuZGluZyB0aGF0IGxpbmthZ2UgYmV0d2VlbiBgZGV2bGlua2AgYW5kIGBuc2ltYCB3aWxsIGJlIGtleS4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbjE0MjY6XHRcdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXG4xNDI3Olx0XHQuZXN3aXRjaF9tb2RlX2dldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfZ2V0LFxuMTQyODpcdFx0LnN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zID0gREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSyxcbjE0Mjk6XHRcdC5yZWxvYWRfYWN0aW9ucyA9IEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCksXG4xNDMwOlx0XHQucmVsb2FkX2Rvd24gPSBuc2ltX2Rldl9yZWxvYWRfZG93bixcbjE0MzE6XHRcdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXG4xNDMyOlx0XHQuaW5mb19nZXQgPSBuc2ltX2Rldl9pbmZvX2dldCxcbjE0MzM6XHRcdC5mbGFzaF91cGRhdGUgPSBuc2ltX2Rldl9mbGFzaF91cGRhdGUsXG4xNDM0Olx0XHQudHJhcF9pbml0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2luaXQsXG4xNDM1Olx0XHQudHJhcF9hY3Rpb25fc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2FjdGlvbl9zZXQsXG4xNDM2Olx0XHQudHJhcF9ncm91cF9zZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfZ3JvdXBfc2V0LFxuMTQzNzpcdFx0LnRyYXBfcG9saWNlcl9zZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfcG9saWNlcl9zZXQsXG4xNDM4Olx0XHQudHJhcF9wb2xpY2VyX2NvdW50ZXJfZ2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX3BvbGljZXJfY291bnRlcl9nZXQsXG4xNDM5Olx0XHQucmF0ZV9sZWFmX3R4X3NoYXJlX3NldCA9IG5zaW1fbGVhZl90eF9zaGFyZV9zZXQsXG4xNDQwOlx0XHQucmF0ZV9sZWFmX3R4X21heF9zZXQgPSBuc2ltX2xlYWZfdHhfbWF4X3NldCxcbjE0NDE6XHRcdC5yYXRlX2xlYWZfdGNfYndfc2V0ID0gbnNpbV9sZWFmX3RjX2J3X3NldCxcbjE0NDI6XHRcdC5yYXRlX25vZGVfdHhfc2hhcmVfc2V0ID0gbnNpbV9ub2RlX3R4X3NoYXJlX3NldCxcbjE0NDM6XHRcdC5yYXRlX25vZGVfdHhfbWF4X3NldCA9IG5zaW1fbm9kZV90eF9tYXhfc2V0LFxuMTQ0NDpcdFx0LnJhdGVfbm9kZV90Y19id19zZXQgPSBuc2ltX25vZGVfdGNfYndfc2V0LFxuMTQ0NTpcdFx0LnJhdGVfbm9kZV9uZXcgPSBuc2ltX3JhdGVfbm9kZV9uZXcsXG4xNDQ2Olx0XHQucmF0ZV9ub2RlX2RlbCA9IG5zaW1fcmF0ZV9ub2RlX2RlbCxcbjE0NDc6XHRcdC5yYXRlX2xlYWZfcGFyZW50X3NldCA9IG5zaW1fcmF0ZV9sZWFmX3BhcmVudF9zZXQsXG4xNDQ4Olx0XHQucmF0ZV9ub2RlX3BhcmVudF9zZXQgPSBuc2ltX3JhdGVfbm9kZV9wYXJlbnRfc2V0LFxuMTQ0OTpcdFx0LnRyYXBfZHJvcF9jb3VudGVyX2dldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9kcm9wX2NvdW50ZXJfZ2V0LFxuMTQ1MDpcdH07XG4xNDUxOlx0XG4xNDUyOlx0I2RlZmluZSBOU0lNX0RFVl9NQVhfTUFDU19ERUZBVUxUIDMyXG4xNDUzOlx0I2RlZmluZSBOU0lNX0RFVl9URVNUMV9ERUZBVUxUIHRydWVcbjE0NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSYjMzk7cyBQb3J0IENyZWF0aW9uIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGBuZXRkZXZzaW1gIGlzIG1pc3NpbmcgZGlyZWN0IHN1cHBvcnQgZm9yIGBwb3J0X25ld2AuIEhtbSwgdGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3b3JrYXJvdW5kPyBDYW4gSSBzdGlsbCBjb25qdXJlIGEgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgcG9ydCB3aXRoaW4gYG5ldGRldnNpbWAgdXNpbmcgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgaG93IGBuZXRkZXZzaW1gIGhhbmRsZXMgcG9ydCBjcmVhdGlvbiBpbiBnZW5lcmFsLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgcmVsYXRlZCB0byB0aGF0IGFzcGVjdC4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtcyB0byBzZWUgaWYgSSBjYW4gZmluZCBhIGNsZXZlciB3YXkgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lIGRlc3BpdGUgdGhlIGFwcGFyZW50IGxpbWl0YXRpb24uIFBlcmhhcHMgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgb3IgYW4gaW5kaXJlY3QgbWV0aG9kIGlzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfcG9ydF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWdpc3RlcmluZyBhIERldmljZSBQb3J0IC0gQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKT2theSwgaG9sZCBvbi4gYGRldmxfcG9ydF9yZWdpc3RlcmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBjYWxsLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBmZXcgdGhpbmdzIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZy4gSXMgdGhpcyBhIG5ldyBkZXZpY2UsIG9yIGlzIHRoaXMgYW4gZXhpc3Rpbmcgb25lIHRoYXQmIzM5O3MgYmVpbmcgcmUtaW5pdGlhbGl6ZWQ/IENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLiBXaGF0IHN0YWdlIGFyZSB3ZSBhdD8gSXMgdGhpcyBoYXBwZW5pbmcgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcywgb3IgYXJlIHdlIGRlZXAgd2l0aGluIGEgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uPyBUaGUgcGxhY2VtZW50IGFsb25lIGdpdmVzIG1lIGEgaHVnZSBjbHVlIGFzIHRvIHRoZSBleHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCYjMzk7cyB0aGUgcG9ydCBzdHJ1Y3R1cmUgbG9vayBsaWtlPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHdlIHBhc3NpbmcgdG8gaXQ/IEhhdmUgd2UgaGFuZGxlZCBlcnJvciBjb25kaXRpb25zIGNvcnJlY3RseSBhdCB0aGlzIHBvaW50IG9mIHRoZSBjb2RlIHBhdGg/IEEgZnVuY3Rpb24gd2l0aCAmIzM0O3JlZ2lzdGVyJiMzNDsgaW4gdGhlIG5hbWUgYWx3YXlzIGJlZ3MgcXVlc3Rpb25zIGFib3V0IGF0b21pY2l0eSBhbmQgY29uY3VycmVuY3kuIElzIHRoZXJlIGEgbXV0ZXggcHJvdGVjdGluZyB0aGlzPyBJcyB0aGlzIGNhbGwgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gSWYgc28sIGFyZSB3ZSB1c2luZyBhcHByb3ByaWF0ZSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgZGVzaWduIGhhcyBhZGRyZXNzZWQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEFsc28sIGhvdyBhcmUgd2UgaGFuZGxpbmcgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgYXNwZWN0cz8gQXJlIHdlIHByZS1hbGxvY2F0aW5nIG1lbW9yeSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhcmUgd2UgZHluYW1pY2FsbHkgYWxsb2NhdGluZyB0aGVtPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiB0aGUgcmVnaXN0cmF0aW9uIGZhaWxzIGF0IGEgbGF0ZXIgcG9pbnQuIEFuZCBmaW5hbGx5LCBpcyB0aGVyZSBzdWZmaWNpZW50IHZhbGlkYXRpb24gb24gdGhlIGRldmljZSBzdHJ1Y3QgYmVmb3JlIHJlZ2lzdHJhdGlvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bF9wb3J0X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ1NT1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ4My1cdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcdTAwMjZhdHRycyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQ4NDpcdGVyciA9IGRldmxfcG9ydF9yZWdpc3Rlcihwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpLCBkZXZsaW5rX3BvcnQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ4NS1cdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZXBvcnRfaW5kZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBfX25zaW1fZGV2X3BvcnRfYWRkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fbnNpbV9kZXZfcG9ydF9hZGRgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBwb3J0LCBsaWtlbHkgd2l0aGluIGEgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LCBnaXZlbiB0aGUgJiMzNDtuc2ltJiMzNDsgcHJlZml4LiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgYSBmZXcgdGhpbmdzOgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQmIzM5O3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbW9kaWZpZWQgb3IgYWNjZXNzZWQ/IElzIGl0IGEgbGlua2VkIGxpc3QsIGEgaGFzaCB0YWJsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHJlcHJlc2VudGluZyBuZXR3b3JrIHBvcnRzIHdpdGhpbiB0aGUgc2ltdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBlcnJvcnM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIHJlc291cmNlIGV4aGF1c3Rpb24sIGludmFsaWQgcG9ydCBudW1iZXJzLCBvciBjb25mbGljdHM/IFJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBlc3NlbnRpYWwsIGVzcGVjaWFsbHkgaW4gYSBzaW11bGF0aW9uLCB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBhY2N1cmF0ZSByZXN1bHRzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgZXJyb3IgY29kZXMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZXhjZXB0aW9uIG1lY2hhbmlzbXMuCiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gdGhyZWFkLXNhZmU/IE9yIGRvZXMgdGhpcyBwcmVzZW50IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBOZXR3b3JrIHNpbXVsYXRpb25zIG9mdGVuIGludm9sdmUgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMsIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byBwb3J0IHN0cnVjdHVyZXMgY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgbXV0ZXhlcywgb3IgYXRvbWljIG9wZXJhdGlvbnMgdXNlZC4gSWYgaXQmIzM5O3Mgc2luZ2xlLXRocmVhZGVkLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXQgaXQgbWF5IGFsc28gYmUgYSBib3R0bGVuZWNrLgoqICAgKipDb250ZXh0OioqIFdoYXQgaXMgdGhlIGNhbGxpbmcgY29udGV4dD8gV2hhdCBvdGhlciBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnJvYWRlciBwdXJwb3NlIG9mIHRoaXMgJiMzNDtwb3J0IGFkZCYjMzQ7IG9wZXJhdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBzaW11bGF0aW9uIGNvbXBvbmVudHMuCiogICAqKkFic3RyYWN0aW9uIExheWVyOioqIElzIHRoaXMgcGFydCBvZiBhIGxvd2VyIGxldmVsIEFQST8gSXMgdGhpcyBhIHRoaW4gd3JhcHBlciBvciBpcyB0aGVyZSBzdWJzdGFudGlhbCBjb2RlIGluIHRoZSBmdW5jdGlvbj8gRG9lcyB0aGUgZnVuY3Rpb24gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd29yayBvciBqdXN0IGRlbGVnYXRlIHRvIGEgbW9yZSBhYnN0cmFjdGVkIHN5c3RlbSBvciBldmVuIGFuIE9TIGNhbGw/CgpJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGNvcmUgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgbmV0d29yayBzaW11bGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDU1Olx0c3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG4xNDU2Olx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxuMTQ1NzpcdHtcbjE0NTg6XHRcdHN0cnVjdCBkZXZsaW5rX3BvcnRfYXR0cnMgYXR0cnMgPSB7fTtcbjE0NTk6XHRcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuMTQ2MDpcdFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xuMTQ2MTpcdFx0aW50IGVycjtcbjE0NjI6XHRcbjE0NjM6XHRcdGlmICh0eXBlID09IE5TSU1fREVWX1BPUlRfVFlQRV9WRiBcdTAwMjZcdTAwMjYgIW5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0NjU6XHRcbjE0NjY6XHRcdG5zaW1fZGV2X3BvcnQgPSBremFsbG9jX29iaigqbnNpbV9kZXZfcG9ydCk7XG4xNDY3Olx0XHRpZiAoIW5zaW1fZGV2X3BvcnQpXG4xNDY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTQ2OTpcdFx0bnNpbV9kZXZfcG9ydC1cdTAwM2Vwb3J0X2luZGV4ID0gbnNpbV9kZXZfcG9ydF9pbmRleCh0eXBlLCBwb3J0X2luZGV4KTtcbjE0NzA6XHRcdG5zaW1fZGV2X3BvcnQtXHUwMDNlcG9ydF90eXBlID0gdHlwZTtcbjE0NzE6XHRcbjE0NzI6XHRcdGRldmxpbmtfcG9ydCA9IFx1MDAyNm5zaW1fZGV2X3BvcnQtXHUwMDNlZGV2bGlua19wb3J0O1xuMTQ3MzpcdFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpIHtcbjE0NzQ6XHRcdFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BIWVNJQ0FMO1xuMTQ3NTpcdFx0XHRhdHRycy5waHlzLnBvcnRfbnVtYmVyID0gcG9ydF9pbmRleCAmIzQzOyAxO1xuMTQ3NjpcdFx0fSBlbHNlIHtcbjE0Nzc6XHRcdFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRjtcbjE0Nzg6XHRcdFx0YXR0cnMucGNpX3ZmLnBmID0gMDtcbjE0Nzk6XHRcdFx0YXR0cnMucGNpX3ZmLnZmID0gcG9ydF9pbmRleDtcbjE0ODA6XHRcdH1cbjE0ODE6XHRcdG1lbWNweShhdHRycy5zd2l0Y2hfaWQuaWQsIG5zaW1fZGV2LVx1MDAzZXN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXHUwMDNlc3dpdGNoX2lkLmlkX2xlbik7XG4xNDgyOlx0XHRhdHRycy5zd2l0Y2hfaWQuaWRfbGVuID0gbnNpbV9kZXYtXHUwMDNlc3dpdGNoX2lkLmlkX2xlbjtcbjE0ODM6XHRcdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcdTAwMjZhdHRycyk7XG4xNDg0Olx0XHRlcnIgPSBkZXZsX3BvcnRfcmVnaXN0ZXIocHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSwgZGV2bGlua19wb3J0LFxuMTQ4NTpcdFx0XHRcdFx0IG5zaW1fZGV2X3BvcnQtXHUwMDNlcG9ydF9pbmRleCk7XG4xNDg2Olx0XHRpZiAoZXJyKVxuMTQ4NzpcdFx0XHRnb3RvIGVycl9wb3J0X2ZyZWU7XG4xNDg4Olx0XG4xNDg5Olx0XHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSkge1xuMTQ5MDpcdFx0XHR1NjQgcGFyZW50X2lkID0gREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QO1xuMTQ5MTpcdFx0XHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBwYXJhbXMgPSB7XG4xNDkyOlx0XHRcdFx0LnNpemVfbWF4ID0gMTAwLFxuMTQ5MzpcdFx0XHRcdC5zaXplX2dyYW51bGFyaXR5ID0gMSxcbjE0OTQ6XHRcdFx0XHQudW5pdCA9IERFVkxJTktfUkVTT1VSQ0VfVU5JVF9FTlRSWVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIFBhdGggaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpdCB0b3VjaGVzIHdpdGhpbiBgbmV0ZGV2c2ltYCBpcyBjb250aW5nZW50IG9uIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBuZXRkZXZzaW1gIG9ubHkgc3VwcG9ydHMgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BIWVNJQ0FMYCBhbmQgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRmAuICBUaGVyZWZvcmUsIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoIGlzIGltbWVkaWF0ZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuICBJIG5lZWQgdG8gYmUgY2VydGFpbiwgdGhvdWdoLgoKSSByZXZpZXdlZCB0aGUgY29kZToKYGBgYwoJaWYgKGRldmxpbmtfcG9ydC0mZ3Q7YXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgJmFtcDsmYW1wOwoJICAgIG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXQgJmFtcDsmYW1wOyAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7CmBgYAphbmQgaXQgcmVsaWVzIG9uIHRoYXQgYFBDSV9TRmAgZmxhdm91ciwgYW5kIGFsc28gdGhlIGBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0YCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIEkgcmVtZW1iZXIgY2hlY2tpbmc6ICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zZi9kZXZsaW5rLmNgLiBJdCBsb29rcyBsaWtlIGBpY2VgIGFuZCBgbWx4NWAgYXJlIHRoZSBvbmx5IG9uZXMuIEJvdGggYXJlLCBhcyBJIHJlY2FsbCwgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgc2VlbXMgdG8gY29uZmlybSBteSBmaXJzdCBpbXByZXNzaW9uIHRoYXQgdGhpcyBpcyBhbiB1bnJlYWNoYWJsZSBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgc29tZSAqb3RoZXIqIHdheSB0byBjcmVhdGUgYSBwb3J0IHdpdGggdGhpcyBmbGF2b3I/IENhbiBpdCBiZSBzZXQgdGhyb3VnaCBuZXRsaW5rLCBtYXliZT8gIE5vLCB0aGUgZmxhdm91ciBpcyBzZXQgYnkgdGhlIGRyaXZlciB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBwb3J0LCBzbyBpdCB3aWxsIGFsd2F5cyBiZSBmYWxzZS4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjazogY2FuIGBtbHg1YCBvciBgaWNlYCBldmVuICpiZSogZW11bGF0ZWQgaW4gUUVNVT8gIE5vLCBgbWx4NWAgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIGBpY2VgIHJlcXVpcmVzIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlLiAgTmVpdGhlciBpcyBlbXVsYXRlZC4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4gVGltZSB0byByZXZpZXcgdGhlIGluc3RydWN0aW9uczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2VlbXMgbGlrZSBhIG1hdGNoLgoKVGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoIGlzIHdpdGhpbiBgbmV0L2RldmxpbmsvcG9ydC5jYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgYnV0IGl0JiMzOTtzICpzcGVjaWZpYyogdG8gdGhpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBjb25kaXRpb24uIEJlY2F1c2UgYGljZWAgYW5kIGBtbHg1YCBhcmUgdGhlIG9ubHkgZHJpdmVycyB0aGF0ICpjcmVhdGUqIHBvcnRzIHdpdGggdGhhdCBmbGF2b3VyLCBhbmQgbmVpdGhlciBkcml2ZXIgaXMgZW11bGF0ZWQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBRRU1VLgoKV2FpdCwgY291bGQgYSB1c2VyICpmb3JjZSogdGhpcyBmbGF2b3VyIHdpdGggYSBuZXRsaW5rIHJlcXVlc3Q/IExldCBtZSBjaGVjayBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YDoKYGBgYwoJbmV3X2F0dHJzLmZsYXZvdXIgPSBubGFfZ2V0X3UxNihpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSk7CgkuLi4KCWVyciA9IGRldmxpbmstJmd0O29wcy0mZ3Q7cG9ydF9uZXcoZGV2bGluaywgJmFtcDtuZXdfYXR0cnMsIGV4dGFjaywgJmFtcDtkZXZsaW5rX3BvcnQpOwpgYGAKWWVzLCB0aGUgdXNlciAqY2FuKiByZXF1ZXN0IGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIgdmlhIG5ldGxpbmsuIEhvd2V2ZXIsIGBkZXZsaW5rLSZndDtvcHMtJmd0O3BvcnRfbmV3YCAqbXVzdCogYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGRyaXZlci4gTG9va2luZyBiYWNrLCBvbmx5IGBpY2VgIGFuZCBgbWx4NWAgaW1wbGVtZW50IHRoYXQuIGBuZXRkZXZzaW1gIGRvZXMgKm5vdCouIFNvLCBpZiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgdGhpcywgaXQgd2lsbCBmYWlsIHdpdGggYC1FT1BOT1RTVVBQYC4gVGhlIGNoZWNrIGlzIGhlcmU6CmBgYGMKCWlmICghZGV2bGluay0mZ3Q7b3BzLSZndDtwb3J0X25ldykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYApTbywgc3RpbGwsIGltcG9zc2libGUgaW4gUUVNVS4KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0YCwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIElmIHdlIHNvbWVob3cgaGFkIGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIsIHdlIGFsc28gbmVlZCB0aGF0IGltcGxlbWVudGVkLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZHJpdmVycyBpbXBsZW1lbnQgaXQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnBvcnRfZm5fc3RhdGVfZ2V0XFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgaWNlX2RldmxpbmtfcG9ydF9zZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgwOS1cdC5wb3J0X2ZuX2h3X2FkZHJfc2V0ID0gaWNlX2RldmxpbmtfcG9ydF9mbl9od19hZGRyX3NldCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MTA6XHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX2dldCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MTEtXHQucG9ydF9mbl9zdGF0ZV9zZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX3NldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jPTExMj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgbWx4NV9lc3dfcGZfdmZfZGxfcG9ydF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMTgtXHQucG9ydF9mbl9taWdyYXRhYmxlX3NldCA9IG1seDVfZGV2bGlua19wb3J0X2ZuX21pZ3JhdGFibGVfc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYzoxMTk6XHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2RldmxpbmtfcGZfcG9ydF9mbl9zdGF0ZV9nZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jLTEyMC1cdC5wb3J0X2ZuX3N0YXRlX3NldCA9IG1seDVfZGV2bGlua19wZl9wb3J0X2ZuX3N0YXRlX3NldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jPTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgbWx4NV9lc3dfZGxfc2ZfcG9ydF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzMtI2lmZGVmIENPTkZJR19NTFg1X1NGX01BTkFHRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3cvZGV2bGlua19wb3J0LmM6MTc0Olx0LnBvcnRfZm5fc3RhdGVfZ2V0ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfZm5fc3RhdGVfZ2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzUtXHQucG9ydF9mbl9zdGF0ZV9zZXQgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9mbl9zdGF0ZV9zZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjYzCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBRRU1VKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYW5hbHl6ZWQgdGhlIGNvZGUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjb25jbHVzaXZlLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG9ydF9mbl9zdGF0ZV9nZXRgIGZ1bmN0aW9uIGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlIGBpY2VgIGFuZCBgbWx4NWAgZHJpdmVycy4gR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBvdmVyYWxsIGNvbnRleHQsIEkmIzM5O20gbm93IGZhaXJseSBjZXJ0YWluIHRoYXQgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcywgaW4gZmFjdCwgY29tcGxldGVseSB1bnJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgd2l0aGluIFFFTVUuIFRoZXJlJiMzOTtzIGp1c3Qgbm8gd2F5IGZvciBpdCB0byBiZSB0cmlnZ2VyZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dXAuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gSXQmIzM5O3MganVzdCBub3QgYW4gYXJlYSB0aGF0IHJlcXVpcmVzIG91ciBmb2N1cyByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjE5OjU2LjkyMzE5NjQ0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODk3MzIwODY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY29kZSBwYXRoIGluIGRldmxpbmsgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGZvciBwb3J0cyB3aXRoIHRoZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgZmxhdm91ci4gVGhpcyBmbGF2b3VyIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBNZWxsYW5veCBtbHg1IGFuZCBJbnRlbCBpY2UgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgcmVxdWlyZXMgdGhlIHBvcnRfZm5fc3RhdGVfZ2V0IGNhbGxiYWNrLCB3aGljaCBpcyBhbHNvIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlc2UgdHdvIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjE5OjU2LjkyMzIwMzUxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwMzAxNjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWEzY2RhMDBmY2JiNjZmMTNjM2Y4MDA4MGQ2ZGMxZmU5N2NiMmM3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9wb3J0LmMgYi9uZXQvZGV2bGluay9wb3J0LmNcXG5pbmRleCAxNTI4ZjJkMTQ4ZGZjLi42YTk4NTdiZjc5ZGExIDEwMDY0NFxcbi0tLSBhL25ldC9kZXZsaW5rL3BvcnQuY1xcbisrKyBiL25ldC9kZXZsaW5rL3BvcnQuY1xcbkBAIC03MDgsNyArNzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC1cXHUwMDNlb3BzO1xcbitcXHRlbnVtIGRldmxpbmtfcG9ydF9mbl9vcHN0YXRlIG9wc3RhdGU7XFxuK1xcdGVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKHRiW0RFVkxJTktfUE9SVF9GVU5DVElPTl9BVFRSX0hXX0FERFJdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhb3BzLVxcdTAwM2Vwb3J0X2ZuX2h3X2FkZHJfc2V0KSB7XFxuQEAgLTcyMSw2ICs3MjQsMjAgQEAgc3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbiBcXHRcXHRcXHRcXHQgICAgXFxcIkZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgc3RhdGUgc2V0dGluZ1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4rXFx0aWYgKGRldmxpbmtfcG9ydC1cXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9wcy1cXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXFx1MDAyNlxcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xcbitcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXFx1MDAyNnN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHN0YXRlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRlID09IERFVkxJTktfUE9SVF9GTl9TVEFURV9BQ1RJVkUpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcInBvcnQgZnVuY3Rpb24gcGFyYW1ldGVycyBjYW4ndCBiZSBjb25maWd1cmVkIHdoZW4gcG9ydCBpcyB1cFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRhdHRyID0gdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfQ0FQU107XFxuIFxcdGlmIChhdHRyKSB7XFxuIFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToxOTo1Ny40NTY1OTM3MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg0Mzk3OTg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY29kZSBwYXRoIGluIGRldmxpbmsgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGZvciBwb3J0cyB3aXRoIHRoZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgZmxhdm91ci4gVGhpcyBmbGF2b3VyIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBNZWxsYW5veCBtbHg1IGFuZCBJbnRlbCBpY2UgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgcmVxdWlyZXMgdGhlIHBvcnRfZm5fc3RhdGVfZ2V0IGNhbGxiYWNrLCB3aGljaCBpcyBhbHNvIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlc2UgdHdvIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhM2NkYTAwZmNiYjY2ZjEzYzNmODAwODBkNmRjMWZlOTdjYjJjNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL3BvcnQuYyBiL25ldC9kZXZsaW5rL3BvcnQuY1xuaW5kZXggMTUyOGYyZDE0OGRmYy4uNmE5ODU3YmY3OWRhMSAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL3BvcnQuY1xuKysrIGIvbmV0L2RldmxpbmsvcG9ydC5jXG5AQCAtNzA4LDcgKzcwOCwxMCBAQCBzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzICpvcHMgPSBkZXZsaW5rX3BvcnQtXHUwMDNlb3BzO1xuK1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fb3BzdGF0ZSBvcHN0YXRlO1xuK1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fc3RhdGUgc3RhdGU7XG4gXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmICh0YltERVZMSU5LX1BPUlRfRlVOQ1RJT05fQVRUUl9IV19BRERSXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhb3BzLVx1MDAzZXBvcnRfZm5faHdfYWRkcl9zZXQpIHtcbkBAIC03MjEsNiArNzI0LDIwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdCAgICBcIkZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgc3RhdGUgc2V0dGluZ1wiKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuK1x0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbitcdCAgICBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXHUwMDI2XHUwMDI2ICF0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9TVEFURV0pIHtcbitcdFx0ZXJyID0gb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXHUwMDI2c3RhdGUsXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2b3BzdGF0ZSwgZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRpZiAoc3RhdGUgPT0gREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcInBvcnQgZnVuY3Rpb24gcGFyYW1ldGVycyBjYW4ndCBiZSBjb25maWd1cmVkIHdoZW4gcG9ydCBpcyB1cFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0YXR0ciA9IHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX0NBUFNdO1xuIFx0aWYgKGF0dHIpIHtcbiBcdFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIGNhcHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToxOTo1Ny40NTY2MDA0MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg0NjE3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGRldmxpbmsgUG9ydCBGdW5jdGlvbiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2suIFNwZWNpZmljYWxseSwgaWYgdGhlIHBvcnQgZmxhdm91ciBpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCwgYW5kIHRoZSBgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0YCBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIGJ1dCB0aGUgYHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXWAgYXR0cmlidXRlIGlzbid0IGV4cGxpY2l0bHkgcHJvdmlkZWQsIHRoZW4gdGhlIHBhdGNoIGNhbGxzIGBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXRgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRWAsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvdWxkIGNyZWF0ZSBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24gaWYgdHJpZ2dlcmVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiByZWFjaGFibGUsIGFuZCwgaWYgc28sIGRvZXMgaXQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG1heWJlIGV2ZW4gZnV6emluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaXMgY2FsbGVkIGZyb20uIEknbSBwcmV0dHkgc3VyZSBpdCdzIGludm9sdmVkIGluIHRoZSBkZXZsaW5rIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBwcm9iYWJseSBzb21ld2hlcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyBhIHBvcnQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNhbGwgaGllcmFyY2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDIuOTQxMjIxOTg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDkzNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9wb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jPTY5Nj1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mbl9zdGF0ZV9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYy03MDUtXFxubmV0L2RldmxpbmsvcG9ydC5jOjcwNjpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXFxubmV0L2RldmxpbmsvcG9ydC5jLTcwNy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03OTg9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODExLVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4MTI6XFx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHBvcnQsIHRiLCBleHRhY2spO1xcbm5ldC9kZXZsaW5rL3BvcnQuYy04MTMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDMuMDA4NzIyMjUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNTExODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZsaW5rIFBvcnQgRnVuY3Rpb24gU2V0KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGhvdyBkZXZsaW5rIGludGVyYWN0cyB3aXRoIG5ldHdvcmsgZGV2aWNlcywgc3BlY2lmaWNhbGx5IGZvciBzZXR0aW5nIHVwIHBvcnQgZnVuY3Rpb25zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjYW4gc2VlIHRoYXQgdGhpcyBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldGAgcm91dGluZSBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSB0aGUgZGV2bGluayBuZXRsaW5rIGhhbmRsZXJzLiBUaGF04oCZcyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGFjdGlvbiBpcyBpbml0aWF0ZWQuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGZsb3cgb2YgdGhpcyBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLiBJIHNlZSB0aGF0IGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmaXJzdCBjYWxscyBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlYC4gVGhhdCBzdWdnZXN0cyB0aGF0IHRoZXJlJ3MgYSB2YWxpZGF0aW9uIHN0ZXAgaW52b2x2ZWQgYmVmb3JlIGFjdHVhbGx5IG1ha2luZyB0aGUgY2hhbmdlLiBTbWFydCBtb3ZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHZhbGlkYXRpb24gc3RlcCwgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHNhZmVseS5cblxuVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpbmdzLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldGAuIEtub3dpbmcgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGFuZCB0cmlnZ2VycyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGF0J3MgYmVpbmcgc2V0LCB3aGF0J3MgYmVpbmcgYWZmZWN0ZWQsIGFuZCBtYXliZSB3aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBjcm9wIHVwLiBUaGlzIGtpbmQgb2Ygb3ZlcnZpZXcgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDcuMDQzODQ0ODQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODM5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kZXZsaW5rL3BvcnQuYz03MDY9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTc5Ny1cXG5uZXQvZGV2bGluay9wb3J0LmM6Nzk4OnN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpwb3J0LFxcbm5ldC9kZXZsaW5rL3BvcnQuYy03OTktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTg1MD1pbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODY3LVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4Njg6XFx0XFx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChkZXZsaW5rX3BvcnQsIGF0dHIsIGV4dGFjayk7XFxubmV0L2RldmxpbmsvcG9ydC5jLTg2OS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDowNy4xMTI2OTEwNDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgxMTQyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXRgIGFzIGEgbmV0bGluayBoYW5kbGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBuZXRsaW5rIGhhbmRsZXJzIGFyZSBvZnRlbiBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5J3JlIHR5cGljYWxseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgY29tcGxleCwgbWFraW5nIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gd29yayBvbi5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSByZWxhdGVkIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBpZiBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb3ZlcmFsbCBkZXZsaW5rIGNvbmZpZ3VyYXRpb247IHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MTAuNjkzODM1NDQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzE1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfbmxfcG9ydF9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvbmV0bGlua19nZW4uYz03MDI9Y29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRldmxpbmtfbmxfb3BzWzc1XSA9IHtcXG4tLVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtNzM5LVxcdFxcdC5wcmVfZG9pdFxcdD0gZGV2bGlua19ubF9wcmVfZG9pdF9wb3J0LFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6NzQwOlxcdFxcdC5kb2l0XFx0XFx0PSBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXQsXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03NDEtXFx0XFx0LnBvc3RfZG9pdFxcdD0gZGV2bGlua19ubF9wb3N0X2RvaXQsXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oPTUwPWludCBkZXZsaW5rX25sX3BvcnRfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDo1MjppbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTMtaW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03OTg9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODQ5LVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4NTA6aW50IGRldmxpbmtfbmxfcG9ydF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9kZXZsaW5rL3BvcnQuYy04NTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoxMC43OTM1NTU2MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAwODk0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIElucXVpcnk6IERldmxpbmsgUHJlc2VuY2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgZGV2bGlua2AuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHNldmVyYWwgcmVhc29ucywgd2hldGhlciBJJ20gd29ya2luZyBvbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZWdyYXRpb24sIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgb3IgZXZlbiBhIG1vcmUgZ2VuZXJhbCBzeXN0ZW1zLWxldmVsIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUgc3BlY2lmaWMgS2NvbmZpZyBmcmFnbWVudCBpbiBxdWVzdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb2YgYGRldmxpbmtgIHN1cHBvcnQuIFRoaXMgd2lsbCBwcm9iYWJseSBpbnZvbHZlIGNoZWNraW5nIGRlcGVuZGVuY2llcyBhbmQgYW55IHJlbGV2YW50IHRyaXN0YXRlcyB0aGF0IGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjE0LjI5NDQ1MTc5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTEyNTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoxNC40MTMzNzU5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzYwMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5wYWNraW5nIHRoZSBEZXZsaW5rIE51YW5jZSoqXG5cblJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEknbSBoaXR0aW5nIGEgbWVudGFsIHNwZWVkIGJ1bXAgaGVyZS4uLiBpcyBgZGV2bGlua2AgZnVuY3Rpb25hbGl0eSBiYWtlZCAqZGlyZWN0bHkqIGludG8gdGhlIGNvcmUgb2YgLk5FVCBDb3JlLCBvciBpcyBpdCBkZWxpdmVyZWQgYXMgYSBjb21wb25lbnQgdGhhdCdzIHBhcnQgb2YgdGhlIC5ORVQgU0RLPyBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBjcnVjaWFsIGZvciBob3cgSSdtIGdvaW5nIHRvIGxldmVyYWdlIHRoaXMgdGhpbmcuIFNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgaXQncyBidWlsdCBpbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBkZWdyZWUgdG8gd2hpY2ggaXQgY2FuIGJlIGN1c3RvbWl6ZWQuIEl0IGFsc28gY2hhbmdlcyBteSBtZW50YWwgbW9kZWwgZm9yIHRoZSBidWlsZCBwcm9jZXNzLCB0aGUgZGVwbG95bWVudHMgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSBpcyBwcmV0dHkgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MTguMTkwOTc5NTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1MTQ1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjE4LjI5ODQ5OTkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDQ1NjE5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZsaW5rIE1ha2VmaWxlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBEZXZsaW5rIHN1YnN5c3RlbSByZXNpZGVzLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0b3AgZm9yIG1lIHdoZW4gSSdtIHRyYWNraW5nIGRvd24gYnVpbGQgZGVwZW5kZW5jaWVzIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBEZXZsaW5rIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYywgbWF5YmUgYSBidWlsZCBmbGFnLCBhIGRlcGVuZGVuY3kgY2hhaW4sIG9yIGV2ZW4ganVzdCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHRhcmdldCBJIGV4cGVjdGVkIHRvIHNlZS4gUGVyaGFwcyBJJ20gZGlhZ25vc2luZyBhIGJ1aWxkIGZhaWx1cmUgcmVsYXRlZCB0byBEZXZsaW5rLCBvciBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNlbGVjdGl2ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgcGFydGljdWxhciBEZXZsaW5rIGZlYXR1cmUgZm9yIGEgY3VzdG9tIGJ1aWxkLiBUaGUgTWFrZWZpbGUgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgYWxsIG9mIHRoaXMuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBEZXZsaW5rIGJ1aWxkIHByb2Nlc3MsIHNvIHRoYXQgaXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyMS40MDMwNjM4MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDE1OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlJJREdFKVxcdFxcdCs9IGJyaWRnZS9cXG5uZXQvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxubmV0L01ha2VmaWxlLTI3LW9iai15XFx0XFx0XFx0XFx0Kz0gZHNhL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyMS40OTQwODM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNzE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9ERVZMSU5LYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfTkVUX0RFVkxJTktgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWNsYXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gS25vd2luZyBpdHMgbG9jYXRpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSdsbCBsaWtlbHkgbmVlZCB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSBzb3VyY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgaXQncyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIGRldmljZS1zcGVjaWZpYyBvcHRpb24sIG9yIHBhcnQgb2YgYSBtb3JlIHNwZWNpYWxpemVkIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2VtZW50IGlzIHN0ZXAgb25lIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MjQuODg1MjU5ODA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDEwNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Ni1cXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXFxubmV0L0tjb25maWctNDg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MjUuMDI4NjA2ODA0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTU4ODUxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vbGVhbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQncyBwcm9iYWJseSBiZWluZyBzZWxlY3RlZCwgb3IgYXQgbGVhc3QgaW5mbHVlbmNlZCwgYnkgYSBkcml2ZXIgc29tZXdoZXJlIGluIHRoZSBzeXN0ZW0uIEdpdmVuIHRoYXQgaXQncyBhIGJvb2xlYW4sIGl0J3MgZWl0aGVyIG9uIG9yIG9mZiwgc28gaXRzIHVzZSBpcyBwcmV0dHkgZGVmaW5pdGl2ZS4gVG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSAqc2V0dGluZyogdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb2RlIHBhdGg/IFdoaWNoIGRyaXZlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQ/IE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIGFuZCBzdGFydCBzbGV1dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyOC42NDQ0OTUyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzUxNDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnOjUyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRzZWxlY3QgUExETUZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTEtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzUtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnPTY9Y29uZmlnIFBSRVNURVJBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIEJSSURHRSB8fCBCUklER0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTEtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz0yOD1jb25maWcgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMzLVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Nj1jb25maWcgTUxYNV9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTEtXFx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc9Nj1jb25maWcgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXFx0c2VsZWN0IFhaX0RFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjg6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVxcdHNlbGVjdCBNTFhGV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjc6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTIzLVxcdGRlcGVuZHMgb24gVExTIFxcdTAwMjZcXHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTc2PWNvbmZpZyBRRURcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTE5PWNvbmZpZyBTRkNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cXHRzZWxlY3QgUkVHTUFQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTc1LVxcdGltcGx5IFBIWV9USV9HTUlJX1NFTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBBUkNIX0szIFxcdTAwMjZcXHUwMDI2IE9GIFxcdTAwMjZcXHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZz02PWNvbmZpZyBESU5HSEFJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTgtICAgIGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo5OiAgICBzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTEwLSAgICBoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9OTY9Y29uZmlnIElPU01cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAwLVxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE3LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbmRyaXZlcnMvcHRwL0tjb25maWc6MjE4OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbi0tXFxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTAtXFx0c2VsZWN0IFBIWUxJTktcXG5uZXQvZHNhL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxubmV0L2RzYS9LY29uZmlnLTEyLVxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzEuMTU4MDE5OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NTM4MDY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSdzIERldmxpbmsgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBORVRERVZTSU1gIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLiBUaGF0J3MgZ29vZCwgdGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBsZXZlcmFnZSBpdCBmb3Igc29tZSBkZXZsaW5rIHRlc3RpbmcuIEhvd2V2ZXIsIHRoZSBleGlzdGluZyBwYXRjaCBJJ20gbG9va2luZyBhdCBoYXMgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBgbmV0ZGV2c2ltYCBhY3R1YWxseSAqc3VwcG9ydCogdGhhdCBzcGVjaWZpYyBmbGF2b3IsIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgPyBJdCdzIGNydWNpYWwgZm9yIHRoZSB0ZXN0IHRvIGJlIHZhbGlkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldGRldnNpbWAgY29kZSBhbmQgdmVyaWZ5IGl0cyBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgZmxhdm9yIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIG9yIGVtdWxhdGVkIHdpdGhpbiB0aGUgc2ltdWxhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzUuMDUzNDAzNTY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY2MzY0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjM1LjExNzA4MjQ2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3MjQyNjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZGV0ZXJtaW5lIHdoYXQgZHJpdmVycyBhY3R1YWxseSBsZXZlcmFnZSB0aGlzIHNwZWNpZmljIGZsYXZvciBvZiBgREVWTElOS19QT1JUYC4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIGFuZCBzdGFydCBzZWFyY2hpbmcgd2l0aGluIHRoZSBkcml2ZXIgdHJlZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkLiBJZGVhbGx5LCBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRldmljZXMgYW5kIG5ldHdvcmtpbmcgY2hpcHMgdGhhdCBhcmUgY29uZmlndXJlZCB1c2luZyB0aGlzIGZsYXZvdXIgb2YgcG9ydCwgd2hpY2ggd291bGQgaGVscCBtZSB0byBkZXRlcm1pbmUgd2hpY2ggcGxhdGZvcm1zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBpbnRlcmVzdHMuIE9uY2UgSSBnZXQgdGhlIG5hbWVzIG9mIHNvbWUgcmVsZXZhbnQgZHJpdmVycywgSSBjYW4gc3RhcnQgbG9va2luZyBhdCB0aGVpciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldmxpbmtgIGluZnJhc3RydWN0dXJlIHRvIGNvbmZpZ3VyZSB0aGVzZSBzcGVjaWFsaXplZCBwb3J0cy4gVW5kZXJzdGFuZGluZyB0aGVzZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGFuZCB3aHkgdGhlc2UgcG9ydCB0eXBlcyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjM4Ljk2NDMyODM1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTY0MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXFx0YXR0cnMucGNpX3NmLnBmID0gcGYtXFx1MDAzZWh3LnBmX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkRyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzkuMjE1OTAwMTg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTEyODE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2Ugb25seSB0aGUgYGljZWAgYW5kIGBtbHg1YCBkcml2ZXJzIGFyZSB1dGlsaXppbmcgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IGBpY2VgIGlzIEludGVsLCBhbmQgYG1seDVgIGlzIE1lbGxhbm94LiBOb3csIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/XG5cbkhvbGQgb24uLi4gYG1seDVgIGlzIG5vdG9yaW91cyBmb3IgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgSSBiZWxpZXZlIGBpY2VgIGRvZXMgdG9vLCByaWdodD8gRGFtbi4gVGhhdCdzIGEgaHVyZGxlLiBCdXQgbGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZHJpdmVycyBvdXQgdGhlcmUgdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIGZsYXZvdXIgb2YgREVWTElOSyBwb3J0LiBJJ2xsIG5lZWQgdG8gZG8gYSBmdWxsIHNlYXJjaCBvZiB0aGUgdHJlZSBmb3IgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgYW5kIHNlZSB3aGF0IGVsc2UgcG9wcyB1cC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjQ0LjYyNzE4NTA1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMjQyMjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3Q9MTc9RGV2bGluayBwb3J0IGZsYXZvdXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLXBvcnQucnN0LTM2LSAgICAgICB2aXJ0dWFsIGZ1bmN0aW9uIChWRikuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdDozNzogICAqIC0gYGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgYFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3QtMzgtICAgICAtIFRoaXMgaW5kaWNhdGVzIGFuIGVzd2l0Y2ggcG9ydCByZXByZXNlbnRpbmcgYSBwb3J0IG9mIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXFx0YXR0cnMucGNpX3NmLnBmID0gcGYtXFx1MDAzZWh3LnBmX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkRyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cXFwiKTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg9MjAxPWVudW0gZGV2bGlua19wb3J0X2ZsYXZvdXIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjAtXFx0XFx0XFx0XFx0ICAgICAgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZGV2bGluay5oOjIyMTpcXHRERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YsIC8qIFJlcHJlc2VudHMgZXN3aXRjaCBwb3J0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjItXFx0XFx0XFx0XFx0ICAgICAgKiBmb3IgdGhlIFBDSSBTRi4gSXQgaXMgYW4gaW50ZXJuYWxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz0yMjk9c3RhdGljIGludCBkZXZsaW5rX25sX3BvcnRfYXR0cnNfcHV0KHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtMjYxLVxcdFxcdGJyZWFrO1xcbm5ldC9kZXZsaW5rL3BvcnQuYzoyNjI6XFx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XFxubmV0L2RldmxpbmsvcG9ydC5jLTI2My1cXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUixcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03MDY9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTcyNi1cXHR9XFxubmV0L2RldmxpbmsvcG9ydC5jOjcyNzpcXHRpZiAoZGV2bGlua19wb3J0LVxcdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9kZXZsaW5rL3BvcnQuYy03MjgtXFx0ICAgIG9wcy1cXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXFx1MDAyNlxcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTkxNz1pbnQgZGV2bGlua19ubF9wb3J0X25ld19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtOTQ4LVxcdH1cXG5uZXQvZGV2bGluay9wb3J0LmM6OTQ5OlxcdGlmIChuZXdfYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXFx1MDAyNlxcdTAwMjZcXG5uZXQvZGV2bGluay9wb3J0LmMtOTUwLVxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTE0NDc9dm9pZCBkZXZsaW5rX3BvcnRfYXR0cnNfcGNpX3NmX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsIHUzMiBjb250cm9sbGVyLFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTE0NTMtXFxubmV0L2RldmxpbmsvcG9ydC5jOjE0NTQ6XFx0X19kZXZsaW5rX3BvcnRfYXR0cnNfc2V0KGRldmxpbmtfcG9ydCwgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKTtcXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ1NS1cXHRhdHRycy1cXHUwMDNlcGNpX3NmLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTE0ODg9aW50IGRldmxfcG9ydF9mbl9kZXZsaW5rX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ5Mi1cXG5uZXQvZGV2bGluay9wb3J0LmM6MTQ5MzpcXHRpZiAoV0FSTl9PTihkZXZsaW5rX3BvcnQtXFx1MDAzZWF0dHJzLmZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHx8XFxubmV0L2RldmxpbmsvcG9ydC5jLTE0OTQtXFx0XFx0ICAgIGRldmxpbmtfcG9ydC1cXHUwMDNlYXR0cnMucGNpX3NmLmV4dGVybmFsKSlcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz0xNTIxPXN0YXRpYyBpbnQgX19kZXZsaW5rX3BvcnRfcGh5c19wb3J0X25hbWVfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcwLVxcdFxcdGJyZWFrO1xcbm5ldC9kZXZsaW5rL3BvcnQuYzoxNTcxOlxcdGNhc2UgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGOlxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcyLVxcdFxcdGlmIChhdHRycy1cXHUwMDNlcGNpX3NmLmV4dGVybmFsIHx8IGF0dHJzLVxcdTAwM2VwY2lfc2YuY29udHJvbGxlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDo0Ny4xMjk2MTI5NDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5ODcyMzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9uIG9mIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgYSBxdWVzdGlvbiBwb3BzIHVwOiBgbmV0ZGV2c2ltYCAqZGVmaW5pdGVseSogZG9lc24ndCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQncyBhIGdpdmVuLiBXaGljaCBtZWFucyB0aGlzIG5ldyBjb2RlIHBhdGggdGhhdCdzIGFkZGVkIGhlcmUgaXMgYWxtb3N0IGNlcnRhaW5seSB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGUgcGF0Y2ggaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRpZiAoZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIFx1MDAyNlx1MDAyNlxuXHQgICAgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0IFx1MDAyNlx1MDAyNiAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7XG5cdFx0ZXJyID0gb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXHUwMDI2c3RhdGUsXG5cdFx0XHRcdFx0ICAgICBcdTAwMjZvcHN0YXRlLCBleHRhY2spO1xuYGBgXG5cblJpZ2h0LCBpZiB0aGUgZmxhdm9yIGlzbid0IGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLCB0aGF0IGVudGlyZSBjaHVuayBpcyBza2lwcGVkLiBTbyB0aGUgKm9ubHkqIHdheSB0aGlzIG5ldyBsb2dpYyBleGVjdXRlcyBpcyBpZiBgZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLmZsYXZvdXJgIGlzLCBpbiBmYWN0LCBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gQW5kIHRoYXQgZmxhdm91ciBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBgaWNlYCBhbmQgYG1seDVgIGRyaXZlcnMsIGFuZCB0aG9zZSBkcml2ZXJzIGFyZW4ndCBldmVuIGVtdWxhdGVkIGluIFFFTVUsIG9yIGF0IGxlYXN0IGFyZW4ndCBlbXVsYXRlZCBpbiBhIHdheSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIG1lYW5zIHdlJ3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoaXMgbmV3IGNvZGUgd291bGQgYmUgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIGluIGFueSBvZiBteSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUuXG5cbkJ1dCBob2xkIG9uLi4uIENvdWxkIHdlIHNvbWVob3cgKmZvcmNlKiB0aGUgY3JlYXRpb24gb2YgYSBwb3J0IHdpdGggdGhhdCBmbGF2b3VyIHVzaW5nIGBkZXZsaW5rX3BvcnRfbmV3YD8gVGhhdCdzIHRoZSBuZXh0IHF1ZXN0aW9uLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmbGV4aWJpbGl0eSBpbiBwb3J0IGNyZWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDo1NC43MjgzNDA3OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjE0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9wb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jPTkwNz1pbnQgZGV2bGlua19ubF9wb3J0X3Vuc3BsaXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTkxNi1cXG5uZXQvZGV2bGluay9wb3J0LmM6OTE3OmludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvZGV2bGluay9wb3J0LmMtOTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6NTQuODA2NTYwMTY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODU4NDAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YC5cblxuKipEZWNvbnN0cnVjdGluZyBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YCoqXG5cbkFscmlnaHQsIEknbSBleGFtaW5pbmcgYGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdGAuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbjogaXQncyBjbGVhcmx5IGhhbmRsaW5nIHRoZSBORVRMSU5LIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgbmV3IHBvcnRzIHdpdGhpbiBhIGRldmxpbmsgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIHNldHRpbmcgdXAgdGhlc2UgcG9ydHMuIEknbGwgbmVlZCB0byBwYXJzZSB0aGUgTkVUTElOSyBtZXNzYWdlLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyAoZXNwZWNpYWxseSB0aG9zZSBwcm92aWRlZCBieSB0aGUgdXNlciksIGFuZCB0aGVuIHRyYW5zbGF0ZSB0aG9zZSBwYXJhbWV0ZXJzIGludG8gdGhlIG5lY2Vzc2FyeSBjYWxscyB0byB0aGUgdW5kZXJseWluZyBkZXZsaW5rIGRyaXZlci5cblxuSSdtIHRoaW5raW5nLCB0aGlzIHdpbGwgbGlrZWx5IGludm9sdmUgYWxsb2NhdGluZyBzb21lIHBvcnQtc3BlY2lmaWMgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIChsaWtlIHRoZSBwb3J0IHR5cGUsIHBoeXNpY2FsIHBvcnQgZGV0YWlscywgYW5kIHBvdGVudGlhbGx5IGxpbmsgc2V0dGluZ3MgbGlrZSBNVFUsIHNwZWVkLCBhbmQgYXV0by1uZWdvdGlhdGlvbiwgcGx1cyB0aGUgYXNzb2NpYXRlZCBxdWV1ZXMpLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBwb3J0IHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZCBieSB0aGUgZGV2bGluayBjb3JlLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIEknbSBpbWFnaW5pbmcgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHZhbGlkIHBhcmFtZXRlcnMsIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZXMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgcG9ydCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBwcm9wZXJseSBpbnRlZ3JhdGVzIHdpdGggYW55IGV4aXN0aW5nIGhhcmR3YXJlIGZlYXR1cmVzLCBhbmQgd2lsbCBwcm9wZXJseSB2YWxpZGF0ZSBhbnkgcGFyYW1ldGVycyBmcm9tIHRoZSB1c2VyLiBBbmQgb2YgY291cnNlLCBtYWtpbmcgc3VyZSB0aGUgdXNlciBpcyBpbmZvcm1lZCBvZiBhbnkgaXNzdWVzLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjb25maXJtIGFsbCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0bHkgdmFsaWRhdGVkLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcG9ydCBpcyBjb3JyZWN0bHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZsaW5rIGNvcmUsIGFuZCB0aGF0IHRoZSBhcHByb3ByaWF0ZSBldmVudHMgYXJlIHRyaWdnZXJlZCBzbyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MgY29ycmVjdGx5LCBjb25zaXN0ZW50bHksIGFuZCByZWxpYWJseS4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW5kIG5vdGluZyBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb24gaGFzIG9uIG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIGRldmxpbmsgc3lzdGVtLiBOb3cgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTowMC4zOTI0MDM1MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL3BvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTc6XFx0aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA5MTg6XFx0e1xcbiA5MTk6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gaW5mby1cXHUwMDNlZXh0YWNrO1xcbiA5MjA6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydF9uZXdfYXR0cnMgbmV3X2F0dHJzID0ge307XFxuIDkyMTpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVxcdTAwM2VkZXZsaW5rO1xcbiA5MjI6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xcbiA5MjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4gOTI0OlxcdFxcdGludCBlcnI7XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdGlmICghZGV2bGluay1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X25ldylcXG4gOTI3OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSB8fFxcbiA5MzA6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSkge1xcbiA5MzE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUG9ydCBmbGF2b3VyIG9yIFBDSSBQRiBhcmUgbm90IHNwZWNpZmllZFxcXCIpO1xcbiA5MzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzMzpcXHRcXHR9XFxuIDkzNDpcXHRcXHRuZXdfYXR0cnMuZmxhdm91ciA9IG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0ZMQVZPVVJdKTtcXG4gOTM1OlxcdFxcdG5ld19hdHRycy5wZm51bSA9XFxuIDkzNjpcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9JTkRFWF0pIHtcXG4gOTM5OlxcdFxcdFxcdC8qIFBvcnQgaW5kZXggb2YgdGhlIG5ldyBwb3J0IGJlaW5nIGNyZWF0ZWQgYnkgZHJpdmVyLiAqL1xcbiA5NDA6XFx0XFx0XFx0bmV3X2F0dHJzLnBvcnRfaW5kZXggPVxcbiA5NDE6XFx0XFx0XFx0XFx0bmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfSU5ERVhdKTtcXG4gOTQyOlxcdFxcdFxcdG5ld19hdHRycy5wb3J0X2luZGV4X3ZhbGlkID0gdHJ1ZTtcXG4gOTQzOlxcdFxcdH1cXG4gOTQ0OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUl0pIHtcXG4gOTQ1OlxcdFxcdFxcdG5ld19hdHRycy5jb250cm9sbGVyID1cXG4gOTQ2OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0NPTlRST0xMRVJfTlVNQkVSXSk7XFxuIDk0NzpcXHRcXHRcXHRuZXdfYXR0cnMuY29udHJvbGxlcl92YWxpZCA9IHRydWU7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXHRpZiAobmV3X2F0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIFxcdTAwMjZcXHUwMDI2XFxuIDk1MDpcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfUENJX1NGX05VTUJFUl0pIHtcXG4gOTUxOlxcdFxcdFxcdG5ld19hdHRycy5zZm51bSA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9TRl9OVU1CRVJdKTtcXG4gOTUyOlxcdFxcdFxcdG5ld19hdHRycy5zZm51bV92YWxpZCA9IHRydWU7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdGVyciA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9uZXcoZGV2bGluaywgXFx1MDAyNm5ld19hdHRycyxcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgZXh0YWNrLCBcXHUwMDI2ZGV2bGlua19wb3J0KTtcXG4gOTU3OlxcdFxcdGlmIChlcnIpXFxuIDk1ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gOTYxOlxcdFxcdGlmICghbXNnKSB7XFxuIDk2MjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA5NjM6XFx0XFx0XFx0Z290byBlcnJfb3V0X3BvcnRfZGVsO1xcbiA5NjQ6XFx0XFx0fVxcbiA5NjU6XFx0XFx0ZXJyID0gZGV2bGlua19ubF9wb3J0X2ZpbGwobXNnLCBkZXZsaW5rX3BvcnQsIERFVkxJTktfQ01EX1BPUlRfTkVXLFxcbiA5NjY6XFx0XFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIxOjAwLjM5MjU4OTUzNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAxNTQwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGRldmxpbmsgUG9ydCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYSBuZXcgcG9ydCB3aXRoaW4gdGhlIGBkZXZsaW5rYCBmcmFtZXdvcmsuIFJpZ2h0LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBgZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXdgLiBIbW0sIHNvIHRoYXQgbWVhbnMgdGhlIGNvcmUgcG9ydCBjcmVhdGlvbiBsb2dpYyBpcyBkZWxlZ2F0ZWQgdG8gdGhlIGBkZXZsaW5rYCBkZXZpY2UncyBzcGVjaWZpYyBkcml2ZXIuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBkZWZpbmUgYW5kIGltcGxlbWVudCB0aGF0IGBwb3J0X25ld2Agb3BlcmF0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLCByaWdodD8gSSdsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGRyaXZlciBjb2RlIGFuZCBzZWUgaG93IHZhcmlvdXMgbmV0d29yayBkZXZpY2VzIGhhbmRsZSBwb3J0IGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBhbmQgYWxsIHRoYXQgZ29vZCBzdHVmZiB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MDQuODk0MTMxOTgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM0NjgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5wb3J0X25ld1xcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYz0xMzIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgaWNlX2Rldmxpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEzNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jOjEzNTA6XFx0LnBvcnRfbmV3ID0gaWNlX2RldmxpbmtfcG9ydF9uZXcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEzNTEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmM9MzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbWx4NV9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMzg4LSNpZmRlZiBDT05GSUdfTUxYNV9TRl9NQU5BR0VSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzozODk6XFx0LnBvcnRfbmV3ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfbmV3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMzkwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTowNS4xNjc2MDcwODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNTQwMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgcG9ydF9uZXdgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICppY2UqIGFuZCAqbWx4NSogYXJlIHRoZSBvbmx5IG9uZXMgY3VycmVudGx5IGltcGxlbWVudGluZyBgcG9ydF9uZXdgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIGEgYnJvYWRlciBzZXQgb2YgbmV0d29yayBkcml2ZXJzIHRvIGhhdmUgaW1wbGVtZW50ZWQgdGhhdCBmdW5jdGlvbiBieSBub3cuIFdhaXQgYSBzZWNvbmQuLi4gKm5ldGRldnNpbSogZG9lc24ndCBpbXBsZW1lbnQgYHBvcnRfbmV3YD8gVGhhdCdzIGRlZmluaXRlbHkgdW5leHBlY3RlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB3aHkgYG5ldGRldnNpbWAgaXMgbWlzc2luZyB0aGUgYHBvcnRfbmV3YCBmZWF0dXJlIC0gSSB0aG91Z2h0IHRoYXQgd291bGQgaGF2ZSBiZWVuIHVzZWQgZm9yIHNpbXVsYXRpb24gcHVycG9zZXMuIE5lZWQgdG8gZmxhZyB0aGF0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSByZWxhdGl2ZWx5IGVhc3kgaW1wbGVtZW50YXRpb24gdG8gYWRkLCBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIHdoeSBgbmV0ZGV2c2ltYCBkb2VzIG5vdCBoYXZlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIxOjEwLjQ4MzAxMDE0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzU1MzY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLnBvcnRfbmV3XFxcXHMqPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxMC41OTUzNzQ5NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNDQ5NDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmV0ZGV2c2ltYCBEZXZsaW5rIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgZGV2bGluayBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGV2bGluayBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkncmUgaGFuZGxpbmcgdGhpbmdzLiBBcmUgdGhleSBhZGhlcmluZyB0byB0aGUgc3RhbmRhcmQgZGV2bGluayBBUEk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXZpYXRpb25zIG9yIG9wdGltaXphdGlvbnM/IEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBjb3VsZCBiZSB1c2VkIGluIHNvbWUgZnV0dXJlIHdvcmsuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxMy41MDk4NzEwMjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTI1MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MDk9bnNpbV9kZXZfZGV2bGlua190cmFwX2Ryb3BfY291bnRlcl9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQyNTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDI2LVxcdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTY0OD1pbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE2NTQ6XFx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2NfbnMoXFx1MDAyNm5zaW1fZGV2X2Rldmxpbmtfb3BzLCBzaXplb2YoKm5zaW1fZGV2KSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1NS1cXHRcXHRcXHRcXHQgbnNpbV9idXNfZGV2LVxcdTAwM2Vpbml0aWFsX25ldCwgXFx1MDAyNm5zaW1fYnVzX2Rldi1cXHUwMDNlZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MTMuNTkwNDA0MDUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Njg5MjkwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIFRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgY29kZSByZWxhdGVkIHRvIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIHNldCBvZiBvcGVyYXRpb25zIG9yIGZ1bmN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyBkcml2ZXIgb3Igc3Vic3lzdGVtIHJlbGF0ZWQgdG8gc2ltdWxhdGVkIG5ldHdvcmsgaW50ZXJmYWNlcy4gR2l2ZW4gdGhlIGBkZXZsaW5rYCBwcmVmaXgsIEknZCB3YWdlciBpdCdzIGdvdCBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBgZGV2bGlua2AgaW5mcmFzdHJ1Y3R1cmUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVyaW5nIGEgc2ltdWxhdGVkIGRldmljZSB3aXRoaW4gdGhlIGBkZXZsaW5rYCBzeXN0ZW0/IE9yIHBlcmhhcHMgbWFuYWdpbmcgaXRzIHJlc291cmNlcywgbGlrZSBwb3J0cyBvciB2aXJ0dWFsIGZ1bmN0aW9ucywgdGhyb3VnaCB0aGUgYGRldmxpbmtgIGludGVyZmFjZT8gQXJlIHRoZXJlIGN1c3RvbSBhdHRyaWJ1dGVzIG9yIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYG5zaW1gIGRldmljZSB0aGF0IG5lZWQgdG8gYmUgaGFuZGxlZCB3aXRoaW4gYGRldmxpbmtgJ3Mgc3RydWN0dXJlP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2Agc3RydWN0dXJlLiBBcmUgdGhlcmUgYHByb2JlYCwgYHJlbW92ZWAsIGBnZXRfcGFyYW1zYCwgYHNldF9wYXJhbXNgLCBgYXR0cl9nZXRgLCBgYXR0cl9zZXRgIChvciBzaW1pbGFyKSBmdW5jdGlvbnM/IFRoYXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgZWFjaCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGJlaW5nIHBhc3NlZCBpbiBhbmQgb3V0IHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuRmluYWxseSwgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc2ltdWxhdGlvbiBsb2dpYy4gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3IgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIGBuc2ltYCBmcmFtZXdvcmsgaXRzZWxmPyBUaGlzIGNvdWxkIGludm9sdmUgZGV2aWNlIGVtdWxhdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIG9yIG90aGVyIHNpbXVsYXRlZCBhY3Rpdml0aWVzLiBVbmRlcnN0YW5kaW5nIHRoYXQgbGlua2FnZSBiZXR3ZWVuIGBkZXZsaW5rYCBhbmQgYG5zaW1gIHdpbGwgYmUga2V5LiBUaW1lIHRvIGdldCB0byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxOC4yNTkzMzYwNzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDI1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XFxuMTQyNjpcXHRcXHQuZXN3aXRjaF9tb2RlX3NldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfc2V0LFxcbjE0Mjc6XFx0XFx0LmVzd2l0Y2hfbW9kZV9nZXQgPSBuc2ltX2RldmxpbmtfZXN3aXRjaF9tb2RlX2dldCxcXG4xNDI4OlxcdFxcdC5zdXBwb3J0ZWRfZmxhc2hfdXBkYXRlX3BhcmFtcyA9IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0ssXFxuMTQyOTpcXHRcXHQucmVsb2FkX2FjdGlvbnMgPSBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpLFxcbjE0MzA6XFx0XFx0LnJlbG9hZF9kb3duID0gbnNpbV9kZXZfcmVsb2FkX2Rvd24sXFxuMTQzMTpcXHRcXHQucmVsb2FkX3VwID0gbnNpbV9kZXZfcmVsb2FkX3VwLFxcbjE0MzI6XFx0XFx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXFxuMTQzMzpcXHRcXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxcbjE0MzQ6XFx0XFx0LnRyYXBfaW5pdCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9pbml0LFxcbjE0MzU6XFx0XFx0LnRyYXBfYWN0aW9uX3NldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9hY3Rpb25fc2V0LFxcbjE0MzY6XFx0XFx0LnRyYXBfZ3JvdXBfc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2dyb3VwX3NldCxcXG4xNDM3OlxcdFxcdC50cmFwX3BvbGljZXJfc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX3BvbGljZXJfc2V0LFxcbjE0Mzg6XFx0XFx0LnRyYXBfcG9saWNlcl9jb3VudGVyX2dldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9wb2xpY2VyX2NvdW50ZXJfZ2V0LFxcbjE0Mzk6XFx0XFx0LnJhdGVfbGVhZl90eF9zaGFyZV9zZXQgPSBuc2ltX2xlYWZfdHhfc2hhcmVfc2V0LFxcbjE0NDA6XFx0XFx0LnJhdGVfbGVhZl90eF9tYXhfc2V0ID0gbnNpbV9sZWFmX3R4X21heF9zZXQsXFxuMTQ0MTpcXHRcXHQucmF0ZV9sZWFmX3RjX2J3X3NldCA9IG5zaW1fbGVhZl90Y19id19zZXQsXFxuMTQ0MjpcXHRcXHQucmF0ZV9ub2RlX3R4X3NoYXJlX3NldCA9IG5zaW1fbm9kZV90eF9zaGFyZV9zZXQsXFxuMTQ0MzpcXHRcXHQucmF0ZV9ub2RlX3R4X21heF9zZXQgPSBuc2ltX25vZGVfdHhfbWF4X3NldCxcXG4xNDQ0OlxcdFxcdC5yYXRlX25vZGVfdGNfYndfc2V0ID0gbnNpbV9ub2RlX3RjX2J3X3NldCxcXG4xNDQ1OlxcdFxcdC5yYXRlX25vZGVfbmV3ID0gbnNpbV9yYXRlX25vZGVfbmV3LFxcbjE0NDY6XFx0XFx0LnJhdGVfbm9kZV9kZWwgPSBuc2ltX3JhdGVfbm9kZV9kZWwsXFxuMTQ0NzpcXHRcXHQucmF0ZV9sZWFmX3BhcmVudF9zZXQgPSBuc2ltX3JhdGVfbGVhZl9wYXJlbnRfc2V0LFxcbjE0NDg6XFx0XFx0LnJhdGVfbm9kZV9wYXJlbnRfc2V0ID0gbnNpbV9yYXRlX25vZGVfcGFyZW50X3NldCxcXG4xNDQ5OlxcdFxcdC50cmFwX2Ryb3BfY291bnRlcl9nZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfZHJvcF9jb3VudGVyX2dldCxcXG4xNDUwOlxcdH07XFxuMTQ1MTpcXHRcXG4xNDUyOlxcdCNkZWZpbmUgTlNJTV9ERVZfTUFYX01BQ1NfREVGQVVMVCAzMlxcbjE0NTM6XFx0I2RlZmluZSBOU0lNX0RFVl9URVNUMV9ERUZBVUxUIHRydWVcXG4xNDU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxOC4yNTk1OTgxNThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3ODI0MTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSdzIFBvcnQgQ3JlYXRpb24gQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gaXQgc2VlbXMgbGlrZSBgbmV0ZGV2c2ltYCBpcyBtaXNzaW5nIGRpcmVjdCBzdXBwb3J0IGZvciBgcG9ydF9uZXdgLiBIbW0sIHRoYXQncyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3b3JrYXJvdW5kPyBDYW4gSSBzdGlsbCBjb25qdXJlIGEgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgcG9ydCB3aXRoaW4gYG5ldGRldnNpbWAgdXNpbmcgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgaG93IGBuZXRkZXZzaW1gIGhhbmRsZXMgcG9ydCBjcmVhdGlvbiBpbiBnZW5lcmFsLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgcmVsYXRlZCB0byB0aGF0IGFzcGVjdC4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBleGlzdGluZyBtZWNoYW5pc21zIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGEgY2xldmVyIHdheSB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIG91dGNvbWUgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgbGltaXRhdGlvbi4gUGVyaGFwcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvciBhbiBpbmRpcmVjdCBtZXRob2QgaXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToyMi45Mzc4NDI5ODRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTM1MzMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX3BvcnRfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MjMuMDAzMzg3OTg3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA2NjEyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWdpc3RlcmluZyBhIERldmljZSBQb3J0IC0gQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uLiBgZGV2bF9wb3J0X3JlZ2lzdGVyYC4uLiB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gY2FsbC4gSSBpbW1lZGlhdGVseSBoYXZlIGEgZmV3IHRoaW5ncyBJJ20gbWVudGFsbHkgcGFyc2luZy4gSXMgdGhpcyBhIG5ldyBkZXZpY2UsIG9yIGlzIHRoaXMgYW4gZXhpc3Rpbmcgb25lIHRoYXQncyBiZWluZyByZS1pbml0aWFsaXplZD8gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIFdoYXQgc3RhZ2UgYXJlIHdlIGF0PyBJcyB0aGlzIGhhcHBlbmluZyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBvciBhcmUgd2UgZGVlcCB3aXRoaW4gYSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbj8gVGhlIHBsYWNlbWVudCBhbG9uZSBnaXZlcyBtZSBhIGh1Z2UgY2x1ZSBhcyB0byB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIHBvcnQgc3RydWN0dXJlIGxvb2sgbGlrZT8gV2hhdCBwYXJhbWV0ZXJzIGFyZSB3ZSBwYXNzaW5nIHRvIGl0PyBIYXZlIHdlIGhhbmRsZWQgZXJyb3IgY29uZGl0aW9ucyBjb3JyZWN0bHkgYXQgdGhpcyBwb2ludCBvZiB0aGUgY29kZSBwYXRoPyBBIGZ1bmN0aW9uIHdpdGggXCJyZWdpc3RlclwiIGluIHRoZSBuYW1lIGFsd2F5cyBiZWdzIHF1ZXN0aW9ucyBhYm91dCBhdG9taWNpdHkgYW5kIGNvbmN1cnJlbmN5LiBJcyB0aGVyZSBhIG11dGV4IHByb3RlY3RpbmcgdGhpcz8gSXMgdGhpcyBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQ/IElmIHNvLCBhcmUgd2UgdXNpbmcgYXBwcm9wcmlhdGUgc3BpbmxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlIGRlc2lnbiBoYXMgYWRkcmVzc2VkIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFzcGVjdHM/IEFyZSB3ZSBwcmUtYWxsb2NhdGluZyBtZW1vcnkgYW5kIGRhdGEgc3RydWN0dXJlcywgb3IgYXJlIHdlIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgdGhlbT8gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscyBhdCBhIGxhdGVyIHBvaW50LiBBbmQgZmluYWxseSwgaXMgdGhlcmUgc3VmZmljaWVudCB2YWxpZGF0aW9uIG9uIHRoZSBkZXZpY2Ugc3RydWN0IGJlZm9yZSByZWdpc3RyYXRpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MjcuMzc0MDUyOTg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk1Njk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsX3BvcnRfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ1NT1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDgzLVxcdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcXHUwMDI2YXR0cnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDg0OlxcdGVyciA9IGRldmxfcG9ydF9yZWdpc3Rlcihwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpLCBkZXZsaW5rX3BvcnQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0ODUtXFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToyNy40MzcwMTU2MjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwOTAyNDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBfX25zaW1fZGV2X3BvcnRfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX25zaW1fZGV2X3BvcnRfYWRkYC4gU2VlbXMgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBwb3J0LCBsaWtlbHkgd2l0aGluIGEgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LCBnaXZlbiB0aGUgXCJuc2ltXCIgcHJlZml4LiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBhIGZldyB0aGluZ3M6XG5cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0J3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbW9kaWZpZWQgb3IgYWNjZXNzZWQ/IElzIGl0IGEgbGlua2VkIGxpc3QsIGEgaGFzaCB0YWJsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHJlcHJlc2VudGluZyBuZXR3b3JrIHBvcnRzIHdpdGhpbiB0aGUgc2ltdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggZXJyb3JzPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uLCBpbnZhbGlkIHBvcnQgbnVtYmVycywgb3IgY29uZmxpY3RzPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsLCBlc3BlY2lhbGx5IGluIGEgc2ltdWxhdGlvbiwgdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgYWNjdXJhdGUgcmVzdWx0cy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgZXJyb3IgY29kZXMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZXhjZXB0aW9uIG1lY2hhbmlzbXMuXG4qICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBPciBkb2VzIHRoaXMgcHJlc2VudCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gTmV0d29yayBzaW11bGF0aW9ucyBvZnRlbiBpbnZvbHZlIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzLCBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gcG9ydCBzdHJ1Y3R1cmVzIGNhbiBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBsb2NraW5nIG1lY2hhbmlzbXMsIG11dGV4ZXMsIG9yIGF0b21pYyBvcGVyYXRpb25zIHVzZWQuIElmIGl0J3Mgc2luZ2xlLXRocmVhZGVkLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXQgaXQgbWF5IGFsc28gYmUgYSBib3R0bGVuZWNrLlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGlzIHRoZSBjYWxsaW5nIGNvbnRleHQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGlzIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJyb2FkZXIgcHVycG9zZSBvZiB0aGlzIFwicG9ydCBhZGRcIiBvcGVyYXRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgc2ltdWxhdGlvbiBjb21wb25lbnRzLlxuKiAgICoqQWJzdHJhY3Rpb24gTGF5ZXI6KiogSXMgdGhpcyBwYXJ0IG9mIGEgbG93ZXIgbGV2ZWwgQVBJPyBJcyB0aGlzIGEgdGhpbiB3cmFwcGVyIG9yIGlzIHRoZXJlIHN1YnN0YW50aWFsIGNvZGUgaW4gdGhlIGZ1bmN0aW9uPyBEb2VzIHRoZSBmdW5jdGlvbiBkbyBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB3b3JrIG9yIGp1c3QgZGVsZWdhdGUgdG8gYSBtb3JlIGFic3RyYWN0ZWQgc3lzdGVtIG9yIGV2ZW4gYW4gT1MgY2FsbD9cblxuSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGNvcmUgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBuZXR3b3JrIHNpbXVsYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MzIuNDQ2MDQzNjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdHN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbjE0NTY6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxcbjE0NTc6XFx0e1xcbjE0NTg6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydF9hdHRycyBhdHRycyA9IHt9O1xcbjE0NTk6XFx0XFx0c3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQ7XFxuMTQ2MDpcXHRcXHRzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQ7XFxuMTQ2MTpcXHRcXHRpbnQgZXJyO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRpZiAodHlwZSA9PSBOU0lNX0RFVl9QT1JUX1RZUEVfVkYgXFx1MDAyNlxcdTAwMjYgIW5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpKVxcbjE0NjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdG5zaW1fZGV2X3BvcnQgPSBremFsbG9jX29iaigqbnNpbV9kZXZfcG9ydCk7XFxuMTQ2NzpcXHRcXHRpZiAoIW5zaW1fZGV2X3BvcnQpXFxuMTQ2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNDY5OlxcdFxcdG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXggPSBuc2ltX2Rldl9wb3J0X2luZGV4KHR5cGUsIHBvcnRfaW5kZXgpO1xcbjE0NzA6XFx0XFx0bnNpbV9kZXZfcG9ydC1cXHUwMDNlcG9ydF90eXBlID0gdHlwZTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0ZGV2bGlua19wb3J0ID0gXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydDtcXG4xNDczOlxcdFxcdGlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zaW1fZGV2X3BvcnQpKSB7XFxuMTQ3NDpcXHRcXHRcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUEhZU0lDQUw7XFxuMTQ3NTpcXHRcXHRcXHRhdHRycy5waHlzLnBvcnRfbnVtYmVyID0gcG9ydF9pbmRleCArIDE7XFxuMTQ3NjpcXHRcXHR9IGVsc2Uge1xcbjE0Nzc6XFx0XFx0XFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRjtcXG4xNDc4OlxcdFxcdFxcdGF0dHJzLnBjaV92Zi5wZiA9IDA7XFxuMTQ3OTpcXHRcXHRcXHRhdHRycy5wY2lfdmYudmYgPSBwb3J0X2luZGV4O1xcbjE0ODA6XFx0XFx0fVxcbjE0ODE6XFx0XFx0bWVtY3B5KGF0dHJzLnN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXFx1MDAzZXN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXFx1MDAzZXN3aXRjaF9pZC5pZF9sZW4pO1xcbjE0ODI6XFx0XFx0YXR0cnMuc3dpdGNoX2lkLmlkX2xlbiA9IG5zaW1fZGV2LVxcdTAwM2Vzd2l0Y2hfaWQuaWRfbGVuO1xcbjE0ODM6XFx0XFx0ZGV2bGlua19wb3J0X2F0dHJzX3NldChkZXZsaW5rX3BvcnQsIFxcdTAwMjZhdHRycyk7XFxuMTQ4NDpcXHRcXHRlcnIgPSBkZXZsX3BvcnRfcmVnaXN0ZXIocHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSwgZGV2bGlua19wb3J0LFxcbjE0ODU6XFx0XFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXgpO1xcbjE0ODY6XFx0XFx0aWYgKGVycilcXG4xNDg3OlxcdFxcdFxcdGdvdG8gZXJyX3BvcnRfZnJlZTtcXG4xNDg4OlxcdFxcbjE0ODk6XFx0XFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpIHtcXG4xNDkwOlxcdFxcdFxcdHU2NCBwYXJlbnRfaWQgPSBERVZMSU5LX1JFU09VUkNFX0lEX1BBUkVOVF9UT1A7XFxuMTQ5MTpcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBwYXJhbXMgPSB7XFxuMTQ5MjpcXHRcXHRcXHRcXHQuc2l6ZV9tYXggPSAxMDAsXFxuMTQ5MzpcXHRcXHRcXHRcXHQuc2l6ZV9ncmFudWxhcml0eSA9IDEsXFxuMTQ5NDpcXHRcXHRcXHRcXHQudW5pdCA9IERFVkxJTktfUkVTT1VSQ0VfVU5JVF9FTlRSWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTozMi40NDYyMTY2MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTc5NDQzMTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IFVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXQgdG91Y2hlcyB3aXRoaW4gYG5ldGRldnNpbWAgaXMgY29udGluZ2VudCBvbiBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgbmV0ZGV2c2ltYCBvbmx5IHN1cHBvcnRzIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QSFlTSUNBTGAgYW5kIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfVkZgLiAgVGhlcmVmb3JlLCB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aCBpcyBpbW1lZGlhdGVseSB1bnJlYWNoYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGJlIGNlcnRhaW4sIHRob3VnaC5cblxuSSByZXZpZXdlZCB0aGUgY29kZTpcbmBgYGNcblx0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcblx0ICAgIG9wcy1cdTAwM2Vwb3J0X2ZuX3N0YXRlX2dldCBcdTAwMjZcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xuYGBgXG5hbmQgaXQgcmVsaWVzIG9uIHRoYXQgYFBDSV9TRmAgZmxhdm91ciwgYW5kIGFsc28gdGhlIGBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXRgIHdoaWNoIGlzIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkcml2ZXJzIHRoYXQgdXNlIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBJIHJlbWVtYmVyIGNoZWNraW5nOiAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuY2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jYC4gSXQgbG9va3MgbGlrZSBgaWNlYCBhbmQgYG1seDVgIGFyZSB0aGUgb25seSBvbmVzLiBCb3RoIGFyZSwgYXMgSSByZWNhbGwsIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIHNlZW1zIHRvIGNvbmZpcm0gbXkgZmlyc3QgaW1wcmVzc2lvbiB0aGF0IHRoaXMgaXMgYW4gdW5yZWFjaGFibGUgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBzb21lICpvdGhlciogd2F5IHRvIGNyZWF0ZSBhIHBvcnQgd2l0aCB0aGlzIGZsYXZvcj8gQ2FuIGl0IGJlIHNldCB0aHJvdWdoIG5ldGxpbmssIG1heWJlPyAgTm8sIHRoZSBmbGF2b3VyIGlzIHNldCBieSB0aGUgZHJpdmVyIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIHBvcnQsIHNvIGl0IHdpbGwgYWx3YXlzIGJlIGZhbHNlLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjazogY2FuIGBtbHg1YCBvciBgaWNlYCBldmVuICpiZSogZW11bGF0ZWQgaW4gUUVNVT8gIE5vLCBgbWx4NWAgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIGBpY2VgIHJlcXVpcmVzIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlLiAgTmVpdGhlciBpcyBlbXVsYXRlZC5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaW1lIHRvIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTZWVtcyBsaWtlIGEgbWF0Y2guXG5cblRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBpcyB3aXRoaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQsIGJ1dCBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBjb25kaXRpb24uIEJlY2F1c2UgYGljZWAgYW5kIGBtbHg1YCBhcmUgdGhlIG9ubHkgZHJpdmVycyB0aGF0ICpjcmVhdGUqIHBvcnRzIHdpdGggdGhhdCBmbGF2b3VyLCBhbmQgbmVpdGhlciBkcml2ZXIgaXMgZW11bGF0ZWQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBRRU1VLlxuXG5XYWl0LCBjb3VsZCBhIHVzZXIgKmZvcmNlKiB0aGlzIGZsYXZvdXIgd2l0aCBhIG5ldGxpbmsgcmVxdWVzdD8gTGV0IG1lIGNoZWNrIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgOlxuYGBgY1xuXHRuZXdfYXR0cnMuZmxhdm91ciA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfRkxBVk9VUl0pO1xuXHQuLi5cblx0ZXJyID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXcoZGV2bGluaywgXHUwMDI2bmV3X2F0dHJzLCBleHRhY2ssIFx1MDAyNmRldmxpbmtfcG9ydCk7XG5gYGBcblllcywgdGhlIHVzZXIgKmNhbiogcmVxdWVzdCBhIHBvcnQgb2YgdGhhdCBmbGF2b3VyIHZpYSBuZXRsaW5rLiBIb3dldmVyLCBgZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXdgICptdXN0KiBiZSBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyLiBMb29raW5nIGJhY2ssIG9ubHkgYGljZWAgYW5kIGBtbHg1YCBpbXBsZW1lbnQgdGhhdC4gYG5ldGRldnNpbWAgZG9lcyAqbm90Ki4gU28sIGlmIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSB0aGlzLCBpdCB3aWxsIGZhaWwgd2l0aCBgLUVPUE5PVFNVUFBgLiBUaGUgY2hlY2sgaXMgaGVyZTpcbmBgYGNcblx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X25ldylcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5gYGBcblNvLCBzdGlsbCwgaW1wb3NzaWJsZSBpbiBRRU1VLlxuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gcG9pbnRlciBgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0YCwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIElmIHdlIHNvbWVob3cgaGFkIGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIsIHdlIGFsc28gbmVlZCB0aGF0IGltcGxlbWVudGVkLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZHJpdmVycyBpbXBsZW1lbnQgaXQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6NDguMjQwNjUxNjA3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk2MzUxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5wb3J0X2ZuX3N0YXRlX2dldFxcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgwOS1cXHQucG9ydF9mbl9od19hZGRyX3NldCA9IGljZV9kZXZsaW5rX3BvcnRfZm5faHdfYWRkcl9zZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjgxMDpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX2dldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODExLVxcdC5wb3J0X2ZuX3N0YXRlX3NldCA9IGljZV9kZXZsaW5rX3BvcnRfZm5fc3RhdGVfc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYz0xMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIG1seDVfZXN3X3BmX3ZmX2RsX3BvcnRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMTgtXFx0LnBvcnRfZm5fbWlncmF0YWJsZV9zZXQgPSBtbHg1X2RldmxpbmtfcG9ydF9mbl9taWdyYXRhYmxlX3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jOjExOTpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2RldmxpbmtfcGZfcG9ydF9mbl9zdGF0ZV9nZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMjAtXFx0LnBvcnRfZm5fc3RhdGVfc2V0ID0gbWx4NV9kZXZsaW5rX3BmX3BvcnRfZm5fc3RhdGVfc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYz0xNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIG1seDVfZXN3X2RsX3NmX3BvcnRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzMtI2lmZGVmIENPTkZJR19NTFg1X1NGX01BTkFHRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jOjE3NDpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9mbl9zdGF0ZV9nZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzUtXFx0LnBvcnRfZm5fc3RhdGVfc2V0ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfZm5fc3RhdGVfc2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo0OC41MDAyOTMzOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzk2MDcyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBRRU1VKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGFuYWx5emVkIHRoZSBjb2RlLCBhbmQgaXQncyBsb29raW5nIHByZXR0eSBjb25jbHVzaXZlLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG9ydF9mbl9zdGF0ZV9nZXRgIGZ1bmN0aW9uIGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlIGBpY2VgIGFuZCBgbWx4NWAgZHJpdmVycy4gR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBvdmVyYWxsIGNvbnRleHQsIEknbSBub3cgZmFpcmx5IGNlcnRhaW4gdGhhdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHdlJ3JlIGxvb2tpbmcgYXQgaXMsIGluIGZhY3QsIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHdpdGhpbiBRRU1VLiBUaGVyZSdzIGp1c3Qgbm8gd2F5IGZvciBpdCB0byBiZSB0cmlnZ2VyZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dXAuIEJhc2VkIG9uIHRoaXMsIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCdzIGp1c3Qgbm90IGFuIGFyZWEgdGhhdCByZXF1aXJlcyBvdXIgZm9jdXMgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2MywiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo1NS44OTYzNjkxNDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo1NS44OTYzOTQ3NjVaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6q9l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 11:17:38 +0000 UTC FinishedAt: 2026-08-10 11:21:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVhM2NkYTAwZmNiYjY2ZjEzYzNmODAwODBkNmRjMWZlOTdjYjJjNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9wb3J0LmMgYi9uZXQvZGV2bGluay9wb3J0LmNcbmluZGV4IDE1MjhmMmQxNDhkZmMuLjZhOTg1N2JmNzlkYTEgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9wb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL3BvcnQuY1xuQEAgLTcwOCw3ICYjNDM7NzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC1cdTAwM2VvcHM7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fb3BzdGF0ZSBvcHN0YXRlO1xuJiM0MztcdGVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlO1xuIFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKHRiW0RFVkxJTktfUE9SVF9GVU5DVElPTl9BVFRSX0hXX0FERFJdIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFvcHMtXHUwMDNlcG9ydF9mbl9od19hZGRyX3NldCkge1xuQEAgLTcyMSw2ICYjNDM7NzI0LDIwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdCAgICBcJiMzNDtGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHN0YXRlIHNldHRpbmdcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4mIzQzO1x0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0IFx1MDAyNlx1MDAyNiAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7XG4mIzQzO1x0XHRlcnIgPSBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQoZGV2bGlua19wb3J0LCBcdTAwMjZzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2b3BzdGF0ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXRlID09IERFVkxJTktfUE9SVF9GTl9TVEFURV9BQ1RJVkUpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnMgY2FuJiMzOTt0IGJlIGNvbmZpZ3VyZWQgd2hlbiBwb3J0IGlzIHVwXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF0dHIgPSB0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9DQVBTXTtcbiBcdGlmIChhdHRyKSB7XG4gXHRcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEzY2RhMDBmY2JiNjZmMTNjM2Y4MDA4MGQ2ZGMxZmU5N2NiMmM3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDExOjE5OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvcG9ydC5jIGIvbmV0L2RldmxpbmsvcG9ydC5jCmluZGV4IDE1MjhmMmQxNDhkZmMuLjZhOTg1N2JmNzlkYTEgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9wb3J0LmMKQEAgLTcwOCw3ICYjNDM7NzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCwKIAkJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC0mZ3Q7b3BzOwomIzQzOwllbnVtIGRldmxpbmtfcG9ydF9mbl9vcHN0YXRlIG9wc3RhdGU7CiYjNDM7CWVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBubGF0dHIgKmF0dHI7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAodGJbREVWTElOS19QT1JUX0ZVTkNUSU9OX0FUVFJfSFdfQUREUl0gJmFtcDsmYW1wOwogCSAgICAhb3BzLSZndDtwb3J0X2ZuX2h3X2FkZHJfc2V0KSB7CkBAIC03MjEsNiAmIzQzOzcyNCwyMCBAQCBzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsCiAJCQkJICAgICYjMzQ7RnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBzdGF0ZSBzZXR0aW5nJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQomIzQzOwlpZiAoZGV2bGlua19wb3J0LSZndDthdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiAmYW1wOyZhbXA7CiYjNDM7CSAgICBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0ICZhbXA7JmFtcDsgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkgewomIzQzOwkJZXJyID0gb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldChkZXZsaW5rX3BvcnQsICZhbXA7c3RhdGUsCiYjNDM7CQkJCQkgICAgICZhbXA7b3BzdGF0ZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCWlmIChzdGF0ZSA9PSBERVZMSU5LX1BPUlRfRk5fU1RBVEVfQUNUSVZFKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnMgY2FuJiMzOTt0IGJlIGNvbmZpZ3VyZWQgd2hlbiBwb3J0IGlzIHVwJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJYXR0ciA9IHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX0NBUFNdOwogCWlmIChhdHRyKSB7CiAJCXN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGRldmxpbmsgUG9ydCBGdW5jdGlvbiBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2suIFNwZWNpZmljYWxseSwgaWYgdGhlIHBvcnQgZmxhdm91ciBpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCwgYW5kIHRoZSBgb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldGAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBidXQgdGhlIGB0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9TVEFURV1gIGF0dHJpYnV0ZSBpc24mIzM5O3QgZXhwbGljaXRseSBwcm92aWRlZCwgdGhlbiB0aGUgcGF0Y2ggY2FsbHMgYG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXRgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRWAsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvdWxkIGNyZWF0ZSBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24gaWYgdHJpZ2dlcmVkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlLCBhbmQsIGlmIHNvLCBkb2VzIGl0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBtYXliZSBldmVuIGZ1enppbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgIGlzIGNhbGxlZCBmcm9tLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBkZXZsaW5rIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBwcm9iYWJseSBzb21ld2hlcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyBhIHBvcnQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgIGluIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBjYWxsIGhpZXJhcmNoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvcG9ydC5jPTY5Nj1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mbl9zdGF0ZV9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzA1LVxubmV0L2RldmxpbmsvcG9ydC5jOjcwNjpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXG5uZXQvZGV2bGluay9wb3J0LmMtNzA3LVx0XHRcdFx0XHQgIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmM9Nzk4PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpwb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy04MTEtXG5uZXQvZGV2bGluay9wb3J0LmM6ODEyOlx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHBvcnQsIHRiLCBleHRhY2spO1xubmV0L2RldmxpbmsvcG9ydC5jLTgxMy1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgRGV2bGluayBQb3J0IEZ1bmN0aW9uIFNldCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBob3cgZGV2bGluayBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGRldmljZXMsIHNwZWNpZmljYWxseSBmb3Igc2V0dGluZyB1cCBwb3J0IGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY2FuIHNlZSB0aGF0IHRoaXMgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRgIHJvdXRpbmUgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gdGhlIGRldmxpbmsgbmV0bGluayBoYW5kbGVycy4gVGhhdOKAmXMgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBhY3Rpb24gaXMgaW5pdGlhdGVkLgoKTm93LCBteSBmb2N1cyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIEkgc2VlIHRoYXQgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRgIGZpcnN0IGNhbGxzIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGVgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSB2YWxpZGF0aW9uIHN0ZXAgaW52b2x2ZWQgYmVmb3JlIGFjdHVhbGx5IG1ha2luZyB0aGUgY2hhbmdlLiBTbWFydCBtb3ZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHZhbGlkYXRpb24gc3RlcCwgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHNhZmVseS4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaW5ncywgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGFuZCB0cmlnZ2VycyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGF0JiMzOTtzIGJlaW5nIHNldCwgd2hhdCYjMzk7cyBiZWluZyBhZmZlY3RlZCwgYW5kIG1heWJlIHdoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGNyb3AgdXAuIFRoaXMga2luZCBvZiBvdmVydmlldyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmM9NzA2PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzk3LVxubmV0L2RldmxpbmsvcG9ydC5jOjc5ODpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbm5ldC9kZXZsaW5rL3BvcnQuYy03OTktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTg1MD1pbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTg2Ny1cbm5ldC9kZXZsaW5rL3BvcnQuYzo4Njg6XHRcdGVyciA9IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoZGV2bGlua19wb3J0LCBhdHRyLCBleHRhY2spO1xubmV0L2RldmxpbmsvcG9ydC5jLTg2OS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBhcyBhIG5ldGxpbmsgaGFuZGxlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgbmV0bGluayBoYW5kbGVycyBhcmUgb2Z0ZW4gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSYjMzk7cmUgdHlwaWNhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiBiZSBjb21wbGV4LCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIHRoaW5ncyB0byB3b3JrIG9uLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSByZWxhdGVkIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBpZiBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb3ZlcmFsbCBkZXZsaW5rIGNvbmZpZ3VyYXRpb247IHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfbmxfcG9ydF9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jPTcwMj1jb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZGV2bGlua19ubF9vcHNbNzVdID0ge1xuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtNzM5LVx0XHQucHJlX2RvaXRcdD0gZGV2bGlua19ubF9wcmVfZG9pdF9wb3J0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYzo3NDA6XHRcdC5kb2l0XHRcdD0gZGV2bGlua19ubF9wb3J0X3NldF9kb2l0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03NDEtXHRcdC5wb3N0X2RvaXRcdD0gZGV2bGlua19ubF9wb3N0X2RvaXQsXG4tLVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaD01MD1pbnQgZGV2bGlua19ubF9wb3J0X2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTEtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjUyOmludCBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oLTUzLWludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTc5OD1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtODQ5LVxubmV0L2RldmxpbmsvcG9ydC5jOjg1MDppbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvZGV2bGluay9wb3J0LmMtODUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBJbnF1aXJ5OiBEZXZsaW5rIFByZXNlbmNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgZGV2bGlua2AuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHNldmVyYWwgcmVhc29ucywgd2hldGhlciBJJiMzOTttIHdvcmtpbmcgb24gbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVncmF0aW9uLCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG9yIGV2ZW4gYSBtb3JlIGdlbmVyYWwgc3lzdGVtcy1sZXZlbCBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFRoZSBzcGVjaWZpYyBLY29uZmlnIGZyYWdtZW50IGluIHF1ZXN0aW9uIHdpbGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvZiBgZGV2bGlua2Agc3VwcG9ydC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcmVsZXZhbnQgdHJpc3RhdGVzIHRoYXQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgdGhlIERldmxpbmsgTnVhbmNlKioKClJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEkmIzM5O20gaGl0dGluZyBhIG1lbnRhbCBzcGVlZCBidW1wIGhlcmUuLi4gaXMgYGRldmxpbmtgIGZ1bmN0aW9uYWxpdHkgYmFrZWQgKmRpcmVjdGx5KiBpbnRvIHRoZSBjb3JlIG9mIC5ORVQgQ29yZSwgb3IgaXMgaXQgZGVsaXZlcmVkIGFzIGEgY29tcG9uZW50IHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgLk5FVCBTREs/IFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIGNydWNpYWwgZm9yIGhvdyBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHRoaXMgdGhpbmcuIFNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYnVpbHQgaW4gZGlyZWN0bHkgaW1wYWN0cyB0aGUgZGVncmVlIHRvIHdoaWNoIGl0IGNhbiBiZSBjdXN0b21pemVkLiBJdCBhbHNvIGNoYW5nZXMgbXkgbWVudGFsIG1vZGVsIGZvciB0aGUgYnVpbGQgcHJvY2VzcywgdGhlIGRlcGxveW1lbnRzIGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBUaGlzIGZvdW5kYXRpb25hbCBrbm93bGVkZ2UgaXMgcHJldHR5IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgTWFrZWZpbGUqKgoKT2theSwgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGUgRGV2bGluayBzdWJzeXN0ZW0gcmVzaWRlcywgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgbWUgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gYnVpbGQgZGVwZW5kZW5jaWVzIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBEZXZsaW5rIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgYnVpbGQgZmxhZywgYSBkZXBlbmRlbmN5IGNoYWluLCBvciBldmVuIGp1c3QgY29uZmlybWluZyB0aGUgcHJlc2VuY2Ugb2YgYSB0YXJnZXQgSSBleHBlY3RlZCB0byBzZWUuIFBlcmhhcHMgSSYjMzk7bSBkaWFnbm9zaW5nIGEgYnVpbGQgZmFpbHVyZSByZWxhdGVkIHRvIERldmxpbmssIG9yIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNlbGVjdGl2ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgcGFydGljdWxhciBEZXZsaW5rIGZlYXR1cmUgZm9yIGEgY3VzdG9tIGJ1aWxkLiBUaGUgTWFrZWZpbGUgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgYWxsIG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgRGV2bGluayBidWlsZCBwcm9jZXNzLCBzbyB0aGF0IGlzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xubmV0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xubmV0L01ha2VmaWxlLTI3LW9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX0RFVkxJTktgKioKCk9rYXksIHNvIGBDT05GSUdfTkVUX0RFVkxJTktgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWNsYXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIEtub3dpbmcgaXRzIGxvY2F0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMsIHRvIGZpbmQgdGhlIHNvdXJjZS4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBoZWxwIG1lIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIGRldmljZS1zcGVjaWZpYyBvcHRpb24sIG9yIHBhcnQgb2YgYSBtb3JlIHNwZWNpYWxpemVkIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2VtZW50IGlzIHN0ZXAgb25lIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3OT1jb25maWcgTkVUX1NPQ0tfTVNHXG4tLVxubmV0L0tjb25maWctNDg2LVxubmV0L0tjb25maWc6NDg3OmNvbmZpZyBORVRfREVWTElOS1xubmV0L0tjb25maWctNDg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9vbGVhbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHNlbGVjdGVkLCBvciBhdCBsZWFzdCBpbmZsdWVuY2VkLCBieSBhIGRyaXZlciBzb21ld2hlcmUgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGJvb2xlYW4sIGl0JiMzOTtzIGVpdGhlciBvbiBvciBvZmYsIHNvIGl0cyB1c2UgaXMgcHJldHR5IGRlZmluaXRpdmUuIFRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGFjdHVhbGx5ICpzZXR0aW5nKiB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb2RlIHBhdGg/IFdoaWNoIGRyaXZlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQ/IE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgc3RhcnQgc2xldXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnPTQwPWNvbmZpZyBDUllQVE9fREVWX09DVEVPTlRYMl9DUFRcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZzo1MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnLTUzLVx0aGVscFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cdHNlbGVjdCBEUExMXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjc6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctOC1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MTEtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MTY4PWNvbmZpZyBDQU5fS1ZBU0VSX1BDSUVGRFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBQQ0llIEZEIGNhcmRzXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoxNzE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTMzLVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcJiMzNDtcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTcwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnPTE5PWNvbmZpZyBFTkFfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZz0xNjk9Y29uZmlnIFBEU19DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnOjE3MzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTc0LVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjA3PWNvbmZpZyBCTlhUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Mi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz02OD1jb25maWcgTElRVUlESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3NjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc9Mj1jb25maWcgRlNMX0RQQUEyX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXHRzZWxlY3QgRlNMX1hHTUFDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnOjg6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWc9Nj1jb25maWcgRlVOX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cdHNlbGVjdCBGVU5fQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQVJNNjQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xNDU9Y29uZmlnIElYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTAtXHRzZWxlY3QgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUyLVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjI5PWNvbmZpZyBJNDBFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzUtXHRzZWxlY3QgTElCSUVfQURNSU5RXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzAyLVx0c2VsZWN0IExJQklFX0ZXTE9HIGlmIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDQtXHRzZWxlY3QgUEFDS0lOR1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMS1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc9Nj1jb25maWcgUFJFU1RFUkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTI4PWNvbmZpZyBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzMtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz02PWNvbmZpZyBNTFg1X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMS1cdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZz02PWNvbmZpZyBNTFhGV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXHRzZWxlY3QgWFpfREVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6ODpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVx0c2VsZWN0IE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyNzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjMtXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yNS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWc9NzY9Y29uZmlnIFFFRFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cdHNlbGVjdCBSRUdNQVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzUtXHRpbXBseSBQSFlfVElfR01JSV9TRUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9Nj1jb25maWcgRElOR0hBSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctOC0gICAgZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6OTogICAgc2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTEwLSAgICBoZWxwXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTctXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbmRyaXZlcnMvcHRwL0tjb25maWc6MjE4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOS1cdHNlbGVjdCBDUkMxNlxuLS1cbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG5uZXQvZHNhL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbm5ldC9kc2EvS2NvbmZpZy0xMi1cdGltcGx5IE5FVF9TRUxGVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0ZGV2c2ltJiMzOTtzIERldmxpbmsgU3VwcG9ydCoqCgpPa2F5LCBzbyBgTkVUREVWU0lNYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYE5FVF9ERVZMSU5LYC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxldmVyYWdlIGl0IGZvciBzb21lIGRldmxpbmsgdGVzdGluZy4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBoYXMgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBkZXZsaW5rX3BvcnQtJmd0O2F0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgYG5ldGRldnNpbWAgYWN0dWFsbHkgKnN1cHBvcnQqIHRoYXQgc3BlY2lmaWMgZmxhdm9yLCBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYD8gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIHRlc3QgdG8gYmUgdmFsaWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGFuZCB2ZXJpZnkgaXRzIGNhcGFiaWxpdGllcy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBmbGF2b3IgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgb3IgZW11bGF0ZWQgd2l0aGluIHRoZSBzaW11bGF0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGxpa2UgeW91OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAqKgoKT2theSwgc28gSSYjMzk7dmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBhcHBsaWNhdGlvbiBvZiBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBkZXRlcm1pbmUgd2hhdCBkcml2ZXJzIGFjdHVhbGx5IGxldmVyYWdlIHRoaXMgc3BlY2lmaWMgZmxhdm9yIG9mIGBERVZMSU5LX1BPUlRgLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIGFuZCBzdGFydCBzZWFyY2hpbmcgd2l0aGluIHRoZSBkcml2ZXIgdHJlZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkLiBJZGVhbGx5LCBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBkZXZpY2VzIGFuZCBuZXR3b3JraW5nIGNoaXBzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhpcyBmbGF2b3VyIG9mIHBvcnQsIHdoaWNoIHdvdWxkIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBsYXRmb3JtcyBtaWdodCBiZSByZWxldmFudCBmb3IgbXkgaW50ZXJlc3RzLiBPbmNlIEkgZ2V0IHRoZSBuYW1lcyBvZiBzb21lIHJlbGV2YW50IGRyaXZlcnMsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhlaXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGBkZXZsaW5rYCBpbmZyYXN0cnVjdHVyZSB0byBjb25maWd1cmUgdGhlc2Ugc3BlY2lhbGl6ZWQgcG9ydHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhbmQgd2h5IHRoZXNlIHBvcnQgdHlwZXMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM9NjIzPWljZV9kZXZsaW5rX3BvcnRfbmV3X2NoZWNrX2F0dHIoc3RydWN0IGljZV9wZiAqcGYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM6NjI3Olx0aWYgKG5ld19hdHRyLVx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtNjI4LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGbGF2b3VyIG90aGVyIHRoYW4gcGNpc2YgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgaWNlX2RldmxpbmtfcG9ydF9zZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjgyMjogKiBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgcG9ydHMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODIzLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTg2MD1pbnQgaWNlX2RldmxpbmtfY3JlYXRlX3NmX3BvcnQoc3RydWN0IGljZV9keW5hbWljX3BvcnQgKmR5bl9wb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM6ODczOlx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXHRhdHRycy5wY2lfc2YucGYgPSBwZi1cdTAwM2Vody5wZl9pZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jPTI2NT1tbHg1X3NmX25ld19jaGVja19hdHRyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfbmV3X2F0dHJzICpuZXdfYXR0cixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zZi9kZXZsaW5rLmM6MjcwOlx0aWYgKG5ld19hdHRyLVx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI3MS1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RHJpdmVyIHN1cHBvcnRzIG9ubHkgU0YgcG9ydCBhZGRpdGlvblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzZSBvZiBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBgaWNlYCBhbmQgYG1seDVgIGRyaXZlcnMgYXJlIHV0aWxpemluZyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IGBpY2VgIGlzIEludGVsLCBhbmQgYG1seDVgIGlzIE1lbGxhbm94LiBOb3csIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/CgpIb2xkIG9uLi4uIGBtbHg1YCBpcyBub3RvcmlvdXMgZm9yIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIEkgYmVsaWV2ZSBgaWNlYCBkb2VzIHRvbywgcmlnaHQ/IERhbW4uIFRoYXQmIzM5O3MgYSBodXJkbGUuIEJ1dCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRyaXZlcnMgb3V0IHRoZXJlIHVzaW5nIHRoaXMgcGFydGljdWxhciBmbGF2b3VyIG9mIERFVkxJTksgcG9ydC4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGZ1bGwgc2VhcmNoIG9mIHRoZSB0cmVlIGZvciBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBhbmQgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3Q9MTc9RGV2bGluayBwb3J0IGZsYXZvdXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdC0zNi0gICAgICAgdmlydHVhbCBmdW5jdGlvbiAoVkYpLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdDozNzogICAqIC0gYGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdC0zOC0gICAgIC0gVGhpcyBpbmRpY2F0ZXMgYW4gZXN3aXRjaCBwb3J0IHJlcHJlc2VudGluZyBhIHBvcnQgb2YgUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy02MjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcdGlmIChuZXdfYXR0ci1cdTAwM2VmbGF2b3VyICE9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Rmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjEtICogUmVzZXJ2ZSBhIHN1YmZ1bmN0aW9uIG51bWJlciBmb3IgdGhpcyBwb3J0LiBPbmx5IGNhbGxlZCBmb3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMy0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcdGF0dHJzLmZsYXZvdXIgPSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODc0LVx0YXR0cnMucGNpX3NmLnBmID0gcGYtXHUwMDNlaHcucGZfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcdGlmIChuZXdfYXR0ci1cdTAwM2VmbGF2b3VyICE9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0RyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cJiMzNDspO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg9MjAxPWVudW0gZGV2bGlua19wb3J0X2ZsYXZvdXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmgtMjIwLVx0XHRcdFx0ICAgICAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg6MjIxOlx0REVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGLCAvKiBSZXByZXNlbnRzIGVzd2l0Y2ggcG9ydFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjItXHRcdFx0XHQgICAgICAqIGZvciB0aGUgUENJIFNGLiBJdCBpcyBhbiBpbnRlcm5hbFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0yMjk9c3RhdGljIGludCBkZXZsaW5rX25sX3BvcnRfYXR0cnNfcHV0KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTI2MS1cdFx0YnJlYWs7XG5uZXQvZGV2bGluay9wb3J0LmM6MjYyOlx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XG5uZXQvZGV2bGluay9wb3J0LmMtMjYzLVx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmM9NzA2PXN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtNzI2LVx0fVxubmV0L2RldmxpbmsvcG9ydC5jOjcyNzpcdGlmIChkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXHUwMDI2XHUwMDI2XG5uZXQvZGV2bGluay9wb3J0LmMtNzI4LVx0ICAgIG9wcy1cdTAwM2Vwb3J0X2ZuX3N0YXRlX2dldCBcdTAwMjZcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz05MTc9aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy05NDgtXHR9XG5uZXQvZGV2bGluay9wb3J0LmM6OTQ5Olx0aWYgKG5ld19hdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbm5ldC9kZXZsaW5rL3BvcnQuYy05NTAtXHQgICAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0xNDQ3PXZvaWQgZGV2bGlua19wb3J0X2F0dHJzX3BjaV9zZl9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LCB1MzIgY29udHJvbGxlcixcbi0tXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ1My1cbm5ldC9kZXZsaW5rL3BvcnQuYzoxNDU0Olx0X19kZXZsaW5rX3BvcnRfYXR0cnNfc2V0KGRldmxpbmtfcG9ydCwgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKTtcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDU1LVx0YXR0cnMtXHUwMDNlcGNpX3NmLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYz0xNDg4PWludCBkZXZsX3BvcnRfZm5fZGV2bGlua19zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDkyLVxubmV0L2RldmxpbmsvcG9ydC5jOjE0OTM6XHRpZiAoV0FSTl9PTihkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciAhPSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgfHxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNDk0LVx0XHQgICAgZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLnBjaV9zZi5leHRlcm5hbCkpXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jPTE1MjE9c3RhdGljIGludCBfX2RldmxpbmtfcG9ydF9waHlzX3BvcnRfbmFtZV9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxuLS1cbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcwLVx0XHRicmVhaztcbm5ldC9kZXZsaW5rL3BvcnQuYzoxNTcxOlx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XG5uZXQvZGV2bGluay9wb3J0LmMtMTU3Mi1cdFx0aWYgKGF0dHJzLVx1MDAzZXBjaV9zZi5leHRlcm5hbCB8fCBhdHRycy1cdTAwM2VwY2lfc2YuY29udHJvbGxlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9uIG9mIGEgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBhIHF1ZXN0aW9uIHBvcHMgdXA6IGBuZXRkZXZzaW1gICpkZWZpbml0ZWx5KiBkb2VzbiYjMzk7dCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2hpY2ggbWVhbnMgdGhpcyBuZXcgY29kZSBwYXRoIHRoYXQmIzM5O3MgYWRkZWQgaGVyZSBpcyBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgUUVNVSBzZXR1cHMuIFRoZSBwYXRjaCBpbmNsdWRlcyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJaWYgKGRldmxpbmtfcG9ydC0mZ3Q7YXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgJmFtcDsmYW1wOwoJICAgIG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXQgJmFtcDsmYW1wOyAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7CgkJZXJyID0gb3BzLSZndDtwb3J0X2ZuX3N0YXRlX2dldChkZXZsaW5rX3BvcnQsICZhbXA7c3RhdGUsCgkJCQkJICAgICAmYW1wO29wc3RhdGUsIGV4dGFjayk7CmBgYAoKUmlnaHQsIGlmIHRoZSBmbGF2b3IgaXNuJiMzOTt0IGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLCB0aGF0IGVudGlyZSBjaHVuayBpcyBza2lwcGVkLiBTbyB0aGUgKm9ubHkqIHdheSB0aGlzIG5ldyBsb2dpYyBleGVjdXRlcyBpcyBpZiBgZGV2bGlua19wb3J0LSZndDthdHRycy5mbGF2b3VyYCBpcywgaW4gZmFjdCwgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIEFuZCB0aGF0IGZsYXZvdXIgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYGljZWAgYW5kIGBtbHg1YCBkcml2ZXJzLCBhbmQgdGhvc2UgZHJpdmVycyBhcmVuJiMzOTt0IGV2ZW4gZW11bGF0ZWQgaW4gUUVNVSwgb3IgYXQgbGVhc3QgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBhIHdheSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB0aGlzIG5ldyBjb2RlIHdvdWxkIGJlIGltcG9zc2libGUgdG8gdHJpZ2dlciBpbiBhbnkgb2YgbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VLgoKQnV0IGhvbGQgb24uLi4gQ291bGQgd2Ugc29tZWhvdyAqZm9yY2UqIHRoZSBjcmVhdGlvbiBvZiBhIHBvcnQgd2l0aCB0aGF0IGZsYXZvdXIgdXNpbmcgYGRldmxpbmtfcG9ydF9uZXdgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IHF1ZXN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGZsZXhpYmlsaXR5IGluIHBvcnQgY3JlYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfbmxfcG9ydF9uZXdfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmM9OTA3PWludCBkZXZsaW5rX25sX3BvcnRfdW5zcGxpdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvcG9ydC5jLTkxNi1cbm5ldC9kZXZsaW5rL3BvcnQuYzo5MTc6aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2RldmxpbmsvcG9ydC5jLTkxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdGAuCgoqKkRlY29uc3RydWN0aW5nIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgKioKCkFscmlnaHQsIEkmIzM5O20gZXhhbWluaW5nIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb246IGl0JiMzOTtzIGNsZWFybHkgaGFuZGxpbmcgdGhlIE5FVExJTksgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBuZXcgcG9ydHMgd2l0aGluIGEgZGV2bGluayBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIHNldHRpbmcgdXAgdGhlc2UgcG9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gcGFyc2UgdGhlIE5FVExJTksgbWVzc2FnZSwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgKGVzcGVjaWFsbHkgdGhvc2UgcHJvdmlkZWQgYnkgdGhlIHVzZXIpLCBhbmQgdGhlbiB0cmFuc2xhdGUgdGhvc2UgcGFyYW1ldGVycyBpbnRvIHRoZSBuZWNlc3NhcnkgY2FsbHMgdG8gdGhlIHVuZGVybHlpbmcgZGV2bGluayBkcml2ZXIuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIHdpbGwgbGlrZWx5IGludm9sdmUgYWxsb2NhdGluZyBzb21lIHBvcnQtc3BlY2lmaWMgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIChsaWtlIHRoZSBwb3J0IHR5cGUsIHBoeXNpY2FsIHBvcnQgZGV0YWlscywgYW5kIHBvdGVudGlhbGx5IGxpbmsgc2V0dGluZ3MgbGlrZSBNVFUsIHNwZWVkLCBhbmQgYXV0by1uZWdvdGlhdGlvbiwgcGx1cyB0aGUgYXNzb2NpYXRlZCBxdWV1ZXMpLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBwb3J0IHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZCBieSB0aGUgZGV2bGluayBjb3JlLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O20gaW1hZ2luaW5nIHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciB2YWxpZCBwYXJhbWV0ZXJzLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHBvcnQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW50ZWdyYXRlcyB3aXRoIGFueSBleGlzdGluZyBoYXJkd2FyZSBmZWF0dXJlcywgYW5kIHdpbGwgcHJvcGVybHkgdmFsaWRhdGUgYW55IHBhcmFtZXRlcnMgZnJvbSB0aGUgdXNlci4gQW5kIG9mIGNvdXJzZSwgbWFraW5nIHN1cmUgdGhlIHVzZXIgaXMgaW5mb3JtZWQgb2YgYW55IGlzc3Vlcy4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29uZmlybSBhbGwgcGFyYW1ldGVycyBhcmUgY29ycmVjdGx5IHZhbGlkYXRlZC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBvcnQgaXMgY29ycmVjdGx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGV2bGluayBjb3JlLCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgc28gdGhhdCBldmVyeXRoaW5nIHdvcmtzIGNvcnJlY3RseSwgY29uc2lzdGVudGx5LCBhbmQgcmVsaWFibHkuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgbm90aW5nIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbiBoYXMgb24gb3RoZXIgbW9kdWxlcyBvciBwYXJ0cyBvZiB0aGUgZGV2bGluayBzeXN0ZW0uIE5vdyBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9wb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNzpcdGludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA5MTg6XHR7XG4gOTE5Olx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiA5MjA6XHRcdHN0cnVjdCBkZXZsaW5rX3BvcnRfbmV3X2F0dHJzIG5ld19hdHRycyA9IHt9O1xuIDkyMTpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cdTAwM2VkZXZsaW5rO1xuIDkyMjpcdFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xuIDkyMzpcdFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbiA5MjQ6XHRcdGludCBlcnI7XG4gOTI1Olx0XG4gOTI2Olx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXBvcnRfbmV3KVxuIDkyNzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTI4Olx0XG4gOTI5Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfRkxBVk9VUl0gfHxcbiA5MzA6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSkge1xuIDkzMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1BvcnQgZmxhdm91ciBvciBQQ0kgUEYgYXJlIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDkzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzM6XHRcdH1cbiA5MzQ6XHRcdG5ld19hdHRycy5mbGF2b3VyID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSk7XG4gOTM1Olx0XHRuZXdfYXR0cnMucGZudW0gPVxuIDkzNjpcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9QRl9OVU1CRVJdKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0lOREVYXSkge1xuIDkzOTpcdFx0XHQvKiBQb3J0IGluZGV4IG9mIHRoZSBuZXcgcG9ydCBiZWluZyBjcmVhdGVkIGJ5IGRyaXZlci4gKi9cbiA5NDA6XHRcdFx0bmV3X2F0dHJzLnBvcnRfaW5kZXggPVxuIDk0MTpcdFx0XHRcdG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfSU5ERVhdKTtcbiA5NDI6XHRcdFx0bmV3X2F0dHJzLnBvcnRfaW5kZXhfdmFsaWQgPSB0cnVlO1xuIDk0MzpcdFx0fVxuIDk0NDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfQ09OVFJPTExFUl9OVU1CRVJdKSB7XG4gOTQ1Olx0XHRcdG5ld19hdHRycy5jb250cm9sbGVyID1cbiA5NDY6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0NPTlRST0xMRVJfTlVNQkVSXSk7XG4gOTQ3Olx0XHRcdG5ld19hdHRycy5jb250cm9sbGVyX3ZhbGlkID0gdHJ1ZTtcbiA5NDg6XHRcdH1cbiA5NDk6XHRcdGlmIChuZXdfYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXHUwMDI2XHUwMDI2XG4gOTUwOlx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xuIDk1MTpcdFx0XHRuZXdfYXR0cnMuc2ZudW0gPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9TRl9OVU1CRVJdKTtcbiA5NTI6XHRcdFx0bmV3X2F0dHJzLnNmbnVtX3ZhbGlkID0gdHJ1ZTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcbiA5NTU6XHRcdGVyciA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXBvcnRfbmV3KGRldmxpbmssIFx1MDAyNm5ld19hdHRycyxcbiA5NTY6XHRcdFx0XHRcdCAgICAgZXh0YWNrLCBcdTAwMjZkZXZsaW5rX3BvcnQpO1xuIDk1NzpcdFx0aWYgKGVycilcbiA5NTg6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTk6XHRcbiA5NjA6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuIDk2MTpcdFx0aWYgKCFtc2cpIHtcbiA5NjI6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA5NjM6XHRcdFx0Z290byBlcnJfb3V0X3BvcnRfZGVsO1xuIDk2NDpcdFx0fVxuIDk2NTpcdFx0ZXJyID0gZGV2bGlua19ubF9wb3J0X2ZpbGwobXNnLCBkZXZsaW5rX3BvcnQsIERFVkxJTktfQ01EX1BPUlRfTkVXLFxuIDk2NjpcdFx0XHRcdFx0ICAgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsIDAsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gZGV2bGluayBQb3J0IENyZWF0aW9uKioKCk9rYXksIHNvIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYSBuZXcgcG9ydCB3aXRoaW4gdGhlIGBkZXZsaW5rYCBmcmFtZXdvcmsuIFJpZ2h0LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBgZGV2bGluay0mZ3Q7b3BzLSZndDtwb3J0X25ld2AuIEhtbSwgc28gdGhhdCBtZWFucyB0aGUgY29yZSBwb3J0IGNyZWF0aW9uIGxvZ2ljIGlzIGRlbGVnYXRlZCB0byB0aGUgYGRldmxpbmtgIGRldmljZSYjMzk7cyBzcGVjaWZpYyBkcml2ZXIuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBkZWZpbmUgYW5kIGltcGxlbWVudCB0aGF0IGBwb3J0X25ld2Agb3BlcmF0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgcmlnaHQ/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgZHJpdmVyIGNvZGUgYW5kIHNlZSBob3cgdmFyaW91cyBuZXR3b3JrIGRldmljZXMgaGFuZGxlIHBvcnQgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBhbGwgdGhhdCBnb29kIHN0dWZmIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwucG9ydF9uZXdcXHMqPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTMyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGljZV9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTM0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMzUwOlx0LnBvcnRfbmV3ID0gaWNlX2RldmxpbmtfcG9ydF9uZXcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTM1MS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmM9MzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbWx4NV9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTM4OC0jaWZkZWYgQ09ORklHX01MWDVfU0ZfTUFOQUdFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzozODk6XHQucG9ydF9uZXcgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9uZXcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTM5MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgcG9ydF9uZXdgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKmljZSogYW5kICptbHg1KiBhcmUgdGhlIG9ubHkgb25lcyBjdXJyZW50bHkgaW1wbGVtZW50aW5nIGBwb3J0X25ld2AuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIGEgYnJvYWRlciBzZXQgb2YgbmV0d29yayBkcml2ZXJzIHRvIGhhdmUgaW1wbGVtZW50ZWQgdGhhdCBmdW5jdGlvbiBieSBub3cuIFdhaXQgYSBzZWNvbmQuLi4gKm5ldGRldnNpbSogZG9lc24mIzM5O3QgaW1wbGVtZW50IGBwb3J0X25ld2A/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB3aHkgYG5ldGRldnNpbWAgaXMgbWlzc2luZyB0aGUgYHBvcnRfbmV3YCBmZWF0dXJlIC0gSSB0aG91Z2h0IHRoYXQgd291bGQgaGF2ZSBiZWVuIHVzZWQgZm9yIHNpbXVsYXRpb24gcHVycG9zZXMuIE5lZWQgdG8gZmxhZyB0aGF0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSByZWxhdGl2ZWx5IGVhc3kgaW1wbGVtZW50YXRpb24gdG8gYWRkLCBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIHdoeSBgbmV0ZGV2c2ltYCBkb2VzIG5vdCBoYXZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnBvcnRfbmV3XFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXRkZXZzaW1gIERldmxpbmsgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGRldmxpbmsgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRldmxpbmsgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGluZ3MuIEFyZSB0aGV5IGFkaGVyaW5nIHRvIHRoZSBzdGFuZGFyZCBkZXZsaW5rIEFQST8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRldmlhdGlvbnMgb3Igb3B0aW1pemF0aW9ucz8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBjb3VsZCBiZSB1c2VkIGluIHNvbWUgZnV0dXJlIHdvcmsuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldmxpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQwOT1uc2ltX2Rldl9kZXZsaW5rX3RyYXBfZHJvcF9jb3VudGVyX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDI1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNi1cdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE2NDg9aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1My1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNjU0Olx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2NfbnMoXHUwMDI2bnNpbV9kZXZfZGV2bGlua19vcHMsIHNpemVvZigqbnNpbV9kZXYpLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTUtXHRcdFx0XHQgbnNpbV9idXNfZGV2LVx1MDAzZWluaXRpYWxfbmV0LCBcdTAwMjZuc2ltX2J1c19kZXYtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBgbnNpbV9kZXZfZGV2bGlua19vcHNgIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgY29kZSByZWxhdGVkIHRvIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBvciBmdW5jdGlvbnMgd2l0aGluIGEgc3BlY2lmaWMgZHJpdmVyIG9yIHN1YnN5c3RlbSByZWxhdGVkIHRvIHNpbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMuIEdpdmVuIHRoZSBgZGV2bGlua2AgcHJlZml4LCBJJiMzOTtkIHdhZ2VyIGl0JiMzOTtzIGdvdCBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBgZGV2bGlua2AgaW5mcmFzdHJ1Y3R1cmUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCByZWdpc3RlcmluZyBhIHNpbXVsYXRlZCBkZXZpY2Ugd2l0aGluIHRoZSBgZGV2bGlua2Agc3lzdGVtPyBPciBwZXJoYXBzIG1hbmFnaW5nIGl0cyByZXNvdXJjZXMsIGxpa2UgcG9ydHMgb3IgdmlydHVhbCBmdW5jdGlvbnMsIHRocm91Z2ggdGhlIGBkZXZsaW5rYCBpbnRlcmZhY2U/IEFyZSB0aGVyZSBjdXN0b20gYXR0cmlidXRlcyBvciBzdGF0aXN0aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGBuc2ltYCBkZXZpY2UgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQgd2l0aGluIGBkZXZsaW5rYCYjMzk7cyBzdHJ1Y3R1cmU/CgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2Agc3RydWN0dXJlLiBBcmUgdGhlcmUgYHByb2JlYCwgYHJlbW92ZWAsIGBnZXRfcGFyYW1zYCwgYHNldF9wYXJhbXNgLCBgYXR0cl9nZXRgLCBgYXR0cl9zZXRgIChvciBzaW1pbGFyKSBmdW5jdGlvbnM/IFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHR5cGVzIGZvciBlYWNoIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBvdXQgd2lsbCBiZSBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93LgoKRmluYWxseSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHNpbXVsYXRpb24gbG9naWMuIERvZXMgaXQgdHJpZ2dlciBhbnkgY2FsbGJhY2tzIG9yIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBgbnNpbWAgZnJhbWV3b3JrIGl0c2VsZj8gVGhpcyBjb3VsZCBpbnZvbHZlIGRldmljZSBlbXVsYXRpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBvciBvdGhlciBzaW11bGF0ZWQgYWN0aXZpdGllcy4gVW5kZXJzdGFuZGluZyB0aGF0IGxpbmthZ2UgYmV0d2VlbiBgZGV2bGlua2AgYW5kIGBuc2ltYCB3aWxsIGJlIGtleS4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbjE0MjY6XHRcdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXG4xNDI3Olx0XHQuZXN3aXRjaF9tb2RlX2dldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfZ2V0LFxuMTQyODpcdFx0LnN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zID0gREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSyxcbjE0Mjk6XHRcdC5yZWxvYWRfYWN0aW9ucyA9IEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCksXG4xNDMwOlx0XHQucmVsb2FkX2Rvd24gPSBuc2ltX2Rldl9yZWxvYWRfZG93bixcbjE0MzE6XHRcdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXG4xNDMyOlx0XHQuaW5mb19nZXQgPSBuc2ltX2Rldl9pbmZvX2dldCxcbjE0MzM6XHRcdC5mbGFzaF91cGRhdGUgPSBuc2ltX2Rldl9mbGFzaF91cGRhdGUsXG4xNDM0Olx0XHQudHJhcF9pbml0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2luaXQsXG4xNDM1Olx0XHQudHJhcF9hY3Rpb25fc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2FjdGlvbl9zZXQsXG4xNDM2Olx0XHQudHJhcF9ncm91cF9zZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfZ3JvdXBfc2V0LFxuMTQzNzpcdFx0LnRyYXBfcG9saWNlcl9zZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfcG9saWNlcl9zZXQsXG4xNDM4Olx0XHQudHJhcF9wb2xpY2VyX2NvdW50ZXJfZ2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX3BvbGljZXJfY291bnRlcl9nZXQsXG4xNDM5Olx0XHQucmF0ZV9sZWFmX3R4X3NoYXJlX3NldCA9IG5zaW1fbGVhZl90eF9zaGFyZV9zZXQsXG4xNDQwOlx0XHQucmF0ZV9sZWFmX3R4X21heF9zZXQgPSBuc2ltX2xlYWZfdHhfbWF4X3NldCxcbjE0NDE6XHRcdC5yYXRlX2xlYWZfdGNfYndfc2V0ID0gbnNpbV9sZWFmX3RjX2J3X3NldCxcbjE0NDI6XHRcdC5yYXRlX25vZGVfdHhfc2hhcmVfc2V0ID0gbnNpbV9ub2RlX3R4X3NoYXJlX3NldCxcbjE0NDM6XHRcdC5yYXRlX25vZGVfdHhfbWF4X3NldCA9IG5zaW1fbm9kZV90eF9tYXhfc2V0LFxuMTQ0NDpcdFx0LnJhdGVfbm9kZV90Y19id19zZXQgPSBuc2ltX25vZGVfdGNfYndfc2V0LFxuMTQ0NTpcdFx0LnJhdGVfbm9kZV9uZXcgPSBuc2ltX3JhdGVfbm9kZV9uZXcsXG4xNDQ2Olx0XHQucmF0ZV9ub2RlX2RlbCA9IG5zaW1fcmF0ZV9ub2RlX2RlbCxcbjE0NDc6XHRcdC5yYXRlX2xlYWZfcGFyZW50X3NldCA9IG5zaW1fcmF0ZV9sZWFmX3BhcmVudF9zZXQsXG4xNDQ4Olx0XHQucmF0ZV9ub2RlX3BhcmVudF9zZXQgPSBuc2ltX3JhdGVfbm9kZV9wYXJlbnRfc2V0LFxuMTQ0OTpcdFx0LnRyYXBfZHJvcF9jb3VudGVyX2dldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9kcm9wX2NvdW50ZXJfZ2V0LFxuMTQ1MDpcdH07XG4xNDUxOlx0XG4xNDUyOlx0I2RlZmluZSBOU0lNX0RFVl9NQVhfTUFDU19ERUZBVUxUIDMyXG4xNDUzOlx0I2RlZmluZSBOU0lNX0RFVl9URVNUMV9ERUZBVUxUIHRydWVcbjE0NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSYjMzk7cyBQb3J0IENyZWF0aW9uIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGBuZXRkZXZzaW1gIGlzIG1pc3NpbmcgZGlyZWN0IHN1cHBvcnQgZm9yIGBwb3J0X25ld2AuIEhtbSwgdGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3b3JrYXJvdW5kPyBDYW4gSSBzdGlsbCBjb25qdXJlIGEgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgcG9ydCB3aXRoaW4gYG5ldGRldnNpbWAgdXNpbmcgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgaG93IGBuZXRkZXZzaW1gIGhhbmRsZXMgcG9ydCBjcmVhdGlvbiBpbiBnZW5lcmFsLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgcmVsYXRlZCB0byB0aGF0IGFzcGVjdC4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtcyB0byBzZWUgaWYgSSBjYW4gZmluZCBhIGNsZXZlciB3YXkgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lIGRlc3BpdGUgdGhlIGFwcGFyZW50IGxpbWl0YXRpb24uIFBlcmhhcHMgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgb3IgYW4gaW5kaXJlY3QgbWV0aG9kIGlzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfcG9ydF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWdpc3RlcmluZyBhIERldmljZSBQb3J0IC0gQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKT2theSwgaG9sZCBvbi4gYGRldmxfcG9ydF9yZWdpc3RlcmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBjYWxsLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBmZXcgdGhpbmdzIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZy4gSXMgdGhpcyBhIG5ldyBkZXZpY2UsIG9yIGlzIHRoaXMgYW4gZXhpc3Rpbmcgb25lIHRoYXQmIzM5O3MgYmVpbmcgcmUtaW5pdGlhbGl6ZWQ/IENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLiBXaGF0IHN0YWdlIGFyZSB3ZSBhdD8gSXMgdGhpcyBoYXBwZW5pbmcgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcywgb3IgYXJlIHdlIGRlZXAgd2l0aGluIGEgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uPyBUaGUgcGxhY2VtZW50IGFsb25lIGdpdmVzIG1lIGEgaHVnZSBjbHVlIGFzIHRvIHRoZSBleHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCYjMzk7cyB0aGUgcG9ydCBzdHJ1Y3R1cmUgbG9vayBsaWtlPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHdlIHBhc3NpbmcgdG8gaXQ/IEhhdmUgd2UgaGFuZGxlZCBlcnJvciBjb25kaXRpb25zIGNvcnJlY3RseSBhdCB0aGlzIHBvaW50IG9mIHRoZSBjb2RlIHBhdGg/IEEgZnVuY3Rpb24gd2l0aCAmIzM0O3JlZ2lzdGVyJiMzNDsgaW4gdGhlIG5hbWUgYWx3YXlzIGJlZ3MgcXVlc3Rpb25zIGFib3V0IGF0b21pY2l0eSBhbmQgY29uY3VycmVuY3kuIElzIHRoZXJlIGEgbXV0ZXggcHJvdGVjdGluZyB0aGlzPyBJcyB0aGlzIGNhbGwgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gSWYgc28sIGFyZSB3ZSB1c2luZyBhcHByb3ByaWF0ZSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgZGVzaWduIGhhcyBhZGRyZXNzZWQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEFsc28sIGhvdyBhcmUgd2UgaGFuZGxpbmcgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgYXNwZWN0cz8gQXJlIHdlIHByZS1hbGxvY2F0aW5nIG1lbW9yeSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhcmUgd2UgZHluYW1pY2FsbHkgYWxsb2NhdGluZyB0aGVtPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiB0aGUgcmVnaXN0cmF0aW9uIGZhaWxzIGF0IGEgbGF0ZXIgcG9pbnQuIEFuZCBmaW5hbGx5LCBpcyB0aGVyZSBzdWZmaWNpZW50IHZhbGlkYXRpb24gb24gdGhlIGRldmljZSBzdHJ1Y3QgYmVmb3JlIHJlZ2lzdHJhdGlvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bF9wb3J0X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ1NT1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ4My1cdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcdTAwMjZhdHRycyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQ4NDpcdGVyciA9IGRldmxfcG9ydF9yZWdpc3Rlcihwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpLCBkZXZsaW5rX3BvcnQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ4NS1cdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZXBvcnRfaW5kZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBfX25zaW1fZGV2X3BvcnRfYWRkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fbnNpbV9kZXZfcG9ydF9hZGRgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBwb3J0LCBsaWtlbHkgd2l0aGluIGEgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LCBnaXZlbiB0aGUgJiMzNDtuc2ltJiMzNDsgcHJlZml4LiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgYSBmZXcgdGhpbmdzOgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQmIzM5O3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbW9kaWZpZWQgb3IgYWNjZXNzZWQ/IElzIGl0IGEgbGlua2VkIGxpc3QsIGEgaGFzaCB0YWJsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHJlcHJlc2VudGluZyBuZXR3b3JrIHBvcnRzIHdpdGhpbiB0aGUgc2ltdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBlcnJvcnM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIHJlc291cmNlIGV4aGF1c3Rpb24sIGludmFsaWQgcG9ydCBudW1iZXJzLCBvciBjb25mbGljdHM/IFJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBlc3NlbnRpYWwsIGVzcGVjaWFsbHkgaW4gYSBzaW11bGF0aW9uLCB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBhY2N1cmF0ZSByZXN1bHRzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgZXJyb3IgY29kZXMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZXhjZXB0aW9uIG1lY2hhbmlzbXMuCiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gdGhyZWFkLXNhZmU/IE9yIGRvZXMgdGhpcyBwcmVzZW50IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBOZXR3b3JrIHNpbXVsYXRpb25zIG9mdGVuIGludm9sdmUgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMsIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byBwb3J0IHN0cnVjdHVyZXMgY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgbXV0ZXhlcywgb3IgYXRvbWljIG9wZXJhdGlvbnMgdXNlZC4gSWYgaXQmIzM5O3Mgc2luZ2xlLXRocmVhZGVkLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXQgaXQgbWF5IGFsc28gYmUgYSBib3R0bGVuZWNrLgoqICAgKipDb250ZXh0OioqIFdoYXQgaXMgdGhlIGNhbGxpbmcgY29udGV4dD8gV2hhdCBvdGhlciBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnJvYWRlciBwdXJwb3NlIG9mIHRoaXMgJiMzNDtwb3J0IGFkZCYjMzQ7IG9wZXJhdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBzaW11bGF0aW9uIGNvbXBvbmVudHMuCiogICAqKkFic3RyYWN0aW9uIExheWVyOioqIElzIHRoaXMgcGFydCBvZiBhIGxvd2VyIGxldmVsIEFQST8gSXMgdGhpcyBhIHRoaW4gd3JhcHBlciBvciBpcyB0aGVyZSBzdWJzdGFudGlhbCBjb2RlIGluIHRoZSBmdW5jdGlvbj8gRG9lcyB0aGUgZnVuY3Rpb24gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd29yayBvciBqdXN0IGRlbGVnYXRlIHRvIGEgbW9yZSBhYnN0cmFjdGVkIHN5c3RlbSBvciBldmVuIGFuIE9TIGNhbGw/CgpJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGNvcmUgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgbmV0d29yayBzaW11bGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDU1Olx0c3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG4xNDU2Olx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxuMTQ1NzpcdHtcbjE0NTg6XHRcdHN0cnVjdCBkZXZsaW5rX3BvcnRfYXR0cnMgYXR0cnMgPSB7fTtcbjE0NTk6XHRcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuMTQ2MDpcdFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xuMTQ2MTpcdFx0aW50IGVycjtcbjE0NjI6XHRcbjE0NjM6XHRcdGlmICh0eXBlID09IE5TSU1fREVWX1BPUlRfVFlQRV9WRiBcdTAwMjZcdTAwMjYgIW5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0NjU6XHRcbjE0NjY6XHRcdG5zaW1fZGV2X3BvcnQgPSBremFsbG9jX29iaigqbnNpbV9kZXZfcG9ydCk7XG4xNDY3Olx0XHRpZiAoIW5zaW1fZGV2X3BvcnQpXG4xNDY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTQ2OTpcdFx0bnNpbV9kZXZfcG9ydC1cdTAwM2Vwb3J0X2luZGV4ID0gbnNpbV9kZXZfcG9ydF9pbmRleCh0eXBlLCBwb3J0X2luZGV4KTtcbjE0NzA6XHRcdG5zaW1fZGV2X3BvcnQtXHUwMDNlcG9ydF90eXBlID0gdHlwZTtcbjE0NzE6XHRcbjE0NzI6XHRcdGRldmxpbmtfcG9ydCA9IFx1MDAyNm5zaW1fZGV2X3BvcnQtXHUwMDNlZGV2bGlua19wb3J0O1xuMTQ3MzpcdFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpIHtcbjE0NzQ6XHRcdFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BIWVNJQ0FMO1xuMTQ3NTpcdFx0XHRhdHRycy5waHlzLnBvcnRfbnVtYmVyID0gcG9ydF9pbmRleCAmIzQzOyAxO1xuMTQ3NjpcdFx0fSBlbHNlIHtcbjE0Nzc6XHRcdFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRjtcbjE0Nzg6XHRcdFx0YXR0cnMucGNpX3ZmLnBmID0gMDtcbjE0Nzk6XHRcdFx0YXR0cnMucGNpX3ZmLnZmID0gcG9ydF9pbmRleDtcbjE0ODA6XHRcdH1cbjE0ODE6XHRcdG1lbWNweShhdHRycy5zd2l0Y2hfaWQuaWQsIG5zaW1fZGV2LVx1MDAzZXN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXHUwMDNlc3dpdGNoX2lkLmlkX2xlbik7XG4xNDgyOlx0XHRhdHRycy5zd2l0Y2hfaWQuaWRfbGVuID0gbnNpbV9kZXYtXHUwMDNlc3dpdGNoX2lkLmlkX2xlbjtcbjE0ODM6XHRcdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcdTAwMjZhdHRycyk7XG4xNDg0Olx0XHRlcnIgPSBkZXZsX3BvcnRfcmVnaXN0ZXIocHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSwgZGV2bGlua19wb3J0LFxuMTQ4NTpcdFx0XHRcdFx0IG5zaW1fZGV2X3BvcnQtXHUwMDNlcG9ydF9pbmRleCk7XG4xNDg2Olx0XHRpZiAoZXJyKVxuMTQ4NzpcdFx0XHRnb3RvIGVycl9wb3J0X2ZyZWU7XG4xNDg4Olx0XG4xNDg5Olx0XHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSkge1xuMTQ5MDpcdFx0XHR1NjQgcGFyZW50X2lkID0gREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QO1xuMTQ5MTpcdFx0XHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBwYXJhbXMgPSB7XG4xNDkyOlx0XHRcdFx0LnNpemVfbWF4ID0gMTAwLFxuMTQ5MzpcdFx0XHRcdC5zaXplX2dyYW51bGFyaXR5ID0gMSxcbjE0OTQ6XHRcdFx0XHQudW5pdCA9IERFVkxJTktfUkVTT1VSQ0VfVU5JVF9FTlRSWVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIFBhdGggaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpdCB0b3VjaGVzIHdpdGhpbiBgbmV0ZGV2c2ltYCBpcyBjb250aW5nZW50IG9uIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBuZXRkZXZzaW1gIG9ubHkgc3VwcG9ydHMgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BIWVNJQ0FMYCBhbmQgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRmAuICBUaGVyZWZvcmUsIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoIGlzIGltbWVkaWF0ZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuICBJIG5lZWQgdG8gYmUgY2VydGFpbiwgdGhvdWdoLgoKSSByZXZpZXdlZCB0aGUgY29kZToKYGBgYwoJaWYgKGRldmxpbmtfcG9ydC0mZ3Q7YXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgJmFtcDsmYW1wOwoJICAgIG9wcy0mZ3Q7cG9ydF9mbl9zdGF0ZV9nZXQgJmFtcDsmYW1wOyAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7CmBgYAphbmQgaXQgcmVsaWVzIG9uIHRoYXQgYFBDSV9TRmAgZmxhdm91ciwgYW5kIGFsc28gdGhlIGBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0YCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIEkgcmVtZW1iZXIgY2hlY2tpbmc6ICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zZi9kZXZsaW5rLmNgLiBJdCBsb29rcyBsaWtlIGBpY2VgIGFuZCBgbWx4NWAgYXJlIHRoZSBvbmx5IG9uZXMuIEJvdGggYXJlLCBhcyBJIHJlY2FsbCwgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgc2VlbXMgdG8gY29uZmlybSBteSBmaXJzdCBpbXByZXNzaW9uIHRoYXQgdGhpcyBpcyBhbiB1bnJlYWNoYWJsZSBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgc29tZSAqb3RoZXIqIHdheSB0byBjcmVhdGUgYSBwb3J0IHdpdGggdGhpcyBmbGF2b3I/IENhbiBpdCBiZSBzZXQgdGhyb3VnaCBuZXRsaW5rLCBtYXliZT8gIE5vLCB0aGUgZmxhdm91ciBpcyBzZXQgYnkgdGhlIGRyaXZlciB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBwb3J0LCBzbyBpdCB3aWxsIGFsd2F5cyBiZSBmYWxzZS4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjazogY2FuIGBtbHg1YCBvciBgaWNlYCBldmVuICpiZSogZW11bGF0ZWQgaW4gUUVNVT8gIE5vLCBgbWx4NWAgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIGBpY2VgIHJlcXVpcmVzIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlLiAgTmVpdGhlciBpcyBlbXVsYXRlZC4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4gVGltZSB0byByZXZpZXcgdGhlIGluc3RydWN0aW9uczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2VlbXMgbGlrZSBhIG1hdGNoLgoKVGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoIGlzIHdpdGhpbiBgbmV0L2RldmxpbmsvcG9ydC5jYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgYnV0IGl0JiMzOTtzICpzcGVjaWZpYyogdG8gdGhpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBjb25kaXRpb24uIEJlY2F1c2UgYGljZWAgYW5kIGBtbHg1YCBhcmUgdGhlIG9ubHkgZHJpdmVycyB0aGF0ICpjcmVhdGUqIHBvcnRzIHdpdGggdGhhdCBmbGF2b3VyLCBhbmQgbmVpdGhlciBkcml2ZXIgaXMgZW11bGF0ZWQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBRRU1VLgoKV2FpdCwgY291bGQgYSB1c2VyICpmb3JjZSogdGhpcyBmbGF2b3VyIHdpdGggYSBuZXRsaW5rIHJlcXVlc3Q/IExldCBtZSBjaGVjayBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YDoKYGBgYwoJbmV3X2F0dHJzLmZsYXZvdXIgPSBubGFfZ2V0X3UxNihpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSk7CgkuLi4KCWVyciA9IGRldmxpbmstJmd0O29wcy0mZ3Q7cG9ydF9uZXcoZGV2bGluaywgJmFtcDtuZXdfYXR0cnMsIGV4dGFjaywgJmFtcDtkZXZsaW5rX3BvcnQpOwpgYGAKWWVzLCB0aGUgdXNlciAqY2FuKiByZXF1ZXN0IGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIgdmlhIG5ldGxpbmsuIEhvd2V2ZXIsIGBkZXZsaW5rLSZndDtvcHMtJmd0O3BvcnRfbmV3YCAqbXVzdCogYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGRyaXZlci4gTG9va2luZyBiYWNrLCBvbmx5IGBpY2VgIGFuZCBgbWx4NWAgaW1wbGVtZW50IHRoYXQuIGBuZXRkZXZzaW1gIGRvZXMgKm5vdCouIFNvLCBpZiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgdGhpcywgaXQgd2lsbCBmYWlsIHdpdGggYC1FT1BOT1RTVVBQYC4gVGhlIGNoZWNrIGlzIGhlcmU6CmBgYGMKCWlmICghZGV2bGluay0mZ3Q7b3BzLSZndDtwb3J0X25ldykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYApTbywgc3RpbGwsIGltcG9zc2libGUgaW4gUUVNVS4KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBvcHMtJmd0O3BvcnRfZm5fc3RhdGVfZ2V0YCwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIElmIHdlIHNvbWVob3cgaGFkIGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIsIHdlIGFsc28gbmVlZCB0aGF0IGltcGxlbWVudGVkLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZHJpdmVycyBpbXBsZW1lbnQgaXQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnBvcnRfZm5fc3RhdGVfZ2V0XFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgaWNlX2RldmxpbmtfcG9ydF9zZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgwOS1cdC5wb3J0X2ZuX2h3X2FkZHJfc2V0ID0gaWNlX2RldmxpbmtfcG9ydF9mbl9od19hZGRyX3NldCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MTA6XHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX2dldCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MTEtXHQucG9ydF9mbl9zdGF0ZV9zZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX3NldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jPTExMj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgbWx4NV9lc3dfcGZfdmZfZGxfcG9ydF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMTgtXHQucG9ydF9mbl9taWdyYXRhYmxlX3NldCA9IG1seDVfZGV2bGlua19wb3J0X2ZuX21pZ3JhdGFibGVfc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYzoxMTk6XHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2RldmxpbmtfcGZfcG9ydF9mbl9zdGF0ZV9nZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jLTEyMC1cdC5wb3J0X2ZuX3N0YXRlX3NldCA9IG1seDVfZGV2bGlua19wZl9wb3J0X2ZuX3N0YXRlX3NldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jPTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgbWx4NV9lc3dfZGxfc2ZfcG9ydF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzMtI2lmZGVmIENPTkZJR19NTFg1X1NGX01BTkFHRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3cvZGV2bGlua19wb3J0LmM6MTc0Olx0LnBvcnRfZm5fc3RhdGVfZ2V0ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfZm5fc3RhdGVfZ2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzUtXHQucG9ydF9mbl9zdGF0ZV9zZXQgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9mbl9zdGF0ZV9zZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjYzCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBRRU1VKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYW5hbHl6ZWQgdGhlIGNvZGUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjb25jbHVzaXZlLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG9ydF9mbl9zdGF0ZV9nZXRgIGZ1bmN0aW9uIGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlIGBpY2VgIGFuZCBgbWx4NWAgZHJpdmVycy4gR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBvdmVyYWxsIGNvbnRleHQsIEkmIzM5O20gbm93IGZhaXJseSBjZXJ0YWluIHRoYXQgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcywgaW4gZmFjdCwgY29tcGxldGVseSB1bnJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgd2l0aGluIFFFTVUuIFRoZXJlJiMzOTtzIGp1c3Qgbm8gd2F5IGZvciBpdCB0byBiZSB0cmlnZ2VyZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dXAuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gSXQmIzM5O3MganVzdCBub3QgYW4gYXJlYSB0aGF0IHJlcXVpcmVzIG91ciBmb2N1cyByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb2RlIHBhdGggaW4gZGV2bGluayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZm9yIHBvcnRzIHdpdGggdGhlIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBmbGF2b3VyLiBUaGlzIGZsYXZvdXIgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIE1lbGxhbm94IG1seDUgYW5kIEludGVsIGljZSBkcml2ZXJzLCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGUgY29kZSByZXF1aXJlcyB0aGUgcG9ydF9mbl9zdGF0ZV9nZXQgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gb25seSBpbXBsZW1lbnRlZCBieSB0aGVzZSB0d28gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjE5OjU2LjkyMzE5NjQ0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODk3MzIwODY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY29kZSBwYXRoIGluIGRldmxpbmsgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGZvciBwb3J0cyB3aXRoIHRoZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgZmxhdm91ci4gVGhpcyBmbGF2b3VyIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBNZWxsYW5veCBtbHg1IGFuZCBJbnRlbCBpY2UgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgcmVxdWlyZXMgdGhlIHBvcnRfZm5fc3RhdGVfZ2V0IGNhbGxiYWNrLCB3aGljaCBpcyBhbHNvIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlc2UgdHdvIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjE5OjU2LjkyMzIwMzUxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwMzAxNjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWEzY2RhMDBmY2JiNjZmMTNjM2Y4MDA4MGQ2ZGMxZmU5N2NiMmM3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9wb3J0LmMgYi9uZXQvZGV2bGluay9wb3J0LmNcXG5pbmRleCAxNTI4ZjJkMTQ4ZGZjLi42YTk4NTdiZjc5ZGExIDEwMDY0NFxcbi0tLSBhL25ldC9kZXZsaW5rL3BvcnQuY1xcbisrKyBiL25ldC9kZXZsaW5rL3BvcnQuY1xcbkBAIC03MDgsNyArNzA4LDEwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfcG9ydF9vcHMgKm9wcyA9IGRldmxpbmtfcG9ydC1cXHUwMDNlb3BzO1xcbitcXHRlbnVtIGRldmxpbmtfcG9ydF9mbl9vcHN0YXRlIG9wc3RhdGU7XFxuK1xcdGVudW0gZGV2bGlua19wb3J0X2ZuX3N0YXRlIHN0YXRlO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKHRiW0RFVkxJTktfUE9SVF9GVU5DVElPTl9BVFRSX0hXX0FERFJdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhb3BzLVxcdTAwM2Vwb3J0X2ZuX2h3X2FkZHJfc2V0KSB7XFxuQEAgLTcyMSw2ICs3MjQsMjAgQEAgc3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbiBcXHRcXHRcXHRcXHQgICAgXFxcIkZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgc3RhdGUgc2V0dGluZ1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4rXFx0aWYgKGRldmxpbmtfcG9ydC1cXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9wcy1cXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXFx1MDAyNlxcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xcbitcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXFx1MDAyNnN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHN0YXRlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRlID09IERFVkxJTktfUE9SVF9GTl9TVEFURV9BQ1RJVkUpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcInBvcnQgZnVuY3Rpb24gcGFyYW1ldGVycyBjYW4ndCBiZSBjb25maWd1cmVkIHdoZW4gcG9ydCBpcyB1cFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRhdHRyID0gdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfQ0FQU107XFxuIFxcdGlmIChhdHRyKSB7XFxuIFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBjYXBzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToxOTo1Ny40NTY1OTM3MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg0Mzk3OTg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY29kZSBwYXRoIGluIGRldmxpbmsgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGZvciBwb3J0cyB3aXRoIHRoZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgZmxhdm91ci4gVGhpcyBmbGF2b3VyIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBNZWxsYW5veCBtbHg1IGFuZCBJbnRlbCBpY2UgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgcmVxdWlyZXMgdGhlIHBvcnRfZm5fc3RhdGVfZ2V0IGNhbGxiYWNrLCB3aGljaCBpcyBhbHNvIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlc2UgdHdvIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhM2NkYTAwZmNiYjY2ZjEzYzNmODAwODBkNmRjMWZlOTdjYjJjNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToxOTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL3BvcnQuYyBiL25ldC9kZXZsaW5rL3BvcnQuY1xuaW5kZXggMTUyOGYyZDE0OGRmYy4uNmE5ODU3YmY3OWRhMSAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL3BvcnQuY1xuKysrIGIvbmV0L2RldmxpbmsvcG9ydC5jXG5AQCAtNzA4LDcgKzcwOCwxMCBAQCBzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzICpvcHMgPSBkZXZsaW5rX3BvcnQtXHUwMDNlb3BzO1xuK1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fb3BzdGF0ZSBvcHN0YXRlO1xuK1x0ZW51bSBkZXZsaW5rX3BvcnRfZm5fc3RhdGUgc3RhdGU7XG4gXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmICh0YltERVZMSU5LX1BPUlRfRlVOQ1RJT05fQVRUUl9IV19BRERSXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhb3BzLVx1MDAzZXBvcnRfZm5faHdfYWRkcl9zZXQpIHtcbkBAIC03MjEsNiArNzI0LDIwIEBAIHN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcbiBcdFx0XHRcdCAgICBcIkZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgc3RhdGUgc2V0dGluZ1wiKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuK1x0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcbitcdCAgICBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXHUwMDI2XHUwMDI2ICF0YltERVZMSU5LX1BPUlRfRk5fQVRUUl9TVEFURV0pIHtcbitcdFx0ZXJyID0gb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXHUwMDI2c3RhdGUsXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2b3BzdGF0ZSwgZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRpZiAoc3RhdGUgPT0gREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcInBvcnQgZnVuY3Rpb24gcGFyYW1ldGVycyBjYW4ndCBiZSBjb25maWd1cmVkIHdoZW4gcG9ydCBpcyB1cFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0YXR0ciA9IHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX0NBUFNdO1xuIFx0aWYgKGF0dHIpIHtcbiBcdFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIGNhcHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToxOTo1Ny40NTY2MDA0MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg0NjE3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGRldmxpbmsgUG9ydCBGdW5jdGlvbiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2suIFNwZWNpZmljYWxseSwgaWYgdGhlIHBvcnQgZmxhdm91ciBpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCwgYW5kIHRoZSBgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0YCBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIGJ1dCB0aGUgYHRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXWAgYXR0cmlidXRlIGlzbid0IGV4cGxpY2l0bHkgcHJvdmlkZWQsIHRoZW4gdGhlIHBhdGNoIGNhbGxzIGBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXRgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgREVWTElOS19QT1JUX0ZOX1NUQVRFX0FDVElWRWAsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvdWxkIGNyZWF0ZSBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24gaWYgdHJpZ2dlcmVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiByZWFjaGFibGUsIGFuZCwgaWYgc28sIGRvZXMgaXQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG1heWJlIGV2ZW4gZnV6emluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaXMgY2FsbGVkIGZyb20uIEknbSBwcmV0dHkgc3VyZSBpdCdzIGludm9sdmVkIGluIHRoZSBkZXZsaW5rIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBwcm9iYWJseSBzb21ld2hlcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyBhIHBvcnQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgYGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZWAgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNhbGwgaGllcmFyY2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDIuOTQxMjIxOTg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDkzNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9wb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jPTY5Nj1zdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mbl9zdGF0ZV9zZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYy03MDUtXFxubmV0L2RldmxpbmsvcG9ydC5jOjcwNjpzdGF0aWMgaW50IGRldmxpbmtfcG9ydF9mdW5jdGlvbl92YWxpZGF0ZShzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXFxubmV0L2RldmxpbmsvcG9ydC5jLTcwNy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03OTg9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODExLVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4MTI6XFx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlKHBvcnQsIHRiLCBleHRhY2spO1xcbm5ldC9kZXZsaW5rL3BvcnQuYy04MTMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDMuMDA4NzIyMjUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNTExODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZsaW5rIFBvcnQgRnVuY3Rpb24gU2V0KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGhvdyBkZXZsaW5rIGludGVyYWN0cyB3aXRoIG5ldHdvcmsgZGV2aWNlcywgc3BlY2lmaWNhbGx5IGZvciBzZXR0aW5nIHVwIHBvcnQgZnVuY3Rpb25zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjYW4gc2VlIHRoYXQgdGhpcyBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldGAgcm91dGluZSBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSB0aGUgZGV2bGluayBuZXRsaW5rIGhhbmRsZXJzLiBUaGF04oCZcyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGFjdGlvbiBpcyBpbml0aWF0ZWQuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGZsb3cgb2YgdGhpcyBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLiBJIHNlZSB0aGF0IGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBmaXJzdCBjYWxscyBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3ZhbGlkYXRlYC4gVGhhdCBzdWdnZXN0cyB0aGF0IHRoZXJlJ3MgYSB2YWxpZGF0aW9uIHN0ZXAgaW52b2x2ZWQgYmVmb3JlIGFjdHVhbGx5IG1ha2luZyB0aGUgY2hhbmdlLiBTbWFydCBtb3ZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHZhbGlkYXRpb24gc3RlcCwgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHNhZmVseS5cblxuVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpbmdzLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldGAuIEtub3dpbmcgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGFuZCB0cmlnZ2VycyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGF0J3MgYmVpbmcgc2V0LCB3aGF0J3MgYmVpbmcgYWZmZWN0ZWQsIGFuZCBtYXliZSB3aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBjcm9wIHVwLiBUaGlzIGtpbmQgb2Ygb3ZlcnZpZXcgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MDcuMDQzODQ0ODQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODM5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfcG9ydF9mdW5jdGlvbl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kZXZsaW5rL3BvcnQuYz03MDY9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTc5Ny1cXG5uZXQvZGV2bGluay9wb3J0LmM6Nzk4OnN0YXRpYyBpbnQgZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpwb3J0LFxcbm5ldC9kZXZsaW5rL3BvcnQuYy03OTktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTg1MD1pbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODY3LVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4Njg6XFx0XFx0ZXJyID0gZGV2bGlua19wb3J0X2Z1bmN0aW9uX3NldChkZXZsaW5rX3BvcnQsIGF0dHIsIGV4dGFjayk7XFxubmV0L2RldmxpbmsvcG9ydC5jLTg2OS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDowNy4xMTI2OTEwNDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgxMTQyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXRgIGFzIGEgbmV0bGluayBoYW5kbGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBuZXRsaW5rIGhhbmRsZXJzIGFyZSBvZnRlbiBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5J3JlIHR5cGljYWxseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgY29tcGxleCwgbWFraW5nIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gd29yayBvbi5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0YCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSByZWxhdGVkIGBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0YCBpZiBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb3ZlcmFsbCBkZXZsaW5rIGNvbmZpZ3VyYXRpb247IHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MTAuNjkzODM1NDQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzE1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfbmxfcG9ydF9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvbmV0bGlua19nZW4uYz03MDI9Y29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRldmxpbmtfbmxfb3BzWzc1XSA9IHtcXG4tLVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtNzM5LVxcdFxcdC5wcmVfZG9pdFxcdD0gZGV2bGlua19ubF9wcmVfZG9pdF9wb3J0LFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6NzQwOlxcdFxcdC5kb2l0XFx0XFx0PSBkZXZsaW5rX25sX3BvcnRfc2V0X2RvaXQsXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03NDEtXFx0XFx0LnBvc3RfZG9pdFxcdD0gZGV2bGlua19ubF9wb3N0X2RvaXQsXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oPTUwPWludCBkZXZsaW5rX25sX3BvcnRfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDo1MjppbnQgZGV2bGlua19ubF9wb3J0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtNTMtaW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03OTg9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fc2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtODQ5LVxcbm5ldC9kZXZsaW5rL3BvcnQuYzo4NTA6aW50IGRldmxpbmtfbmxfcG9ydF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9kZXZsaW5rL3BvcnQuYy04NTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoxMC43OTM1NTU2MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAwODk0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIElucXVpcnk6IERldmxpbmsgUHJlc2VuY2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgZGV2bGlua2AuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHNldmVyYWwgcmVhc29ucywgd2hldGhlciBJJ20gd29ya2luZyBvbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZWdyYXRpb24sIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgb3IgZXZlbiBhIG1vcmUgZ2VuZXJhbCBzeXN0ZW1zLWxldmVsIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUgc3BlY2lmaWMgS2NvbmZpZyBmcmFnbWVudCBpbiBxdWVzdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb2YgYGRldmxpbmtgIHN1cHBvcnQuIFRoaXMgd2lsbCBwcm9iYWJseSBpbnZvbHZlIGNoZWNraW5nIGRlcGVuZGVuY2llcyBhbmQgYW55IHJlbGV2YW50IHRyaXN0YXRlcyB0aGF0IGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjE0LjI5NDQ1MTc5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTEyNTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoxNC40MTMzNzU5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzYwMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5wYWNraW5nIHRoZSBEZXZsaW5rIE51YW5jZSoqXG5cblJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEknbSBoaXR0aW5nIGEgbWVudGFsIHNwZWVkIGJ1bXAgaGVyZS4uLiBpcyBgZGV2bGlua2AgZnVuY3Rpb25hbGl0eSBiYWtlZCAqZGlyZWN0bHkqIGludG8gdGhlIGNvcmUgb2YgLk5FVCBDb3JlLCBvciBpcyBpdCBkZWxpdmVyZWQgYXMgYSBjb21wb25lbnQgdGhhdCdzIHBhcnQgb2YgdGhlIC5ORVQgU0RLPyBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBjcnVjaWFsIGZvciBob3cgSSdtIGdvaW5nIHRvIGxldmVyYWdlIHRoaXMgdGhpbmcuIFNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgaXQncyBidWlsdCBpbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBkZWdyZWUgdG8gd2hpY2ggaXQgY2FuIGJlIGN1c3RvbWl6ZWQuIEl0IGFsc28gY2hhbmdlcyBteSBtZW50YWwgbW9kZWwgZm9yIHRoZSBidWlsZCBwcm9jZXNzLCB0aGUgZGVwbG95bWVudHMgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSBpcyBwcmV0dHkgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MTguMTkwOTc5NTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1MTQ1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjE4LjI5ODQ5OTkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDQ1NjE5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZsaW5rIE1ha2VmaWxlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBEZXZsaW5rIHN1YnN5c3RlbSByZXNpZGVzLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0b3AgZm9yIG1lIHdoZW4gSSdtIHRyYWNraW5nIGRvd24gYnVpbGQgZGVwZW5kZW5jaWVzIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBEZXZsaW5rIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYywgbWF5YmUgYSBidWlsZCBmbGFnLCBhIGRlcGVuZGVuY3kgY2hhaW4sIG9yIGV2ZW4ganVzdCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHRhcmdldCBJIGV4cGVjdGVkIHRvIHNlZS4gUGVyaGFwcyBJJ20gZGlhZ25vc2luZyBhIGJ1aWxkIGZhaWx1cmUgcmVsYXRlZCB0byBEZXZsaW5rLCBvciBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNlbGVjdGl2ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgcGFydGljdWxhciBEZXZsaW5rIGZlYXR1cmUgZm9yIGEgY3VzdG9tIGJ1aWxkLiBUaGUgTWFrZWZpbGUgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgYWxsIG9mIHRoaXMuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBEZXZsaW5rIGJ1aWxkIHByb2Nlc3MsIHNvIHRoYXQgaXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyMS40MDMwNjM4MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDE1OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlJJREdFKVxcdFxcdCs9IGJyaWRnZS9cXG5uZXQvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxubmV0L01ha2VmaWxlLTI3LW9iai15XFx0XFx0XFx0XFx0Kz0gZHNhL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyMS40OTQwODM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNzE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9ERVZMSU5LYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfTkVUX0RFVkxJTktgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWNsYXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gS25vd2luZyBpdHMgbG9jYXRpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSdsbCBsaWtlbHkgbmVlZCB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSBzb3VyY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgaXQncyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIGRldmljZS1zcGVjaWZpYyBvcHRpb24sIG9yIHBhcnQgb2YgYSBtb3JlIHNwZWNpYWxpemVkIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2VtZW50IGlzIHN0ZXAgb25lIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MjQuODg1MjU5ODA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDEwNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Ni1cXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXFxubmV0L0tjb25maWctNDg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MjUuMDI4NjA2ODA0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTU4ODUxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vbGVhbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQncyBwcm9iYWJseSBiZWluZyBzZWxlY3RlZCwgb3IgYXQgbGVhc3QgaW5mbHVlbmNlZCwgYnkgYSBkcml2ZXIgc29tZXdoZXJlIGluIHRoZSBzeXN0ZW0uIEdpdmVuIHRoYXQgaXQncyBhIGJvb2xlYW4sIGl0J3MgZWl0aGVyIG9uIG9yIG9mZiwgc28gaXRzIHVzZSBpcyBwcmV0dHkgZGVmaW5pdGl2ZS4gVG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSAqc2V0dGluZyogdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb2RlIHBhdGg/IFdoaWNoIGRyaXZlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQ/IE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIGFuZCBzdGFydCBzbGV1dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDoyOC42NDQ0OTUyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzUxNDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnOjUyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRzZWxlY3QgUExETUZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTEtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzUtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnPTY9Y29uZmlnIFBSRVNURVJBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIEJSSURHRSB8fCBCUklER0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTEtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz0yOD1jb25maWcgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMzLVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Nj1jb25maWcgTUxYNV9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTEtXFx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc9Nj1jb25maWcgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXFx0c2VsZWN0IFhaX0RFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjg6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVxcdHNlbGVjdCBNTFhGV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjc6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTIzLVxcdGRlcGVuZHMgb24gVExTIFxcdTAwMjZcXHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTc2PWNvbmZpZyBRRURcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTE5PWNvbmZpZyBTRkNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cXHRzZWxlY3QgUkVHTUFQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTc1LVxcdGltcGx5IFBIWV9USV9HTUlJX1NFTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBBUkNIX0szIFxcdTAwMjZcXHUwMDI2IE9GIFxcdTAwMjZcXHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZz02PWNvbmZpZyBESU5HSEFJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTgtICAgIGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo5OiAgICBzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTEwLSAgICBoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9OTY9Y29uZmlnIElPU01cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAwLVxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE3LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbmRyaXZlcnMvcHRwL0tjb25maWc6MjE4OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbi0tXFxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTAtXFx0c2VsZWN0IFBIWUxJTktcXG5uZXQvZHNhL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxubmV0L2RzYS9LY29uZmlnLTEyLVxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzEuMTU4MDE5OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NTM4MDY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSdzIERldmxpbmsgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBORVRERVZTSU1gIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLiBUaGF0J3MgZ29vZCwgdGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBsZXZlcmFnZSBpdCBmb3Igc29tZSBkZXZsaW5rIHRlc3RpbmcuIEhvd2V2ZXIsIHRoZSBleGlzdGluZyBwYXRjaCBJJ20gbG9va2luZyBhdCBoYXMgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBkZXZsaW5rX3BvcnQtXHUwMDNlYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBgbmV0ZGV2c2ltYCBhY3R1YWxseSAqc3VwcG9ydCogdGhhdCBzcGVjaWZpYyBmbGF2b3IsIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgPyBJdCdzIGNydWNpYWwgZm9yIHRoZSB0ZXN0IHRvIGJlIHZhbGlkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldGRldnNpbWAgY29kZSBhbmQgdmVyaWZ5IGl0cyBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgZmxhdm9yIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIG9yIGVtdWxhdGVkIHdpdGhpbiB0aGUgc2ltdWxhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzUuMDUzNDAzNTY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY2MzY0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjM1LjExNzA4MjQ2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3MjQyNjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZGV0ZXJtaW5lIHdoYXQgZHJpdmVycyBhY3R1YWxseSBsZXZlcmFnZSB0aGlzIHNwZWNpZmljIGZsYXZvciBvZiBgREVWTElOS19QT1JUYC4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIGFuZCBzdGFydCBzZWFyY2hpbmcgd2l0aGluIHRoZSBkcml2ZXIgdHJlZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkLiBJZGVhbGx5LCBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRldmljZXMgYW5kIG5ldHdvcmtpbmcgY2hpcHMgdGhhdCBhcmUgY29uZmlndXJlZCB1c2luZyB0aGlzIGZsYXZvdXIgb2YgcG9ydCwgd2hpY2ggd291bGQgaGVscCBtZSB0byBkZXRlcm1pbmUgd2hpY2ggcGxhdGZvcm1zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBpbnRlcmVzdHMuIE9uY2UgSSBnZXQgdGhlIG5hbWVzIG9mIHNvbWUgcmVsZXZhbnQgZHJpdmVycywgSSBjYW4gc3RhcnQgbG9va2luZyBhdCB0aGVpciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldmxpbmtgIGluZnJhc3RydWN0dXJlIHRvIGNvbmZpZ3VyZSB0aGVzZSBzcGVjaWFsaXplZCBwb3J0cy4gVW5kZXJzdGFuZGluZyB0aGVzZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGFuZCB3aHkgdGhlc2UgcG9ydCB0eXBlcyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjM4Ljk2NDMyODM1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTY0MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXFx0YXR0cnMucGNpX3NmLnBmID0gcGYtXFx1MDAzZWh3LnBmX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkRyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6MzkuMjE1OTAwMTg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTEyODE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2Ugb25seSB0aGUgYGljZWAgYW5kIGBtbHg1YCBkcml2ZXJzIGFyZSB1dGlsaXppbmcgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IGBpY2VgIGlzIEludGVsLCBhbmQgYG1seDVgIGlzIE1lbGxhbm94LiBOb3csIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/XG5cbkhvbGQgb24uLi4gYG1seDVgIGlzIG5vdG9yaW91cyBmb3IgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgSSBiZWxpZXZlIGBpY2VgIGRvZXMgdG9vLCByaWdodD8gRGFtbi4gVGhhdCdzIGEgaHVyZGxlLiBCdXQgbGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZHJpdmVycyBvdXQgdGhlcmUgdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIGZsYXZvdXIgb2YgREVWTElOSyBwb3J0LiBJJ2xsIG5lZWQgdG8gZG8gYSBmdWxsIHNlYXJjaCBvZiB0aGUgdHJlZSBmb3IgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgYW5kIHNlZSB3aGF0IGVsc2UgcG9wcyB1cC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIwOjQ0LjYyNzE4NTA1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMjQyMjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3Q9MTc9RGV2bGluayBwb3J0IGZsYXZvdXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLXBvcnQucnN0LTM2LSAgICAgICB2aXJ0dWFsIGZ1bmN0aW9uIChWRikuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1wb3J0LnJzdDozNzogICAqIC0gYGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgYFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstcG9ydC5yc3QtMzgtICAgICAtIFRoaXMgaW5kaWNhdGVzIGFuIGVzd2l0Y2ggcG9ydCByZXByZXNlbnRpbmcgYSBwb3J0IG9mIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jPTYyMz1pY2VfZGV2bGlua19wb3J0X25ld19jaGVja19hdHRyKHN0cnVjdCBpY2VfcGYgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjYyNzpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTYyOC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmxhdm91ciBvdGhlciB0aGFuIHBjaXNmIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgyMS0gKiBSZXNlcnZlIGEgc3ViZnVuY3Rpb24gbnVtYmVyIGZvciB0aGlzIHBvcnQuIE9ubHkgY2FsbGVkIGZvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo4MjI6ICogREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHBvcnRzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04MjMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04NjA9aW50IGljZV9kZXZsaW5rX2NyZWF0ZV9zZl9wb3J0KHN0cnVjdCBpY2VfZHluYW1pY19wb3J0ICpkeW5fcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjg3MzpcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy04NzQtXFx0YXR0cnMucGNpX3NmLnBmID0gcGYtXFx1MDAzZWh3LnBmX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYz0yNjU9bWx4NV9zZl9uZXdfY2hlY2tfYXR0cihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2bGlua19wb3J0X25ld19hdHRycyAqbmV3X2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jLTI2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jOjI3MDpcXHRpZiAobmV3X2F0dHItXFx1MDAzZWZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NmL2RldmxpbmsuYy0yNzEtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkRyaXZlciBzdXBwb3J0cyBvbmx5IFNGIHBvcnQgYWRkaXRpb25cXFwiKTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9kZXZsaW5rLmg9MjAxPWVudW0gZGV2bGlua19wb3J0X2ZsYXZvdXIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjAtXFx0XFx0XFx0XFx0ICAgICAgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZGV2bGluay5oOjIyMTpcXHRERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YsIC8qIFJlcHJlc2VudHMgZXN3aXRjaCBwb3J0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2RldmxpbmsuaC0yMjItXFx0XFx0XFx0XFx0ICAgICAgKiBmb3IgdGhlIFBDSSBTRi4gSXQgaXMgYW4gaW50ZXJuYWxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz0yMjk9c3RhdGljIGludCBkZXZsaW5rX25sX3BvcnRfYXR0cnNfcHV0KHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtMjYxLVxcdFxcdGJyZWFrO1xcbm5ldC9kZXZsaW5rL3BvcnQuYzoyNjI6XFx0Y2FzZSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0Y6XFxubmV0L2RldmxpbmsvcG9ydC5jLTI2My1cXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUixcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz03MDY9c3RhdGljIGludCBkZXZsaW5rX3BvcnRfZnVuY3Rpb25fdmFsaWRhdGUoc3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0LFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTcyNi1cXHR9XFxubmV0L2RldmxpbmsvcG9ydC5jOjcyNzpcXHRpZiAoZGV2bGlua19wb3J0LVxcdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9kZXZsaW5rL3BvcnQuYy03MjgtXFx0ICAgIG9wcy1cXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXQgXFx1MDAyNlxcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTkxNz1pbnQgZGV2bGlua19ubF9wb3J0X25ld19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtOTQ4LVxcdH1cXG5uZXQvZGV2bGluay9wb3J0LmM6OTQ5OlxcdGlmIChuZXdfYXR0cnMuZmxhdm91ciA9PSBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0YgXFx1MDAyNlxcdTAwMjZcXG5uZXQvZGV2bGluay9wb3J0LmMtOTUwLVxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfU0ZfTlVNQkVSXSkge1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTE0NDc9dm9pZCBkZXZsaW5rX3BvcnRfYXR0cnNfcGNpX3NmX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsIHUzMiBjb250cm9sbGVyLFxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTE0NTMtXFxubmV0L2RldmxpbmsvcG9ydC5jOjE0NTQ6XFx0X19kZXZsaW5rX3BvcnRfYXR0cnNfc2V0KGRldmxpbmtfcG9ydCwgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGKTtcXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ1NS1cXHRhdHRycy1cXHUwMDNlcGNpX3NmLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jPTE0ODg9aW50IGRldmxfcG9ydF9mbl9kZXZsaW5rX3NldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQsXFxuLS1cXG5uZXQvZGV2bGluay9wb3J0LmMtMTQ5Mi1cXG5uZXQvZGV2bGluay9wb3J0LmM6MTQ5MzpcXHRpZiAoV0FSTl9PTihkZXZsaW5rX3BvcnQtXFx1MDAzZWF0dHJzLmZsYXZvdXIgIT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIHx8XFxubmV0L2RldmxpbmsvcG9ydC5jLTE0OTQtXFx0XFx0ICAgIGRldmxpbmtfcG9ydC1cXHUwMDNlYXR0cnMucGNpX3NmLmV4dGVybmFsKSlcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYz0xNTIxPXN0YXRpYyBpbnQgX19kZXZsaW5rX3BvcnRfcGh5c19wb3J0X25hbWVfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRldmxpbmtfcG9ydCxcXG4tLVxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcwLVxcdFxcdGJyZWFrO1xcbm5ldC9kZXZsaW5rL3BvcnQuYzoxNTcxOlxcdGNhc2UgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGOlxcbm5ldC9kZXZsaW5rL3BvcnQuYy0xNTcyLVxcdFxcdGlmIChhdHRycy1cXHUwMDNlcGNpX3NmLmV4dGVybmFsIHx8IGF0dHJzLVxcdTAwM2VwY2lfc2YuY29udHJvbGxlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDo0Ny4xMjk2MTI5NDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5ODcyMzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9uIG9mIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgYSBxdWVzdGlvbiBwb3BzIHVwOiBgbmV0ZGV2c2ltYCAqZGVmaW5pdGVseSogZG9lc24ndCB1c2UgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAuIFRoYXQncyBhIGdpdmVuLiBXaGljaCBtZWFucyB0aGlzIG5ldyBjb2RlIHBhdGggdGhhdCdzIGFkZGVkIGhlcmUgaXMgYWxtb3N0IGNlcnRhaW5seSB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGUgcGF0Y2ggaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRpZiAoZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIFx1MDAyNlx1MDAyNlxuXHQgICAgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0IFx1MDAyNlx1MDAyNiAhdGJbREVWTElOS19QT1JUX0ZOX0FUVFJfU1RBVEVdKSB7XG5cdFx0ZXJyID0gb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0KGRldmxpbmtfcG9ydCwgXHUwMDI2c3RhdGUsXG5cdFx0XHRcdFx0ICAgICBcdTAwMjZvcHN0YXRlLCBleHRhY2spO1xuYGBgXG5cblJpZ2h0LCBpZiB0aGUgZmxhdm9yIGlzbid0IGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLCB0aGF0IGVudGlyZSBjaHVuayBpcyBza2lwcGVkLiBTbyB0aGUgKm9ubHkqIHdheSB0aGlzIG5ldyBsb2dpYyBleGVjdXRlcyBpcyBpZiBgZGV2bGlua19wb3J0LVx1MDAzZWF0dHJzLmZsYXZvdXJgIGlzLCBpbiBmYWN0LCBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gQW5kIHRoYXQgZmxhdm91ciBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBgaWNlYCBhbmQgYG1seDVgIGRyaXZlcnMsIGFuZCB0aG9zZSBkcml2ZXJzIGFyZW4ndCBldmVuIGVtdWxhdGVkIGluIFFFTVUsIG9yIGF0IGxlYXN0IGFyZW4ndCBlbXVsYXRlZCBpbiBhIHdheSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIG1lYW5zIHdlJ3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoaXMgbmV3IGNvZGUgd291bGQgYmUgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIGluIGFueSBvZiBteSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUuXG5cbkJ1dCBob2xkIG9uLi4uIENvdWxkIHdlIHNvbWVob3cgKmZvcmNlKiB0aGUgY3JlYXRpb24gb2YgYSBwb3J0IHdpdGggdGhhdCBmbGF2b3VyIHVzaW5nIGBkZXZsaW5rX3BvcnRfbmV3YD8gVGhhdCdzIHRoZSBuZXh0IHF1ZXN0aW9uLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmbGV4aWJpbGl0eSBpbiBwb3J0IGNyZWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMDo1NC43MjgzNDA3OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjE0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9wb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RldmxpbmsvcG9ydC5jPTkwNz1pbnQgZGV2bGlua19ubF9wb3J0X3Vuc3BsaXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2RldmxpbmsvcG9ydC5jLTkxNi1cXG5uZXQvZGV2bGluay9wb3J0LmM6OTE3OmludCBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvZGV2bGluay9wb3J0LmMtOTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjA6NTQuODA2NTYwMTY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODU4NDAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YC5cblxuKipEZWNvbnN0cnVjdGluZyBgZGV2bGlua19ubF9wb3J0X25ld19kb2l0YCoqXG5cbkFscmlnaHQsIEknbSBleGFtaW5pbmcgYGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdGAuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbjogaXQncyBjbGVhcmx5IGhhbmRsaW5nIHRoZSBORVRMSU5LIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgbmV3IHBvcnRzIHdpdGhpbiBhIGRldmxpbmsgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIHNldHRpbmcgdXAgdGhlc2UgcG9ydHMuIEknbGwgbmVlZCB0byBwYXJzZSB0aGUgTkVUTElOSyBtZXNzYWdlLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyAoZXNwZWNpYWxseSB0aG9zZSBwcm92aWRlZCBieSB0aGUgdXNlciksIGFuZCB0aGVuIHRyYW5zbGF0ZSB0aG9zZSBwYXJhbWV0ZXJzIGludG8gdGhlIG5lY2Vzc2FyeSBjYWxscyB0byB0aGUgdW5kZXJseWluZyBkZXZsaW5rIGRyaXZlci5cblxuSSdtIHRoaW5raW5nLCB0aGlzIHdpbGwgbGlrZWx5IGludm9sdmUgYWxsb2NhdGluZyBzb21lIHBvcnQtc3BlY2lmaWMgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIChsaWtlIHRoZSBwb3J0IHR5cGUsIHBoeXNpY2FsIHBvcnQgZGV0YWlscywgYW5kIHBvdGVudGlhbGx5IGxpbmsgc2V0dGluZ3MgbGlrZSBNVFUsIHNwZWVkLCBhbmQgYXV0by1uZWdvdGlhdGlvbiwgcGx1cyB0aGUgYXNzb2NpYXRlZCBxdWV1ZXMpLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBwb3J0IHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZCBieSB0aGUgZGV2bGluayBjb3JlLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIEknbSBpbWFnaW5pbmcgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHZhbGlkIHBhcmFtZXRlcnMsIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZXMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgcG9ydCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBwcm9wZXJseSBpbnRlZ3JhdGVzIHdpdGggYW55IGV4aXN0aW5nIGhhcmR3YXJlIGZlYXR1cmVzLCBhbmQgd2lsbCBwcm9wZXJseSB2YWxpZGF0ZSBhbnkgcGFyYW1ldGVycyBmcm9tIHRoZSB1c2VyLiBBbmQgb2YgY291cnNlLCBtYWtpbmcgc3VyZSB0aGUgdXNlciBpcyBpbmZvcm1lZCBvZiBhbnkgaXNzdWVzLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjb25maXJtIGFsbCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0bHkgdmFsaWRhdGVkLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcG9ydCBpcyBjb3JyZWN0bHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZsaW5rIGNvcmUsIGFuZCB0aGF0IHRoZSBhcHByb3ByaWF0ZSBldmVudHMgYXJlIHRyaWdnZXJlZCBzbyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MgY29ycmVjdGx5LCBjb25zaXN0ZW50bHksIGFuZCByZWxpYWJseS4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW5kIG5vdGluZyBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb24gaGFzIG9uIG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIGRldmxpbmsgc3lzdGVtLiBOb3cgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTowMC4zOTI0MDM1MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL3BvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTc6XFx0aW50IGRldmxpbmtfbmxfcG9ydF9uZXdfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA5MTg6XFx0e1xcbiA5MTk6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gaW5mby1cXHUwMDNlZXh0YWNrO1xcbiA5MjA6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydF9uZXdfYXR0cnMgbmV3X2F0dHJzID0ge307XFxuIDkyMTpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVxcdTAwM2VkZXZsaW5rO1xcbiA5MjI6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydCAqZGV2bGlua19wb3J0O1xcbiA5MjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4gOTI0OlxcdFxcdGludCBlcnI7XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdGlmICghZGV2bGluay1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X25ldylcXG4gOTI3OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9GTEFWT1VSXSB8fFxcbiA5MzA6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSkge1xcbiA5MzE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUG9ydCBmbGF2b3VyIG9yIFBDSSBQRiBhcmUgbm90IHNwZWNpZmllZFxcXCIpO1xcbiA5MzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzMzpcXHRcXHR9XFxuIDkzNDpcXHRcXHRuZXdfYXR0cnMuZmxhdm91ciA9IG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0ZMQVZPVVJdKTtcXG4gOTM1OlxcdFxcdG5ld19hdHRycy5wZm51bSA9XFxuIDkzNjpcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9QQ0lfUEZfTlVNQkVSXSk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9JTkRFWF0pIHtcXG4gOTM5OlxcdFxcdFxcdC8qIFBvcnQgaW5kZXggb2YgdGhlIG5ldyBwb3J0IGJlaW5nIGNyZWF0ZWQgYnkgZHJpdmVyLiAqL1xcbiA5NDA6XFx0XFx0XFx0bmV3X2F0dHJzLnBvcnRfaW5kZXggPVxcbiA5NDE6XFx0XFx0XFx0XFx0bmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfSU5ERVhdKTtcXG4gOTQyOlxcdFxcdFxcdG5ld19hdHRycy5wb3J0X2luZGV4X3ZhbGlkID0gdHJ1ZTtcXG4gOTQzOlxcdFxcdH1cXG4gOTQ0OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfUE9SVF9DT05UUk9MTEVSX05VTUJFUl0pIHtcXG4gOTQ1OlxcdFxcdFxcdG5ld19hdHRycy5jb250cm9sbGVyID1cXG4gOTQ2OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX0NPTlRST0xMRVJfTlVNQkVSXSk7XFxuIDk0NzpcXHRcXHRcXHRuZXdfYXR0cnMuY29udHJvbGxlcl92YWxpZCA9IHRydWU7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXHRpZiAobmV3X2F0dHJzLmZsYXZvdXIgPT0gREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIFxcdTAwMjZcXHUwMDI2XFxuIDk1MDpcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfUENJX1NGX05VTUJFUl0pIHtcXG4gOTUxOlxcdFxcdFxcdG5ld19hdHRycy5zZm51bSA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9QT1JUX1BDSV9TRl9OVU1CRVJdKTtcXG4gOTUyOlxcdFxcdFxcdG5ld19hdHRycy5zZm51bV92YWxpZCA9IHRydWU7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdGVyciA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9uZXcoZGV2bGluaywgXFx1MDAyNm5ld19hdHRycyxcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgZXh0YWNrLCBcXHUwMDI2ZGV2bGlua19wb3J0KTtcXG4gOTU3OlxcdFxcdGlmIChlcnIpXFxuIDk1ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gOTYxOlxcdFxcdGlmICghbXNnKSB7XFxuIDk2MjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA5NjM6XFx0XFx0XFx0Z290byBlcnJfb3V0X3BvcnRfZGVsO1xcbiA5NjQ6XFx0XFx0fVxcbiA5NjU6XFx0XFx0ZXJyID0gZGV2bGlua19ubF9wb3J0X2ZpbGwobXNnLCBkZXZsaW5rX3BvcnQsIERFVkxJTktfQ01EX1BPUlRfTkVXLFxcbiA5NjY6XFx0XFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIxOjAwLjM5MjU4OTUzNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAxNTQwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGRldmxpbmsgUG9ydCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYSBuZXcgcG9ydCB3aXRoaW4gdGhlIGBkZXZsaW5rYCBmcmFtZXdvcmsuIFJpZ2h0LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBgZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXdgLiBIbW0sIHNvIHRoYXQgbWVhbnMgdGhlIGNvcmUgcG9ydCBjcmVhdGlvbiBsb2dpYyBpcyBkZWxlZ2F0ZWQgdG8gdGhlIGBkZXZsaW5rYCBkZXZpY2UncyBzcGVjaWZpYyBkcml2ZXIuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBkZWZpbmUgYW5kIGltcGxlbWVudCB0aGF0IGBwb3J0X25ld2Agb3BlcmF0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLCByaWdodD8gSSdsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGRyaXZlciBjb2RlIGFuZCBzZWUgaG93IHZhcmlvdXMgbmV0d29yayBkZXZpY2VzIGhhbmRsZSBwb3J0IGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBhbmQgYWxsIHRoYXQgZ29vZCBzdHVmZiB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MDQuODk0MTMxOTgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM0NjgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5wb3J0X25ld1xcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYz0xMzIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgaWNlX2Rldmxpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEzNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jOjEzNTA6XFx0LnBvcnRfbmV3ID0gaWNlX2RldmxpbmtfcG9ydF9uZXcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEzNTEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmM9MzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbWx4NV9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMzg4LSNpZmRlZiBDT05GSUdfTUxYNV9TRl9NQU5BR0VSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzozODk6XFx0LnBvcnRfbmV3ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfbmV3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMzkwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTowNS4xNjc2MDcwODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNTQwMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgcG9ydF9uZXdgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICppY2UqIGFuZCAqbWx4NSogYXJlIHRoZSBvbmx5IG9uZXMgY3VycmVudGx5IGltcGxlbWVudGluZyBgcG9ydF9uZXdgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIGEgYnJvYWRlciBzZXQgb2YgbmV0d29yayBkcml2ZXJzIHRvIGhhdmUgaW1wbGVtZW50ZWQgdGhhdCBmdW5jdGlvbiBieSBub3cuIFdhaXQgYSBzZWNvbmQuLi4gKm5ldGRldnNpbSogZG9lc24ndCBpbXBsZW1lbnQgYHBvcnRfbmV3YD8gVGhhdCdzIGRlZmluaXRlbHkgdW5leHBlY3RlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB3aHkgYG5ldGRldnNpbWAgaXMgbWlzc2luZyB0aGUgYHBvcnRfbmV3YCBmZWF0dXJlIC0gSSB0aG91Z2h0IHRoYXQgd291bGQgaGF2ZSBiZWVuIHVzZWQgZm9yIHNpbXVsYXRpb24gcHVycG9zZXMuIE5lZWQgdG8gZmxhZyB0aGF0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSByZWxhdGl2ZWx5IGVhc3kgaW1wbGVtZW50YXRpb24gdG8gYWRkLCBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIHdoeSBgbmV0ZGV2c2ltYCBkb2VzIG5vdCBoYXZlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjIxOjEwLjQ4MzAxMDE0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzU1MzY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLnBvcnRfbmV3XFxcXHMqPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxMC41OTUzNzQ5NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNDQ5NDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmV0ZGV2c2ltYCBEZXZsaW5rIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgZGV2bGluayBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGV2bGluayBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkncmUgaGFuZGxpbmcgdGhpbmdzLiBBcmUgdGhleSBhZGhlcmluZyB0byB0aGUgc3RhbmRhcmQgZGV2bGluayBBUEk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXZpYXRpb25zIG9yIG9wdGltaXphdGlvbnM/IEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBjb3VsZCBiZSB1c2VkIGluIHNvbWUgZnV0dXJlIHdvcmsuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxMy41MDk4NzEwMjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTI1MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmxpbmtfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MDk9bnNpbV9kZXZfZGV2bGlua190cmFwX2Ryb3BfY291bnRlcl9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQyNC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQyNTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDI2LVxcdC5lc3dpdGNoX21vZGVfc2V0ID0gbnNpbV9kZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTY0OD1pbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE2NTQ6XFx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2NfbnMoXFx1MDAyNm5zaW1fZGV2X2Rldmxpbmtfb3BzLCBzaXplb2YoKm5zaW1fZGV2KSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1NS1cXHRcXHRcXHRcXHQgbnNpbV9idXNfZGV2LVxcdTAwM2Vpbml0aWFsX25ldCwgXFx1MDAyNm5zaW1fYnVzX2Rldi1cXHUwMDNlZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MTMuNTkwNDA0MDUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Njg5MjkwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIFRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgY29kZSByZWxhdGVkIHRvIGBuc2ltX2Rldl9kZXZsaW5rX29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIHNldCBvZiBvcGVyYXRpb25zIG9yIGZ1bmN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyBkcml2ZXIgb3Igc3Vic3lzdGVtIHJlbGF0ZWQgdG8gc2ltdWxhdGVkIG5ldHdvcmsgaW50ZXJmYWNlcy4gR2l2ZW4gdGhlIGBkZXZsaW5rYCBwcmVmaXgsIEknZCB3YWdlciBpdCdzIGdvdCBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBgZGV2bGlua2AgaW5mcmFzdHJ1Y3R1cmUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVyaW5nIGEgc2ltdWxhdGVkIGRldmljZSB3aXRoaW4gdGhlIGBkZXZsaW5rYCBzeXN0ZW0/IE9yIHBlcmhhcHMgbWFuYWdpbmcgaXRzIHJlc291cmNlcywgbGlrZSBwb3J0cyBvciB2aXJ0dWFsIGZ1bmN0aW9ucywgdGhyb3VnaCB0aGUgYGRldmxpbmtgIGludGVyZmFjZT8gQXJlIHRoZXJlIGN1c3RvbSBhdHRyaWJ1dGVzIG9yIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYG5zaW1gIGRldmljZSB0aGF0IG5lZWQgdG8gYmUgaGFuZGxlZCB3aXRoaW4gYGRldmxpbmtgJ3Mgc3RydWN0dXJlP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGBuc2ltX2Rldl9kZXZsaW5rX29wc2Agc3RydWN0dXJlLiBBcmUgdGhlcmUgYHByb2JlYCwgYHJlbW92ZWAsIGBnZXRfcGFyYW1zYCwgYHNldF9wYXJhbXNgLCBgYXR0cl9nZXRgLCBgYXR0cl9zZXRgIChvciBzaW1pbGFyKSBmdW5jdGlvbnM/IFRoYXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgZWFjaCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGJlaW5nIHBhc3NlZCBpbiBhbmQgb3V0IHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuRmluYWxseSwgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc2ltdWxhdGlvbiBsb2dpYy4gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3IgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIGBuc2ltYCBmcmFtZXdvcmsgaXRzZWxmPyBUaGlzIGNvdWxkIGludm9sdmUgZGV2aWNlIGVtdWxhdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIG9yIG90aGVyIHNpbXVsYXRlZCBhY3Rpdml0aWVzLiBVbmRlcnN0YW5kaW5nIHRoYXQgbGlua2FnZSBiZXR3ZWVuIGBkZXZsaW5rYCBhbmQgYG5zaW1gIHdpbGwgYmUga2V5LiBUaW1lIHRvIGdldCB0byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxOC4yNTkzMzYwNzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDI1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XFxuMTQyNjpcXHRcXHQuZXN3aXRjaF9tb2RlX3NldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfc2V0LFxcbjE0Mjc6XFx0XFx0LmVzd2l0Y2hfbW9kZV9nZXQgPSBuc2ltX2RldmxpbmtfZXN3aXRjaF9tb2RlX2dldCxcXG4xNDI4OlxcdFxcdC5zdXBwb3J0ZWRfZmxhc2hfdXBkYXRlX3BhcmFtcyA9IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0ssXFxuMTQyOTpcXHRcXHQucmVsb2FkX2FjdGlvbnMgPSBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpLFxcbjE0MzA6XFx0XFx0LnJlbG9hZF9kb3duID0gbnNpbV9kZXZfcmVsb2FkX2Rvd24sXFxuMTQzMTpcXHRcXHQucmVsb2FkX3VwID0gbnNpbV9kZXZfcmVsb2FkX3VwLFxcbjE0MzI6XFx0XFx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXFxuMTQzMzpcXHRcXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxcbjE0MzQ6XFx0XFx0LnRyYXBfaW5pdCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9pbml0LFxcbjE0MzU6XFx0XFx0LnRyYXBfYWN0aW9uX3NldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9hY3Rpb25fc2V0LFxcbjE0MzY6XFx0XFx0LnRyYXBfZ3JvdXBfc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX2dyb3VwX3NldCxcXG4xNDM3OlxcdFxcdC50cmFwX3BvbGljZXJfc2V0ID0gbnNpbV9kZXZfZGV2bGlua190cmFwX3BvbGljZXJfc2V0LFxcbjE0Mzg6XFx0XFx0LnRyYXBfcG9saWNlcl9jb3VudGVyX2dldCA9IG5zaW1fZGV2X2RldmxpbmtfdHJhcF9wb2xpY2VyX2NvdW50ZXJfZ2V0LFxcbjE0Mzk6XFx0XFx0LnJhdGVfbGVhZl90eF9zaGFyZV9zZXQgPSBuc2ltX2xlYWZfdHhfc2hhcmVfc2V0LFxcbjE0NDA6XFx0XFx0LnJhdGVfbGVhZl90eF9tYXhfc2V0ID0gbnNpbV9sZWFmX3R4X21heF9zZXQsXFxuMTQ0MTpcXHRcXHQucmF0ZV9sZWFmX3RjX2J3X3NldCA9IG5zaW1fbGVhZl90Y19id19zZXQsXFxuMTQ0MjpcXHRcXHQucmF0ZV9ub2RlX3R4X3NoYXJlX3NldCA9IG5zaW1fbm9kZV90eF9zaGFyZV9zZXQsXFxuMTQ0MzpcXHRcXHQucmF0ZV9ub2RlX3R4X21heF9zZXQgPSBuc2ltX25vZGVfdHhfbWF4X3NldCxcXG4xNDQ0OlxcdFxcdC5yYXRlX25vZGVfdGNfYndfc2V0ID0gbnNpbV9ub2RlX3RjX2J3X3NldCxcXG4xNDQ1OlxcdFxcdC5yYXRlX25vZGVfbmV3ID0gbnNpbV9yYXRlX25vZGVfbmV3LFxcbjE0NDY6XFx0XFx0LnJhdGVfbm9kZV9kZWwgPSBuc2ltX3JhdGVfbm9kZV9kZWwsXFxuMTQ0NzpcXHRcXHQucmF0ZV9sZWFmX3BhcmVudF9zZXQgPSBuc2ltX3JhdGVfbGVhZl9wYXJlbnRfc2V0LFxcbjE0NDg6XFx0XFx0LnJhdGVfbm9kZV9wYXJlbnRfc2V0ID0gbnNpbV9yYXRlX25vZGVfcGFyZW50X3NldCxcXG4xNDQ5OlxcdFxcdC50cmFwX2Ryb3BfY291bnRlcl9nZXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfZHJvcF9jb3VudGVyX2dldCxcXG4xNDUwOlxcdH07XFxuMTQ1MTpcXHRcXG4xNDUyOlxcdCNkZWZpbmUgTlNJTV9ERVZfTUFYX01BQ1NfREVGQVVMVCAzMlxcbjE0NTM6XFx0I2RlZmluZSBOU0lNX0RFVl9URVNUMV9ERUZBVUxUIHRydWVcXG4xNDU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToxOC4yNTk1OTgxNThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3ODI0MTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGRldnNpbSdzIFBvcnQgQ3JlYXRpb24gQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gaXQgc2VlbXMgbGlrZSBgbmV0ZGV2c2ltYCBpcyBtaXNzaW5nIGRpcmVjdCBzdXBwb3J0IGZvciBgcG9ydF9uZXdgLiBIbW0sIHRoYXQncyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3b3JrYXJvdW5kPyBDYW4gSSBzdGlsbCBjb25qdXJlIGEgYERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRmAgcG9ydCB3aXRoaW4gYG5ldGRldnNpbWAgdXNpbmcgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgaG93IGBuZXRkZXZzaW1gIGhhbmRsZXMgcG9ydCBjcmVhdGlvbiBpbiBnZW5lcmFsLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgcmVsYXRlZCB0byB0aGF0IGFzcGVjdC4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBleGlzdGluZyBtZWNoYW5pc21zIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGEgY2xldmVyIHdheSB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIG91dGNvbWUgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgbGltaXRhdGlvbi4gUGVyaGFwcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvciBhbiBpbmRpcmVjdCBtZXRob2QgaXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToyMi45Mzc4NDI5ODRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTM1MzMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX3BvcnRfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MjMuMDAzMzg3OTg3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA2NjEyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWdpc3RlcmluZyBhIERldmljZSBQb3J0IC0gQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uLiBgZGV2bF9wb3J0X3JlZ2lzdGVyYC4uLiB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gY2FsbC4gSSBpbW1lZGlhdGVseSBoYXZlIGEgZmV3IHRoaW5ncyBJJ20gbWVudGFsbHkgcGFyc2luZy4gSXMgdGhpcyBhIG5ldyBkZXZpY2UsIG9yIGlzIHRoaXMgYW4gZXhpc3Rpbmcgb25lIHRoYXQncyBiZWluZyByZS1pbml0aWFsaXplZD8gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIFdoYXQgc3RhZ2UgYXJlIHdlIGF0PyBJcyB0aGlzIGhhcHBlbmluZyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBvciBhcmUgd2UgZGVlcCB3aXRoaW4gYSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbj8gVGhlIHBsYWNlbWVudCBhbG9uZSBnaXZlcyBtZSBhIGh1Z2UgY2x1ZSBhcyB0byB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIHBvcnQgc3RydWN0dXJlIGxvb2sgbGlrZT8gV2hhdCBwYXJhbWV0ZXJzIGFyZSB3ZSBwYXNzaW5nIHRvIGl0PyBIYXZlIHdlIGhhbmRsZWQgZXJyb3IgY29uZGl0aW9ucyBjb3JyZWN0bHkgYXQgdGhpcyBwb2ludCBvZiB0aGUgY29kZSBwYXRoPyBBIGZ1bmN0aW9uIHdpdGggXCJyZWdpc3RlclwiIGluIHRoZSBuYW1lIGFsd2F5cyBiZWdzIHF1ZXN0aW9ucyBhYm91dCBhdG9taWNpdHkgYW5kIGNvbmN1cnJlbmN5LiBJcyB0aGVyZSBhIG11dGV4IHByb3RlY3RpbmcgdGhpcz8gSXMgdGhpcyBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQ/IElmIHNvLCBhcmUgd2UgdXNpbmcgYXBwcm9wcmlhdGUgc3BpbmxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlIGRlc2lnbiBoYXMgYWRkcmVzc2VkIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFzcGVjdHM/IEFyZSB3ZSBwcmUtYWxsb2NhdGluZyBtZW1vcnkgYW5kIGRhdGEgc3RydWN0dXJlcywgb3IgYXJlIHdlIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgdGhlbT8gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscyBhdCBhIGxhdGVyIHBvaW50LiBBbmQgZmluYWxseSwgaXMgdGhlcmUgc3VmZmljaWVudCB2YWxpZGF0aW9uIG9uIHRoZSBkZXZpY2Ugc3RydWN0IGJlZm9yZSByZWdpc3RyYXRpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MjcuMzc0MDUyOTg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk1Njk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsX3BvcnRfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ1NT1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDgzLVxcdGRldmxpbmtfcG9ydF9hdHRyc19zZXQoZGV2bGlua19wb3J0LCBcXHUwMDI2YXR0cnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDg0OlxcdGVyciA9IGRldmxfcG9ydF9yZWdpc3Rlcihwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpLCBkZXZsaW5rX3BvcnQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0ODUtXFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMToyNy40MzcwMTU2MjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwOTAyNDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBfX25zaW1fZGV2X3BvcnRfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX25zaW1fZGV2X3BvcnRfYWRkYC4gU2VlbXMgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBwb3J0LCBsaWtlbHkgd2l0aGluIGEgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LCBnaXZlbiB0aGUgXCJuc2ltXCIgcHJlZml4LiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBhIGZldyB0aGluZ3M6XG5cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0J3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbW9kaWZpZWQgb3IgYWNjZXNzZWQ/IElzIGl0IGEgbGlua2VkIGxpc3QsIGEgaGFzaCB0YWJsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHJlcHJlc2VudGluZyBuZXR3b3JrIHBvcnRzIHdpdGhpbiB0aGUgc2ltdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggZXJyb3JzPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uLCBpbnZhbGlkIHBvcnQgbnVtYmVycywgb3IgY29uZmxpY3RzPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsLCBlc3BlY2lhbGx5IGluIGEgc2ltdWxhdGlvbiwgdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgYWNjdXJhdGUgcmVzdWx0cy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgZXJyb3IgY29kZXMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgZXhjZXB0aW9uIG1lY2hhbmlzbXMuXG4qICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBPciBkb2VzIHRoaXMgcHJlc2VudCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gTmV0d29yayBzaW11bGF0aW9ucyBvZnRlbiBpbnZvbHZlIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzLCBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gcG9ydCBzdHJ1Y3R1cmVzIGNhbiBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBsb2NraW5nIG1lY2hhbmlzbXMsIG11dGV4ZXMsIG9yIGF0b21pYyBvcGVyYXRpb25zIHVzZWQuIElmIGl0J3Mgc2luZ2xlLXRocmVhZGVkLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXQgaXQgbWF5IGFsc28gYmUgYSBib3R0bGVuZWNrLlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGlzIHRoZSBjYWxsaW5nIGNvbnRleHQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGlzIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJyb2FkZXIgcHVycG9zZSBvZiB0aGlzIFwicG9ydCBhZGRcIiBvcGVyYXRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgc2ltdWxhdGlvbiBjb21wb25lbnRzLlxuKiAgICoqQWJzdHJhY3Rpb24gTGF5ZXI6KiogSXMgdGhpcyBwYXJ0IG9mIGEgbG93ZXIgbGV2ZWwgQVBJPyBJcyB0aGlzIGEgdGhpbiB3cmFwcGVyIG9yIGlzIHRoZXJlIHN1YnN0YW50aWFsIGNvZGUgaW4gdGhlIGZ1bmN0aW9uPyBEb2VzIHRoZSBmdW5jdGlvbiBkbyBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB3b3JrIG9yIGp1c3QgZGVsZWdhdGUgdG8gYSBtb3JlIGFic3RyYWN0ZWQgc3lzdGVtIG9yIGV2ZW4gYW4gT1MgY2FsbD9cblxuSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGNvcmUgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBuZXR3b3JrIHNpbXVsYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6MzIuNDQ2MDQzNjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdHN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbjE0NTY6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxcbjE0NTc6XFx0e1xcbjE0NTg6XFx0XFx0c3RydWN0IGRldmxpbmtfcG9ydF9hdHRycyBhdHRycyA9IHt9O1xcbjE0NTk6XFx0XFx0c3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQ7XFxuMTQ2MDpcXHRcXHRzdHJ1Y3QgZGV2bGlua19wb3J0ICpkZXZsaW5rX3BvcnQ7XFxuMTQ2MTpcXHRcXHRpbnQgZXJyO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRpZiAodHlwZSA9PSBOU0lNX0RFVl9QT1JUX1RZUEVfVkYgXFx1MDAyNlxcdTAwMjYgIW5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpKVxcbjE0NjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdG5zaW1fZGV2X3BvcnQgPSBremFsbG9jX29iaigqbnNpbV9kZXZfcG9ydCk7XFxuMTQ2NzpcXHRcXHRpZiAoIW5zaW1fZGV2X3BvcnQpXFxuMTQ2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNDY5OlxcdFxcdG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXggPSBuc2ltX2Rldl9wb3J0X2luZGV4KHR5cGUsIHBvcnRfaW5kZXgpO1xcbjE0NzA6XFx0XFx0bnNpbV9kZXZfcG9ydC1cXHUwMDNlcG9ydF90eXBlID0gdHlwZTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0ZGV2bGlua19wb3J0ID0gXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydDtcXG4xNDczOlxcdFxcdGlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zaW1fZGV2X3BvcnQpKSB7XFxuMTQ3NDpcXHRcXHRcXHRhdHRycy5mbGF2b3VyID0gREVWTElOS19QT1JUX0ZMQVZPVVJfUEhZU0lDQUw7XFxuMTQ3NTpcXHRcXHRcXHRhdHRycy5waHlzLnBvcnRfbnVtYmVyID0gcG9ydF9pbmRleCArIDE7XFxuMTQ3NjpcXHRcXHR9IGVsc2Uge1xcbjE0Nzc6XFx0XFx0XFx0YXR0cnMuZmxhdm91ciA9IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9WRjtcXG4xNDc4OlxcdFxcdFxcdGF0dHJzLnBjaV92Zi5wZiA9IDA7XFxuMTQ3OTpcXHRcXHRcXHRhdHRycy5wY2lfdmYudmYgPSBwb3J0X2luZGV4O1xcbjE0ODA6XFx0XFx0fVxcbjE0ODE6XFx0XFx0bWVtY3B5KGF0dHJzLnN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXFx1MDAzZXN3aXRjaF9pZC5pZCwgbnNpbV9kZXYtXFx1MDAzZXN3aXRjaF9pZC5pZF9sZW4pO1xcbjE0ODI6XFx0XFx0YXR0cnMuc3dpdGNoX2lkLmlkX2xlbiA9IG5zaW1fZGV2LVxcdTAwM2Vzd2l0Y2hfaWQuaWRfbGVuO1xcbjE0ODM6XFx0XFx0ZGV2bGlua19wb3J0X2F0dHJzX3NldChkZXZsaW5rX3BvcnQsIFxcdTAwMjZhdHRycyk7XFxuMTQ4NDpcXHRcXHRlcnIgPSBkZXZsX3BvcnRfcmVnaXN0ZXIocHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSwgZGV2bGlua19wb3J0LFxcbjE0ODU6XFx0XFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZXBvcnRfaW5kZXgpO1xcbjE0ODY6XFx0XFx0aWYgKGVycilcXG4xNDg3OlxcdFxcdFxcdGdvdG8gZXJyX3BvcnRfZnJlZTtcXG4xNDg4OlxcdFxcbjE0ODk6XFx0XFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpIHtcXG4xNDkwOlxcdFxcdFxcdHU2NCBwYXJlbnRfaWQgPSBERVZMSU5LX1JFU09VUkNFX0lEX1BBUkVOVF9UT1A7XFxuMTQ5MTpcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBwYXJhbXMgPSB7XFxuMTQ5MjpcXHRcXHRcXHRcXHQuc2l6ZV9tYXggPSAxMDAsXFxuMTQ5MzpcXHRcXHRcXHRcXHQuc2l6ZV9ncmFudWxhcml0eSA9IDEsXFxuMTQ5NDpcXHRcXHRcXHRcXHQudW5pdCA9IERFVkxJTktfUkVTT1VSQ0VfVU5JVF9FTlRSWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTozMi40NDYyMTY2MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTc5NDQzMTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IFVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXQgdG91Y2hlcyB3aXRoaW4gYG5ldGRldnNpbWAgaXMgY29udGluZ2VudCBvbiBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgbmV0ZGV2c2ltYCBvbmx5IHN1cHBvcnRzIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QSFlTSUNBTGAgYW5kIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfVkZgLiAgVGhlcmVmb3JlLCB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aCBpcyBpbW1lZGlhdGVseSB1bnJlYWNoYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGJlIGNlcnRhaW4sIHRob3VnaC5cblxuSSByZXZpZXdlZCB0aGUgY29kZTpcbmBgYGNcblx0aWYgKGRldmxpbmtfcG9ydC1cdTAwM2VhdHRycy5mbGF2b3VyID09IERFVkxJTktfUE9SVF9GTEFWT1VSX1BDSV9TRiBcdTAwMjZcdTAwMjZcblx0ICAgIG9wcy1cdTAwM2Vwb3J0X2ZuX3N0YXRlX2dldCBcdTAwMjZcdTAwMjYgIXRiW0RFVkxJTktfUE9SVF9GTl9BVFRSX1NUQVRFXSkge1xuYGBgXG5hbmQgaXQgcmVsaWVzIG9uIHRoYXQgYFBDSV9TRmAgZmxhdm91ciwgYW5kIGFsc28gdGhlIGBvcHMtXHUwMDNlcG9ydF9mbl9zdGF0ZV9nZXRgIHdoaWNoIGlzIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkcml2ZXJzIHRoYXQgdXNlIGBERVZMSU5LX1BPUlRfRkxBVk9VUl9QQ0lfU0ZgLiBJIHJlbWVtYmVyIGNoZWNraW5nOiAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuY2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc2YvZGV2bGluay5jYC4gSXQgbG9va3MgbGlrZSBgaWNlYCBhbmQgYG1seDVgIGFyZSB0aGUgb25seSBvbmVzLiBCb3RoIGFyZSwgYXMgSSByZWNhbGwsIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIHNlZW1zIHRvIGNvbmZpcm0gbXkgZmlyc3QgaW1wcmVzc2lvbiB0aGF0IHRoaXMgaXMgYW4gdW5yZWFjaGFibGUgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBzb21lICpvdGhlciogd2F5IHRvIGNyZWF0ZSBhIHBvcnQgd2l0aCB0aGlzIGZsYXZvcj8gQ2FuIGl0IGJlIHNldCB0aHJvdWdoIG5ldGxpbmssIG1heWJlPyAgTm8sIHRoZSBmbGF2b3VyIGlzIHNldCBieSB0aGUgZHJpdmVyIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIHBvcnQsIHNvIGl0IHdpbGwgYWx3YXlzIGJlIGZhbHNlLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjazogY2FuIGBtbHg1YCBvciBgaWNlYCBldmVuICpiZSogZW11bGF0ZWQgaW4gUUVNVT8gIE5vLCBgbWx4NWAgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIGBpY2VgIHJlcXVpcmVzIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlLiAgTmVpdGhlciBpcyBlbXVsYXRlZC5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaW1lIHRvIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTZWVtcyBsaWtlIGEgbWF0Y2guXG5cblRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBpcyB3aXRoaW4gYG5ldC9kZXZsaW5rL3BvcnQuY2AuIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQsIGJ1dCBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGYCBjb25kaXRpb24uIEJlY2F1c2UgYGljZWAgYW5kIGBtbHg1YCBhcmUgdGhlIG9ubHkgZHJpdmVycyB0aGF0ICpjcmVhdGUqIHBvcnRzIHdpdGggdGhhdCBmbGF2b3VyLCBhbmQgbmVpdGhlciBkcml2ZXIgaXMgZW11bGF0ZWQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBRRU1VLlxuXG5XYWl0LCBjb3VsZCBhIHVzZXIgKmZvcmNlKiB0aGlzIGZsYXZvdXIgd2l0aCBhIG5ldGxpbmsgcmVxdWVzdD8gTGV0IG1lIGNoZWNrIGBkZXZsaW5rX25sX3BvcnRfbmV3X2RvaXRgOlxuYGBgY1xuXHRuZXdfYXR0cnMuZmxhdm91ciA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX1BPUlRfRkxBVk9VUl0pO1xuXHQuLi5cblx0ZXJyID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXcoZGV2bGluaywgXHUwMDI2bmV3X2F0dHJzLCBleHRhY2ssIFx1MDAyNmRldmxpbmtfcG9ydCk7XG5gYGBcblllcywgdGhlIHVzZXIgKmNhbiogcmVxdWVzdCBhIHBvcnQgb2YgdGhhdCBmbGF2b3VyIHZpYSBuZXRsaW5rLiBIb3dldmVyLCBgZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlcG9ydF9uZXdgICptdXN0KiBiZSBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyLiBMb29raW5nIGJhY2ssIG9ubHkgYGljZWAgYW5kIGBtbHg1YCBpbXBsZW1lbnQgdGhhdC4gYG5ldGRldnNpbWAgZG9lcyAqbm90Ki4gU28sIGlmIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSB0aGlzLCBpdCB3aWxsIGZhaWwgd2l0aCBgLUVPUE5PVFNVUFBgLiBUaGUgY2hlY2sgaXMgaGVyZTpcbmBgYGNcblx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X25ldylcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5gYGBcblNvLCBzdGlsbCwgaW1wb3NzaWJsZSBpbiBRRU1VLlxuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gcG9pbnRlciBgb3BzLVx1MDAzZXBvcnRfZm5fc3RhdGVfZ2V0YCwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIElmIHdlIHNvbWVob3cgaGFkIGEgcG9ydCBvZiB0aGF0IGZsYXZvdXIsIHdlIGFsc28gbmVlZCB0aGF0IGltcGxlbWVudGVkLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZHJpdmVycyBpbXBsZW1lbnQgaXQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjE6NDguMjQwNjUxNjA3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk2MzUxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5wb3J0X2ZuX3N0YXRlX2dldFxcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIGljZV9kZXZsaW5rX3BvcnRfc2Zfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jLTgwOS1cXHQucG9ydF9mbl9od19hZGRyX3NldCA9IGljZV9kZXZsaW5rX3BvcnRfZm5faHdfYWRkcl9zZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjgxMDpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBpY2VfZGV2bGlua19wb3J0X2ZuX3N0YXRlX2dldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtODExLVxcdC5wb3J0X2ZuX3N0YXRlX3NldCA9IGljZV9kZXZsaW5rX3BvcnRfZm5fc3RhdGVfc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYz0xMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIG1seDVfZXN3X3BmX3ZmX2RsX3BvcnRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMTgtXFx0LnBvcnRfZm5fbWlncmF0YWJsZV9zZXQgPSBtbHg1X2RldmxpbmtfcG9ydF9mbl9taWdyYXRhYmxlX3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jOjExOTpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2RldmxpbmtfcGZfcG9ydF9mbl9zdGF0ZV9nZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xMjAtXFx0LnBvcnRfZm5fc3RhdGVfc2V0ID0gbWx4NV9kZXZsaW5rX3BmX3BvcnRfZm5fc3RhdGVfc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYz0xNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3BvcnRfb3BzIG1seDVfZXN3X2RsX3NmX3BvcnRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzMtI2lmZGVmIENPTkZJR19NTFg1X1NGX01BTkFHRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3L2RldmxpbmtfcG9ydC5jOjE3NDpcXHQucG9ydF9mbl9zdGF0ZV9nZXQgPSBtbHg1X2Rldmxpbmtfc2ZfcG9ydF9mbl9zdGF0ZV9nZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzdy9kZXZsaW5rX3BvcnQuYy0xNzUtXFx0LnBvcnRfZm5fc3RhdGVfc2V0ID0gbWx4NV9kZXZsaW5rX3NmX3BvcnRfZm5fc3RhdGVfc2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo0OC41MDAyOTMzOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzk2MDcyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBpbiBRRU1VKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGFuYWx5emVkIHRoZSBjb2RlLCBhbmQgaXQncyBsb29raW5nIHByZXR0eSBjb25jbHVzaXZlLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG9ydF9mbl9zdGF0ZV9nZXRgIGZ1bmN0aW9uIGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhlIGBpY2VgIGFuZCBgbWx4NWAgZHJpdmVycy4gR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBvdmVyYWxsIGNvbnRleHQsIEknbSBub3cgZmFpcmx5IGNlcnRhaW4gdGhhdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHdlJ3JlIGxvb2tpbmcgYXQgaXMsIGluIGZhY3QsIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHdpdGhpbiBRRU1VLiBUaGVyZSdzIGp1c3Qgbm8gd2F5IGZvciBpdCB0byBiZSB0cmlnZ2VyZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dXAuIEJhc2VkIG9uIHRoaXMsIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCdzIGp1c3Qgbm90IGFuIGFyZWEgdGhhdCByZXF1aXJlcyBvdXIgZm9jdXMgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2MywiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo1NS44OTYzNjkxNDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNvZGUgcGF0aCBpbiBkZXZsaW5rIHRoYXQgaXMgb25seSBleGVjdXRlZCBmb3IgcG9ydHMgd2l0aCB0aGUgREVWTElOS19QT1JUX0ZMQVZPVVJfUENJX1NGIGZsYXZvdXIuIFRoaXMgZmxhdm91ciBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgTWVsbGFub3ggbWx4NSBhbmQgSW50ZWwgaWNlIGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHJlcXVpcmVzIHRoZSBwb3J0X2ZuX3N0YXRlX2dldCBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZXNlIHR3byBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyMTo1NS44OTYzOTQ3NjVaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6q9l[1] Phase: Running StartedAt: 2026-08-10 11:22:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6q9l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 11:22:07 +0000 UTC FinishedAt: 2026-08-10 11:22:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}