Name: series-workflowbr8vp Phase: Succeeded StartedAt: 2026-09-15 09:45:20 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[0] Phase: Succeeded StartedAt: 2026-09-15 09:45:20 +0000 UTC FinishedAt: 2026-09-15 10:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 09:45:20 +0000 UTC FinishedAt: 2026-09-15 10:10:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "fd897794-4f0d-45f4-8e63-bcb526e0b175" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "base_tree": "bpf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyBsb2NraW5nIG9wZXJhdGlvbnMgaW4geHNrX2JpbmQoKSB0byBhY3F1aXJlIG5ldGRldl9sb2NrX29wcyhkZXYpIHByaW9yIHRvIHRha2luZyB4cy1cdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB4c2tfYmluZCgpIGluIG5ldC94ZHAveHNrLmMsIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGJldHdlZW4gbmV0ZGV2X2xvY2tfb3BzKCkgYW5kIHhzLVx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMGE0MTA2ZTk4YmNhYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC0xNjEyLDIwICYjNDM7MTYxMiwyMiBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuJiM0MztcdGlmIChkZXYpXG4mIzQzO1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbiBcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0fVxuIFxuLVx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbiBcdGlmICghZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbi1cbiBcdGlmICgheHMtXHUwMDNlcnggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2V0eCkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTc2MiwxOCAmIzQzOzE3NjQsMjAgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfcHV0KGRldik7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghZXJyKSB7XG4gXHRcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cbiBcdFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxuIFx0XHQgKi9cbiBcdFx0c21wX3dtYigpO1xuIFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpO1xuIFx0fVxuLVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiBvdXRfcmVsZWFzZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4mIzQzO1x0aWYgKGRldikge1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiYjNDM7XHR9XG4gXHRydG5sX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB4c2tfYmluZCgpIGluIG5ldC94ZHAveHNrLmMsIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGJldHdlZW4gbmV0ZGV2X2xvY2tfb3BzKCkgYW5kIHhzLVx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjBhNDEwNmU5OGJjYWEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMTYxMiwyMCAmIzQzOzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKIAlpZiAoeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKLQluZXRkZXZfbG9ja19vcHMoZGV2KTsKLQogCWlmICgheHMtJmd0O3J4ICZhbXA7JmFtcDsgIXhzLSZndDt0eCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNzYyLDE4ICYjNDM7MTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCX0KIAogb3V0X3VubG9jazoKLQlpZiAoZXJyKSB7Ci0JCWRldl9wdXQoZGV2KTsKLQl9IGVsc2UgewomIzQzOwlpZiAoIWVycikgewogCQkvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtCiAJCSAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS4KIAkJICovCiAJCXNtcF93bWIoKTsKIAkJV1JJVEVfT05DRSh4cy0mZ3Q7c3RhdGUsIFhTS19CT1VORCk7CiAJfQotCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiBvdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwomIzQzOwlpZiAoZGV2KSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CX0KIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBCaW5kIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHRydXN0eSBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCB0byBnZXQgYSBnb29kLCBjb250ZXh0dWFsIG92ZXJ2aWV3LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZCBhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3hkcCkpXG4xNjAxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwMjpcdFx0aWYgKHN4ZHAtXHUwMDNlc3hkcF9mYW1pbHkgIT0gQUZfWERQKVxuMTYwMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDQ6XHRcbjE2MDU6XHRcdGZsYWdzID0gc3hkcC1cdTAwM2VzeGRwX2ZsYWdzO1xuMTYwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcbjE2MDc6XHRcdFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxuMTYwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDk6XHRcbjE2MTA6XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuMTYxMTpcdFx0aWYgKGJvdW5kX2Rldl9pZiBcdTAwMjZcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KVxuMTYxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJ0bmxfbG9jaygpO1xuMTYxNTpcdFxuMTYxNjpcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbjE2MTc6XHRcdGlmIChkZXYpXG4xNjE4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuMTYxOTpcdFxuMTYyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xNjIxOlx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4xNjIyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjE2MjM6XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbjE2MjQ6XHRcdH1cbjE2MjU6XHRcbjE2MjY6XHRcdGlmICghZGV2KSB7XG4xNjI3Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4xNjI4Olx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRpZiAoIXhzLVx1MDAzZXJ4IFx1MDAyNlx1MDAyNiAheHMtXHUwMDNldHgpIHtcbjE2MzI6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2MzM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0cWlkID0gc3hkcC1cdTAwM2VzeGRwX3F1ZXVlX2lkO1xuMTYzNzpcdFxuMTYzODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBYRFBfU0hBUkVEX1VNRU0pIHtcbjE2Mzk6XHRcdFx0c3RydWN0IHhkcF9zb2NrICp1bWVtX3hzO1xuMTY0MDpcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTY0MTpcdFxuMTY0MjpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBYRFBfQ09QWSkgfHwgKGZsYWdzIFx1MDAyNiBYRFBfWkVST0NPUFkpIHx8XG4xNjQzOlx0XHRcdCAgICAoZmxhZ3MgXHUwMDI2IFhEUF9VU0VfTkVFRF9XQUtFVVApIHx8IChmbGFncyBcdTAwMjYgWERQX1VTRV9TRykpIHtcbjE2NDQ6XHRcdFx0XHQvKiBDYW5ub3Qgc3BlY2lmeSBmbGFncyBmb3Igc2hhcmVkIHNvY2tldHMuICovXG4xNjQ1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NDY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjQ3Olx0XHRcdH1cbjE2NDg6XHRcbjE2NDk6XHRcdFx0aWYgKHhzLVx1MDAzZXVtZW0pIHtcbjE2NTA6XHRcdFx0XHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cbjE2NTE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTY1MjpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE2NTM6XHRcdFx0fVxuMTY1NDpcdFxuMTY1NTpcdFx0XHRzb2NrID0geHNrX2xvb2t1cF94c2tfZnJvbV9mZChzeGRwLVx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xuMTY1NjpcdFx0XHRpZiAoSVNfRVJSKHNvY2spKSB7XG4xNjU3Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcbjE2NTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjU5Olx0XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVx1MDAzZXNrKTtcbjE2NjI6XHRcdFx0aWYgKCF4c2tfaXNfYm91bmQodW1lbV94cykpIHtcbjE2NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG4xNjY0Olx0XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjY2Olx0XHRcdH1cbjE2Njc6XHRcbjE2Njg6XHRcdFx0aWYgKHVtZW1feHMtXHUwMDNlcXVldWVfaWQgIT0gcWlkIHx8IHVtZW1feHMtXHUwMDNlZGV2ICE9IGRldikge1xuMTY2OTpcdFx0XHRcdC8qIE9uZSBmaWxsIGFuZCBjb21wbGV0aW9uIHJpbmcgcmVxdWlyZWQgZm9yIGVhY2ggcXVldWUgaWQuICovXG4xNjcwOlx0XHRcdFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xuMTY3MTpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NzI6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjczOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjc0Olx0XHRcdFx0fVxuMTY3NTpcdFxuMTY3NjpcdFx0XHRcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcbjE2Nzc6XHRcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuMTY3ODpcdFx0XHRcdCAqL1xuMTY3OTpcdFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuMTY4MDpcdFx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4xNjgxOlx0XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuMTY4MjpcdFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuMTY4MzpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2ODQ6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjg1Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjg2Olx0XHRcdFx0fVxuMTY4NzpcdFxuMTY4ODpcdFx0XHRcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVx1MDAzZXBvb2wsIHVtZW1feHMsIGRldixcbjE2ODk6XHRcdFx0XHRcdFx0XHQgICBxaWQpO1xuMTY5MDpcdFx0XHRcdGlmIChlcnIpIHtcbjE2OTE6XHRcdFx0XHRcdHhwX2Rlc3Ryb3koeHMtXHUwMDNlcG9vbCk7XG4xNjkyOlx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbjE2OTM6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjk0Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjk1Olx0XHRcdFx0fVxuMTY5NjpcdFx0XHR9IGVsc2Uge1xuMTY5NzpcdFx0XHRcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXG4xNjk4Olx0XHRcdFx0aWYgKHhzLVx1MDAzZWZxX3RtcCB8fCB4cy1cdTAwM2VjcV90bXApIHtcbjE2OTk6XHRcdFx0XHRcdC8qIERvIG5vdCBhbGxvdyBzZXR0aW5nIHlvdXIgb3duIGZxIG9yIGNxLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWx2aW5nIERlZXBlciBpbnRvIGB4c2tfYmluZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTc1MCB0byAxNzg1LiBJIG5lZWQgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgeHNrX2JpbmRgIGFjdHVhbGx5IGZ1bmN0aW9ucy4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIFhEUC9BRl9YRFAgbGFuZHNjYXBlLCBidXQgZGV0YWlscyBhcmUgY3J1Y2lhbCwgYW5kIHNvbWV0aW1lcyB0aGUgbnVhbmNlcyBhcmUgYnVyaWVkIGRlZXBlciB0aGFuIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNlZ21lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UsIG9yIGFueSBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byByZXZlYWwgdGhlIHJlbWFpbmluZyBzdGVwcyBvZiB0aGUgYmluZCwgcGVyaGFwcyB0aGUgc2V0dXAgb2YgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGl0c2VsZiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSB2aXN1YWxpemUgdGhlIG9wZXJhdGlvbmFsIHdvcmtmbG93IG9mIHRoaXMgZnVuY3Rpb24gdG8gdXNlIGFuZCBkZWJ1ZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHRcdHhzLVx1MDAzZWNxX3RtcCA9IE5VTEw7XG4xNzUxOlx0XG4xNzUyOlx0XHR4cy1cdTAwM2VkZXYgPSBkZXY7XG4xNzUzOlx0XHR4cy1cdTAwM2V6YyA9IHhzLVx1MDAzZXVtZW0tXHUwMDNlemM7XG4xNzU0Olx0XHR4cy1cdTAwM2VzZyA9ICEhKHhzLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xuMTc1NTpcdFx0eHMtXHUwMDNlcXVldWVfaWQgPSBxaWQ7XG4xNzU2Olx0XHR4cF9hZGRfeHNrKHhzLVx1MDAzZXBvb2wsIHhzKTtcbjE3NTc6XHRcbjE3NTg6XHRcdGlmIChxaWQgXHUwMDNjIGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbjE3NTk6XHRcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuMTc2MDpcdFxuMTc2MTpcdFx0XHRyeHEgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIHFpZCk7XG4xNzYyOlx0XHRcdGlmIChyeHEtXHUwMDNlbmFwaSlcbjE3NjM6XHRcdFx0XHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXHUwMDNlbmFwaS1cdTAwM2VuYXBpX2lkKTtcbjE3NjQ6XHRcdH1cbjE3NjU6XHRcbjE3NjY6XHRvdXRfdW5sb2NrOlxuMTc2NzpcdFx0aWYgKCFlcnIpIHtcbjE3Njg6XHRcdFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxuMTc2OTpcdFx0XHQgKiBzb2NrZXRzLCBhbmQgeHNrX2lzX2JvdW5kKCkuXG4xNzcwOlx0XHRcdCAqL1xuMTc3MTpcdFx0XHRzbXBfd21iKCk7XG4xNzcyOlx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG4xNzczOlx0XHR9XG4xNzc0Olx0b3V0X3JlbGVhc2U6XG4xNzc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMTc3NjpcdFx0aWYgKGRldikge1xuMTc3NzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMTc3ODpcdFx0XHRpZiAoZXJyKVxuMTc3OTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3ODA6XHRcdH1cbjE3ODE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xNzgyOlx0XHRyZXR1cm4gZXJyO1xuMTc4MzpcdH1cbjE3ODQ6XHRcbjE3ODU6XHRzdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbjE3ODY6XHRcdF9fdTY0IGFkZHI7IC8qIFN0YXJ0IG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODc6XHRcdF9fdTY0IGxlbjsgLyogTGVuZ3RoIG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODg6XHRcdF9fdTMyIGNodW5rX3NpemU7XG4xNzg5Olx0XHRfX3UzMiBoZWFkcm9vbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBCaW5kIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgaG9uZXMgaW4gb24gdGhlIGxvY2sgb3JkZXJpbmcgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvY2sgYWNxdWlzaXRpb24gc2VxdWVuY2Ugd2FzOiBgcnRubF9sb2NrYCAtJmd0OyBgeHMtJmd0O211dGV4YCAtJmd0OyBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBoYXMgZmxpcHBlZCB0aGUgc2NyaXB0LCBlc3RhYmxpc2hpbmcgYSBuZXcgb3JkZXI6IGBydG5sX2xvY2tgIC0mZ3Q7IGBuZXRkZXZfbG9ja19vcHMoZGV2KWAgLSZndDsgYHhzLSZndDttdXRleGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UhCgpUaGUgc2hpZnQgaW4gdGhlIGxvY2tpbmcgb3JkZXIgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gQWNxdWlyaW5nIHRoZSBgZGV2YCYjMzk7cyBsb2NrICpiZWZvcmUqIGB4cy0mZ3Q7bXV0ZXhgIGNhbiBlaXRoZXIgZXhwb3NlIGEgcHJldmlvdXMgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IsIGVxdWFsbHkgcGxhdXNpYmx5LCByZXNvbHZlcyBhbiBleGlzdGluZyBsb2NraW5nIHByb2JsZW0sIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gYmluZCBvciBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlc291cmNlcy4gSXQgaXMgYWxsIGFib3V0IHRoZSBvcmRlcmluZyEgVGhlIGNvbmRpdGlvbmFsIGBpZiAoZGV2KWAgc3VnZ2VzdHMgc29tZSBwb3RlbnRpYWwgZm9yIGVycm9yIGhhbmRsaW5nLiBBbHNvLCBhdCB0aGUgZW5kIGBkZXZfcHV0YCBpcyBhbHNvIG5vdyBjb25kaXRpb25hbC4KCkEgY3JpdGljYWwgcG9pbnQgaXMgdGhlIHJldmVyc2UgbG9jayByZWxlYXNlIG9yZGVyLiBQcmV2aW91c2x5LCB0aGUgcmVsZWFzZSBvcmRlciB3YXMgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIHRoZW4gYG11dGV4X3VubG9jaygmYW1wO3hzLSZndDttdXRleClgLiBOb3csIHRoZSBvcmRlciBpcyBmbGlwcGVkIGFnYWluISBUaGUgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGlzIG5vdyBjb25kaXRpb25hbCwgYmFzZWQgb24gdGhlIHN1Y2Nlc3MvZXJyb3IgaGFuZGxpbmchCgpHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIG5ldHdvcmtpbmcgaW50ZXJuYWxzLCBJIGtub3cgQUZfWERQIChYU0spIGlzIGEgY3J1Y2lhbCBpbnRlcmZhY2UgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZywgYWxsb3dpbmcgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGRpcmVjdGx5IGludGVyYWN0IHdpdGggbmV0d29yayBpbnRlcmZhY2VzIHZpYSBzb2NrZXRzLiBBbnkgc3VidGxlIGNoYW5nZXMgaW4gaG93IHRoaXMgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBsb2NraW5nLCBjYW4gaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cy4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggdGhlIGBiaW5kKClgIGNhbGwuIFNpbmNlIEkga25vdyB0aGF0IGBzeXprYWxsZXJgIGhhcyBleHRlbnNpdmUgY292ZXJhZ2Ugb2YgQUZfWERQLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGFuYWx5c2lzIHRvIHZlcmlmeSB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFhEUCBTb2NrZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGRlZmluaXRpb24gd2lsbCBtb3N0IGxpa2VseSByZXNpZGUgaW4gb25lIG9mIHR3byBwbGFjZXM6IHRoZSBwcmltYXJ5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBgbmV0L0tjb25maWdgLCBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIFhEUC1mb2N1c2VkIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBgbmV0L3hkcC9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB0aGUgYENPTkZJR19YRFBfU09DS0VUU2Agb3B0aW9uJiMzOTtzIGF2YWlsYWJpbGl0eSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGV0YWlscy4gVW5kZXJzdGFuZGluZyBpdHMgZXhhY3Qgc3RhdHVzIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3hkcC9LY29uZmlnLTktXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbm5ldC94ZHAvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZSwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipEaXZpbmcgaW50byB0aGUgWERQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgbmV0L3hkcC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMsIGFzIEkga25vdyBteSB3YXkgYXJvdW5kIGtlcm5lbCBLY29uZmlnIGZpbGVzLCBhbmQgSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFhEUCBpcyBiZWluZyBwcmVzZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIFhEUCBmdW5jdGlvbmFsaXR5IGZsYWdzLCBvYnZpb3VzbHksIHRoZSBgWERQX1NPQ0tFVFNgLCBgWERQX1VNRU1gLCBhbmQgYWxsIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFhEUCBmZWF0dXJlcywgYW55IG5ldyBoYXJkd2FyZSBzdXBwb3J0IHRoYXQmIzM5O3MgYmVlbiBhZGRlZCwgYW55IGNoYW5nZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSSYjMzk7bGwgaGF2ZSBhIGxvb2sgYXQgaG93IGRlcGVuZGVuY2llcyBhcmUgc2V0IHVw4oCUd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIFhEUCBvcHRpb25zIGJlY29tZSBhdmFpbGFibGUuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGl0c2VsZj8gQW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHdhcm5pbmdzIHByb3ZpZGVkIGlmIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIGtlcm5lbCBpcyBjaG9zZW4uIEJhc2ljYWxseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBYRFAgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzIGluIHRoaXMgdmVyc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWERQX1NPQ0tFVFNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgIDU6XHRcdGRlZmF1bHQgblxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuICAgODpcdFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbiAgMTM6XHRcdGRlZmF1bHQgblxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUqKgoKT2theSwgc28gYENPTkZJR19YRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBCUEZfU1lTQ0FMTGAgaGFzIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzLCBvciBpZiB3ZSYjMzk7cmUgZ29vZCB0byBqdXN0IGVuYWJsZSBgWERQX1NPQ0tFVFNgIGFuZCB0aGF0JiMzOTtzIGVub3VnaCB0byBwdWxsIGV2ZXJ5dGhpbmcgaW4uIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCBmb3IgJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OyBpbiBga2VybmVsL2JwZi9LY29uZmlnYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLiBUaGF0IHNob3VsZCByZXZlYWwgYW55IGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjk9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMzAtXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMzItXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgeHNrX2JpbmQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGB4c2tfYmluZGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBgLmJpbmRgIG9wZXJhdGlvbiBmb3IgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIGFuZCBjcm9zcy1yZWZlcmVuY2UgaXRzIHVzYWdlLiBUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBpbiBgbmV0L3hkcC94c2suY2AgYW5kIGh1bnQgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgeHNrX2JpbmRgIGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIEFGX1hEUCBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNTg1PXN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTE1ODktXG5uZXQveGRwL3hzay5jOjE1OTA6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxubmV0L3hkcC94c2suYy0xNTkxLXtcbi0tXG5uZXQveGRwL3hzay5jPTIxMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIxNDItXHQucmVsZWFzZVx0PSB4c2tfcmVsZWFzZSxcbm5ldC94ZHAveHNrLmM6MjE0MzpcdC5iaW5kXHRcdD0geHNrX2JpbmQsXG5uZXQveGRwL3hzay5jLTIxNDQtXHQuY29ubmVjdFx0PSBzb2NrX25vX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeHNrX2JpbmRgIExvY2sgT3JkZXJpbmcgQ2hhbmdlKioKCk9rYXksIHNvIGB4c2tfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB1c2VzIHRoZSBgYmluZCgpYCBzeXN0ZW0gY2FsbCBvbiBhbiBBRl9YRFAgc29ja2V0LiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgaW4gdGhlIGtlcm5lbC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBsb2NrIG9yZGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmFjayBhdCB0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlLCBhbmQgcHJvYmFibHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9sb2NrX29wc2AgYmVpbmcgYWNxdWlyZWQgYWZ0ZXIgYHhzLSZndDttdXRleGAgcHJldmlvdXNseSwgYW5kIG5vdyBpdCYjMzk7cyBkaWZmZXJlbnQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIGNvZGUgYXVkaXQuIEkgaGF2ZSB0byBzY2FuIHRoZSBjb2RlIGJhc2UgdG8gaWRlbnRpZnkgKm90aGVyKiBpbnN0YW5jZXMgd2hlcmUgYG5ldGRldl9sb2NrX29wc2AgYW5kIGB4cy0mZ3Q7bXV0ZXhgLCBvciBwb3RlbnRpYWxseSBldmVuIGBydG5sX2xvY2tgIGFyZSBhY3F1aXJlZC4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3JpZ2luYWwgcHJvYmxlbSBhbmQgZW5zdXJpbmcgdGhpcyBuZXcgb3JkZXJpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIGNvbnRlbnRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTE1OTA9c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYxNy1cdGlmIChkZXYpXG5uZXQveGRwL3hzay5jOjE2MTg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3hkcC94c2suYy0xNjE5LVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTI5MD12b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzoyOTc6XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqTXV0ZXggQWNxdWlzaXRpb24gaW4gWFNLIEJ1ZmZlciBQb29sKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYSBtdXRleCBpcyBwb3RlbnRpYWxseSBiZWluZyBhY3F1aXJlZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFhTSyBidWZmZXIgcG9vbC4gVGhlIGNvbnRleHQgSSBoYXZlIGlzIHRoZSBmdW5jdGlvbiBgeHBfY2xlYXJfZGV2YCBvciBtYXliZSBzb21ld2hlcmUgcmVsYXRlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGB4cy0mZ3Q7bXV0ZXhgIGlzIGdyYWJiZWQgdGhlcmUuIFJpZ2h0LCBzbyBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBjb2RlOiBJIHNob3VsZCBjaGVjayBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkwLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtdXRleCBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGJ1ZmZlciBwb29sJiMzOTtzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiB4cF9hc3NpZ25fZGV2KHBvb2wsIGRldiwgcXVldWVfaWQsIGZsYWdzKTtcbiAyODg6XHR9XG4gMjg5Olx0XG4gMjkwOlx0dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBvb2wtXHUwMDNlbmV0ZGV2O1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKCFwb29sLVx1MDAzZW5ldGRldilcbiAyOTU6XHRcdFx0cmV0dXJuO1xuIDI5NjpcdFxuIDI5NzpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMjk4Olx0XHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiAyOTk6XHRcdHhza19jbGVhcl9wb29sX2F0X3FpZChwb29sLVx1MDAzZW5ldGRldiwgcG9vbC1cdTAwM2VxdWV1ZV9pZCk7XG4gMzAwOlx0XHRwb29sLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gMzAxOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDMwMjpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCB4cF9yZWxlYXNlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCxcbiAzMDg6XHRcdFx0XHRcdFx0XHQgIHdvcmspO1xuIDMwOTpcdFxuIDMxMDpcdFx0cnRubF9sb2NrKCk7XG4gMzExOlx0XHR4cF9jbGVhcl9kZXYocG9vbCk7XG4gMzEyOlx0XHRydG5sX3VubG9jaygpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHBvb2wtXHUwMDNlZnEpIHtcbiAzMTU6XHRcdFx0eHNrcV9kZXN0cm95KHBvb2wtXHUwMDNlZnEpO1xuIDMxNjpcdFx0XHRwb29sLVx1MDAzZWZxID0gTlVMTDtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChwb29sLVx1MDAzZWNxKSB7XG4gMzIwOlx0XHRcdHhza3FfZGVzdHJveShwb29sLVx1MDAzZWNxKTtcbiAzMjE6XHRcdFx0cG9vbC1cdTAwM2VjcSA9IE5VTEw7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHR4ZHBfcHV0X3VtZW0ocG9vbC1cdTAwM2V1bWVtLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgWERQIE11dGV4KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgeHMtJmd0O211dGV4YCB3aXRoaW4gdGhlIGBuZXQveGRwL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICphbGwqIHRoZSBwbGFjZXMgdGhpcyBzcGVjaWZpYyBtdXRleCBpcyBsb2NrZWQgYW5kIHVubG9ja2VkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgc3lzdGVtYXRpY2FsbHkuIEtub3dpbmcgdGhlIGxvY2smIzM5O3Mgc2NvcGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IFhEUCBtYW5hZ2VzIGl0cyBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgcHJvdGVjdGlvbi4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIFhEUCBmcmFtZXdvcmsuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHRyYWNrIGRvd24gdGhvc2UgbXV0ZXggYWNxdWlzaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdXRleF9sb2NrXFwoXHUwMDI2eHMtXHUwMDNlbXV0ZXhcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTE5MT1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMTk5LVxubmV0L3hkcC94c2suYzoxMjAwOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTEyMDEtXHRjYWNoZWRfY29ucyA9IHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zO1xuLS1cbm5ldC94ZHAveHNrLmM9MTUzMD1zdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3hkcC94c2suYy0xNTUwLVx0eHNrX2RlbGV0ZV9mcm9tX21hcHMoeHMpO1xubmV0L3hkcC94c2suYzoxNTUxOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTE1NTItXHR4c2tfdW5iaW5kX2Rldih4cyk7XG4tLVxubmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTE2MTktXG5uZXQveGRwL3hzay5jOjE2MjA6XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbm5ldC94ZHAveHNrLmMtMTYyMS1cdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbi0tXG5uZXQveGRwL3hzay5jPTE3OTI9c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC94ZHAveHNrLmMtMTgxMy1cbm5ldC94ZHAveHNrLmM6MTgxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTE4MTUtXHRcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4NTEtXG5uZXQveGRwL3hzay5jOjE4NTI6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xODUzLVx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVx1MDAzZXVtZW0pIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4ODAtXG5uZXQveGRwL3hzay5jOjE4ODE6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xODgyLVx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4tLVxubmV0L3hkcC94c2suYz0xOTM1PXN0YXRpYyBpbnQgeHNrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQveGRwL3hzay5jLTE5NjQtXG5uZXQveGRwL3hzay5jOjE5NjU6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xOTY2LVx0XHRzdGF0cy5yeF9kcm9wcGVkID0geHMtXHUwMDNlcnhfZHJvcHBlZDtcbi0tXG5uZXQveGRwL3hzay5jLTIwNDMtXG5uZXQveGRwL3hzay5jOjIwNDQ6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0yMDQ1LVx0XHRpZiAoeHMtXHUwMDNlemMpXG4tLVxubmV0L3hkcC94c2suYz0yMTAxPXN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbi0tXG5uZXQveGRwL3hzay5jLTIxMTMtXG5uZXQveGRwL3hzay5jOjIxMTQ6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTIxMTUtXHRcdFx0aWYgKHhzLVx1MDAzZWRldiA9PSBkZXYpIHtcbi0tXG5uZXQveGRwL3hza19kaWFnLmM9OTI9c3RhdGljIGludCB4c2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC94ZHAveHNrX2RpYWcuYy0xMTItXG5uZXQveGRwL3hza19kaWFnLmM6MTEzOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hza19kaWFnLmMtMTE0LVx0aWYgKFJFQURfT05DRSh4cy1cdTAwM2VzdGF0ZSkgPT0gWFNLX1VOQk9VTkQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgeHNrX25vdGlmaWVyYCBDYWxsYmFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYHhza19ub3RpZmllcmAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBkZXZpY2UmIzM5O3MgbGlmZWN5Y2xlLiBJdCBzZWVtcyB0aGF0IHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyBlaXRoZXIgdW5yZWdpc3RlcmVkIG9yIGV4cGVyaWVuY2VzIGEgJiMzNDtkb3duJiMzNDsgZXZlbnQsIHRoZSBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIEFuIGltcG9ydGFudCBkZXRhaWwgdG8gbm90ZSBpcyB0aGF0IHRoaXMgY2FsbCBoYXBwZW5zIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBhbHJlYWR5IGhlbGQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGFjdGlvbnMgYW5kIGxvZ2ljIHRoYXQgb2NjdXIgKndpdGhpbiogdGhlIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZXNlIGxvY2tpbmcgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEwMDpcdFxuMjEwMTpcdHN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbjIxMDI6XHRcdFx0XHR1bnNpZ25lZCBsb25nIG1zZywgdm9pZCAqcHRyKVxuMjEwMzpcdHtcbjIxMDQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjIxMDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbjIxMDY6XHRcdHN0cnVjdCBzb2NrICpzaztcbjIxMDc6XHRcbjIxMDg6XHRcdHN3aXRjaCAobXNnKSB7XG4yMTA5Olx0XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuMjExMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZHAubG9jayk7XG4yMTExOlx0XHRcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZuZXQtXHUwMDNleGRwLmxpc3QpIHtcbjIxMTI6XHRcdFx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcbjIxMTM6XHRcbjIxMTQ6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbjIxMTU6XHRcdFx0XHRpZiAoeHMtXHUwMDNlZGV2ID09IGRldikge1xuMjExNjpcdFx0XHRcdFx0c2stXHUwMDNlc2tfZXJyID0gRU5FVERPV047XG4yMTE3Olx0XHRcdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbjIxMTg6XHRcdFx0XHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbjIxMTk6XHRcbjIxMjA6XHRcdFx0XHRcdHhza191bmJpbmRfZGV2KHhzKTtcbjIxMjE6XHRcbjIxMjI6XHRcdFx0XHRcdC8qIENsZWFyIGRldmljZSByZWZlcmVuY2VzLiAqL1xuMjEyMzpcdFx0XHRcdFx0eHBfY2xlYXJfZGV2KHhzLVx1MDAzZXBvb2wpO1xuMjEyNDpcdFx0XHRcdH1cbjIxMjU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMjEyNjpcdFx0XHR9XG4yMTI3Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGRwLmxvY2spO1xuMjEyODpcdFx0XHRicmVhaztcbjIxMjk6XHRcdH1cbjIxMzA6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbjIxMzE6XHR9XG4yMTMyOlx0XG4yMTMzOlx0c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XG4yMTM0Olx0XHQubmFtZSA9XHRcdFwmIzM0O1hEUFwmIzM0OyxcbjIxMzU6XHRcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbjIxMzY6XHRcdC5vYmpfc2l6ZSA9XHRzaXplb2Yoc3RydWN0IHhkcF9zb2NrKSxcbjIxMzc6XHR9O1xuMjEzODpcdFxuMjEzOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9ja2luZyBPcmRlciBpbiBYU0sgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHhza19ub3RpZmllcmAgYW5kIGltbWVkaWF0ZWx5IHNlZSBgbXV0ZXhfbG9jaygmYW1wO3hzLSZndDttdXRleCk7YCBmb2xsb3dlZCBieSBgeHBfY2xlYXJfZGV2KHhzLSZndDtwb29sKTtgLiBOb3csIGB4cF9jbGVhcl9kZXZgIGNhbGxzIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFNvLCBpbiBgeHNrX25vdGlmaWVyYCwgdGhlIGxvY2tpbmcgb3JkZXIgaXMgY2xlYXJseSBgeHMtJmd0O211dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKQnV0LCBoYW5nIG9uLCB3aGF0IGFib3V0IGB4c2tfYmluZGA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBmbG93IHdhczogYG11dGV4X2xvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpYCBmb2xsb3dlZCBieSBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGF0JiMzOTtzIHRoZSBzYW1lIG9yZGVyLiBXYWl0LCBubywgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gaXQgKndhcyogdGhlIHNhbWUuCgpXaGF0IGRpZCB0aGUgcGF0Y2ggY2hhbmdlLCBleGFjdGx5PyBBaGEhIFRoZSBwYXRjaCBtb2RpZmllZCBgeHNrX2JpbmRgIHRvIGluY2x1ZGU6CgpgYGAKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKYGBgCgpPa2F5LCBzbyAqbm93KiBpbiBgeHNrX2JpbmRgLCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgIGlzIGNhbGxlZCAqYmVmb3JlKiBgbXV0ZXhfbG9jaygmYW1wO3hzLSZndDttdXRleClgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlLiBJdCBmbGlwcGVkIHRoZSBsb2NraW5nIG9yZGVyLiBCdXQgKndoeSo/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gV2hhdCBkb2VzIGBuZXRkZXZfbG9ja19vcHNgIG9yZGVyIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byBwb3RlbnRpYWwgZGVhZGxvY2tzPyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYG5ldGRldl9sb2NrX29wc2AgYW5kIGl0cyB1c2FnZXMgd2l0aGluIHRoZSBrZXJuZWwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoIGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBsb2NraW5nIGhpZXJhcmNoeS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZmluZCB0aGUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzNy0gKlx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEzODogKlx0d2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzktICpcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZfbG9ja19vcHMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb3IgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBuZXRkZXZfbG9ja19vcHNgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCB1c3VhbGx5IHJlYWNoIGZvciBgZ2l0IGxvZ2Agb24gdGhhdCBjb21taXQgb3IgZnVuY3Rpb24uIEJ1dCBJJiMzOTttIHJlbWluZGVkIHRoYXQgSSBkb24mIzM5O3QgaGF2ZSB0aGUgZnVsbCBnaXQgc3VpdGUgYXQgbXkgZGlzcG9zYWwuIE5vIGBnaXQgc2hvd2AgZWl0aGVyLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gcGVyZmVjdCBmb3IgcXVpY2tseSBzZWVpbmcgdGhlIGxhdGVzdCBjaGFuZ2VzIHdpdGggYGdpdCBzaG93IEhFQURgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGZydXN0cmF0aW5nLCBidXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgbXkgYXZhaWxhYmxlIHRvb2xzPwoKUmlnaHQsIEkmIzM5O20gbGltaXRlZCB0byBgZ3JlcHBlcmAsIGByZWFkLWZpbGVgLCBhbmQgYGNvZGVzZWFyY2hgLiBQZXJoYXBzIGBncmVwcGVyYCBjYW4gZ2l2ZSBtZSB3aGF0IEkgbmVlZC4gSW5zdGVhZCBvZiB0aGUgbG9nIGhpc3RvcnksIEkmIzM5O2xsIHN3aXRjaCBnZWFycy4gQ2FuIGBncmVwcGVyYCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbmV0ZGV2X2xvY2tfb3BzYCBpcyAqdXNlZCogdGhyb3VnaG91dCB0aGUga2VybmVsPyBUaGF0IG1pZ2h0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGltcGxlbWVudGVkIGN1cnJlbnRseSwgZXZlbiB3aXRob3V0IHRoZSBmdWxsIGdpdCBoaXN0b3J5LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSB0aGUgdG9vbCBpbiB0aGlzIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTEyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvYnJpZGdlL2JyX2lmLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpuZXdfbmJwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQyLVx0cC1cdTAwM2VkZXYgPSBkZXY7XG5uZXQvYnJpZGdlL2JyX2lmLmM6NDQzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQ0LVx0cC1cdTAwM2VwYXRoX2Nvc3QgPSBwb3J0X2Nvc3QoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NTktXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG5uZXQvY29yZS9kZXYuYzoxODYwOlx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTE4NjEtXHRcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTE5MzctXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTkzOS1cdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXIobmIsIE5FVERFVl9HT0lOR19ET1dOLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTk1My1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2NvcmUvZGV2LmM6MTk1NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xOTU1LVx0XHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjIwLVx0aWYgKHhkcF9saW5rLVx1MDAzZWRldikge1xubmV0L2NvcmUvZGV2LmM6MTA2MjE6XHRcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cdTAwM2VkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTA2MjItXHRcdFdBUk5fT04oZGV2X3hkcF9kZXRhY2hfbGluayh4ZHBfbGluay1cdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2NzI9c3RhdGljIGludCBicGZfeGRwX2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cbm5ldC9jb3JlL2Rldi5jOjEwNzA1Olx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYy0xMDcwNi1cdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXHUwMDNlZGV2LCB4ZHBfbGluay1cdTAwM2VmbGFncyk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cbm5ldC9jb3JlL2Rldi5jOjEwNzY0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcdTAwMjZleHRhY2ssIGxpbmspO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cdFx0XHRcdCAgIFx1MDAyNmZlYXR1cmUsIGxvd2VyLVx1MDAzZW5hbWUpO1xubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcbm5ldC9jb3JlL2Rldi5jLTEwOTM4LVx0XHRcdGxvd2VyLVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH5mZWF0dXJlO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUxMS1cbm5ldC9jb3JlL2Rldi5jOjExNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTUxMy1cdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExNTM5LVx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTE1NDEtXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjUwMy1cdFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cbm5ldC9jb3JlL2Rldi5jOjEyNTA0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTA1LVx0XHRkZXZfc2h1dGRvd24oZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNzg2LVxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNzg4LVx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xubmV0L2NvcmUvZGV2LmM6MTI4MDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVx0ZGV2X3NodXRkb3duKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxuLS1cbm5ldC9jb3JlL2Rldi5oLTYyLVxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVx0XFxcbm5ldC9jb3JlL2Rldi5oLTY0LVx0Zm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqdmFyX25hbWUgX19mcmVlKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCkgPSBOVUxMOyBcXFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIxLVxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjMtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zOT1pbnQgZGV2X3NldF9hbGlhcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphbGlhcywgc2l6ZV90IGxlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXG5uZXQvY29yZS9kZXZfYXBpLmM6NDM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cdHJldCA9IG5ldGlmX3NldF9hbGlhcyhkZXYsIGFsaWFzLCBsZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjY3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xubmV0L2NvcmUvZGV2X2FwaS5jOjgzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXHRuZXRpZl9zZXRfZ3JvdXAoZGV2LCBuZXdfZ3JvdXApO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2X2FwaS5jOjk1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtOTYtXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTM1PWludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxubmV0L2NvcmUvZGV2X2FwaS5jOjEzOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cdHJldCA9IG5ldGlmX2NoYW5nZV9jYXJyaWVyKGRldiwgbmV3X2NhcnJpZXIpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzQtXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMTc2LVx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTk3PWludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cbm5ldC9jb3JlL2Rldl9hcGkuYzoyMDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXHRyZXQgPSBuZXRpZl9vcGVuKGRldiwgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMjE5LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMjEtXHRuZXRpZl9jbG9zZShkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yMjY9aW50IGRldl9ldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxubmV0L2NvcmUvZGV2X2FwaS5jOjIzNTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xubmV0L2NvcmUvZGV2X2FwaS5jOjI2NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTMxMy1cbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTUtXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zMzM9aW50IGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXG5uZXQvY29yZS9kZXZfYXBpLmM6MzM4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVx0cmV0ID0gbmV0aWZfc2V0X21hY19hZGRyZXNzKGRldiwgc3MsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzozNjg6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXHRuZXRpZl9zdGF0ZV9jaGFuZ2UoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjk2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcsIFx1MDAyNmV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1Mi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDU0LVx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDc0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTAxPXN0YXRpYyBpbnQgZGV2X3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUwOTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MTAtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyNi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVx0XHRcdCAgIChzaXplX3QpZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1Nzc6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc4LVx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVx0Y2FzZSBTSU9DU0lGTUFQOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTgzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4NC1cdFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cdFx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXHRcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVx0XHRcdHJldHVybiAtRU5PREVWO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cdFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcbi0tXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxuLS1cbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI1LVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlcGVybV9hZGRyKSkge1xubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNy1cdFx0XHRmYWlsb3Zlcl9zbGF2ZV9yZWdpc3RlcihkZXYpO1xuLS1cbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXHRcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MjkxPXZvaWQgbGlua3dhdGNoX3N5bmNfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cdGlmIChsaW5rd2F0Y2hfY2xlYW5fZGV2KGRldikpIHtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cdFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE0NjE9c3RhdGljIHNzaXplX3QgdHhfbWF4cmF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg2LVx0ZXJyID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNDg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg4LVx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfdHhfbWF4cmF0ZSlcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTM5PXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTAtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTUxOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTUyLVx0ZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcyA9IDA7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cdH0gZWxzZSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cdFx0XHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXHRcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTE0NzI9c3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0NzgtXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQ3OTpcdFx0bmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwobmV0ZGV2KTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQ4MC1cdFx0bmV0ZGV2X2dlbmxfZGV2X25vdGlmeShuZXRkZXYsIE5FVERFVl9DTURfREVWX0FERF9OVEYpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTMwPXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU0LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTU6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTYtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMDM3PXN0YXRpYyBpbnQgZG9fc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDU1LVx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fZGVsX3NsYXZlKHVwcGVyX2RldiwgZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNTY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDU3LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3MS1cdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2FkZF9zbGF2ZSh1cHBlcl9kZXYsIGRldiwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNzI6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDczLVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzE0ND1zdGF0aWMgaW50IGRvX3NldGxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMTc1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzE3NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3Ny1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjEzLVx0XHRkb3duX3dyaXRlKFx1MDAyNmRldl9hZGRyX3NlbSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMjE0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMyMTUtXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzcxMD1pbnQgcnRubF9jb25maWd1cmVfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM3MTY6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTctXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzkyOD1zdGF0aWMgaW50IHJ0bmxfbmV3bGlua19jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODAtXHRpZiAodGJbSUZMQV9NQVNURVJdKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTgxOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODItXHRcdGVyciA9IGRvX3NldF9tYXN0ZXIoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01BU1RFUl0pLCBleHRhY2spO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTYyNy1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2Vjb25kdWl0LVx1MDAzZWNsb3NlX2xpc3QsIFx1MDAyNmNsb3NlX2xpc3QpO1xubmV0L2RzYS9kc2EuYzoxNjI4Olx0XHRuZXRkZXZfbG9ja19vcHMoZHAtXHUwMDNlY29uZHVpdCk7XG5uZXQvZHNhL2RzYS5jLTE2MjktXHR9XG4tLVxubmV0L2RzYS91c2VyLmM9MzQ3Nz1zdGF0aWMgaW50IGRzYV91c2VyX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9kc2EvdXNlci5jLTM2MDUtXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWNsb3NlX2xpc3QsIFx1MDAyNmNsb3NlX2xpc3QpO1xubmV0L2RzYS91c2VyLmM6MzYwNjpcdFx0XHRuZXRkZXZfbG9ja19vcHMoZHAtXHUwMDNldXNlcik7XG5uZXQvZHNhL3VzZXIuYy0zNjA3LVx0XHR9XG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzUtXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc3LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQyLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQ0LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2ZlYXR1cmVzLmM9MjEyPWludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9mZWF0dXJlcy5jLTIzOC1cdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvZmVhdHVyZXMuYzoyMzk6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL2ZlYXR1cmVzLmMtMjQwLVx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2Mi1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDYzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NC1cdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTI0NTU9c3RhdGljIGludCBldGh0b29sX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQ5Ny1cdFx0XHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzoyNDk4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0yNDk5LVx0XHRcdHJjID0gb3BzLVx1MDAzZXNldF9waHlzX2lkKGRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTEtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzoyNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTMtXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjYtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNjI3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjgtXHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSBcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYz0yMjE9c3RhdGljIHZvaWQgbW9kdWxlX2ZsYXNoX2Z3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jLTIyOC1cbm5ldC9ldGh0b29sL21vZHVsZS5jOjIyOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjMwLVx0ZXRodG9vbF9jbWlzX2Z3X3VwZGF0ZShcdTAwMjZtb2R1bGVfZnctXHUwMDNlZndfdXBkYXRlKTtcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzUtXHRydG5sX2xvY2soKTtcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIzNjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjM3LVx0ZGV2LVx1MDAzZWV0aHRvb2wtXHUwMDNlbW9kdWxlX2Z3X2ZsYXNoX2luX3Byb2dyZXNzID0gZmFsc2U7XG4tLVxubmV0L2V0aHRvb2wvbW9kdWxlLmM9NDE3PWludCBldGhubF9hY3RfbW9kdWxlX2Z3X2ZsYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxubmV0L2V0aHRvb2wvbW9kdWxlLmM6NDMyOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTUwNz1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDMtXHRcdFx0cnRubF9sb2NrKCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQ0Olx0XHRuZXRkZXZfbG9ja19vcHMocmVxX2luZm8tXHUwMDNlZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDUtXHR9XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTU5ND1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEyLVx0XHRydG5sX2xvY2soKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MTM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02MTQtXHRyZXQgPSBjdHgtXHUwMDNlb3BzLVx1MDAzZXByZXBhcmVfZGF0YShjdHgtXHUwMDNlcmVxX2luZm8sIGN0eC1cdTAwM2VyZXBseV9kYXRhLCBpbmZvKTtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzUtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjkzNjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTkzNy1cdGRldi1cdTAwM2VjZmdfcGVuZGluZyA9IGttZW1kdXAoZGV2LVx1MDAzZWNmZywgc2l6ZW9mKCpkZXYtXHUwMDNlY2ZnKSxcbi0tXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVx0XHRpZiAoY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cdTAwM2VpZmluZGV4KVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cbi0tXG5uZXQvZXRodG9vbC9yc3MuYz0xMTUwPWludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxubmV0L2V0aHRvb2wvcnNzLmM6MTE3ODpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODEtXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cdFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6NDg4Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg5LVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxNjA9aW50IGFkZHJjb25mX2FkZF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzE4Mi1cdGlmIChkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzE4MzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxODQtXHRcdGVyciA9IGluZXQ2X2FkZHJfYWRkKG5ldCwgZGV2LCBcdTAwMjZjZmcsIDAsIDAsIE5VTEwpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NDk4NT1pbmV0Nl9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUwNzEtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUwNzI6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTA3My1cdGlkZXYgPSBpcHY2X2ZpbmRfaWRldihkZXYpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjUyNT1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9hZGRyX2dlbl9tb2RlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2MS1cdFx0XHRcdFdSSVRFX09OQ0UoaWRldi1cdTAwM2VjbmYuYWRkcl9nZW5fbW9kZSwgbmV3X3ZhbCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NjI6XHRcdFx0XHRuZXRkZXZfbG9ja19vcHMoaWRldi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NTYzLVx0XHRcdFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzUtXHRcdFx0XHRcdFx0ICBuZXdfdmFsKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3NjpcdFx0XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGlkZXYtXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU3Ny1cdFx0XHRcdFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE1NjQ9c3RhdGljIGludCB0Y19nZXRfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTU4MS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTU4MjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xNTgzLVx0ZXJyID0gX190Y19nZXRfcWRpc2Moc2tiLCBuLCBleHRhY2ssIGRldiwgdGNhLCB0Y20pO1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTgyMj1zdGF0aWMgaW50IHRjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODQzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NDQtXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xOTA4PXN0YXRpYyBpbnQgdGNfZHVtcF9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTQzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTk0NC1cdFx0cSA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkaXNjKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIzMjc9c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzNDU6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ni1cdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNDUzPXN0YXRpYyBpbnQgdGNfZHVtcF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjQ2Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjQ2NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yNDY4LVx0ZXJyID0gX190Y19kdW1wX3RjbGFzcyhza2IsIGNiLCB0Y20sIGRldik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2tpbmcgTWVjaGFuaXNtcyBpbiB0aGUgTmV0d29yayBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGhhbmRsZXMgbG9ja2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRldmljZSBvcGVyYXRpb25zLiBUaGUgY29kZSYjMzk7cyB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzYCBub3cuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZ3JhYmJpbmcgdGhlIG5ldGRldiYjMzk7cyBvcGVyYXRpb25zIGxvY2suIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYGRldi0mZ3Q7bmV0ZGV2X29wc19sb2NrYCwgd2hpY2ggSSBzZWVtIHRvIHJlY2FsbCB3YXMgaW50cm9kdWNlZCBmYWlybHkgcmVjZW50bHkgaW4gdGhlIG5ldC1uZXh0IHRyZWUgdG8gaGVscCB3aXRoIHRoZSBSVE5MIHNwbGl0LiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIG90aGVyIGxvY2tpbmcgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgbmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYG5ldGRldl9sb2NrX29wc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBuZXR3b3JrIGRldmljZSBsb2NraW5nIG1lY2hhbmlzbXMuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYG5ldGRldl9sb2NrX29wc2Agc3RydWN0dXJlIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIGhlYWRlcnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBiYXNlIGRlZmluaXRpb25zIGZvciBuZXR3b3JrIGRldmljZXMgdXN1YWxseSByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVjbGFyYXRpb24gYW5kIHBvc3NpYmx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGxvY2tpbmcgZnJhbWV3b3JrLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBkZXByZWNhdGVkIG9yIHBlcmhhcHMgcmVwbGFjZWQgYnkgc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGNvZGUgY29tbWVudHMgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9sb2NrX29wc1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzctICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzg6ICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM5LSAqXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRmluZGluZyB0aGUgYG5ldGRldl9sb2NrX29wc2AgUmVmZXJlbmNlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYG5ldGRldl9sb2NrX29wc2AuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCwgSSBrbm93IHRoaXMgcHJvYmFibHkgbWVhbnMgZGlnZ2luZyB0aHJvdWdoIGhlYWRlciBmaWxlcy4gVGhpcyBsaWtlbHkgcmVwcmVzZW50cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGxvY2sgb3BlcmF0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNlYXJjaCB0aGUgaW5jbHVkZSBwYXRocy4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHdoZXJlIGl0IGlzIHVzZWQuIEkgZXhwZWN0IHRoaXMgdG8gYmUgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldHdvcmsgZGV2aWNlIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBpbiB0aGUgbmV0d29yayBjb3JlIGZpbGVzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2V0IG9mIGhlYWRlcnMgdG8gc2VhcmNoLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZvcm11bGF0ZSBhIHJvYnVzdCBzZWFyY2ggcXVlcnkgc28gYXMgbm90IHRvIG1pc3MgYSB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZXRkZXZfbG9ja19vcHNcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Mjg9c3RhdGljIGlubGluZSBib29sIG5ldGRldl9uZWVkX29wc19sb2NrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0zOC1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmV0ZGV2X2xvY2suaGAqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBuZXR3b3JrIGRldmljZSBsb2NraW5nIGhhcyBldm9sdmVkLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHJlY2VudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIHNwaW5sb2NrcywgbXV0ZXhlcywgbWF5YmUgc29tZSByZWFkLXdyaXRlIGxvY2tzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNsZXZlciB0cmlja3MgdG8gbWluaW1pemUgY29udGVudGlvbi4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46CgoqICAgVGhlIGdyYW51bGFyaXR5IG9mIHRoZSBsb2NrcyDigJMgYXJlIHRoZXkgcGVyLWRldmljZSwgcGVyLXF1ZXVlLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPwoqICAgSG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IG9wZXJhdGlvbnMg4oCTIHRyYW5zbWl0LCByZWNlaXZlLCBjb25maWd1cmF0aW9uLCBhbmQgc28gb24uCiogICBBbnkgYXR0ZW1wdHMgYXQgbG9ja2xlc3MgYWxnb3JpdGhtcyBvciBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhdCBsZWFzdCBoaWdobHkgb3B0aW1pemVkIGxvY2tpbmcgcHJpbWl0aXZlcywgSSYjMzk7bSBob3BpbmcgZm9yIHNvbWUgaW50ZXJlc3RpbmcgbW9kZXJuIHRlY2huaXF1ZXMsIG1heWJlIFJDVSBpbiBwbGF5LgoqICAgVGhlIHBvdGVudGlhbCBmb3IgbG9jayBoaWVyYXJjaGllcyB0byBwcmV2ZW50IGRlYWRsb2NrcywgdGhhdCYjMzk7cyBhbHdheXMgYSBjcml0aWNhbCBhc3BlY3QgaW4gbmV0d29ya2luZyBjb2RlLgoqICAgSSYjMzk7bGwgYmUgZm9jdXNpbmcgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHN0aWxsIHVzaW5nIHRoZSBvbGQgYW5kIHNsb3cgbmV0aWZfcnhfbG9jaygpIGZvciBuZXRpZl9yeCgpLgoKVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcGFydGljdWxhcmx5IGVsZWdhbnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0XG4gICAzOlx0I2lmbmRlZiBfTkVUX05FVERFVl9MT0NLX0hcbiAgIDQ6XHQjZGVmaW5lIF9ORVRfTkVUREVWX0xPQ0tfSFxuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgIDk6XHRcbiAgMTA6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X3RyeWxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgMTE6XHR7XG4gIDEyOlx0XHRyZXR1cm4gbXV0ZXhfdHJ5bG9jayhcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gIDEzOlx0fVxuICAxNDpcdFxuICAxNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAxNjpcdHtcbiAgMTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuICAxODpcdH1cbiAgMTk6XHRcbiAgMjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAgMjE6XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcl9pbnZpc2libGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgMjI6XHR7XG4gIDIzOlx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCB8fFxuICAyNDpcdFx0ICAgIGRldi1cdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1VOUkVHSVNURVJJTkcpXG4gIDI1Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAyOTpcdHtcbiAgMzA6XHRcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG4gIDMxOlx0XG4gIDMyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TSEFQRVIpXG4gIDMzOlx0XHRyZXQgfD0gISFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZXRfc2hhcGVyX29wcztcbiAgMzQ6XHQjZW5kaWZcbiAgMzU6XHRcbiAgMzY6XHRcdHJldHVybiByZXQ7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNDA6XHR7XG4gIDQxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNDI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl91bmxvY2tfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDQ4Olx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc190b19mdWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDUyOlx0e1xuICA1MzpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDU0Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDU1Olx0XHRlbHNlXG4gIDU2Olx0XHRcdG5ldGRldl9sb2NrKGRldik7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDYwOlx0e1xuICA2MTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDYyOlx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDYzOlx0XHRlbHNlXG4gIDY0Olx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNjg6XHR7XG4gIDY5Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNzA6XHRcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTUzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBYU0sgU29ja2V0IExpZmVjeWNsZTogTG9ja2luZyBhbmQgU3RhdGUgVHJhbnNpdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBuZXRkZXZfbG9ja19vcHNgIGlzIGFjcXVpcmluZyBhIGxvY2sgb24gYGRldi0mZ3Q7bG9ja2AuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHhza19iaW5kYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBiaW5kaW5nIHByb2Nlc3MuIEkgc2VlIHRoYXQgaXQgc3RhcnRzIGJ5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudC4KCldpdGhpbiBgeHNrX2JpbmRgLCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG5ldHdvcmsgZGV2aWNlIHVzaW5nIGBkZXZfZ2V0X2J5X2luZGV4YC4gSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgYG5ldGRldl9sb2NrX29wc2AgaXMgdXNlZC4gVGhlbiBhIG11dGV4IGxvY2sgaXMgYWNxdWlyZWQgb24gYHhzLSZndDttdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gSXQgY2hlY2tzIHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGU7IGlmIGl0JiMzOTtzIG5vdCByZWFkeSwgaXQgYmFpbHMgb3V0IGVhcmx5IHdpdGggYW4gYEVCVVNZYCBlcnJvci4gSWYgdGhlcmUmIzM5O3Mgbm8gZGV2aWNlIHByZXNlbnQgYW4gZXJyb3IgaXMgdHJpZ2dlcmVkLCBgRU5PREVWYC4gVGhlIGNvZGUgdGhlbiB1bmxvY2tzIGB4cy0mZ3Q7bXV0ZXhgIGFuZCwgaWYgYSBkZXZpY2Ugd2FzIHByZXNlbnQsIHVubG9ja3MgdGhlIGRldmljZSBsb2NrIHZpYSBgbmV0ZGV2X3VubG9ja19vcHNgIGFuZCBkZWNyZW1lbnRzIHRoZSBkZXZpY2UmIzM5O3MgcmVmZXJlbmNlIGNvdW50LiBDcml0aWNhbGx5LCBpZiBgZXJyYCBpcyB6ZXJvLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgd2VudCBzbW9vdGhseSwgYSBgc21wX3dtYigpYCBpcyB1c2VkIHRvIGVuc3VyZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHRoZSBzdGF0ZSBpcyBhdG9taWNhbGx5IHNldCB0byBgWFNLX0JPVU5EYC4gSXQgdGhlbiBjbGVhbnMgdXAgYnkgcmVsZWFzaW5nIHRoZSBkZXZpY2UuIEZpbmFsbHksIHRoZSBSVE5MIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCBgeHNrX2JpbmRgIGhhbmRsZXMgZGV2aWNlIGF0dGFjaG1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgbmVjZXNzYXJ5IGxvY2tpbmcgdG8gZ3VhcmFudGVlIHRocmVhZCBzYWZldHkgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGB4c2tfcmVsZWFzZWAuIEkgY2FuIHNlZSB0aGF0IGB4c2tfcmVsZWFzZWAgaGFuZGxlcyB0aGUgdW5iaW5kaW5nIG9mIHRoZSBzb2NrZXQgZnJvbSBhIG5ldHdvcmsgZGV2aWNlLCBhbmQgdGhlIGNsZWFudXAgcHJvY2VzcyBhZnRlciB0aGUgc29ja2V0IGlzIGNsb3NlZC4gRmlyc3RseSwgaXQgbG9ja3MgYG5ldC0mZ3Q7eGRwLmxvY2tgIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBYRFAgc3RydWN0dXJlcywgYmVmb3JlIGl0IGRlbGV0ZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBuZXR3b3JrJiMzOTtzIFhEUCB0cmFja2luZywgdGhlbiBpdCB1bmxvY2tzLiBUaGUgcm91dGluZSB0aGVuIGRpc2FibGVzIEJIcyAoYm90dG9tIGhhbHZlcykgYW5kIGRlY3JlbWVudHMgdGhlIHNvY2tldCYjMzk7cyB1c2FnZSBjb3VudCB3aXRoIGBzb2NrX3Byb3RfaW51c2VfYWRkYC4gVGhlIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBtYXBzIGFyZSB0aGVuIGNsZWFuZWQgdXAgd2l0aCBgeHNrX2RlbGV0ZV9mcm9tX21hcHNgLiBOZXh0LCB0aGVyZSYjMzk7cyBhIGxvY2sgb24gYHhzLSZndDttdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCwgdGhlbiBgeHNrX3VuYmluZF9kZXZgIGlzIGNhbGxlZC4gRmluYWxseSwgdGhlIGB4cy0mZ3Q7bXV0ZXhgIGlzIHVubG9ja2VkLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2FsbCB0byBgeHNrX3pjX2NxX3RtcF9yaW5nX2NsZWFuYCB3aGljaCBJIHdpbGwgaW52ZXN0aWdhdGUuCgpTbywgYHhza19yZWxlYXNlYCBlbmNhcHN1bGF0ZXMgdGhlIHRlYXJkb3duIHByb2Nlc3M6IHJlbW92aW5nIHRoZSBzb2NrZXQgZnJvbSBYRFAgZGF0YSBzdHJ1Y3R1cmVzLCByZWR1Y2luZyB0aGUgc29ja2V0JiMzOTtzIHVzYWdlLCBjbGVhbmluZyB1cCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgYWN0dWFsIHVuYmluZGluZyBmcm9tIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB3aGF0IGB4c2tfdW5iaW5kX2RldmAgZG9lcy4gSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3VuYmluZF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTQ1Mj1zdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXG4tLVxubmV0L3hkcC94c2suYy0xNDY5LVxubmV0L3hkcC94c2suYzoxNDcwOnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE0NzEte1xuLS1cbm5ldC94ZHAveHNrLmM9MTUzMD1zdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3hkcC94c2suYy0xNTUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jOjE1NTI6XHR4c2tfdW5iaW5kX2Rldih4cyk7XG5uZXQveGRwL3hzay5jLTE1NTMtXHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmM9MjEwMT1zdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L3hkcC94c2suYy0yMTE5LVxubmV0L3hkcC94c2suYzoyMTIwOlx0XHRcdFx0eHNrX3VuYmluZF9kZXYoeHMpO1xubmV0L3hkcC94c2suYy0yMTIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHhza191bmJpbmRfZGV2YCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHhza191bmJpbmRfZGV2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdW5iaW5kaW5nIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWERQIHNvY2tldHMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLgoKSSBpbW1lZGlhdGVseSB3YW50IHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBYRFAgc29ja2V04oCZcyBzdGF0ZS4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCBncmFjZWZ1bGx5IGhhbmRsaW5nIGRldmljZXMgYmVpbmcgdW5ib3VuZCB3aXRob3V0IHByb3BlciBzb2NrZXQgbm90aWZpY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIG9yIHdhaXRpbmcgZm9yIGRhdGEuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGFkZHJlc3NlcyB0aGF0LiBEb2VzIGl0IHN5bmNocm9uaXplIHdpdGggYW55IHVzZXItc3BhY2UgdGhyZWFkcz8gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgdXNlZD8gQW55IGludGVycnVwdCBkaXNhYmxlL2VuYWJsZSBzZXF1ZW5jZXMgdGhhdCBuZWVkIGV4dHJhIGF0dGVudGlvbj8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVuYmluZCBmYWlscyBwYXJ0d2F5IHRocm91Z2g/IERvZXMgaXQgYXR0ZW1wdCB0byByb2xsIGJhY2s/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IEkgd2FudCB0byBzZWUgaWYgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlLCBzYXksIHRoZSBYRFAgc29ja2V0IHRhYmxlIGlzIGNvcnJ1cHRlZCBvciB0aGUgYXNzb2NpYXRlZCBtZW1vcnkgcmVnaW9ucyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgZm9yIHNvbWUgcmVhc29uLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgdXNlcyBvZiBgeHNrX3VtZW1gIGFuZCBob3cgdGhleSYjMzk7cmUgZnJlZWQgb3IgcmVsZWFzZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBhbiBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQ/IFRoaXMgd2lsbCBhbHNvIGluY2x1ZGUgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3VjaCBhcyB0aGUgYHhza19zb2NrZXRgLCBgeHNrX3VtZW1gLCBhbmQgYG5ldF9kZXZpY2VgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgaG93IHRoZXkgcHJldmVudCBkYW5nbGluZyBwb2ludGVycy4gQWxzbywgd2hlcmUgaXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgc29ja2V0IGluY3JlYXNlZC9kZWNyZWFzZWQ/IAoKRmluYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBjb25jdXJyZW5jeS4gRG9lcyBpdCBwcm9wZXJseSBhY2NvdW50IGZvciBtdWx0aXBsZSBYRFAgc29ja2V0cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBkZXZpY2U/IEkgbmVlZCB0byByZXZpZXcgYW55IGNyaXRpY2FsIHNlY3Rpb25zIGNhcmVmdWxseS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBrZXJuZWwmIzM5O3MgdW5iaW5kIHByb2Nlc3MgYW5kIGhvdyBpdCBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGVzIFhEUCBzb2NrZXRzLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NzA6XHRzdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuMTQ3MTpcdHtcbjE0NzI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xNDczOlx0XG4xNDc0Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX0JPVU5EKVxuMTQ3NTpcdFx0XHRyZXR1cm47XG4xNDc2Olx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfVU5CT1VORCk7XG4xNDc3Olx0XG4xNDc4Olx0XHQvKiBXYWl0IGZvciBkcml2ZXIgdG8gc3RvcCB1c2luZyB0aGUgeGRwIHNvY2tldC4gKi9cbjE0Nzk6XHRcdHhwX2RlbF94c2soeHMtXHUwMDNlcG9vbCwgeHMpO1xuMTQ4MDpcdFx0c3luY2hyb25pemVfbmV0KCk7XG4xNDgxOlx0XHRkZXZfcHV0KGRldik7XG4xNDgyOlx0fVxuMTQ4MzpcdFxuMTQ4NDpcdHN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuMTQ4NTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKioqbWFwX2VudHJ5KVxuMTQ4NjpcdHtcbjE0ODc6XHRcdHN0cnVjdCB4c2tfbWFwICptYXAgPSBOVUxMO1xuMTQ4ODpcdFx0c3RydWN0IHhza19tYXBfbm9kZSAqbm9kZTtcbjE0ODk6XHRcbjE0OTA6XHRcdCptYXBfZW50cnkgPSBOVUxMO1xuMTQ5MTpcdFxuMTQ5MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhzLVx1MDAzZW1hcF9saXN0X2xvY2spO1xuMTQ5MzpcdFx0bm9kZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZ4cy1cdTAwM2VtYXBfbGlzdCwgc3RydWN0IHhza19tYXBfbm9kZSxcbjE0OTQ6XHRcdFx0XHRcdFx0bm9kZSk7XG4xNDk1Olx0XHRpZiAobm9kZSkge1xuMTQ5NjpcdFx0XHRicGZfbWFwX2luYyhcdTAwMjZub2RlLVx1MDAzZW1hcC1cdTAwM2VtYXApO1xuMTQ5NzpcdFx0XHRtYXAgPSBub2RlLVx1MDAzZW1hcDtcbjE0OTg6XHRcdFx0Km1hcF9lbnRyeSA9IG5vZGUtXHUwMDNlbWFwX2VudHJ5O1xuMTQ5OTpcdFx0fVxuMTUwMDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eHMtXHUwMDNlbWFwX2xpc3RfbG9jayk7XG4xNTAxOlx0XHRyZXR1cm4gbWFwO1xuMTUwMjpcdH1cbjE1MDM6XHRcbjE1MDQ6XHRzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuMTUwNTpcdHtcbjE1MDY6XHRcdC8qIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBYRFAgc29ja2V0IGZyb20gYWxsIHRoZVxuMTUwNzpcdFx0ICogbWFwcyBpdCByZXNpZGVzIGluLiBXZSBuZWVkIHRvIHRha2UgZXh0cmEgY2FyZSBoZXJlLCBkdWUgdG9cbjE1MDg6XHRcdCAqIHRoZSB0d28gbG9ja3MgaW52b2x2ZWQuIEVhY2ggbWFwIGhhcyBhIGxvY2sgc3luY2hyb25pemluZ1xuMTUwOTpcdFx0ICogdXBkYXRlcyB0byB0aGUgZW50cmllcywgYW5kIGVhY2ggc29ja2V0IGhhcyBhIGxvY2sgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEFCQkEgRGVhZGxvY2sgaW4gQUZfWERQIFNvY2tldCBCaW5kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudHMuIEkgc2VlIGl0JiMzOTtzIGxvY2tpbmcgYHhzLSZndDttdXRleGAgYW5kIHRoZW4gY2FsbGluZyBgeHBfY2xlYXJfZGV2YCwgd2hpY2ggdGhlbiBjYWxscyBgbmV0ZGV2X2xvY2tfb3BzKG5ldGRldilgLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IHNob290cyB1cCBiZWNhdXNlIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uIHNlZW1zIHJldmVyc2VkIGNvbXBhcmVkIHRvIHdoYXQgSSYjMzk7bSBzZWVpbmcgaW4gYHhza19iaW5kYC4gSW4gYHhza19ub3RpZmllcmAgaXQmIzM5O3MgYHhzLSZndDttdXRleGAgdGhlbiBgbmV0ZGV2X2xvY2tfb3BzYCwgYnV0IHRoZSBwYXRjaCBmb3IgYHhza19iaW5kYCBzZWVtcyB0byBoYXZlIGZsaXBwZWQgaXQgdG8gYG5ldGRldl9sb2NrX29wc2AgdGhlbiBgeHMtJmd0O211dGV4YC4KClRoaXMgc2NyZWFtcyBBQkJBIGRlYWRsb2NrISBUbyBjb25maXJtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgYW5kIGxvY2tpbmcgaGVsZCB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBydW4uIEkga25vdyBgeHNrX25vdGlmaWVyYCBpcyB0cmlnZ2VyZWQgYnkgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHRoYXQgZXZlbnQgbm90aWZpY2F0aW9uIGhhcHBlbnMgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgYHJ0bmxfbG9ja2AuIGB4c2tfYmluZGAgYWxzbyBob2xkcyBgcnRubF9sb2NrYCBhdCBzb21lIHBvaW50LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgdHdvIHBvdGVudGlhbGx5IHJ1biBjb25jdXJyZW50bHk/IEV2ZW4gaWYgdGhleSBkb24mIzM5O3QsIEkga25vdyB0aGUgbG9ja2RlcCB0b29sIGluIHRoZSBrZXJuZWwgY2FuIGRldGVjdCBBQkJBIG9yZGVyIGludmVyc2lvbnMgZXZlbiBpZiBhIGNvbW1vbiBsb2NrIChsaWtlIGBydG5sX2xvY2tgKSBpcyBoZWxkLgoKVGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGFzIGl0JiMzOTtzIGRpcmVjdGx5IHRvdWNoaW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyB3aXRoaW4gYHhza19iaW5kYCwgYSBrZXkgZnVuY3Rpb24gZm9yIEFGX1hEUCBzb2NrZXRzIHdoaWNoIGFyZSBhIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGZlYXR1cmUuIEFuZCB5ZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGVudmlyb25tZW50cy4gSSBjYW4gY3JlYXRlIEFGX1hEUCBzb2NrZXRzLCBiaW5kIHRoZW0gdG8gdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgdGhhdCYjMzk7cyBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgcHJvYmxlbWF0aWMgY29kZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgZHVyaW5nIGJpbmRpbmcgYW5kIHVuYmluZGluZy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzOgoKSWYgYHhzLSZndDtzdGF0ZSAhPSBYU0tfUkVBRFlgLCBiZWZvcmUsIGBkZXZgIHdhc24mIzM5O3QgcmV0cmlldmVkLCBidXQgbm93LCBpdCByZXRyaWV2ZXMgYGRldmAgdXNpbmcgYGRldl9nZXRfYnlfaW5kZXgoKWAgYW5kIGxvY2tzIGl0IGJlZm9yZSBjaGVja2luZyBpZiBgeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWWAuIEFsc28sIG9uIGVycm9yLCBpZiBgZGV2YCB3YXMgbm90IE5VTEwsIGl0IHdpbGwgdW5sb2NrIGFuZCBgZGV2X3B1dChkZXYpYC4gQW5kIGV2ZW4gaWYgYGRldmAgaXMgTlVMTCwgaXQgaGFuZGxlcyB0aGF0IGNhc2UuCgpUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGNyaXRpY2FsIGxvY2tpbmcgbG9naWMgaW4gYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24uCmBXb3J0aEZ1enppbmcgPSB0cnVlIWAKCkkgc2hvdWxkIGNhcmVmdWxseSBhbmFseXplIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agbm93LiBJdCBtZWFucyBJJiMzOTt2ZSBnb3QgdG8gZmluZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGNoYW5nZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGlzIGB4c2tfYmluZGAgaW4gYG5ldC94ZHAveHNrLmNgLiBJcyBgeHNrX2JpbmRgIHNwZWNpZmljPyBZZXMsIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBBRl9YRFAgc29ja2V0IGJpbmQuIEl0IGlzIG5vdCB1YmlxdWl0b3VzLCB3aGljaCBpcyBnb29kIGZvciB0YXJnZXRpbmcuIEkgc2VlIGZyb20gdGhlIGNvZGUgdGhhdCBgeHNrX2JpbmRgIGlzIGNhbGxlZCBieSBgYmluZCgpYCBvbiBhbiBBRl9YRFAgc29ja2V0LiBJIHdhbnQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgZXhhbXBsZSBgeHNrX25vdGlmaWVyYCwgYW5kIGB4cF9jbGVhcl9kZXZgIGFuZCBgeHNrX2NyZWF0ZWAsIHdoaWNoIGFyZSBhbHNvIGluIGBuZXQveGRwL3hzay5jYC4KSSBrbm93IGB4c2tfYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBiZWNhdXNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgeHNrX3Byb3RvX29wcy5iaW5kYCwgSSBjYW4gYmUgcHJldHR5IHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0IGF3YXksIHNvIGl0IHNob3VsZCBzdGlsbCBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguCkkgY2FuIGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgaGF2ZSBhIHN5bWJvbCB3aGVuIGNvbXBpbGVkLgpOb3csIHdoYXQgYWJvdXQgYHhza19ub3RpZmllcmA/IFRoYXQmIzM5O3MgdGhlIG90aGVyIHBsYWNlIHdpdGggYHhzLSZndDttdXRleGAgYW5kIGBuZXRkZXZfbG9ja19vcHNgLgpXaGF0IGFib3V0IGB4cF9jbGVhcl9kZXZgPwpXaGF0IGFib3V0IGB4c2tfY3JlYXRlYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0yMTY5LVxubmV0L3hkcC94c2suYzoyMTcwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC94ZHAveHNrLmMtMjE3MS1cdFx0ICAgICAgaW50IGtlcm4pXG4tLVxubmV0L3hkcC94c2suYz0yMjE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB4c2tfZmFtaWx5X29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjIxOC1cdC5mYW1pbHkgPSBQRl9YRFAsXG5uZXQveGRwL3hzay5jOjIyMTk6XHQuY3JlYXRlID0geHNrX2NyZWF0ZSxcbm5ldC94ZHAveHNrLmMtMjIyMC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGB4c2tfYmluZGAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBjb25maXJtZWQgYnkgcmVmZXJlbmNpbmcgU2VjdGlvbiA0IG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgJiMzNDtmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLiYjMzQ7IFNvLCBpcyBgeHNrX2JpbmRgIGVub3VnaCwgb3IgYXJlIHRoZXJlIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHhza19yZWxlYXNlYCB0aGF0IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQ/IE5vLCBqdXN0IGB4c2tfYmluZGAgc2luY2UgdGhhdCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRoaXMgY29kZSB0byBldmVuIGNvbXBpbGUgYW5kIGJlIHJlYWNoYWJsZS4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBuZXQveGRwL01ha2VmaWxlYC4gQWgsIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub2AgYW5kIGB4c2tfYnVmZl9wb29sLm9gLgoKQW5kIHRoZSBjb3JyZXNwb25kaW5nIGBuZXQveGRwL0tjb25maWdgIGZpbGUgdGVsbHMgdXM6CmBgYApjb25maWcgWERQX1NPQ0tFVFMKCWJvb2wgJiMzNDtYRFAgc29ja2V0cyYjMzQ7CglkZXBlbmRzIG9uIEJQRl9TWVNDQUxMCglkZWZhdWx0IG4KCWhlbHAKCSAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmQKCSAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy4KYGBgClNvLCBgWERQX1NPQ0tFVFNgIGlzIHdoYXQgd2UgbmVlZC4gSG93ZXZlciwgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIHJpZ2h0PyBXZSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhhdCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIC0gTGluZSBieSBMaW5lKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBMZXQmIzM5O3MgZm9jdXMgb24gbGluZXMgMzAgdGhyb3VnaCA1MC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIHdpdGhpbiB0aGlzIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNodW5rIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggc3BlY2lmaWMgQlBGIGZlYXR1cmVzIG9yIHBvc3NpYmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGlzIGNvbnRleHQgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGBjb25maWdgIGtleXdvcmQsIGZvbGxvd2VkIGJ5IHRoZSBmZWF0dXJlIG5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IHR5cGUgb2Ygb3B0aW9uIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBhIGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGFsc28gY3JpdGljYWwsIHNvIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYmVpbmcgYXNzdW1lZC4gQW55IGBkZWZhdWx0YCB2YWx1ZXMgYXJlIGFsc28gb2YgaW50ZXJlc3QsIGFzIHRob3NlIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGNvbW1vbmx5LXVzZWQgb3IgaW50ZW5kZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGhlbHAgdGV4dCwgdGhhdCBpcyBwcm92aWRlZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggcHJvdmlkZXMgZnVydGhlciBpbnNpZ2h0IGludG8gdGhlIHB1cnBvc2Ugb3IgcG90ZW50aWFsIHVzZSBjYXNlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2FpbiBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiB0aGlzIGJsb2NrLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzLCBhbmQgaW50ZW5kZWQgdXNhZ2UsIHRvIHNlZSBob3cgdG8gZW5hYmxlIHRoZW0gb3IgaG93IHRoZXkgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDMyOlx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IEJQRlxuICAzNDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDM1Olx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzY6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzc6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM4Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzOTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDQwOlx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICA0MTpcdFx0ZGVmYXVsdCBuXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDQ6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEJQRl9KSVRcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA1MDpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA1MzpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTQ6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1NTpcdFx0ICBwcm9ncmFtcy5cbiAgNTY6XHRcbiAgNTc6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU4Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1OTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIGVCUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gYEJQRl9TWVNDQUxMYCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCBhcyBmYXIgYXMgZGVwZW5kZW5jaWVzIGdvLiBJdCBkb2VzbiYjMzk7dCByZWx5IG9uIGFueXRoaW5nIGVsc2UgYmVpbmcgZW5hYmxlZCwgb3RoZXIgdGhhbiwgd2VsbCwgYmVpbmcgc2VsZWN0ZWQgZnJvbSB3aXRoaW4gdGhlIG1lbnVjb25maWcuIE5vdywgYFhEUF9TT0NLRVRTYCwgb24gdGhlIG90aGVyIGhhbmQsICpkb2VzKiBkZXBlbmQgb24gYEJQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBidWlsZCB0aGUgWERQIHNvY2tldCBmdW5jdGlvbmFsaXR5LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGdvdGNoYXMsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgWERQIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVybmFsIGAjaWZkZWZgIGJsb2NrcyBvciBhbnkgb3RoZXIgc3VidGxlIHJlcXVpcmVtZW50cyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBObyBzdXJwcmlzZXMsIHBsZWFzZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTEzMTk9c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzMjAte1xubmV0L3hkcC94c2suYzoxMzIxOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxubmV0L3hkcC94c2suYy0xMzIyLVx0LyogUHJlZmVyIGJ1c3ktcG9sbGluZywgc2tpcCB0aGUgd2FrZXVwLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU1MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYU0sgQ29tcGlsYXRpb24gQ29uY2VybnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gYXNwZWN0IG9mIFhEUCBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEZpcnN0LCBJIGNoZWNrZWQgaW5zaWRlIGBuZXQveGRwL3hzay5jYCBkaXJlY3RseS4gVGhlIG9ubHkgYCNpZmRlZmAgSSBmb3VuZCB3YXMgZm9yIGBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTGAsIHdoaWNoIGlzIGNsZWFybHkgbm90IHJlbGV2YW50IHRvIGB4c2tfYmluZGAuIFRoYXQmIzM5O3MgYSByZWQgaGVycmluZy4gTm93LCB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIC0gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaGFwcGVucy4KCkxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9gIGFuZCwgY3J1Y2lhbGx5LCBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vYC4gVGhpcyBwb2ludHMgdG8gdGhlIG1vZHVsZXMgdGhhdCBhcmUgcHVsbGVkIGluIHdoZW4gWERQIHNvY2tldHMgYXJlIGVuYWJsZWQgdmlhIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBgbmV0L3hkcC9gIGl0c2VsZiBpcyBpbmNsdWRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNsdXNpb24gcGF0aCBiYWNrLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGF0IGRpcmVjdG9yeSBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrIGJ1aWxkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGRlcGVuZGVuY3kgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9NzI9b2JqLSQoQ09ORklHX05FVF9OQ1NJKVx0XHQmIzQzOz0gbmNzaS9cbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXHQmIzQzOz0geGRwL1xubmV0L01ha2VmaWxlLTc0LW9iai0kKENPTkZJR19NUFRDUClcdFx0JiM0Mzs9IG1wdGNwL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA4NwoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFNvY2tldCBCaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYG5ldC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgWERQIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uczogJiMzNDtYRFBfU09DS0VUUyYjMzQ7IGFuZCAmIzM0O0JQRl9TWVNDQUxMJiMzNDsuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBsb2NraW5nIG9yZGVyIHdpdGhpbiBgeHNrX2JpbmQoKWAuIFByZXZpb3VzbHksIHRoZSBtdXRleCBgeHMtJmd0O211dGV4YCB3YXMgbG9ja2VkICpiZWZvcmUqIHRoZSBuZXR3b3JrIGRldmljZSBsb2NrLCBhbmQgbm93IGl0JiMzOTtzIHJldmVyc2VkLCBhbmQgdGhlcmUgYXJlIHNvbWUgZGV2aWNlIGxvb2t1cCBjaGFuZ2VzIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zLiBJbnRlcmVzdGluZy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IHBsYWNlIHRvIGJlIGNhcmVmdWwuCgpSaWdodCwgQUZfWERQIHNvY2tldHMgYXJlIGNyZWF0ZWQgaW4gdXNlcnNwYWNlIHVzaW5nIHRoZSBzdGFuZGFyZCBgc29ja2V0KEFGX1hEUCwgLi4uKWAgYW5kIGBiaW5kKClgIGNhbGxzLiBUaGlzIGlzICplYXNpbHkqIHJlYWNoYWJsZSwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIG1lYW5zIGEgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGVhc2lseSBiZSBleHBsb2l0ZWQuCgpHaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGxvY2sgb3JkZXIgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgb2J2aW91c2x5LCBgeHNrX2JpbmRgLiBBbmQsIHdlIG5lZWQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXHUwMDNlbXV0ZXgsIHJlc29sdmluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLCBhbmQgdXBkYXRlcyB0aGUgY2xlYW51cCBwYXRoIChuZXRkZXZfdW5sb2NrX29wcyBhbmQgZGV2X3B1dCkuIFRoZSBwYXRjaCBzdHJpY3RseSBhbHRlcnMgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljOyBpdCBkb2VzIG5vdCB0b3VjaCBhbnkgZGF0YSBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbG9ja2luZyBoaWVyYXJjaGllcyBvciBvYmplY3QgbGlmZXRpbWVzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjBhNDEwNmU5OGJjYWEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMTYxMiwyMCAmIzQzOzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKIAlpZiAoeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKLQluZXRkZXZfbG9ja19vcHMoZGV2KTsKLQogCWlmICgheHMtJmd0O3J4ICZhbXA7JmFtcDsgIXhzLSZndDt0eCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNzYyLDE4ICYjNDM7MTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCX0KIAogb3V0X3VubG9jazoKLQlpZiAoZXJyKSB7Ci0JCWRldl9wdXQoZGV2KTsKLQl9IGVsc2UgewomIzQzOwlpZiAoIWVycikgewogCQkvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtCiAJCSAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS4KIAkJICovCiAJCXNtcF93bWIoKTsKIAkJV1JJVEVfT05DRSh4cy0mZ3Q7c3RhdGUsIFhTS19CT1VORCk7CiAJfQotCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiBvdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwomIzQzOwlpZiAoZGV2KSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CX0KIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgeHNrX2JpbmQoKWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGB4c2tfYmluZCgpYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBwcm9wZXIgdmlldyBvZiB0aGUgY29kZSBpbiBjb250ZXh0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDU6XHRcdGZsYWdzID0gc3hkcC1cdTAwM2VzeGRwX2ZsYWdzO1xuMTYwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcbjE2MDc6XHRcdFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxuMTYwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDk6XHRcbjE2MTA6XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuMTYxMTpcdFx0aWYgKGJvdW5kX2Rldl9pZiBcdTAwMjZcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KVxuMTYxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJ0bmxfbG9jaygpO1xuMTYxNTpcdFxuMTYxNjpcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbjE2MTc6XHRcdGlmIChkZXYpXG4xNjE4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuMTYxOTpcdFxuMTYyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xNjIxOlx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4xNjIyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjE2MjM6XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbjE2MjQ6XHRcdH1cbjE2MjU6XHRcbjE2MjY6XHRcdGlmICghZGV2KSB7XG4xNjI3Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4xNjI4Olx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRpZiAoIXhzLVx1MDAzZXJ4IFx1MDAyNlx1MDAyNiAheHMtXHUwMDNldHgpIHtcbjE2MzI6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2MzM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0cWlkID0gc3hkcC1cdTAwM2VzeGRwX3F1ZXVlX2lkO1xuMTYzNzpcdFxuMTYzODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBYRFBfU0hBUkVEX1VNRU0pIHtcbjE2Mzk6XHRcdFx0c3RydWN0IHhkcF9zb2NrICp1bWVtX3hzO1xuMTY0MDpcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTY0MTpcdFxuMTY0MjpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBYRFBfQ09QWSkgfHwgKGZsYWdzIFx1MDAyNiBYRFBfWkVST0NPUFkpIHx8XG4xNjQzOlx0XHRcdCAgICAoZmxhZ3MgXHUwMDI2IFhEUF9VU0VfTkVFRF9XQUtFVVApIHx8IChmbGFncyBcdTAwMjYgWERQX1VTRV9TRykpIHtcbjE2NDQ6XHRcdFx0XHQvKiBDYW5ub3Qgc3BlY2lmeSBmbGFncyBmb3Igc2hhcmVkIHNvY2tldHMuICovXG4xNjQ1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NDY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjQ3Olx0XHRcdH1cbjE2NDg6XHRcbjE2NDk6XHRcdFx0aWYgKHhzLVx1MDAzZXVtZW0pIHtcbjE2NTA6XHRcdFx0XHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cbjE2NTE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTY1MjpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE2NTM6XHRcdFx0fVxuMTY1NDpcdFxuMTY1NTpcdFx0XHRzb2NrID0geHNrX2xvb2t1cF94c2tfZnJvbV9mZChzeGRwLVx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xuMTY1NjpcdFx0XHRpZiAoSVNfRVJSKHNvY2spKSB7XG4xNjU3Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcbjE2NTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjU5Olx0XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVx1MDAzZXNrKTtcbjE2NjI6XHRcdFx0aWYgKCF4c2tfaXNfYm91bmQodW1lbV94cykpIHtcbjE2NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG4xNjY0Olx0XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjY2Olx0XHRcdH1cbjE2Njc6XHRcbjE2Njg6XHRcdFx0aWYgKHVtZW1feHMtXHUwMDNlcXVldWVfaWQgIT0gcWlkIHx8IHVtZW1feHMtXHUwMDNlZGV2ICE9IGRldikge1xuMTY2OTpcdFx0XHRcdC8qIE9uZSBmaWxsIGFuZCBjb21wbGV0aW9uIHJpbmcgcmVxdWlyZWQgZm9yIGVhY2ggcXVldWUgaWQuICovXG4xNjcwOlx0XHRcdFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xuMTY3MTpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NzI6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjczOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjc0Olx0XHRcdFx0fVxuMTY3NTpcdFxuMTY3NjpcdFx0XHRcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcbjE2Nzc6XHRcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuMTY3ODpcdFx0XHRcdCAqL1xuMTY3OTpcdFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuMTY4MDpcdFx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4xNjgxOlx0XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuMTY4MjpcdFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuMTY4MzpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2ODQ6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjg1Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjg2Olx0XHRcdFx0fVxuMTY4NzpcdFxuMTY4ODpcdFx0XHRcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVx1MDAzZXBvb2wsIHVtZW1feHMsIGRldixcbjE2ODk6XHRcdFx0XHRcdFx0XHQgICBxaWQpO1xuMTY5MDpcdFx0XHRcdGlmIChlcnIpIHtcbjE2OTE6XHRcdFx0XHRcdHhwX2Rlc3Ryb3koeHMtXHUwMDNlcG9vbCk7XG4xNjkyOlx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbjE2OTM6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjk0Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjk1Olx0XHRcdFx0fVxuMTY5NjpcdFx0XHR9IGVsc2Uge1xuMTY5NzpcdFx0XHRcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXG4xNjk4Olx0XHRcdFx0aWYgKHhzLVx1MDAzZWZxX3RtcCB8fCB4cy1cdTAwM2VjcV90bXApIHtcbjE2OTk6XHRcdFx0XHRcdC8qIERvIG5vdCBhbGxvdyBzZXR0aW5nIHlvdXIgb3duIGZxIG9yIGNxLiAqL1xuMTcwMDpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MDE6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNzAyOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNzAzOlx0XHRcdFx0fVxuMTcwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgeHNrX2JpbmRgKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIGB4c2tfYmluZGAgYXJvdW5kIGxpbmUgMTc1MC0xNzg1LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21lIGNydWNpYWwgbG9naWMgaW4gdGhlcmUgdGhhdCBJJiMzOTttIG1pc3NpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBub3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdGhhdCBnb3Zlcm5zIHRoZSBiaW5kaW5nIHByb2Nlc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwsIHRvIHNlZSB3aGF0IGlzc3VlcyBhcmUgYW50aWNpcGF0ZWQgYW5kIGhvdyB0aGV5IGFyZSBhZGRyZXNzZWQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHRcdHhzLVx1MDAzZWNxX3RtcCA9IE5VTEw7XG4xNzUxOlx0XG4xNzUyOlx0XHR4cy1cdTAwM2VkZXYgPSBkZXY7XG4xNzUzOlx0XHR4cy1cdTAwM2V6YyA9IHhzLVx1MDAzZXVtZW0tXHUwMDNlemM7XG4xNzU0Olx0XHR4cy1cdTAwM2VzZyA9ICEhKHhzLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xuMTc1NTpcdFx0eHMtXHUwMDNlcXVldWVfaWQgPSBxaWQ7XG4xNzU2Olx0XHR4cF9hZGRfeHNrKHhzLVx1MDAzZXBvb2wsIHhzKTtcbjE3NTc6XHRcbjE3NTg6XHRcdGlmIChxaWQgXHUwMDNjIGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbjE3NTk6XHRcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuMTc2MDpcdFxuMTc2MTpcdFx0XHRyeHEgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIHFpZCk7XG4xNzYyOlx0XHRcdGlmIChyeHEtXHUwMDNlbmFwaSlcbjE3NjM6XHRcdFx0XHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXHUwMDNlbmFwaS1cdTAwM2VuYXBpX2lkKTtcbjE3NjQ6XHRcdH1cbjE3NjU6XHRcbjE3NjY6XHRvdXRfdW5sb2NrOlxuMTc2NzpcdFx0aWYgKCFlcnIpIHtcbjE3Njg6XHRcdFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxuMTc2OTpcdFx0XHQgKiBzb2NrZXRzLCBhbmQgeHNrX2lzX2JvdW5kKCkuXG4xNzcwOlx0XHRcdCAqL1xuMTc3MTpcdFx0XHRzbXBfd21iKCk7XG4xNzcyOlx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG4xNzczOlx0XHR9XG4xNzc0Olx0b3V0X3JlbGVhc2U6XG4xNzc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMTc3NjpcdFx0aWYgKGRldikge1xuMTc3NzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMTc3ODpcdFx0XHRpZiAoZXJyKVxuMTc3OTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3ODA6XHRcdH1cbjE3ODE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xNzgyOlx0XHRyZXR1cm4gZXJyO1xuMTc4MzpcdH1cbjE3ODQ6XHRcbjE3ODU6XHRzdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbjE3ODY6XHRcdF9fdTY0IGFkZHI7IC8qIFN0YXJ0IG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODc6XHRcdF9fdTY0IGxlbjsgLyogTGVuZ3RoIG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODg6XHRcdF9fdTMyIGNodW5rX3NpemU7XG4xNzg5Olx0XHRfX3UzMiBoZWFkcm9vbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBCaW5kIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB4c2suY2AgZGlmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlIHdpdGhpbiB0aGUgWFNLIChlWHByZXNzIERhdGEgUGF0aCBTb2NrZXRzKSBiaW5kaW5nIHByb2Nlc3MuIFRoZSBvbGQgb3JkZXIgb2YgbG9ja2luZyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNyZWF0ZSBhIGxvY2sgaW52ZXJzaW9uIHNjZW5hcmlvLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgZGV2YCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGxvY2tpbmcgYHhzLSZndDttdXRleGAuIFByZXZpb3VzbHksIHRoZSBsb2NrIG9yZGVyIHdhcyBgcnRubF9sb2NrYCwgYHhzLSZndDttdXRleGAsIGFuZCAqdGhlbiogdGhlIGBuZXRkZXZgIGxvY2suIE5vdywgdGhlIGBuZXRkZXZgIGxvY2sgaXMgYWNxdWlyZWQgKmJlZm9yZSogYHhzLSZndDttdXRleGAgYW5kIHVubG9ja2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLgoKU28sIHRoZSBwcmV2aW91cyBjb2RlIGhhZCBhIGNyaXRpY2FsIHNlY3Rpb24gd2hlcmUgYm90aCBgeHMtJmd0O211dGV4YCBhbmQgdGhlIGBuZXRkZXZgIGxvY2sgd2VyZSBoZWxkIHNpbXVsdGFuZW91c2x5LCB3aXRoIHRoZSBuZXRkZXYgbG9jayBhY3F1aXJlZCBhZnRlciB4cy0mZ3Q7bXV0ZXguCgpUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGF0dGVtcHQgdG8gcHJldmVudCBhIGRlYWRsb2NrLCByaWdodD8gVGhlIGdvYWwgaGVyZSBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIHRoZSBsb2NraW5nIGhpZXJhcmNoeSB0byBhdm9pZCB0aGF0IGludmVyc2lvbiwgaS5lLiwgcHJldmVudCBhIHNpdHVhdGlvbiB3aGVyZSB0d28gdGhyZWFkcyBhcmUgZWFjaCB3YWl0aW5nIGZvciBhIGxvY2sgaGVsZCBieSB0aGUgb3RoZXIsIGFuZCB0aHVzIGJsb2NraW5nIGluZGVmaW5pdGVseS4gVGhlIG5ldyBvcmRlciBpcyBkZXNpZ25lZCB0byBiZSBtb3JlIHJvYnVzdC4gSWYgaXQgd2FzIGludHJvZHVjZWQgdGhpcyB3YXksIHRoZW4gdGhlIGxvY2sgb3JkZXIgaXM6CgoxLiBgcnRubF9sb2NrYAoyLiBgZGV2ID0gZGV2X2dldF9ieV9pbmRleCguLi4pYAozLiBgbmV0ZGV2X2xvY2tfb3BzKGRldilgCjQuIGBtdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KWAKCndoaWNoIGxvb2tzIG11Y2ggYmV0dGVyLgoKTm93IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSBvciBsb29rIGF0IHJlbGF0ZWQgcGF0Y2hlcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHJlbGF0ZWQgaXNzdWVzIHRvIGdldCB0aGUgY29udGV4dCBiZWhpbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIGFuZCAqY29uZmlybSogaXQgd2FzIGluZGVlZCBhIGRlYWRsb2NrIGZpeC4gUHJvYmFibHkgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRjaCBpbiB0aGUgaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgb25lLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgY29tbWl0IHdoaWNoIGFkZHJlc3NlcyB0aGUgbG9jayBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTE2MTctXHRpZiAoZGV2KVxubmV0L3hkcC94c2suYzoxNjE4Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC94ZHAveHNrLmMtMTYxOS1cbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjk2LVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3Olx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTgtXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTG9ja2luZyBpbiBYRFAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgWERQIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB4cy0mZ3Q7bXV0ZXhgIG9yIGBuZXRkZXZfbG9ja19vcHNgLiBIbW0sIGxldCYjMzk7cyBzZWUuLi4gKmFoYSEqIEluIGB4cF9jbGVhcl9kZXZgLCB3aGljaCBJIGJlbGlldmUgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIG9yIHJlc2V0dGluZyBhIG5ldHdvcmsgZGV2aWNlLiBJIGtub3cgdGhhdCB0aGUgZnVuY3Rpb24gYHhwX2NsZWFyX2RldmAgYWNxdWlyZXMgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgcHJvYmFibHkgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCYjMzk7cyBhbHNvIGxvY2tpbmcgdGhlIGB4c2tfYnVmZl9wb29sYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvdGVjdGluZyBzaGFyZWQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIFhEUCBzb2NrZXRzLiBSaWdodCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBsb29rIGF0IGhvdyBgeHBfY2xlYXJfZGV2YCBkb2VzIHRoaXMsIHNvIGxldCBtZSBvcGVuIHVwIGBuZXQveGRwL3hza19idWZmX3Bvb2wuY2AgYW5kIHRha2UgYSBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgbG9ja3Mgd2l0aCB0aGVpciByZXNwZWN0aXZlIGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiB4cF9hc3NpZ25fZGV2KHBvb2wsIGRldiwgcXVldWVfaWQsIGZsYWdzKTtcbiAyODg6XHR9XG4gMjg5Olx0XG4gMjkwOlx0dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBvb2wtXHUwMDNlbmV0ZGV2O1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKCFwb29sLVx1MDAzZW5ldGRldilcbiAyOTU6XHRcdFx0cmV0dXJuO1xuIDI5NjpcdFxuIDI5NzpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMjk4Olx0XHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiAyOTk6XHRcdHhza19jbGVhcl9wb29sX2F0X3FpZChwb29sLVx1MDAzZW5ldGRldiwgcG9vbC1cdTAwM2VxdWV1ZV9pZCk7XG4gMzAwOlx0XHRwb29sLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gMzAxOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDMwMjpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCB4cF9yZWxlYXNlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCxcbiAzMDg6XHRcdFx0XHRcdFx0XHQgIHdvcmspO1xuIDMwOTpcdFxuIDMxMDpcdFx0cnRubF9sb2NrKCk7XG4gMzExOlx0XHR4cF9jbGVhcl9kZXYocG9vbCk7XG4gMzEyOlx0XHRydG5sX3VubG9jaygpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHBvb2wtXHUwMDNlZnEpIHtcbiAzMTU6XHRcdFx0eHNrcV9kZXN0cm95KHBvb2wtXHUwMDNlZnEpO1xuIDMxNjpcdFx0XHRwb29sLVx1MDAzZWZxID0gTlVMTDtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChwb29sLVx1MDAzZWNxKSB7XG4gMzIwOlx0XHRcdHhza3FfZGVzdHJveShwb29sLVx1MDAzZWNxKTtcbiAzMjE6XHRcdFx0cG9vbC1cdTAwM2VjcSA9IE5VTEw7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHR4ZHBfcHV0X3VtZW0ocG9vbC1cdTAwM2V1bWVtLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NrIE9yZGVyaW5nIGFuZCBDbGVhbnVwIGluIGB4c2tfYmluZCgpYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQgb24gbG9jayBvcmRlcmluZyBhbmQgY2xlYW51cCB3aXRoaW4gdGhlIGB4c2tfYmluZCgpYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdmVyaWZpY2F0aW9uOiBkb2VzIHRoaXMgZnVuY3Rpb24gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IGNvcHkgYW55dGhpbmcgc2Vuc2l0aXZlIHRvIHVzZXJzcGFjZT8gTG9va3MgbGlrZSBhIGdvb2Qgc3RhcnQgYXMgaXQmIzM5O3MganVzdCBhIHN0YW5kYXJkIGBiaW5kKClgIHNvY2tldCBvcGVyYXRpb24uCgpTbywgdGhpcyBgeHNrX2JpbmQoKWAgZnVuY3Rpb24sIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilgLCB0YWtlcyB0aGUgYGFkZHJgIGFuZCBgYWRkcl9sZW5gIGFzIGlucHV0cy4gSXTigJlzIGFsbCBhYm91dCBzYW5pdHkgY2hlY2tzIGFuZCBsb2NrIGFjcXVpc2l0aW9uOiBgcnRubF9sb2NrKClgLCB0aGVuIGl0IGdyYWJzIHRoZSBkZXZpY2UgdXNpbmcgYGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLSZndDtzeGRwX2lmaW5kZXgpYCwgc3Vic2VxdWVudGx5IGxvY2tpbmcgaXQgd2l0aCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBXZSBhbHNvIGhhdmUgYG11dGV4X2xvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpYC4KClRoZW4gdGhlIGNvcmUgbG9naWMuIElmIHRoZSBYU0sgc3RhdGUgaXNuJiMzOTt0IHJlYWR5LCB3ZSBnZXQgLUVCVVNZIGFuZCBqdW1wIG91dC4gTm8gZGV2aWNlPyAtRU5PREVWIGFuZCBqdW1wIG91dC4gTm8gUlggb3IgVFggcXVldWVzPyAtRUlOVkFMIGFuZCBqdW1wIG91dC4gT3RoZXJ3aXNlLCBpdCBzZXRzIHVwIHRoZSBxdWV1ZXMsIHBvb2wsIGFuZCBzbyBvbi4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgcmVsZWFzZSBwYXRoLiBJZiBubyBlcnJvciBvY2N1cnJlZCwgYFdSSVRFX09OQ0UoeHMtJmd0O3N0YXRlLCBYU0tfQk9VTkQpYC4gVGhlIHVubG9jayBzZXF1ZW5jZSBpcyBjcml0aWNhbCBoZXJlOiBgbXV0ZXhfdW5sb2NrKCZhbXA7eHMtJmd0O211dGV4KWAsIHRoZW4gY29uZGl0aW9uYWxseSB1bmxvY2sgdGhlIGRldmljZSB3aXRoIGBuZXRkZXZfdW5sb2NrX29wcyhkZXYpYCBhbmQgcHV0IHRoZSBkZXZpY2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIEZpbmFsbHksIGBydG5sX3VubG9jaygpYCBhbmQgdGhlIHJldHVybi4KCk5vdywgdGhlIGltcG9ydGFudCBjaGVjay4gVGhlIGBkZXZgIGhhbmRsaW5nLi4uIGBkZXZgIGlzIGluaXRpYWxseSBgTlVMTGA/IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBkZXZgIGlzIGJlaW5nIGhhbmRsZWQsIHNvIEkmIzM5O20gaGVhZGluZyB0byBgbmV0L3hkcC94c2suY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNTkwLTE2MTUsIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGxvY2tzIGFyZSBiZWluZyByZWxlYXNlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTkwOlx0c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuMTU5MTpcdHtcbjE1OTI6XHRcdHN0cnVjdCBzb2NrYWRkcl94ZHAgKnN4ZHAgPSAoc3RydWN0IHNvY2thZGRyX3hkcCAqKWFkZHI7XG4xNTkzOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuMTU5NDpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XG4xNTk1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMTU5NjpcdFx0aW50IGJvdW5kX2Rldl9pZjtcbjE1OTc6XHRcdHUzMiBmbGFncywgcWlkO1xuMTU5ODpcdFx0aW50IGVyciA9IDA7XG4xNTk5Olx0XG4xNjAwOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfeGRwKSlcbjE2MDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjAyOlx0XHRpZiAoc3hkcC1cdTAwM2VzeGRwX2ZhbWlseSAhPSBBRl9YRFApXG4xNjAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwNDpcdFxuMTYwNTpcdFx0ZmxhZ3MgPSBzeGRwLVx1MDAzZXN4ZHBfZmxhZ3M7XG4xNjA2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IH4oWERQX1NIQVJFRF9VTUVNIHwgWERQX0NPUFkgfCBYRFBfWkVST0NPUFkgfFxuMTYwNzpcdFx0XHQgICAgICBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1VTRV9TRykpXG4xNjA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwOTpcdFxuMTYxMDpcdFx0Ym91bmRfZGV2X2lmID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4xNjExOlx0XHRpZiAoYm91bmRfZGV2X2lmIFx1MDAyNlx1MDAyNiBib3VuZF9kZXZfaWYgIT0gc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpXG4xNjEyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYxMzpcdFxuMTYxNDpcdFx0cnRubF9sb2NrKCk7XG4xNjE1Olx0XG4xNjE2Olx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuMTYxNzpcdFx0aWYgKGRldilcbjE2MTg6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4xNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NzYKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBTZXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBhbmQgdGhlIGtleSBsaW5lcy4gQXQgbGluZSAxNTk1LCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtgIGlzIGluZGVlZCB1bmluaXRpYWxpemVkLCBidXQgbGluZSAxNjE2IGFzc2lnbnMgaXQgaW1tZWRpYXRlbHkgdmlhIGBkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KC4uLilgLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUgYW55IHVzZS4gVGhpcyBpcyBjcnVjaWFsOyB0aGUgY29kZSBlc3RhYmxpc2hlcyBgZGV2YCBiZWZvcmUgYW55IHJlYWRzIG9yIGJyYW5jaGVzIHRoYXQgd291bGQgcmVseSBvbiBpdHMgaW5pdGlhbCBzdGF0ZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyLiBTcGVjaWZpY2FsbHksIHRoZSBvcmRlciBvZiBhY3F1aXJpbmcgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBhbmQgYHhzLSZndDttdXRleGAgaXMgbW9kaWZpZWQgZHVyaW5nIHRoZSBBRl9YRFAgc29ja2V0IGJpbmQgcHJvY2Vzcy4gVGhlIGNvZGUgdGhlbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIGVuc3VyZXMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBwcm9wZXJseS4gVGhlIG9yaWdpbmFsIHBhdGNoIGxvZ2ljIHRoZW4gZXhlY3V0ZXMgY2hlY2tzIGFuZCByZWxlYXNlcyB0aGUgcmVzb3VyY2VzIGF0IGBvdXRfcmVsZWFzZWAuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyAqbm90KiB0aGUgZ28tdG8gdG9vbCBmb3IgbG9jayBvcmRlciBpc3N1ZXMsIGRlYWRsb2NrcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaG9zZSBhcmUgaGFuZGxlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMuCgpOb3csIGxldCYjMzk7cyBtYXAgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dDoKCjEuICBUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGFyZSBpbnZvbHZlZC4KMi4gIEludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgZGV2YCBpcyBpbml0aWFsaXplZCByaWdodCBhd2F5LgozLiAgQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICBJbnRyb2R1Y2UgYW55IG5ldyBib3VuZHMgY2hlY2sgb3IgbGVuZ3RoIGxvZ2ljIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBieXRlcyB0byBiZSByZWFkIGZyb20gZXhpc3RpbmcgYnVmZmVycy4KClRoaXMgaXMgYSByZW9yZGVyaW5nIG9mIGxvY2tzIHRvIHByZXZlbnQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBleGl0IHBhdGgsIGJ1dCB0aGlzIGlzIGhhbmRsZWQgYnkgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGFuZCBgZGV2X3B1dChkZXYpYC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIGRhdGEgcGF0aCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbnkgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBkZWFkbG9ja3MsIG9yIHJlZmVyZW5jZSBjb3VudCBidWdzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LiBNeSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXHUwMDNlbXV0ZXgsIHJlc29sdmluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLCBhbmQgdXBkYXRlcyB0aGUgY2xlYW51cCBwYXRoIChuZXRkZXZfdW5sb2NrX29wcyBhbmQgZGV2X3B1dCkuIFRoZSBwYXRjaCBzdHJpY3RseSBhbHRlcnMgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljOyBpdCBkb2VzIG5vdCB0b3VjaCBhbnkgZGF0YSBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbG9ja2luZyBoaWVyYXJjaGllcyBvciBvYmplY3QgbGlmZXRpbWVzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVx1MDAzZW11dGV4LCByZXNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jaywgYW5kIHVwZGF0ZXMgdGhlIGNsZWFudXAgcGF0aCAobmV0ZGV2X3VubG9ja19vcHMgYW5kIGRldl9wdXQpLiBUaGUgcGF0Y2ggc3RyaWN0bHkgYWx0ZXJzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYzsgaXQgZG9lcyBub3QgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGxvY2tpbmcgaGllcmFyY2hpZXMgb3Igb2JqZWN0IGxpZmV0aW1lcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAwLjg1MDEzNzM4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTU1MzcxNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXFx1MDAzZW11dGV4LCByZXNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jaywgYW5kIHVwZGF0ZXMgdGhlIGNsZWFudXAgcGF0aCAobmV0ZGV2X3VubG9ja19vcHMgYW5kIGRldl9wdXQpLiBUaGUgcGF0Y2ggc3RyaWN0bHkgYWx0ZXJzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYzsgaXQgZG9lcyBub3QgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGxvY2tpbmcgaGllcmFyY2hpZXMgb3Igb2JqZWN0IGxpZmV0aW1lcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTowMC44NTAxNDMzODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjA3ODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6MDU6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4wYTQxMDZlOThiY2FhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTE2MTIsMjAgKzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbitcXHRpZiAoZGV2KVxcbitcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuIFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuIFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gXFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleCk7XFxuIFxcdGlmICghZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbi1cXG4gXFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE3NjIsMTggKzE3NjQsMjAgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0fVxcbiBcXG4gb3V0X3VubG9jazpcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfcHV0KGRldik7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghZXJyKSB7XFxuIFxcdFxcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cXG4gXFx0XFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c21wX3dtYigpO1xcbiBcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcXG4gXFx0fVxcbi1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiBvdXRfcmVsZWFzZTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbitcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4rXFx0fVxcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAxLjQ2Mjg5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNzEwNzQ1MDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXFx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTIyZDBhNzRlMGY3MGU4YTE1NTI3MDc0OTVlYzY2YzY5YTgyMTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6MDU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMGE0MTA2ZTk4YmNhYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbisrKyBiL25ldC94ZHAveHNrLmNcbkBAIC0xNjEyLDIwICsxNjEyLDIyIEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4rXG4rXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuK1x0aWYgKGRldilcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbiBcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0fVxuIFxuLVx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbiBcdGlmICghZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbi1cbiBcdGlmICgheHMtXHUwMDNlcnggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2V0eCkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTc2MiwxOCArMTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0fVxuIFxuIG91dF91bmxvY2s6XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9wdXQoZGV2KTtcbi1cdH0gZWxzZSB7XG4rXHRpZiAoIWVycikge1xuIFx0XHQvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtXG4gXHRcdCAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS5cbiBcdFx0ICovXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcbiBcdH1cbi1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4gb3V0X3JlbGVhc2U6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuK1x0aWYgKGRldikge1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGRldl9wdXQoZGV2KTtcbitcdH1cbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAxLjQ2Mjg5MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzcwNDkzMDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBCaW5kIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHRydXN0eSBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCB0byBnZXQgYSBnb29kLCBjb250ZXh0dWFsIG92ZXJ2aWV3LiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgYW5kIHdoeS4gSXQncyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjI5LjE2NzgyNTk0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfeGRwKSlcXG4xNjAxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDI6XFx0XFx0aWYgKHN4ZHAtXFx1MDAzZXN4ZHBfZmFtaWx5ICE9IEFGX1hEUClcXG4xNjAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRmbGFncyA9IHN4ZHAtXFx1MDAzZXN4ZHBfZmxhZ3M7XFxuMTYwNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcXG4xNjA3OlxcdFxcdFxcdCAgICAgIFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfVVNFX1NHKSlcXG4xNjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDk6XFx0XFxuMTYxMDpcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuMTYxMTpcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2IGJvdW5kX2Rldl9pZiAhPSBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpXFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbjE2MTc6XFx0XFx0aWYgKGRldilcXG4xNjE4OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE2MjE6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4xNjIyOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNjIzOlxcdFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuMTYyNDpcXHRcXHR9XFxuMTYyNTpcXHRcXG4xNjI2OlxcdFxcdGlmICghZGV2KSB7XFxuMTYyNzpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4xNjI5OlxcdFxcdH1cXG4xNjMwOlxcdFxcbjE2MzE6XFx0XFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbjE2MzI6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjM0OlxcdFxcdH1cXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0cWlkID0gc3hkcC1cXHUwMDNlc3hkcF9xdWV1ZV9pZDtcXG4xNjM3OlxcdFxcbjE2Mzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgWERQX1NIQVJFRF9VTUVNKSB7XFxuMTYzOTpcXHRcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHM7XFxuMTY0MDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbjE2NDE6XFx0XFxuMTY0MjpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgWERQX0NPUFkpIHx8IChmbGFncyBcXHUwMDI2IFhEUF9aRVJPQ09QWSkgfHxcXG4xNjQzOlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX05FRURfV0FLRVVQKSB8fCAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX1NHKSkge1xcbjE2NDQ6XFx0XFx0XFx0XFx0LyogQ2Fubm90IHNwZWNpZnkgZmxhZ3MgZm9yIHNoYXJlZCBzb2NrZXRzLiAqL1xcbjE2NDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjQ3OlxcdFxcdFxcdH1cXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0aWYgKHhzLVxcdTAwM2V1bWVtKSB7XFxuMTY1MDpcXHRcXHRcXHRcXHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cXG4xNjUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTY1MjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY1MzpcXHRcXHRcXHR9XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdFxcdHNvY2sgPSB4c2tfbG9va3VwX3hza19mcm9tX2ZkKHN4ZHAtXFx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xcbjE2NTY6XFx0XFx0XFx0aWYgKElTX0VSUihzb2NrKSkge1xcbjE2NTc6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcXG4xNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjU5OlxcdFxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0XFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVxcdTAwM2Vzayk7XFxuMTY2MjpcXHRcXHRcXHRpZiAoIXhza19pc19ib3VuZCh1bWVtX3hzKSkge1xcbjE2NjM6XFx0XFx0XFx0XFx0ZXJyID0gLUVCQURGO1xcbjE2NjQ6XFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG4xNjY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjY2OlxcdFxcdFxcdH1cXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0XFx0aWYgKHVtZW1feHMtXFx1MDAzZXF1ZXVlX2lkICE9IHFpZCB8fCB1bWVtX3hzLVxcdTAwM2VkZXYgIT0gZGV2KSB7XFxuMTY2OTpcXHRcXHRcXHRcXHQvKiBPbmUgZmlsbCBhbmQgY29tcGxldGlvbiByaW5nIHJlcXVpcmVkIGZvciBlYWNoIHF1ZXVlIGlkLiAqL1xcbjE2NzA6XFx0XFx0XFx0XFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xcbjE2NzE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjcyOlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY3NDpcXHRcXHRcXHRcXHR9XFxuMTY3NTpcXHRcXG4xNjc2OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcXG4xNjc3OlxcdFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuMTY3ODpcXHRcXHRcXHRcXHQgKi9cXG4xNjc5OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcXG4xNjgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4xNjgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbjE2ODI6XFx0XFx0XFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbjE2ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNjg0OlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdFxcdFxcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVxcdTAwM2Vwb29sLCB1bWVtX3hzLCBkZXYsXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxaWQpO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjE2OTE6XFx0XFx0XFx0XFx0XFx0eHBfZGVzdHJveSh4cy1cXHUwMDNlcG9vbCk7XFxuMTY5MjpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuMTY5MzpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE2OTU6XFx0XFx0XFx0XFx0fVxcbjE2OTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xNjk3OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXFxuMTY5ODpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWZxX3RtcCB8fCB4cy1cXHUwMDNlY3FfdG1wKSB7XFxuMTY5OTpcXHRcXHRcXHRcXHRcXHQvKiBEbyBub3QgYWxsb3cgc2V0dGluZyB5b3VyIG93biBmcSBvciBjcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6MjkuMTY3OTg5MzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQxODI1NDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBEZWVwZXIgaW50byBgeHNrX2JpbmRgKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAxNzUwIHRvIDE3ODUuIEkgbmVlZCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGB4c2tfYmluZGAgYWN0dWFsbHkgZnVuY3Rpb25zLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBYRFAvQUZfWERQIGxhbmRzY2FwZSwgYnV0IGRldGFpbHMgYXJlIGNydWNpYWwsIGFuZCBzb21ldGltZXMgdGhlIG51YW5jZXMgYXJlIGJ1cmllZCBkZWVwZXIgdGhhbiB0aGUgaW5pdGlhbCBmdW5jdGlvbiBjYWxsLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNlZ21lbnQuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IHN1YnRsZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSwgb3IgYW55IGhpZGRlbiBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gcmV2ZWFsIHRoZSByZW1haW5pbmcgc3RlcHMgb2YgdGhlIGJpbmQsIHBlcmhhcHMgdGhlIHNldHVwIG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBpdHNlbGYsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBvcGVyYXRpb25hbCB3b3JrZmxvdyBvZiB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhbmQgZGVidWcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjMxLjU4NjI0OTgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NTA6XFx0XFx0eHMtXFx1MDAzZWNxX3RtcCA9IE5VTEw7XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdHhzLVxcdTAwM2VkZXYgPSBkZXY7XFxuMTc1MzpcXHRcXHR4cy1cXHUwMDNlemMgPSB4cy1cXHUwMDNldW1lbS1cXHUwMDNlemM7XFxuMTc1NDpcXHRcXHR4cy1cXHUwMDNlc2cgPSAhISh4cy1cXHUwMDNldW1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKTtcXG4xNzU1OlxcdFxcdHhzLVxcdTAwM2VxdWV1ZV9pZCA9IHFpZDtcXG4xNzU2OlxcdFxcdHhwX2FkZF94c2soeHMtXFx1MDAzZXBvb2wsIHhzKTtcXG4xNzU3OlxcdFxcbjE3NTg6XFx0XFx0aWYgKHFpZCBcXHUwMDNjIGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxuMTc1OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpyeHE7XFxuMTc2MDpcXHRcXG4xNzYxOlxcdFxcdFxcdHJ4cSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgcWlkKTtcXG4xNzYyOlxcdFxcdFxcdGlmIChyeHEtXFx1MDAzZW5hcGkpXFxuMTc2MzpcXHRcXHRcXHRcXHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXFx1MDAzZW5hcGktXFx1MDAzZW5hcGlfaWQpO1xcbjE3NjQ6XFx0XFx0fVxcbjE3NjU6XFx0XFxuMTc2NjpcXHRvdXRfdW5sb2NrOlxcbjE3Njc6XFx0XFx0aWYgKCFlcnIpIHtcXG4xNzY4OlxcdFxcdFxcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cXG4xNzY5OlxcdFxcdFxcdCAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS5cXG4xNzcwOlxcdFxcdFxcdCAqL1xcbjE3NzE6XFx0XFx0XFx0c21wX3dtYigpO1xcbjE3NzI6XFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XFxuMTc3MzpcXHRcXHR9XFxuMTc3NDpcXHRvdXRfcmVsZWFzZTpcXG4xNzc1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4xNzc2OlxcdFxcdGlmIChkZXYpIHtcXG4xNzc3OlxcdFxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuMTc3ODpcXHRcXHRcXHRpZiAoZXJyKVxcbjE3Nzk6XFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbjE3ODA6XFx0XFx0fVxcbjE3ODE6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xNzgyOlxcdFxcdHJldHVybiBlcnI7XFxuMTc4MzpcXHR9XFxuMTc4NDpcXHRcXG4xNzg1OlxcdHN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xcbjE3ODY6XFx0XFx0X191NjQgYWRkcjsgLyogU3RhcnQgb2YgcGFja2V0IGRhdGEgYXJlYSAqL1xcbjE3ODc6XFx0XFx0X191NjQgbGVuOyAvKiBMZW5ndGggb2YgcGFja2V0IGRhdGEgYXJlYSAqL1xcbjE3ODg6XFx0XFx0X191MzIgY2h1bmtfc2l6ZTtcXG4xNzg5OlxcdFxcdF9fdTMyIGhlYWRyb29tO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTozMS41ODYzOTQ2NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODY0ODUyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBCaW5kIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBsb2NrIG9yZGVyaW5nIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvY2sgYWNxdWlzaXRpb24gc2VxdWVuY2Ugd2FzOiBgcnRubF9sb2NrYCAtXHUwMDNlIGB4cy1cdTAwM2VtdXRleGAgLVx1MDAzZSBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBoYXMgZmxpcHBlZCB0aGUgc2NyaXB0LCBlc3RhYmxpc2hpbmcgYSBuZXcgb3JkZXI6IGBydG5sX2xvY2tgIC1cdTAwM2UgYG5ldGRldl9sb2NrX29wcyhkZXYpYCAtXHUwMDNlIGB4cy1cdTAwM2VtdXRleGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UhXG5cblRoZSBzaGlmdCBpbiB0aGUgbG9ja2luZyBvcmRlciBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBBY3F1aXJpbmcgdGhlIGBkZXZgJ3MgbG9jayAqYmVmb3JlKiBgeHMtXHUwMDNlbXV0ZXhgIGNhbiBlaXRoZXIgZXhwb3NlIGEgcHJldmlvdXMgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IsIGVxdWFsbHkgcGxhdXNpYmx5LCByZXNvbHZlcyBhbiBleGlzdGluZyBsb2NraW5nIHByb2JsZW0sIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gYmluZCBvciBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlc291cmNlcy4gSXQgaXMgYWxsIGFib3V0IHRoZSBvcmRlcmluZyEgVGhlIGNvbmRpdGlvbmFsIGBpZiAoZGV2KWAgc3VnZ2VzdHMgc29tZSBwb3RlbnRpYWwgZm9yIGVycm9yIGhhbmRsaW5nLiBBbHNvLCBhdCB0aGUgZW5kIGBkZXZfcHV0YCBpcyBhbHNvIG5vdyBjb25kaXRpb25hbC5cblxuQSBjcml0aWNhbCBwb2ludCBpcyB0aGUgcmV2ZXJzZSBsb2NrIHJlbGVhc2Ugb3JkZXIuIFByZXZpb3VzbHksIHRoZSByZWxlYXNlIG9yZGVyIHdhcyBgbmV0ZGV2X3VubG9ja19vcHMoZGV2KWAgdGhlbiBgbXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAuIE5vdywgdGhlIG9yZGVyIGlzIGZsaXBwZWQgYWdhaW4hIFRoZSBgbmV0ZGV2X3VubG9ja19vcHMoZGV2KWAgaXMgbm93IGNvbmRpdGlvbmFsLCBiYXNlZCBvbiB0aGUgc3VjY2Vzcy9lcnJvciBoYW5kbGluZyFcblxuR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgSSBrbm93IEFGX1hEUCAoWFNLKSBpcyBhIGNydWNpYWwgaW50ZXJmYWNlIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGFsbG93aW5nIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlcyB2aWEgc29ja2V0cy4gQW55IHN1YnRsZSBjaGFuZ2VzIGluIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgbG9ja2luZywgY2FuIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIHRoZSBgYmluZCgpYCBjYWxsLiBTaW5jZSBJIGtub3cgdGhhdCBgc3l6a2FsbGVyYCBoYXMgZXh0ZW5zaXZlIGNvdmVyYWdlIG9mIEFGX1hEUCwgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBhbmFseXNpcyB0byB2ZXJpZnkgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTozNy40NTEyNDk4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6MzcuNTAyNTMyMTM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyNDUzNTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBYRFAgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGRlZmluaXRpb24gd2lsbCBtb3N0IGxpa2VseSByZXNpZGUgaW4gb25lIG9mIHR3byBwbGFjZXM6IHRoZSBwcmltYXJ5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBgbmV0L0tjb25maWdgLCBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIFhEUC1mb2N1c2VkIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBgbmV0L3hkcC9LY29uZmlnYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gdGhlIGBDT05GSUdfWERQX1NPQ0tFVFNgIG9wdGlvbidzIGF2YWlsYWJpbGl0eSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGV0YWlscy4gVW5kZXJzdGFuZGluZyBpdHMgZXhhY3Qgc3RhdHVzIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0MC44MjcwNjk2ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODI5OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NDAuODk3OTA2MTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MTQxNDg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L3hkcC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhEUCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQveGRwL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGlzLCBhcyBJIGtub3cgbXkgd2F5IGFyb3VuZCBrZXJuZWwgS2NvbmZpZyBmaWxlcywgYW5kIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFhEUCBpcyBiZWluZyBwcmVzZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgWERQIGZ1bmN0aW9uYWxpdHkgZmxhZ3MsIG9idmlvdXNseSwgdGhlIGBYRFBfU09DS0VUU2AsIGBYRFBfVU1FTWAsIGFuZCBhbGwgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBYRFAgZmVhdHVyZXMsIGFueSBuZXcgaGFyZHdhcmUgc3VwcG9ydCB0aGF0J3MgYmVlbiBhZGRlZCwgYW55IGNoYW5nZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSSdsbCBoYXZlIGEgbG9vayBhdCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzZXQgdXDigJR3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgdGhlc2UgWERQIG9wdGlvbnMgYmVjb21lIGF2YWlsYWJsZS4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgY29tbWVudHMgb3IgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgaXRzZWxmPyBBbmQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSB3YXJuaW5ncyBwcm92aWRlZCBpZiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgaXMgY2hvc2VuLiBCYXNpY2FsbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1hcCBvZiB0aGUgWERQIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcyBpbiB0aGlzIHZlcnNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0Ni41MTIwNTcwNDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjQ2LjUxMjExMzE3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzE3Mzk5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jeSBUcmVlKipcblxuT2theSwgc28gYENPTkZJR19YRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBCUEZfU1lTQ0FMTGAgaGFzIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzLCBvciBpZiB3ZSdyZSBnb29kIHRvIGp1c3QgZW5hYmxlIGBYRFBfU09DS0VUU2AgYW5kIHRoYXQncyBlbm91Z2ggdG8gcHVsbCBldmVyeXRoaW5nIGluLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gYSBxdWljayBncmVwIGZvciBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiIGluIGBrZXJuZWwvYnBmL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0OS4yMjk1MTM4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTU5ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NDkuMjg4NDgwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU5OTA1NTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiB4c2tfYmluZCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGB4c2tfYmluZGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBgLmJpbmRgIG9wZXJhdGlvbiBmb3IgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIGZvY3VzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgYW5kIGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UuIFRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBuZXQveGRwL3hzay5jYCBhbmQgaHVudCBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGB4c2tfYmluZGAgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgQUZfWERQIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo1NS44ODc1Mzg4MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzM5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTg1PXN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU4OS1cXG5uZXQveGRwL3hzay5jOjE1OTA6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTU5MS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTIxMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE0Mi1cXHQucmVsZWFzZVxcdD0geHNrX3JlbGVhc2UsXFxubmV0L3hkcC94c2suYzoyMTQzOlxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG5uZXQveGRwL3hzay5jLTIxNDQtXFx0LmNvbm5lY3RcXHQ9IHNvY2tfbm9fY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTUuOTMyODgzODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NDM4MTc3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeHNrX2JpbmRgIExvY2sgT3JkZXJpbmcgQ2hhbmdlKipcblxuT2theSwgc28gYHhza19iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIGEgdXNlci1zcGFjZSBwcm9ncmFtIHVzZXMgdGhlIGBiaW5kKClgIHN5c3RlbSBjYWxsIG9uIGFuIEFGX1hEUCBzb2NrZXQuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGluIHRoZSBrZXJuZWwuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbG9jayBvcmRlcmluZy4gSSdsbCBuZWVkIHRvIGxvb2sgYmFjayBhdCB0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlLCBhbmQgcHJvYmFibHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9sb2NrX29wc2AgYmVpbmcgYWNxdWlyZWQgYWZ0ZXIgYHhzLVx1MDAzZW11dGV4YCBwcmV2aW91c2x5LCBhbmQgbm93IGl0J3MgZGlmZmVyZW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIGNvZGUgYXVkaXQuIEkgaGF2ZSB0byBzY2FuIHRoZSBjb2RlIGJhc2UgdG8gaWRlbnRpZnkgKm90aGVyKiBpbnN0YW5jZXMgd2hlcmUgYG5ldGRldl9sb2NrX29wc2AgYW5kIGB4cy1cdTAwM2VtdXRleGAsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYHJ0bmxfbG9ja2AgYXJlIGFjcXVpcmVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCBlbnN1cmluZyB0aGlzIG5ldyBvcmRlcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRlYWRsb2NrcyBvciBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTguNjc2NzA0ODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzNDkxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2xvY2tfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNy1cXHRpZiAoZGV2KVxcbm5ldC94ZHAveHNrLmM6MTYxODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQveGRwL3hzay5jLTE2MTktXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3OlxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTkuMTcxMDYzMzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTQ2MTk1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKk11dGV4IEFjcXVpc2l0aW9uIGluIFhTSyBCdWZmZXIgUG9vbCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBhIG11dGV4IGlzIHBvdGVudGlhbGx5IGJlaW5nIGFjcXVpcmVkLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgWFNLIGJ1ZmZlciBwb29sLiBUaGUgY29udGV4dCBJIGhhdmUgaXMgdGhlIGZ1bmN0aW9uIGB4cF9jbGVhcl9kZXZgIG9yIG1heWJlIHNvbWV3aGVyZSByZWxhdGVkLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHhzLVx1MDAzZW11dGV4YCBpcyBncmFiYmVkIHRoZXJlLiBSaWdodCwgc28gSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBjb2RlOiBJIHNob3VsZCBjaGVjayBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkwLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIG11dGV4IGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYnVmZmVyIHBvb2wncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjAxLjc4NTY4NTEwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza19idWZmX3Bvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0cmV0dXJuIHhwX2Fzc2lnbl9kZXYocG9vbCwgZGV2LCBxdWV1ZV9pZCwgZmxhZ3MpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHR2b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMjkxOlxcdHtcXG4gMjkyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwb29sLVxcdTAwM2VuZXRkZXY7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlbmV0ZGV2KVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMjk4OlxcdFxcdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xcbiAyOTk6XFx0XFx0eHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHBvb2wtXFx1MDAzZW5ldGRldiwgcG9vbC1cXHUwMDNlcXVldWVfaWQpO1xcbiAzMDA6XFx0XFx0cG9vbC1cXHUwMDNlbmV0ZGV2ID0gTlVMTDtcXG4gMzAxOlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuIDMwMjpcXHRcXHRkZXZfcHV0KG5ldGRldik7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIHhwX3JlbGVhc2VfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHhza19idWZmX3Bvb2wsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRydG5sX2xvY2soKTtcXG4gMzExOlxcdFxcdHhwX2NsZWFyX2Rldihwb29sKTtcXG4gMzEyOlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChwb29sLVxcdTAwM2VmcSkge1xcbiAzMTU6XFx0XFx0XFx0eHNrcV9kZXN0cm95KHBvb2wtXFx1MDAzZWZxKTtcXG4gMzE2OlxcdFxcdFxcdHBvb2wtXFx1MDAzZWZxID0gTlVMTDtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZWNxKSB7XFxuIDMyMDpcXHRcXHRcXHR4c2txX2Rlc3Ryb3kocG9vbC1cXHUwMDNlY3EpO1xcbiAzMjE6XFx0XFx0XFx0cG9vbC1cXHUwMDNlY3EgPSBOVUxMO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHR4ZHBfcHV0X3VtZW0ocG9vbC1cXHUwMDNldW1lbSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNjowMS43ODU3NzQxNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0MjE3ODA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgWERQIE11dGV4KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGB4cy1cdTAwM2VtdXRleGAgd2l0aGluIHRoZSBgbmV0L3hkcC9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICphbGwqIHRoZSBwbGFjZXMgdGhpcyBzcGVjaWZpYyBtdXRleCBpcyBsb2NrZWQgYW5kIHVubG9ja2VkLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBzeXN0ZW1hdGljYWxseS4gS25vd2luZyB0aGUgbG9jaydzIHNjb3BlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBYRFAgbWFuYWdlcyBpdHMgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIHByb3RlY3Rpb24uIFRoaXMgd2lsbCBwcm9iYWJseSBwcm92aWRlIGluc2lnaHRzIGludG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0cmFjayBkb3duIHRob3NlIG11dGV4IGFjcXVpc2l0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjEyLjIwNzU1NzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc4NDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdXRleF9sb2NrXFxcXChcXHUwMDI2eHMtXFx1MDAzZW11dGV4XFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTExOTE9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTk5LVxcbm5ldC94ZHAveHNrLmM6MTIwMDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMTIwMS1cXHRjYWNoZWRfY29ucyA9IHhzLVxcdTAwM2V0eC1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuLS1cXG5uZXQveGRwL3hzay5jPTE1MzA9c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNTUwLVxcdHhza19kZWxldGVfZnJvbV9tYXBzKHhzKTtcXG5uZXQveGRwL3hzay5jOjE1NTE6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jLTE1NTItXFx0eHNrX3VuYmluZF9kZXYoeHMpO1xcbi0tXFxubmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxOS1cXG5uZXQveGRwL3hzay5jOjE2MjA6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jLTE2MjEtXFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTc5Mj1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTMtXFxubmV0L3hkcC94c2suYzoxODE0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODE1LVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4NTEtXFxubmV0L3hkcC94c2suYzoxODUyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODUzLVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVxcdTAwM2V1bWVtKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4ODAtXFxubmV0L3hkcC94c2suYzoxODgxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODgyLVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5MzU9c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L3hkcC94c2suYy0xOTY0LVxcbm5ldC94ZHAveHNrLmM6MTk2NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMTk2Ni1cXHRcXHRzdGF0cy5yeF9kcm9wcGVkID0geHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIwNDMtXFxubmV0L3hkcC94c2suYzoyMDQ0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0yMDQ1LVxcdFxcdGlmICh4cy1cXHUwMDNlemMpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxMDE9c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMTEzLVxcbm5ldC94ZHAveHNrLmM6MjExNDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMjExNS1cXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4tLVxcbm5ldC94ZHAveHNrX2RpYWcuYz05Mj1zdGF0aWMgaW50IHhza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQveGRwL3hza19kaWFnLmMtMTEyLVxcbm5ldC94ZHAveHNrX2RpYWcuYzoxMTM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hza19kaWFnLmMtMTE0LVxcdGlmIChSRUFEX09OQ0UoeHMtXFx1MDAzZXN0YXRlKSA9PSBYU0tfVU5CT1VORClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6MTIuMjYxMzQ5MDI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3OTg4MzMxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHhza19ub3RpZmllcmAgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBuZXR3b3JrIGRldmljZSdzIGxpZmVjeWNsZS4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgZWl0aGVyIHVucmVnaXN0ZXJlZCBvciBleHBlcmllbmNlcyBhIFwiZG93blwiIGV2ZW50LCB0aGUgYHhza19ub3RpZmllcmAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBBbiBpbXBvcnRhbnQgZGV0YWlsIHRvIG5vdGUgaXMgdGhhdCB0aGlzIGNhbGwgaGFwcGVucyB3aGlsZSB0aGUgYHJ0bmxfbG9ja2AgaXMgYWxyZWFkeSBoZWxkLiBUaGF0J3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGFjdGlvbnMgYW5kIGxvZ2ljIHRoYXQgb2NjdXIgKndpdGhpbiogdGhlIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZXNlIGxvY2tpbmcgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjE2LjA2MDE4NDM4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcbjIxMDE6XFx0c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbjIxMDI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4yMTAzOlxcdHtcXG4yMTA0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4yMTA1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4yMTA2OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4yMTA3OlxcdFxcbjIxMDg6XFx0XFx0c3dpdGNoIChtc2cpIHtcXG4yMTA5OlxcdFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuMjExMDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhkcC5sb2NrKTtcXG4yMTExOlxcdFxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2bmV0LVxcdTAwM2V4ZHAubGlzdCkge1xcbjIxMTI6XFx0XFx0XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuMjExNTpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4yMTE2OlxcdFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSBFTkVURE9XTjtcXG4yMTE3OlxcdFxcdFxcdFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxMTg6XFx0XFx0XFx0XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0XFx0XFx0XFx0eHNrX3VuYmluZF9kZXYoeHMpO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHRcXHRcXHRcXHQvKiBDbGVhciBkZXZpY2UgcmVmZXJlbmNlcy4gKi9cXG4yMTIzOlxcdFxcdFxcdFxcdFxcdHhwX2NsZWFyX2Rldih4cy1cXHUwMDNlcG9vbCk7XFxuMjEyNDpcXHRcXHRcXHRcXHR9XFxuMjEyNTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuMjEyNjpcXHRcXHRcXHR9XFxuMjEyNzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGRwLmxvY2spO1xcbjIxMjg6XFx0XFx0XFx0YnJlYWs7XFxuMjEyOTpcXHRcXHR9XFxuMjEzMDpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuMjEzMTpcXHR9XFxuMjEzMjpcXHRcXG4yMTMzOlxcdHN0YXRpYyBzdHJ1Y3QgcHJvdG8geHNrX3Byb3RvID0ge1xcbjIxMzQ6XFx0XFx0Lm5hbWUgPVxcdFxcdFxcXCJYRFBcXFwiLFxcbjIxMzU6XFx0XFx0Lm93bmVyID1cXHRUSElTX01PRFVMRSxcXG4yMTM2OlxcdFxcdC5vYmpfc2l6ZSA9XFx0c2l6ZW9mKHN0cnVjdCB4ZHBfc29jayksXFxuMjEzNzpcXHR9O1xcbjIxMzg6XFx0XFxuMjEzOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNjoxNi4wNjAzMTU4MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyODY0NDA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIE9yZGVyIGluIFhTSyBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgeHNrX25vdGlmaWVyYCBhbmQgaW1tZWRpYXRlbHkgc2VlIGBtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtgIGZvbGxvd2VkIGJ5IGB4cF9jbGVhcl9kZXYoeHMtXHUwMDNlcG9vbCk7YC4gTm93LCBgeHBfY2xlYXJfZGV2YCBjYWxscyBgbmV0ZGV2X2xvY2tfb3BzKG5ldGRldilgLiBTbywgaW4gYHhza19ub3RpZmllcmAsIHRoZSBsb2NraW5nIG9yZGVyIGlzIGNsZWFybHkgYHhzLVx1MDAzZW11dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5CdXQsIGhhbmcgb24sIHdoYXQgYWJvdXQgYHhza19iaW5kYD8gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIGZsb3cgd2FzOiBgbXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleClgIGZvbGxvd2VkIGJ5IGBuZXRkZXZfbG9ja19vcHMoZGV2KWAuIFRoYXQncyB0aGUgc2FtZSBvcmRlci4gV2FpdCwgbm8sIGxldCBtZSByZXBocmFzZSB0aGF0Li4uIGl0ICp3YXMqIHRoZSBzYW1lLlxuXG5XaGF0IGRpZCB0aGUgcGF0Y2ggY2hhbmdlLCBleGFjdGx5PyBBaGEhIFRoZSBwYXRjaCBtb2RpZmllZCBgeHNrX2JpbmRgIHRvIGluY2x1ZGU6XG5cbmBgYFxuK1x0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbitcdGlmIChkZXYpXG4rXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5gYGBcblxuT2theSwgc28gKm5vdyogaW4gYHhza19iaW5kYCwgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBpcyBjYWxsZWQgKmJlZm9yZSogYG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpYC4gVGhhdCdzIGEgY3JpdGljYWwgY2hhbmdlLiBJdCBmbGlwcGVkIHRoZSBsb2NraW5nIG9yZGVyLiBCdXQgKndoeSo/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXaGF0IGRvZXMgYG5ldGRldl9sb2NrX29wc2Agb3JkZXIgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIHBvdGVudGlhbCBkZWFkbG9ja3M/IFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbmV0ZGV2X2xvY2tfb3BzYCBhbmQgaXRzIHVzYWdlcyB3aXRoaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIHRoZSBpbXBsaWNhdGlvbnMgb24gdGhlIGxvY2tpbmcgaGllcmFyY2h5LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGZpbmQgdGhlIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NDAuMzQ2NzU5NTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM3LSAqXFx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzg6ICpcXHR3aXRoIHJ0bmxfbG9jayBhbmQgbmV0ZGV2X2xvY2tfb3BzKGRldikgaGVsZC4gVGhlIHVjL21jIHBhcmFtZXRlcnNcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzktICpcXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjQwLjQwMDc3NTIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjI2NzIwNjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZfbG9ja19vcHMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBvciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGxvZy4gU3BlY2lmaWNhbGx5LCBJJ2QgdXN1YWxseSByZWFjaCBmb3IgYGdpdCBsb2dgIG9uIHRoYXQgY29tbWl0IG9yIGZ1bmN0aW9uLiBCdXQgSSdtIHJlbWluZGVkIHRoYXQgSSBkb24ndCBoYXZlIHRoZSBmdWxsIGdpdCBzdWl0ZSBhdCBteSBkaXNwb3NhbC4gTm8gYGdpdCBzaG93YCBlaXRoZXIsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBwZXJmZWN0IGZvciBxdWlja2x5IHNlZWluZyB0aGUgbGF0ZXN0IGNoYW5nZXMgd2l0aCBgZ2l0IHNob3cgSEVBRGAuIFRoYXQncyBhIGxpdHRsZSBmcnVzdHJhdGluZywgYnV0IGxldCdzIHNlZSwgd2hhdCBhcmUgbXkgYXZhaWxhYmxlIHRvb2xzP1xuXG5SaWdodCwgSSdtIGxpbWl0ZWQgdG8gYGdyZXBwZXJgLCBgcmVhZC1maWxlYCwgYW5kIGBjb2Rlc2VhcmNoYC4gUGVyaGFwcyBgZ3JlcHBlcmAgY2FuIGdpdmUgbWUgd2hhdCBJIG5lZWQuIEluc3RlYWQgb2YgdGhlIGxvZyBoaXN0b3J5LCBJJ2xsIHN3aXRjaCBnZWFycy4gQ2FuIGBncmVwcGVyYCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbmV0ZGV2X2xvY2tfb3BzYCBpcyAqdXNlZCogdGhyb3VnaG91dCB0aGUga2VybmVsPyBUaGF0IG1pZ2h0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0J3MgYmVpbmcgaW1wbGVtZW50ZWQgY3VycmVudGx5LCBldmVuIHdpdGhvdXQgdGhlIGZ1bGwgZ2l0IGhpc3RvcnkuIExldCdzIHNlZSBpZiBJIGNhbiB1c2UgdGhlIHRvb2wgaW4gdGhpcyBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NTIuNjY3OTg0OTM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkxMzY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2JyaWRnZS9icl9pZi5jPTQyNj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbmV3X25icChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQyLVxcdHAtXFx1MDAzZWRldiA9IGRldjtcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDQzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00NDQtXFx0cC1cXHUwMDNlcGF0aF9jb3N0ID0gcG9ydF9jb3N0KGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL2Rldi5jLTExMDIte1xcbm5ldC9jb3JlL2Rldi5jOjExMDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTExMDQtXFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlIFxcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg1OS1cXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxubmV0L2NvcmUvZGV2LmM6MTg2MDpcXHRcXHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xODYxLVxcdFxcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xOTM0PXN0YXRpYyB2b2lkIGNhbGxfbmV0ZGV2aWNlX3VucmVnaXN0ZXJfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xOTM3LVxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxubmV0L2NvcmUvZGV2LmM6MTkzODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xOTM5LVxcdFxcdGNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyKG5iLCBORVRERVZfR09JTkdfRE9XTixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xOTUzLVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9jb3JlL2Rldi5jOjE5NTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTk1NS1cXHRcXHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDYxMT1zdGF0aWMgdm9pZCBicGZfeGRwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDYyMC1cXHRpZiAoeGRwX2xpbmstXFx1MDAzZWRldikge1xcbm5ldC9jb3JlL2Rldi5jOjEwNjIxOlxcdFxcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cXHUwMDNlZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMDYyMi1cXHRcXHRXQVJOX09OKGRldl94ZHBfZGV0YWNoX2xpbmsoeGRwX2xpbmstXFx1MDAzZWRldiwgTlVMTCwgeGRwX2xpbmspKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNjcyPXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cXG5uZXQvY29yZS9kZXYuYzoxMDcwNTpcXHRuZXRkZXZfbG9ja19vcHMoeGRwX2xpbmstXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmMtMTA3MDYtXFx0bW9kZSA9IGRldl94ZHBfbW9kZSh4ZHBfbGluay1cXHUwMDNlZGV2LCB4ZHBfbGluay1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzYzLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzY0OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzY1LVxcdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcXHUwMDI2ZXh0YWNrLCBsaW5rKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwOTM2LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmZWF0dXJlLCBsb3dlci1cXHUwMDNlbmFtZSk7XFxubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcXG5uZXQvY29yZS9kZXYuYy0xMDkzOC1cXHRcXHRcXHRsb3dlci1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH5mZWF0dXJlO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzODQ9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MTEtXFxubmV0L2NvcmUvZGV2LmM6MTE1MTI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE1MTMtXFx0X19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTUzOS1cXHQvKiBOb3RpZnkgcHJvdG9jb2xzLCB0aGF0IGEgbmV3IGRldmljZSBhcHBlYXJlZC4gKi9cXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTU0MS1cXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI1MDMtXFx0XFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cXG5uZXQvY29yZS9kZXYuYzoxMjUwNDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMjUwNS1cXHRcXHRkZXZfc2h1dGRvd24oZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNzAyPWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc4Ni1cXG5uZXQvY29yZS9kZXYuYzoxMjc4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMjc4OC1cXHQvKiBJZiBkZXZpY2UgaXMgcnVubmluZyBjbG9zZSBpdCBmaXJzdC4gKi9cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyODAwLVxcdC8qIFNodXRkb3duIHF1ZXVlaW5nIGRpc2NpcGxpbmUuICovXFxubmV0L2NvcmUvZGV2LmM6MTI4MDE6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI4MDItXFx0ZGV2X3NodXRkb3duKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXFxuLS1cXG5uZXQvY29yZS9kZXYuaC02Mi1cXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXFx0XFxcXFxcbm5ldC9jb3JlL2Rldi5oLTY0LVxcdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcXFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTE4PWludCBkZXZfY2hhbmdlX25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmV3bmFtZSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMS1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzLVxcdHJldCA9IG5ldGlmX2NoYW5nZV9uYW1lKGRldiwgbmV3bmFtZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9Mzk9aW50IGRldl9zZXRfYWxpYXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYWxpYXMsIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXFxubmV0L2NvcmUvZGV2X2FwaS5jOjQzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cXHRyZXQgPSBuZXRpZl9zZXRfYWxpYXMoZGV2LCBhbGlhcywgbGVuKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtNjYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjY3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy02OC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz04MT12b2lkIGRldl9zZXRfZ3JvdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ncm91cClcXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzo4MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXFx0bmV0aWZfc2V0X2dyb3VwKGRldiwgbmV3X2dyb3VwKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtOTQtXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2X2FkZHJfc2VtKTtcXG5uZXQvY29yZS9kZXZfYXBpLmM6OTU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTk2LVxcdHJldCA9IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIHNzLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTEzNT1pbnQgZGV2X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxMzk6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfY2FycmllcihkZXYsIG5ld19jYXJyaWVyKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNTYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU4LVxcdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xNzE9aW50IGRldl9jaGFuZ2VfcHJvdG9fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHByb3RvX2Rvd24pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTc0LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxNzU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE3Ni1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfcHJvdG9fZG93bihkZXYsIHByb3RvX2Rvd24pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTE5Nz1pbnQgZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjAxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXFx0cmV0ID0gbmV0aWZfb3BlbihkZXYsIGV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIxOS17XFxubmV0L2NvcmUvZGV2X2FwaS5jOjIyMDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjIxLVxcdG5ldGlmX2Nsb3NlKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjI2PWludCBkZXZfZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMzU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI0Ny1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDktXFx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTI2ND12b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyNjY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cXHRuZXRpZl9kaXNhYmxlX2xybyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI4Ni1cXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODgtXFx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zMTA9aW50IGRldl9zZXRfYWxsbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTMtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjMxNDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzE1LVxcdHJldCA9IG5ldGlmX3NldF9hbGxtdWx0aShkZXYsIGluYywgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MzMzPWludCBkZXZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzcyxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXFxubmV0L2NvcmUvZGV2X2FwaS5jOjMzODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVxcdHJldCA9IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIHNzLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNDktXFxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzUxLVxcdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM2Nj12b2lkIG5ldGRldl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6MzY4OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXFx0bmV0aWZfc3RhdGVfY2hhbmdlKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjk1LVxcdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjI5NjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXFx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBcXHUwMDI2a2VybmVsX2NmZyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0zOTE9c3RhdGljIGludCBkZXZfc2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQyMjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXFx0ZXJyID0gZGV2X3NldF9od3RzdGFtcF9waHlsaWIoZGV2LCBcXHUwMDI2a2VybmVsX2NmZywgXFx1MDAyNmV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NDE9aW50IGdlbmVyaWNfaHd0c3RhbXBfZ2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NTItXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDUzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1NC1cXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDYxPWludCBnZW5lcmljX2h3dHN0YW1wX3NldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ3NDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXFx0ZXJyID0gZGV2X3NldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00ODktXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUwMT1zdGF0aWMgaW50IGRldl9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1MDk6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTEwLVxcdFxcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTIwPXN0YXRpYyBpbnQgZGV2X3Npb2N3YW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjYtXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTI3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyOC1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01NzYtXFx0XFx0XFx0ICAgKHNpemVfdClkZXYtXFx1MDAzZWFkZHJfbGVuKSk7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTc3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU3OC1cXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODItXFx0Y2FzZSBTSU9DU0lGTUFQOlxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4MzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODQtXFx0XFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTkzLVxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXFx0XFx0ZXJyID0gZGV2X21jX2FkZF9nbG9iYWwoZGV2LCBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDUtXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cXHRcXHRlcnIgPSBkZXZfbWNfZGVsX2dsb2JhbChkZXYsIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcXG4tLVxcbm5ldC9jb3JlL2ZhaWxvdmVyLmM9MjE2PWZhaWxvdmVyX2V4aXN0aW5nX3NsYXZlX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpmYWlsb3Zlcl9kZXYpXFxuLS1cXG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNS1cXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXFx1MDAzZXBlcm1fYWRkciwgZGV2LVxcdTAwM2VwZXJtX2FkZHIpKSB7XFxubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZmFpbG92ZXIuYy0yMjctXFx0XFx0XFx0ZmFpbG92ZXJfc2xhdmVfcmVnaXN0ZXIoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yMzgtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZsd2V2ZW50bGlzdF9sb2NrKTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXFx0XFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xcbi0tXFxubmV0L2NvcmUvbGlua193YXRjaC5jPTI5MT12b2lkIGxpbmt3YXRjaF9zeW5jX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cXHRpZiAobGlua3dhdGNoX2NsZWFuX2RldihkZXYpKSB7XFxubmV0L2NvcmUvbGlua193YXRjaC5jOjI5NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjk1LVxcdFxcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE0NjE9c3RhdGljIHNzaXplX3QgdHhfbWF4cmF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE0ODYtXFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTQ4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg4LVxcdGlmIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfdHhfbWF4cmF0ZSlcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMzk9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTUwLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNTE6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE1Mi1cXHRkZXYtXFx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcyA9IDA7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTYxOD1pbnQgbmV0ZGV2X25sX3F1ZXVlX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02MzgtXFx0fSBlbHNlIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcXHRcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldixcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTkzOC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXFx0XFx0ZXJyID0gbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcF9vbmUobmV0ZGV2LCBzY29wZSwgc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xNDcyPXN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0NzgtXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxNDc5OlxcdFxcdG5ldGRldl9sb2NrX29wc190b19mdWxsKG5ldGRldik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDgwLVxcdFxcdG5ldGRldl9nZW5sX2Rldl9ub3RpZnkobmV0ZGV2LCBORVRERVZfQ01EX0RFVl9BRERfTlRGKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTMwPXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTQtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTU6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTYtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTMwMzc9c3RhdGljIGludCBkb19zZXRfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZmluZGV4LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1NS1cXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19kZWxfc2xhdmUodXBwZXJfZGV2LCBkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNTY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1Ny1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3MS1cXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19hZGRfc2xhdmUodXBwZXJfZGV2LCBkZXYsIGV4dGFjayk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzA3MjpcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDczLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMTQ0PXN0YXRpYyBpbnQgZG9fc2V0bGluayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMTc2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzctXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjEzLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmRldl9hZGRyX3NlbSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzIxNDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjE1LVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzcxMD1pbnQgcnRubF9jb25maWd1cmVfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zNzE1LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM3MTY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNy1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5Mjg9c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODAtXFx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5ODE6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzk4Mi1cXHRcXHRlcnIgPSBkb19zZXRfbWFzdGVyKGRldiwgbmxhX2dldF91MzIodGJbSUZMQV9NQVNURVJdKSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNjI3LVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRwLVxcdTAwM2Vjb25kdWl0LVxcdTAwM2VjbG9zZV9saXN0LCBcXHUwMDI2Y2xvc2VfbGlzdCk7XFxubmV0L2RzYS9kc2EuYzoxNjI4OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkcC1cXHUwMDNlY29uZHVpdCk7XFxubmV0L2RzYS9kc2EuYy0xNjI5LVxcdH1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTM0Nzc9c3RhdGljIGludCBkc2FfdXNlcl9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTM2MDUtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWNsb3NlX2xpc3QsIFxcdTAwMjZjbG9zZV9saXN0KTtcXG5uZXQvZHNhL3VzZXIuYzozNjA2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkcC1cXHUwMDNldXNlcik7XFxubmV0L2RzYS91c2VyLmMtMzYwNy1cXHRcXHR9XFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz01OD1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjc2OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9MzE5PWludCBldGhubF9hY3RfY2FibGVfdGVzdF90ZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzozNDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYz0yMTI9aW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYy0yMzgtXFx0cnRubF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYzoyMzk6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYy0yNDAtXFx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQ1Nj1pbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjItXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjQtXFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0yNDU1PXN0YXRpYyBpbnQgZXRodG9vbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQ5Ny1cXHRcXHRcXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI0OTg6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yNDk5LVxcdFxcdFxcdHJjID0gb3BzLVxcdTAwM2VzZXRfcGh5c19pZChkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTEtXFx0XFx0cnRubF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyNTEyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjUxMy1cXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzYyNi1cXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2Mjc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI4LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvZXRodG9vbC9tb2R1bGUuYz0yMjE9c3RhdGljIHZvaWQgbW9kdWxlX2ZsYXNoX2Z3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjI4LVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIyOTpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzAtXFx0ZXRodG9vbF9jbWlzX2Z3X3VwZGF0ZShcXHUwMDI2bW9kdWxlX2Z3LVxcdTAwM2Vmd191cGRhdGUpO1xcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjM1LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIzNjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzctXFx0ZGV2LVxcdTAwM2VldGh0b29sLVxcdTAwM2Vtb2R1bGVfZndfZmxhc2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcXG4tLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVxcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTUwNz1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU0My1cXHRcXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQ0OlxcdFxcdG5ldGRldl9sb2NrX29wcyhyZXFfaW5mby1cXHUwMDNlZGV2KTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTQ1LVxcdH1cXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEyLVxcdFxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MTM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYxNC1cXHRyZXQgPSBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKGN0eC1cXHUwMDNlcmVxX2luZm8sIGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTkzNS1cXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6OTM2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzctXFx0ZGV2LVxcdTAwM2VjZmdfcGVuZGluZyA9IGttZW1kdXAoZGV2LVxcdTAwM2VjZmcsIHNpemVvZigqZGV2LVxcdTAwM2VjZmcpLFxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDY4PWludCBldGhubF9yc3NfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cXG5uZXQvZXRodG9vbC9yc3MuYzo0NzQ6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlbWF0Y2hfaWZpbmRleCAhPSBjdHgtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz0xMDAyPWludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXFxubmV0L2V0aHRvb2wvcnNzLmM6MTAzNzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTE3Ny1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc5LVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4Ny1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXFx0XFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxNjA9aW50IGFkZHJjb25mX2FkZF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTgyLVxcdGlmIChkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMxODM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTg0LVxcdFxcdGVyciA9IGluZXQ2X2FkZHJfYWRkKG5ldCwgZGV2LCBcXHUwMDI2Y2ZnLCAwLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDk4NT1pbmV0Nl9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTA3MS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUwNzI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MDczLVxcdGlkZXYgPSBpcHY2X2ZpbmRfaWRldihkZXYpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTI1PXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX2FkZHJfZ2VuX21vZGUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjEtXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpZGV2LVxcdTAwM2VjbmYuYWRkcl9nZW5fbW9kZSwgbmV3X3ZhbCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTYyOlxcdFxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhpZGV2LVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2My1cXHRcXHRcXHRcXHRhZGRyY29uZl9pbml0X2F1dG9fYWRkcnMoaWRldi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU3NS1cXHRcXHRcXHRcXHRcXHRcXHQgIG5ld192YWwpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3NjpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHMoaWRldi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzctXFx0XFx0XFx0XFx0XFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE1NjQ9c3RhdGljIGludCB0Y19nZXRfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNTgxLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTU4MjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE1ODMtXFx0ZXJyID0gX190Y19nZXRfcWRpc2Moc2tiLCBuLCBleHRhY2ssIGRldiwgdGNhLCB0Y20pO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODIyPXN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTg0Mi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4NDM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ0LVxcdGVyciA9IF9fdGNfbW9kaWZ5X3FkaXNjKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTkwOD1zdGF0aWMgaW50IHRjX2R1bXBfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTk0MzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5NDQtXFx0XFx0cSA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIzMjc9c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzNDU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ2LVxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI0NTM9c3RhdGljIGludCB0Y19kdW1wX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI0NjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNDY3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjQ2OC1cXHRlcnIgPSBfX3RjX2R1bXBfdGNsYXNzKHNrYiwgY2IsIHRjbSwgZGV2KTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NTIuNzM1OTAyODY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNTUxOTY5ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9ja2luZyBNZWNoYW5pc21zIGluIHRoZSBOZXR3b3JrIERldmljZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGhhbmRsZXMgbG9ja2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRldmljZSBvcGVyYXRpb25zLiBUaGUgY29kZSdzIHVzaW5nIGBuZXRkZXZfbG9ja19vcHNgIG5vdy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBncmFiYmluZyB0aGUgbmV0ZGV2J3Mgb3BlcmF0aW9ucyBsb2NrLiBJJ20gYXNzdW1pbmcgaXQncyBzb21ldGhpbmcgbGlrZSBgZGV2LVx1MDAzZW5ldGRldl9vcHNfbG9ja2AsIHdoaWNoIEkgc2VlbSB0byByZWNhbGwgd2FzIGludHJvZHVjZWQgZmFpcmx5IHJlY2VudGx5IGluIHRoZSBuZXQtbmV4dCB0cmVlIHRvIGhlbHAgd2l0aCB0aGUgUlROTCBzcGxpdC4gSXQncyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcyBhbmQgdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBvdGhlciBsb2NraW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDMuMjg3ODc0ODcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzNjA0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIG5ldGRldl9sb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzowMy4zMzQ3MTkyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTY1Mzk2ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgbmV0ZGV2X2xvY2tfb3BzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbmV0d29yayBkZXZpY2UgbG9ja2luZyBtZWNoYW5pc21zLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBuZXRkZXZfbG9ja19vcHNgIHN0cnVjdHVyZSBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIGFuZCBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBoZWFkZXJzLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJhc2UgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcyB1c3VhbGx5IHJlc2lkZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlY2xhcmF0aW9uIGFuZCBwb3NzaWJseSB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBsb2NraW5nIGZyYW1ld29yay4gSSB3b25kZXIgaWYgaXQncyBkZXByZWNhdGVkIG9yIHBlcmhhcHMgcmVwbGFjZWQgYnkgc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGNvZGUgY29tbWVudHMgZm9yIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDguMzAwMTE4OTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE1NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzctICpcXHRBc3luYyB2ZXJzaW9uIG9mIG5kb19zZXRfcnhfbW9kZSB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEzODogKlxcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzOS0gKlxcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDguMzQ1Mjc2MTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk3NzI2OTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRmluZGluZyB0aGUgYG5ldGRldl9sb2NrX29wc2AgUmVmZXJlbmNlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgbmV0ZGV2X2xvY2tfb3BzYC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsLCBJIGtub3cgdGhpcyBwcm9iYWJseSBtZWFucyBkaWdnaW5nIHRocm91Z2ggaGVhZGVyIGZpbGVzLiBUaGlzIGxpa2VseSByZXByZXNlbnRzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV0d29yayBkZXZpY2UgbG9jayBvcGVyYXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBpbmNsdWRlIHBhdGhzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2Ygd2hlcmUgaXQgaXMgdXNlZC4gSSBleHBlY3QgdGhpcyB0byBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGluIHRoZSBuZXR3b3JrIGNvcmUgZmlsZXMuIExldCdzIHN0YXJ0IHRoZXJlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2V0IG9mIGhlYWRlcnMgdG8gc2VhcmNoLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZvcm11bGF0ZSBhIHJvYnVzdCBzZWFyY2ggcXVlcnkgc28gYXMgbm90IHRvIG1pc3MgYSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoxMC4zMjI1NDkyMDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDExNTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG5ldGRldl9sb2NrX29wc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yOD1zdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMzgtXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDozOTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjEwLjQ2NjY3MzYxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzYxNDMxMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRkZXZfbG9jay5oYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgaGFzIGV2b2x2ZWQsIGVzcGVjaWFsbHkgaW4gbGlnaHQgb2YgcmVjZW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIG1heWJlIHNvbWUgcmVhZC13cml0ZSBsb2NrcywgYW5kIGhvcGVmdWxseSwgc29tZSBjbGV2ZXIgdHJpY2tzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICBUaGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGxvY2tzIOKAkyBhcmUgdGhleSBwZXItZGV2aWNlLCBwZXItcXVldWUsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/XG4qICAgSG93IHRoZXkncmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBkaWZmZXJlbnQgb3BlcmF0aW9ucyDigJMgdHJhbnNtaXQsIHJlY2VpdmUsIGNvbmZpZ3VyYXRpb24sIGFuZCBzbyBvbi5cbiogICBBbnkgYXR0ZW1wdHMgYXQgbG9ja2xlc3MgYWxnb3JpdGhtcyBvciBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhdCBsZWFzdCBoaWdobHkgb3B0aW1pemVkIGxvY2tpbmcgcHJpbWl0aXZlcywgSSdtIGhvcGluZyBmb3Igc29tZSBpbnRlcmVzdGluZyBtb2Rlcm4gdGVjaG5pcXVlcywgbWF5YmUgUkNVIGluIHBsYXkuXG4qICAgVGhlIHBvdGVudGlhbCBmb3IgbG9jayBoaWVyYXJjaGllcyB0byBwcmV2ZW50IGRlYWRsb2NrcywgdGhhdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGFzcGVjdCBpbiBuZXR3b3JraW5nIGNvZGUuXG4qICAgSSdsbCBiZSBmb2N1c2luZyB0byBzZWUgaWYgdGhleSdyZSBzdGlsbCB1c2luZyB0aGUgb2xkIGFuZCBzbG93IG5ldGlmX3J4X2xvY2soKSBmb3IgbmV0aWZfcngoKS5cblxuVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcGFydGljdWxhcmx5IGVsZWdhbnQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoxNi4yMjgxMDgxNDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpZm5kZWYgX05FVF9ORVRERVZfTE9DS19IXFxuICAgNDpcXHQjZGVmaW5lIF9ORVRfTkVUREVWX0xPQ0tfSFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9ja2RlcC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X3RyeWxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDExOlxcdHtcXG4gIDEyOlxcdFxcdHJldHVybiBtdXRleF90cnlsb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAgMTM6XFx0fVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDE2OlxcdHtcXG4gIDE3OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuICAxODpcXHR9XFxuICAxOTpcXHRcXG4gIDIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbiAgMjE6XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4gIDI0OlxcdFxcdCAgICBkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gIDI1OlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbiAgMzE6XFx0XFxuICAzMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1NIQVBFUilcXG4gIDMzOlxcdFxcdHJldCB8PSAhIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmV0X3NoYXBlcl9vcHM7XFxuICAzNDpcXHQjZW5kaWZcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA0MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAgNDg6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAgNDk6XFx0fVxcbiAgNTA6XFx0XFxuICA1MTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAgNTQ6XFx0XFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4gIDU1OlxcdFxcdGVsc2VcXG4gIDU2OlxcdFxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2MDpcXHR7XFxuICA2MTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDYyOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICA2MzpcXHRcXHRlbHNlXFxuICA2NDpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDcwOlxcdFxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjE2LjIyODE4Mzc2M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzE0OTcwNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBYU0sgU29ja2V0IExpZmVjeWNsZTogTG9ja2luZyBhbmQgU3RhdGUgVHJhbnNpdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbmV0ZGV2X2xvY2tfb3BzYCBpcyBhY3F1aXJpbmcgYSBsb2NrIG9uIGBkZXYtXHUwMDNlbG9ja2AuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGJpbmRpbmcgcHJvY2Vzcy4gSSBzZWUgdGhhdCBpdCBzdGFydHMgYnkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIGRldmljZSBtYW5hZ2VtZW50LlxuXG5XaXRoaW4gYHhza19iaW5kYCwgdGhlIGNvZGUgcmV0cmlldmVzIHRoZSBuZXR3b3JrIGRldmljZSB1c2luZyBgZGV2X2dldF9ieV9pbmRleGAuIElmIHRoZSBkZXZpY2UgaXMgZm91bmQsIGBuZXRkZXZfbG9ja19vcHNgIGlzIHVzZWQuIFRoZW4gYSBtdXRleCBsb2NrIGlzIGFjcXVpcmVkIG9uIGB4cy1cdTAwM2VtdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCdzIGludGVybmFsIHN0YXRlLiBJdCBjaGVja3MgdGhlIHNvY2tldCdzIHN0YXRlOyBpZiBpdCdzIG5vdCByZWFkeSwgaXQgYmFpbHMgb3V0IGVhcmx5IHdpdGggYW4gYEVCVVNZYCBlcnJvci4gSWYgdGhlcmUncyBubyBkZXZpY2UgcHJlc2VudCBhbiBlcnJvciBpcyB0cmlnZ2VyZWQsIGBFTk9ERVZgLiBUaGUgY29kZSB0aGVuIHVubG9ja3MgYHhzLVx1MDAzZW11dGV4YCBhbmQsIGlmIGEgZGV2aWNlIHdhcyBwcmVzZW50LCB1bmxvY2tzIHRoZSBkZXZpY2UgbG9jayB2aWEgYG5ldGRldl91bmxvY2tfb3BzYCBhbmQgZGVjcmVtZW50cyB0aGUgZGV2aWNlJ3MgcmVmZXJlbmNlIGNvdW50LiBDcml0aWNhbGx5LCBpZiBgZXJyYCBpcyB6ZXJvLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgd2VudCBzbW9vdGhseSwgYSBgc21wX3dtYigpYCBpcyB1c2VkIHRvIGVuc3VyZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHRoZSBzdGF0ZSBpcyBhdG9taWNhbGx5IHNldCB0byBgWFNLX0JPVU5EYC4gSXQgdGhlbiBjbGVhbnMgdXAgYnkgcmVsZWFzaW5nIHRoZSBkZXZpY2UuIEZpbmFsbHksIHRoZSBSVE5MIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCBgeHNrX2JpbmRgIGhhbmRsZXMgZGV2aWNlIGF0dGFjaG1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgbmVjZXNzYXJ5IGxvY2tpbmcgdG8gZ3VhcmFudGVlIHRocmVhZCBzYWZldHkgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZXhhbWluZSBgeHNrX3JlbGVhc2VgLiBJIGNhbiBzZWUgdGhhdCBgeHNrX3JlbGVhc2VgIGhhbmRsZXMgdGhlIHVuYmluZGluZyBvZiB0aGUgc29ja2V0IGZyb20gYSBuZXR3b3JrIGRldmljZSwgYW5kIHRoZSBjbGVhbnVwIHByb2Nlc3MgYWZ0ZXIgdGhlIHNvY2tldCBpcyBjbG9zZWQuIEZpcnN0bHksIGl0IGxvY2tzIGBuZXQtXHUwMDNleGRwLmxvY2tgIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBYRFAgc3RydWN0dXJlcywgYmVmb3JlIGl0IGRlbGV0ZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBuZXR3b3JrJ3MgWERQIHRyYWNraW5nLCB0aGVuIGl0IHVubG9ja3MuIFRoZSByb3V0aW5lIHRoZW4gZGlzYWJsZXMgQkhzIChib3R0b20gaGFsdmVzKSBhbmQgZGVjcmVtZW50cyB0aGUgc29ja2V0J3MgdXNhZ2UgY291bnQgd2l0aCBgc29ja19wcm90X2ludXNlX2FkZGAuIFRoZSBzb2NrZXQncyBpbnRlcm5hbCBtYXBzIGFyZSB0aGVuIGNsZWFuZWQgdXAgd2l0aCBgeHNrX2RlbGV0ZV9mcm9tX21hcHNgLiBOZXh0LCB0aGVyZSdzIGEgbG9jayBvbiBgeHMtXHUwMDNlbXV0ZXhgIHRvIHByb3RlY3QgdGhlIFhTSyBzb2NrZXQsIHRoZW4gYHhza191bmJpbmRfZGV2YCBpcyBjYWxsZWQuIEZpbmFsbHksIHRoZSBgeHMtXHUwMDNlbXV0ZXhgIGlzIHVubG9ja2VkLiBUaGVyZSdzIGFsc28gYSBjYWxsIHRvIGB4c2tfemNfY3FfdG1wX3JpbmdfY2xlYW5gIHdoaWNoIEkgd2lsbCBpbnZlc3RpZ2F0ZS5cblxuU28sIGB4c2tfcmVsZWFzZWAgZW5jYXBzdWxhdGVzIHRoZSB0ZWFyZG93biBwcm9jZXNzOiByZW1vdmluZyB0aGUgc29ja2V0IGZyb20gWERQIGRhdGEgc3RydWN0dXJlcywgcmVkdWNpbmcgdGhlIHNvY2tldCdzIHVzYWdlLCBjbGVhbmluZyB1cCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgYWN0dWFsIHVuYmluZGluZyBmcm9tIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB3aGF0IGB4c2tfdW5iaW5kX2RldmAgZG9lcy4gSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoyMi45NDMxNTc4NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM3MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza191bmJpbmRfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNDUyPXN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQ2OS1cXG5uZXQveGRwL3hzay5jOjE0NzA6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE0NzEte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNTMwPXN0YXRpYyBpbnQgeHNrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmM6MTU1MjpcXHR4c2tfdW5iaW5kX2Rldih4cyk7XFxubmV0L3hkcC94c2suYy0xNTUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjEwMT1zdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMTktXFxubmV0L3hkcC94c2suYzoyMTIwOlxcdFxcdFxcdFxcdHhza191bmJpbmRfZGV2KHhzKTtcXG5uZXQveGRwL3hzay5jLTIxMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjIyLjk4NzYwMzcxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5MDI4MjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgeHNrX3VuYmluZF9kZXZgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHhza191bmJpbmRfZGV2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdW5iaW5kaW5nIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWERQIHNvY2tldHMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLlxuXG5JIGltbWVkaWF0ZWx5IHdhbnQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIFhEUCBzb2NrZXTigJlzIHN0YXRlLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIGlzc3VlcyB3aXRoIGdyYWNlZnVsbHkgaGFuZGxpbmcgZGV2aWNlcyBiZWluZyB1bmJvdW5kIHdpdGhvdXQgcHJvcGVyIHNvY2tldCBub3RpZmljYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGhvbGRpbmcgYSByZWZlcmVuY2Ugb3Igd2FpdGluZyBmb3IgZGF0YS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgYWRkcmVzc2VzIHRoYXQuIERvZXMgaXQgc3luY2hyb25pemUgd2l0aCBhbnkgdXNlci1zcGFjZSB0aHJlYWRzPyBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyBhcmUgdGhleSB1c2VkPyBBbnkgaW50ZXJydXB0IGRpc2FibGUvZW5hYmxlIHNlcXVlbmNlcyB0aGF0IG5lZWQgZXh0cmEgYXR0ZW50aW9uP1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVuYmluZCBmYWlscyBwYXJ0d2F5IHRocm91Z2g/IERvZXMgaXQgYXR0ZW1wdCB0byByb2xsIGJhY2s/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IEkgd2FudCB0byBzZWUgaWYgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlLCBzYXksIHRoZSBYRFAgc29ja2V0IHRhYmxlIGlzIGNvcnJ1cHRlZCBvciB0aGUgYXNzb2NpYXRlZCBtZW1vcnkgcmVnaW9ucyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgZm9yIHNvbWUgcmVhc29uLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYHhza191bWVtYCBhbmQgaG93IHRoZXkncmUgZnJlZWQgb3IgcmVsZWFzZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBhbiBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQ/IFRoaXMgd2lsbCBhbHNvIGluY2x1ZGUgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3VjaCBhcyB0aGUgYHhza19zb2NrZXRgLCBgeHNrX3VtZW1gLCBhbmQgYG5ldF9kZXZpY2VgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgaG93IHRoZXkgcHJldmVudCBkYW5nbGluZyBwb2ludGVycy4gQWxzbywgd2hlcmUgaXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgc29ja2V0IGluY3JlYXNlZC9kZWNyZWFzZWQ/IFxuXG5GaW5hbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIERvZXMgaXQgcHJvcGVybHkgYWNjb3VudCBmb3IgbXVsdGlwbGUgWERQIHNvY2tldHMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgZGV2aWNlPyBJIG5lZWQgdG8gcmV2aWV3IGFueSBjcml0aWNhbCBzZWN0aW9ucyBjYXJlZnVsbHkuIFRoaXMgaXMgYWxsIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUga2VybmVsJ3MgdW5iaW5kIHByb2Nlc3MgYW5kIGhvdyBpdCBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGVzIFhEUCBzb2NrZXRzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MzQuMDc3ODg5NzE3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NzA6XFx0c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcXG4xNDcxOlxcdHtcXG4xNDcyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19CT1VORClcXG4xNDc1OlxcdFxcdFxcdHJldHVybjtcXG4xNDc2OlxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZXN0YXRlLCBYU0tfVU5CT1VORCk7XFxuMTQ3NzpcXHRcXG4xNDc4OlxcdFxcdC8qIFdhaXQgZm9yIGRyaXZlciB0byBzdG9wIHVzaW5nIHRoZSB4ZHAgc29ja2V0LiAqL1xcbjE0Nzk6XFx0XFx0eHBfZGVsX3hzayh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbjE0ODA6XFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuMTQ4MTpcXHRcXHRkZXZfcHV0KGRldik7XFxuMTQ4MjpcXHR9XFxuMTQ4MzpcXHRcXG4xNDg0OlxcdHN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbjE0ODU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqKm1hcF9lbnRyeSlcXG4xNDg2OlxcdHtcXG4xNDg3OlxcdFxcdHN0cnVjdCB4c2tfbWFwICptYXAgPSBOVUxMO1xcbjE0ODg6XFx0XFx0c3RydWN0IHhza19tYXBfbm9kZSAqbm9kZTtcXG4xNDg5OlxcdFxcbjE0OTA6XFx0XFx0Km1hcF9lbnRyeSA9IE5VTEw7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0X2xvY2spO1xcbjE0OTM6XFx0XFx0bm9kZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0LCBzdHJ1Y3QgeHNrX21hcF9ub2RlLFxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0XFx0bm9kZSk7XFxuMTQ5NTpcXHRcXHRpZiAobm9kZSkge1xcbjE0OTY6XFx0XFx0XFx0YnBmX21hcF9pbmMoXFx1MDAyNm5vZGUtXFx1MDAzZW1hcC1cXHUwMDNlbWFwKTtcXG4xNDk3OlxcdFxcdFxcdG1hcCA9IG5vZGUtXFx1MDAzZW1hcDtcXG4xNDk4OlxcdFxcdFxcdCptYXBfZW50cnkgPSBub2RlLVxcdTAwM2VtYXBfZW50cnk7XFxuMTQ5OTpcXHRcXHR9XFxuMTUwMDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0X2xvY2spO1xcbjE1MDE6XFx0XFx0cmV0dXJuIG1hcDtcXG4xNTAyOlxcdH1cXG4xNTAzOlxcdFxcbjE1MDQ6XFx0c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG4xNTA1OlxcdHtcXG4xNTA2OlxcdFxcdC8qIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBYRFAgc29ja2V0IGZyb20gYWxsIHRoZVxcbjE1MDc6XFx0XFx0ICogbWFwcyBpdCByZXNpZGVzIGluLiBXZSBuZWVkIHRvIHRha2UgZXh0cmEgY2FyZSBoZXJlLCBkdWUgdG9cXG4xNTA4OlxcdFxcdCAqIHRoZSB0d28gbG9ja3MgaW52b2x2ZWQuIEVhY2ggbWFwIGhhcyBhIGxvY2sgc3luY2hyb25pemluZ1xcbjE1MDk6XFx0XFx0ICogdXBkYXRlcyB0byB0aGUgZW50cmllcywgYW5kIGVhY2ggc29ja2V0IGhhcyBhIGxvY2sgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzozNC4wNzc5OTgyNDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI5NjMzNTAyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEFCQkEgRGVhZGxvY2sgaW4gQUZfWERQIFNvY2tldCBCaW5kaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBORVRERVZfVU5SRUdJU1RFUmAgZXZlbnRzLiBJIHNlZSBpdCdzIGxvY2tpbmcgYHhzLVx1MDAzZW11dGV4YCBhbmQgdGhlbiBjYWxsaW5nIGB4cF9jbGVhcl9kZXZgLCB3aGljaCB0aGVuIGNhbGxzIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIE15IGNvbmNlcm4gaW1tZWRpYXRlbHkgc2hvb3RzIHVwIGJlY2F1c2UgdGhlIG9yZGVyIG9mIGxvY2sgYWNxdWlzaXRpb24gc2VlbXMgcmV2ZXJzZWQgY29tcGFyZWQgdG8gd2hhdCBJJ20gc2VlaW5nIGluIGB4c2tfYmluZGAuIEluIGB4c2tfbm90aWZpZXJgIGl0J3MgYHhzLVx1MDAzZW11dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHNgLCBidXQgdGhlIHBhdGNoIGZvciBgeHNrX2JpbmRgIHNlZW1zIHRvIGhhdmUgZmxpcHBlZCBpdCB0byBgbmV0ZGV2X2xvY2tfb3BzYCB0aGVuIGB4cy1cdTAwM2VtdXRleGAuXG5cblRoaXMgc2NyZWFtcyBBQkJBIGRlYWRsb2NrISBUbyBjb25maXJtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgYW5kIGxvY2tpbmcgaGVsZCB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBydW4uIEkga25vdyBgeHNrX25vdGlmaWVyYCBpcyB0cmlnZ2VyZWQgYnkgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHRoYXQgZXZlbnQgbm90aWZpY2F0aW9uIGhhcHBlbnMgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgYHJ0bmxfbG9ja2AuIGB4c2tfYmluZGAgYWxzbyBob2xkcyBgcnRubF9sb2NrYCBhdCBzb21lIHBvaW50LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgdHdvIHBvdGVudGlhbGx5IHJ1biBjb25jdXJyZW50bHk/IEV2ZW4gaWYgdGhleSBkb24ndCwgSSBrbm93IHRoZSBsb2NrZGVwIHRvb2wgaW4gdGhlIGtlcm5lbCBjYW4gZGV0ZWN0IEFCQkEgb3JkZXIgaW52ZXJzaW9ucyBldmVuIGlmIGEgY29tbW9uIGxvY2sgKGxpa2UgYHJ0bmxfbG9ja2ApIGlzIGhlbGQuXG5cblRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBhcyBpdCdzIGRpcmVjdGx5IHRvdWNoaW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyB3aXRoaW4gYHhza19iaW5kYCwgYSBrZXkgZnVuY3Rpb24gZm9yIEFGX1hEUCBzb2NrZXRzIHdoaWNoIGFyZSBhIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGZlYXR1cmUuIEFuZCB5ZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGVudmlyb25tZW50cy4gSSBjYW4gY3JlYXRlIEFGX1hEUCBzb2NrZXRzLCBiaW5kIHRoZW0gdG8gdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgdGhhdCdzIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBwcm9ibGVtYXRpYyBjb2RlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRpbmcuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzOlxuXG5JZiBgeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZYCwgYmVmb3JlLCBgZGV2YCB3YXNuJ3QgcmV0cmlldmVkLCBidXQgbm93LCBpdCByZXRyaWV2ZXMgYGRldmAgdXNpbmcgYGRldl9nZXRfYnlfaW5kZXgoKWAgYW5kIGxvY2tzIGl0IGJlZm9yZSBjaGVja2luZyBpZiBgeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZYC4gQWxzbywgb24gZXJyb3IsIGlmIGBkZXZgIHdhcyBub3QgTlVMTCwgaXQgd2lsbCB1bmxvY2sgYW5kIGBkZXZfcHV0KGRldilgLiBBbmQgZXZlbiBpZiBgZGV2YCBpcyBOVUxMLCBpdCBoYW5kbGVzIHRoYXQgY2FzZS5cblxuVGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdCBtb2RpZmllcyBjcml0aWNhbCBsb2NraW5nIGxvZ2ljIGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLlxuYFdvcnRoRnV6emluZyA9IHRydWUhYFxuXG5JIHNob3VsZCBjYXJlZnVsbHkgYW5hbHl6ZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIG5vdy4gSXQgbWVhbnMgSSd2ZSBnb3QgdG8gZmluZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGNoYW5nZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGlzIGB4c2tfYmluZGAgaW4gYG5ldC94ZHAveHNrLmNgLiBJcyBgeHNrX2JpbmRgIHNwZWNpZmljPyBZZXMsIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIEFGX1hEUCBzb2NrZXQgYmluZC4gSXQgaXMgbm90IHViaXF1aXRvdXMsIHdoaWNoIGlzIGdvb2QgZm9yIHRhcmdldGluZy4gSSBzZWUgZnJvbSB0aGUgY29kZSB0aGF0IGB4c2tfYmluZGAgaXMgY2FsbGVkIGJ5IGBiaW5kKClgIG9uIGFuIEFGX1hEUCBzb2NrZXQuIEkgd2FudCB0byBjaGVjayBmb3Igb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwsIGZvciBleGFtcGxlIGB4c2tfbm90aWZpZXJgLCBhbmQgYHhwX2NsZWFyX2RldmAgYW5kIGB4c2tfY3JlYXRlYCwgd2hpY2ggYXJlIGFsc28gaW4gYG5ldC94ZHAveHNrLmNgLlxuSSBrbm93IGB4c2tfYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBiZWNhdXNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgeHNrX3Byb3RvX29wcy5iaW5kYCwgSSBjYW4gYmUgcHJldHR5IHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0IGF3YXksIHNvIGl0IHNob3VsZCBzdGlsbCBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguXG5JIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGhhdmUgYSBzeW1ib2wgd2hlbiBjb21waWxlZC5cbk5vdywgd2hhdCBhYm91dCBgeHNrX25vdGlmaWVyYD8gVGhhdCdzIHRoZSBvdGhlciBwbGFjZSB3aXRoIGB4cy1cdTAwM2VtdXRleGAgYW5kIGBuZXRkZXZfbG9ja19vcHNgLlxuV2hhdCBhYm91dCBgeHBfY2xlYXJfZGV2YD9cbldoYXQgYWJvdXQgYHhza19jcmVhdGVgP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODowNy4wNDEzNTExNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTc1NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxNjktXFxubmV0L3hkcC94c2suYzoyMTcwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxNzEtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jPTIyMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHhza19mYW1pbHlfb3BzID0ge1xcbm5ldC94ZHAveHNrLmMtMjIxOC1cXHQuZmFtaWx5ID0gUEZfWERQLFxcbm5ldC94ZHAveHNrLmM6MjIxOTpcXHQuY3JlYXRlID0geHNrX2NyZWF0ZSxcXG5uZXQveGRwL3hzay5jLTIyMjAtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MDcuNTM3MTEzMjU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MTc0MjU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgYHhza19iaW5kYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiBiZWluZyBkaXJlY3RseSBtb2RpZmllZCwgY29uZmlybWVkIGJ5IHJlZmVyZW5jaW5nIFNlY3Rpb24gNCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IFwiZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZC5cIiBTbywgaXMgYHhza19iaW5kYCBlbm91Z2gsIG9yIGFyZSB0aGVyZSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGB4c2tfcmVsZWFzZWAgdGhhdCBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkPyBObywganVzdCBgeHNrX2JpbmRgIHNpbmNlIHRoYXQgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSBhbmQgYmUgcmVhY2hhYmxlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAuIEFoLCB0aGVyZSBpdCBpczogYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub2AgYW5kIGB4c2tfYnVmZl9wb29sLm9gLlxuXG5BbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZSB0ZWxscyB1czpcbmBgYFxuY29uZmlnIFhEUF9TT0NLRVRTXG5cdGJvb2wgXCJYRFAgc29ja2V0c1wiXG5cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcblx0ZGVmYXVsdCBuXG5cdGhlbHBcblx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG5gYGBcblNvLCBgWERQX1NPQ0tFVFNgIGlzIHdoYXQgd2UgbmVlZC4gSG93ZXZlciwgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIHJpZ2h0PyBXZSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGF0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODoxNi4zNTQ1NDE5OTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjY5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODoxNi40MDY4MTc3NzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ0MzY2NzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUgLSBMaW5lIGJ5IExpbmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9LY29uZmlnYC4gTGV0J3MgZm9jdXMgb24gbGluZXMgMzAgdGhyb3VnaCA1MC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIHdpdGhpbiB0aGlzIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNodW5rIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggc3BlY2lmaWMgQlBGIGZlYXR1cmVzIG9yIHBvc3NpYmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGlzIGNvbnRleHQgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UuIEknbGwgcGF5IGF0dGVudGlvbiB0byB0aGUgYGNvbmZpZ2Aga2V5d29yZCwgZm9sbG93ZWQgYnkgdGhlIGZlYXR1cmUgbmFtZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCB0eXBlIG9mIG9wdGlvbiBpcyBiZWluZyBzZXQuIElzIHRoaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBpbnRgLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNyaXRpY2FsLCBzbyBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYmVpbmcgYXNzdW1lZC4gQW55IGBkZWZhdWx0YCB2YWx1ZXMgYXJlIGFsc28gb2YgaW50ZXJlc3QsIGFzIHRob3NlIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGNvbW1vbmx5LXVzZWQgb3IgaW50ZW5kZWQgY29uZmlndXJhdGlvbnMuIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgaGVscCB0ZXh0LCB0aGF0IGlzIHByb3ZpZGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBwcm92aWRlcyBmdXJ0aGVyIGluc2lnaHQgaW50byB0aGUgcHVycG9zZSBvciBwb3RlbnRpYWwgdXNlIGNhc2VzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdhaW4gYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgaW4gdGhpcyBibG9jaywgdGhlaXIgZGVmYXVsdHMsIGRlcGVuZGVuY2llcywgYW5kIGludGVuZGVkIHVzYWdlLCB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGVtIG9yIGhvdyB0aGV5IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MjIuODUwNDg3OTM2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MjIuODUwNTU2OTQ2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMDk3ODk1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGVCUEYgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIGBCUEZfU1lTQ0FMTGAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBzZWxmLWNvbnRhaW5lZCBhcyBmYXIgYXMgZGVwZW5kZW5jaWVzIGdvLiBJdCBkb2Vzbid0IHJlbHkgb24gYW55dGhpbmcgZWxzZSBiZWluZyBlbmFibGVkLCBvdGhlciB0aGFuLCB3ZWxsLCBiZWluZyBzZWxlY3RlZCBmcm9tIHdpdGhpbiB0aGUgbWVudWNvbmZpZy4gTm93LCBgWERQX1NPQ0tFVFNgLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmRvZXMqIGRlcGVuZCBvbiBgQlBGX1NZU0NBTExgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZm91bmRhdGlvbmFsIGluZnJhc3RydWN0dXJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGJ1aWxkIHRoZSBYRFAgc29ja2V0IGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGdvdGNoYXMsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgWERQIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVybmFsIGAjaWZkZWZgIGJsb2NrcyBvciBhbnkgb3RoZXIgc3VidGxlIHJlcXVpcmVtZW50cyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBObyBzdXJwcmlzZXMsIHBsZWFzZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjI4Ljk2MDM0OTQzOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTEyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xMzE5PXN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMyMC17XFxubmV0L3hkcC94c2suYzoxMzIxOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbm5ldC94ZHAveHNrLmMtMTMyMi1cXHQvKiBQcmVmZXIgYnVzeS1wb2xsaW5nLCBza2lwIHRoZSB3YWtldXAuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjI5LjAwNzg2NDQ1OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIzMTI1NTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYU0sgQ29tcGlsYXRpb24gQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gYXNwZWN0IG9mIFhEUCBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEZpcnN0LCBJIGNoZWNrZWQgaW5zaWRlIGBuZXQveGRwL3hzay5jYCBkaXJlY3RseS4gVGhlIG9ubHkgYCNpZmRlZmAgSSBmb3VuZCB3YXMgZm9yIGBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTGAsIHdoaWNoIGlzIGNsZWFybHkgbm90IHJlbGV2YW50IHRvIGB4c2tfYmluZGAuIFRoYXQncyBhIHJlZCBoZXJyaW5nLiBOb3csIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAgLSB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMuXG5cbkxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMsIGl0J3MgcHJldHR5IGNsZWFyOiBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vYCBhbmQsIGNydWNpYWxseSwgYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrX2J1ZmZfcG9vbC5vYC4gVGhpcyBwb2ludHMgdG8gdGhlIG1vZHVsZXMgdGhhdCBhcmUgcHVsbGVkIGluIHdoZW4gWERQIHNvY2tldHMgYXJlIGVuYWJsZWQgdmlhIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBgbmV0L3hkcC9gIGl0c2VsZiBpcyBpbmNsdWRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNsdXNpb24gcGF0aCBiYWNrLCBzbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L01ha2VmaWxlYCB0byBzZWUgaG93IHRoYXQgZGlyZWN0b3J5IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGxpbmtlZCBkdXJpbmcgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgTWFrZWZpbGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgZGVwZW5kZW5jeSBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NDYuMjM5MTIzMjYxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyNDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT03Mj1vYmotJChDT05GSUdfTkVUX05DU0kpXFx0XFx0Kz0gbmNzaS9cXG5uZXQvTWFrZWZpbGU6NzM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKVxcdCs9IHhkcC9cXG5uZXQvTWFrZWZpbGUtNzQtb2JqLSQoQ09ORklHX01QVENQKVxcdFxcdCs9IG1wdGNwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODo0Ni4yODQ5NTM1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMjA1OTczMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBTb2NrZXQgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYG5ldC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgWERQIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBcIlhEUF9TT0NLRVRTXCIgYW5kIFwiQlBGX1NZU0NBTExcIi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEFoLCBJIHNlZSwgdGhleSdyZSBjaGFuZ2luZyB0aGUgbG9ja2luZyBvcmRlciB3aXRoaW4gYHhza19iaW5kKClgLiBQcmV2aW91c2x5LCB0aGUgbXV0ZXggYHhzLVx1MDAzZW11dGV4YCB3YXMgbG9ja2VkICpiZWZvcmUqIHRoZSBuZXR3b3JrIGRldmljZSBsb2NrLCBhbmQgbm93IGl0J3MgcmV2ZXJzZWQsIGFuZCB0aGVyZSBhcmUgc29tZSBkZXZpY2UgbG9va3VwIGNoYW5nZXMgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgcGxhY2UgdG8gYmUgY2FyZWZ1bC5cblxuUmlnaHQsIEFGX1hEUCBzb2NrZXRzIGFyZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyB0aGUgc3RhbmRhcmQgYHNvY2tldChBRl9YRFAsIC4uLilgIGFuZCBgYmluZCgpYCBjYWxscy4gVGhpcyBpcyAqZWFzaWx5KiByZWFjaGFibGUsIGFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gVGhpcyBtZWFucyBhIHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBlYXNpbHkgYmUgZXhwbG9pdGVkLlxuXG5HaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGxvY2sgb3JkZXIgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgb2J2aW91c2x5LCBgeHNrX2JpbmRgLiBBbmQsIHdlIG5lZWQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA4NywiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NTguNDkwOTI5NTAxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MDczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODo1OC41NzAzNDU4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgzMzQ5NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjU4LjU3MDg4MjY4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjE4MzI5NTM3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4wYTQxMDZlOThiY2FhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTE2MTIsMjAgKzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRydG5sX2xvY2soKTtcbitcbitcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVx1MDAzZXN4ZHBfaWZpbmRleCk7XG4rXHRpZiAoZGV2KVxuK1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuIFx0aWYgKHhzLVx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xuIFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuIFx0aWYgKCFkZXYpIHtcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdFx0Z290byBvdXRfcmVsZWFzZTtcbiBcdH1cbiBcbi1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuLVxuIFx0aWYgKCF4cy1cdTAwM2VyeCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXR4KSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzYyLDE4ICsxNzY0LDIwIEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X3B1dChkZXYpO1xuLVx0fSBlbHNlIHtcbitcdGlmICghZXJyKSB7XG4gXHRcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cbiBcdFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxuIFx0XHQgKi9cbiBcdFx0c21wX3dtYigpO1xuIFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpO1xuIFx0fVxuLVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiBvdXRfcmVsZWFzZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4rXHRpZiAoZGV2KSB7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuK1x0fVxuIFx0cnRubF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NTguNTcwODgzOVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDkyNDUxOTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCB0aGUgY29kZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgbmV0L3hkcC94c2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHhza19iaW5kKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgeHNrX2JpbmQoKWAgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBwcm9wZXIgdmlldyBvZiB0aGUgY29kZSBpbiBjb250ZXh0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjIzLjQ5NTQwNjczNloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjA1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYwNTpcXHRcXHRmbGFncyA9IHN4ZHAtXFx1MDAzZXN4ZHBfZmxhZ3M7XFxuMTYwNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcXG4xNjA3OlxcdFxcdFxcdCAgICAgIFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfVVNFX1NHKSlcXG4xNjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDk6XFx0XFxuMTYxMDpcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuMTYxMTpcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2IGJvdW5kX2Rldl9pZiAhPSBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpXFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbjE2MTc6XFx0XFx0aWYgKGRldilcXG4xNjE4OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE2MjE6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4xNjIyOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNjIzOlxcdFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuMTYyNDpcXHRcXHR9XFxuMTYyNTpcXHRcXG4xNjI2OlxcdFxcdGlmICghZGV2KSB7XFxuMTYyNzpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4xNjI5OlxcdFxcdH1cXG4xNjMwOlxcdFxcbjE2MzE6XFx0XFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbjE2MzI6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjM0OlxcdFxcdH1cXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0cWlkID0gc3hkcC1cXHUwMDNlc3hkcF9xdWV1ZV9pZDtcXG4xNjM3OlxcdFxcbjE2Mzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgWERQX1NIQVJFRF9VTUVNKSB7XFxuMTYzOTpcXHRcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHM7XFxuMTY0MDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbjE2NDE6XFx0XFxuMTY0MjpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgWERQX0NPUFkpIHx8IChmbGFncyBcXHUwMDI2IFhEUF9aRVJPQ09QWSkgfHxcXG4xNjQzOlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX05FRURfV0FLRVVQKSB8fCAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX1NHKSkge1xcbjE2NDQ6XFx0XFx0XFx0XFx0LyogQ2Fubm90IHNwZWNpZnkgZmxhZ3MgZm9yIHNoYXJlZCBzb2NrZXRzLiAqL1xcbjE2NDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjQ3OlxcdFxcdFxcdH1cXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0aWYgKHhzLVxcdTAwM2V1bWVtKSB7XFxuMTY1MDpcXHRcXHRcXHRcXHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cXG4xNjUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTY1MjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY1MzpcXHRcXHRcXHR9XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdFxcdHNvY2sgPSB4c2tfbG9va3VwX3hza19mcm9tX2ZkKHN4ZHAtXFx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xcbjE2NTY6XFx0XFx0XFx0aWYgKElTX0VSUihzb2NrKSkge1xcbjE2NTc6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcXG4xNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjU5OlxcdFxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0XFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVxcdTAwM2Vzayk7XFxuMTY2MjpcXHRcXHRcXHRpZiAoIXhza19pc19ib3VuZCh1bWVtX3hzKSkge1xcbjE2NjM6XFx0XFx0XFx0XFx0ZXJyID0gLUVCQURGO1xcbjE2NjQ6XFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG4xNjY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjY2OlxcdFxcdFxcdH1cXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0XFx0aWYgKHVtZW1feHMtXFx1MDAzZXF1ZXVlX2lkICE9IHFpZCB8fCB1bWVtX3hzLVxcdTAwM2VkZXYgIT0gZGV2KSB7XFxuMTY2OTpcXHRcXHRcXHRcXHQvKiBPbmUgZmlsbCBhbmQgY29tcGxldGlvbiByaW5nIHJlcXVpcmVkIGZvciBlYWNoIHF1ZXVlIGlkLiAqL1xcbjE2NzA6XFx0XFx0XFx0XFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xcbjE2NzE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjcyOlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY3NDpcXHRcXHRcXHRcXHR9XFxuMTY3NTpcXHRcXG4xNjc2OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcXG4xNjc3OlxcdFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuMTY3ODpcXHRcXHRcXHRcXHQgKi9cXG4xNjc5OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcXG4xNjgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4xNjgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbjE2ODI6XFx0XFx0XFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbjE2ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNjg0OlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdFxcdFxcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVxcdTAwM2Vwb29sLCB1bWVtX3hzLCBkZXYsXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxaWQpO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjE2OTE6XFx0XFx0XFx0XFx0XFx0eHBfZGVzdHJveSh4cy1cXHUwMDNlcG9vbCk7XFxuMTY5MjpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuMTY5MzpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE2OTU6XFx0XFx0XFx0XFx0fVxcbjE2OTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xNjk3OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXFxuMTY5ODpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWZxX3RtcCB8fCB4cy1cXHUwMDNlY3FfdG1wKSB7XFxuMTY5OTpcXHRcXHRcXHRcXHRcXHQvKiBEbyBub3QgYWxsb3cgc2V0dGluZyB5b3VyIG93biBmcSBvciBjcS4gKi9cXG4xNzAwOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcwMTpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE3MDI6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE3MDM6XFx0XFx0XFx0XFx0fVxcbjE3MDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjIzLjQ5NTUzMjk5NloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTY5NzEwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4c2tfYmluZGAqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGB4c2tfYmluZGAgYXJvdW5kIGxpbmUgMTc1MC0xNzg1LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzLiBUaGVyZSdzIHByb2JhYmx5IHNvbWUgY3J1Y2lhbCBsb2dpYyBpbiB0aGVyZSB0aGF0IEknbSBtaXNzaW5nLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIG5vdy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJucyB0aGUgYmluZGluZyBwcm9jZXNzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwsIHRvIHNlZSB3aGF0IGlzc3VlcyBhcmUgYW50aWNpcGF0ZWQgYW5kIGhvdyB0aGV5IGFyZSBhZGRyZXNzZWQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOToyOC4wNjUyNDY3MjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHRcXHR4cy1cXHUwMDNlY3FfdG1wID0gTlVMTDtcXG4xNzUxOlxcdFxcbjE3NTI6XFx0XFx0eHMtXFx1MDAzZWRldiA9IGRldjtcXG4xNzUzOlxcdFxcdHhzLVxcdTAwM2V6YyA9IHhzLVxcdTAwM2V1bWVtLVxcdTAwM2V6YztcXG4xNzU0OlxcdFxcdHhzLVxcdTAwM2VzZyA9ICEhKHhzLVxcdTAwM2V1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xcbjE3NTU6XFx0XFx0eHMtXFx1MDAzZXF1ZXVlX2lkID0gcWlkO1xcbjE3NTY6XFx0XFx0eHBfYWRkX3hzayh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbjE3NTc6XFx0XFxuMTc1ODpcXHRcXHRpZiAocWlkIFxcdTAwM2MgZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG4xNzU5OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cTtcXG4xNzYwOlxcdFxcbjE3NjE6XFx0XFx0XFx0cnhxID0gX19uZXRpZl9nZXRfcnhfcXVldWUoZGV2LCBxaWQpO1xcbjE3NjI6XFx0XFx0XFx0aWYgKHJ4cS1cXHUwMDNlbmFwaSlcXG4xNzYzOlxcdFxcdFxcdFxcdF9fc2tfbWFya19uYXBpX2lkX29uY2Uoc2ssIHJ4cS1cXHUwMDNlbmFwaS1cXHUwMDNlbmFwaV9pZCk7XFxuMTc2NDpcXHRcXHR9XFxuMTc2NTpcXHRcXG4xNzY2OlxcdG91dF91bmxvY2s6XFxuMTc2NzpcXHRcXHRpZiAoIWVycikge1xcbjE3Njg6XFx0XFx0XFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxcbjE3Njk6XFx0XFx0XFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxcbjE3NzA6XFx0XFx0XFx0ICovXFxuMTc3MTpcXHRcXHRcXHRzbXBfd21iKCk7XFxuMTc3MjpcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcXG4xNzczOlxcdFxcdH1cXG4xNzc0OlxcdG91dF9yZWxlYXNlOlxcbjE3NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE3NzY6XFx0XFx0aWYgKGRldikge1xcbjE3Nzc6XFx0XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4xNzc4OlxcdFxcdFxcdGlmIChlcnIpXFxuMTc3OTpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXHRydG5sX3VubG9jaygpO1xcbjE3ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4xNzgzOlxcdH1cXG4xNzg0OlxcdFxcbjE3ODU6XFx0c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuMTc4NjpcXHRcXHRfX3U2NCBhZGRyOyAvKiBTdGFydCBvZiBwYWNrZXQgZGF0YSBhcmVhICovXFxuMTc4NzpcXHRcXHRfX3U2NCBsZW47IC8qIExlbmd0aCBvZiBwYWNrZXQgZGF0YSBhcmVhICovXFxuMTc4ODpcXHRcXHRfX3UzMiBjaHVua19zaXplO1xcbjE3ODk6XFx0XFx0X191MzIgaGVhZHJvb207XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjI4LjA2NTM1NTQ2MVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTA2MDU0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWFNLIEJpbmQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4c2suY2AgZGlmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlIHdpdGhpbiB0aGUgWFNLIChlWHByZXNzIERhdGEgUGF0aCBTb2NrZXRzKSBiaW5kaW5nIHByb2Nlc3MuIFRoZSBvbGQgb3JkZXIgb2YgbG9ja2luZyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNyZWF0ZSBhIGxvY2sgaW52ZXJzaW9uIHNjZW5hcmlvLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgZGV2YCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGxvY2tpbmcgYHhzLVx1MDAzZW11dGV4YC4gUHJldmlvdXNseSwgdGhlIGxvY2sgb3JkZXIgd2FzIGBydG5sX2xvY2tgLCBgeHMtXHUwMDNlbXV0ZXhgLCBhbmQgKnRoZW4qIHRoZSBgbmV0ZGV2YCBsb2NrLiBOb3csIHRoZSBgbmV0ZGV2YCBsb2NrIGlzIGFjcXVpcmVkICpiZWZvcmUqIGB4cy1cdTAwM2VtdXRleGAgYW5kIHVubG9ja2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG5TbywgdGhlIHByZXZpb3VzIGNvZGUgaGFkIGEgY3JpdGljYWwgc2VjdGlvbiB3aGVyZSBib3RoIGB4cy1cdTAwM2VtdXRleGAgYW5kIHRoZSBgbmV0ZGV2YCBsb2NrIHdlcmUgaGVsZCBzaW11bHRhbmVvdXNseSwgd2l0aCB0aGUgbmV0ZGV2IGxvY2sgYWNxdWlyZWQgYWZ0ZXIgeHMtXHUwMDNlbXV0ZXguXG5cblRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgYXR0ZW1wdCB0byBwcmV2ZW50IGEgZGVhZGxvY2ssIHJpZ2h0PyBUaGUgZ29hbCBoZXJlIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgdGhlIGxvY2tpbmcgaGllcmFyY2h5IHRvIGF2b2lkIHRoYXQgaW52ZXJzaW9uLCBpLmUuLCBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIHR3byB0aHJlYWRzIGFyZSBlYWNoIHdhaXRpbmcgZm9yIGEgbG9jayBoZWxkIGJ5IHRoZSBvdGhlciwgYW5kIHRodXMgYmxvY2tpbmcgaW5kZWZpbml0ZWx5LiBUaGUgbmV3IG9yZGVyIGlzIGRlc2lnbmVkIHRvIGJlIG1vcmUgcm9idXN0LiBJZiBpdCB3YXMgaW50cm9kdWNlZCB0aGlzIHdheSwgdGhlbiB0aGUgbG9jayBvcmRlciBpczpcblxuMS4gYHJ0bmxfbG9ja2BcbjIuIGBkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KC4uLilgXG4zLiBgbmV0ZGV2X2xvY2tfb3BzKGRldilgXG40LiBgbXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleClgXG5cbndoaWNoIGxvb2tzIG11Y2ggYmV0dGVyLlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGxvb2sgYXQgcmVsYXRlZCBwYXRjaGVzLiBJIG5lZWQgdG8gZmluZCB0aGUgY29tbWl0IG1lc3NhZ2Ugb3IgcmVsYXRlZCBpc3N1ZXMgdG8gZ2V0IHRoZSBjb250ZXh0IGJlaGluZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kICpjb25maXJtKiBpdCB3YXMgaW5kZWVkIGEgZGVhZGxvY2sgZml4LiBQcm9iYWJseSB0aGVyZSdzIGFub3RoZXIgcGF0Y2ggaW4gdGhlIGhpc3RvcnkgcmVsYXRlZCB0byB0aGlzIG9uZS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgY29tbWl0IHdoaWNoIGFkZHJlc3NlcyB0aGUgbG9jayBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjM3Ljk3MTQxMzAzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQxOTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNy1cXHRpZiAoZGV2KVxcbm5ldC94ZHAveHNrLmM6MTYxODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQveGRwL3hzay5jLTE2MTktXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3OlxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6MzguMDMzODM4OTk5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDc3ODUwODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTG9ja2luZyBpbiBYRFAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYHhzLVx1MDAzZW11dGV4YCBvciBgbmV0ZGV2X2xvY2tfb3BzYC4gSG1tLCBsZXQncyBzZWUuLi4gKmFoYSEqIEluIGB4cF9jbGVhcl9kZXZgLCB3aGljaCBJIGJlbGlldmUgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIG9yIHJlc2V0dGluZyBhIG5ldHdvcmsgZGV2aWNlLiBJIGtub3cgdGhhdCB0aGUgZnVuY3Rpb24gYHhwX2NsZWFyX2RldmAgYWNxdWlyZXMgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgcHJvYmFibHkgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCdzIGFsc28gbG9ja2luZyB0aGUgYHhza19idWZmX3Bvb2xgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHByb3RlY3Rpbmcgc2hhcmVkIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBYRFAgc29ja2V0cy4gUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgbG9vayBhdCBob3cgYHhwX2NsZWFyX2RldmAgZG9lcyB0aGlzLCBzbyBsZXQgbWUgb3BlbiB1cCBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgIGFuZCB0YWtlIGEgbG9vay4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgbG9ja3Mgd2l0aCB0aGVpciByZXNwZWN0aXZlIGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6NDguNTExNjkyNzY0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza19idWZmX3Bvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0cmV0dXJuIHhwX2Fzc2lnbl9kZXYocG9vbCwgZGV2LCBxdWV1ZV9pZCwgZmxhZ3MpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHR2b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMjkxOlxcdHtcXG4gMjkyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwb29sLVxcdTAwM2VuZXRkZXY7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlbmV0ZGV2KVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMjk4OlxcdFxcdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xcbiAyOTk6XFx0XFx0eHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHBvb2wtXFx1MDAzZW5ldGRldiwgcG9vbC1cXHUwMDNlcXVldWVfaWQpO1xcbiAzMDA6XFx0XFx0cG9vbC1cXHUwMDNlbmV0ZGV2ID0gTlVMTDtcXG4gMzAxOlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuIDMwMjpcXHRcXHRkZXZfcHV0KG5ldGRldik7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIHhwX3JlbGVhc2VfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHhza19idWZmX3Bvb2wsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRydG5sX2xvY2soKTtcXG4gMzExOlxcdFxcdHhwX2NsZWFyX2Rldihwb29sKTtcXG4gMzEyOlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChwb29sLVxcdTAwM2VmcSkge1xcbiAzMTU6XFx0XFx0XFx0eHNrcV9kZXN0cm95KHBvb2wtXFx1MDAzZWZxKTtcXG4gMzE2OlxcdFxcdFxcdHBvb2wtXFx1MDAzZWZxID0gTlVMTDtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZWNxKSB7XFxuIDMyMDpcXHRcXHRcXHR4c2txX2Rlc3Ryb3kocG9vbC1cXHUwMDNlY3EpO1xcbiAzMjE6XFx0XFx0XFx0cG9vbC1cXHUwMDNlY3EgPSBOVUxMO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHR4ZHBfcHV0X3VtZW0ocG9vbC1cXHUwMDNldW1lbSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOTo0OC41MTE3OTkxMTRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1MTM3NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2sgT3JkZXJpbmcgYW5kIENsZWFudXAgaW4gYHhza19iaW5kKClgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBsYXNlci1mb2N1c2VkIG9uIGxvY2sgb3JkZXJpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgeHNrX2JpbmQoKWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHZlcmlmaWNhdGlvbjogZG9lcyB0aGlzIGZ1bmN0aW9uIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gRG9lcyBpdCBjb3B5IGFueXRoaW5nIHNlbnNpdGl2ZSB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgYSBnb29kIHN0YXJ0IGFzIGl0J3MganVzdCBhIHN0YW5kYXJkIGBiaW5kKClgIHNvY2tldCBvcGVyYXRpb24uXG5cblNvLCB0aGlzIGB4c2tfYmluZCgpYCBmdW5jdGlvbiwgZGVmaW5lZCBhcyBgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKWAsIHRha2VzIHRoZSBgYWRkcmAgYW5kIGBhZGRyX2xlbmAgYXMgaW5wdXRzLiBJdOKAmXMgYWxsIGFib3V0IHNhbml0eSBjaGVja3MgYW5kIGxvY2sgYWNxdWlzaXRpb246IGBydG5sX2xvY2soKWAsIHRoZW4gaXQgZ3JhYnMgdGhlIGRldmljZSB1c2luZyBgZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KWAsIHN1YnNlcXVlbnRseSBsb2NraW5nIGl0IHdpdGggYG5ldGRldl9sb2NrX29wcyhkZXYpYC4gV2UgYWxzbyBoYXZlIGBtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAuXG5cblRoZW4gdGhlIGNvcmUgbG9naWMuIElmIHRoZSBYU0sgc3RhdGUgaXNuJ3QgcmVhZHksIHdlIGdldCAtRUJVU1kgYW5kIGp1bXAgb3V0LiBObyBkZXZpY2U/IC1FTk9ERVYgYW5kIGp1bXAgb3V0LiBObyBSWCBvciBUWCBxdWV1ZXM/IC1FSU5WQUwgYW5kIGp1bXAgb3V0LiBPdGhlcndpc2UsIGl0IHNldHMgdXAgdGhlIHF1ZXVlcywgcG9vbCwgYW5kIHNvIG9uLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogdGhlIHJlbGVhc2UgcGF0aC4gSWYgbm8gZXJyb3Igb2NjdXJyZWQsIGBXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpYC4gVGhlIHVubG9jayBzZXF1ZW5jZSBpcyBjcml0aWNhbCBoZXJlOiBgbXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAsIHRoZW4gY29uZGl0aW9uYWxseSB1bmxvY2sgdGhlIGRldmljZSB3aXRoIGBuZXRkZXZfdW5sb2NrX29wcyhkZXYpYCBhbmQgcHV0IHRoZSBkZXZpY2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIEZpbmFsbHksIGBydG5sX3VubG9jaygpYCBhbmQgdGhlIHJldHVybi5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoZWNrLiBUaGUgYGRldmAgaGFuZGxpbmcuLi4gYGRldmAgaXMgaW5pdGlhbGx5IGBOVUxMYD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgYGRldmAgaXMgYmVpbmcgaGFuZGxlZCwgc28gSSdtIGhlYWRpbmcgdG8gYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTU5MC0xNjE1LCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBsb2NrcyBhcmUgYmVpbmcgcmVsZWFzZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOTo1My4yNjMxNzcwNzhaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5MDpcXHRzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxuMTU5MTpcXHR7XFxuMTU5MjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfeGRwICpzeGRwID0gKHN0cnVjdCBzb2NrYWRkcl94ZHAgKilhZGRyO1xcbjE1OTM6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuMTU5NDpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcXG4xNTk1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMTU5NjpcXHRcXHRpbnQgYm91bmRfZGV2X2lmO1xcbjE1OTc6XFx0XFx0dTMyIGZsYWdzLCBxaWQ7XFxuMTU5ODpcXHRcXHRpbnQgZXJyID0gMDtcXG4xNTk5OlxcdFxcbjE2MDA6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl94ZHApKVxcbjE2MDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwMjpcXHRcXHRpZiAoc3hkcC1cXHUwMDNlc3hkcF9mYW1pbHkgIT0gQUZfWERQKVxcbjE2MDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGZsYWdzID0gc3hkcC1cXHUwMDNlc3hkcF9mbGFncztcXG4xNjA2OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IH4oWERQX1NIQVJFRF9VTUVNIHwgWERQX0NPUFkgfCBYRFBfWkVST0NPUFkgfFxcbjE2MDc6XFx0XFx0XFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxcbjE2MDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwOTpcXHRcXG4xNjEwOlxcdFxcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfYm91bmRfZGV2X2lmKTtcXG4xNjExOlxcdFxcdGlmIChib3VuZF9kZXZfaWYgXFx1MDAyNlxcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleClcXG4xNjEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MTM6XFx0XFxuMTYxNDpcXHRcXHRydG5sX2xvY2soKTtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleCk7XFxuMTYxNzpcXHRcXHRpZiAoZGV2KVxcbjE2MTg6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuMTYxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6NTMuMjYzMzUwODk4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxNDA0NjM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIFNlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGFuZCB0aGUga2V5IGxpbmVzLiBBdCBsaW5lIDE1OTUsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O2AgaXMgaW5kZWVkIHVuaW5pdGlhbGl6ZWQsIGJ1dCBsaW5lIDE2MTYgYXNzaWducyBpdCBpbW1lZGlhdGVseSB2aWEgYGRldiA9IGRldl9nZXRfYnlfaW5kZXgoLi4uKWAsIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSB1c2UuIFRoaXMgaXMgY3J1Y2lhbDsgdGhlIGNvZGUgZXN0YWJsaXNoZXMgYGRldmAgYmVmb3JlIGFueSByZWFkcyBvciBicmFuY2hlcyB0aGF0IHdvdWxkIHJlbHkgb24gaXRzIGluaXRpYWwgc3RhdGUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyLiBTcGVjaWZpY2FsbHksIHRoZSBvcmRlciBvZiBhY3F1aXJpbmcgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBhbmQgYHhzLVx1MDAzZW11dGV4YCBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIEFGX1hEUCBzb2NrZXQgYmluZCBwcm9jZXNzLiBUaGUgY29kZSB0aGVuIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBhbmQgZW5zdXJlcyByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5LiBUaGUgb3JpZ2luYWwgcGF0Y2ggbG9naWMgdGhlbiBleGVjdXRlcyBjaGVja3MgYW5kIHJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYXQgYG91dF9yZWxlYXNlYC5cblxuSSd2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBJdCdzICpub3QqIHRoZSBnby10byB0b29sIGZvciBsb2NrIG9yZGVyIGlzc3VlcywgZGVhZGxvY2tzLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRob3NlIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgdGhlIHVzdWFsIGRlYnVnZ2luZyB0b29scy5cblxuTm93LCBsZXQncyBtYXAgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2Vzbid0OlxuXG4xLiAgVG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBhcmUgaW52b2x2ZWQuXG4yLiAgSW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBkZXZgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGF3YXkuXG4zLiAgQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgSW50cm9kdWNlIGFueSBuZXcgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBsb2dpYyB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoaXMgaXMgYSByZW9yZGVyaW5nIG9mIGxvY2tzIHRvIHByZXZlbnQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBleGl0IHBhdGgsIGJ1dCB0aGlzIGlzIGhhbmRsZWQgYnkgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGFuZCBgZGV2X3B1dChkZXYpYC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIGRhdGEgcGF0aCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbnkgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBkZWFkbG9ja3MsIG9yIHJlZmVyZW5jZSBjb3VudCBidWdzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LiBNeSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NiwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDoxMDowMC40MDM4MTc5MjZaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbr8vp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 09:45:20 +0000 UTC FinishedAt: 2026-09-15 10:10:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "fd897794-4f0d-45f4-8e63-bcb526e0b175" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "base_tree": "bpf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyBsb2NraW5nIG9wZXJhdGlvbnMgaW4geHNrX2JpbmQoKSB0byBhY3F1aXJlIG5ldGRldl9sb2NrX29wcyhkZXYpIHByaW9yIHRvIHRha2luZyB4cy1cdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB4c2tfYmluZCgpIGluIG5ldC94ZHAveHNrLmMsIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGJldHdlZW4gbmV0ZGV2X2xvY2tfb3BzKCkgYW5kIHhzLVx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMGE0MTA2ZTk4YmNhYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC0xNjEyLDIwICYjNDM7MTYxMiwyMiBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuJiM0MztcdGlmIChkZXYpXG4mIzQzO1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbiBcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0fVxuIFxuLVx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbiBcdGlmICghZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbi1cbiBcdGlmICgheHMtXHUwMDNlcnggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2V0eCkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTc2MiwxOCAmIzQzOzE3NjQsMjAgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfcHV0KGRldik7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghZXJyKSB7XG4gXHRcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cbiBcdFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxuIFx0XHQgKi9cbiBcdFx0c21wX3dtYigpO1xuIFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpO1xuIFx0fVxuLVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiBvdXRfcmVsZWFzZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4mIzQzO1x0aWYgKGRldikge1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiYjNDM7XHR9XG4gXHRydG5sX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB4c2tfYmluZCgpIGluIG5ldC94ZHAveHNrLmMsIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGJldHdlZW4gbmV0ZGV2X2xvY2tfb3BzKCkgYW5kIHhzLVx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjBhNDEwNmU5OGJjYWEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMTYxMiwyMCAmIzQzOzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKIAlpZiAoeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKLQluZXRkZXZfbG9ja19vcHMoZGV2KTsKLQogCWlmICgheHMtJmd0O3J4ICZhbXA7JmFtcDsgIXhzLSZndDt0eCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNzYyLDE4ICYjNDM7MTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCX0KIAogb3V0X3VubG9jazoKLQlpZiAoZXJyKSB7Ci0JCWRldl9wdXQoZGV2KTsKLQl9IGVsc2UgewomIzQzOwlpZiAoIWVycikgewogCQkvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtCiAJCSAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS4KIAkJICovCiAJCXNtcF93bWIoKTsKIAkJV1JJVEVfT05DRSh4cy0mZ3Q7c3RhdGUsIFhTS19CT1VORCk7CiAJfQotCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiBvdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwomIzQzOwlpZiAoZGV2KSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CX0KIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBCaW5kIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHRydXN0eSBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCB0byBnZXQgYSBnb29kLCBjb250ZXh0dWFsIG92ZXJ2aWV3LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZCBhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3hkcCkpXG4xNjAxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwMjpcdFx0aWYgKHN4ZHAtXHUwMDNlc3hkcF9mYW1pbHkgIT0gQUZfWERQKVxuMTYwMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDQ6XHRcbjE2MDU6XHRcdGZsYWdzID0gc3hkcC1cdTAwM2VzeGRwX2ZsYWdzO1xuMTYwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcbjE2MDc6XHRcdFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxuMTYwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDk6XHRcbjE2MTA6XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuMTYxMTpcdFx0aWYgKGJvdW5kX2Rldl9pZiBcdTAwMjZcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KVxuMTYxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJ0bmxfbG9jaygpO1xuMTYxNTpcdFxuMTYxNjpcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbjE2MTc6XHRcdGlmIChkZXYpXG4xNjE4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuMTYxOTpcdFxuMTYyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xNjIxOlx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4xNjIyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjE2MjM6XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbjE2MjQ6XHRcdH1cbjE2MjU6XHRcbjE2MjY6XHRcdGlmICghZGV2KSB7XG4xNjI3Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4xNjI4Olx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRpZiAoIXhzLVx1MDAzZXJ4IFx1MDAyNlx1MDAyNiAheHMtXHUwMDNldHgpIHtcbjE2MzI6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2MzM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0cWlkID0gc3hkcC1cdTAwM2VzeGRwX3F1ZXVlX2lkO1xuMTYzNzpcdFxuMTYzODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBYRFBfU0hBUkVEX1VNRU0pIHtcbjE2Mzk6XHRcdFx0c3RydWN0IHhkcF9zb2NrICp1bWVtX3hzO1xuMTY0MDpcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTY0MTpcdFxuMTY0MjpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBYRFBfQ09QWSkgfHwgKGZsYWdzIFx1MDAyNiBYRFBfWkVST0NPUFkpIHx8XG4xNjQzOlx0XHRcdCAgICAoZmxhZ3MgXHUwMDI2IFhEUF9VU0VfTkVFRF9XQUtFVVApIHx8IChmbGFncyBcdTAwMjYgWERQX1VTRV9TRykpIHtcbjE2NDQ6XHRcdFx0XHQvKiBDYW5ub3Qgc3BlY2lmeSBmbGFncyBmb3Igc2hhcmVkIHNvY2tldHMuICovXG4xNjQ1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NDY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjQ3Olx0XHRcdH1cbjE2NDg6XHRcbjE2NDk6XHRcdFx0aWYgKHhzLVx1MDAzZXVtZW0pIHtcbjE2NTA6XHRcdFx0XHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cbjE2NTE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTY1MjpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE2NTM6XHRcdFx0fVxuMTY1NDpcdFxuMTY1NTpcdFx0XHRzb2NrID0geHNrX2xvb2t1cF94c2tfZnJvbV9mZChzeGRwLVx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xuMTY1NjpcdFx0XHRpZiAoSVNfRVJSKHNvY2spKSB7XG4xNjU3Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcbjE2NTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjU5Olx0XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVx1MDAzZXNrKTtcbjE2NjI6XHRcdFx0aWYgKCF4c2tfaXNfYm91bmQodW1lbV94cykpIHtcbjE2NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG4xNjY0Olx0XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjY2Olx0XHRcdH1cbjE2Njc6XHRcbjE2Njg6XHRcdFx0aWYgKHVtZW1feHMtXHUwMDNlcXVldWVfaWQgIT0gcWlkIHx8IHVtZW1feHMtXHUwMDNlZGV2ICE9IGRldikge1xuMTY2OTpcdFx0XHRcdC8qIE9uZSBmaWxsIGFuZCBjb21wbGV0aW9uIHJpbmcgcmVxdWlyZWQgZm9yIGVhY2ggcXVldWUgaWQuICovXG4xNjcwOlx0XHRcdFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xuMTY3MTpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NzI6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjczOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjc0Olx0XHRcdFx0fVxuMTY3NTpcdFxuMTY3NjpcdFx0XHRcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcbjE2Nzc6XHRcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuMTY3ODpcdFx0XHRcdCAqL1xuMTY3OTpcdFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuMTY4MDpcdFx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4xNjgxOlx0XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuMTY4MjpcdFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuMTY4MzpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2ODQ6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjg1Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjg2Olx0XHRcdFx0fVxuMTY4NzpcdFxuMTY4ODpcdFx0XHRcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVx1MDAzZXBvb2wsIHVtZW1feHMsIGRldixcbjE2ODk6XHRcdFx0XHRcdFx0XHQgICBxaWQpO1xuMTY5MDpcdFx0XHRcdGlmIChlcnIpIHtcbjE2OTE6XHRcdFx0XHRcdHhwX2Rlc3Ryb3koeHMtXHUwMDNlcG9vbCk7XG4xNjkyOlx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbjE2OTM6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjk0Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjk1Olx0XHRcdFx0fVxuMTY5NjpcdFx0XHR9IGVsc2Uge1xuMTY5NzpcdFx0XHRcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXG4xNjk4Olx0XHRcdFx0aWYgKHhzLVx1MDAzZWZxX3RtcCB8fCB4cy1cdTAwM2VjcV90bXApIHtcbjE2OTk6XHRcdFx0XHRcdC8qIERvIG5vdCBhbGxvdyBzZXR0aW5nIHlvdXIgb3duIGZxIG9yIGNxLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWx2aW5nIERlZXBlciBpbnRvIGB4c2tfYmluZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTc1MCB0byAxNzg1LiBJIG5lZWQgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgeHNrX2JpbmRgIGFjdHVhbGx5IGZ1bmN0aW9ucy4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIFhEUC9BRl9YRFAgbGFuZHNjYXBlLCBidXQgZGV0YWlscyBhcmUgY3J1Y2lhbCwgYW5kIHNvbWV0aW1lcyB0aGUgbnVhbmNlcyBhcmUgYnVyaWVkIGRlZXBlciB0aGFuIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNlZ21lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UsIG9yIGFueSBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byByZXZlYWwgdGhlIHJlbWFpbmluZyBzdGVwcyBvZiB0aGUgYmluZCwgcGVyaGFwcyB0aGUgc2V0dXAgb2YgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGl0c2VsZiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSB2aXN1YWxpemUgdGhlIG9wZXJhdGlvbmFsIHdvcmtmbG93IG9mIHRoaXMgZnVuY3Rpb24gdG8gdXNlIGFuZCBkZWJ1ZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHRcdHhzLVx1MDAzZWNxX3RtcCA9IE5VTEw7XG4xNzUxOlx0XG4xNzUyOlx0XHR4cy1cdTAwM2VkZXYgPSBkZXY7XG4xNzUzOlx0XHR4cy1cdTAwM2V6YyA9IHhzLVx1MDAzZXVtZW0tXHUwMDNlemM7XG4xNzU0Olx0XHR4cy1cdTAwM2VzZyA9ICEhKHhzLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xuMTc1NTpcdFx0eHMtXHUwMDNlcXVldWVfaWQgPSBxaWQ7XG4xNzU2Olx0XHR4cF9hZGRfeHNrKHhzLVx1MDAzZXBvb2wsIHhzKTtcbjE3NTc6XHRcbjE3NTg6XHRcdGlmIChxaWQgXHUwMDNjIGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbjE3NTk6XHRcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuMTc2MDpcdFxuMTc2MTpcdFx0XHRyeHEgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIHFpZCk7XG4xNzYyOlx0XHRcdGlmIChyeHEtXHUwMDNlbmFwaSlcbjE3NjM6XHRcdFx0XHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXHUwMDNlbmFwaS1cdTAwM2VuYXBpX2lkKTtcbjE3NjQ6XHRcdH1cbjE3NjU6XHRcbjE3NjY6XHRvdXRfdW5sb2NrOlxuMTc2NzpcdFx0aWYgKCFlcnIpIHtcbjE3Njg6XHRcdFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxuMTc2OTpcdFx0XHQgKiBzb2NrZXRzLCBhbmQgeHNrX2lzX2JvdW5kKCkuXG4xNzcwOlx0XHRcdCAqL1xuMTc3MTpcdFx0XHRzbXBfd21iKCk7XG4xNzcyOlx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG4xNzczOlx0XHR9XG4xNzc0Olx0b3V0X3JlbGVhc2U6XG4xNzc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMTc3NjpcdFx0aWYgKGRldikge1xuMTc3NzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMTc3ODpcdFx0XHRpZiAoZXJyKVxuMTc3OTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3ODA6XHRcdH1cbjE3ODE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xNzgyOlx0XHRyZXR1cm4gZXJyO1xuMTc4MzpcdH1cbjE3ODQ6XHRcbjE3ODU6XHRzdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbjE3ODY6XHRcdF9fdTY0IGFkZHI7IC8qIFN0YXJ0IG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODc6XHRcdF9fdTY0IGxlbjsgLyogTGVuZ3RoIG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODg6XHRcdF9fdTMyIGNodW5rX3NpemU7XG4xNzg5Olx0XHRfX3UzMiBoZWFkcm9vbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBCaW5kIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgaG9uZXMgaW4gb24gdGhlIGxvY2sgb3JkZXJpbmcgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvY2sgYWNxdWlzaXRpb24gc2VxdWVuY2Ugd2FzOiBgcnRubF9sb2NrYCAtJmd0OyBgeHMtJmd0O211dGV4YCAtJmd0OyBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBoYXMgZmxpcHBlZCB0aGUgc2NyaXB0LCBlc3RhYmxpc2hpbmcgYSBuZXcgb3JkZXI6IGBydG5sX2xvY2tgIC0mZ3Q7IGBuZXRkZXZfbG9ja19vcHMoZGV2KWAgLSZndDsgYHhzLSZndDttdXRleGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UhCgpUaGUgc2hpZnQgaW4gdGhlIGxvY2tpbmcgb3JkZXIgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gQWNxdWlyaW5nIHRoZSBgZGV2YCYjMzk7cyBsb2NrICpiZWZvcmUqIGB4cy0mZ3Q7bXV0ZXhgIGNhbiBlaXRoZXIgZXhwb3NlIGEgcHJldmlvdXMgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IsIGVxdWFsbHkgcGxhdXNpYmx5LCByZXNvbHZlcyBhbiBleGlzdGluZyBsb2NraW5nIHByb2JsZW0sIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gYmluZCBvciBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlc291cmNlcy4gSXQgaXMgYWxsIGFib3V0IHRoZSBvcmRlcmluZyEgVGhlIGNvbmRpdGlvbmFsIGBpZiAoZGV2KWAgc3VnZ2VzdHMgc29tZSBwb3RlbnRpYWwgZm9yIGVycm9yIGhhbmRsaW5nLiBBbHNvLCBhdCB0aGUgZW5kIGBkZXZfcHV0YCBpcyBhbHNvIG5vdyBjb25kaXRpb25hbC4KCkEgY3JpdGljYWwgcG9pbnQgaXMgdGhlIHJldmVyc2UgbG9jayByZWxlYXNlIG9yZGVyLiBQcmV2aW91c2x5LCB0aGUgcmVsZWFzZSBvcmRlciB3YXMgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIHRoZW4gYG11dGV4X3VubG9jaygmYW1wO3hzLSZndDttdXRleClgLiBOb3csIHRoZSBvcmRlciBpcyBmbGlwcGVkIGFnYWluISBUaGUgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGlzIG5vdyBjb25kaXRpb25hbCwgYmFzZWQgb24gdGhlIHN1Y2Nlc3MvZXJyb3IgaGFuZGxpbmchCgpHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIG5ldHdvcmtpbmcgaW50ZXJuYWxzLCBJIGtub3cgQUZfWERQIChYU0spIGlzIGEgY3J1Y2lhbCBpbnRlcmZhY2UgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZywgYWxsb3dpbmcgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGRpcmVjdGx5IGludGVyYWN0IHdpdGggbmV0d29yayBpbnRlcmZhY2VzIHZpYSBzb2NrZXRzLiBBbnkgc3VidGxlIGNoYW5nZXMgaW4gaG93IHRoaXMgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBsb2NraW5nLCBjYW4gaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cy4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggdGhlIGBiaW5kKClgIGNhbGwuIFNpbmNlIEkga25vdyB0aGF0IGBzeXprYWxsZXJgIGhhcyBleHRlbnNpdmUgY292ZXJhZ2Ugb2YgQUZfWERQLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGFuYWx5c2lzIHRvIHZlcmlmeSB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFhEUCBTb2NrZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGRlZmluaXRpb24gd2lsbCBtb3N0IGxpa2VseSByZXNpZGUgaW4gb25lIG9mIHR3byBwbGFjZXM6IHRoZSBwcmltYXJ5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBgbmV0L0tjb25maWdgLCBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIFhEUC1mb2N1c2VkIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBgbmV0L3hkcC9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB0aGUgYENPTkZJR19YRFBfU09DS0VUU2Agb3B0aW9uJiMzOTtzIGF2YWlsYWJpbGl0eSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGV0YWlscy4gVW5kZXJzdGFuZGluZyBpdHMgZXhhY3Qgc3RhdHVzIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3hkcC9LY29uZmlnLTktXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbm5ldC94ZHAvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZSwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipEaXZpbmcgaW50byB0aGUgWERQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgbmV0L3hkcC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMsIGFzIEkga25vdyBteSB3YXkgYXJvdW5kIGtlcm5lbCBLY29uZmlnIGZpbGVzLCBhbmQgSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFhEUCBpcyBiZWluZyBwcmVzZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIFhEUCBmdW5jdGlvbmFsaXR5IGZsYWdzLCBvYnZpb3VzbHksIHRoZSBgWERQX1NPQ0tFVFNgLCBgWERQX1VNRU1gLCBhbmQgYWxsIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFhEUCBmZWF0dXJlcywgYW55IG5ldyBoYXJkd2FyZSBzdXBwb3J0IHRoYXQmIzM5O3MgYmVlbiBhZGRlZCwgYW55IGNoYW5nZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSSYjMzk7bGwgaGF2ZSBhIGxvb2sgYXQgaG93IGRlcGVuZGVuY2llcyBhcmUgc2V0IHVw4oCUd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIFhEUCBvcHRpb25zIGJlY29tZSBhdmFpbGFibGUuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGl0c2VsZj8gQW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHdhcm5pbmdzIHByb3ZpZGVkIGlmIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIGtlcm5lbCBpcyBjaG9zZW4uIEJhc2ljYWxseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBYRFAgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzIGluIHRoaXMgdmVyc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWERQX1NPQ0tFVFNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgIDU6XHRcdGRlZmF1bHQgblxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuICAgODpcdFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbiAgMTM6XHRcdGRlZmF1bHQgblxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUqKgoKT2theSwgc28gYENPTkZJR19YRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBCUEZfU1lTQ0FMTGAgaGFzIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzLCBvciBpZiB3ZSYjMzk7cmUgZ29vZCB0byBqdXN0IGVuYWJsZSBgWERQX1NPQ0tFVFNgIGFuZCB0aGF0JiMzOTtzIGVub3VnaCB0byBwdWxsIGV2ZXJ5dGhpbmcgaW4uIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCBmb3IgJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OyBpbiBga2VybmVsL2JwZi9LY29uZmlnYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLiBUaGF0IHNob3VsZCByZXZlYWwgYW55IGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjk9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMzAtXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMzItXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgeHNrX2JpbmQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGB4c2tfYmluZGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBgLmJpbmRgIG9wZXJhdGlvbiBmb3IgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIGFuZCBjcm9zcy1yZWZlcmVuY2UgaXRzIHVzYWdlLiBUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBpbiBgbmV0L3hkcC94c2suY2AgYW5kIGh1bnQgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgeHNrX2JpbmRgIGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIEFGX1hEUCBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNTg1PXN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTE1ODktXG5uZXQveGRwL3hzay5jOjE1OTA6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxubmV0L3hkcC94c2suYy0xNTkxLXtcbi0tXG5uZXQveGRwL3hzay5jPTIxMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIxNDItXHQucmVsZWFzZVx0PSB4c2tfcmVsZWFzZSxcbm5ldC94ZHAveHNrLmM6MjE0MzpcdC5iaW5kXHRcdD0geHNrX2JpbmQsXG5uZXQveGRwL3hzay5jLTIxNDQtXHQuY29ubmVjdFx0PSBzb2NrX25vX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeHNrX2JpbmRgIExvY2sgT3JkZXJpbmcgQ2hhbmdlKioKCk9rYXksIHNvIGB4c2tfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSB1c2VzIHRoZSBgYmluZCgpYCBzeXN0ZW0gY2FsbCBvbiBhbiBBRl9YRFAgc29ja2V0LiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgaW4gdGhlIGtlcm5lbC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBsb2NrIG9yZGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmFjayBhdCB0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlLCBhbmQgcHJvYmFibHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9sb2NrX29wc2AgYmVpbmcgYWNxdWlyZWQgYWZ0ZXIgYHhzLSZndDttdXRleGAgcHJldmlvdXNseSwgYW5kIG5vdyBpdCYjMzk7cyBkaWZmZXJlbnQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIGNvZGUgYXVkaXQuIEkgaGF2ZSB0byBzY2FuIHRoZSBjb2RlIGJhc2UgdG8gaWRlbnRpZnkgKm90aGVyKiBpbnN0YW5jZXMgd2hlcmUgYG5ldGRldl9sb2NrX29wc2AgYW5kIGB4cy0mZ3Q7bXV0ZXhgLCBvciBwb3RlbnRpYWxseSBldmVuIGBydG5sX2xvY2tgIGFyZSBhY3F1aXJlZC4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3JpZ2luYWwgcHJvYmxlbSBhbmQgZW5zdXJpbmcgdGhpcyBuZXcgb3JkZXJpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIGNvbnRlbnRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTE1OTA9c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYxNy1cdGlmIChkZXYpXG5uZXQveGRwL3hzay5jOjE2MTg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3hkcC94c2suYy0xNjE5LVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTI5MD12b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzoyOTc6XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqTXV0ZXggQWNxdWlzaXRpb24gaW4gWFNLIEJ1ZmZlciBQb29sKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYSBtdXRleCBpcyBwb3RlbnRpYWxseSBiZWluZyBhY3F1aXJlZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFhTSyBidWZmZXIgcG9vbC4gVGhlIGNvbnRleHQgSSBoYXZlIGlzIHRoZSBmdW5jdGlvbiBgeHBfY2xlYXJfZGV2YCBvciBtYXliZSBzb21ld2hlcmUgcmVsYXRlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGB4cy0mZ3Q7bXV0ZXhgIGlzIGdyYWJiZWQgdGhlcmUuIFJpZ2h0LCBzbyBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBjb2RlOiBJIHNob3VsZCBjaGVjayBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkwLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtdXRleCBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGJ1ZmZlciBwb29sJiMzOTtzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiB4cF9hc3NpZ25fZGV2KHBvb2wsIGRldiwgcXVldWVfaWQsIGZsYWdzKTtcbiAyODg6XHR9XG4gMjg5Olx0XG4gMjkwOlx0dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBvb2wtXHUwMDNlbmV0ZGV2O1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKCFwb29sLVx1MDAzZW5ldGRldilcbiAyOTU6XHRcdFx0cmV0dXJuO1xuIDI5NjpcdFxuIDI5NzpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMjk4Olx0XHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiAyOTk6XHRcdHhza19jbGVhcl9wb29sX2F0X3FpZChwb29sLVx1MDAzZW5ldGRldiwgcG9vbC1cdTAwM2VxdWV1ZV9pZCk7XG4gMzAwOlx0XHRwb29sLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gMzAxOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDMwMjpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCB4cF9yZWxlYXNlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCxcbiAzMDg6XHRcdFx0XHRcdFx0XHQgIHdvcmspO1xuIDMwOTpcdFxuIDMxMDpcdFx0cnRubF9sb2NrKCk7XG4gMzExOlx0XHR4cF9jbGVhcl9kZXYocG9vbCk7XG4gMzEyOlx0XHRydG5sX3VubG9jaygpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHBvb2wtXHUwMDNlZnEpIHtcbiAzMTU6XHRcdFx0eHNrcV9kZXN0cm95KHBvb2wtXHUwMDNlZnEpO1xuIDMxNjpcdFx0XHRwb29sLVx1MDAzZWZxID0gTlVMTDtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChwb29sLVx1MDAzZWNxKSB7XG4gMzIwOlx0XHRcdHhza3FfZGVzdHJveShwb29sLVx1MDAzZWNxKTtcbiAzMjE6XHRcdFx0cG9vbC1cdTAwM2VjcSA9IE5VTEw7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHR4ZHBfcHV0X3VtZW0ocG9vbC1cdTAwM2V1bWVtLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgWERQIE11dGV4KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgeHMtJmd0O211dGV4YCB3aXRoaW4gdGhlIGBuZXQveGRwL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICphbGwqIHRoZSBwbGFjZXMgdGhpcyBzcGVjaWZpYyBtdXRleCBpcyBsb2NrZWQgYW5kIHVubG9ja2VkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgc3lzdGVtYXRpY2FsbHkuIEtub3dpbmcgdGhlIGxvY2smIzM5O3Mgc2NvcGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IFhEUCBtYW5hZ2VzIGl0cyBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgcHJvdGVjdGlvbi4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIFhEUCBmcmFtZXdvcmsuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHRyYWNrIGRvd24gdGhvc2UgbXV0ZXggYWNxdWlzaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdXRleF9sb2NrXFwoXHUwMDI2eHMtXHUwMDNlbXV0ZXhcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTE5MT1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMTk5LVxubmV0L3hkcC94c2suYzoxMjAwOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTEyMDEtXHRjYWNoZWRfY29ucyA9IHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zO1xuLS1cbm5ldC94ZHAveHNrLmM9MTUzMD1zdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3hkcC94c2suYy0xNTUwLVx0eHNrX2RlbGV0ZV9mcm9tX21hcHMoeHMpO1xubmV0L3hkcC94c2suYzoxNTUxOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTE1NTItXHR4c2tfdW5iaW5kX2Rldih4cyk7XG4tLVxubmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTE2MTktXG5uZXQveGRwL3hzay5jOjE2MjA6XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbm5ldC94ZHAveHNrLmMtMTYyMS1cdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbi0tXG5uZXQveGRwL3hzay5jPTE3OTI9c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC94ZHAveHNrLmMtMTgxMy1cbm5ldC94ZHAveHNrLmM6MTgxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTE4MTUtXHRcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4NTEtXG5uZXQveGRwL3hzay5jOjE4NTI6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xODUzLVx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVx1MDAzZXVtZW0pIHtcbi0tXG5uZXQveGRwL3hzay5jLTE4ODAtXG5uZXQveGRwL3hzay5jOjE4ODE6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xODgyLVx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4tLVxubmV0L3hkcC94c2suYz0xOTM1PXN0YXRpYyBpbnQgeHNrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQveGRwL3hzay5jLTE5NjQtXG5uZXQveGRwL3hzay5jOjE5NjU6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0xOTY2LVx0XHRzdGF0cy5yeF9kcm9wcGVkID0geHMtXHUwMDNlcnhfZHJvcHBlZDtcbi0tXG5uZXQveGRwL3hzay5jLTIwNDMtXG5uZXQveGRwL3hzay5jOjIwNDQ6XHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYy0yMDQ1LVx0XHRpZiAoeHMtXHUwMDNlemMpXG4tLVxubmV0L3hkcC94c2suYz0yMTAxPXN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbi0tXG5uZXQveGRwL3hzay5jLTIxMTMtXG5uZXQveGRwL3hzay5jOjIxMTQ6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jLTIxMTUtXHRcdFx0aWYgKHhzLVx1MDAzZWRldiA9PSBkZXYpIHtcbi0tXG5uZXQveGRwL3hza19kaWFnLmM9OTI9c3RhdGljIGludCB4c2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC94ZHAveHNrX2RpYWcuYy0xMTItXG5uZXQveGRwL3hza19kaWFnLmM6MTEzOlx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hza19kaWFnLmMtMTE0LVx0aWYgKFJFQURfT05DRSh4cy1cdTAwM2VzdGF0ZSkgPT0gWFNLX1VOQk9VTkQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgeHNrX25vdGlmaWVyYCBDYWxsYmFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYHhza19ub3RpZmllcmAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBkZXZpY2UmIzM5O3MgbGlmZWN5Y2xlLiBJdCBzZWVtcyB0aGF0IHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyBlaXRoZXIgdW5yZWdpc3RlcmVkIG9yIGV4cGVyaWVuY2VzIGEgJiMzNDtkb3duJiMzNDsgZXZlbnQsIHRoZSBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIEFuIGltcG9ydGFudCBkZXRhaWwgdG8gbm90ZSBpcyB0aGF0IHRoaXMgY2FsbCBoYXBwZW5zIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBhbHJlYWR5IGhlbGQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGFjdGlvbnMgYW5kIGxvZ2ljIHRoYXQgb2NjdXIgKndpdGhpbiogdGhlIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZXNlIGxvY2tpbmcgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEwMDpcdFxuMjEwMTpcdHN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbjIxMDI6XHRcdFx0XHR1bnNpZ25lZCBsb25nIG1zZywgdm9pZCAqcHRyKVxuMjEwMzpcdHtcbjIxMDQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjIxMDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbjIxMDY6XHRcdHN0cnVjdCBzb2NrICpzaztcbjIxMDc6XHRcbjIxMDg6XHRcdHN3aXRjaCAobXNnKSB7XG4yMTA5Olx0XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuMjExMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZHAubG9jayk7XG4yMTExOlx0XHRcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZuZXQtXHUwMDNleGRwLmxpc3QpIHtcbjIxMTI6XHRcdFx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcbjIxMTM6XHRcbjIxMTQ6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbjIxMTU6XHRcdFx0XHRpZiAoeHMtXHUwMDNlZGV2ID09IGRldikge1xuMjExNjpcdFx0XHRcdFx0c2stXHUwMDNlc2tfZXJyID0gRU5FVERPV047XG4yMTE3Olx0XHRcdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbjIxMTg6XHRcdFx0XHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbjIxMTk6XHRcbjIxMjA6XHRcdFx0XHRcdHhza191bmJpbmRfZGV2KHhzKTtcbjIxMjE6XHRcbjIxMjI6XHRcdFx0XHRcdC8qIENsZWFyIGRldmljZSByZWZlcmVuY2VzLiAqL1xuMjEyMzpcdFx0XHRcdFx0eHBfY2xlYXJfZGV2KHhzLVx1MDAzZXBvb2wpO1xuMjEyNDpcdFx0XHRcdH1cbjIxMjU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMjEyNjpcdFx0XHR9XG4yMTI3Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGRwLmxvY2spO1xuMjEyODpcdFx0XHRicmVhaztcbjIxMjk6XHRcdH1cbjIxMzA6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbjIxMzE6XHR9XG4yMTMyOlx0XG4yMTMzOlx0c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XG4yMTM0Olx0XHQubmFtZSA9XHRcdFwmIzM0O1hEUFwmIzM0OyxcbjIxMzU6XHRcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbjIxMzY6XHRcdC5vYmpfc2l6ZSA9XHRzaXplb2Yoc3RydWN0IHhkcF9zb2NrKSxcbjIxMzc6XHR9O1xuMjEzODpcdFxuMjEzOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9ja2luZyBPcmRlciBpbiBYU0sgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHhza19ub3RpZmllcmAgYW5kIGltbWVkaWF0ZWx5IHNlZSBgbXV0ZXhfbG9jaygmYW1wO3hzLSZndDttdXRleCk7YCBmb2xsb3dlZCBieSBgeHBfY2xlYXJfZGV2KHhzLSZndDtwb29sKTtgLiBOb3csIGB4cF9jbGVhcl9kZXZgIGNhbGxzIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFNvLCBpbiBgeHNrX25vdGlmaWVyYCwgdGhlIGxvY2tpbmcgb3JkZXIgaXMgY2xlYXJseSBgeHMtJmd0O211dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKQnV0LCBoYW5nIG9uLCB3aGF0IGFib3V0IGB4c2tfYmluZGA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBmbG93IHdhczogYG11dGV4X2xvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpYCBmb2xsb3dlZCBieSBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGF0JiMzOTtzIHRoZSBzYW1lIG9yZGVyLiBXYWl0LCBubywgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gaXQgKndhcyogdGhlIHNhbWUuCgpXaGF0IGRpZCB0aGUgcGF0Y2ggY2hhbmdlLCBleGFjdGx5PyBBaGEhIFRoZSBwYXRjaCBtb2RpZmllZCBgeHNrX2JpbmRgIHRvIGluY2x1ZGU6CgpgYGAKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKYGBgCgpPa2F5LCBzbyAqbm93KiBpbiBgeHNrX2JpbmRgLCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgIGlzIGNhbGxlZCAqYmVmb3JlKiBgbXV0ZXhfbG9jaygmYW1wO3hzLSZndDttdXRleClgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlLiBJdCBmbGlwcGVkIHRoZSBsb2NraW5nIG9yZGVyLiBCdXQgKndoeSo/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gV2hhdCBkb2VzIGBuZXRkZXZfbG9ja19vcHNgIG9yZGVyIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byBwb3RlbnRpYWwgZGVhZGxvY2tzPyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYG5ldGRldl9sb2NrX29wc2AgYW5kIGl0cyB1c2FnZXMgd2l0aGluIHRoZSBrZXJuZWwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoIGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBsb2NraW5nIGhpZXJhcmNoeS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZmluZCB0aGUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzNy0gKlx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEzODogKlx0d2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzktICpcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZfbG9ja19vcHMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb3IgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBuZXRkZXZfbG9ja19vcHNgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCB1c3VhbGx5IHJlYWNoIGZvciBgZ2l0IGxvZ2Agb24gdGhhdCBjb21taXQgb3IgZnVuY3Rpb24uIEJ1dCBJJiMzOTttIHJlbWluZGVkIHRoYXQgSSBkb24mIzM5O3QgaGF2ZSB0aGUgZnVsbCBnaXQgc3VpdGUgYXQgbXkgZGlzcG9zYWwuIE5vIGBnaXQgc2hvd2AgZWl0aGVyLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gcGVyZmVjdCBmb3IgcXVpY2tseSBzZWVpbmcgdGhlIGxhdGVzdCBjaGFuZ2VzIHdpdGggYGdpdCBzaG93IEhFQURgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGZydXN0cmF0aW5nLCBidXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgbXkgYXZhaWxhYmxlIHRvb2xzPwoKUmlnaHQsIEkmIzM5O20gbGltaXRlZCB0byBgZ3JlcHBlcmAsIGByZWFkLWZpbGVgLCBhbmQgYGNvZGVzZWFyY2hgLiBQZXJoYXBzIGBncmVwcGVyYCBjYW4gZ2l2ZSBtZSB3aGF0IEkgbmVlZC4gSW5zdGVhZCBvZiB0aGUgbG9nIGhpc3RvcnksIEkmIzM5O2xsIHN3aXRjaCBnZWFycy4gQ2FuIGBncmVwcGVyYCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbmV0ZGV2X2xvY2tfb3BzYCBpcyAqdXNlZCogdGhyb3VnaG91dCB0aGUga2VybmVsPyBUaGF0IG1pZ2h0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGltcGxlbWVudGVkIGN1cnJlbnRseSwgZXZlbiB3aXRob3V0IHRoZSBmdWxsIGdpdCBoaXN0b3J5LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSB0aGUgdG9vbCBpbiB0aGlzIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTEyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvYnJpZGdlL2JyX2lmLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpuZXdfbmJwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQyLVx0cC1cdTAwM2VkZXYgPSBkZXY7XG5uZXQvYnJpZGdlL2JyX2lmLmM6NDQzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQ0LVx0cC1cdTAwM2VwYXRoX2Nvc3QgPSBwb3J0X2Nvc3QoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NTktXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG5uZXQvY29yZS9kZXYuYzoxODYwOlx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTE4NjEtXHRcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTE5MzctXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTkzOS1cdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXIobmIsIE5FVERFVl9HT0lOR19ET1dOLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTk1My1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2NvcmUvZGV2LmM6MTk1NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xOTU1LVx0XHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjIwLVx0aWYgKHhkcF9saW5rLVx1MDAzZWRldikge1xubmV0L2NvcmUvZGV2LmM6MTA2MjE6XHRcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cdTAwM2VkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTA2MjItXHRcdFdBUk5fT04oZGV2X3hkcF9kZXRhY2hfbGluayh4ZHBfbGluay1cdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2NzI9c3RhdGljIGludCBicGZfeGRwX2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cbm5ldC9jb3JlL2Rldi5jOjEwNzA1Olx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYy0xMDcwNi1cdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXHUwMDNlZGV2LCB4ZHBfbGluay1cdTAwM2VmbGFncyk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cbm5ldC9jb3JlL2Rldi5jOjEwNzY0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcdTAwMjZleHRhY2ssIGxpbmspO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cdFx0XHRcdCAgIFx1MDAyNmZlYXR1cmUsIGxvd2VyLVx1MDAzZW5hbWUpO1xubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcbm5ldC9jb3JlL2Rldi5jLTEwOTM4LVx0XHRcdGxvd2VyLVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH5mZWF0dXJlO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUxMS1cbm5ldC9jb3JlL2Rldi5jOjExNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTUxMy1cdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExNTM5LVx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTE1NDEtXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjUwMy1cdFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cbm5ldC9jb3JlL2Rldi5jOjEyNTA0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTA1LVx0XHRkZXZfc2h1dGRvd24oZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNzg2LVxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNzg4LVx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xubmV0L2NvcmUvZGV2LmM6MTI4MDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVx0ZGV2X3NodXRkb3duKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxuLS1cbm5ldC9jb3JlL2Rldi5oLTYyLVxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVx0XFxcbm5ldC9jb3JlL2Rldi5oLTY0LVx0Zm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqdmFyX25hbWUgX19mcmVlKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCkgPSBOVUxMOyBcXFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIxLVxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjMtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zOT1pbnQgZGV2X3NldF9hbGlhcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphbGlhcywgc2l6ZV90IGxlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXG5uZXQvY29yZS9kZXZfYXBpLmM6NDM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cdHJldCA9IG5ldGlmX3NldF9hbGlhcyhkZXYsIGFsaWFzLCBsZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjY3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xubmV0L2NvcmUvZGV2X2FwaS5jOjgzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXHRuZXRpZl9zZXRfZ3JvdXAoZGV2LCBuZXdfZ3JvdXApO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2X2FwaS5jOjk1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtOTYtXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTM1PWludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxubmV0L2NvcmUvZGV2X2FwaS5jOjEzOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cdHJldCA9IG5ldGlmX2NoYW5nZV9jYXJyaWVyKGRldiwgbmV3X2NhcnJpZXIpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzQtXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMTc2LVx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTk3PWludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cbm5ldC9jb3JlL2Rldl9hcGkuYzoyMDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXHRyZXQgPSBuZXRpZl9vcGVuKGRldiwgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMjE5LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMjEtXHRuZXRpZl9jbG9zZShkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yMjY9aW50IGRldl9ldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxubmV0L2NvcmUvZGV2X2FwaS5jOjIzNTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xubmV0L2NvcmUvZGV2X2FwaS5jOjI2NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTMxMy1cbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTUtXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zMzM9aW50IGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXG5uZXQvY29yZS9kZXZfYXBpLmM6MzM4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVx0cmV0ID0gbmV0aWZfc2V0X21hY19hZGRyZXNzKGRldiwgc3MsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzozNjg6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXHRuZXRpZl9zdGF0ZV9jaGFuZ2UoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjk2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcsIFx1MDAyNmV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1Mi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDU0LVx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDc0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTAxPXN0YXRpYyBpbnQgZGV2X3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUwOTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MTAtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyNi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVx0XHRcdCAgIChzaXplX3QpZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1Nzc6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc4LVx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVx0Y2FzZSBTSU9DU0lGTUFQOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTgzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4NC1cdFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cdFx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXHRcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVx0XHRcdHJldHVybiAtRU5PREVWO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cdFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcbi0tXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxuLS1cbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI1LVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlcGVybV9hZGRyKSkge1xubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNy1cdFx0XHRmYWlsb3Zlcl9zbGF2ZV9yZWdpc3RlcihkZXYpO1xuLS1cbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXHRcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MjkxPXZvaWQgbGlua3dhdGNoX3N5bmNfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cdGlmIChsaW5rd2F0Y2hfY2xlYW5fZGV2KGRldikpIHtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cdFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE0NjE9c3RhdGljIHNzaXplX3QgdHhfbWF4cmF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg2LVx0ZXJyID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNDg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg4LVx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfdHhfbWF4cmF0ZSlcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTM5PXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTAtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTUxOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTUyLVx0ZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcyA9IDA7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cdH0gZWxzZSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cdFx0XHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXHRcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTE0NzI9c3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0NzgtXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQ3OTpcdFx0bmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwobmV0ZGV2KTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQ4MC1cdFx0bmV0ZGV2X2dlbmxfZGV2X25vdGlmeShuZXRkZXYsIE5FVERFVl9DTURfREVWX0FERF9OVEYpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTMwPXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU0LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTU6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTYtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMDM3PXN0YXRpYyBpbnQgZG9fc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDU1LVx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fZGVsX3NsYXZlKHVwcGVyX2RldiwgZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNTY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDU3LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3MS1cdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2FkZF9zbGF2ZSh1cHBlcl9kZXYsIGRldiwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNzI6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDczLVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzE0ND1zdGF0aWMgaW50IGRvX3NldGxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMTc1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzE3NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3Ny1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjEzLVx0XHRkb3duX3dyaXRlKFx1MDAyNmRldl9hZGRyX3NlbSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMjE0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMyMTUtXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzcxMD1pbnQgcnRubF9jb25maWd1cmVfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM3MTY6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTctXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzkyOD1zdGF0aWMgaW50IHJ0bmxfbmV3bGlua19jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODAtXHRpZiAodGJbSUZMQV9NQVNURVJdKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTgxOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODItXHRcdGVyciA9IGRvX3NldF9tYXN0ZXIoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01BU1RFUl0pLCBleHRhY2spO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTYyNy1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2Vjb25kdWl0LVx1MDAzZWNsb3NlX2xpc3QsIFx1MDAyNmNsb3NlX2xpc3QpO1xubmV0L2RzYS9kc2EuYzoxNjI4Olx0XHRuZXRkZXZfbG9ja19vcHMoZHAtXHUwMDNlY29uZHVpdCk7XG5uZXQvZHNhL2RzYS5jLTE2MjktXHR9XG4tLVxubmV0L2RzYS91c2VyLmM9MzQ3Nz1zdGF0aWMgaW50IGRzYV91c2VyX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9kc2EvdXNlci5jLTM2MDUtXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWNsb3NlX2xpc3QsIFx1MDAyNmNsb3NlX2xpc3QpO1xubmV0L2RzYS91c2VyLmM6MzYwNjpcdFx0XHRuZXRkZXZfbG9ja19vcHMoZHAtXHUwMDNldXNlcik7XG5uZXQvZHNhL3VzZXIuYy0zNjA3LVx0XHR9XG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzUtXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc3LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQyLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQ0LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2ZlYXR1cmVzLmM9MjEyPWludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9mZWF0dXJlcy5jLTIzOC1cdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvZmVhdHVyZXMuYzoyMzk6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL2ZlYXR1cmVzLmMtMjQwLVx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2Mi1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDYzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NC1cdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTI0NTU9c3RhdGljIGludCBldGh0b29sX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQ5Ny1cdFx0XHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzoyNDk4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0yNDk5LVx0XHRcdHJjID0gb3BzLVx1MDAzZXNldF9waHlzX2lkKGRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTEtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzoyNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTMtXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjYtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNjI3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjgtXHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSBcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYz0yMjE9c3RhdGljIHZvaWQgbW9kdWxlX2ZsYXNoX2Z3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jLTIyOC1cbm5ldC9ldGh0b29sL21vZHVsZS5jOjIyOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjMwLVx0ZXRodG9vbF9jbWlzX2Z3X3VwZGF0ZShcdTAwMjZtb2R1bGVfZnctXHUwMDNlZndfdXBkYXRlKTtcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzUtXHRydG5sX2xvY2soKTtcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIzNjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjM3LVx0ZGV2LVx1MDAzZWV0aHRvb2wtXHUwMDNlbW9kdWxlX2Z3X2ZsYXNoX2luX3Byb2dyZXNzID0gZmFsc2U7XG4tLVxubmV0L2V0aHRvb2wvbW9kdWxlLmM9NDE3PWludCBldGhubF9hY3RfbW9kdWxlX2Z3X2ZsYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxubmV0L2V0aHRvb2wvbW9kdWxlLmM6NDMyOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTUwNz1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDMtXHRcdFx0cnRubF9sb2NrKCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQ0Olx0XHRuZXRkZXZfbG9ja19vcHMocmVxX2luZm8tXHUwMDNlZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDUtXHR9XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTU5ND1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEyLVx0XHRydG5sX2xvY2soKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MTM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02MTQtXHRyZXQgPSBjdHgtXHUwMDNlb3BzLVx1MDAzZXByZXBhcmVfZGF0YShjdHgtXHUwMDNlcmVxX2luZm8sIGN0eC1cdTAwM2VyZXBseV9kYXRhLCBpbmZvKTtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzUtXHRcdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjkzNjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTkzNy1cdGRldi1cdTAwM2VjZmdfcGVuZGluZyA9IGttZW1kdXAoZGV2LVx1MDAzZWNmZywgc2l6ZW9mKCpkZXYtXHUwMDNlY2ZnKSxcbi0tXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVx0XHRpZiAoY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cdTAwM2VpZmluZGV4KVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cbi0tXG5uZXQvZXRodG9vbC9yc3MuYz0xMTUwPWludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxubmV0L2V0aHRvb2wvcnNzLmM6MTE3ODpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODEtXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cdFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6NDg4Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg5LVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxNjA9aW50IGFkZHJjb25mX2FkZF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzE4Mi1cdGlmIChkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzE4MzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxODQtXHRcdGVyciA9IGluZXQ2X2FkZHJfYWRkKG5ldCwgZGV2LCBcdTAwMjZjZmcsIDAsIDAsIE5VTEwpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NDk4NT1pbmV0Nl9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUwNzEtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUwNzI6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTA3My1cdGlkZXYgPSBpcHY2X2ZpbmRfaWRldihkZXYpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjUyNT1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9hZGRyX2dlbl9tb2RlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2MS1cdFx0XHRcdFdSSVRFX09OQ0UoaWRldi1cdTAwM2VjbmYuYWRkcl9nZW5fbW9kZSwgbmV3X3ZhbCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NjI6XHRcdFx0XHRuZXRkZXZfbG9ja19vcHMoaWRldi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NTYzLVx0XHRcdFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzUtXHRcdFx0XHRcdFx0ICBuZXdfdmFsKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3NjpcdFx0XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGlkZXYtXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU3Ny1cdFx0XHRcdFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE1NjQ9c3RhdGljIGludCB0Y19nZXRfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTU4MS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTU4MjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xNTgzLVx0ZXJyID0gX190Y19nZXRfcWRpc2Moc2tiLCBuLCBleHRhY2ssIGRldiwgdGNhLCB0Y20pO1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTgyMj1zdGF0aWMgaW50IHRjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODQzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NDQtXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xOTA4PXN0YXRpYyBpbnQgdGNfZHVtcF9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTQzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTk0NC1cdFx0cSA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkaXNjKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIzMjc9c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzNDU6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ni1cdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNDUzPXN0YXRpYyBpbnQgdGNfZHVtcF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjQ2Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjQ2NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yNDY4LVx0ZXJyID0gX190Y19kdW1wX3RjbGFzcyhza2IsIGNiLCB0Y20sIGRldik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2tpbmcgTWVjaGFuaXNtcyBpbiB0aGUgTmV0d29yayBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGhhbmRsZXMgbG9ja2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRldmljZSBvcGVyYXRpb25zLiBUaGUgY29kZSYjMzk7cyB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzYCBub3cuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZ3JhYmJpbmcgdGhlIG5ldGRldiYjMzk7cyBvcGVyYXRpb25zIGxvY2suIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYGRldi0mZ3Q7bmV0ZGV2X29wc19sb2NrYCwgd2hpY2ggSSBzZWVtIHRvIHJlY2FsbCB3YXMgaW50cm9kdWNlZCBmYWlybHkgcmVjZW50bHkgaW4gdGhlIG5ldC1uZXh0IHRyZWUgdG8gaGVscCB3aXRoIHRoZSBSVE5MIHNwbGl0LiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIG90aGVyIGxvY2tpbmcgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgbmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYG5ldGRldl9sb2NrX29wc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBuZXR3b3JrIGRldmljZSBsb2NraW5nIG1lY2hhbmlzbXMuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYG5ldGRldl9sb2NrX29wc2Agc3RydWN0dXJlIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIGhlYWRlcnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBiYXNlIGRlZmluaXRpb25zIGZvciBuZXR3b3JrIGRldmljZXMgdXN1YWxseSByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVjbGFyYXRpb24gYW5kIHBvc3NpYmx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGxvY2tpbmcgZnJhbWV3b3JrLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBkZXByZWNhdGVkIG9yIHBlcmhhcHMgcmVwbGFjZWQgYnkgc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGNvZGUgY29tbWVudHMgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9sb2NrX29wc1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzctICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzg6ICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM5LSAqXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRmluZGluZyB0aGUgYG5ldGRldl9sb2NrX29wc2AgUmVmZXJlbmNlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYG5ldGRldl9sb2NrX29wc2AuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCwgSSBrbm93IHRoaXMgcHJvYmFibHkgbWVhbnMgZGlnZ2luZyB0aHJvdWdoIGhlYWRlciBmaWxlcy4gVGhpcyBsaWtlbHkgcmVwcmVzZW50cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGxvY2sgb3BlcmF0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNlYXJjaCB0aGUgaW5jbHVkZSBwYXRocy4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHdoZXJlIGl0IGlzIHVzZWQuIEkgZXhwZWN0IHRoaXMgdG8gYmUgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldHdvcmsgZGV2aWNlIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBpbiB0aGUgbmV0d29yayBjb3JlIGZpbGVzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2V0IG9mIGhlYWRlcnMgdG8gc2VhcmNoLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZvcm11bGF0ZSBhIHJvYnVzdCBzZWFyY2ggcXVlcnkgc28gYXMgbm90IHRvIG1pc3MgYSB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZXRkZXZfbG9ja19vcHNcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Mjg9c3RhdGljIGlubGluZSBib29sIG5ldGRldl9uZWVkX29wc19sb2NrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0zOC1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmV0ZGV2X2xvY2suaGAqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBuZXR3b3JrIGRldmljZSBsb2NraW5nIGhhcyBldm9sdmVkLCBlc3BlY2lhbGx5IGluIGxpZ2h0IG9mIHJlY2VudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIHNwaW5sb2NrcywgbXV0ZXhlcywgbWF5YmUgc29tZSByZWFkLXdyaXRlIGxvY2tzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNsZXZlciB0cmlja3MgdG8gbWluaW1pemUgY29udGVudGlvbi4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46CgoqICAgVGhlIGdyYW51bGFyaXR5IG9mIHRoZSBsb2NrcyDigJMgYXJlIHRoZXkgcGVyLWRldmljZSwgcGVyLXF1ZXVlLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPwoqICAgSG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IG9wZXJhdGlvbnMg4oCTIHRyYW5zbWl0LCByZWNlaXZlLCBjb25maWd1cmF0aW9uLCBhbmQgc28gb24uCiogICBBbnkgYXR0ZW1wdHMgYXQgbG9ja2xlc3MgYWxnb3JpdGhtcyBvciBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhdCBsZWFzdCBoaWdobHkgb3B0aW1pemVkIGxvY2tpbmcgcHJpbWl0aXZlcywgSSYjMzk7bSBob3BpbmcgZm9yIHNvbWUgaW50ZXJlc3RpbmcgbW9kZXJuIHRlY2huaXF1ZXMsIG1heWJlIFJDVSBpbiBwbGF5LgoqICAgVGhlIHBvdGVudGlhbCBmb3IgbG9jayBoaWVyYXJjaGllcyB0byBwcmV2ZW50IGRlYWRsb2NrcywgdGhhdCYjMzk7cyBhbHdheXMgYSBjcml0aWNhbCBhc3BlY3QgaW4gbmV0d29ya2luZyBjb2RlLgoqICAgSSYjMzk7bGwgYmUgZm9jdXNpbmcgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHN0aWxsIHVzaW5nIHRoZSBvbGQgYW5kIHNsb3cgbmV0aWZfcnhfbG9jaygpIGZvciBuZXRpZl9yeCgpLgoKVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcGFydGljdWxhcmx5IGVsZWdhbnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0XG4gICAzOlx0I2lmbmRlZiBfTkVUX05FVERFVl9MT0NLX0hcbiAgIDQ6XHQjZGVmaW5lIF9ORVRfTkVUREVWX0xPQ0tfSFxuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgIDk6XHRcbiAgMTA6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X3RyeWxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgMTE6XHR7XG4gIDEyOlx0XHRyZXR1cm4gbXV0ZXhfdHJ5bG9jayhcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gIDEzOlx0fVxuICAxNDpcdFxuICAxNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAxNjpcdHtcbiAgMTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuICAxODpcdH1cbiAgMTk6XHRcbiAgMjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAgMjE6XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcl9pbnZpc2libGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgMjI6XHR7XG4gIDIzOlx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCB8fFxuICAyNDpcdFx0ICAgIGRldi1cdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1VOUkVHSVNURVJJTkcpXG4gIDI1Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAyOTpcdHtcbiAgMzA6XHRcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG4gIDMxOlx0XG4gIDMyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TSEFQRVIpXG4gIDMzOlx0XHRyZXQgfD0gISFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZXRfc2hhcGVyX29wcztcbiAgMzQ6XHQjZW5kaWZcbiAgMzU6XHRcbiAgMzY6XHRcdHJldHVybiByZXQ7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNDA6XHR7XG4gIDQxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNDI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl91bmxvY2tfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDQ4Olx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc190b19mdWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDUyOlx0e1xuICA1MzpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDU0Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDU1Olx0XHRlbHNlXG4gIDU2Olx0XHRcdG5ldGRldl9sb2NrKGRldik7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDYwOlx0e1xuICA2MTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDYyOlx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDYzOlx0XHRlbHNlXG4gIDY0Olx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNjg6XHR7XG4gIDY5Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNzA6XHRcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTUzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBYU0sgU29ja2V0IExpZmVjeWNsZTogTG9ja2luZyBhbmQgU3RhdGUgVHJhbnNpdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBuZXRkZXZfbG9ja19vcHNgIGlzIGFjcXVpcmluZyBhIGxvY2sgb24gYGRldi0mZ3Q7bG9ja2AuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHhza19iaW5kYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBiaW5kaW5nIHByb2Nlc3MuIEkgc2VlIHRoYXQgaXQgc3RhcnRzIGJ5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudC4KCldpdGhpbiBgeHNrX2JpbmRgLCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG5ldHdvcmsgZGV2aWNlIHVzaW5nIGBkZXZfZ2V0X2J5X2luZGV4YC4gSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgYG5ldGRldl9sb2NrX29wc2AgaXMgdXNlZC4gVGhlbiBhIG11dGV4IGxvY2sgaXMgYWNxdWlyZWQgb24gYHhzLSZndDttdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gSXQgY2hlY2tzIHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGU7IGlmIGl0JiMzOTtzIG5vdCByZWFkeSwgaXQgYmFpbHMgb3V0IGVhcmx5IHdpdGggYW4gYEVCVVNZYCBlcnJvci4gSWYgdGhlcmUmIzM5O3Mgbm8gZGV2aWNlIHByZXNlbnQgYW4gZXJyb3IgaXMgdHJpZ2dlcmVkLCBgRU5PREVWYC4gVGhlIGNvZGUgdGhlbiB1bmxvY2tzIGB4cy0mZ3Q7bXV0ZXhgIGFuZCwgaWYgYSBkZXZpY2Ugd2FzIHByZXNlbnQsIHVubG9ja3MgdGhlIGRldmljZSBsb2NrIHZpYSBgbmV0ZGV2X3VubG9ja19vcHNgIGFuZCBkZWNyZW1lbnRzIHRoZSBkZXZpY2UmIzM5O3MgcmVmZXJlbmNlIGNvdW50LiBDcml0aWNhbGx5LCBpZiBgZXJyYCBpcyB6ZXJvLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgd2VudCBzbW9vdGhseSwgYSBgc21wX3dtYigpYCBpcyB1c2VkIHRvIGVuc3VyZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHRoZSBzdGF0ZSBpcyBhdG9taWNhbGx5IHNldCB0byBgWFNLX0JPVU5EYC4gSXQgdGhlbiBjbGVhbnMgdXAgYnkgcmVsZWFzaW5nIHRoZSBkZXZpY2UuIEZpbmFsbHksIHRoZSBSVE5MIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCBgeHNrX2JpbmRgIGhhbmRsZXMgZGV2aWNlIGF0dGFjaG1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgbmVjZXNzYXJ5IGxvY2tpbmcgdG8gZ3VhcmFudGVlIHRocmVhZCBzYWZldHkgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGB4c2tfcmVsZWFzZWAuIEkgY2FuIHNlZSB0aGF0IGB4c2tfcmVsZWFzZWAgaGFuZGxlcyB0aGUgdW5iaW5kaW5nIG9mIHRoZSBzb2NrZXQgZnJvbSBhIG5ldHdvcmsgZGV2aWNlLCBhbmQgdGhlIGNsZWFudXAgcHJvY2VzcyBhZnRlciB0aGUgc29ja2V0IGlzIGNsb3NlZC4gRmlyc3RseSwgaXQgbG9ja3MgYG5ldC0mZ3Q7eGRwLmxvY2tgIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBYRFAgc3RydWN0dXJlcywgYmVmb3JlIGl0IGRlbGV0ZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBuZXR3b3JrJiMzOTtzIFhEUCB0cmFja2luZywgdGhlbiBpdCB1bmxvY2tzLiBUaGUgcm91dGluZSB0aGVuIGRpc2FibGVzIEJIcyAoYm90dG9tIGhhbHZlcykgYW5kIGRlY3JlbWVudHMgdGhlIHNvY2tldCYjMzk7cyB1c2FnZSBjb3VudCB3aXRoIGBzb2NrX3Byb3RfaW51c2VfYWRkYC4gVGhlIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBtYXBzIGFyZSB0aGVuIGNsZWFuZWQgdXAgd2l0aCBgeHNrX2RlbGV0ZV9mcm9tX21hcHNgLiBOZXh0LCB0aGVyZSYjMzk7cyBhIGxvY2sgb24gYHhzLSZndDttdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCwgdGhlbiBgeHNrX3VuYmluZF9kZXZgIGlzIGNhbGxlZC4gRmluYWxseSwgdGhlIGB4cy0mZ3Q7bXV0ZXhgIGlzIHVubG9ja2VkLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2FsbCB0byBgeHNrX3pjX2NxX3RtcF9yaW5nX2NsZWFuYCB3aGljaCBJIHdpbGwgaW52ZXN0aWdhdGUuCgpTbywgYHhza19yZWxlYXNlYCBlbmNhcHN1bGF0ZXMgdGhlIHRlYXJkb3duIHByb2Nlc3M6IHJlbW92aW5nIHRoZSBzb2NrZXQgZnJvbSBYRFAgZGF0YSBzdHJ1Y3R1cmVzLCByZWR1Y2luZyB0aGUgc29ja2V0JiMzOTtzIHVzYWdlLCBjbGVhbmluZyB1cCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgYWN0dWFsIHVuYmluZGluZyBmcm9tIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB3aGF0IGB4c2tfdW5iaW5kX2RldmAgZG9lcy4gSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3VuYmluZF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTQ1Mj1zdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXG4tLVxubmV0L3hkcC94c2suYy0xNDY5LVxubmV0L3hkcC94c2suYzoxNDcwOnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE0NzEte1xuLS1cbm5ldC94ZHAveHNrLmM9MTUzMD1zdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3hkcC94c2suYy0xNTUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jOjE1NTI6XHR4c2tfdW5iaW5kX2Rldih4cyk7XG5uZXQveGRwL3hzay5jLTE1NTMtXHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmM9MjEwMT1zdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L3hkcC94c2suYy0yMTE5LVxubmV0L3hkcC94c2suYzoyMTIwOlx0XHRcdFx0eHNrX3VuYmluZF9kZXYoeHMpO1xubmV0L3hkcC94c2suYy0yMTIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHhza191bmJpbmRfZGV2YCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHhza191bmJpbmRfZGV2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdW5iaW5kaW5nIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWERQIHNvY2tldHMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLgoKSSBpbW1lZGlhdGVseSB3YW50IHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBYRFAgc29ja2V04oCZcyBzdGF0ZS4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCBncmFjZWZ1bGx5IGhhbmRsaW5nIGRldmljZXMgYmVpbmcgdW5ib3VuZCB3aXRob3V0IHByb3BlciBzb2NrZXQgbm90aWZpY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIG9yIHdhaXRpbmcgZm9yIGRhdGEuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGFkZHJlc3NlcyB0aGF0LiBEb2VzIGl0IHN5bmNocm9uaXplIHdpdGggYW55IHVzZXItc3BhY2UgdGhyZWFkcz8gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgdXNlZD8gQW55IGludGVycnVwdCBkaXNhYmxlL2VuYWJsZSBzZXF1ZW5jZXMgdGhhdCBuZWVkIGV4dHJhIGF0dGVudGlvbj8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVuYmluZCBmYWlscyBwYXJ0d2F5IHRocm91Z2g/IERvZXMgaXQgYXR0ZW1wdCB0byByb2xsIGJhY2s/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IEkgd2FudCB0byBzZWUgaWYgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlLCBzYXksIHRoZSBYRFAgc29ja2V0IHRhYmxlIGlzIGNvcnJ1cHRlZCBvciB0aGUgYXNzb2NpYXRlZCBtZW1vcnkgcmVnaW9ucyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgZm9yIHNvbWUgcmVhc29uLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgdXNlcyBvZiBgeHNrX3VtZW1gIGFuZCBob3cgdGhleSYjMzk7cmUgZnJlZWQgb3IgcmVsZWFzZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBhbiBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQ/IFRoaXMgd2lsbCBhbHNvIGluY2x1ZGUgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3VjaCBhcyB0aGUgYHhza19zb2NrZXRgLCBgeHNrX3VtZW1gLCBhbmQgYG5ldF9kZXZpY2VgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgaG93IHRoZXkgcHJldmVudCBkYW5nbGluZyBwb2ludGVycy4gQWxzbywgd2hlcmUgaXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgc29ja2V0IGluY3JlYXNlZC9kZWNyZWFzZWQ/IAoKRmluYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBjb25jdXJyZW5jeS4gRG9lcyBpdCBwcm9wZXJseSBhY2NvdW50IGZvciBtdWx0aXBsZSBYRFAgc29ja2V0cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBkZXZpY2U/IEkgbmVlZCB0byByZXZpZXcgYW55IGNyaXRpY2FsIHNlY3Rpb25zIGNhcmVmdWxseS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBrZXJuZWwmIzM5O3MgdW5iaW5kIHByb2Nlc3MgYW5kIGhvdyBpdCBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGVzIFhEUCBzb2NrZXRzLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NzA6XHRzdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuMTQ3MTpcdHtcbjE0NzI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xNDczOlx0XG4xNDc0Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX0JPVU5EKVxuMTQ3NTpcdFx0XHRyZXR1cm47XG4xNDc2Olx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfVU5CT1VORCk7XG4xNDc3Olx0XG4xNDc4Olx0XHQvKiBXYWl0IGZvciBkcml2ZXIgdG8gc3RvcCB1c2luZyB0aGUgeGRwIHNvY2tldC4gKi9cbjE0Nzk6XHRcdHhwX2RlbF94c2soeHMtXHUwMDNlcG9vbCwgeHMpO1xuMTQ4MDpcdFx0c3luY2hyb25pemVfbmV0KCk7XG4xNDgxOlx0XHRkZXZfcHV0KGRldik7XG4xNDgyOlx0fVxuMTQ4MzpcdFxuMTQ4NDpcdHN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuMTQ4NTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKioqbWFwX2VudHJ5KVxuMTQ4NjpcdHtcbjE0ODc6XHRcdHN0cnVjdCB4c2tfbWFwICptYXAgPSBOVUxMO1xuMTQ4ODpcdFx0c3RydWN0IHhza19tYXBfbm9kZSAqbm9kZTtcbjE0ODk6XHRcbjE0OTA6XHRcdCptYXBfZW50cnkgPSBOVUxMO1xuMTQ5MTpcdFxuMTQ5MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhzLVx1MDAzZW1hcF9saXN0X2xvY2spO1xuMTQ5MzpcdFx0bm9kZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZ4cy1cdTAwM2VtYXBfbGlzdCwgc3RydWN0IHhza19tYXBfbm9kZSxcbjE0OTQ6XHRcdFx0XHRcdFx0bm9kZSk7XG4xNDk1Olx0XHRpZiAobm9kZSkge1xuMTQ5NjpcdFx0XHRicGZfbWFwX2luYyhcdTAwMjZub2RlLVx1MDAzZW1hcC1cdTAwM2VtYXApO1xuMTQ5NzpcdFx0XHRtYXAgPSBub2RlLVx1MDAzZW1hcDtcbjE0OTg6XHRcdFx0Km1hcF9lbnRyeSA9IG5vZGUtXHUwMDNlbWFwX2VudHJ5O1xuMTQ5OTpcdFx0fVxuMTUwMDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eHMtXHUwMDNlbWFwX2xpc3RfbG9jayk7XG4xNTAxOlx0XHRyZXR1cm4gbWFwO1xuMTUwMjpcdH1cbjE1MDM6XHRcbjE1MDQ6XHRzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuMTUwNTpcdHtcbjE1MDY6XHRcdC8qIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBYRFAgc29ja2V0IGZyb20gYWxsIHRoZVxuMTUwNzpcdFx0ICogbWFwcyBpdCByZXNpZGVzIGluLiBXZSBuZWVkIHRvIHRha2UgZXh0cmEgY2FyZSBoZXJlLCBkdWUgdG9cbjE1MDg6XHRcdCAqIHRoZSB0d28gbG9ja3MgaW52b2x2ZWQuIEVhY2ggbWFwIGhhcyBhIGxvY2sgc3luY2hyb25pemluZ1xuMTUwOTpcdFx0ICogdXBkYXRlcyB0byB0aGUgZW50cmllcywgYW5kIGVhY2ggc29ja2V0IGhhcyBhIGxvY2sgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEFCQkEgRGVhZGxvY2sgaW4gQUZfWERQIFNvY2tldCBCaW5kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudHMuIEkgc2VlIGl0JiMzOTtzIGxvY2tpbmcgYHhzLSZndDttdXRleGAgYW5kIHRoZW4gY2FsbGluZyBgeHBfY2xlYXJfZGV2YCwgd2hpY2ggdGhlbiBjYWxscyBgbmV0ZGV2X2xvY2tfb3BzKG5ldGRldilgLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IHNob290cyB1cCBiZWNhdXNlIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uIHNlZW1zIHJldmVyc2VkIGNvbXBhcmVkIHRvIHdoYXQgSSYjMzk7bSBzZWVpbmcgaW4gYHhza19iaW5kYC4gSW4gYHhza19ub3RpZmllcmAgaXQmIzM5O3MgYHhzLSZndDttdXRleGAgdGhlbiBgbmV0ZGV2X2xvY2tfb3BzYCwgYnV0IHRoZSBwYXRjaCBmb3IgYHhza19iaW5kYCBzZWVtcyB0byBoYXZlIGZsaXBwZWQgaXQgdG8gYG5ldGRldl9sb2NrX29wc2AgdGhlbiBgeHMtJmd0O211dGV4YC4KClRoaXMgc2NyZWFtcyBBQkJBIGRlYWRsb2NrISBUbyBjb25maXJtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgYW5kIGxvY2tpbmcgaGVsZCB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBydW4uIEkga25vdyBgeHNrX25vdGlmaWVyYCBpcyB0cmlnZ2VyZWQgYnkgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHRoYXQgZXZlbnQgbm90aWZpY2F0aW9uIGhhcHBlbnMgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgYHJ0bmxfbG9ja2AuIGB4c2tfYmluZGAgYWxzbyBob2xkcyBgcnRubF9sb2NrYCBhdCBzb21lIHBvaW50LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgdHdvIHBvdGVudGlhbGx5IHJ1biBjb25jdXJyZW50bHk/IEV2ZW4gaWYgdGhleSBkb24mIzM5O3QsIEkga25vdyB0aGUgbG9ja2RlcCB0b29sIGluIHRoZSBrZXJuZWwgY2FuIGRldGVjdCBBQkJBIG9yZGVyIGludmVyc2lvbnMgZXZlbiBpZiBhIGNvbW1vbiBsb2NrIChsaWtlIGBydG5sX2xvY2tgKSBpcyBoZWxkLgoKVGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGFzIGl0JiMzOTtzIGRpcmVjdGx5IHRvdWNoaW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyB3aXRoaW4gYHhza19iaW5kYCwgYSBrZXkgZnVuY3Rpb24gZm9yIEFGX1hEUCBzb2NrZXRzIHdoaWNoIGFyZSBhIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGZlYXR1cmUuIEFuZCB5ZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGVudmlyb25tZW50cy4gSSBjYW4gY3JlYXRlIEFGX1hEUCBzb2NrZXRzLCBiaW5kIHRoZW0gdG8gdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgdGhhdCYjMzk7cyBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgcHJvYmxlbWF0aWMgY29kZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgZHVyaW5nIGJpbmRpbmcgYW5kIHVuYmluZGluZy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzOgoKSWYgYHhzLSZndDtzdGF0ZSAhPSBYU0tfUkVBRFlgLCBiZWZvcmUsIGBkZXZgIHdhc24mIzM5O3QgcmV0cmlldmVkLCBidXQgbm93LCBpdCByZXRyaWV2ZXMgYGRldmAgdXNpbmcgYGRldl9nZXRfYnlfaW5kZXgoKWAgYW5kIGxvY2tzIGl0IGJlZm9yZSBjaGVja2luZyBpZiBgeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWWAuIEFsc28sIG9uIGVycm9yLCBpZiBgZGV2YCB3YXMgbm90IE5VTEwsIGl0IHdpbGwgdW5sb2NrIGFuZCBgZGV2X3B1dChkZXYpYC4gQW5kIGV2ZW4gaWYgYGRldmAgaXMgTlVMTCwgaXQgaGFuZGxlcyB0aGF0IGNhc2UuCgpUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGNyaXRpY2FsIGxvY2tpbmcgbG9naWMgaW4gYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24uCmBXb3J0aEZ1enppbmcgPSB0cnVlIWAKCkkgc2hvdWxkIGNhcmVmdWxseSBhbmFseXplIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agbm93LiBJdCBtZWFucyBJJiMzOTt2ZSBnb3QgdG8gZmluZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGNoYW5nZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGlzIGB4c2tfYmluZGAgaW4gYG5ldC94ZHAveHNrLmNgLiBJcyBgeHNrX2JpbmRgIHNwZWNpZmljPyBZZXMsIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBBRl9YRFAgc29ja2V0IGJpbmQuIEl0IGlzIG5vdCB1YmlxdWl0b3VzLCB3aGljaCBpcyBnb29kIGZvciB0YXJnZXRpbmcuIEkgc2VlIGZyb20gdGhlIGNvZGUgdGhhdCBgeHNrX2JpbmRgIGlzIGNhbGxlZCBieSBgYmluZCgpYCBvbiBhbiBBRl9YRFAgc29ja2V0LiBJIHdhbnQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgZXhhbXBsZSBgeHNrX25vdGlmaWVyYCwgYW5kIGB4cF9jbGVhcl9kZXZgIGFuZCBgeHNrX2NyZWF0ZWAsIHdoaWNoIGFyZSBhbHNvIGluIGBuZXQveGRwL3hzay5jYC4KSSBrbm93IGB4c2tfYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBiZWNhdXNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgeHNrX3Byb3RvX29wcy5iaW5kYCwgSSBjYW4gYmUgcHJldHR5IHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0IGF3YXksIHNvIGl0IHNob3VsZCBzdGlsbCBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguCkkgY2FuIGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgaGF2ZSBhIHN5bWJvbCB3aGVuIGNvbXBpbGVkLgpOb3csIHdoYXQgYWJvdXQgYHhza19ub3RpZmllcmA/IFRoYXQmIzM5O3MgdGhlIG90aGVyIHBsYWNlIHdpdGggYHhzLSZndDttdXRleGAgYW5kIGBuZXRkZXZfbG9ja19vcHNgLgpXaGF0IGFib3V0IGB4cF9jbGVhcl9kZXZgPwpXaGF0IGFib3V0IGB4c2tfY3JlYXRlYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0yMTY5LVxubmV0L3hkcC94c2suYzoyMTcwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC94ZHAveHNrLmMtMjE3MS1cdFx0ICAgICAgaW50IGtlcm4pXG4tLVxubmV0L3hkcC94c2suYz0yMjE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB4c2tfZmFtaWx5X29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjIxOC1cdC5mYW1pbHkgPSBQRl9YRFAsXG5uZXQveGRwL3hzay5jOjIyMTk6XHQuY3JlYXRlID0geHNrX2NyZWF0ZSxcbm5ldC94ZHAveHNrLmMtMjIyMC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGB4c2tfYmluZGAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBjb25maXJtZWQgYnkgcmVmZXJlbmNpbmcgU2VjdGlvbiA0IG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgJiMzNDtmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLiYjMzQ7IFNvLCBpcyBgeHNrX2JpbmRgIGVub3VnaCwgb3IgYXJlIHRoZXJlIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHhza19yZWxlYXNlYCB0aGF0IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQ/IE5vLCBqdXN0IGB4c2tfYmluZGAgc2luY2UgdGhhdCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRoaXMgY29kZSB0byBldmVuIGNvbXBpbGUgYW5kIGJlIHJlYWNoYWJsZS4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBuZXQveGRwL01ha2VmaWxlYC4gQWgsIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub2AgYW5kIGB4c2tfYnVmZl9wb29sLm9gLgoKQW5kIHRoZSBjb3JyZXNwb25kaW5nIGBuZXQveGRwL0tjb25maWdgIGZpbGUgdGVsbHMgdXM6CmBgYApjb25maWcgWERQX1NPQ0tFVFMKCWJvb2wgJiMzNDtYRFAgc29ja2V0cyYjMzQ7CglkZXBlbmRzIG9uIEJQRl9TWVNDQUxMCglkZWZhdWx0IG4KCWhlbHAKCSAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmQKCSAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy4KYGBgClNvLCBgWERQX1NPQ0tFVFNgIGlzIHdoYXQgd2UgbmVlZC4gSG93ZXZlciwgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIHJpZ2h0PyBXZSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhhdCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIC0gTGluZSBieSBMaW5lKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBMZXQmIzM5O3MgZm9jdXMgb24gbGluZXMgMzAgdGhyb3VnaCA1MC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIHdpdGhpbiB0aGlzIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNodW5rIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggc3BlY2lmaWMgQlBGIGZlYXR1cmVzIG9yIHBvc3NpYmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGlzIGNvbnRleHQgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGBjb25maWdgIGtleXdvcmQsIGZvbGxvd2VkIGJ5IHRoZSBmZWF0dXJlIG5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IHR5cGUgb2Ygb3B0aW9uIGlzIGJlaW5nIHNldC4gSXMgdGhpcyBhIGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGFsc28gY3JpdGljYWwsIHNvIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYmVpbmcgYXNzdW1lZC4gQW55IGBkZWZhdWx0YCB2YWx1ZXMgYXJlIGFsc28gb2YgaW50ZXJlc3QsIGFzIHRob3NlIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGNvbW1vbmx5LXVzZWQgb3IgaW50ZW5kZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGhlbHAgdGV4dCwgdGhhdCBpcyBwcm92aWRlZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggcHJvdmlkZXMgZnVydGhlciBpbnNpZ2h0IGludG8gdGhlIHB1cnBvc2Ugb3IgcG90ZW50aWFsIHVzZSBjYXNlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2FpbiBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiB0aGlzIGJsb2NrLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzLCBhbmQgaW50ZW5kZWQgdXNhZ2UsIHRvIHNlZSBob3cgdG8gZW5hYmxlIHRoZW0gb3IgaG93IHRoZXkgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDMyOlx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IEJQRlxuICAzNDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDM1Olx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzY6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzc6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM4Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzOTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDQwOlx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICA0MTpcdFx0ZGVmYXVsdCBuXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDQ6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEJQRl9KSVRcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA1MDpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA1MzpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTQ6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1NTpcdFx0ICBwcm9ncmFtcy5cbiAgNTY6XHRcbiAgNTc6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU4Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1OTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIGVCUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gYEJQRl9TWVNDQUxMYCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCBhcyBmYXIgYXMgZGVwZW5kZW5jaWVzIGdvLiBJdCBkb2VzbiYjMzk7dCByZWx5IG9uIGFueXRoaW5nIGVsc2UgYmVpbmcgZW5hYmxlZCwgb3RoZXIgdGhhbiwgd2VsbCwgYmVpbmcgc2VsZWN0ZWQgZnJvbSB3aXRoaW4gdGhlIG1lbnVjb25maWcuIE5vdywgYFhEUF9TT0NLRVRTYCwgb24gdGhlIG90aGVyIGhhbmQsICpkb2VzKiBkZXBlbmQgb24gYEJQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBidWlsZCB0aGUgWERQIHNvY2tldCBmdW5jdGlvbmFsaXR5LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGdvdGNoYXMsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgWERQIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVybmFsIGAjaWZkZWZgIGJsb2NrcyBvciBhbnkgb3RoZXIgc3VidGxlIHJlcXVpcmVtZW50cyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBObyBzdXJwcmlzZXMsIHBsZWFzZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTEzMTk9c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzMjAte1xubmV0L3hkcC94c2suYzoxMzIxOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxubmV0L3hkcC94c2suYy0xMzIyLVx0LyogUHJlZmVyIGJ1c3ktcG9sbGluZywgc2tpcCB0aGUgd2FrZXVwLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU1MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYU0sgQ29tcGlsYXRpb24gQ29uY2VybnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gYXNwZWN0IG9mIFhEUCBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEZpcnN0LCBJIGNoZWNrZWQgaW5zaWRlIGBuZXQveGRwL3hzay5jYCBkaXJlY3RseS4gVGhlIG9ubHkgYCNpZmRlZmAgSSBmb3VuZCB3YXMgZm9yIGBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTGAsIHdoaWNoIGlzIGNsZWFybHkgbm90IHJlbGV2YW50IHRvIGB4c2tfYmluZGAuIFRoYXQmIzM5O3MgYSByZWQgaGVycmluZy4gTm93LCB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIC0gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaGFwcGVucy4KCkxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9gIGFuZCwgY3J1Y2lhbGx5LCBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vYC4gVGhpcyBwb2ludHMgdG8gdGhlIG1vZHVsZXMgdGhhdCBhcmUgcHVsbGVkIGluIHdoZW4gWERQIHNvY2tldHMgYXJlIGVuYWJsZWQgdmlhIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBgbmV0L3hkcC9gIGl0c2VsZiBpcyBpbmNsdWRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNsdXNpb24gcGF0aCBiYWNrLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGF0IGRpcmVjdG9yeSBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrIGJ1aWxkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGRlcGVuZGVuY3kgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9NzI9b2JqLSQoQ09ORklHX05FVF9OQ1NJKVx0XHQmIzQzOz0gbmNzaS9cbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXHQmIzQzOz0geGRwL1xubmV0L01ha2VmaWxlLTc0LW9iai0kKENPTkZJR19NUFRDUClcdFx0JiM0Mzs9IG1wdGNwL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA4NwoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFNvY2tldCBCaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYG5ldC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgWERQIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uczogJiMzNDtYRFBfU09DS0VUUyYjMzQ7IGFuZCAmIzM0O0JQRl9TWVNDQUxMJiMzNDsuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBsb2NraW5nIG9yZGVyIHdpdGhpbiBgeHNrX2JpbmQoKWAuIFByZXZpb3VzbHksIHRoZSBtdXRleCBgeHMtJmd0O211dGV4YCB3YXMgbG9ja2VkICpiZWZvcmUqIHRoZSBuZXR3b3JrIGRldmljZSBsb2NrLCBhbmQgbm93IGl0JiMzOTtzIHJldmVyc2VkLCBhbmQgdGhlcmUgYXJlIHNvbWUgZGV2aWNlIGxvb2t1cCBjaGFuZ2VzIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zLiBJbnRlcmVzdGluZy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IHBsYWNlIHRvIGJlIGNhcmVmdWwuCgpSaWdodCwgQUZfWERQIHNvY2tldHMgYXJlIGNyZWF0ZWQgaW4gdXNlcnNwYWNlIHVzaW5nIHRoZSBzdGFuZGFyZCBgc29ja2V0KEFGX1hEUCwgLi4uKWAgYW5kIGBiaW5kKClgIGNhbGxzLiBUaGlzIGlzICplYXNpbHkqIHJlYWNoYWJsZSwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIG1lYW5zIGEgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGVhc2lseSBiZSBleHBsb2l0ZWQuCgpHaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGxvY2sgb3JkZXIgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgb2J2aW91c2x5LCBgeHNrX2JpbmRgLiBBbmQsIHdlIG5lZWQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXHUwMDNlbXV0ZXgsIHJlc29sdmluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLCBhbmQgdXBkYXRlcyB0aGUgY2xlYW51cCBwYXRoIChuZXRkZXZfdW5sb2NrX29wcyBhbmQgZGV2X3B1dCkuIFRoZSBwYXRjaCBzdHJpY3RseSBhbHRlcnMgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljOyBpdCBkb2VzIG5vdCB0b3VjaCBhbnkgZGF0YSBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbG9ja2luZyBoaWVyYXJjaGllcyBvciBvYmplY3QgbGlmZXRpbWVzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDc4NTVlZTA5YzRiNjQuLjBhNDEwNmU5OGJjYWEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtMTYxMiwyMCAmIzQzOzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiYjNDM7CWlmIChkZXYpCiYjNDM7CQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKIAlpZiAoeHMtJmd0O3N0YXRlICE9IFhTS19SRUFEWSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtJmd0O3N4ZHBfaWZpbmRleCk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKLQluZXRkZXZfbG9ja19vcHMoZGV2KTsKLQogCWlmICgheHMtJmd0O3J4ICZhbXA7JmFtcDsgIXhzLSZndDt0eCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNzYyLDE4ICYjNDM7MTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCX0KIAogb3V0X3VubG9jazoKLQlpZiAoZXJyKSB7Ci0JCWRldl9wdXQoZGV2KTsKLQl9IGVsc2UgewomIzQzOwlpZiAoIWVycikgewogCQkvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtCiAJCSAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS4KIAkJICovCiAJCXNtcF93bWIoKTsKIAkJV1JJVEVfT05DRSh4cy0mZ3Q7c3RhdGUsIFhTS19CT1VORCk7CiAJfQotCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiBvdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwomIzQzOwlpZiAoZGV2KSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CX0KIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgeHNrX2JpbmQoKWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGB4c2tfYmluZCgpYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBwcm9wZXIgdmlldyBvZiB0aGUgY29kZSBpbiBjb250ZXh0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDU6XHRcdGZsYWdzID0gc3hkcC1cdTAwM2VzeGRwX2ZsYWdzO1xuMTYwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcbjE2MDc6XHRcdFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxuMTYwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MDk6XHRcbjE2MTA6XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuMTYxMTpcdFx0aWYgKGJvdW5kX2Rldl9pZiBcdTAwMjZcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KVxuMTYxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJ0bmxfbG9jaygpO1xuMTYxNTpcdFxuMTYxNjpcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbjE2MTc6XHRcdGlmIChkZXYpXG4xNjE4Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuMTYxOTpcdFxuMTYyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xNjIxOlx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG4xNjIyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjE2MjM6XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbjE2MjQ6XHRcdH1cbjE2MjU6XHRcbjE2MjY6XHRcdGlmICghZGV2KSB7XG4xNjI3Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4xNjI4Olx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRpZiAoIXhzLVx1MDAzZXJ4IFx1MDAyNlx1MDAyNiAheHMtXHUwMDNldHgpIHtcbjE2MzI6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2MzM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0cWlkID0gc3hkcC1cdTAwM2VzeGRwX3F1ZXVlX2lkO1xuMTYzNzpcdFxuMTYzODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBYRFBfU0hBUkVEX1VNRU0pIHtcbjE2Mzk6XHRcdFx0c3RydWN0IHhkcF9zb2NrICp1bWVtX3hzO1xuMTY0MDpcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTY0MTpcdFxuMTY0MjpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBYRFBfQ09QWSkgfHwgKGZsYWdzIFx1MDAyNiBYRFBfWkVST0NPUFkpIHx8XG4xNjQzOlx0XHRcdCAgICAoZmxhZ3MgXHUwMDI2IFhEUF9VU0VfTkVFRF9XQUtFVVApIHx8IChmbGFncyBcdTAwMjYgWERQX1VTRV9TRykpIHtcbjE2NDQ6XHRcdFx0XHQvKiBDYW5ub3Qgc3BlY2lmeSBmbGFncyBmb3Igc2hhcmVkIHNvY2tldHMuICovXG4xNjQ1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NDY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjQ3Olx0XHRcdH1cbjE2NDg6XHRcbjE2NDk6XHRcdFx0aWYgKHhzLVx1MDAzZXVtZW0pIHtcbjE2NTA6XHRcdFx0XHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cbjE2NTE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTY1MjpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE2NTM6XHRcdFx0fVxuMTY1NDpcdFxuMTY1NTpcdFx0XHRzb2NrID0geHNrX2xvb2t1cF94c2tfZnJvbV9mZChzeGRwLVx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xuMTY1NjpcdFx0XHRpZiAoSVNfRVJSKHNvY2spKSB7XG4xNjU3Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcbjE2NTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjU5Olx0XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVx1MDAzZXNrKTtcbjE2NjI6XHRcdFx0aWYgKCF4c2tfaXNfYm91bmQodW1lbV94cykpIHtcbjE2NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG4xNjY0Olx0XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjY2Olx0XHRcdH1cbjE2Njc6XHRcbjE2Njg6XHRcdFx0aWYgKHVtZW1feHMtXHUwMDNlcXVldWVfaWQgIT0gcWlkIHx8IHVtZW1feHMtXHUwMDNlZGV2ICE9IGRldikge1xuMTY2OTpcdFx0XHRcdC8qIE9uZSBmaWxsIGFuZCBjb21wbGV0aW9uIHJpbmcgcmVxdWlyZWQgZm9yIGVhY2ggcXVldWUgaWQuICovXG4xNjcwOlx0XHRcdFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xuMTY3MTpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE2NzI6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjczOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjc0Olx0XHRcdFx0fVxuMTY3NTpcdFxuMTY3NjpcdFx0XHRcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcbjE2Nzc6XHRcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuMTY3ODpcdFx0XHRcdCAqL1xuMTY3OTpcdFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuMTY4MDpcdFx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4xNjgxOlx0XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuMTY4MjpcdFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuMTY4MzpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2ODQ6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjg1Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjg2Olx0XHRcdFx0fVxuMTY4NzpcdFxuMTY4ODpcdFx0XHRcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVx1MDAzZXBvb2wsIHVtZW1feHMsIGRldixcbjE2ODk6XHRcdFx0XHRcdFx0XHQgICBxaWQpO1xuMTY5MDpcdFx0XHRcdGlmIChlcnIpIHtcbjE2OTE6XHRcdFx0XHRcdHhwX2Rlc3Ryb3koeHMtXHUwMDNlcG9vbCk7XG4xNjkyOlx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbjE2OTM6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNjk0Olx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNjk1Olx0XHRcdFx0fVxuMTY5NjpcdFx0XHR9IGVsc2Uge1xuMTY5NzpcdFx0XHRcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXG4xNjk4Olx0XHRcdFx0aWYgKHhzLVx1MDAzZWZxX3RtcCB8fCB4cy1cdTAwM2VjcV90bXApIHtcbjE2OTk6XHRcdFx0XHRcdC8qIERvIG5vdCBhbGxvdyBzZXR0aW5nIHlvdXIgb3duIGZxIG9yIGNxLiAqL1xuMTcwMDpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MDE6XHRcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4xNzAyOlx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xNzAzOlx0XHRcdFx0fVxuMTcwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgeHNrX2JpbmRgKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIGB4c2tfYmluZGAgYXJvdW5kIGxpbmUgMTc1MC0xNzg1LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21lIGNydWNpYWwgbG9naWMgaW4gdGhlcmUgdGhhdCBJJiMzOTttIG1pc3NpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBub3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdGhhdCBnb3Zlcm5zIHRoZSBiaW5kaW5nIHByb2Nlc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwsIHRvIHNlZSB3aGF0IGlzc3VlcyBhcmUgYW50aWNpcGF0ZWQgYW5kIGhvdyB0aGV5IGFyZSBhZGRyZXNzZWQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHRcdHhzLVx1MDAzZWNxX3RtcCA9IE5VTEw7XG4xNzUxOlx0XG4xNzUyOlx0XHR4cy1cdTAwM2VkZXYgPSBkZXY7XG4xNzUzOlx0XHR4cy1cdTAwM2V6YyA9IHhzLVx1MDAzZXVtZW0tXHUwMDNlemM7XG4xNzU0Olx0XHR4cy1cdTAwM2VzZyA9ICEhKHhzLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xuMTc1NTpcdFx0eHMtXHUwMDNlcXVldWVfaWQgPSBxaWQ7XG4xNzU2Olx0XHR4cF9hZGRfeHNrKHhzLVx1MDAzZXBvb2wsIHhzKTtcbjE3NTc6XHRcbjE3NTg6XHRcdGlmIChxaWQgXHUwMDNjIGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbjE3NTk6XHRcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuMTc2MDpcdFxuMTc2MTpcdFx0XHRyeHEgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIHFpZCk7XG4xNzYyOlx0XHRcdGlmIChyeHEtXHUwMDNlbmFwaSlcbjE3NjM6XHRcdFx0XHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXHUwMDNlbmFwaS1cdTAwM2VuYXBpX2lkKTtcbjE3NjQ6XHRcdH1cbjE3NjU6XHRcbjE3NjY6XHRvdXRfdW5sb2NrOlxuMTc2NzpcdFx0aWYgKCFlcnIpIHtcbjE3Njg6XHRcdFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxuMTc2OTpcdFx0XHQgKiBzb2NrZXRzLCBhbmQgeHNrX2lzX2JvdW5kKCkuXG4xNzcwOlx0XHRcdCAqL1xuMTc3MTpcdFx0XHRzbXBfd21iKCk7XG4xNzcyOlx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG4xNzczOlx0XHR9XG4xNzc0Olx0b3V0X3JlbGVhc2U6XG4xNzc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuMTc3NjpcdFx0aWYgKGRldikge1xuMTc3NzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMTc3ODpcdFx0XHRpZiAoZXJyKVxuMTc3OTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3ODA6XHRcdH1cbjE3ODE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xNzgyOlx0XHRyZXR1cm4gZXJyO1xuMTc4MzpcdH1cbjE3ODQ6XHRcbjE3ODU6XHRzdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbjE3ODY6XHRcdF9fdTY0IGFkZHI7IC8qIFN0YXJ0IG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODc6XHRcdF9fdTY0IGxlbjsgLyogTGVuZ3RoIG9mIHBhY2tldCBkYXRhIGFyZWEgKi9cbjE3ODg6XHRcdF9fdTMyIGNodW5rX3NpemU7XG4xNzg5Olx0XHRfX3UzMiBoZWFkcm9vbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhTSyBCaW5kIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB4c2suY2AgZGlmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlIHdpdGhpbiB0aGUgWFNLIChlWHByZXNzIERhdGEgUGF0aCBTb2NrZXRzKSBiaW5kaW5nIHByb2Nlc3MuIFRoZSBvbGQgb3JkZXIgb2YgbG9ja2luZyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNyZWF0ZSBhIGxvY2sgaW52ZXJzaW9uIHNjZW5hcmlvLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgZGV2YCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGxvY2tpbmcgYHhzLSZndDttdXRleGAuIFByZXZpb3VzbHksIHRoZSBsb2NrIG9yZGVyIHdhcyBgcnRubF9sb2NrYCwgYHhzLSZndDttdXRleGAsIGFuZCAqdGhlbiogdGhlIGBuZXRkZXZgIGxvY2suIE5vdywgdGhlIGBuZXRkZXZgIGxvY2sgaXMgYWNxdWlyZWQgKmJlZm9yZSogYHhzLSZndDttdXRleGAgYW5kIHVubG9ja2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLgoKU28sIHRoZSBwcmV2aW91cyBjb2RlIGhhZCBhIGNyaXRpY2FsIHNlY3Rpb24gd2hlcmUgYm90aCBgeHMtJmd0O211dGV4YCBhbmQgdGhlIGBuZXRkZXZgIGxvY2sgd2VyZSBoZWxkIHNpbXVsdGFuZW91c2x5LCB3aXRoIHRoZSBuZXRkZXYgbG9jayBhY3F1aXJlZCBhZnRlciB4cy0mZ3Q7bXV0ZXguCgpUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGF0dGVtcHQgdG8gcHJldmVudCBhIGRlYWRsb2NrLCByaWdodD8gVGhlIGdvYWwgaGVyZSBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIHRoZSBsb2NraW5nIGhpZXJhcmNoeSB0byBhdm9pZCB0aGF0IGludmVyc2lvbiwgaS5lLiwgcHJldmVudCBhIHNpdHVhdGlvbiB3aGVyZSB0d28gdGhyZWFkcyBhcmUgZWFjaCB3YWl0aW5nIGZvciBhIGxvY2sgaGVsZCBieSB0aGUgb3RoZXIsIGFuZCB0aHVzIGJsb2NraW5nIGluZGVmaW5pdGVseS4gVGhlIG5ldyBvcmRlciBpcyBkZXNpZ25lZCB0byBiZSBtb3JlIHJvYnVzdC4gSWYgaXQgd2FzIGludHJvZHVjZWQgdGhpcyB3YXksIHRoZW4gdGhlIGxvY2sgb3JkZXIgaXM6CgoxLiBgcnRubF9sb2NrYAoyLiBgZGV2ID0gZGV2X2dldF9ieV9pbmRleCguLi4pYAozLiBgbmV0ZGV2X2xvY2tfb3BzKGRldilgCjQuIGBtdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KWAKCndoaWNoIGxvb2tzIG11Y2ggYmV0dGVyLgoKTm93IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSBvciBsb29rIGF0IHJlbGF0ZWQgcGF0Y2hlcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHJlbGF0ZWQgaXNzdWVzIHRvIGdldCB0aGUgY29udGV4dCBiZWhpbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIGFuZCAqY29uZmlybSogaXQgd2FzIGluZGVlZCBhIGRlYWRsb2NrIGZpeC4gUHJvYmFibHkgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRjaCBpbiB0aGUgaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgb25lLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgY29tbWl0IHdoaWNoIGFkZHJlc3NlcyB0aGUgbG9jayBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTE2MTctXHRpZiAoZGV2KVxubmV0L3hkcC94c2suYzoxNjE4Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC94ZHAveHNrLmMtMTYxOS1cbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjk2LVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3Olx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTgtXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTG9ja2luZyBpbiBYRFAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgWERQIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB4cy0mZ3Q7bXV0ZXhgIG9yIGBuZXRkZXZfbG9ja19vcHNgLiBIbW0sIGxldCYjMzk7cyBzZWUuLi4gKmFoYSEqIEluIGB4cF9jbGVhcl9kZXZgLCB3aGljaCBJIGJlbGlldmUgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIG9yIHJlc2V0dGluZyBhIG5ldHdvcmsgZGV2aWNlLiBJIGtub3cgdGhhdCB0aGUgZnVuY3Rpb24gYHhwX2NsZWFyX2RldmAgYWNxdWlyZXMgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgcHJvYmFibHkgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCYjMzk7cyBhbHNvIGxvY2tpbmcgdGhlIGB4c2tfYnVmZl9wb29sYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvdGVjdGluZyBzaGFyZWQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIFhEUCBzb2NrZXRzLiBSaWdodCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBsb29rIGF0IGhvdyBgeHBfY2xlYXJfZGV2YCBkb2VzIHRoaXMsIHNvIGxldCBtZSBvcGVuIHVwIGBuZXQveGRwL3hza19idWZmX3Bvb2wuY2AgYW5kIHRha2UgYSBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgbG9ja3Mgd2l0aCB0aGVpciByZXNwZWN0aXZlIGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiB4cF9hc3NpZ25fZGV2KHBvb2wsIGRldiwgcXVldWVfaWQsIGZsYWdzKTtcbiAyODg6XHR9XG4gMjg5Olx0XG4gMjkwOlx0dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBvb2wtXHUwMDNlbmV0ZGV2O1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKCFwb29sLVx1MDAzZW5ldGRldilcbiAyOTU6XHRcdFx0cmV0dXJuO1xuIDI5NjpcdFxuIDI5NzpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMjk4Olx0XHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcbiAyOTk6XHRcdHhza19jbGVhcl9wb29sX2F0X3FpZChwb29sLVx1MDAzZW5ldGRldiwgcG9vbC1cdTAwM2VxdWV1ZV9pZCk7XG4gMzAwOlx0XHRwb29sLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gMzAxOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDMwMjpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCB4cF9yZWxlYXNlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCxcbiAzMDg6XHRcdFx0XHRcdFx0XHQgIHdvcmspO1xuIDMwOTpcdFxuIDMxMDpcdFx0cnRubF9sb2NrKCk7XG4gMzExOlx0XHR4cF9jbGVhcl9kZXYocG9vbCk7XG4gMzEyOlx0XHRydG5sX3VubG9jaygpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHBvb2wtXHUwMDNlZnEpIHtcbiAzMTU6XHRcdFx0eHNrcV9kZXN0cm95KHBvb2wtXHUwMDNlZnEpO1xuIDMxNjpcdFx0XHRwb29sLVx1MDAzZWZxID0gTlVMTDtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChwb29sLVx1MDAzZWNxKSB7XG4gMzIwOlx0XHRcdHhza3FfZGVzdHJveShwb29sLVx1MDAzZWNxKTtcbiAzMjE6XHRcdFx0cG9vbC1cdTAwM2VjcSA9IE5VTEw7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHR4ZHBfcHV0X3VtZW0ocG9vbC1cdTAwM2V1bWVtLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NrIE9yZGVyaW5nIGFuZCBDbGVhbnVwIGluIGB4c2tfYmluZCgpYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQgb24gbG9jayBvcmRlcmluZyBhbmQgY2xlYW51cCB3aXRoaW4gdGhlIGB4c2tfYmluZCgpYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdmVyaWZpY2F0aW9uOiBkb2VzIHRoaXMgZnVuY3Rpb24gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IGNvcHkgYW55dGhpbmcgc2Vuc2l0aXZlIHRvIHVzZXJzcGFjZT8gTG9va3MgbGlrZSBhIGdvb2Qgc3RhcnQgYXMgaXQmIzM5O3MganVzdCBhIHN0YW5kYXJkIGBiaW5kKClgIHNvY2tldCBvcGVyYXRpb24uCgpTbywgdGhpcyBgeHNrX2JpbmQoKWAgZnVuY3Rpb24sIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilgLCB0YWtlcyB0aGUgYGFkZHJgIGFuZCBgYWRkcl9sZW5gIGFzIGlucHV0cy4gSXTigJlzIGFsbCBhYm91dCBzYW5pdHkgY2hlY2tzIGFuZCBsb2NrIGFjcXVpc2l0aW9uOiBgcnRubF9sb2NrKClgLCB0aGVuIGl0IGdyYWJzIHRoZSBkZXZpY2UgdXNpbmcgYGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLSZndDtzeGRwX2lmaW5kZXgpYCwgc3Vic2VxdWVudGx5IGxvY2tpbmcgaXQgd2l0aCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBXZSBhbHNvIGhhdmUgYG11dGV4X2xvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpYC4KClRoZW4gdGhlIGNvcmUgbG9naWMuIElmIHRoZSBYU0sgc3RhdGUgaXNuJiMzOTt0IHJlYWR5LCB3ZSBnZXQgLUVCVVNZIGFuZCBqdW1wIG91dC4gTm8gZGV2aWNlPyAtRU5PREVWIGFuZCBqdW1wIG91dC4gTm8gUlggb3IgVFggcXVldWVzPyAtRUlOVkFMIGFuZCBqdW1wIG91dC4gT3RoZXJ3aXNlLCBpdCBzZXRzIHVwIHRoZSBxdWV1ZXMsIHBvb2wsIGFuZCBzbyBvbi4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgcmVsZWFzZSBwYXRoLiBJZiBubyBlcnJvciBvY2N1cnJlZCwgYFdSSVRFX09OQ0UoeHMtJmd0O3N0YXRlLCBYU0tfQk9VTkQpYC4gVGhlIHVubG9jayBzZXF1ZW5jZSBpcyBjcml0aWNhbCBoZXJlOiBgbXV0ZXhfdW5sb2NrKCZhbXA7eHMtJmd0O211dGV4KWAsIHRoZW4gY29uZGl0aW9uYWxseSB1bmxvY2sgdGhlIGRldmljZSB3aXRoIGBuZXRkZXZfdW5sb2NrX29wcyhkZXYpYCBhbmQgcHV0IHRoZSBkZXZpY2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIEZpbmFsbHksIGBydG5sX3VubG9jaygpYCBhbmQgdGhlIHJldHVybi4KCk5vdywgdGhlIGltcG9ydGFudCBjaGVjay4gVGhlIGBkZXZgIGhhbmRsaW5nLi4uIGBkZXZgIGlzIGluaXRpYWxseSBgTlVMTGA/IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBkZXZgIGlzIGJlaW5nIGhhbmRsZWQsIHNvIEkmIzM5O20gaGVhZGluZyB0byBgbmV0L3hkcC94c2suY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNTkwLTE2MTUsIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGxvY2tzIGFyZSBiZWluZyByZWxlYXNlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTkwOlx0c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuMTU5MTpcdHtcbjE1OTI6XHRcdHN0cnVjdCBzb2NrYWRkcl94ZHAgKnN4ZHAgPSAoc3RydWN0IHNvY2thZGRyX3hkcCAqKWFkZHI7XG4xNTkzOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuMTU5NDpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XG4xNTk1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMTU5NjpcdFx0aW50IGJvdW5kX2Rldl9pZjtcbjE1OTc6XHRcdHUzMiBmbGFncywgcWlkO1xuMTU5ODpcdFx0aW50IGVyciA9IDA7XG4xNTk5Olx0XG4xNjAwOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfeGRwKSlcbjE2MDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjAyOlx0XHRpZiAoc3hkcC1cdTAwM2VzeGRwX2ZhbWlseSAhPSBBRl9YRFApXG4xNjAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwNDpcdFxuMTYwNTpcdFx0ZmxhZ3MgPSBzeGRwLVx1MDAzZXN4ZHBfZmxhZ3M7XG4xNjA2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IH4oWERQX1NIQVJFRF9VTUVNIHwgWERQX0NPUFkgfCBYRFBfWkVST0NPUFkgfFxuMTYwNzpcdFx0XHQgICAgICBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1VTRV9TRykpXG4xNjA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwOTpcdFxuMTYxMDpcdFx0Ym91bmRfZGV2X2lmID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4xNjExOlx0XHRpZiAoYm91bmRfZGV2X2lmIFx1MDAyNlx1MDAyNiBib3VuZF9kZXZfaWYgIT0gc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpXG4xNjEyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYxMzpcdFxuMTYxNDpcdFx0cnRubF9sb2NrKCk7XG4xNjE1Olx0XG4xNjE2Olx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuMTYxNzpcdFx0aWYgKGRldilcbjE2MTg6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4xNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NzYKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBTZXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBhbmQgdGhlIGtleSBsaW5lcy4gQXQgbGluZSAxNTk1LCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtgIGlzIGluZGVlZCB1bmluaXRpYWxpemVkLCBidXQgbGluZSAxNjE2IGFzc2lnbnMgaXQgaW1tZWRpYXRlbHkgdmlhIGBkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KC4uLilgLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUgYW55IHVzZS4gVGhpcyBpcyBjcnVjaWFsOyB0aGUgY29kZSBlc3RhYmxpc2hlcyBgZGV2YCBiZWZvcmUgYW55IHJlYWRzIG9yIGJyYW5jaGVzIHRoYXQgd291bGQgcmVseSBvbiBpdHMgaW5pdGlhbCBzdGF0ZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyLiBTcGVjaWZpY2FsbHksIHRoZSBvcmRlciBvZiBhY3F1aXJpbmcgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBhbmQgYHhzLSZndDttdXRleGAgaXMgbW9kaWZpZWQgZHVyaW5nIHRoZSBBRl9YRFAgc29ja2V0IGJpbmQgcHJvY2Vzcy4gVGhlIGNvZGUgdGhlbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIGVuc3VyZXMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBwcm9wZXJseS4gVGhlIG9yaWdpbmFsIHBhdGNoIGxvZ2ljIHRoZW4gZXhlY3V0ZXMgY2hlY2tzIGFuZCByZWxlYXNlcyB0aGUgcmVzb3VyY2VzIGF0IGBvdXRfcmVsZWFzZWAuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyAqbm90KiB0aGUgZ28tdG8gdG9vbCBmb3IgbG9jayBvcmRlciBpc3N1ZXMsIGRlYWRsb2NrcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaG9zZSBhcmUgaGFuZGxlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMuCgpOb3csIGxldCYjMzk7cyBtYXAgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dDoKCjEuICBUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGFyZSBpbnZvbHZlZC4KMi4gIEludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgZGV2YCBpcyBpbml0aWFsaXplZCByaWdodCBhd2F5LgozLiAgQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICBJbnRyb2R1Y2UgYW55IG5ldyBib3VuZHMgY2hlY2sgb3IgbGVuZ3RoIGxvZ2ljIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBieXRlcyB0byBiZSByZWFkIGZyb20gZXhpc3RpbmcgYnVmZmVycy4KClRoaXMgaXMgYSByZW9yZGVyaW5nIG9mIGxvY2tzIHRvIHByZXZlbnQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBleGl0IHBhdGgsIGJ1dCB0aGlzIGlzIGhhbmRsZWQgYnkgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGFuZCBgZGV2X3B1dChkZXYpYC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIGRhdGEgcGF0aCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbnkgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBkZWFkbG9ja3MsIG9yIHJlZmVyZW5jZSBjb3VudCBidWdzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LiBNeSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXHUwMDNlbXV0ZXgsIHJlc29sdmluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLCBhbmQgdXBkYXRlcyB0aGUgY2xlYW51cCBwYXRoIChuZXRkZXZfdW5sb2NrX29wcyBhbmQgZGV2X3B1dCkuIFRoZSBwYXRjaCBzdHJpY3RseSBhbHRlcnMgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljOyBpdCBkb2VzIG5vdCB0b3VjaCBhbnkgZGF0YSBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbG9ja2luZyBoaWVyYXJjaGllcyBvciBvYmplY3QgbGlmZXRpbWVzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVx1MDAzZW11dGV4LCByZXNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jaywgYW5kIHVwZGF0ZXMgdGhlIGNsZWFudXAgcGF0aCAobmV0ZGV2X3VubG9ja19vcHMgYW5kIGRldl9wdXQpLiBUaGUgcGF0Y2ggc3RyaWN0bHkgYWx0ZXJzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYzsgaXQgZG9lcyBub3QgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGxvY2tpbmcgaGllcmFyY2hpZXMgb3Igb2JqZWN0IGxpZmV0aW1lcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAwLjg1MDEzNzM4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTU1MzcxNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgbG9ja2luZyBvcGVyYXRpb25zIGluIHhza19iaW5kKCkgdG8gYWNxdWlyZSBuZXRkZXZfbG9ja19vcHMoZGV2KSBwcmlvciB0byB0YWtpbmcgeHMtXFx1MDAzZW11dGV4LCByZXNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jaywgYW5kIHVwZGF0ZXMgdGhlIGNsZWFudXAgcGF0aCAobmV0ZGV2X3VubG9ja19vcHMgYW5kIGRldl9wdXQpLiBUaGUgcGF0Y2ggc3RyaWN0bHkgYWx0ZXJzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYzsgaXQgZG9lcyBub3QgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGxvY2tpbmcgaGllcmFyY2hpZXMgb3Igb2JqZWN0IGxpZmV0aW1lcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTowMC44NTAxNDMzODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjA3ODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6MDU6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4wYTQxMDZlOThiY2FhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTE2MTIsMjAgKzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbitcXHRpZiAoZGV2KVxcbitcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuIFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuIFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gXFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleCk7XFxuIFxcdGlmICghZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbi1cXG4gXFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE3NjIsMTggKzE3NjQsMjAgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0fVxcbiBcXG4gb3V0X3VubG9jazpcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfcHV0KGRldik7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghZXJyKSB7XFxuIFxcdFxcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cXG4gXFx0XFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c21wX3dtYigpO1xcbiBcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcXG4gXFx0fVxcbi1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiBvdXRfcmVsZWFzZTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbitcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4rXFx0fVxcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAxLjQ2Mjg5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNzEwNzQ1MDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19iaW5kKCkgaW4gbmV0L3hkcC94c2suYywgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiBuZXRkZXZfbG9ja19vcHMoKSBhbmQgeHMtXFx1MDAzZW11dGV4IGFzIHdlbGwgYXMgYWRqdXN0aW5nIGRldmljZSBsb29rdXAsIHJlZmNvdW50aW5nLCBhbmQgZXJyb3ItaGFuZGxpbmcgY2xlYW51cCBkdXJpbmcgQUZfWERQIHNvY2tldCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIHNvY2tldCBzeXNjYWxscyBhbmQgd2FycmFudHMgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIGNvbmN1cnJlbmN5IGJ1Z3MsIG9yIGxvY2tkZXAgaW52ZXJzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTIyZDBhNzRlMGY3MGU4YTE1NTI3MDc0OTVlYzY2YzY5YTgyMTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6MDU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggNzg1NWVlMDljNGI2NC4uMGE0MTA2ZTk4YmNhYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbisrKyBiL25ldC94ZHAveHNrLmNcbkBAIC0xNjEyLDIwICsxNjEyLDIyIEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4rXG4rXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuK1x0aWYgKGRldilcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbiBcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0fVxuIFxuLVx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbiBcdGlmICghZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbi1cbiBcdGlmICgheHMtXHUwMDNlcnggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2V0eCkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTc2MiwxOCArMTc2NCwyMCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0fVxuIFxuIG91dF91bmxvY2s6XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9wdXQoZGV2KTtcbi1cdH0gZWxzZSB7XG4rXHRpZiAoIWVycikge1xuIFx0XHQvKiBNYXRjaGVzIHNtcF9ybWIoKSBpbiBiaW5kKCkgZm9yIHNoYXJlZCB1bWVtXG4gXHRcdCAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS5cbiBcdFx0ICovXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcbiBcdH1cbi1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4gb3V0X3JlbGVhc2U6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuK1x0aWYgKGRldikge1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGRldl9wdXQoZGV2KTtcbitcdH1cbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjAxLjQ2Mjg5MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzcwNDkzMDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBCaW5kIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHRydXN0eSBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCB0byBnZXQgYSBnb29kLCBjb250ZXh0dWFsIG92ZXJ2aWV3LiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgYW5kIHdoeS4gSXQncyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjI5LjE2NzgyNTk0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfeGRwKSlcXG4xNjAxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDI6XFx0XFx0aWYgKHN4ZHAtXFx1MDAzZXN4ZHBfZmFtaWx5ICE9IEFGX1hEUClcXG4xNjAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRmbGFncyA9IHN4ZHAtXFx1MDAzZXN4ZHBfZmxhZ3M7XFxuMTYwNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcXG4xNjA3OlxcdFxcdFxcdCAgICAgIFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfVVNFX1NHKSlcXG4xNjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDk6XFx0XFxuMTYxMDpcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuMTYxMTpcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2IGJvdW5kX2Rldl9pZiAhPSBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpXFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbjE2MTc6XFx0XFx0aWYgKGRldilcXG4xNjE4OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE2MjE6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4xNjIyOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNjIzOlxcdFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuMTYyNDpcXHRcXHR9XFxuMTYyNTpcXHRcXG4xNjI2OlxcdFxcdGlmICghZGV2KSB7XFxuMTYyNzpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4xNjI5OlxcdFxcdH1cXG4xNjMwOlxcdFxcbjE2MzE6XFx0XFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbjE2MzI6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjM0OlxcdFxcdH1cXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0cWlkID0gc3hkcC1cXHUwMDNlc3hkcF9xdWV1ZV9pZDtcXG4xNjM3OlxcdFxcbjE2Mzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgWERQX1NIQVJFRF9VTUVNKSB7XFxuMTYzOTpcXHRcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHM7XFxuMTY0MDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbjE2NDE6XFx0XFxuMTY0MjpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgWERQX0NPUFkpIHx8IChmbGFncyBcXHUwMDI2IFhEUF9aRVJPQ09QWSkgfHxcXG4xNjQzOlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX05FRURfV0FLRVVQKSB8fCAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX1NHKSkge1xcbjE2NDQ6XFx0XFx0XFx0XFx0LyogQ2Fubm90IHNwZWNpZnkgZmxhZ3MgZm9yIHNoYXJlZCBzb2NrZXRzLiAqL1xcbjE2NDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjQ3OlxcdFxcdFxcdH1cXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0aWYgKHhzLVxcdTAwM2V1bWVtKSB7XFxuMTY1MDpcXHRcXHRcXHRcXHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cXG4xNjUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTY1MjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY1MzpcXHRcXHRcXHR9XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdFxcdHNvY2sgPSB4c2tfbG9va3VwX3hza19mcm9tX2ZkKHN4ZHAtXFx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xcbjE2NTY6XFx0XFx0XFx0aWYgKElTX0VSUihzb2NrKSkge1xcbjE2NTc6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcXG4xNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjU5OlxcdFxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0XFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVxcdTAwM2Vzayk7XFxuMTY2MjpcXHRcXHRcXHRpZiAoIXhza19pc19ib3VuZCh1bWVtX3hzKSkge1xcbjE2NjM6XFx0XFx0XFx0XFx0ZXJyID0gLUVCQURGO1xcbjE2NjQ6XFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG4xNjY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjY2OlxcdFxcdFxcdH1cXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0XFx0aWYgKHVtZW1feHMtXFx1MDAzZXF1ZXVlX2lkICE9IHFpZCB8fCB1bWVtX3hzLVxcdTAwM2VkZXYgIT0gZGV2KSB7XFxuMTY2OTpcXHRcXHRcXHRcXHQvKiBPbmUgZmlsbCBhbmQgY29tcGxldGlvbiByaW5nIHJlcXVpcmVkIGZvciBlYWNoIHF1ZXVlIGlkLiAqL1xcbjE2NzA6XFx0XFx0XFx0XFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xcbjE2NzE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjcyOlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY3NDpcXHRcXHRcXHRcXHR9XFxuMTY3NTpcXHRcXG4xNjc2OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcXG4xNjc3OlxcdFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuMTY3ODpcXHRcXHRcXHRcXHQgKi9cXG4xNjc5OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcXG4xNjgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4xNjgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbjE2ODI6XFx0XFx0XFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbjE2ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNjg0OlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdFxcdFxcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVxcdTAwM2Vwb29sLCB1bWVtX3hzLCBkZXYsXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxaWQpO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjE2OTE6XFx0XFx0XFx0XFx0XFx0eHBfZGVzdHJveSh4cy1cXHUwMDNlcG9vbCk7XFxuMTY5MjpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuMTY5MzpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE2OTU6XFx0XFx0XFx0XFx0fVxcbjE2OTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xNjk3OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXFxuMTY5ODpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWZxX3RtcCB8fCB4cy1cXHUwMDNlY3FfdG1wKSB7XFxuMTY5OTpcXHRcXHRcXHRcXHRcXHQvKiBEbyBub3QgYWxsb3cgc2V0dGluZyB5b3VyIG93biBmcSBvciBjcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6MjkuMTY3OTg5MzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQxODI1NDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBEZWVwZXIgaW50byBgeHNrX2JpbmRgKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAxNzUwIHRvIDE3ODUuIEkgbmVlZCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGB4c2tfYmluZGAgYWN0dWFsbHkgZnVuY3Rpb25zLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBYRFAvQUZfWERQIGxhbmRzY2FwZSwgYnV0IGRldGFpbHMgYXJlIGNydWNpYWwsIGFuZCBzb21ldGltZXMgdGhlIG51YW5jZXMgYXJlIGJ1cmllZCBkZWVwZXIgdGhhbiB0aGUgaW5pdGlhbCBmdW5jdGlvbiBjYWxsLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNlZ21lbnQuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IHN1YnRsZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSwgb3IgYW55IGhpZGRlbiBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gcmV2ZWFsIHRoZSByZW1haW5pbmcgc3RlcHMgb2YgdGhlIGJpbmQsIHBlcmhhcHMgdGhlIHNldHVwIG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBpdHNlbGYsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBvcGVyYXRpb25hbCB3b3JrZmxvdyBvZiB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhbmQgZGVidWcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjMxLjU4NjI0OTgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NTA6XFx0XFx0eHMtXFx1MDAzZWNxX3RtcCA9IE5VTEw7XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdHhzLVxcdTAwM2VkZXYgPSBkZXY7XFxuMTc1MzpcXHRcXHR4cy1cXHUwMDNlemMgPSB4cy1cXHUwMDNldW1lbS1cXHUwMDNlemM7XFxuMTc1NDpcXHRcXHR4cy1cXHUwMDNlc2cgPSAhISh4cy1cXHUwMDNldW1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKTtcXG4xNzU1OlxcdFxcdHhzLVxcdTAwM2VxdWV1ZV9pZCA9IHFpZDtcXG4xNzU2OlxcdFxcdHhwX2FkZF94c2soeHMtXFx1MDAzZXBvb2wsIHhzKTtcXG4xNzU3OlxcdFxcbjE3NTg6XFx0XFx0aWYgKHFpZCBcXHUwMDNjIGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxuMTc1OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpyeHE7XFxuMTc2MDpcXHRcXG4xNzYxOlxcdFxcdFxcdHJ4cSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgcWlkKTtcXG4xNzYyOlxcdFxcdFxcdGlmIChyeHEtXFx1MDAzZW5hcGkpXFxuMTc2MzpcXHRcXHRcXHRcXHRfX3NrX21hcmtfbmFwaV9pZF9vbmNlKHNrLCByeHEtXFx1MDAzZW5hcGktXFx1MDAzZW5hcGlfaWQpO1xcbjE3NjQ6XFx0XFx0fVxcbjE3NjU6XFx0XFxuMTc2NjpcXHRvdXRfdW5sb2NrOlxcbjE3Njc6XFx0XFx0aWYgKCFlcnIpIHtcXG4xNzY4OlxcdFxcdFxcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cXG4xNzY5OlxcdFxcdFxcdCAqIHNvY2tldHMsIGFuZCB4c2tfaXNfYm91bmQoKS5cXG4xNzcwOlxcdFxcdFxcdCAqL1xcbjE3NzE6XFx0XFx0XFx0c21wX3dtYigpO1xcbjE3NzI6XFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XFxuMTc3MzpcXHRcXHR9XFxuMTc3NDpcXHRvdXRfcmVsZWFzZTpcXG4xNzc1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4xNzc2OlxcdFxcdGlmIChkZXYpIHtcXG4xNzc3OlxcdFxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuMTc3ODpcXHRcXHRcXHRpZiAoZXJyKVxcbjE3Nzk6XFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbjE3ODA6XFx0XFx0fVxcbjE3ODE6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xNzgyOlxcdFxcdHJldHVybiBlcnI7XFxuMTc4MzpcXHR9XFxuMTc4NDpcXHRcXG4xNzg1OlxcdHN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xcbjE3ODY6XFx0XFx0X191NjQgYWRkcjsgLyogU3RhcnQgb2YgcGFja2V0IGRhdGEgYXJlYSAqL1xcbjE3ODc6XFx0XFx0X191NjQgbGVuOyAvKiBMZW5ndGggb2YgcGFja2V0IGRhdGEgYXJlYSAqL1xcbjE3ODg6XFx0XFx0X191MzIgY2h1bmtfc2l6ZTtcXG4xNzg5OlxcdFxcdF9fdTMyIGhlYWRyb29tO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTozMS41ODYzOTQ2NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODY0ODUyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBCaW5kIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBsb2NrIG9yZGVyaW5nIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvY2sgYWNxdWlzaXRpb24gc2VxdWVuY2Ugd2FzOiBgcnRubF9sb2NrYCAtXHUwMDNlIGB4cy1cdTAwM2VtdXRleGAgLVx1MDAzZSBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBoYXMgZmxpcHBlZCB0aGUgc2NyaXB0LCBlc3RhYmxpc2hpbmcgYSBuZXcgb3JkZXI6IGBydG5sX2xvY2tgIC1cdTAwM2UgYG5ldGRldl9sb2NrX29wcyhkZXYpYCAtXHUwMDNlIGB4cy1cdTAwM2VtdXRleGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UhXG5cblRoZSBzaGlmdCBpbiB0aGUgbG9ja2luZyBvcmRlciBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBBY3F1aXJpbmcgdGhlIGBkZXZgJ3MgbG9jayAqYmVmb3JlKiBgeHMtXHUwMDNlbXV0ZXhgIGNhbiBlaXRoZXIgZXhwb3NlIGEgcHJldmlvdXMgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IsIGVxdWFsbHkgcGxhdXNpYmx5LCByZXNvbHZlcyBhbiBleGlzdGluZyBsb2NraW5nIHByb2JsZW0sIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gYmluZCBvciBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlc291cmNlcy4gSXQgaXMgYWxsIGFib3V0IHRoZSBvcmRlcmluZyEgVGhlIGNvbmRpdGlvbmFsIGBpZiAoZGV2KWAgc3VnZ2VzdHMgc29tZSBwb3RlbnRpYWwgZm9yIGVycm9yIGhhbmRsaW5nLiBBbHNvLCBhdCB0aGUgZW5kIGBkZXZfcHV0YCBpcyBhbHNvIG5vdyBjb25kaXRpb25hbC5cblxuQSBjcml0aWNhbCBwb2ludCBpcyB0aGUgcmV2ZXJzZSBsb2NrIHJlbGVhc2Ugb3JkZXIuIFByZXZpb3VzbHksIHRoZSByZWxlYXNlIG9yZGVyIHdhcyBgbmV0ZGV2X3VubG9ja19vcHMoZGV2KWAgdGhlbiBgbXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAuIE5vdywgdGhlIG9yZGVyIGlzIGZsaXBwZWQgYWdhaW4hIFRoZSBgbmV0ZGV2X3VubG9ja19vcHMoZGV2KWAgaXMgbm93IGNvbmRpdGlvbmFsLCBiYXNlZCBvbiB0aGUgc3VjY2Vzcy9lcnJvciBoYW5kbGluZyFcblxuR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgSSBrbm93IEFGX1hEUCAoWFNLKSBpcyBhIGNydWNpYWwgaW50ZXJmYWNlIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGFsbG93aW5nIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlcyB2aWEgc29ja2V0cy4gQW55IHN1YnRsZSBjaGFuZ2VzIGluIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgbG9ja2luZywgY2FuIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIHRoZSBgYmluZCgpYCBjYWxsLiBTaW5jZSBJIGtub3cgdGhhdCBgc3l6a2FsbGVyYCBoYXMgZXh0ZW5zaXZlIGNvdmVyYWdlIG9mIEFGX1hEUCwgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBhbmFseXNpcyB0byB2ZXJpZnkgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTozNy40NTEyNDk4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6MzcuNTAyNTMyMTM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyNDUzNTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBYRFAgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGRlZmluaXRpb24gd2lsbCBtb3N0IGxpa2VseSByZXNpZGUgaW4gb25lIG9mIHR3byBwbGFjZXM6IHRoZSBwcmltYXJ5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBgbmV0L0tjb25maWdgLCBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIFhEUC1mb2N1c2VkIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBgbmV0L3hkcC9LY29uZmlnYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gdGhlIGBDT05GSUdfWERQX1NPQ0tFVFNgIG9wdGlvbidzIGF2YWlsYWJpbGl0eSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGV0YWlscy4gVW5kZXJzdGFuZGluZyBpdHMgZXhhY3Qgc3RhdHVzIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0MC44MjcwNjk2ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODI5OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NDAuODk3OTA2MTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MTQxNDg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L3hkcC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhEUCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQveGRwL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGlzLCBhcyBJIGtub3cgbXkgd2F5IGFyb3VuZCBrZXJuZWwgS2NvbmZpZyBmaWxlcywgYW5kIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFhEUCBpcyBiZWluZyBwcmVzZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgWERQIGZ1bmN0aW9uYWxpdHkgZmxhZ3MsIG9idmlvdXNseSwgdGhlIGBYRFBfU09DS0VUU2AsIGBYRFBfVU1FTWAsIGFuZCBhbGwgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBYRFAgZmVhdHVyZXMsIGFueSBuZXcgaGFyZHdhcmUgc3VwcG9ydCB0aGF0J3MgYmVlbiBhZGRlZCwgYW55IGNoYW5nZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSSdsbCBoYXZlIGEgbG9vayBhdCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzZXQgdXDigJR3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgdGhlc2UgWERQIG9wdGlvbnMgYmVjb21lIGF2YWlsYWJsZS4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgY29tbWVudHMgb3IgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgaXRzZWxmPyBBbmQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSB3YXJuaW5ncyBwcm92aWRlZCBpZiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgaXMgY2hvc2VuLiBCYXNpY2FsbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1hcCBvZiB0aGUgWERQIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcyBpbiB0aGlzIHZlcnNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0Ni41MTIwNTcwNDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA1OjQ2LjUxMjExMzE3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzE3Mzk5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jeSBUcmVlKipcblxuT2theSwgc28gYENPTkZJR19YRFBfU09DS0VUU2AgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBCUEZfU1lTQ0FMTGAgaGFzIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzLCBvciBpZiB3ZSdyZSBnb29kIHRvIGp1c3QgZW5hYmxlIGBYRFBfU09DS0VUU2AgYW5kIHRoYXQncyBlbm91Z2ggdG8gcHVsbCBldmVyeXRoaW5nIGluLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gYSBxdWljayBncmVwIGZvciBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiIGluIGBrZXJuZWwvYnBmL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo0OS4yMjk1MTM4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTU5ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NDkuMjg4NDgwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU5OTA1NTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiB4c2tfYmluZCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGB4c2tfYmluZGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBgLmJpbmRgIG9wZXJhdGlvbiBmb3IgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIGZvY3VzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgYW5kIGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UuIFRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBuZXQveGRwL3hzay5jYCBhbmQgaHVudCBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGB4c2tfYmluZGAgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgQUZfWERQIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNTo1NS44ODc1Mzg4MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzM5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTg1PXN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU4OS1cXG5uZXQveGRwL3hzay5jOjE1OTA6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTU5MS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTIxMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE0Mi1cXHQucmVsZWFzZVxcdD0geHNrX3JlbGVhc2UsXFxubmV0L3hkcC94c2suYzoyMTQzOlxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG5uZXQveGRwL3hzay5jLTIxNDQtXFx0LmNvbm5lY3RcXHQ9IHNvY2tfbm9fY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTUuOTMyODgzODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NDM4MTc3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeHNrX2JpbmRgIExvY2sgT3JkZXJpbmcgQ2hhbmdlKipcblxuT2theSwgc28gYHhza19iaW5kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIGEgdXNlci1zcGFjZSBwcm9ncmFtIHVzZXMgdGhlIGBiaW5kKClgIHN5c3RlbSBjYWxsIG9uIGFuIEFGX1hEUCBzb2NrZXQuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGluIHRoZSBrZXJuZWwuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbG9jayBvcmRlcmluZy4gSSdsbCBuZWVkIHRvIGxvb2sgYmFjayBhdCB0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlLCBhbmQgcHJvYmFibHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9sb2NrX29wc2AgYmVpbmcgYWNxdWlyZWQgYWZ0ZXIgYHhzLVx1MDAzZW11dGV4YCBwcmV2aW91c2x5LCBhbmQgbm93IGl0J3MgZGlmZmVyZW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIGNvZGUgYXVkaXQuIEkgaGF2ZSB0byBzY2FuIHRoZSBjb2RlIGJhc2UgdG8gaWRlbnRpZnkgKm90aGVyKiBpbnN0YW5jZXMgd2hlcmUgYG5ldGRldl9sb2NrX29wc2AgYW5kIGB4cy1cdTAwM2VtdXRleGAsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYHJ0bmxfbG9ja2AgYXJlIGFjcXVpcmVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCBlbnN1cmluZyB0aGlzIG5ldyBvcmRlcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRlYWRsb2NrcyBvciBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTguNjc2NzA0ODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzNDkxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2xvY2tfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNy1cXHRpZiAoZGV2KVxcbm5ldC94ZHAveHNrLmM6MTYxODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQveGRwL3hzay5jLTE2MTktXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3OlxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDU6NTkuMTcxMDYzMzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTQ2MTk1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKk11dGV4IEFjcXVpc2l0aW9uIGluIFhTSyBCdWZmZXIgUG9vbCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBhIG11dGV4IGlzIHBvdGVudGlhbGx5IGJlaW5nIGFjcXVpcmVkLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgWFNLIGJ1ZmZlciBwb29sLiBUaGUgY29udGV4dCBJIGhhdmUgaXMgdGhlIGZ1bmN0aW9uIGB4cF9jbGVhcl9kZXZgIG9yIG1heWJlIHNvbWV3aGVyZSByZWxhdGVkLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHhzLVx1MDAzZW11dGV4YCBpcyBncmFiYmVkIHRoZXJlLiBSaWdodCwgc28gSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBjb2RlOiBJIHNob3VsZCBjaGVjayBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkwLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIG11dGV4IGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYnVmZmVyIHBvb2wncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjAxLjc4NTY4NTEwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza19idWZmX3Bvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0cmV0dXJuIHhwX2Fzc2lnbl9kZXYocG9vbCwgZGV2LCBxdWV1ZV9pZCwgZmxhZ3MpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHR2b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMjkxOlxcdHtcXG4gMjkyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwb29sLVxcdTAwM2VuZXRkZXY7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlbmV0ZGV2KVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMjk4OlxcdFxcdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xcbiAyOTk6XFx0XFx0eHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHBvb2wtXFx1MDAzZW5ldGRldiwgcG9vbC1cXHUwMDNlcXVldWVfaWQpO1xcbiAzMDA6XFx0XFx0cG9vbC1cXHUwMDNlbmV0ZGV2ID0gTlVMTDtcXG4gMzAxOlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuIDMwMjpcXHRcXHRkZXZfcHV0KG5ldGRldik7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIHhwX3JlbGVhc2VfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHhza19idWZmX3Bvb2wsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRydG5sX2xvY2soKTtcXG4gMzExOlxcdFxcdHhwX2NsZWFyX2Rldihwb29sKTtcXG4gMzEyOlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChwb29sLVxcdTAwM2VmcSkge1xcbiAzMTU6XFx0XFx0XFx0eHNrcV9kZXN0cm95KHBvb2wtXFx1MDAzZWZxKTtcXG4gMzE2OlxcdFxcdFxcdHBvb2wtXFx1MDAzZWZxID0gTlVMTDtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZWNxKSB7XFxuIDMyMDpcXHRcXHRcXHR4c2txX2Rlc3Ryb3kocG9vbC1cXHUwMDNlY3EpO1xcbiAzMjE6XFx0XFx0XFx0cG9vbC1cXHUwMDNlY3EgPSBOVUxMO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHR4ZHBfcHV0X3VtZW0ocG9vbC1cXHUwMDNldW1lbSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNjowMS43ODU3NzQxNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0MjE3ODA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgWERQIE11dGV4KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGB4cy1cdTAwM2VtdXRleGAgd2l0aGluIHRoZSBgbmV0L3hkcC9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICphbGwqIHRoZSBwbGFjZXMgdGhpcyBzcGVjaWZpYyBtdXRleCBpcyBsb2NrZWQgYW5kIHVubG9ja2VkLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBzeXN0ZW1hdGljYWxseS4gS25vd2luZyB0aGUgbG9jaydzIHNjb3BlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBYRFAgbWFuYWdlcyBpdHMgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIHByb3RlY3Rpb24uIFRoaXMgd2lsbCBwcm9iYWJseSBwcm92aWRlIGluc2lnaHRzIGludG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0cmFjayBkb3duIHRob3NlIG11dGV4IGFjcXVpc2l0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjEyLjIwNzU1NzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc4NDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdXRleF9sb2NrXFxcXChcXHUwMDI2eHMtXFx1MDAzZW11dGV4XFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTExOTE9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTk5LVxcbm5ldC94ZHAveHNrLmM6MTIwMDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMTIwMS1cXHRjYWNoZWRfY29ucyA9IHhzLVxcdTAwM2V0eC1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuLS1cXG5uZXQveGRwL3hzay5jPTE1MzA9c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNTUwLVxcdHhza19kZWxldGVfZnJvbV9tYXBzKHhzKTtcXG5uZXQveGRwL3hzay5jOjE1NTE6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jLTE1NTItXFx0eHNrX3VuYmluZF9kZXYoeHMpO1xcbi0tXFxubmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxOS1cXG5uZXQveGRwL3hzay5jOjE2MjA6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jLTE2MjEtXFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTc5Mj1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTMtXFxubmV0L3hkcC94c2suYzoxODE0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODE1LVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4NTEtXFxubmV0L3hkcC94c2suYzoxODUyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODUzLVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVxcdTAwM2V1bWVtKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4ODAtXFxubmV0L3hkcC94c2suYzoxODgxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0xODgyLVxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5MzU9c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L3hkcC94c2suYy0xOTY0LVxcbm5ldC94ZHAveHNrLmM6MTk2NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMTk2Ni1cXHRcXHRzdGF0cy5yeF9kcm9wcGVkID0geHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIwNDMtXFxubmV0L3hkcC94c2suYzoyMDQ0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYy0yMDQ1LVxcdFxcdGlmICh4cy1cXHUwMDNlemMpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxMDE9c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMTEzLVxcbm5ldC94ZHAveHNrLmM6MjExNDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmMtMjExNS1cXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4tLVxcbm5ldC94ZHAveHNrX2RpYWcuYz05Mj1zdGF0aWMgaW50IHhza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQveGRwL3hza19kaWFnLmMtMTEyLVxcbm5ldC94ZHAveHNrX2RpYWcuYzoxMTM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hza19kaWFnLmMtMTE0LVxcdGlmIChSRUFEX09OQ0UoeHMtXFx1MDAzZXN0YXRlKSA9PSBYU0tfVU5CT1VORClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6MTIuMjYxMzQ5MDI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3OTg4MzMxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHhza19ub3RpZmllcmAgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBuZXR3b3JrIGRldmljZSdzIGxpZmVjeWNsZS4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgZWl0aGVyIHVucmVnaXN0ZXJlZCBvciBleHBlcmllbmNlcyBhIFwiZG93blwiIGV2ZW50LCB0aGUgYHhza19ub3RpZmllcmAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBBbiBpbXBvcnRhbnQgZGV0YWlsIHRvIG5vdGUgaXMgdGhhdCB0aGlzIGNhbGwgaGFwcGVucyB3aGlsZSB0aGUgYHJ0bmxfbG9ja2AgaXMgYWxyZWFkeSBoZWxkLiBUaGF0J3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGFjdGlvbnMgYW5kIGxvZ2ljIHRoYXQgb2NjdXIgKndpdGhpbiogdGhlIGB4c2tfbm90aWZpZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZXNlIGxvY2tpbmcgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjE2LjA2MDE4NDM4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcbjIxMDE6XFx0c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbjIxMDI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4yMTAzOlxcdHtcXG4yMTA0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4yMTA1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4yMTA2OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4yMTA3OlxcdFxcbjIxMDg6XFx0XFx0c3dpdGNoIChtc2cpIHtcXG4yMTA5OlxcdFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuMjExMDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhkcC5sb2NrKTtcXG4yMTExOlxcdFxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2bmV0LVxcdTAwM2V4ZHAubGlzdCkge1xcbjIxMTI6XFx0XFx0XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuMjExNTpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4yMTE2OlxcdFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSBFTkVURE9XTjtcXG4yMTE3OlxcdFxcdFxcdFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxMTg6XFx0XFx0XFx0XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0XFx0XFx0XFx0eHNrX3VuYmluZF9kZXYoeHMpO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHRcXHRcXHRcXHQvKiBDbGVhciBkZXZpY2UgcmVmZXJlbmNlcy4gKi9cXG4yMTIzOlxcdFxcdFxcdFxcdFxcdHhwX2NsZWFyX2Rldih4cy1cXHUwMDNlcG9vbCk7XFxuMjEyNDpcXHRcXHRcXHRcXHR9XFxuMjEyNTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuMjEyNjpcXHRcXHRcXHR9XFxuMjEyNzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGRwLmxvY2spO1xcbjIxMjg6XFx0XFx0XFx0YnJlYWs7XFxuMjEyOTpcXHRcXHR9XFxuMjEzMDpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuMjEzMTpcXHR9XFxuMjEzMjpcXHRcXG4yMTMzOlxcdHN0YXRpYyBzdHJ1Y3QgcHJvdG8geHNrX3Byb3RvID0ge1xcbjIxMzQ6XFx0XFx0Lm5hbWUgPVxcdFxcdFxcXCJYRFBcXFwiLFxcbjIxMzU6XFx0XFx0Lm93bmVyID1cXHRUSElTX01PRFVMRSxcXG4yMTM2OlxcdFxcdC5vYmpfc2l6ZSA9XFx0c2l6ZW9mKHN0cnVjdCB4ZHBfc29jayksXFxuMjEzNzpcXHR9O1xcbjIxMzg6XFx0XFxuMjEzOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNjoxNi4wNjAzMTU4MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyODY0NDA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIE9yZGVyIGluIFhTSyBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgeHNrX25vdGlmaWVyYCBhbmQgaW1tZWRpYXRlbHkgc2VlIGBtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtgIGZvbGxvd2VkIGJ5IGB4cF9jbGVhcl9kZXYoeHMtXHUwMDNlcG9vbCk7YC4gTm93LCBgeHBfY2xlYXJfZGV2YCBjYWxscyBgbmV0ZGV2X2xvY2tfb3BzKG5ldGRldilgLiBTbywgaW4gYHhza19ub3RpZmllcmAsIHRoZSBsb2NraW5nIG9yZGVyIGlzIGNsZWFybHkgYHhzLVx1MDAzZW11dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5CdXQsIGhhbmcgb24sIHdoYXQgYWJvdXQgYHhza19iaW5kYD8gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIGZsb3cgd2FzOiBgbXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleClgIGZvbGxvd2VkIGJ5IGBuZXRkZXZfbG9ja19vcHMoZGV2KWAuIFRoYXQncyB0aGUgc2FtZSBvcmRlci4gV2FpdCwgbm8sIGxldCBtZSByZXBocmFzZSB0aGF0Li4uIGl0ICp3YXMqIHRoZSBzYW1lLlxuXG5XaGF0IGRpZCB0aGUgcGF0Y2ggY2hhbmdlLCBleGFjdGx5PyBBaGEhIFRoZSBwYXRjaCBtb2RpZmllZCBgeHNrX2JpbmRgIHRvIGluY2x1ZGU6XG5cbmBgYFxuK1x0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KTtcbitcdGlmIChkZXYpXG4rXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5gYGBcblxuT2theSwgc28gKm5vdyogaW4gYHhza19iaW5kYCwgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBpcyBjYWxsZWQgKmJlZm9yZSogYG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpYC4gVGhhdCdzIGEgY3JpdGljYWwgY2hhbmdlLiBJdCBmbGlwcGVkIHRoZSBsb2NraW5nIG9yZGVyLiBCdXQgKndoeSo/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXaGF0IGRvZXMgYG5ldGRldl9sb2NrX29wc2Agb3JkZXIgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIHBvdGVudGlhbCBkZWFkbG9ja3M/IFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbmV0ZGV2X2xvY2tfb3BzYCBhbmQgaXRzIHVzYWdlcyB3aXRoaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2ggYW5kIHRoZSBpbXBsaWNhdGlvbnMgb24gdGhlIGxvY2tpbmcgaGllcmFyY2h5LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGZpbmQgdGhlIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NDAuMzQ2NzU5NTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM3LSAqXFx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzg6ICpcXHR3aXRoIHJ0bmxfbG9jayBhbmQgbmV0ZGV2X2xvY2tfb3BzKGRldikgaGVsZC4gVGhlIHVjL21jIHBhcmFtZXRlcnNcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzktICpcXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA2OjQwLjQwMDc3NTIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjI2NzIwNjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZfbG9ja19vcHMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBvciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGxvZy4gU3BlY2lmaWNhbGx5LCBJJ2QgdXN1YWxseSByZWFjaCBmb3IgYGdpdCBsb2dgIG9uIHRoYXQgY29tbWl0IG9yIGZ1bmN0aW9uLiBCdXQgSSdtIHJlbWluZGVkIHRoYXQgSSBkb24ndCBoYXZlIHRoZSBmdWxsIGdpdCBzdWl0ZSBhdCBteSBkaXNwb3NhbC4gTm8gYGdpdCBzaG93YCBlaXRoZXIsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBwZXJmZWN0IGZvciBxdWlja2x5IHNlZWluZyB0aGUgbGF0ZXN0IGNoYW5nZXMgd2l0aCBgZ2l0IHNob3cgSEVBRGAuIFRoYXQncyBhIGxpdHRsZSBmcnVzdHJhdGluZywgYnV0IGxldCdzIHNlZSwgd2hhdCBhcmUgbXkgYXZhaWxhYmxlIHRvb2xzP1xuXG5SaWdodCwgSSdtIGxpbWl0ZWQgdG8gYGdyZXBwZXJgLCBgcmVhZC1maWxlYCwgYW5kIGBjb2Rlc2VhcmNoYC4gUGVyaGFwcyBgZ3JlcHBlcmAgY2FuIGdpdmUgbWUgd2hhdCBJIG5lZWQuIEluc3RlYWQgb2YgdGhlIGxvZyBoaXN0b3J5LCBJJ2xsIHN3aXRjaCBnZWFycy4gQ2FuIGBncmVwcGVyYCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbmV0ZGV2X2xvY2tfb3BzYCBpcyAqdXNlZCogdGhyb3VnaG91dCB0aGUga2VybmVsPyBUaGF0IG1pZ2h0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0J3MgYmVpbmcgaW1wbGVtZW50ZWQgY3VycmVudGx5LCBldmVuIHdpdGhvdXQgdGhlIGZ1bGwgZ2l0IGhpc3RvcnkuIExldCdzIHNlZSBpZiBJIGNhbiB1c2UgdGhlIHRvb2wgaW4gdGhpcyBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NTIuNjY3OTg0OTM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkxMzY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2JyaWRnZS9icl9pZi5jPTQyNj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbmV3X25icChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDQyLVxcdHAtXFx1MDAzZWRldiA9IGRldjtcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDQzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00NDQtXFx0cC1cXHUwMDNlcGF0aF9jb3N0ID0gcG9ydF9jb3N0KGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL2Rldi5jLTExMDIte1xcbm5ldC9jb3JlL2Rldi5jOjExMDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTExMDQtXFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlIFxcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg1OS1cXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxubmV0L2NvcmUvZGV2LmM6MTg2MDpcXHRcXHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xODYxLVxcdFxcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xOTM0PXN0YXRpYyB2b2lkIGNhbGxfbmV0ZGV2aWNlX3VucmVnaXN0ZXJfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xOTM3LVxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxubmV0L2NvcmUvZGV2LmM6MTkzODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xOTM5LVxcdFxcdGNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyKG5iLCBORVRERVZfR09JTkdfRE9XTixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xOTUzLVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9jb3JlL2Rldi5jOjE5NTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTk1NS1cXHRcXHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDYxMT1zdGF0aWMgdm9pZCBicGZfeGRwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDYyMC1cXHRpZiAoeGRwX2xpbmstXFx1MDAzZWRldikge1xcbm5ldC9jb3JlL2Rldi5jOjEwNjIxOlxcdFxcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cXHUwMDNlZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMDYyMi1cXHRcXHRXQVJOX09OKGRldl94ZHBfZGV0YWNoX2xpbmsoeGRwX2xpbmstXFx1MDAzZWRldiwgTlVMTCwgeGRwX2xpbmspKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNjcyPXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cXG5uZXQvY29yZS9kZXYuYzoxMDcwNTpcXHRuZXRkZXZfbG9ja19vcHMoeGRwX2xpbmstXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmMtMTA3MDYtXFx0bW9kZSA9IGRldl94ZHBfbW9kZSh4ZHBfbGluay1cXHUwMDNlZGV2LCB4ZHBfbGluay1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzYzLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzY0OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzY1LVxcdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcXHUwMDI2ZXh0YWNrLCBsaW5rKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwOTM2LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmZWF0dXJlLCBsb3dlci1cXHUwMDNlbmFtZSk7XFxubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcXG5uZXQvY29yZS9kZXYuYy0xMDkzOC1cXHRcXHRcXHRsb3dlci1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH5mZWF0dXJlO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzODQ9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MTEtXFxubmV0L2NvcmUvZGV2LmM6MTE1MTI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE1MTMtXFx0X19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTUzOS1cXHQvKiBOb3RpZnkgcHJvdG9jb2xzLCB0aGF0IGEgbmV3IGRldmljZSBhcHBlYXJlZC4gKi9cXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTU0MS1cXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI1MDMtXFx0XFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cXG5uZXQvY29yZS9kZXYuYzoxMjUwNDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMjUwNS1cXHRcXHRkZXZfc2h1dGRvd24oZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNzAyPWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc4Ni1cXG5uZXQvY29yZS9kZXYuYzoxMjc4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMjc4OC1cXHQvKiBJZiBkZXZpY2UgaXMgcnVubmluZyBjbG9zZSBpdCBmaXJzdC4gKi9cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyODAwLVxcdC8qIFNodXRkb3duIHF1ZXVlaW5nIGRpc2NpcGxpbmUuICovXFxubmV0L2NvcmUvZGV2LmM6MTI4MDE6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI4MDItXFx0ZGV2X3NodXRkb3duKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXFxuLS1cXG5uZXQvY29yZS9kZXYuaC02Mi1cXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXFx0XFxcXFxcbm5ldC9jb3JlL2Rldi5oLTY0LVxcdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcXFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTE4PWludCBkZXZfY2hhbmdlX25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmV3bmFtZSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMS1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzLVxcdHJldCA9IG5ldGlmX2NoYW5nZV9uYW1lKGRldiwgbmV3bmFtZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9Mzk9aW50IGRldl9zZXRfYWxpYXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYWxpYXMsIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXFxubmV0L2NvcmUvZGV2X2FwaS5jOjQzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cXHRyZXQgPSBuZXRpZl9zZXRfYWxpYXMoZGV2LCBhbGlhcywgbGVuKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtNjYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjY3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy02OC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz04MT12b2lkIGRldl9zZXRfZ3JvdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ncm91cClcXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzo4MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXFx0bmV0aWZfc2V0X2dyb3VwKGRldiwgbmV3X2dyb3VwKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtOTQtXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2X2FkZHJfc2VtKTtcXG5uZXQvY29yZS9kZXZfYXBpLmM6OTU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTk2LVxcdHJldCA9IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIHNzLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTEzNT1pbnQgZGV2X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxMzk6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfY2FycmllcihkZXYsIG5ld19jYXJyaWVyKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNTYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU4LVxcdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xNzE9aW50IGRldl9jaGFuZ2VfcHJvdG9fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHByb3RvX2Rvd24pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTc0LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxNzU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE3Ni1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfcHJvdG9fZG93bihkZXYsIHByb3RvX2Rvd24pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTE5Nz1pbnQgZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjAxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXFx0cmV0ID0gbmV0aWZfb3BlbihkZXYsIGV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIxOS17XFxubmV0L2NvcmUvZGV2X2FwaS5jOjIyMDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjIxLVxcdG5ldGlmX2Nsb3NlKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjI2PWludCBkZXZfZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMzU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI0Ny1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDktXFx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTI2ND12b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyNjY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cXHRuZXRpZl9kaXNhYmxlX2xybyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI4Ni1cXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODgtXFx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zMTA9aW50IGRldl9zZXRfYWxsbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTMtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjMxNDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzE1LVxcdHJldCA9IG5ldGlmX3NldF9hbGxtdWx0aShkZXYsIGluYywgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MzMzPWludCBkZXZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzcyxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXFxubmV0L2NvcmUvZGV2X2FwaS5jOjMzODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVxcdHJldCA9IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIHNzLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNDktXFxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzUxLVxcdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM2Nj12b2lkIG5ldGRldl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6MzY4OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXFx0bmV0aWZfc3RhdGVfY2hhbmdlKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjk1LVxcdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjI5NjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXFx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBcXHUwMDI2a2VybmVsX2NmZyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0zOTE9c3RhdGljIGludCBkZXZfc2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQyMjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXFx0ZXJyID0gZGV2X3NldF9od3RzdGFtcF9waHlsaWIoZGV2LCBcXHUwMDI2a2VybmVsX2NmZywgXFx1MDAyNmV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NDE9aW50IGdlbmVyaWNfaHd0c3RhbXBfZ2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NTItXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDUzOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1NC1cXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDYxPWludCBnZW5lcmljX2h3dHN0YW1wX3NldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ3NDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXFx0ZXJyID0gZGV2X3NldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnLCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00ODktXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUwMT1zdGF0aWMgaW50IGRldl9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1MDk6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTEwLVxcdFxcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTIwPXN0YXRpYyBpbnQgZGV2X3Npb2N3YW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjYtXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTI3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyOC1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01NzYtXFx0XFx0XFx0ICAgKHNpemVfdClkZXYtXFx1MDAzZWFkZHJfbGVuKSk7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTc3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU3OC1cXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODItXFx0Y2FzZSBTSU9DU0lGTUFQOlxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4MzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODQtXFx0XFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTkzLVxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXFx0XFx0ZXJyID0gZGV2X21jX2FkZF9nbG9iYWwoZGV2LCBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDUtXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cXHRcXHRlcnIgPSBkZXZfbWNfZGVsX2dsb2JhbChkZXYsIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcXG4tLVxcbm5ldC9jb3JlL2ZhaWxvdmVyLmM9MjE2PWZhaWxvdmVyX2V4aXN0aW5nX3NsYXZlX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpmYWlsb3Zlcl9kZXYpXFxuLS1cXG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNS1cXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXFx1MDAzZXBlcm1fYWRkciwgZGV2LVxcdTAwM2VwZXJtX2FkZHIpKSB7XFxubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZmFpbG92ZXIuYy0yMjctXFx0XFx0XFx0ZmFpbG92ZXJfc2xhdmVfcmVnaXN0ZXIoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yMzgtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZsd2V2ZW50bGlzdF9sb2NrKTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXFx0XFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xcbi0tXFxubmV0L2NvcmUvbGlua193YXRjaC5jPTI5MT12b2lkIGxpbmt3YXRjaF9zeW5jX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cXHRpZiAobGlua3dhdGNoX2NsZWFuX2RldihkZXYpKSB7XFxubmV0L2NvcmUvbGlua193YXRjaC5jOjI5NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjk1LVxcdFxcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE0NjE9c3RhdGljIHNzaXplX3QgdHhfbWF4cmF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE0ODYtXFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTQ4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDg4LVxcdGlmIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfdHhfbWF4cmF0ZSlcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMzk9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTUwLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNTE6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE1Mi1cXHRkZXYtXFx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcyA9IDA7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTYxOD1pbnQgbmV0ZGV2X25sX3F1ZXVlX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02MzgtXFx0fSBlbHNlIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcXHRcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldixcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTkzOC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXFx0XFx0ZXJyID0gbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcF9vbmUobmV0ZGV2LCBzY29wZSwgc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xNDcyPXN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0NzgtXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxNDc5OlxcdFxcdG5ldGRldl9sb2NrX29wc190b19mdWxsKG5ldGRldik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDgwLVxcdFxcdG5ldGRldl9nZW5sX2Rldl9ub3RpZnkobmV0ZGV2LCBORVRERVZfQ01EX0RFVl9BRERfTlRGKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTMwPXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTQtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTU6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNTYtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTMwMzc9c3RhdGljIGludCBkb19zZXRfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZmluZGV4LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1NS1cXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19kZWxfc2xhdmUodXBwZXJfZGV2LCBkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNTY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1Ny1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3MS1cXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19hZGRfc2xhdmUodXBwZXJfZGV2LCBkZXYsIGV4dGFjayk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzA3MjpcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMDczLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMTQ0PXN0YXRpYyBpbnQgZG9fc2V0bGluayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMTc2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzctXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjEzLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmRldl9hZGRyX3NlbSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzIxNDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjE1LVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzcxMD1pbnQgcnRubF9jb25maWd1cmVfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zNzE1LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM3MTY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNy1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5Mjg9c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODAtXFx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5ODE6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzk4Mi1cXHRcXHRlcnIgPSBkb19zZXRfbWFzdGVyKGRldiwgbmxhX2dldF91MzIodGJbSUZMQV9NQVNURVJdKSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNjI3LVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRwLVxcdTAwM2Vjb25kdWl0LVxcdTAwM2VjbG9zZV9saXN0LCBcXHUwMDI2Y2xvc2VfbGlzdCk7XFxubmV0L2RzYS9kc2EuYzoxNjI4OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkcC1cXHUwMDNlY29uZHVpdCk7XFxubmV0L2RzYS9kc2EuYy0xNjI5LVxcdH1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTM0Nzc9c3RhdGljIGludCBkc2FfdXNlcl9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTM2MDUtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWNsb3NlX2xpc3QsIFxcdTAwMjZjbG9zZV9saXN0KTtcXG5uZXQvZHNhL3VzZXIuYzozNjA2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkcC1cXHUwMDNldXNlcik7XFxubmV0L2RzYS91c2VyLmMtMzYwNy1cXHRcXHR9XFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz01OD1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjc2OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9MzE5PWludCBldGhubF9hY3RfY2FibGVfdGVzdF90ZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzozNDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYz0yMTI9aW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYy0yMzgtXFx0cnRubF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYzoyMzk6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvZmVhdHVyZXMuYy0yNDAtXFx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQ1Nj1pbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjItXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjQtXFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0yNDU1PXN0YXRpYyBpbnQgZXRodG9vbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQ5Ny1cXHRcXHRcXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI0OTg6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yNDk5LVxcdFxcdFxcdHJjID0gb3BzLVxcdTAwM2VzZXRfcGh5c19pZChkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI1MTEtXFx0XFx0cnRubF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyNTEyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjUxMy1cXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzYyNi1cXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2Mjc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI4LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvZXRodG9vbC9tb2R1bGUuYz0yMjE9c3RhdGljIHZvaWQgbW9kdWxlX2ZsYXNoX2Z3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjI4LVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIyOTpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzAtXFx0ZXRodG9vbF9jbWlzX2Z3X3VwZGF0ZShcXHUwMDI2bW9kdWxlX2Z3LVxcdTAwM2Vmd191cGRhdGUpO1xcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtMjM1LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL21vZHVsZS5jOjIzNjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy0yMzctXFx0ZGV2LVxcdTAwM2VldGh0b29sLVxcdTAwM2Vtb2R1bGVfZndfZmxhc2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcXG4tLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVxcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTUwNz1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU0My1cXHRcXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQ0OlxcdFxcdG5ldGRldl9sb2NrX29wcyhyZXFfaW5mby1cXHUwMDNlZGV2KTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTQ1LVxcdH1cXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEyLVxcdFxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MTM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYxNC1cXHRyZXQgPSBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKGN0eC1cXHUwMDNlcmVxX2luZm8sIGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTkzNS1cXHRcXHRydG5sX2xvY2soKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6OTM2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzctXFx0ZGV2LVxcdTAwM2VjZmdfcGVuZGluZyA9IGttZW1kdXAoZGV2LVxcdTAwM2VjZmcsIHNpemVvZigqZGV2LVxcdTAwM2VjZmcpLFxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDY4PWludCBldGhubF9yc3NfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cXG5uZXQvZXRodG9vbC9yc3MuYzo0NzQ6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlbWF0Y2hfaWZpbmRleCAhPSBjdHgtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz0xMDAyPWludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXFxubmV0L2V0aHRvb2wvcnNzLmM6MTAzNzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTE3Ny1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc5LVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4Ny1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXFx0XFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxNjA9aW50IGFkZHJjb25mX2FkZF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTgyLVxcdGlmIChkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMxODM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTg0LVxcdFxcdGVyciA9IGluZXQ2X2FkZHJfYWRkKG5ldCwgZGV2LCBcXHUwMDI2Y2ZnLCAwLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDk4NT1pbmV0Nl9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTA3MS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUwNzI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MDczLVxcdGlkZXYgPSBpcHY2X2ZpbmRfaWRldihkZXYpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTI1PXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX2FkZHJfZ2VuX21vZGUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjEtXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpZGV2LVxcdTAwM2VjbmYuYWRkcl9nZW5fbW9kZSwgbmV3X3ZhbCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTYyOlxcdFxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhpZGV2LVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2My1cXHRcXHRcXHRcXHRhZGRyY29uZl9pbml0X2F1dG9fYWRkcnMoaWRldi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU3NS1cXHRcXHRcXHRcXHRcXHRcXHQgIG5ld192YWwpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3NjpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHMoaWRldi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzctXFx0XFx0XFx0XFx0XFx0YWRkcmNvbmZfaW5pdF9hdXRvX2FkZHJzKGlkZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE1NjQ9c3RhdGljIGludCB0Y19nZXRfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNTgxLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTU4MjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE1ODMtXFx0ZXJyID0gX190Y19nZXRfcWRpc2Moc2tiLCBuLCBleHRhY2ssIGRldiwgdGNhLCB0Y20pO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODIyPXN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTg0Mi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4NDM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ0LVxcdGVyciA9IF9fdGNfbW9kaWZ5X3FkaXNjKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTkwOD1zdGF0aWMgaW50IHRjX2R1bXBfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTk0MzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5NDQtXFx0XFx0cSA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIzMjc9c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzNDU6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ2LVxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI0NTM9c3RhdGljIGludCB0Y19kdW1wX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI0NjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNDY3OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjQ2OC1cXHRlcnIgPSBfX3RjX2R1bXBfdGNsYXNzKHNrYiwgY2IsIHRjbSwgZGV2KTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDY6NTIuNzM1OTAyODY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNTUxOTY5ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9ja2luZyBNZWNoYW5pc21zIGluIHRoZSBOZXR3b3JrIERldmljZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGhhbmRsZXMgbG9ja2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRldmljZSBvcGVyYXRpb25zLiBUaGUgY29kZSdzIHVzaW5nIGBuZXRkZXZfbG9ja19vcHNgIG5vdy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBncmFiYmluZyB0aGUgbmV0ZGV2J3Mgb3BlcmF0aW9ucyBsb2NrLiBJJ20gYXNzdW1pbmcgaXQncyBzb21ldGhpbmcgbGlrZSBgZGV2LVx1MDAzZW5ldGRldl9vcHNfbG9ja2AsIHdoaWNoIEkgc2VlbSB0byByZWNhbGwgd2FzIGludHJvZHVjZWQgZmFpcmx5IHJlY2VudGx5IGluIHRoZSBuZXQtbmV4dCB0cmVlIHRvIGhlbHAgd2l0aCB0aGUgUlROTCBzcGxpdC4gSXQncyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcyBhbmQgdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBvdGhlciBsb2NraW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDMuMjg3ODc0ODcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzNjA0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIG5ldGRldl9sb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzowMy4zMzQ3MTkyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTY1Mzk2ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgbmV0ZGV2X2xvY2tfb3BzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbmV0d29yayBkZXZpY2UgbG9ja2luZyBtZWNoYW5pc21zLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBuZXRkZXZfbG9ja19vcHNgIHN0cnVjdHVyZSBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIGFuZCBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBoZWFkZXJzLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJhc2UgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcyB1c3VhbGx5IHJlc2lkZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlY2xhcmF0aW9uIGFuZCBwb3NzaWJseSB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBsb2NraW5nIGZyYW1ld29yay4gSSB3b25kZXIgaWYgaXQncyBkZXByZWNhdGVkIG9yIHBlcmhhcHMgcmVwbGFjZWQgYnkgc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGNvZGUgY29tbWVudHMgZm9yIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDguMzAwMTE4OTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE1NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzctICpcXHRBc3luYyB2ZXJzaW9uIG9mIG5kb19zZXRfcnhfbW9kZSB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEzODogKlxcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzOS0gKlxcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MDguMzQ1Mjc2MTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk3NzI2OTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRmluZGluZyB0aGUgYG5ldGRldl9sb2NrX29wc2AgUmVmZXJlbmNlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgbmV0ZGV2X2xvY2tfb3BzYC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsLCBJIGtub3cgdGhpcyBwcm9iYWJseSBtZWFucyBkaWdnaW5nIHRocm91Z2ggaGVhZGVyIGZpbGVzLiBUaGlzIGxpa2VseSByZXByZXNlbnRzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV0d29yayBkZXZpY2UgbG9jayBvcGVyYXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBpbmNsdWRlIHBhdGhzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2Ygd2hlcmUgaXQgaXMgdXNlZC4gSSBleHBlY3QgdGhpcyB0byBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGluIHRoZSBuZXR3b3JrIGNvcmUgZmlsZXMuIExldCdzIHN0YXJ0IHRoZXJlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2V0IG9mIGhlYWRlcnMgdG8gc2VhcmNoLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZvcm11bGF0ZSBhIHJvYnVzdCBzZWFyY2ggcXVlcnkgc28gYXMgbm90IHRvIG1pc3MgYSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoxMC4zMjI1NDkyMDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDExNTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG5ldGRldl9sb2NrX29wc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yOD1zdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMzgtXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDozOTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjEwLjQ2NjY3MzYxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzYxNDMxMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRkZXZfbG9jay5oYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgaGFzIGV2b2x2ZWQsIGVzcGVjaWFsbHkgaW4gbGlnaHQgb2YgcmVjZW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIG1heWJlIHNvbWUgcmVhZC13cml0ZSBsb2NrcywgYW5kIGhvcGVmdWxseSwgc29tZSBjbGV2ZXIgdHJpY2tzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICBUaGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGxvY2tzIOKAkyBhcmUgdGhleSBwZXItZGV2aWNlLCBwZXItcXVldWUsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/XG4qICAgSG93IHRoZXkncmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBkaWZmZXJlbnQgb3BlcmF0aW9ucyDigJMgdHJhbnNtaXQsIHJlY2VpdmUsIGNvbmZpZ3VyYXRpb24sIGFuZCBzbyBvbi5cbiogICBBbnkgYXR0ZW1wdHMgYXQgbG9ja2xlc3MgYWxnb3JpdGhtcyBvciBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhdCBsZWFzdCBoaWdobHkgb3B0aW1pemVkIGxvY2tpbmcgcHJpbWl0aXZlcywgSSdtIGhvcGluZyBmb3Igc29tZSBpbnRlcmVzdGluZyBtb2Rlcm4gdGVjaG5pcXVlcywgbWF5YmUgUkNVIGluIHBsYXkuXG4qICAgVGhlIHBvdGVudGlhbCBmb3IgbG9jayBoaWVyYXJjaGllcyB0byBwcmV2ZW50IGRlYWRsb2NrcywgdGhhdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGFzcGVjdCBpbiBuZXR3b3JraW5nIGNvZGUuXG4qICAgSSdsbCBiZSBmb2N1c2luZyB0byBzZWUgaWYgdGhleSdyZSBzdGlsbCB1c2luZyB0aGUgb2xkIGFuZCBzbG93IG5ldGlmX3J4X2xvY2soKSBmb3IgbmV0aWZfcngoKS5cblxuVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcGFydGljdWxhcmx5IGVsZWdhbnQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoxNi4yMjgxMDgxNDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpZm5kZWYgX05FVF9ORVRERVZfTE9DS19IXFxuICAgNDpcXHQjZGVmaW5lIF9ORVRfTkVUREVWX0xPQ0tfSFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9ja2RlcC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X3RyeWxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDExOlxcdHtcXG4gIDEyOlxcdFxcdHJldHVybiBtdXRleF90cnlsb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAgMTM6XFx0fVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDE2OlxcdHtcXG4gIDE3OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuICAxODpcXHR9XFxuICAxOTpcXHRcXG4gIDIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbiAgMjE6XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4gIDI0OlxcdFxcdCAgICBkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gIDI1OlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbiAgMzE6XFx0XFxuICAzMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1NIQVBFUilcXG4gIDMzOlxcdFxcdHJldCB8PSAhIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmV0X3NoYXBlcl9vcHM7XFxuICAzNDpcXHQjZW5kaWZcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA0MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAgNDg6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAgNDk6XFx0fVxcbiAgNTA6XFx0XFxuICA1MTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAgNTQ6XFx0XFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4gIDU1OlxcdFxcdGVsc2VcXG4gIDU2OlxcdFxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2MDpcXHR7XFxuICA2MTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDYyOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICA2MzpcXHRcXHRlbHNlXFxuICA2NDpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDcwOlxcdFxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjE2LjIyODE4Mzc2M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzE0OTcwNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBYU0sgU29ja2V0IExpZmVjeWNsZTogTG9ja2luZyBhbmQgU3RhdGUgVHJhbnNpdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbmV0ZGV2X2xvY2tfb3BzYCBpcyBhY3F1aXJpbmcgYSBsb2NrIG9uIGBkZXYtXHUwMDNlbG9ja2AuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgeHNrX2JpbmRgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGJpbmRpbmcgcHJvY2Vzcy4gSSBzZWUgdGhhdCBpdCBzdGFydHMgYnkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIGRldmljZSBtYW5hZ2VtZW50LlxuXG5XaXRoaW4gYHhza19iaW5kYCwgdGhlIGNvZGUgcmV0cmlldmVzIHRoZSBuZXR3b3JrIGRldmljZSB1c2luZyBgZGV2X2dldF9ieV9pbmRleGAuIElmIHRoZSBkZXZpY2UgaXMgZm91bmQsIGBuZXRkZXZfbG9ja19vcHNgIGlzIHVzZWQuIFRoZW4gYSBtdXRleCBsb2NrIGlzIGFjcXVpcmVkIG9uIGB4cy1cdTAwM2VtdXRleGAgdG8gcHJvdGVjdCB0aGUgWFNLIHNvY2tldCdzIGludGVybmFsIHN0YXRlLiBJdCBjaGVja3MgdGhlIHNvY2tldCdzIHN0YXRlOyBpZiBpdCdzIG5vdCByZWFkeSwgaXQgYmFpbHMgb3V0IGVhcmx5IHdpdGggYW4gYEVCVVNZYCBlcnJvci4gSWYgdGhlcmUncyBubyBkZXZpY2UgcHJlc2VudCBhbiBlcnJvciBpcyB0cmlnZ2VyZWQsIGBFTk9ERVZgLiBUaGUgY29kZSB0aGVuIHVubG9ja3MgYHhzLVx1MDAzZW11dGV4YCBhbmQsIGlmIGEgZGV2aWNlIHdhcyBwcmVzZW50LCB1bmxvY2tzIHRoZSBkZXZpY2UgbG9jayB2aWEgYG5ldGRldl91bmxvY2tfb3BzYCBhbmQgZGVjcmVtZW50cyB0aGUgZGV2aWNlJ3MgcmVmZXJlbmNlIGNvdW50LiBDcml0aWNhbGx5LCBpZiBgZXJyYCBpcyB6ZXJvLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgd2VudCBzbW9vdGhseSwgYSBgc21wX3dtYigpYCBpcyB1c2VkIHRvIGVuc3VyZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHRoZSBzdGF0ZSBpcyBhdG9taWNhbGx5IHNldCB0byBgWFNLX0JPVU5EYC4gSXQgdGhlbiBjbGVhbnMgdXAgYnkgcmVsZWFzaW5nIHRoZSBkZXZpY2UuIEZpbmFsbHksIHRoZSBSVE5MIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCBgeHNrX2JpbmRgIGhhbmRsZXMgZGV2aWNlIGF0dGFjaG1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgbmVjZXNzYXJ5IGxvY2tpbmcgdG8gZ3VhcmFudGVlIHRocmVhZCBzYWZldHkgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZXhhbWluZSBgeHNrX3JlbGVhc2VgLiBJIGNhbiBzZWUgdGhhdCBgeHNrX3JlbGVhc2VgIGhhbmRsZXMgdGhlIHVuYmluZGluZyBvZiB0aGUgc29ja2V0IGZyb20gYSBuZXR3b3JrIGRldmljZSwgYW5kIHRoZSBjbGVhbnVwIHByb2Nlc3MgYWZ0ZXIgdGhlIHNvY2tldCBpcyBjbG9zZWQuIEZpcnN0bHksIGl0IGxvY2tzIGBuZXQtXHUwMDNleGRwLmxvY2tgIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBYRFAgc3RydWN0dXJlcywgYmVmb3JlIGl0IGRlbGV0ZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBuZXR3b3JrJ3MgWERQIHRyYWNraW5nLCB0aGVuIGl0IHVubG9ja3MuIFRoZSByb3V0aW5lIHRoZW4gZGlzYWJsZXMgQkhzIChib3R0b20gaGFsdmVzKSBhbmQgZGVjcmVtZW50cyB0aGUgc29ja2V0J3MgdXNhZ2UgY291bnQgd2l0aCBgc29ja19wcm90X2ludXNlX2FkZGAuIFRoZSBzb2NrZXQncyBpbnRlcm5hbCBtYXBzIGFyZSB0aGVuIGNsZWFuZWQgdXAgd2l0aCBgeHNrX2RlbGV0ZV9mcm9tX21hcHNgLiBOZXh0LCB0aGVyZSdzIGEgbG9jayBvbiBgeHMtXHUwMDNlbXV0ZXhgIHRvIHByb3RlY3QgdGhlIFhTSyBzb2NrZXQsIHRoZW4gYHhza191bmJpbmRfZGV2YCBpcyBjYWxsZWQuIEZpbmFsbHksIHRoZSBgeHMtXHUwMDNlbXV0ZXhgIGlzIHVubG9ja2VkLiBUaGVyZSdzIGFsc28gYSBjYWxsIHRvIGB4c2tfemNfY3FfdG1wX3JpbmdfY2xlYW5gIHdoaWNoIEkgd2lsbCBpbnZlc3RpZ2F0ZS5cblxuU28sIGB4c2tfcmVsZWFzZWAgZW5jYXBzdWxhdGVzIHRoZSB0ZWFyZG93biBwcm9jZXNzOiByZW1vdmluZyB0aGUgc29ja2V0IGZyb20gWERQIGRhdGEgc3RydWN0dXJlcywgcmVkdWNpbmcgdGhlIHNvY2tldCdzIHVzYWdlLCBjbGVhbmluZyB1cCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgYWN0dWFsIHVuYmluZGluZyBmcm9tIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB3aGF0IGB4c2tfdW5iaW5kX2RldmAgZG9lcy4gSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzoyMi45NDMxNTc4NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM3MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza191bmJpbmRfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNDUyPXN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQ2OS1cXG5uZXQveGRwL3hzay5jOjE0NzA6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE0NzEte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNTMwPXN0YXRpYyBpbnQgeHNrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmM6MTU1MjpcXHR4c2tfdW5iaW5kX2Rldih4cyk7XFxubmV0L3hkcC94c2suYy0xNTUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjEwMT1zdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMTktXFxubmV0L3hkcC94c2suYzoyMTIwOlxcdFxcdFxcdFxcdHhza191bmJpbmRfZGV2KHhzKTtcXG5uZXQveGRwL3hzay5jLTIxMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA3OjIyLjk4NzYwMzcxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5MDI4MjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgeHNrX3VuYmluZF9kZXZgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHhza191bmJpbmRfZGV2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdW5iaW5kaW5nIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWERQIHNvY2tldHMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLlxuXG5JIGltbWVkaWF0ZWx5IHdhbnQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIFhEUCBzb2NrZXTigJlzIHN0YXRlLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIGlzc3VlcyB3aXRoIGdyYWNlZnVsbHkgaGFuZGxpbmcgZGV2aWNlcyBiZWluZyB1bmJvdW5kIHdpdGhvdXQgcHJvcGVyIHNvY2tldCBub3RpZmljYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGhvbGRpbmcgYSByZWZlcmVuY2Ugb3Igd2FpdGluZyBmb3IgZGF0YS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgYWRkcmVzc2VzIHRoYXQuIERvZXMgaXQgc3luY2hyb25pemUgd2l0aCBhbnkgdXNlci1zcGFjZSB0aHJlYWRzPyBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyBhcmUgdGhleSB1c2VkPyBBbnkgaW50ZXJydXB0IGRpc2FibGUvZW5hYmxlIHNlcXVlbmNlcyB0aGF0IG5lZWQgZXh0cmEgYXR0ZW50aW9uP1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVuYmluZCBmYWlscyBwYXJ0d2F5IHRocm91Z2g/IERvZXMgaXQgYXR0ZW1wdCB0byByb2xsIGJhY2s/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGU/IEkgd2FudCB0byBzZWUgaWYgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlLCBzYXksIHRoZSBYRFAgc29ja2V0IHRhYmxlIGlzIGNvcnJ1cHRlZCBvciB0aGUgYXNzb2NpYXRlZCBtZW1vcnkgcmVnaW9ucyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgZm9yIHNvbWUgcmVhc29uLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYHhza191bWVtYCBhbmQgaG93IHRoZXkncmUgZnJlZWQgb3IgcmVsZWFzZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBhbiBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQ/IFRoaXMgd2lsbCBhbHNvIGluY2x1ZGUgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3VjaCBhcyB0aGUgYHhza19zb2NrZXRgLCBgeHNrX3VtZW1gLCBhbmQgYG5ldF9kZXZpY2VgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgaG93IHRoZXkgcHJldmVudCBkYW5nbGluZyBwb2ludGVycy4gQWxzbywgd2hlcmUgaXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgc29ja2V0IGluY3JlYXNlZC9kZWNyZWFzZWQ/IFxuXG5GaW5hbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIERvZXMgaXQgcHJvcGVybHkgYWNjb3VudCBmb3IgbXVsdGlwbGUgWERQIHNvY2tldHMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgZGV2aWNlPyBJIG5lZWQgdG8gcmV2aWV3IGFueSBjcml0aWNhbCBzZWN0aW9ucyBjYXJlZnVsbHkuIFRoaXMgaXMgYWxsIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUga2VybmVsJ3MgdW5iaW5kIHByb2Nlc3MgYW5kIGhvdyBpdCBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGVzIFhEUCBzb2NrZXRzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDc6MzQuMDc3ODg5NzE3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NzA6XFx0c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcXG4xNDcxOlxcdHtcXG4xNDcyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19CT1VORClcXG4xNDc1OlxcdFxcdFxcdHJldHVybjtcXG4xNDc2OlxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZXN0YXRlLCBYU0tfVU5CT1VORCk7XFxuMTQ3NzpcXHRcXG4xNDc4OlxcdFxcdC8qIFdhaXQgZm9yIGRyaXZlciB0byBzdG9wIHVzaW5nIHRoZSB4ZHAgc29ja2V0LiAqL1xcbjE0Nzk6XFx0XFx0eHBfZGVsX3hzayh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbjE0ODA6XFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuMTQ4MTpcXHRcXHRkZXZfcHV0KGRldik7XFxuMTQ4MjpcXHR9XFxuMTQ4MzpcXHRcXG4xNDg0OlxcdHN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbjE0ODU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqKm1hcF9lbnRyeSlcXG4xNDg2OlxcdHtcXG4xNDg3OlxcdFxcdHN0cnVjdCB4c2tfbWFwICptYXAgPSBOVUxMO1xcbjE0ODg6XFx0XFx0c3RydWN0IHhza19tYXBfbm9kZSAqbm9kZTtcXG4xNDg5OlxcdFxcbjE0OTA6XFx0XFx0Km1hcF9lbnRyeSA9IE5VTEw7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0X2xvY2spO1xcbjE0OTM6XFx0XFx0bm9kZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0LCBzdHJ1Y3QgeHNrX21hcF9ub2RlLFxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0XFx0bm9kZSk7XFxuMTQ5NTpcXHRcXHRpZiAobm9kZSkge1xcbjE0OTY6XFx0XFx0XFx0YnBmX21hcF9pbmMoXFx1MDAyNm5vZGUtXFx1MDAzZW1hcC1cXHUwMDNlbWFwKTtcXG4xNDk3OlxcdFxcdFxcdG1hcCA9IG5vZGUtXFx1MDAzZW1hcDtcXG4xNDk4OlxcdFxcdFxcdCptYXBfZW50cnkgPSBub2RlLVxcdTAwM2VtYXBfZW50cnk7XFxuMTQ5OTpcXHRcXHR9XFxuMTUwMDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eHMtXFx1MDAzZW1hcF9saXN0X2xvY2spO1xcbjE1MDE6XFx0XFx0cmV0dXJuIG1hcDtcXG4xNTAyOlxcdH1cXG4xNTAzOlxcdFxcbjE1MDQ6XFx0c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG4xNTA1OlxcdHtcXG4xNTA2OlxcdFxcdC8qIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBYRFAgc29ja2V0IGZyb20gYWxsIHRoZVxcbjE1MDc6XFx0XFx0ICogbWFwcyBpdCByZXNpZGVzIGluLiBXZSBuZWVkIHRvIHRha2UgZXh0cmEgY2FyZSBoZXJlLCBkdWUgdG9cXG4xNTA4OlxcdFxcdCAqIHRoZSB0d28gbG9ja3MgaW52b2x2ZWQuIEVhY2ggbWFwIGhhcyBhIGxvY2sgc3luY2hyb25pemluZ1xcbjE1MDk6XFx0XFx0ICogdXBkYXRlcyB0byB0aGUgZW50cmllcywgYW5kIGVhY2ggc29ja2V0IGhhcyBhIGxvY2sgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowNzozNC4wNzc5OTgyNDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI5NjMzNTAyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEFCQkEgRGVhZGxvY2sgaW4gQUZfWERQIFNvY2tldCBCaW5kaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgeHNrX25vdGlmaWVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBORVRERVZfVU5SRUdJU1RFUmAgZXZlbnRzLiBJIHNlZSBpdCdzIGxvY2tpbmcgYHhzLVx1MDAzZW11dGV4YCBhbmQgdGhlbiBjYWxsaW5nIGB4cF9jbGVhcl9kZXZgLCB3aGljaCB0aGVuIGNhbGxzIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAuIE15IGNvbmNlcm4gaW1tZWRpYXRlbHkgc2hvb3RzIHVwIGJlY2F1c2UgdGhlIG9yZGVyIG9mIGxvY2sgYWNxdWlzaXRpb24gc2VlbXMgcmV2ZXJzZWQgY29tcGFyZWQgdG8gd2hhdCBJJ20gc2VlaW5nIGluIGB4c2tfYmluZGAuIEluIGB4c2tfbm90aWZpZXJgIGl0J3MgYHhzLVx1MDAzZW11dGV4YCB0aGVuIGBuZXRkZXZfbG9ja19vcHNgLCBidXQgdGhlIHBhdGNoIGZvciBgeHNrX2JpbmRgIHNlZW1zIHRvIGhhdmUgZmxpcHBlZCBpdCB0byBgbmV0ZGV2X2xvY2tfb3BzYCB0aGVuIGB4cy1cdTAwM2VtdXRleGAuXG5cblRoaXMgc2NyZWFtcyBBQkJBIGRlYWRsb2NrISBUbyBjb25maXJtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgYW5kIGxvY2tpbmcgaGVsZCB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBydW4uIEkga25vdyBgeHNrX25vdGlmaWVyYCBpcyB0cmlnZ2VyZWQgYnkgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHRoYXQgZXZlbnQgbm90aWZpY2F0aW9uIGhhcHBlbnMgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgYHJ0bmxfbG9ja2AuIGB4c2tfYmluZGAgYWxzbyBob2xkcyBgcnRubF9sb2NrYCBhdCBzb21lIHBvaW50LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgdHdvIHBvdGVudGlhbGx5IHJ1biBjb25jdXJyZW50bHk/IEV2ZW4gaWYgdGhleSBkb24ndCwgSSBrbm93IHRoZSBsb2NrZGVwIHRvb2wgaW4gdGhlIGtlcm5lbCBjYW4gZGV0ZWN0IEFCQkEgb3JkZXIgaW52ZXJzaW9ucyBldmVuIGlmIGEgY29tbW9uIGxvY2sgKGxpa2UgYHJ0bmxfbG9ja2ApIGlzIGhlbGQuXG5cblRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBhcyBpdCdzIGRpcmVjdGx5IHRvdWNoaW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyB3aXRoaW4gYHhza19iaW5kYCwgYSBrZXkgZnVuY3Rpb24gZm9yIEFGX1hEUCBzb2NrZXRzIHdoaWNoIGFyZSBhIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGZlYXR1cmUuIEFuZCB5ZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGVudmlyb25tZW50cy4gSSBjYW4gY3JlYXRlIEFGX1hEUCBzb2NrZXRzLCBiaW5kIHRoZW0gdG8gdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgdGhhdCdzIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBwcm9ibGVtYXRpYyBjb2RlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRpbmcuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzOlxuXG5JZiBgeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZYCwgYmVmb3JlLCBgZGV2YCB3YXNuJ3QgcmV0cmlldmVkLCBidXQgbm93LCBpdCByZXRyaWV2ZXMgYGRldmAgdXNpbmcgYGRldl9nZXRfYnlfaW5kZXgoKWAgYW5kIGxvY2tzIGl0IGJlZm9yZSBjaGVja2luZyBpZiBgeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZYC4gQWxzbywgb24gZXJyb3IsIGlmIGBkZXZgIHdhcyBub3QgTlVMTCwgaXQgd2lsbCB1bmxvY2sgYW5kIGBkZXZfcHV0KGRldilgLiBBbmQgZXZlbiBpZiBgZGV2YCBpcyBOVUxMLCBpdCBoYW5kbGVzIHRoYXQgY2FzZS5cblxuVGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdCBtb2RpZmllcyBjcml0aWNhbCBsb2NraW5nIGxvZ2ljIGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLlxuYFdvcnRoRnV6emluZyA9IHRydWUhYFxuXG5JIHNob3VsZCBjYXJlZnVsbHkgYW5hbHl6ZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIG5vdy4gSXQgbWVhbnMgSSd2ZSBnb3QgdG8gZmluZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGNoYW5nZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGlzIGB4c2tfYmluZGAgaW4gYG5ldC94ZHAveHNrLmNgLiBJcyBgeHNrX2JpbmRgIHNwZWNpZmljPyBZZXMsIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIEFGX1hEUCBzb2NrZXQgYmluZC4gSXQgaXMgbm90IHViaXF1aXRvdXMsIHdoaWNoIGlzIGdvb2QgZm9yIHRhcmdldGluZy4gSSBzZWUgZnJvbSB0aGUgY29kZSB0aGF0IGB4c2tfYmluZGAgaXMgY2FsbGVkIGJ5IGBiaW5kKClgIG9uIGFuIEFGX1hEUCBzb2NrZXQuIEkgd2FudCB0byBjaGVjayBmb3Igb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwsIGZvciBleGFtcGxlIGB4c2tfbm90aWZpZXJgLCBhbmQgYHhwX2NsZWFyX2RldmAgYW5kIGB4c2tfY3JlYXRlYCwgd2hpY2ggYXJlIGFsc28gaW4gYG5ldC94ZHAveHNrLmNgLlxuSSBrbm93IGB4c2tfYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBiZWNhdXNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgeHNrX3Byb3RvX29wcy5iaW5kYCwgSSBjYW4gYmUgcHJldHR5IHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0IGF3YXksIHNvIGl0IHNob3VsZCBzdGlsbCBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguXG5JIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGhhdmUgYSBzeW1ib2wgd2hlbiBjb21waWxlZC5cbk5vdywgd2hhdCBhYm91dCBgeHNrX25vdGlmaWVyYD8gVGhhdCdzIHRoZSBvdGhlciBwbGFjZSB3aXRoIGB4cy1cdTAwM2VtdXRleGAgYW5kIGBuZXRkZXZfbG9ja19vcHNgLlxuV2hhdCBhYm91dCBgeHBfY2xlYXJfZGV2YD9cbldoYXQgYWJvdXQgYHhza19jcmVhdGVgP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODowNy4wNDEzNTExNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTc1NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0yMTU5PXN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxNjktXFxubmV0L3hkcC94c2suYzoyMTcwOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxNzEtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jPTIyMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHhza19mYW1pbHlfb3BzID0ge1xcbm5ldC94ZHAveHNrLmMtMjIxOC1cXHQuZmFtaWx5ID0gUEZfWERQLFxcbm5ldC94ZHAveHNrLmM6MjIxOTpcXHQuY3JlYXRlID0geHNrX2NyZWF0ZSxcXG5uZXQveGRwL3hzay5jLTIyMjAtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MDcuNTM3MTEzMjU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MTc0MjU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgYHhza19iaW5kYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiBiZWluZyBkaXJlY3RseSBtb2RpZmllZCwgY29uZmlybWVkIGJ5IHJlZmVyZW5jaW5nIFNlY3Rpb24gNCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IFwiZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZC5cIiBTbywgaXMgYHhza19iaW5kYCBlbm91Z2gsIG9yIGFyZSB0aGVyZSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGB4c2tfcmVsZWFzZWAgdGhhdCBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkPyBObywganVzdCBgeHNrX2JpbmRgIHNpbmNlIHRoYXQgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSBhbmQgYmUgcmVhY2hhYmxlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAuIEFoLCB0aGVyZSBpdCBpczogYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub2AgYW5kIGB4c2tfYnVmZl9wb29sLm9gLlxuXG5BbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZSB0ZWxscyB1czpcbmBgYFxuY29uZmlnIFhEUF9TT0NLRVRTXG5cdGJvb2wgXCJYRFAgc29ja2V0c1wiXG5cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcblx0ZGVmYXVsdCBuXG5cdGhlbHBcblx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG5gYGBcblNvLCBgWERQX1NPQ0tFVFNgIGlzIHdoYXQgd2UgbmVlZC4gSG93ZXZlciwgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIHJpZ2h0PyBXZSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGF0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODoxNi4zNTQ1NDE5OTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjY5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODoxNi40MDY4MTc3NzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ0MzY2NzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUgLSBMaW5lIGJ5IExpbmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9LY29uZmlnYC4gTGV0J3MgZm9jdXMgb24gbGluZXMgMzAgdGhyb3VnaCA1MC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIHdpdGhpbiB0aGlzIHNlY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNodW5rIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggc3BlY2lmaWMgQlBGIGZlYXR1cmVzIG9yIHBvc3NpYmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGlzIGNvbnRleHQgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UuIEknbGwgcGF5IGF0dGVudGlvbiB0byB0aGUgYGNvbmZpZ2Aga2V5d29yZCwgZm9sbG93ZWQgYnkgdGhlIGZlYXR1cmUgbmFtZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCB0eXBlIG9mIG9wdGlvbiBpcyBiZWluZyBzZXQuIElzIHRoaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBpbnRgLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNyaXRpY2FsLCBzbyBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYmVpbmcgYXNzdW1lZC4gQW55IGBkZWZhdWx0YCB2YWx1ZXMgYXJlIGFsc28gb2YgaW50ZXJlc3QsIGFzIHRob3NlIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGNvbW1vbmx5LXVzZWQgb3IgaW50ZW5kZWQgY29uZmlndXJhdGlvbnMuIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgaGVscCB0ZXh0LCB0aGF0IGlzIHByb3ZpZGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBwcm92aWRlcyBmdXJ0aGVyIGluc2lnaHQgaW50byB0aGUgcHVycG9zZSBvciBwb3RlbnRpYWwgdXNlIGNhc2VzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdhaW4gYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgaW4gdGhpcyBibG9jaywgdGhlaXIgZGVmYXVsdHMsIGRlcGVuZGVuY2llcywgYW5kIGludGVuZGVkIHVzYWdlLCB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGVtIG9yIGhvdyB0aGV5IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MjIuODUwNDg3OTM2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6MjIuODUwNTU2OTQ2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMDk3ODk1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGVCUEYgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIGBCUEZfU1lTQ0FMTGAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBzZWxmLWNvbnRhaW5lZCBhcyBmYXIgYXMgZGVwZW5kZW5jaWVzIGdvLiBJdCBkb2Vzbid0IHJlbHkgb24gYW55dGhpbmcgZWxzZSBiZWluZyBlbmFibGVkLCBvdGhlciB0aGFuLCB3ZWxsLCBiZWluZyBzZWxlY3RlZCBmcm9tIHdpdGhpbiB0aGUgbWVudWNvbmZpZy4gTm93LCBgWERQX1NPQ0tFVFNgLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmRvZXMqIGRlcGVuZCBvbiBgQlBGX1NZU0NBTExgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZm91bmRhdGlvbmFsIGluZnJhc3RydWN0dXJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGJ1aWxkIHRoZSBYRFAgc29ja2V0IGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGdvdGNoYXMsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgWERQIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQveGRwL3hzay5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVybmFsIGAjaWZkZWZgIGJsb2NrcyBvciBhbnkgb3RoZXIgc3VidGxlIHJlcXVpcmVtZW50cyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBObyBzdXJwcmlzZXMsIHBsZWFzZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjI4Ljk2MDM0OTQzOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTEyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xMzE5PXN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMyMC17XFxubmV0L3hkcC94c2suYzoxMzIxOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbm5ldC94ZHAveHNrLmMtMTMyMi1cXHQvKiBQcmVmZXIgYnVzeS1wb2xsaW5nLCBza2lwIHRoZSB3YWtldXAuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjI5LjAwNzg2NDQ1OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIzMTI1NTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYU0sgQ29tcGlsYXRpb24gQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gYXNwZWN0IG9mIFhEUCBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEZpcnN0LCBJIGNoZWNrZWQgaW5zaWRlIGBuZXQveGRwL3hzay5jYCBkaXJlY3RseS4gVGhlIG9ubHkgYCNpZmRlZmAgSSBmb3VuZCB3YXMgZm9yIGBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTGAsIHdoaWNoIGlzIGNsZWFybHkgbm90IHJlbGV2YW50IHRvIGB4c2tfYmluZGAuIFRoYXQncyBhIHJlZCBoZXJyaW5nLiBOb3csIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAgLSB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMuXG5cbkxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMsIGl0J3MgcHJldHR5IGNsZWFyOiBgb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vYCBhbmQsIGNydWNpYWxseSwgYG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrX2J1ZmZfcG9vbC5vYC4gVGhpcyBwb2ludHMgdG8gdGhlIG1vZHVsZXMgdGhhdCBhcmUgcHVsbGVkIGluIHdoZW4gWERQIHNvY2tldHMgYXJlIGVuYWJsZWQgdmlhIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBgbmV0L3hkcC9gIGl0c2VsZiBpcyBpbmNsdWRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNsdXNpb24gcGF0aCBiYWNrLCBzbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L01ha2VmaWxlYCB0byBzZWUgaG93IHRoYXQgZGlyZWN0b3J5IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGxpbmtlZCBkdXJpbmcgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgTWFrZWZpbGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgZGVwZW5kZW5jeSBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NDYuMjM5MTIzMjYxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyNDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT03Mj1vYmotJChDT05GSUdfTkVUX05DU0kpXFx0XFx0Kz0gbmNzaS9cXG5uZXQvTWFrZWZpbGU6NzM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKVxcdCs9IHhkcC9cXG5uZXQvTWFrZWZpbGUtNzQtb2JqLSQoQ09ORklHX01QVENQKVxcdFxcdCs9IG1wdGNwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODo0Ni4yODQ5NTM1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMjA1OTczMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBTb2NrZXQgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYG5ldC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgWERQIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBcIlhEUF9TT0NLRVRTXCIgYW5kIFwiQlBGX1NZU0NBTExcIi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfYmluZGAgZnVuY3Rpb24uIEFoLCBJIHNlZSwgdGhleSdyZSBjaGFuZ2luZyB0aGUgbG9ja2luZyBvcmRlciB3aXRoaW4gYHhza19iaW5kKClgLiBQcmV2aW91c2x5LCB0aGUgbXV0ZXggYHhzLVx1MDAzZW11dGV4YCB3YXMgbG9ja2VkICpiZWZvcmUqIHRoZSBuZXR3b3JrIGRldmljZSBsb2NrLCBhbmQgbm93IGl0J3MgcmV2ZXJzZWQsIGFuZCB0aGVyZSBhcmUgc29tZSBkZXZpY2UgbG9va3VwIGNoYW5nZXMgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgcGxhY2UgdG8gYmUgY2FyZWZ1bC5cblxuUmlnaHQsIEFGX1hEUCBzb2NrZXRzIGFyZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyB0aGUgc3RhbmRhcmQgYHNvY2tldChBRl9YRFAsIC4uLilgIGFuZCBgYmluZCgpYCBjYWxscy4gVGhpcyBpcyAqZWFzaWx5KiByZWFjaGFibGUsIGFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gVGhpcyBtZWFucyBhIHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBlYXNpbHkgYmUgZXhwbG9pdGVkLlxuXG5HaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGxvY2sgb3JkZXIgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgb2J2aW91c2x5LCBgeHNrX2JpbmRgLiBBbmQsIHdlIG5lZWQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA4NywiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NTguNDkwOTI5NTAxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MDczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX2JpbmQoKSBpbiBuZXQveGRwL3hzay5jLCBhbHRlcmluZyB0aGUgbG9ja2luZyBvcmRlciBiZXR3ZWVuIG5ldGRldl9sb2NrX29wcygpIGFuZCB4cy1cXHUwMDNlbXV0ZXggYXMgd2VsbCBhcyBhZGp1c3RpbmcgZGV2aWNlIGxvb2t1cCwgcmVmY291bnRpbmcsIGFuZCBlcnJvci1oYW5kbGluZyBjbGVhbnVwIGR1cmluZyBBRl9YRFAgc29ja2V0IGJpbmRpbmcuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgc29ja2V0IHN5c2NhbGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgY29uY3VycmVuY3kgYnVncywgb3IgbG9ja2RlcCBpbnZlcnNpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowODo1OC41NzAzNDU4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgzMzQ5NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA4OjU4LjU3MDg4MjY4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjE4MzI5NTM3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMjJkMGE3NGUwZjcwZThhMTU1MjcwNzQ5NWVjNjZjNjlhODIxMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDowNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCA3ODU1ZWUwOWM0YjY0Li4wYTQxMDZlOThiY2FhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTE2MTIsMjAgKzE2MTIsMjIgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRydG5sX2xvY2soKTtcbitcbitcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVx1MDAzZXN4ZHBfaWZpbmRleCk7XG4rXHRpZiAoZGV2KVxuK1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuIFx0aWYgKHhzLVx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xuIFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHR9XG4gXG4tXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc3hkcC1cdTAwM2VzeGRwX2lmaW5kZXgpO1xuIFx0aWYgKCFkZXYpIHtcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdFx0Z290byBvdXRfcmVsZWFzZTtcbiBcdH1cbiBcbi1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuLVxuIFx0aWYgKCF4cy1cdTAwM2VyeCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXR4KSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzYyLDE4ICsxNzY0LDIwIEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X3B1dChkZXYpO1xuLVx0fSBlbHNlIHtcbitcdGlmICghZXJyKSB7XG4gXHRcdC8qIE1hdGNoZXMgc21wX3JtYigpIGluIGJpbmQoKSBmb3Igc2hhcmVkIHVtZW1cbiBcdFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxuIFx0XHQgKi9cbiBcdFx0c21wX3dtYigpO1xuIFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpO1xuIFx0fVxuLVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiBvdXRfcmVsZWFzZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4rXHRpZiAoZGV2KSB7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuK1x0fVxuIFx0cnRubF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDg6NTguNTcwODgzOVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDkyNDUxOTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCB0aGUgY29kZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgbmV0L3hkcC94c2suY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHhza19iaW5kKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgeHNrX2JpbmQoKWAgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBwcm9wZXIgdmlldyBvZiB0aGUgY29kZSBpbiBjb250ZXh0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjIzLjQ5NTQwNjczNloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjA1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYwNTpcXHRcXHRmbGFncyA9IHN4ZHAtXFx1MDAzZXN4ZHBfZmxhZ3M7XFxuMTYwNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+KFhEUF9TSEFSRURfVU1FTSB8IFhEUF9DT1BZIHwgWERQX1pFUk9DT1BZIHxcXG4xNjA3OlxcdFxcdFxcdCAgICAgIFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfVVNFX1NHKSlcXG4xNjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDk6XFx0XFxuMTYxMDpcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuMTYxMTpcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2IGJvdW5kX2Rldl9pZiAhPSBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpXFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzeGRwLVxcdTAwM2VzeGRwX2lmaW5kZXgpO1xcbjE2MTc6XFx0XFx0aWYgKGRldilcXG4xNjE4OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE2MjE6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG4xNjIyOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNjIzOlxcdFxcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuMTYyNDpcXHRcXHR9XFxuMTYyNTpcXHRcXG4xNjI2OlxcdFxcdGlmICghZGV2KSB7XFxuMTYyNzpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4xNjI5OlxcdFxcdH1cXG4xNjMwOlxcdFxcbjE2MzE6XFx0XFx0aWYgKCF4cy1cXHUwMDNlcnggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2V0eCkge1xcbjE2MzI6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjM0OlxcdFxcdH1cXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0cWlkID0gc3hkcC1cXHUwMDNlc3hkcF9xdWV1ZV9pZDtcXG4xNjM3OlxcdFxcbjE2Mzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgWERQX1NIQVJFRF9VTUVNKSB7XFxuMTYzOTpcXHRcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHM7XFxuMTY0MDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbjE2NDE6XFx0XFxuMTY0MjpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgWERQX0NPUFkpIHx8IChmbGFncyBcXHUwMDI2IFhEUF9aRVJPQ09QWSkgfHxcXG4xNjQzOlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX05FRURfV0FLRVVQKSB8fCAoZmxhZ3MgXFx1MDAyNiBYRFBfVVNFX1NHKSkge1xcbjE2NDQ6XFx0XFx0XFx0XFx0LyogQ2Fubm90IHNwZWNpZnkgZmxhZ3MgZm9yIHNoYXJlZCBzb2NrZXRzLiAqL1xcbjE2NDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjQ3OlxcdFxcdFxcdH1cXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0aWYgKHhzLVxcdTAwM2V1bWVtKSB7XFxuMTY1MDpcXHRcXHRcXHRcXHQvKiBXZSBoYXZlIGFscmVhZHkgb3VyIG93bi4gKi9cXG4xNjUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTY1MjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY1MzpcXHRcXHRcXHR9XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdFxcdHNvY2sgPSB4c2tfbG9va3VwX3hza19mcm9tX2ZkKHN4ZHAtXFx1MDAzZXN4ZHBfc2hhcmVkX3VtZW1fZmQpO1xcbjE2NTY6XFx0XFx0XFx0aWYgKElTX0VSUihzb2NrKSkge1xcbjE2NTc6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzb2NrKTtcXG4xNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjU5OlxcdFxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0XFx0dW1lbV94cyA9IHhkcF9zayhzb2NrLVxcdTAwM2Vzayk7XFxuMTY2MjpcXHRcXHRcXHRpZiAoIXhza19pc19ib3VuZCh1bWVtX3hzKSkge1xcbjE2NjM6XFx0XFx0XFx0XFx0ZXJyID0gLUVCQURGO1xcbjE2NjQ6XFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG4xNjY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xNjY2OlxcdFxcdFxcdH1cXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0XFx0aWYgKHVtZW1feHMtXFx1MDAzZXF1ZXVlX2lkICE9IHFpZCB8fCB1bWVtX3hzLVxcdTAwM2VkZXYgIT0gZGV2KSB7XFxuMTY2OTpcXHRcXHRcXHRcXHQvKiBPbmUgZmlsbCBhbmQgY29tcGxldGlvbiByaW5nIHJlcXVpcmVkIGZvciBlYWNoIHF1ZXVlIGlkLiAqL1xcbjE2NzA6XFx0XFx0XFx0XFx0aWYgKCF4c2tfdmFsaWRhdGVfcXVldWVzKHhzKSkge1xcbjE2NzE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNjcyOlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY3NDpcXHRcXHRcXHRcXHR9XFxuMTY3NTpcXHRcXG4xNjc2OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSB1bWVtIHdpdGggYW5vdGhlciBzb2NrZXQgb24gYW5vdGhlciBxaWRcXG4xNjc3OlxcdFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuMTY3ODpcXHRcXHRcXHRcXHQgKi9cXG4xNjc5OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcXG4xNjgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4xNjgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbjE2ODI6XFx0XFx0XFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbjE2ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNjg0OlxcdFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuMTY4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdFxcdFxcdGVyciA9IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHhzLVxcdTAwM2Vwb29sLCB1bWVtX3hzLCBkZXYsXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxaWQpO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjE2OTE6XFx0XFx0XFx0XFx0XFx0eHBfZGVzdHJveSh4cy1cXHUwMDNlcG9vbCk7XFxuMTY5MjpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuMTY5MzpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE2OTU6XFx0XFx0XFx0XFx0fVxcbjE2OTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xNjk3OlxcdFxcdFxcdFxcdC8qIFNoYXJlIHRoZSBidWZmZXIgcG9vbCB3aXRoIHRoZSBvdGhlciBzb2NrZXQuICovXFxuMTY5ODpcXHRcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZWZxX3RtcCB8fCB4cy1cXHUwMDNlY3FfdG1wKSB7XFxuMTY5OTpcXHRcXHRcXHRcXHRcXHQvKiBEbyBub3QgYWxsb3cgc2V0dGluZyB5b3VyIG93biBmcSBvciBjcS4gKi9cXG4xNzAwOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcwMTpcXHRcXHRcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbjE3MDI6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE3MDM6XFx0XFx0XFx0XFx0fVxcbjE3MDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjIzLjQ5NTUzMjk5NloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTY5NzEwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4c2tfYmluZGAqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGB4c2tfYmluZGAgYXJvdW5kIGxpbmUgMTc1MC0xNzg1LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzLiBUaGVyZSdzIHByb2JhYmx5IHNvbWUgY3J1Y2lhbCBsb2dpYyBpbiB0aGVyZSB0aGF0IEknbSBtaXNzaW5nLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIG5vdy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJucyB0aGUgYmluZGluZyBwcm9jZXNzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwsIHRvIHNlZSB3aGF0IGlzc3VlcyBhcmUgYW50aWNpcGF0ZWQgYW5kIGhvdyB0aGV5IGFyZSBhZGRyZXNzZWQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOToyOC4wNjUyNDY3MjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHRcXHR4cy1cXHUwMDNlY3FfdG1wID0gTlVMTDtcXG4xNzUxOlxcdFxcbjE3NTI6XFx0XFx0eHMtXFx1MDAzZWRldiA9IGRldjtcXG4xNzUzOlxcdFxcdHhzLVxcdTAwM2V6YyA9IHhzLVxcdTAwM2V1bWVtLVxcdTAwM2V6YztcXG4xNzU0OlxcdFxcdHhzLVxcdTAwM2VzZyA9ICEhKHhzLVxcdTAwM2V1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpO1xcbjE3NTU6XFx0XFx0eHMtXFx1MDAzZXF1ZXVlX2lkID0gcWlkO1xcbjE3NTY6XFx0XFx0eHBfYWRkX3hzayh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbjE3NTc6XFx0XFxuMTc1ODpcXHRcXHRpZiAocWlkIFxcdTAwM2MgZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG4xNzU5OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cTtcXG4xNzYwOlxcdFxcbjE3NjE6XFx0XFx0XFx0cnhxID0gX19uZXRpZl9nZXRfcnhfcXVldWUoZGV2LCBxaWQpO1xcbjE3NjI6XFx0XFx0XFx0aWYgKHJ4cS1cXHUwMDNlbmFwaSlcXG4xNzYzOlxcdFxcdFxcdFxcdF9fc2tfbWFya19uYXBpX2lkX29uY2Uoc2ssIHJ4cS1cXHUwMDNlbmFwaS1cXHUwMDNlbmFwaV9pZCk7XFxuMTc2NDpcXHRcXHR9XFxuMTc2NTpcXHRcXG4xNzY2OlxcdG91dF91bmxvY2s6XFxuMTc2NzpcXHRcXHRpZiAoIWVycikge1xcbjE3Njg6XFx0XFx0XFx0LyogTWF0Y2hlcyBzbXBfcm1iKCkgaW4gYmluZCgpIGZvciBzaGFyZWQgdW1lbVxcbjE3Njk6XFx0XFx0XFx0ICogc29ja2V0cywgYW5kIHhza19pc19ib3VuZCgpLlxcbjE3NzA6XFx0XFx0XFx0ICovXFxuMTc3MTpcXHRcXHRcXHRzbXBfd21iKCk7XFxuMTc3MjpcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX0JPVU5EKTtcXG4xNzczOlxcdFxcdH1cXG4xNzc0OlxcdG91dF9yZWxlYXNlOlxcbjE3NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjE3NzY6XFx0XFx0aWYgKGRldikge1xcbjE3Nzc6XFx0XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4xNzc4OlxcdFxcdFxcdGlmIChlcnIpXFxuMTc3OTpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXHRydG5sX3VubG9jaygpO1xcbjE3ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4xNzgzOlxcdH1cXG4xNzg0OlxcdFxcbjE3ODU6XFx0c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuMTc4NjpcXHRcXHRfX3U2NCBhZGRyOyAvKiBTdGFydCBvZiBwYWNrZXQgZGF0YSBhcmVhICovXFxuMTc4NzpcXHRcXHRfX3U2NCBsZW47IC8qIExlbmd0aCBvZiBwYWNrZXQgZGF0YSBhcmVhICovXFxuMTc4ODpcXHRcXHRfX3UzMiBjaHVua19zaXplO1xcbjE3ODk6XFx0XFx0X191MzIgaGVhZHJvb207XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjI4LjA2NTM1NTQ2MVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTA2MDU0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWFNLIEJpbmQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4c2suY2AgZGlmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlIHdpdGhpbiB0aGUgWFNLIChlWHByZXNzIERhdGEgUGF0aCBTb2NrZXRzKSBiaW5kaW5nIHByb2Nlc3MuIFRoZSBvbGQgb3JkZXIgb2YgbG9ja2luZyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNyZWF0ZSBhIGxvY2sgaW52ZXJzaW9uIHNjZW5hcmlvLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgZGV2YCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGxvY2tpbmcgYHhzLVx1MDAzZW11dGV4YC4gUHJldmlvdXNseSwgdGhlIGxvY2sgb3JkZXIgd2FzIGBydG5sX2xvY2tgLCBgeHMtXHUwMDNlbXV0ZXhgLCBhbmQgKnRoZW4qIHRoZSBgbmV0ZGV2YCBsb2NrLiBOb3csIHRoZSBgbmV0ZGV2YCBsb2NrIGlzIGFjcXVpcmVkICpiZWZvcmUqIGB4cy1cdTAwM2VtdXRleGAgYW5kIHVubG9ja2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG5TbywgdGhlIHByZXZpb3VzIGNvZGUgaGFkIGEgY3JpdGljYWwgc2VjdGlvbiB3aGVyZSBib3RoIGB4cy1cdTAwM2VtdXRleGAgYW5kIHRoZSBgbmV0ZGV2YCBsb2NrIHdlcmUgaGVsZCBzaW11bHRhbmVvdXNseSwgd2l0aCB0aGUgbmV0ZGV2IGxvY2sgYWNxdWlyZWQgYWZ0ZXIgeHMtXHUwMDNlbXV0ZXguXG5cblRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgYXR0ZW1wdCB0byBwcmV2ZW50IGEgZGVhZGxvY2ssIHJpZ2h0PyBUaGUgZ29hbCBoZXJlIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgdGhlIGxvY2tpbmcgaGllcmFyY2h5IHRvIGF2b2lkIHRoYXQgaW52ZXJzaW9uLCBpLmUuLCBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIHR3byB0aHJlYWRzIGFyZSBlYWNoIHdhaXRpbmcgZm9yIGEgbG9jayBoZWxkIGJ5IHRoZSBvdGhlciwgYW5kIHRodXMgYmxvY2tpbmcgaW5kZWZpbml0ZWx5LiBUaGUgbmV3IG9yZGVyIGlzIGRlc2lnbmVkIHRvIGJlIG1vcmUgcm9idXN0LiBJZiBpdCB3YXMgaW50cm9kdWNlZCB0aGlzIHdheSwgdGhlbiB0aGUgbG9jayBvcmRlciBpczpcblxuMS4gYHJ0bmxfbG9ja2BcbjIuIGBkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KC4uLilgXG4zLiBgbmV0ZGV2X2xvY2tfb3BzKGRldilgXG40LiBgbXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleClgXG5cbndoaWNoIGxvb2tzIG11Y2ggYmV0dGVyLlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGxvb2sgYXQgcmVsYXRlZCBwYXRjaGVzLiBJIG5lZWQgdG8gZmluZCB0aGUgY29tbWl0IG1lc3NhZ2Ugb3IgcmVsYXRlZCBpc3N1ZXMgdG8gZ2V0IHRoZSBjb250ZXh0IGJlaGluZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kICpjb25maXJtKiBpdCB3YXMgaW5kZWVkIGEgZGVhZGxvY2sgZml4LiBQcm9iYWJseSB0aGVyZSdzIGFub3RoZXIgcGF0Y2ggaW4gdGhlIGhpc3RvcnkgcmVsYXRlZCB0byB0aGlzIG9uZS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgY29tbWl0IHdoaWNoIGFkZHJlc3NlcyB0aGUgbG9jayBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjA5OjM3Ljk3MTQxMzAzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQxOTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbG9ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz0xNTkwPXN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNy1cXHRpZiAoZGV2KVxcbm5ldC94ZHAveHNrLmM6MTYxODpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQveGRwL3hzay5jLTE2MTktXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0yOTA9dm9pZCB4cF9jbGVhcl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yOTYtXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mjk3OlxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI5OC1cXHR4cF9kaXNhYmxlX2Rydl96Yyhwb29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6MzguMDMzODM4OTk5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDc3ODUwODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTG9ja2luZyBpbiBYRFAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYHhzLVx1MDAzZW11dGV4YCBvciBgbmV0ZGV2X2xvY2tfb3BzYC4gSG1tLCBsZXQncyBzZWUuLi4gKmFoYSEqIEluIGB4cF9jbGVhcl9kZXZgLCB3aGljaCBJIGJlbGlldmUgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIG9yIHJlc2V0dGluZyBhIG5ldHdvcmsgZGV2aWNlLiBJIGtub3cgdGhhdCB0aGUgZnVuY3Rpb24gYHhwX2NsZWFyX2RldmAgYWNxdWlyZXMgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgcHJvYmFibHkgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCdzIGFsc28gbG9ja2luZyB0aGUgYHhza19idWZmX3Bvb2xgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHByb3RlY3Rpbmcgc2hhcmVkIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBYRFAgc29ja2V0cy4gUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgbG9vayBhdCBob3cgYHhwX2NsZWFyX2RldmAgZG9lcyB0aGlzLCBzbyBsZXQgbWUgb3BlbiB1cCBgbmV0L3hkcC94c2tfYnVmZl9wb29sLmNgIGFuZCB0YWtlIGEgbG9vay4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgbG9ja3Mgd2l0aCB0aGVpciByZXNwZWN0aXZlIGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6NDguNTExNjkyNzY0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza19idWZmX3Bvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0ZmxhZ3MgfD0gWERQX1VTRV9ORUVEX1dBS0VVUDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0cmV0dXJuIHhwX2Fzc2lnbl9kZXYocG9vbCwgZGV2LCBxdWV1ZV9pZCwgZmxhZ3MpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHR2b2lkIHhwX2NsZWFyX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4gMjkxOlxcdHtcXG4gMjkyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwb29sLVxcdTAwM2VuZXRkZXY7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlbmV0ZGV2KVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMjk4OlxcdFxcdHhwX2Rpc2FibGVfZHJ2X3pjKHBvb2wpO1xcbiAyOTk6XFx0XFx0eHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHBvb2wtXFx1MDAzZW5ldGRldiwgcG9vbC1cXHUwMDNlcXVldWVfaWQpO1xcbiAzMDA6XFx0XFx0cG9vbC1cXHUwMDNlbmV0ZGV2ID0gTlVMTDtcXG4gMzAxOlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuIDMwMjpcXHRcXHRkZXZfcHV0KG5ldGRldik7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIHhwX3JlbGVhc2VfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHhza19idWZmX3Bvb2wsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRydG5sX2xvY2soKTtcXG4gMzExOlxcdFxcdHhwX2NsZWFyX2Rldihwb29sKTtcXG4gMzEyOlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChwb29sLVxcdTAwM2VmcSkge1xcbiAzMTU6XFx0XFx0XFx0eHNrcV9kZXN0cm95KHBvb2wtXFx1MDAzZWZxKTtcXG4gMzE2OlxcdFxcdFxcdHBvb2wtXFx1MDAzZWZxID0gTlVMTDtcXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZWNxKSB7XFxuIDMyMDpcXHRcXHRcXHR4c2txX2Rlc3Ryb3kocG9vbC1cXHUwMDNlY3EpO1xcbiAzMjE6XFx0XFx0XFx0cG9vbC1cXHUwMDNlY3EgPSBOVUxMO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHR4ZHBfcHV0X3VtZW0ocG9vbC1cXHUwMDNldW1lbSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOTo0OC41MTE3OTkxMTRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1MTM3NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2sgT3JkZXJpbmcgYW5kIENsZWFudXAgaW4gYHhza19iaW5kKClgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBsYXNlci1mb2N1c2VkIG9uIGxvY2sgb3JkZXJpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgeHNrX2JpbmQoKWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHZlcmlmaWNhdGlvbjogZG9lcyB0aGlzIGZ1bmN0aW9uIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gRG9lcyBpdCBjb3B5IGFueXRoaW5nIHNlbnNpdGl2ZSB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgYSBnb29kIHN0YXJ0IGFzIGl0J3MganVzdCBhIHN0YW5kYXJkIGBiaW5kKClgIHNvY2tldCBvcGVyYXRpb24uXG5cblNvLCB0aGlzIGB4c2tfYmluZCgpYCBmdW5jdGlvbiwgZGVmaW5lZCBhcyBgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKWAsIHRha2VzIHRoZSBgYWRkcmAgYW5kIGBhZGRyX2xlbmAgYXMgaW5wdXRzLiBJdOKAmXMgYWxsIGFib3V0IHNhbml0eSBjaGVja3MgYW5kIGxvY2sgYWNxdWlzaXRpb246IGBydG5sX2xvY2soKWAsIHRoZW4gaXQgZ3JhYnMgdGhlIGRldmljZSB1c2luZyBgZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXHUwMDNlc3hkcF9pZmluZGV4KWAsIHN1YnNlcXVlbnRseSBsb2NraW5nIGl0IHdpdGggYG5ldGRldl9sb2NrX29wcyhkZXYpYC4gV2UgYWxzbyBoYXZlIGBtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAuXG5cblRoZW4gdGhlIGNvcmUgbG9naWMuIElmIHRoZSBYU0sgc3RhdGUgaXNuJ3QgcmVhZHksIHdlIGdldCAtRUJVU1kgYW5kIGp1bXAgb3V0LiBObyBkZXZpY2U/IC1FTk9ERVYgYW5kIGp1bXAgb3V0LiBObyBSWCBvciBUWCBxdWV1ZXM/IC1FSU5WQUwgYW5kIGp1bXAgb3V0LiBPdGhlcndpc2UsIGl0IHNldHMgdXAgdGhlIHF1ZXVlcywgcG9vbCwgYW5kIHNvIG9uLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogdGhlIHJlbGVhc2UgcGF0aC4gSWYgbm8gZXJyb3Igb2NjdXJyZWQsIGBXUklURV9PTkNFKHhzLVx1MDAzZXN0YXRlLCBYU0tfQk9VTkQpYC4gVGhlIHVubG9jayBzZXF1ZW5jZSBpcyBjcml0aWNhbCBoZXJlOiBgbXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KWAsIHRoZW4gY29uZGl0aW9uYWxseSB1bmxvY2sgdGhlIGRldmljZSB3aXRoIGBuZXRkZXZfdW5sb2NrX29wcyhkZXYpYCBhbmQgcHV0IHRoZSBkZXZpY2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIEZpbmFsbHksIGBydG5sX3VubG9jaygpYCBhbmQgdGhlIHJldHVybi5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoZWNrLiBUaGUgYGRldmAgaGFuZGxpbmcuLi4gYGRldmAgaXMgaW5pdGlhbGx5IGBOVUxMYD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgYGRldmAgaXMgYmVpbmcgaGFuZGxlZCwgc28gSSdtIGhlYWRpbmcgdG8gYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTU5MC0xNjE1LCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBsb2NrcyBhcmUgYmVpbmcgcmVsZWFzZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDowOTo1My4yNjMxNzcwNzhaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5MDpcXHRzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxuMTU5MTpcXHR7XFxuMTU5MjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfeGRwICpzeGRwID0gKHN0cnVjdCBzb2NrYWRkcl94ZHAgKilhZGRyO1xcbjE1OTM6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuMTU5NDpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcXG4xNTk1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMTU5NjpcXHRcXHRpbnQgYm91bmRfZGV2X2lmO1xcbjE1OTc6XFx0XFx0dTMyIGZsYWdzLCBxaWQ7XFxuMTU5ODpcXHRcXHRpbnQgZXJyID0gMDtcXG4xNTk5OlxcdFxcbjE2MDA6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl94ZHApKVxcbjE2MDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwMjpcXHRcXHRpZiAoc3hkcC1cXHUwMDNlc3hkcF9mYW1pbHkgIT0gQUZfWERQKVxcbjE2MDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGZsYWdzID0gc3hkcC1cXHUwMDNlc3hkcF9mbGFncztcXG4xNjA2OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IH4oWERQX1NIQVJFRF9VTUVNIHwgWERQX0NPUFkgfCBYRFBfWkVST0NPUFkgfFxcbjE2MDc6XFx0XFx0XFx0ICAgICAgWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9VU0VfU0cpKVxcbjE2MDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYwOTpcXHRcXG4xNjEwOlxcdFxcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfYm91bmRfZGV2X2lmKTtcXG4xNjExOlxcdFxcdGlmIChib3VuZF9kZXZfaWYgXFx1MDAyNlxcdTAwMjYgYm91bmRfZGV2X2lmICE9IHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleClcXG4xNjEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MTM6XFx0XFxuMTYxNDpcXHRcXHRydG5sX2xvY2soKTtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHN4ZHAtXFx1MDAzZXN4ZHBfaWZpbmRleCk7XFxuMTYxNzpcXHRcXHRpZiAoZGV2KVxcbjE2MTg6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuMTYxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6MDk6NTMuMjYzMzUwODk4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxNDA0NjM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIFNlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGFuZCB0aGUga2V5IGxpbmVzLiBBdCBsaW5lIDE1OTUsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O2AgaXMgaW5kZWVkIHVuaW5pdGlhbGl6ZWQsIGJ1dCBsaW5lIDE2MTYgYXNzaWducyBpdCBpbW1lZGlhdGVseSB2aWEgYGRldiA9IGRldl9nZXRfYnlfaW5kZXgoLi4uKWAsIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSB1c2UuIFRoaXMgaXMgY3J1Y2lhbDsgdGhlIGNvZGUgZXN0YWJsaXNoZXMgYGRldmAgYmVmb3JlIGFueSByZWFkcyBvciBicmFuY2hlcyB0aGF0IHdvdWxkIHJlbHkgb24gaXRzIGluaXRpYWwgc3RhdGUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyLiBTcGVjaWZpY2FsbHksIHRoZSBvcmRlciBvZiBhY3F1aXJpbmcgYG5ldGRldl9sb2NrX29wcyhkZXYpYCBhbmQgYHhzLVx1MDAzZW11dGV4YCBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIEFGX1hEUCBzb2NrZXQgYmluZCBwcm9jZXNzLiBUaGUgY29kZSB0aGVuIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBhbmQgZW5zdXJlcyByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5LiBUaGUgb3JpZ2luYWwgcGF0Y2ggbG9naWMgdGhlbiBleGVjdXRlcyBjaGVja3MgYW5kIHJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYXQgYG91dF9yZWxlYXNlYC5cblxuSSd2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBJdCdzICpub3QqIHRoZSBnby10byB0b29sIGZvciBsb2NrIG9yZGVyIGlzc3VlcywgZGVhZGxvY2tzLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRob3NlIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgdGhlIHVzdWFsIGRlYnVnZ2luZyB0b29scy5cblxuTm93LCBsZXQncyBtYXAgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2Vzbid0OlxuXG4xLiAgVG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBhcmUgaW52b2x2ZWQuXG4yLiAgSW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBkZXZgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGF3YXkuXG4zLiAgQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgSW50cm9kdWNlIGFueSBuZXcgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBsb2dpYyB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoaXMgaXMgYSByZW9yZGVyaW5nIG9mIGxvY2tzIHRvIHByZXZlbnQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBleGl0IHBhdGgsIGJ1dCB0aGlzIGlzIGhhbmRsZWQgYnkgYG5ldGRldl91bmxvY2tfb3BzKGRldilgIGFuZCBgZGV2X3B1dChkZXYpYC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIGRhdGEgcGF0aCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbnkgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBkZWFkbG9ja3MsIG9yIHJlZmVyZW5jZSBjb3VudCBidWdzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LiBNeSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NiwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDoxMDowMC40MDM4MTc5MjZaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGxvY2tpbmcgb3BlcmF0aW9ucyBpbiB4c2tfYmluZCgpIHRvIGFjcXVpcmUgbmV0ZGV2X2xvY2tfb3BzKGRldikgcHJpb3IgdG8gdGFraW5nIHhzLVxcdTAwM2VtdXRleCwgcmVzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2ssIGFuZCB1cGRhdGVzIHRoZSBjbGVhbnVwIHBhdGggKG5ldGRldl91bmxvY2tfb3BzIGFuZCBkZXZfcHV0KS4gVGhlIHBhdGNoIHN0cmljdGx5IGFsdGVycyBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWM7IGl0IGRvZXMgbm90IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBsb2NraW5nIGhpZXJhcmNoaWVzIG9yIG9iamVjdCBsaWZldGltZXMgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbr8vp[1] Phase: Succeeded StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 10:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 10:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2] Phase: Succeeded StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 10:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 10:10:12 +0000 UTC FinishedAt: 2026-09-15 10:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-369512964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 10:10:22 +0000 UTC FinishedAt: 2026-09-15 10:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 10:10:22 +0000 UTC FinishedAt: 2026-09-15 10:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c7205111-1570-4e31-b9ca-a4eb042287f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-369512964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a3e9c724-e132-4749-a17c-63cde0a62db2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-554309442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 10:10:22 +0000 UTC FinishedAt: 2026-09-15 10:26:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c7205111-1570-4e31-b9ca-a4eb042287f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-369512964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a3e9c724-e132-4749-a17c-63cde0a62db2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-554309442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 10:26:32 +0000 UTC FinishedAt: 2026-09-15 10:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 10:26:32 +0000 UTC FinishedAt: 2026-09-15 10:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 10:26:32 +0000 UTC FinishedAt: 2026-09-15 10:26:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 10:26:32 +0000 UTC FinishedAt: 2026-09-15 10:26:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-810745731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 10:26:53 +0000 UTC FinishedAt: 2026-09-15 10:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 10:26:53 +0000 UTC FinishedAt: 2026-09-15 10:28:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3e9c724-e132-4749-a17c-63cde0a62db2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-554309442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 10:29:01 +0000 UTC FinishedAt: 2026-09-15 10:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 10:29:01 +0000 UTC FinishedAt: 2026-09-15 10:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 10:29:01 +0000 UTC FinishedAt: 2026-09-15 10:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 10:29:01 +0000 UTC FinishedAt: 2026-09-15 10:45:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c7205111-1570-4e31-b9ca-a4eb042287f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-810745731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d5521b86-a0b8-4ffc-ada4-91f534b028bc", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-1011068471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 10:29:01 +0000 UTC FinishedAt: 2026-09-15 10:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c7205111-1570-4e31-b9ca-a4eb042287f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-810745731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d5521b86-a0b8-4ffc-ada4-91f534b028bc", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-1011068471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 10:45:21 +0000 UTC FinishedAt: 2026-09-15 10:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 10:45:21 +0000 UTC FinishedAt: 2026-09-15 10:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 10:45:21 +0000 UTC FinishedAt: 2026-09-15 10:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 10:45:21 +0000 UTC FinishedAt: 2026-09-15 10:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5521b86-a0b8-4ffc-ada4-91f534b028bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-1011068471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a3e9c724-e132-4749-a17c-63cde0a62db2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5521b86-a0b8-4ffc-ada4-91f534b028bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-554309442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-1011068471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 10:47:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 10:47:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-910015388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 10:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 10:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 10:47:26 +0000 UTC FinishedAt: 2026-09-15 10:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 10:47:36 +0000 UTC FinishedAt: 2026-09-15 14:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr8vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"fd897794-4f0d-45f4-8e63-bcb526e0b175","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 10:47:36 +0000 UTC FinishedAt: 2026-09-15 14:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3e9c724-e132-4749-a17c-63cde0a62db2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5521b86-a0b8-4ffc-ada4-91f534b028bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-554309442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-build-action-1011068471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr8vp/series-workflowbr8vp-convert-artifact-910015388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}