Name: series-workflowfhcfn Phase: Succeeded StartedAt: 2026-08-10 01:06:55 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[0] Phase: Succeeded StartedAt: 2026-08-10 01:06:55 +0000 UTC FinishedAt: 2026-08-10 01:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 01:06:55 +0000 UTC FinishedAt: 2026-08-10 01:31:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "778a8357-cb20-42a4-be78-ed70cfed9397" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl", "vhost_vdpa_vring_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzYzA5YmVmZmEzMmJhYTBjYzU2YTBjNzJkMGY4MjY3ZDg3NGM5MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCA2OTI1NjRiMWJjYmJlLi5mMmVlZGIwNDY0YzI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNTMsNiAmIzQzOzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuJiM0MztcdHUxNiB2cV9udW1fbWF4O1xuIFx0aW50IHZpcnRpb19pZDtcbiBcdGludCBtaW5vcjtcbiBcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcbkBAIC0yMjksNyAmIzQzOzIzMCw5IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBxaWQpXG4gc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4ge1xuIFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cdTAwM2V2ZHBhO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0di1cdTAwM2VzdXNwZW5kZWQgPSBmYWxzZTtcbiBcbkBAIC0yMzksNyAmIzQzOzI0MiwxNCBAQCBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiBcdFx0XHQgVkRQQV9SRVNFVF9GX0NMRUFOX01BUCA6IDA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7XG4mIzQzO1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbiYjNDM7XHRyZXQgPSB2ZHBhX3Jlc2V0KHZkcGEsIGZsYWdzKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4mIzQzO1x0XHR2LVx1MDAzZXZxX251bV9tYXggPSBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5AQCAtNjQxLDkgJiM0Mzs2NTEsMTUgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHUzMiBpZHg7XG4gXHRsb25nIHI7XG4gXG4tXHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xuLVx0aWYgKHIgXHUwMDNjIDApXG4tXHRcdHJldHVybiByO1xuJiM0MztcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0aWR4ID0gcy5pbmRleDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbiYjNDM7XHRcdGlmIChyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaWR4IFx1MDAzZT0gdi1cdTAwM2VudnFzKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG5AQCAtNjUyLDYgJiM0Mzs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4mIzQzO1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4mIzQzO1x0XHRcdHIgPSAtRUJVU1k7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzLm51bSB8fCBzLm51bSBcdTAwM2UgMHhmZmZmIHx8XG4mIzQzO1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbiYjNDM7XHRcdFx0ICAgKHMubnVtIFx1MDAyNiAocy5udW0gLSAxKSkpIHtcbiYjNDM7XHRcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR2cS1cdTAwM2VudW0gPSBzLm51bTtcbiYjNDM7XHRcdFx0ciA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuJiM0MztcdFx0b3BzLVx1MDAzZXNldF92cV9udW0odmRwYSwgaWR4LCBzLm51bSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGNhc2UgVkhPU1RfVkRQQV9TRVRfVlJJTkdfRU5BQkxFOlxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC03NjUsOSAmIzQzOzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzYzA5YmVmZmEzMmJhYTBjYzU2YTBjNzJkMGY4MjY3ZDg3NGM5MDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHsKIAlzdHJ1Y3QgY2RldiBjZGV2OwogCWF0b21pY190IG9wZW5lZDsKIAl1MzIgbnZxczsKJiM0MzsJdTE2IHZxX251bV9tYXg7CiAJaW50IHZpcnRpb19pZDsKIAlpbnQgbWlub3I7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4OwpAQCAtMjI5LDcgJiM0MzsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKQogc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiB7CiAJc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi0mZ3Q7dmRwYTsKJiM0MzsJY29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS0mZ3Q7Y29uZmlnOwogCXUzMiBmbGFncyA9IDA7CiYjNDM7CWludCByZXQ7CiAKIAl2LSZndDtzdXNwZW5kZWQgPSBmYWxzZTsKIApAQCAtMjM5LDcgJiM0MzsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiAJCQkgVkRQQV9SRVNFVF9GX0NMRUFOX01BUCA6IDA7CiAJfQogCi0JcmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpOwomIzQzOwl2LSZndDt2cV9udW1fbWF4ID0gMDsKJiM0MzsJcmV0ID0gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQkvKiBTb21lIGJhY2tlbmRzIGRlcml2ZSB0aGUgbWF4IGZyb20gbXV0YWJsZSBxdWV1ZSBzdGF0ZS4gKi8KJiM0MzsJCXYtJmd0O3ZxX251bV9tYXggPSBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKQEAgLTY0MSw5ICYjNDM7NjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJdTMyIGlkeDsKIAlsb25nIHI7CiAKLQlyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApOwotCWlmIChyICZsdDsgMCkKLQkJcmV0dXJuIHI7CiYjNDM7CWlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkgewomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWlkeCA9IHMuaW5kZXg7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApOwomIzQzOwkJaWYgKHIgJmx0OyAwKQomIzQzOwkJCXJldHVybiByOwomIzQzOwl9CiAKIAlpZiAoaWR4ICZndDs9IHYtJmd0O252cXMpCiAJCXJldHVybiAtRU5PQlVGUzsKQEAgLTY1Miw2ICYjNDM7NjY4LDIzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJdnEgPSAmYW1wO3YtJmd0O3Zxc1tpZHhdOwogCiAJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CQlpZiAodnEtJmd0O3ByaXZhdGVfZGF0YSkgewomIzQzOwkJCXIgPSAtRUJVU1k7CiYjNDM7CQl9IGVsc2UgaWYgKCFzLm51bSB8fCBzLm51bSAmZ3Q7IDB4ZmZmZiB8fAomIzQzOwkJCSAgIHMubnVtICZndDsgdi0mZ3Q7dnFfbnVtX21heCB8fAomIzQzOwkJCSAgIChzLm51bSAmYW1wOyAocy5udW0gLSAxKSkpIHsKJiM0MzsJCQlyID0gLUVJTlZBTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdnEtJmd0O251bSA9IHMubnVtOwomIzQzOwkJCXIgPSAwOwomIzQzOwkJfQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwkJb3BzLSZndDtzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pOwomIzQzOwkJcmV0dXJuIDA7CiAJY2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3MsIGFyZ3AsIHNpemVvZihzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc2NSw5ICYjNDM7Nzk4LDYgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAkJb3BzLSZndDtzZXRfdnFfY2IodmRwYSwgaWR4LCAmYW1wO2NiKTsKIAkJYnJlYWs7CiAKLQljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06Ci0JCW9wcy0mZ3Q7c2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLSZndDtudW0pOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGB2cV9udW1fbWF4YCB0byB0aGUgYHN0cnVjdCB2aG9zdF92ZHBhYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzc3VlcyBoZXJlLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfY29tcGF0X3ZkcGFfcmVzZXRgIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyB0aGlzIG5ldyBgdnFfbnVtX21heGAgZmllbGQgdmlhIGBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpYC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdoYXQgZG9lcyB0aGF0IGBnZXRfdnFfbnVtX21heGAgYWN0dWFsbHkgcmV0dXJuPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgb24gaXRzIHJldHVybiB2YWx1ZT8gQW55IGluaGVyZW50IGxpbWl0cyBpbiB0aGUgYHZkcGFgIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzPwoKVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEhlcmUsIHRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgb24gaG93IGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpcyBoYW5kbGVkLiBUaGUgdXNlci1wcm92aWRlZCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCAoYHNgKSBpcyBub3cgdmFsaWRhdGVkIGFnYWluc3QgYHYtJmd0O3ZxX251bV9tYXhgLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGRvaW5nIGEgYm91bmRzIGNoZWNrOiBgcy5udW1gIGhhcyB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHYtJmd0O3ZxX251bV9tYXhgLiBUaGlzIGlzIGEgZ29vZCBzYW5pdHkgY2hlY2sgYnV0IGl0IGlzIGFsc28gb25lIHdoZXJlIGZ1enppbmcgd2lsbCBiZSB2ZXJ5IHVzZWZ1bC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpczogV2hhdCBoYXBwZW5zIGlmIGBzLm51bWAgaXMgKmV4YWN0bHkqIGB2LSZndDt2cV9udW1fbWF4YD8gRG9lcyB0aGF0IGV4cG9zZSBhbnkgbmV3IGVkZ2UgY2FzZXM/IERvZXMgdGhpcyB2YWx1ZSBnZXQgcmUtdmFsaWRhdGVkIGFnYWluPwoKVWx0aW1hdGVseSwgdGhpcyBgcy5udW1gIHZhbHVlIGlzIGFzc2lnbmVkIHRvIGB2cS0mZ3Q7bnVtYCBhbmQgdGhlbiBwYXNzZWQgdG8gYG9wcy0mZ3Q7c2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKWAuIFRoYXQgYHNldF92cV9udW1gIGlzIHRoZSBrZXkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gRG9lcyBpdCBhbHNvIHBlcmZvcm0gYW55IGFkZGl0aW9uYWwgY2hlY2tzIG9yIHNhbml0eSB2YWxpZGF0aW9uPyBXaGF0IGlzIHRoZSAqaW50ZXJhY3Rpb24qIGJldHdlZW4gdGhlIG5ldyBgdnFfbnVtX21heGAgY2hlY2sgYW5kIHRoZSBhY3Rpb25zIG9mIHRoZSBgc2V0X3ZxX251bWAgZnVuY3Rpb24/IEFuZCBpdCBpcyBjcml0aWNhbCB0aGF0IEkgZnV6eiB0aGlzIHRvby4KCkFsbCBpbiBhbGwsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGNoYW5nZSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhvc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucywgYW5kIHRoYXQgaXMgd2hlcmUgdGhlIGF0dGFjayBzdXJmYWNlIGhhcyBleHBhbmRlZC4gVGltZSB0byBodW50IGRvd24gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgdmhvc3RfdmRwYS5jYC4gSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLCB3aGljaCBzaG91bGQgdGVsbCBtZSBpZiBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfVkhPU1RfVkRQQWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZEUEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBWSE9TVF9WRFBBIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFZIT1NUX1ZEUEFgIHRoaW5nIGNvbXBsZXRlbHkuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBtYXAgb3V0IGV2ZXJ5IGNvbXBvbmVudCwgZXZlcnkgbW9kdWxlLCBldmVyeSBsaWJyYXJ5IHRoYXQgYFZIT1NUX1ZEUEFgIHJlbGllcyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgd2ViIG9mIGRlcGVuZGVuY2llcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gZ29pbmcgdG8gdHJvdWJsZXNob290IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gdGhpbmsgYWJvdXQgY29udHJpYnV0aW5nIHVwc3RyZWFtLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHVwc3RyZWFtIHJlcXVpcmVtZW50cyBhcmUgbWV0IGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSBtb3ZlIG9uIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2hhdCYjMzQ7IGFuZCAmIzM0O2hvdyYjMzQ7IG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZEUEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRvIHRoaXMuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdToKCioqSW50ZXJuYWwgQW5hbHlzaXM6IEZpbGUgSW5zcGVjdGlvbiAmYW1wOyBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIGxldCYjMzk7cyB0YWtlIGEgYmVhdCBhbmQgYWN0dWFsbHkgKnJlYWQqIHRoZSBmaWxlLiBObyBhc3N1bXB0aW9ucywgbm8ganVtcGluZyB0byBjb25jbHVzaW9ucywganVzdCBhIGNsZWFuLCB1bmJpYXNlZCBpbml0aWFsIHNjYW4uIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBvYnZpb3VzIOKAkyB0aGUgZmlsZSBmb3JtYXQsIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSwgYW55IGltbWVkaWF0ZWx5IGFwcGFyZW50IGRhdGEgdHlwZXMsIGFuZCBhbnkgZ2xhcmluZyByZWQgZmxhZ3Mgb3IgcHJvbWlzaW5nIGluZGljYXRvcnMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNydWNpYWwuIEl0JiMzOTtsbCBzaGFwZSB0aGUgcXVlc3Rpb25zIEkgYXNrIGFuZCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBhbmFseXNpcy4gSXQmIzM5O3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgZnJhbWV3b3JrLCBhIG1lbnRhbCBtYXAsIGJlZm9yZSBJIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0dmlydGlvX3RyYW5zcG9ydC5rbyBkcml2ZXIgbG9hZGVkIHRvIHVzZSB0aGUgdmlydGlvLXZzb2NrIGRldmljZS5cbiAgNjY6XHRcbiAgNjc6XHRcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNjg6XHRcdHZob3N0X3Zzb2NrLlxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBWSE9TVF9WRFBBXG4gIDcxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuICA3MjpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEXG4gIDczOlx0XHRzZWxlY3QgVkhPU1RcbiAgNzQ6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgNzU6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDc4Olx0XHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXG4gIDc5Olx0XG4gIDgwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgODE6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVkhPU1RfVkRQQSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGJvdGggYEVWRU5URkRgIGFuZCBgVkRQQWAgYXMgYSBwcmVyZXF1aXNpdGUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBzdGF0ZSBvZiBgVkRQQWAsIHdoaWNoIGlzIHRoZSBwb3RlbnRpYWxseSBtb3JlIGNvbXBsZXggZGVwZW5kZW5jeSBoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IHVwIGFzIGV4cGVjdGVkIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGVuYWJsZWQgb3B0aW9ucyB3aXRoaW4gdGhlIGBWRFBBYCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHZob3N0X3ZkcGFgIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBgdmhvc3RfdmRwYWAgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCB0byBlbmFibGUgYFZIT1NUX1ZEUEFgLCBvYnZpb3VzbHkuIEJ1dCB0byBtYWtlIHRoaXMgd29ydGh3aGlsZSwgd2UmIzM5O2xsIG5lZWQgYSBzdWl0YWJsZSB2aXJ0dWFsIGRhdGEgcGF0aCBhY2Nlc3MgKFZEUEEpIHNpbXVsYXRvciDigJMgc29tZXRoaW5nIGxpa2UgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGdldCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYW5kIGBWRFBBX1VTRVJgIGFkZGVkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdOKAmXMgdGhlIGdyb3VuZHdvcmsuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIOKAkyBsb3RzIG9mIGludGVyYWN0aW9uIHRoZXJlLiBUaGVuLCBJIHdhcyBsb29raW5nIGF0IGBfY29tcGF0X3ZkcGFfcmVzZXRgLCBpdCBiZWluZyBzdGF0aWMgbWlnaHQgcG9zZSBhIGNoYWxsZW5nZSwgdGhvdWdoIGB2aG9zdF92ZHBhX3Jlc2V0YCBpcyBhbHNvIHN0YXRpYyB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSwgYnV0IG1heWJlIHRoZXJlIGlzIGEgd2F5IHRvIG1ha2UgdXNlIG9mIGl0IHZpYSB0aGUgaW9jdGwuIEZpbmFsbHksIEkgc2hvdWxkIGFsc28gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgLSB0aGF0IGZlZWxzIGltcG9ydGFudCwgdG9vLiBPa2F5LCBnb29kLCBJIGhhdmUgbXkgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9NjQyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODA1LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODA2OnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODA3LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92ZHBhX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3My1cdC53cml0ZV9pdGVyXHQ9IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc1LSNpZmRlZiBDT05GSUdfTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHZob3N0LXZkcGFgIGRyaXZlciwgYW5kIG15IGZvY3VzIGlzIHRoZSBpb2N0bCBoYW5kbGluZy4gVGhlIGZpcnN0IGVudHJ5IHBvaW50IHRvIG5vdGUgaXMgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBGcm9tIHRoZXJlLCBJIHNlZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZ2V0cyBjYWxsZWQ7IHRoYXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHZyaW5nLXNwZWNpZmljIG9wZXJhdGlvbnMuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGBfY29tcGF0X3ZkcGFfcmVzZXRgLCBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBgdmhvc3RfdmRwYV9yZXNldGAsIHdoaWNoIHVsdGltYXRlbHkgaXMgYWxzbyB0cmlnZ2VyZWQgYnkgdGhlIHRvcC1sZXZlbCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGEgYFZIT1NUX1ZEUEFfU0VUX1NUQVRVU2AgY2FsbC4gSSBjYW4gc2VlIHRoaXMgY2FuIGJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgaW9jdGwgY2FsbHMuCgpUbyBnZXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGl0c2VsZi4gSXQmIzM5O3MgaW4gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc28gSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIG1vc3QgY3JpdGljYWwgcGllY2UgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwNjpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuIDgwNzpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gODA4Olx0e1xuIDgwOTpcdFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBmaWxlcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gODEwOlx0XHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkID0gXHUwMDI2di1cdTAwM2V2ZGV2O1xuIDgxMTpcdFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gODEyOlx0XHR1NjQgX191c2VyICpmZWF0dXJlcCA9IGFyZ3A7XG4gODEzOlx0XHR1NjQgZmVhdHVyZXM7XG4gODE0Olx0XHRsb25nIHIgPSAwO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKGNtZCA9PSBWSE9TVF9TRVRfQkFDS0VORF9GRUFUVVJFUykge1xuIDgxNzpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZmVhdHVyZXMsIGZlYXR1cmVwLCBzaXplb2YoZmVhdHVyZXMpKSlcbiA4MTg6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MTk6XHRcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiB+KFZIT1NUX1ZEUEFfQkFDS0VORF9GRUFUVVJFUyB8XG4gODIwOlx0XHRcdFx0XHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSB8XG4gODIxOlx0XHRcdFx0XHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkgfFxuIDgyMjpcdFx0XHRcdFx0IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1NVU1BFTkQpIHxcbiA4MjM6XHRcdFx0XHRcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpIHxcbiA4MjQ6XHRcdFx0XHRcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9FTkFCTEVfQUZURVJfRFJJVkVSX09LKSkpXG4gODI1Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDgyNjpcdFx0XHRpZiAoKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9TVVNQRU5EKSkgXHUwMDI2XHUwMDI2XG4gODI3Olx0XHRcdCAgICAgIXZob3N0X3ZkcGFfY2FuX3N1c3BlbmQodikpXG4gODI4Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDgyOTpcdFx0XHRpZiAoKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpKSBcdTAwMjZcdTAwMjZcbiA4MzA6XHRcdFx0ICAgICAhdmhvc3RfdmRwYV9jYW5fcmVzdW1lKHYpKVxuIDgzMTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4MzI6XHRcdFx0aWYgKChmZWF0dXJlcyBcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXHUwMDI2XHUwMDI2XG4gODMzOlx0XHRcdCAgICAhKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9BU0lEKSkpXG4gODM0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM1Olx0XHRcdGlmICgoZmVhdHVyZXMgXHUwMDI2IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX0RFU0NfQVNJRCkpIFx1MDAyNlx1MDAyNlxuIDgzNjpcdFx0XHQgICAgICF2aG9zdF92ZHBhX2hhc19kZXNjX2dyb3VwKHYpKVxuIDgzNzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4Mzg6XHRcdFx0aWYgKChmZWF0dXJlcyBcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkpIFx1MDAyNlx1MDAyNlxuIDgzOTpcdFx0XHQgICAgICF2aG9zdF92ZHBhX2hhc19wZXJzaXN0ZW50X21hcCh2KSlcbiA4NDA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODQxOlx0XHRcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFx1MDAyNnYtXHUwMDNldmRldiwgZmVhdHVyZXMpO1xuIDg0MjpcdFx0XHRyZXR1cm4gMDtcbiA4NDM6XHRcdH1cbiA4NDQ6XHRcbiA4NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2ZC1cdTAwM2VtdXRleCk7XG4gODQ2Olx0XG4gODQ3Olx0XHRzd2l0Y2ggKGNtZCkge1xuIDg0ODpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9ERVZJQ0VfSUQ6XG4gODQ5Olx0XHRcdHIgPSB2aG9zdF92ZHBhX2dldF9kZXZpY2VfaWQodiwgYXJncCk7XG4gODUwOlx0XHRcdGJyZWFrO1xuIDg1MTpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9TVEFUVVM6XG4gODUyOlx0XHRcdHIgPSB2aG9zdF92ZHBhX2dldF9zdGF0dXModiwgYXJncCk7XG4gODUzOlx0XHRcdGJyZWFrO1xuIDg1NDpcdFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9TVEFUVVM6XG4gODU1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3NldF9zdGF0dXModiwgYXJncCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIHZob3N0LXZkcGEgSW50ZXJmYWNlKioKCkFscmlnaHQsIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCDigJMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBnYXRld2F5LCB0aGUgYmlnIGthaHVuYSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHZob3N0LXZkcGEgc2V0dXAuIEJlZm9yZSBJIGRlbHZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpoYXBwZW5pbmcqIHVuZGVyIHRoZSBob29kLiBJIGtub3cgdGhlIGdlbmVyYWwgZmxvdywgYnV0IGxldCYjMzk7cyBxdWlja2x5IHpvb20gaW4gb24gdHdvIGNyaXRpY2FsIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBGaXJzdCwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgd2hlcmUgdGhlIHZpcnR1YWwgcmluZ3MgYXJlIG1hbmFnZWQsIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkYXRhIHRyYW5zZmVyIHByb2Nlc3MgaXMgYWN0dWFsbHkgb3JjaGVzdHJhdGVkLiBTZWNvbmQsIGB2aG9zdF92ZHBhX3Jlc2V0YC4uLiB0aGF0IGltcGxpZXMgYSBjcml0aWNhbCBjbGVhbnVwIG9yIHN0YXRlLXJlY292ZXJ5IG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb3ZlcnMgZnJvbSBlcnJvcnMgb3IgcHJlcGFyZXMgZm9yIG5ldyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpb2N0bGAgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9MTI1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdmRwYV9hcyAqdmhvc3RfdmRwYV9maW5kX2FsbG9jX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEzNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Jlc2V0X21hcChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIGFzaWQpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVtb3ZlX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgYXNpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjAtXHQgKi9cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE2MTpcdHZob3N0X3ZkcGFfcmVzZXRfbWFwKHYsIGFzaWQpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyLVx0a2ZyZWUoYXMpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTIzMD1zdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNTQtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNTU6c3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMjU2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDM0PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDQ4LVx0bnZxcyA9IHYtXHUwMDNlbnZxcztcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0NDk6XHRyID0gdmhvc3RfdmRwYV9yZXNldCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtXHRpZiAocilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDkzPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAwLVx0dmhvc3RfdmRwYV9jbGVhbl9pcnEodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTAxOlx0dmhvc3RfdmRwYV9yZXNldCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1MDItXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2LVx1MDAzZXZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgdmhvc3RfdmRwYV9yZXNldCBDYWxsIExvY2F0aW9ucyoqCgpSaWdodCwgc28gYHZob3N0X3ZkcGFfcmVzZXRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHByaW1hcmlseSBmcm9tIGB2aG9zdF92ZHBhX29wZW5gIGFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBvcGVuIGFuZCByZWxlYXNlIGFyZSB0aGUgbmF0dXJhbCBwb2ludHMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwL3Jlc2V0dGluZyB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLiBJdCYjMzk7cyB1c2VkIHdoZW4gdGhlIGRldmljZSBpcyBmaXJzdCBicm91Z2h0IG9ubGluZSBhbmQgd2hlbiBpdCYjMzk7cyBiZWluZyB0YWtlbiBvZmZsaW5lIHRvIHByZXZlbnQgc3RhbGUgc3RhdGVzLgoKSG93ZXZlciwgYSBxdWljayB0aG91Z2h0IGZsYXNoZXM6IElzIGl0IGFsc28gdHJpZ2dlcmVkIGJ5IGFuIGBpb2N0bGAgY2FsbD8gSWYgaXQgaXMsIHRoZW4gdGhlIHJlc2V0IGNvdWxkIGJlIGluaXRpYXRlZCBmcm9tIHVzZXItc3BhY2UgdG9vLCByaWdodD8gVGhpcyBtZWFucyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBjb250cm9sIG92ZXIgdGhlIHJlc2V0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOyBrbm93aW5nIHRoaXMgd291bGQgaW1wYWN0IGhvdyBJIGhhbmRsZSB0aGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgaWYgaW9jdGwgY2FsbHMgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJZiB0aGF04oCZcyB0aGUgY2FzZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGlvY3RscyBtaWdodCB0cmlnZ2VyIHRoZSByZXNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV9zZXRfc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9Mjk3PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfZ2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMC1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjMxMTpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9zdGF0dXMoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHU4IF9fdXNlciAqc3RhdHVzcClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMi17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9ODA2PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg1NC1cdGNhc2UgVkhPU1RfVkRQQV9TRVRfU1RBVFVTOlxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODU1Olx0XHRyID0gdmhvc3RfdmRwYV9zZXRfc3RhdHVzKHYsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODU2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipWaG9zdC1WRFBBIFN0YXR1cyBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN0YXR1cyBvZiB2RFBBIGRldmljZXMgaXMgYmVpbmcgbWFuYWdlZC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgd2lkZXIgdmhvc3QgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucywgaG93IGl0IHNpZ25hbHMgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIHZob3N0IHVzZXJzcGFjZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZSYjMzk7cyBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgb2YgdGhlIHZob3N0L3ZEUEEgaW50ZWdyYXRpb24gYXMgd2VsbCwgdG8gaGF2ZSBhbiBpZGVhIG9mIHdoZXJlIHRoaXMgcm91dGluZSBpcyBzaXR1YXRlZCBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGFzc3VtcHRpb25zIG1hZGUgaW4gbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0sIGFuZCBjb25maXJtIHRoZXkgYWxpZ24gd2l0aCB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMTpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbiAzMTQ6XHRcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIDMxNTpcdFx0dTggc3RhdHVzLCBzdGF0dXNfb2xkO1xuIDMxNjpcdFx0dTMyIG52cXMgPSB2LVx1MDAzZW52cXM7XG4gMzE3Olx0XHRpbnQgcmV0O1xuIDMxODpcdFx0dTE2IGk7XG4gMzE5Olx0XG4gMzIwOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3RhdHVzLCBzdGF0dXNwLCBzaXplb2Yoc3RhdHVzKSkpXG4gMzIxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMyMjpcdFxuIDMyMzpcdFx0c3RhdHVzX29sZCA9IG9wcy1cdTAwM2VnZXRfc3RhdHVzKHZkcGEpO1xuIDMyNDpcdFxuIDMyNTpcdFx0LypcbiAzMjY6XHRcdCAqIFVzZXJzcGFjZSBzaG91bGRuJiMzOTt0IHJlbW92ZSBzdGF0dXMgYml0cyB1bmxlc3MgcmVzZXQgdGhlXG4gMzI3Olx0XHQgKiBzdGF0dXMgdG8gMC5cbiAzMjg6XHRcdCAqL1xuIDMyOTpcdFx0aWYgKHN0YXR1cyAhPSAwIFx1MDAyNlx1MDAyNiAoc3RhdHVzX29sZCBcdTAwMjYgfnN0YXR1cykgIT0gMClcbiAzMzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAoKHN0YXR1c19vbGQgXHUwMDI2IFZJUlRJT19DT05GSUdfU19EUklWRVJfT0spIFx1MDAyNlx1MDAyNiAhKHN0YXR1cyBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykpXG4gMzMzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG52cXM7IGkmIzQzOyYjNDM7KVxuIDMzNDpcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaSk7XG4gMzM1Olx0XG4gMzM2Olx0XHRpZiAoc3RhdHVzID09IDApIHtcbiAzMzc6XHRcdFx0cmV0ID0gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xuIDMzODpcdFx0XHRpZiAocmV0KVxuIDMzOTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzQwOlx0XHR9IGVsc2VcbiAzNDE6XHRcdFx0dmRwYV9zZXRfc3RhdHVzKHZkcGEsIHN0YXR1cyk7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykgXHUwMDI2XHUwMDI2ICEoc3RhdHVzX29sZCBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykpXG4gMzQ0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG52cXM7IGkmIzQzOyYjNDM7KVxuIDM0NTpcdFx0XHRcdHZob3N0X3ZkcGFfc2V0dXBfdnFfaXJxKHYsIGkpO1xuIDM0NjpcdFxuIDM0NzpcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0fVxuIDM0OTpcdFxuIDM1MDpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9jb25maWdfdmFsaWRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIFJlc2V0IFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcmVzZXQgbWVjaGFuaXNtIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBjb2RlLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9jb21wYXRfdmRwYV9yZXNldGAgZ2V0cyBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV9zZXRfc3RhdHVzYCB3aGVuIHRoZSBzdGF0dXMgaXMgc2V0IHRvIHplcm8uIFRoaXMgY29uZmlybXMgdGhlIGNyaXRpY2FsIGxpbmsgaW4gdGhlIGNoYWluLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIHBvaW50cywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGVudHJ5IHBvaW50cy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhlc2UgYXJlOiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCwgYHZob3N0X3ZkcGFfc2V0X3N0YXR1c2AsIGFuZCwgb2YgY291cnNlLCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCBpdHNlbGYuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBob3cgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHVzZWQsIHNvIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSB0aGUgc2NvcGUgYW5kIHBvc3NpYmxlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYyMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NDEtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2NDI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY0My1cdFx0XHRcdCAgIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTgwNj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy05MTktXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjkyMDpcdFx0XHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtOTIxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBGdW5jdGlvbiBTY29wZSBmb3IgU3ltYm9sIEZvY3VzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGlkZW50aWZ5IHN5bWJvbHMgZm9yIGEgZ2l2ZW4gY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGF0IGB2aG9zdF92ZHBhYCBhbmQgaW1tZWRpYXRlbHkgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGFyZSBib3RoICpzdGF0aWMqLiBXYWl0IGEgc2Vjb25kLi4uIGFsbCB0aGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGxvb2tlZCBhdCBpbiB0aGlzIG1vZHVsZSBhcmUgc3RhdGljLiBUaGlzIHJlYWxseSBsaW1pdHMgbXkgb3B0aW9ucyBmb3IgYnVpbGRpbmcgdXNlZnVsIEZvY3VzU3ltYm9scy4gU3RhdGljIG1lYW5zIHRoZXkmIzM5O3JlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGlzbiYjMzk7dCBnb2luZyB0byBiZSBoZWxwZnVsIGZvciBjcm9zcy1tb2R1bGUgYW5hbHlzaXMuCgpPa2F5LCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgKm5vbiotc3RhdGljIHRoYXQgSSBjYW4gaG9vayBpbnRvLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQgaXMgLSB0aGUgYHZob3N0X3ZkcGFfZm9wc2Agc3RydWN0dXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgZmlsZSBvcGVyYXRpb25zIGVudHJ5IGhlcmUgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTE1MzM9c3RhdGljIGludCB2aG9zdF92ZHBhX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjgtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzAtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTkxPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYzNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE2MzY6XHRjZGV2X2luaXQoXHUwMDI2di1cdTAwM2VjZGV2LCBcdTAwMjZ2aG9zdF92ZHBhX2ZvcHMpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYzNy1cdHYtXHUwMDNlY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgU3RhdGljIEZpbGUgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBhc3N1bXB0aW9uLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIGl0IHRob3JvdWdobHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyBob3cgdGhlc2UgZHJpdmVycyBhcmUgb2Z0ZW4gc3RydWN0dXJlZCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGF0IGhvbGRzIHRydWUgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgZHJpdmVyIGlzIHJlbHlpbmcgc29sZWx5IG9uIHRob3NlIHN0YXRpY2FsbHktZGVmaW5lZCBmaWxlIG9wZXJhdGlvbnMsIG9yIGlmIHRoZXJlIG1pZ2h0IGJlIGR5bmFtaWMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdGhhdCBhcmUgc29tZWhvdyBpbnZvbHZlZCBpbiBtYW5hZ2luZyBkZXZpY2UgaW50ZXJhY3Rpb24sIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIFZEUEEuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhvc2UgZnVuY3Rpb24gY2FsbHMgZW5kIHVwIGlzIGtleSB0byBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gV2UgbmVlZCB0byBsb29rIGZvciBhbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSBub3JtIHRoYXQgbWlnaHQgaW5kaWNhdGUgbW9yZSBhZHZhbmNlZCBvciBjb21wbGV4IGJlaGF2aW9yLiBBcmUgdGhlcmUgYW55IGZ1bmN0aW9ucywgcGVyaGFwcyByZWxhdGVkIHRvIHByb2JlIG9yIGluaXRpYWxpemF0aW9uLCB0aGF0IGludHJvZHVjZSBhIGxldmVsIG9mIGluZGlyZWN0aW9uIG9yIGR5bmFtaWMgZnVuY3Rpb24gYXNzaWdubWVudD8gV2UgY2FuIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGVudGlyZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZob3N0X3ZkcGFfW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzYKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVmaW5pbmcgdGhlIEFwcHJvYWNoOiBBIE5ldyBSZWdleCBTdHJhdGVneSoqCgpSaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmVhc3Nlc3MuIFRoZSBwcmV2aW91cyByZWdleCB3YXNuJiMzOTt0IHF1aXRlIGhpdHRpbmcgdGhlIG1hcms7IGl0JiMzOTtzIHRpbWUgdG8gcmVmaW5lIHRoaXMuIEkgbmVlZCB0byByZXRoaW5rIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdHRlcm4uIFRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBzZWVtcyB0byBiZSBpbiB0aGUuLi4gKGZpbGwgaW4gdGhlIGJsYW5rIHdpdGggdGhlIGFyZWEgdGhleSBhcmUgbGlrZWx5IHN0cnVnZ2xpbmcgd2l0aCBpbiB0aGUgcHJvYmxlbSB0aGV5IGFyZSBzb2x2aW5nKS4gU28gaW5zdGVhZCBvZi4uLiAoZGVzY3JpYmUgdGhlIHByZXZpb3VzIGFwcHJvYWNoIHRoYXQgd2FzIHByb2JsZW1hdGljKSwgSSBzaG91bGQgdHJ5IHNvbWV0aGluZyB0aGF0IGZvY3VzZXMgb24uLi4gKGRlc2NyaWJlIHRoZSBhc3BlY3RzIG9mIGEgbmV3IGFwcHJvYWNoKS4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdG8gZW5zdXJlIHRoaXMgaXRlcmF0aW9uIGlzLi4uIChoaWdobGlnaHQga2V5IGNyaXRlcmlhKS4gSSYjMzk7bSB0aGlua2luZyBvZiBpbmNvcnBvcmF0aW5nLi4uIChkZXNjcmliZSB0ZWNobmljYWwgZWxlbWVudHMgb2YgdGhlIHJlZ2V4IGUuZy4gbG9va2FoZWFkcywgYW5jaG9ycywgcXVhbnRpZmllcnMpIGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uIE1heWJlIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgbWF5IHBlcmZvcm0gd2l0aC4uLiAoY29uc2lkZXIgZWRnZSBjYXNlcywgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvdGhlciBpbnB1dHMgZXRjKS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBpdGVyYXRlLCB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgcmVnZXggbnVhbmNlcy4gSG9wZWZ1bGx5LCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggd2lsbCBnZXQgdG8gdGhlIHJlc3VsdCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzOyBbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjY2OnN0YXRpYyBERUZJTkVfSURBKHZob3N0X3ZkcGFfaWRhKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZEUEEgdmhvc3QgSU9DVEwgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHNvbWV0aGluZyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhyb3duIGJ5IGBzdGF0aWMgREVGSU5FX0lEQWAsIHNpbmNlLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3Mgbm90IGEgZnVuY3Rpb24uIExldCYjMzk7cyBqdXN0IGZvY3VzIG9uIGZpbmRpbmcgdGhlIGZpbGUgb3BlcmF0aW9ucyBmdW5jdGlvbnMgaW4gdmhvc3QtdmRwYSBhbmQgc2VlIGlmIGFueSBhcmUgc3RhdGljLiBBaCwgeWVzLCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHN0YXRpYy4gU28sIGlmIHdlIG9ubHkgaGF2ZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHdlIGNhbiBlaXRoZXIgb21pdCBGb2N1c1N5bWJvbHMgb3IsIG1vcmUgbGlrZWx5LCBqdXN0IGluY2x1ZGUgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHNheXMgdG8gKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiAmIzM0O1ByZWZlciYjMzQ7IGlzbiYjMzk7dCAmIzM0O211c3QmIzM0Oywgc28gd2UgY2FuIGFic29sdXRlbHkgdXNlIGEgc3RhdGljIGVudHJ5cG9pbnQgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBBbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBhbG1vc3QgY2VydGFpbmx5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFyZSBib3RoIGNhbGxlZCBmcm9tIHdpdGhpbiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgdmlhIGEgc3dpdGNoIHN0YXRlbWVudCwgc28gdGhleSBtaWdodCBiZSBpbmxpbmVkLiBCdXQgbGV0JiMzOTtzIGp1c3QgZ28gd2l0aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlZob3N0IFZEUEEgQ29kZSBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHZkcGEuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3Zob3N0YCBkaXJlY3RvcnkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGF0IGBFWFBPUlRfU1lNQk9MYCBtYWNyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9ydGluZyBzeW1ib2xzIGZyb20gdGhpcyBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhlIHZEUEEgZHJpdmVyIGlzIG1ha2luZyBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgcHJvYmFibHkgdGhlIHZob3N0IGNvcmUgb3Igc29tZSBvdGhlciB1cHBlci1sZXZlbCBjb21wb25lbnQuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZWdpc3RyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGxheWVyIHBlcmhhcHMsIG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZGF0YSBwbGFuZSBmdW5jdGlvbmFsaXR5PyBHcmFiYmluZyB0aGlzIHN5bWJvbCBleHBvcnQgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSB2ZHBhIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIGEgVkRQQSBEcml2ZXIgTW9kdWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuICYjMzQ7Tm8gZXhwb3J0ZWQgc3ltYm9scy4mIzM0OyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVHlwaWNhbGx5LCBpbiBhIGtlcm5lbCBtb2R1bGUsIHlvdSBleHBlY3QgdG8gc2VlIHNvbWUgc3ltYm9scyBleHBvc2VkIOKAkyBmdW5jdGlvbnMsIHZhcmlhYmxlcyDigJMgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1pZ2h0IG5lZWQgdG8gYWNjZXNzLiBUaGUgKmFic2VuY2UqIG9mIGV4cG9ydGVkIHN5bWJvbHMgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG1vZHVsZSYjMzk7cyByb2xlLiBJdCBjb3VsZCBiZSBhIHZlcnkgc2VsZi1jb250YWluZWQgcGllY2Ugb2YgY29kZSwgcGVyaGFwcyBkZXNpZ25lZCB0byBiZSB0aWdodGx5IGludGVncmF0ZWQgd2l0aCBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgbWF5YmUgaXQgaW50ZW50aW9uYWxseSBrZWVwcyBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBwcml2YXRlLiBUaGUgbGFjayBvZiBleHBvcnRzICpkb2VzbiYjMzk7dCogYXV0b21hdGljYWxseSBtZWFuIGl0JiMzOTtzIGJhZCBvciBwb29ybHkgZGVzaWduZWQsIGJ1dCBpdCBkb2VzIHdhcnJhbnQgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kdWxlJiMzOTtzIGludGVuZGVkIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KCk5vdywgdGhlIHNlY29uZCBwYXJ0IGlzIGNsZWFyLiAmIzM0O1RoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgdmRwYSBkcml2ZXIuJiMzNDsgQWgsICp0aGF0KiBjbGFyaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gU28sIHRoaXMgaXNuJiMzOTt0IGEgZ2VuZXJpYyB1dGlsaXR5IG1vZHVsZTsgaXQmIzM5O3MgYSBkcml2ZXIsIHNwZWNpZmljYWxseSBhIFZEUEEgKFZpcnR1YWwgRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikgZHJpdmVyLiBWRFBBIGRyaXZlcnMgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gbW9kZXJuIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgZW5hYmxpbmcgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB2aXJ0dWFsIG1hY2hpbmVzIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdXN1YWxseSBOSUNzIGFuZC9vciBvdGhlciBoaWdoLXNwZWVkIEkvTy4gVGhleSB3b3JrIHRvIG9mZmxvYWQgSS9PIG9wZXJhdGlvbnMgZnJvbSB0aGUgaHlwZXJ2aXNvciwgdGh1cyBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYW5kIHJlZHVjaW5nIENQVSBvdmVyaGVhZC4gU28sIGdpdmVuIHRoYXQgY29udGV4dCwgdGhlIGxhY2sgb2YgZXhwb3J0ZWQgc3ltYm9scyBzdGFydHMgdG8gbWFrZSBtb3JlIHNlbnNlLiBUaGUgZHJpdmVyIGxpa2VseSBob29rcyBpbnRvIHRoZSBWRFBBIGNvcmUgZnJhbWV3b3JrLCB1c2luZyBpdHMgcmVnaXN0ZXJlZCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSXQgcHJvYmFibHkgZG9lc24mIzM5O3QgbmVlZCB0byBleHBvc2UgaXRzICpvd24qIGZ1bmN0aW9ucyBkaXJlY3RseSB0byB0aGUgd2lkZXIga2VybmVsLCBpbnN0ZWFkIGFjdGluZyBhcyBhbiAmIzM0O2FkYXB0ZXImIzM0OyB0byB0aGUgY29yZSBWRFBBIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCBuZWVkcyB0byBpbXBsZW1lbnQgc29tZSBzcGVjaWZpYyBWRFBBIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBkcml2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCwgd2hhdCBjYWxsYmFja3MgaXQgaW1wbGVtZW50cyBhbmQgd2hhdCB0aGUgVkRQQSBjb3JlIGV4cGVjdHMuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBWRFBBIEFQSSBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl04oCZcyB1c2luZy4gVGhlIGZhY3QgdGhhdCB0aGUgbW9kdWxlIHJlZ2lzdGVycyBhIFZEUEEgZHJpdmVyIHByb3ZpZGVzIGEgdmVyeSBzdHJvbmcgZnVuY3Rpb25hbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTE2ODE9c3RhdGljIGludCBfX2luaXQgdmhvc3RfdmRwYV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTcwMC19XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNzAxOm1vZHVsZV9pbml0KHZob3N0X3ZkcGFfaW5pdCk7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF92ZHBhX2luaXRgKioKCkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6ICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB2aG9zdF92ZHBhX2luaXRgJiMzNDsuIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgYW4gaW50ZXJuYWwgY2hlY2tsaXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5lZWRzIHRvIGJlICpjaGVja2VkKiByZWdhcmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgdmhvc3RfdmRwYV9pbml0YC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyBhbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhIHNwZWNpZmljIHZEUEEgKHZpcnRpbyBEYXRhIFBhdGggQWNjZWxlcmF0aW9uKSBzZXR1cD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB2aG9zdCBpbnRlZ3JhdGlvbj8gQW0gSSBsb29raW5nIGF0IGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIG9yIGEgYnJvYWRlciBjb25jZXB0PyBNeSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIG5vdyBpbnZvbHZlcyBmcmFtaW5nIG15IGludmVzdGlnYXRpb24uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgYnVnLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgbmV3IGZlYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdmFndWVuZXNzIG9mIHRoZSBwcm9tcHQgd2lsbCBkcml2ZSBtZSwgYXQgZmlyc3QsIHRvIGlkZW50aWZ5IHRoZXNlIG5lY2Vzc2FyeSBjb250ZXh0dWFsIGZhY3RvcnMgYW5kIGZvcm0gYSBwbGFuIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODE6XHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF92ZHBhX2luaXQodm9pZClcbjE2ODI6XHR7XG4xNjgzOlx0XHRpbnQgcjtcbjE2ODQ6XHRcbjE2ODU6XHRcdHIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNnZob3N0X3ZkcGFfbWFqb3IsIDAsIFZIT1NUX1ZEUEFfREVWX01BWCxcbjE2ODY6XHRcdFx0XHRcdFwmIzM0O3Zob3N0LXZkcGFcJiMzNDspO1xuMTY4NzpcdFx0aWYgKHIpXG4xNjg4Olx0XHRcdGdvdG8gZXJyX2FsbG9jX2NocmRldjtcbjE2ODk6XHRcbjE2OTA6XHRcdHIgPSB2ZHBhX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2aG9zdF92ZHBhX2RyaXZlcik7XG4xNjkxOlx0XHRpZiAocilcbjE2OTI6XHRcdFx0Z290byBlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI7XG4xNjkzOlx0XG4xNjk0Olx0XHRyZXR1cm4gMDtcbjE2OTU6XHRcbjE2OTY6XHRlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI6XG4xNjk3Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odmhvc3RfdmRwYV9tYWpvciwgVkhPU1RfVkRQQV9ERVZfTUFYKTtcbjE2OTg6XHRlcnJfYWxsb2NfY2hyZGV2OlxuMTY5OTpcdFx0cmV0dXJuIHI7XG4xNzAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSB2aG9zdC12ZHBhIENoYXJhY3RlciBEZXZpY2UgSW50ZXJhY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1enppbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBgdmhvc3QtdmRwYWAgY2hhcmFjdGVyIGRldmljZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBpb2N0bGAgY2FsbHMuIEl0IGxvb2tzIGxpa2UgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24sIHNvIHRoYXQmIzM5O3MgZ3JvdW5kIHplcm8uIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoaW5ncyBsaWtlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBpb2N0bGAgb24gdGhlIGAvZGV2L3Zob3N0LXZkcGEtKmAgZGV2aWNlIGZpbGVzLiBBYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IG1vdmUuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhlIGZ1bmN0aW9uIGxheW91dC4gSSYjMzk7bGwgY2hlY2sgaWYgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBwcm9iYWJseSBub3QuIEkmIzM5O2xsIGFsc28gY2hlY2sgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIC0gaXQmIzM5O3MgYWxzbyBhIHNpemVhYmxlIGZ1bmN0aW9uLiBPa2F5LCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enplci4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYHZob3N0LXZkcGFgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGFsbCB0aGUgcGllY2VzIGluIHBsYWNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBmdXp6IHRhcmdldCBpcyBidWlsdC4gSSBzZWUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1VTRVJgLCBgVkRQQV9TSU1fTkVUYCwgYW5kIGBWRFBBX1NJTV9CTE9DS2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVkRQQV9TSU1gIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBsaWtlIGBWRFBBX1NJTV9ORVRgIG9yIGBWRFBBX1NJTV9CTE9DS2AuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnV6eiB0YXJnZXQgaXMgYWJsZSB0byBiZSBidWlsdCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWRFBBX1NJTV9ORVRcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAyNDpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgVkRQQV9TSU1fQkxPQ0tcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMzE6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgVkRQQSBTaW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHNldCB1cCB0aGUgVkRQQSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBgVkRQQV9TSU1gIGlzIGNsZWFybHkgdGhlIGNlbnRyYWwgcGllY2UsIHRoZSBmb3VuZGF0aW9uLiBUaGUgYWN0dWFsIHNpbXVsYXRvcnMgdGhlbXNlbHZlcyBzZWVtIHRvIGJlIGBWRFBBX1NJTV9ORVRgIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGRlZmluaXRlbHkgZW5hYmxlIHRob3NlLiBJdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzaG91bGQgYWxzbyBlbmFibGUgYFZEUEFfVVNFUmAsIGl0IGNvdWxkIGJlIHVzZWZ1bCwgYW5kIGBWSE9TVF9WRFBBYCBpcyBuZWNlc3NhcnkuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WRFBBYC4gUmlnaHQsIGl0IGhhcyBhIGZldzogaXQgZGVwZW5kcyBvbiBgRVZFTlRGRGAsIHNlbGVjdHMgYFZIT1NUYCwgc2VsZWN0cyBgSVJRX0JZUEFTU19NQU5BR0VSYCwgYW5kIGFsc28gZGVwZW5kcyBvbiBgVkRQQWAuCgpgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bSBub3QgdG9vIHdvcnJpZWQgdGhlcmUuIGBWRFBBYCBpcyBhbm90aGVyIGNvcmUgZGVwZW5kZW5jeSwgYXMgZXhwZWN0ZWQuIFNvIGBWSE9TVF9WRFBBYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTpjb25maWcgVkhPU1RfUklOR1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNy1cdGJvb2xcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyODptZW51Y29uZmlnIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7VkhPU1QgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo4Mzpjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZIT1NUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX01FTlVgIHRoaW5nLiBJdCBzZWVtcyB0byBiZSBhIGBtZW51Y29uZmlnYCBvcHRpb24sIHdoaWNoIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSBpdCBpZiBpdCYjMzk7cyByZWxldmFudCB0byBvdXIgc2V0dXAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gbG9va2luZyBjbG9zZXIsIGBWSE9TVF9WRFBBYCBpcyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFZIT1NUX01FTlVgIGJsb2NrLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIGhlYWQgYmFjayB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhbmQgcmUtZXhhbWluZSB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyODpcdG1lbnVjb25maWcgVkhPU1RfTUVOVVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtWSE9TVCBkcml2ZXJzXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiAgMzE6XHRcbiAgMzI6XHRpZiBWSE9TVF9NRU5VXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFZIT1NUX05FVFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbiAgMzY6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG4gIDM3Olx0XHRzZWxlY3QgVkhPU1RcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxuICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBWaXJ0dWFsaXplZCBIYXJkd2FyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBWSE9TVF9NRU5VYCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oywgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGdvb2QgdGhlcmUuIFRoYXQgY29uZmlybXMgdGhlIGJhc2UgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgY29uZmlnczogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgdmlydHVhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuCgpIb2xkIG9uLi4uIGBWRFBBX1NJTWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUlVOVElNRV9URVNUSU5HX01FTlVgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGNvbmRpdGlvbiBpcyBtZXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkIHdpdGggYW55dGhpbmcgcmVseWluZyBvbiB0aGUgc2ltdWxhdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgYmVmb3JlIHByb2NlZWRpbmcsIG90aGVyd2lzZSwgSSYjMzk7bSB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTIyNTY9Y29uZmlnIEtDT1ZfU0VMRlRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxubGliL0tjb25maWcuZGVidWc6MjI2NDptZW51Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVx0Ym9vbCBcJiMzNDtSdW50aW1lIFRlc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRW5hYmxpbmcgUnVudGltZSBUZXN0aW5nIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgUlVOVElNRV9URVNUSU5HX01FTlVgIG1lbnVjb25maWcgaXRlbS4gSSB0aGluayB3ZSBuZWVkIHRvIGVuYWJsZSB0aGF0OyBpdCBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50LiBUaGF0JiMzOTtsbCBvcGVuIHVwIGEgd2hvbGUgc2V0IG9mIG9wdGlvbnMsIEkmIzM5O20gZ3Vlc3NpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGVuYWJsaW5nIGl0IGRpcmVjdGx5LgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgYWxzbyBlbmFibGUgdGhlIGZvbGxvd2luZzogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYWxzbyBgVkRQQV9VU0VSYC4gTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYFZEUEFfVVNFUmAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IHRyaXAgdXMgdXAgbGF0ZXIuIEJldHRlciB0byBiZSB0aG9yb3VnaCB1cCBmcm9udC4gSSYjMzk7bGwgY2hlY2sgdGhvc2UgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRjb25maWcgVkRQQV9VU0VSXG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVWRU5URkQgXHUwMDI2XHUwMDI2IE1NVVxuICAzODpcdFx0c2VsZWN0IFZIT1NUX0lPVExCXG4gIDM5Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBXaXRoIFZEVVNFIGl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgYSB2RFBBIERldmljZVxuICA0MjpcdFx0ICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBJRkNWRlxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBkcml2ZSBJbnRlbCBJRkMgVkYgTklDIHRvIG9mZmxvYWRcbiAgNDk6XHRcdCAgdmlydGlvIGRhdGFwbGFuZSB0cmFmZmljIHRvIGhhcmR3YXJlLlxuICA1MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNTE6XHRcdCAgYmUgY2FsbGVkIGlmY3ZmLlxuICA1MjpcdFxuICA1MzpcdGNvbmZpZyBNTFg1X1ZEUEFcbiAgNTQ6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTcKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZEUEEgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBWRFBBX1VTRVJgIHJlbGllcyBvbiBgRVZFTlRGRGAgYW5kIGBNTVVgLCBib3RoIG9mIHdoaWNoIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzLCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZXNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgbWlnaHQgYmUgdGhlIG9ubHkgZnVuY3Rpb24gdG8gY2hlY2ssIGJ1dCBsZXQmIzM5O3Mgbm90IGJlIGhhc3R5LiBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGNsdWUsIGJ1dCBpdCYjMzk7cyBhIHNpemFibGUgZnVuY3Rpb24sIG5vdCBqdXN0IGEgc2ltcGxlIGlubGluZSBoZWxwZXIuIEl0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBTaW1pbGFybHksIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFuZCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgYWx0aG91Z2ggc3RhdGljIGFzIHdlbGwsIHdhcnJhbnQgbXkgYXR0ZW50aW9uIGdpdmVuIHRoZWlyIGRpc3RpbmN0IGZ1bmN0aW9uYWxpdHkuCgpGb3IgdGhpcyBhbmFseXNpcywgSSB3aWxsIGluY2x1ZGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAKCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhdGNoIGFjdHVhbGx5IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UuIEl0IGxvb2tzIGxpa2UgaXQgKmRvZXMqIGludHJvZHVjZSBgdnFfbnVtX21heGAgdG8gYHN0cnVjdCB2aG9zdF92ZHBhYCwgd2hpY2ggaXMgcHJvbWlzaW5nLiBEaWdnaW5nIGRlZXBlciwgaXQgYXBwZWFycyB0aGF0IGB2LSZndDt2cV9udW1fbWF4ID0gb3BzLSZndDtnZXRfdnFfbnVtX21heCh2ZHBhKWAgaXMgc2V0IHdpdGhpbiBgX2NvbXBhdF92ZHBhX3Jlc2V0YC4gRnVydGhlcm1vcmUsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBjaGVja3MgYHMubnVtICZndDsgdi0mZ3Q7dnFfbnVtX21heGAgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYXMgSSYjMzk7dmUgdmVyaWZpZWQgdGhlIGtleSBjaGFuZ2VzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX05FVCYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9CTE9DSyYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7UlVOVElNRV9URVNUSU5HX01FTlUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaGFuZGxlciBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3RlZCByaW5nIHNpemUgYWdhaW5zdCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdC12ZHBhIGlvY3RsIHBhdGgsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwppbmRleCA2OTI1NjRiMWJjYmJlLi5mMmVlZGIwNDY0YzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwpAQCAtNTMsNiAmIzQzOzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEgewogCXN0cnVjdCBjZGV2IGNkZXY7CiAJYXRvbWljX3Qgb3BlbmVkOwogCXUzMiBudnFzOwomIzQzOwl1MTYgdnFfbnVtX21heDsKIAlpbnQgdmlydGlvX2lkOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7CkBAIC0yMjksNyAmIzQzOzIzMCw5IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBxaWQpCiBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIHsKIAlzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2LSZndDt2ZHBhOwomIzQzOwljb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLSZndDtjb25maWc7CiAJdTMyIGZsYWdzID0gMDsKJiM0MzsJaW50IHJldDsKIAogCXYtJmd0O3N1c3BlbmRlZCA9IGZhbHNlOwogCkBAIC0yMzksNyAmIzQzOzI0MiwxNCBAQCBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIAkJCSBWRFBBX1JFU0VUX0ZfQ0xFQU5fTUFQIDogMDsKIAl9CiAKLQlyZXR1cm4gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7CiYjNDM7CXYtJmd0O3ZxX251bV9tYXggPSAwOwomIzQzOwlyZXQgPSB2ZHBhX3Jlc2V0KHZkcGEsIGZsYWdzKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCS8qIFNvbWUgYmFja2VuZHMgZGVyaXZlIHRoZSBtYXggZnJvbSBtdXRhYmxlIHF1ZXVlIHN0YXRlLiAqLwomIzQzOwkJdi0mZ3Q7dnFfbnVtX21heCA9IG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KQpAQCAtNjQxLDkgJiM0Mzs2NTEsMTUgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAl1MzIgaWR4OwogCWxvbmcgcjsKIAotCXIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7Ci0JaWYgKHIgJmx0OyAwKQotCQlyZXR1cm4gcjsKJiM0MzsJaWYgKGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNKSB7CiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzLCBhcmdwLCBzaXplb2YocykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWR4ID0gcy5pbmRleDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7CiYjNDM7CQlpZiAociAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CX0KIAogCWlmIChpZHggJmd0Oz0gdi0mZ3Q7bnZxcykKIAkJcmV0dXJuIC1FTk9CVUZTOwpAQCAtNjUyLDYgJiM0Mzs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAl2cSA9ICZhbXA7di0mZ3Q7dnFzW2lkeF07CiAKIAlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJCWlmICh2cS0mZ3Q7cHJpdmF0ZV9kYXRhKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCX0gZWxzZSBpZiAoIXMubnVtIHx8IHMubnVtICZndDsgMHhmZmZmIHx8CiYjNDM7CQkJICAgcy5udW0gJmd0OyB2LSZndDt2cV9udW1fbWF4IHx8CiYjNDM7CQkJICAgKHMubnVtICZhbXA7IChzLm51bSAtIDEpKSkgewomIzQzOwkJCXIgPSAtRUlOVkFMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl2cS0mZ3Q7bnVtID0gcy5udW07CiYjNDM7CQkJciA9IDA7CiYjNDM7CQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CQlvcHMtJmd0O3NldF92cV9udW0odmRwYSwgaWR4LCBzLm51bSk7CiYjNDM7CQlyZXR1cm4gMDsKIAljYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRToKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzY1LDkgJiM0Mzs3OTgsNiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLAogCQlvcHMtJmd0O3NldF92cV9jYih2ZHBhLCBpZHgsICZhbXA7Y2IpOwogCQlicmVhazsKIAotCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTToKLQkJb3BzLSZndDtzZXRfdnFfbnVtKHZkcGEsIGlkeCwgdnEtJmd0O251bSk7Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNAoJCQkJCQkJb3V0cHV0OiAyMjgKCQkJCQkJCXRob3VnaHRzOiAxNTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IHZob3N0LXZkcGEgYFZIT1NUX1NFVF9WUklOR19OVU1gIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBoYW5kbGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCYjMzk7cyBjaGFuZ2VkIGZyb20gY2FsbGluZyBgb3BzLSZndDtzZXRfdnFfbnVtYCBkaXJlY3RseS4gQnV0IHRoaXMgZnVuY3Rpb24gYWxzbyBoYW5kbGVzIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwgbm93LCBhbmQgdGhlIGRpZmYgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KCk15IGFuYWx5c2lzIHN0YXJ0ZWQgd2l0aCBub3RpY2luZyB0aGUgY2hhbmdlIGluIGhvdyBgaWR4YCBpcyBvYnRhaW5lZC4gSXQgdXNlZCB0byBiZSBhIHNpbXBsZSBgZ2V0X3VzZXJgIGNhbGwsIGJ1dCBub3csIHdoZW4gYGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgaXQmIzM5O3MgcmVwbGFjZWQgd2l0aCBgY29weV9mcm9tX3VzZXJgIGludG8gYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIHNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZ2V0dGluZyBib3RoIHRoZSBpbmRleCAqYW5kKiB0aGUgbnVtYmVyIGZyb20gdGhlIHVzZXIgbm93LgoKVGhlIGNvZGUgdGhlbiB2YWxpZGF0ZXMgYHMubnVtYDogY2hlY2tpbmcgZm9yIHplcm8sIGEgbWF4aW11bSB2YWx1ZSBiYXNlZCBvbiBgdi0mZ3Q7dnFfbnVtX21heGAsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGEgcG93ZXIgb2YgdHdvLiBUaGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgdmFsaWRhdGluZyBgdnEtJmd0O251bWAuIEl0JiMzOTtzIHByb3Blcmx5IGxvY2tlZCBhbmQgdW5sb2NrZWQgd2l0aCBgdnEtJmd0O211dGV4YC4gSWYgdGhlIHZpcnRxdWV1ZSBpcyBidXN5LCBpdCByZXR1cm5zIGBFQlVTWWAuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIGFsd2F5czogSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkPyBUaGUgcGF0Y2ggKm9ubHkqIHJlYWRzIGRhdGEgZnJvbSB1c2VyIHNwYWNlLiBUaGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBgc2Agc3RydWN0LCBhbmQgaXQgKnVzZXMqIHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSwgc3BlY2lmaWNhbGx5IGBzLm51bWAgZm9yIGNvbmZpZ3VyYXRpb24sIGFmdGVyIHZhbGlkYXRpb24uIFRoZSBjb2RlIGluaXRpYWxpemVzIGB2LSZndDt2cV9udW1fbWF4YCBhcyB3ZWxsLiBUaGUgb25seSBwbGFjZSB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIHJlYWQgaXMgd2l0aCBgY29weV9mcm9tX3VzZXJgLCB3aGljaCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgdGh1cyBJJiMzOTttIHN1cmUgaXQmIzM5O3Mgc2FmZSBhbmQgZG9lc24mIzM5O3QgbGVhayBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuCgpUaGUgYHZob3N0X3ZyaW5nX3N0YXRlYCBzdHJ1Y3QgaXRzZWxmLCB3aXRoIGp1c3QgYGluZGV4YCBhbmQgYG51bWAsIGlzIGNsZWFuOyBubyBzdXJwcmlzZXMgdGhlcmUuIExldCBtZSBtYWtlIHN1cmUgYFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRWAgaXMgc2FmZSBhcyB3ZWxsOiBZZXMsIGl0IGFsc28gZG9lcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCBpbnRvIHN0cnVjdCBgc2AsIHdoaWNoIGlzIHNhZmUuCgpTbywgc3VtbWluZyBpdCB1cCwgbm8sIHRoZXJlIGlzbiYjMzk7dCBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3Iga2VybmVsIGluZm8gbGVha3MgaW4gdGhpcyBwYXRjaC4gSXQmIzM5O3Mgc2FmZSB0byB1c2UgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIHRvIGNhdGNoIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLCBidXQgbm8gS01TQU4gaXMgbmVlZGVkIGhlcmUuIFRoaXMgcGF0Y2ggc2ltcGx5IGltcHJvdmVzIHZhbGlkYXRpb24gYW5kIGNvcnJlY3QgdXNlIG9mIHVzZXItcHJvdmlkZWQgZGF0YS4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ni44NzQ3NTY2ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5Njk5MDI1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGhhbmRsZXIgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyIHRvIHZhbGlkYXRlIHRoZSByZXF1ZXN0ZWQgcmluZyBzaXplIGFnYWluc3QgdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHZEUEEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmhvc3QtdmRwYSBpb2N0bCBwYXRoLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ni44NzQ3NjMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTAzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xcbiBcXHRzdHJ1Y3QgY2RldiBjZGV2O1xcbiBcXHRhdG9taWNfdCBvcGVuZWQ7XFxuIFxcdHUzMiBudnFzO1xcbitcXHR1MTYgdnFfbnVtX21heDtcXG4gXFx0aW50IHZpcnRpb19pZDtcXG4gXFx0aW50IG1pbm9yO1xcbiBcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XFxuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxcbiBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2LVxcdTAwM2V2ZHBhO1xcbitcXHRjb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLVxcdTAwM2Vjb25maWc7XFxuIFxcdHUzMiBmbGFncyA9IDA7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR2LVxcdTAwM2VzdXNwZW5kZWQgPSBmYWxzZTtcXG4gXFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIFxcdFxcdFxcdCBWRFBBX1JFU0VUX0ZfQ0xFQU5fTUFQIDogMDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xcbitcXHR2LVxcdTAwM2V2cV9udW1fbWF4ID0gMDtcXG4rXFx0cmV0ID0gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdC8qIFNvbWUgYmFja2VuZHMgZGVyaXZlIHRoZSBtYXggZnJvbSBtdXRhYmxlIHF1ZXVlIHN0YXRlLiAqL1xcbitcXHRcXHR2LVxcdTAwM2V2cV9udW1fbWF4ID0gb3BzLVxcdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdHUzMiBpZHg7XFxuIFxcdGxvbmcgcjtcXG4gXFxuLVxcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XFxuLVxcdGlmIChyIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHI7XFxuK1xcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRpZHggPSBzLmluZGV4O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xcbitcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaWR4IFxcdTAwM2U9IHYtXFx1MDAzZW52cXMpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5AQCAtNjUyLDYgKzY2OCwyMyBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHR2cSA9IFxcdTAwMjZ2LVxcdTAwM2V2cXNbaWR4XTtcXG4gXFxuIFxcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0aWYgKHZxLVxcdTAwM2Vwcml2YXRlX2RhdGEpIHtcXG4rXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG4rXFx0XFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXFx1MDAzZSAweGZmZmYgfHxcXG4rXFx0XFx0XFx0ICAgcy5udW0gXFx1MDAzZSB2LVxcdTAwM2V2cV9udW1fbWF4IHx8XFxuK1xcdFxcdFxcdCAgIChzLm51bSBcXHUwMDI2IChzLm51bSAtIDEpKSkge1xcbitcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0dnEtXFx1MDAzZW51bSA9IHMubnVtO1xcbitcXHRcXHRcXHRyID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFx0XFx0b3BzLVxcdTAwM2VzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTc2NSw5ICs3OTgsNiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHRcXHRvcHMtXFx1MDAzZXNldF92cV9jYih2ZHBhLCBpZHgsIFxcdTAwMjZjYik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxcbi1cXHRcXHRvcHMtXFx1MDAzZXNldF92cV9udW0odmRwYSwgaWR4LCB2cS1cXHUwMDNlbnVtKTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ny4zMDM1NDQ0MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDcxMDE2NTc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuK1x0dTE2IHZxX251bV9tYXg7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxuIHN0YXRpYyBpbnQgX2NvbXBhdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbitcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHR2LVx1MDAzZXN1c3BlbmRlZCA9IGZhbHNlO1xuIFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHRcdFx0IFZEUEFfUkVTRVRfRl9DTEVBTl9NQVAgOiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbitcdHJldCA9IHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4rXHRcdHYtXHUwMDNldnFfbnVtX21heCA9IG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHR1MzIgaWR4O1xuIFx0bG9uZyByO1xuIFxuLVx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbi1cdGlmIChyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcjtcbitcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWR4ID0gcy5pbmRleDtcbitcdH0gZWxzZSB7XG4rXHRcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XG4rXHRcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByO1xuK1x0fVxuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTY1Miw2ICs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4rXHRcdFx0ciA9IC1FQlVTWTtcbitcdFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXHUwMDNlIDB4ZmZmZiB8fFxuK1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbitcdFx0XHQgICAocy5udW0gXHUwMDI2IChzLm51bSAtIDEpKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZxLVx1MDAzZW51bSA9IHMubnVtO1xuK1x0XHRcdHIgPSAwO1xuK1x0XHR9XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1x0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzY1LDkgKzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ny4zMDM1NDU3NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMyMDc2NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGB2cV9udW1fbWF4YCB0byB0aGUgYHN0cnVjdCB2aG9zdF92ZHBhYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzc3VlcyBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYF9jb21wYXRfdmRwYV9yZXNldGAgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoaXMgbmV3IGB2cV9udW1fbWF4YCBmaWVsZCB2aWEgYG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKWAuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBXaGF0IGRvZXMgdGhhdCBgZ2V0X3ZxX251bV9tYXhgIGFjdHVhbGx5IHJldHVybj8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIG9uIGl0cyByZXR1cm4gdmFsdWU/IEFueSBpbmhlcmVudCBsaW1pdHMgaW4gdGhlIGB2ZHBhYCBjb25maWd1cmF0aW9uIGl0c2VsZiB0aGF0IGNvdWxkIGNhdXNlIGlzc3Vlcz9cblxuVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEhlcmUsIHRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgb24gaG93IGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpcyBoYW5kbGVkLiBUaGUgdXNlci1wcm92aWRlZCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCAoYHNgKSBpcyBub3cgdmFsaWRhdGVkIGFnYWluc3QgYHYtXHUwMDNldnFfbnVtX21heGAuIEVzc2VudGlhbGx5LCB3ZSdyZSBkb2luZyBhIGJvdW5kcyBjaGVjazogYHMubnVtYCBoYXMgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB2LVx1MDAzZXZxX251bV9tYXhgLiBUaGlzIGlzIGEgZ29vZCBzYW5pdHkgY2hlY2sgYnV0IGl0IGlzIGFsc28gb25lIHdoZXJlIGZ1enppbmcgd2lsbCBiZSB2ZXJ5IHVzZWZ1bC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpczogV2hhdCBoYXBwZW5zIGlmIGBzLm51bWAgaXMgKmV4YWN0bHkqIGB2LVx1MDAzZXZxX251bV9tYXhgPyBEb2VzIHRoYXQgZXhwb3NlIGFueSBuZXcgZWRnZSBjYXNlcz8gRG9lcyB0aGlzIHZhbHVlIGdldCByZS12YWxpZGF0ZWQgYWdhaW4/XG5cblVsdGltYXRlbHksIHRoaXMgYHMubnVtYCB2YWx1ZSBpcyBhc3NpZ25lZCB0byBgdnEtXHUwMDNlbnVtYCBhbmQgdGhlbiBwYXNzZWQgdG8gYG9wcy1cdTAwM2VzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pYC4gVGhhdCBgc2V0X3ZxX251bWAgaXMgdGhlIGtleS4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBEb2VzIGl0IGFsc28gcGVyZm9ybSBhbnkgYWRkaXRpb25hbCBjaGVja3Mgb3Igc2FuaXR5IHZhbGlkYXRpb24/IFdoYXQgaXMgdGhlICppbnRlcmFjdGlvbiogYmV0d2VlbiB0aGUgbmV3IGB2cV9udW1fbWF4YCBjaGVjayBhbmQgdGhlIGFjdGlvbnMgb2YgdGhlIGBzZXRfdnFfbnVtYCBmdW5jdGlvbj8gQW5kIGl0IGlzIGNyaXRpY2FsIHRoYXQgSSBmdXp6IHRoaXMgdG9vLlxuXG5BbGwgaW4gYWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRob3NlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnMsIGFuZCB0aGF0IGlzIHdoZXJlIHRoZSBhdHRhY2sgc3VyZmFjZSBoYXMgZXhwYW5kZWQuIFRpbWUgdG8gaHVudCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYHZob3N0X3ZkcGEuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCdzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBmaWxlIHBhdGgsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGZpbGUsIHdoaWNoIHNob3VsZCB0ZWxsIG1lIGlmIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19WSE9TVF9WRFBBYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjA0LjEzNTYyNDYyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA1NDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjA0LjE4NTY4MzA0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODY4MjczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gVkhPU1RfVkRQQSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgVkhPU1RfVkRQQWAgdGhpbmcgY29tcGxldGVseS4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgbWFwIG91dCBldmVyeSBjb21wb25lbnQsIGV2ZXJ5IG1vZHVsZSwgZXZlcnkgbGlicmFyeSB0aGF0IGBWSE9TVF9WRFBBYCByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIHdlYiBvZiBkZXBlbmRlbmNpZXMgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBpZiBJJ20gZ29pbmcgdG8gdHJvdWJsZXNob290IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gdGhpbmsgYWJvdXQgY29udHJpYnV0aW5nIHVwc3RyZWFtLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHVwc3RyZWFtIHJlcXVpcmVtZW50cyBhcmUgbWV0IGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSBtb3ZlIG9uIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdFwiIGFuZCBcImhvd1wiIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTowNy41NzI1MTI4NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDU5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTowNy42MjAwMjUyNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5MTk5NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkbyB0aGlzLiBIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnRlcm5hbCBBbmFseXNpczogRmlsZSBJbnNwZWN0aW9uIFx1MDAyNiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSwgbGV0J3MgdGFrZSBhIGJlYXQgYW5kIGFjdHVhbGx5ICpyZWFkKiB0aGUgZmlsZS4gTm8gYXNzdW1wdGlvbnMsIG5vIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIGp1c3QgYSBjbGVhbiwgdW5iaWFzZWQgaW5pdGlhbCBzY2FuLiBJIG5lZWQgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIG9idmlvdXMg4oCTIHRoZSBmaWxlIGZvcm1hdCwgdGhlIGdlbmVyYWwgc3RydWN0dXJlLCBhbnkgaW1tZWRpYXRlbHkgYXBwYXJlbnQgZGF0YSB0eXBlcywgYW5kIGFueSBnbGFyaW5nIHJlZCBmbGFncyBvciBwcm9taXNpbmcgaW5kaWNhdG9ycy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbC4gSXQnbGwgc2hhcGUgdGhlIHF1ZXN0aW9ucyBJIGFzayBhbmQgaW5mb3JtIHRoZSBkaXJlY3Rpb24gb2YgbXkgYW5hbHlzaXMuIEl0J3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgZnJhbWV3b3JrLCBhIG1lbnRhbCBtYXAsIGJlZm9yZSBJIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGRldGFpbHMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MTAuOTc5MjI3Nzg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToxMC45NzkzMDg0NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4NzAzNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBWSE9TVF9WRFBBKipcblxuUmlnaHQsIGxldCdzIHNlZSwgaXQncyBjbGVhciB0aGF0IGBWSE9TVF9WRFBBYCByZWxpZXMgb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYCBhcyBhIHByZXJlcXVpc2l0ZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgc3RhdGUgb2YgYFZEUEFgLCB3aGljaCBpcyB0aGUgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGRlcGVuZGVuY3kgaGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSB0aGF0J3Mgc2V0IHVwIGFzIGV4cGVjdGVkIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZW5hYmxlZCBvcHRpb25zIHdpdGhpbiB0aGUgYFZEUEFgIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MTQuMjU4MDE0OTkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxOTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjE0LjMwODM0MTQxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc3NTYyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB2aG9zdF92ZHBhYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIGB2aG9zdF92ZHBhYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9WRFBBYCwgb2J2aW91c2x5LiBCdXQgdG8gbWFrZSB0aGlzIHdvcnRod2hpbGUsIHdlJ2xsIG5lZWQgYSBzdWl0YWJsZSB2aXJ0dWFsIGRhdGEgcGF0aCBhY2Nlc3MgKFZEUEEpIHNpbXVsYXRvciDigJMgc29tZXRoaW5nIGxpa2UgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZ2V0IGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBhbmQgYFZEUEFfVVNFUmAgYWRkZWQgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF04oCZcyB0aGUgZ3JvdW5kd29yay5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHBhcnQ6IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSDigJMgbG90cyBvZiBpbnRlcmFjdGlvbiB0aGVyZS4gVGhlbiwgSSB3YXMgbG9va2luZyBhdCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgaXQgYmVpbmcgc3RhdGljIG1pZ2h0IHBvc2UgYSBjaGFsbGVuZ2UsIHRob3VnaCBgdmhvc3RfdmRwYV9yZXNldGAgaXMgYWxzbyBzdGF0aWMgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUsIGJ1dCBtYXliZSB0aGVyZSBpcyBhIHdheSB0byBtYWtlIHVzZSBvZiBpdCB2aWEgdGhlIGlvY3RsLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIC0gdGhhdCBmZWVscyBpbXBvcnRhbnQsIHRvby4gT2theSwgZ29vZCwgSSBoYXZlIG15IHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToxOS4yODU5MDY1MjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTc3MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9NjQyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04MDUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODA2OnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTgwNy1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3My1cXHQud3JpdGVfaXRlclxcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc1LSNpZmRlZiBDT05GSUdfTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjE5LjMzMTQ5MDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjI2MzkzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGB2aG9zdC12ZHBhYCBkcml2ZXIsIGFuZCBteSBmb2N1cyBpcyB0aGUgaW9jdGwgaGFuZGxpbmcuIFRoZSBmaXJzdCBlbnRyeSBwb2ludCB0byBub3RlIGlzIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCDigJMgdGhhdCdzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBGcm9tIHRoZXJlLCBJIHNlZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZ2V0cyBjYWxsZWQ7IHRoYXQncyBwcm9iYWJseSBoYW5kbGluZyB0aGUgdnJpbmctc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSBhbHNvIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYF9jb21wYXRfdmRwYV9yZXNldGAsIHNpbmNlIGl0J3MgY2FsbGVkIHRocm91Z2ggYHZob3N0X3ZkcGFfcmVzZXRgLCB3aGljaCB1bHRpbWF0ZWx5IGlzIGFsc28gdHJpZ2dlcmVkIGJ5IHRoZSB0b3AtbGV2ZWwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBhIGBWSE9TVF9WRFBBX1NFVF9TVEFUVVNgIGNhbGwuIEkgY2FuIHNlZSB0aGlzIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdGhlIGlvY3RsIGNhbGxzLlxuXG5UbyBnZXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXRzZWxmLiBJdCdzIGluIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AsIHNvIEknbGwgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIG1vc3QgY3JpdGljYWwgcGllY2UgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjQuNDk0MTMyMDY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDY6XFx0c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuIDgwNzpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gODA4OlxcdHtcXG4gODA5OlxcdFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gZmlsZXAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gODEwOlxcdFxcdHN0cnVjdCB2aG9zdF9kZXYgKmQgPSBcXHUwMDI2di1cXHUwMDNldmRldjtcXG4gODExOlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbiA4MTI6XFx0XFx0dTY0IF9fdXNlciAqZmVhdHVyZXAgPSBhcmdwO1xcbiA4MTM6XFx0XFx0dTY0IGZlYXR1cmVzO1xcbiA4MTQ6XFx0XFx0bG9uZyByID0gMDtcXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0aWYgKGNtZCA9PSBWSE9TVF9TRVRfQkFDS0VORF9GRUFUVVJFUykge1xcbiA4MTc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZmZWF0dXJlcywgZmVhdHVyZXAsIHNpemVvZihmZWF0dXJlcykpKVxcbiA4MTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgxOTpcXHRcXHRcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+KFZIT1NUX1ZEUEFfQkFDS0VORF9GRUFUVVJFUyB8XFxuIDgyMDpcXHRcXHRcXHRcXHRcXHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSB8XFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkgfFxcbiA4MjI6XFx0XFx0XFx0XFx0XFx0IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1NVU1BFTkQpIHxcXG4gODIzOlxcdFxcdFxcdFxcdFxcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpIHxcXG4gODI0OlxcdFxcdFxcdFxcdFxcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9FTkFCTEVfQUZURVJfRFJJVkVSX09LKSkpXFxuIDgyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgyNjpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfU1VTUEVORCkpIFxcdTAwMjZcXHUwMDI2XFxuIDgyNzpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2Nhbl9zdXNwZW5kKHYpKVxcbiA4Mjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4Mjk6XFx0XFx0XFx0aWYgKChmZWF0dXJlcyBcXHUwMDI2IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1JFU1VNRSkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzMDpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2Nhbl9yZXN1bWUodikpXFxuIDgzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgzMjpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4gODMzOlxcdFxcdFxcdCAgICAhKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfQVNJRCkpKVxcbiA4MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNTpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4gODM2OlxcdFxcdFxcdCAgICAgIXZob3N0X3ZkcGFfaGFzX2Rlc2NfZ3JvdXAodikpXFxuIDgzNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgzODpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzOTpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2hhc19wZXJzaXN0ZW50X21hcCh2KSlcXG4gODQwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gODQxOlxcdFxcdFxcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2LCBmZWF0dXJlcyk7XFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4NDg6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9ERVZJQ0VfSUQ6XFxuIDg0OTpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV9nZXRfZGV2aWNlX2lkKHYsIGFyZ3ApO1xcbiA4NTA6XFx0XFx0XFx0YnJlYWs7XFxuIDg1MTpcXHRcXHRjYXNlIFZIT1NUX1ZEUEFfR0VUX1NUQVRVUzpcXG4gODUyOlxcdFxcdFxcdHIgPSB2aG9zdF92ZHBhX2dldF9zdGF0dXModiwgYXJncCk7XFxuIDg1MzpcXHRcXHRcXHRicmVhaztcXG4gODU0OlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9TRVRfU1RBVFVTOlxcbiA4NTU6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfc2V0X3N0YXR1cyh2LCBhcmdwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjQuNDk0MjQwMTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODI3NDY1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgdmhvc3QtdmRwYSBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIHRoYXQncyB0aGUgcHJpbWFyeSBnYXRld2F5LCB0aGUgYmlnIGthaHVuYSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHZob3N0LXZkcGEgc2V0dXAuIEJlZm9yZSBJIGRlbHZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmhhcHBlbmluZyogdW5kZXIgdGhlIGhvb2QuIEkga25vdyB0aGUgZ2VuZXJhbCBmbG93LCBidXQgbGV0J3MgcXVpY2tseSB6b29tIGluIG9uIHR3byBjcml0aWNhbCBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gRmlyc3QsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZSB2aXJ0dWFsIHJpbmdzIGFyZSBtYW5hZ2VkLCB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGlzIGFjdHVhbGx5IG9yY2hlc3RyYXRlZC4gU2Vjb25kLCBgdmhvc3RfdmRwYV9yZXNldGAuLi4gdGhhdCBpbXBsaWVzIGEgY3JpdGljYWwgY2xlYW51cCBvciBzdGF0ZS1yZWNvdmVyeSBtZWNoYW5pc20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlY292ZXJzIGZyb20gZXJyb3JzIG9yIHByZXBhcmVzIGZvciBuZXcgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpb2N0bGAgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToyOC4xNzY5ODk1NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTc3ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTI1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdmRwYV9hcyAqdmhvc3RfdmRwYV9maW5kX2FsbG9jX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM1LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Jlc2V0X21hcChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIGFzaWQpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVtb3ZlX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgYXNpZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MC1cXHQgKi9cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNjE6XFx0dmhvc3RfdmRwYV9yZXNldF9tYXAodiwgYXNpZCk7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyLVxcdGtmcmVlKGFzKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTIzMD1zdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI1NC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNTU6c3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI1Ni17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDM0PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NDgtXFx0bnZxcyA9IHYtXFx1MDAzZW52cXM7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTQ0OTpcXHRyID0gdmhvc3RfdmRwYV9yZXNldCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDUwLVxcdGlmIChyKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQ5Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAwLVxcdHZob3N0X3ZkcGFfY2xlYW5faXJxKHYpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1MDE6XFx0dmhvc3RfdmRwYV9yZXNldCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAyLVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjguMjI0OTcyNjYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzAzNjA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlRoaW5raW5nIFRocm91Z2ggdGhlIHZob3N0X3ZkcGFfcmVzZXQgQ2FsbCBMb2NhdGlvbnMqKlxuXG5SaWdodCwgc28gYHZob3N0X3ZkcGFfcmVzZXRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGZyYW1ld29yay4gSSdtIGZvY3VzaW5nIG9uIHdoZXJlIGl0J3MgY2FsbGVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgY2FsbGVkIHByaW1hcmlseSBmcm9tIGB2aG9zdF92ZHBhX29wZW5gIGFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBvcGVuIGFuZCByZWxlYXNlIGFyZSB0aGUgbmF0dXJhbCBwb2ludHMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwL3Jlc2V0dGluZyB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLiBJdCdzIHVzZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGZpcnN0IGJyb3VnaHQgb25saW5lIGFuZCB3aGVuIGl0J3MgYmVpbmcgdGFrZW4gb2ZmbGluZSB0byBwcmV2ZW50IHN0YWxlIHN0YXRlcy5cblxuSG93ZXZlciwgYSBxdWljayB0aG91Z2h0IGZsYXNoZXM6IElzIGl0IGFsc28gdHJpZ2dlcmVkIGJ5IGFuIGBpb2N0bGAgY2FsbD8gSWYgaXQgaXMsIHRoZW4gdGhlIHJlc2V0IGNvdWxkIGJlIGluaXRpYXRlZCBmcm9tIHVzZXItc3BhY2UgdG9vLCByaWdodD8gVGhpcyBtZWFucyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBjb250cm9sIG92ZXIgdGhlIHJlc2V0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOyBrbm93aW5nIHRoaXMgd291bGQgaW1wYWN0IGhvdyBJIGhhbmRsZSB0aGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgaWYgaW9jdGwgY2FsbHMgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJZiB0aGF04oCZcyB0aGUgY2FzZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGlvY3RscyBtaWdodCB0cmlnZ2VyIHRoZSByZXNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjMyLjM5NTMzNjAyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDk0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV9zZXRfc3RhdHVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTI5Nz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF9zdGF0dXMoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHU4IF9fdXNlciAqc3RhdHVzcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzozMTE6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfc3RhdHVzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1OCBfX3VzZXIgKnN0YXR1c3ApXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMzEyLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTgwNj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg1NC1cXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1NUQVRVUzpcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4NTU6XFx0XFx0ciA9IHZob3N0X3ZkcGFfc2V0X3N0YXR1cyh2LCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04NTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjMyLjQ0MDg1NjUyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3Nzg3OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVmhvc3QtVkRQQSBTdGF0dXMgQ2hlY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGZ1bmN0aW9uLiBJdCdzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RhdHVzIG9mIHZEUEEgZGV2aWNlcyBpcyBiZWluZyBtYW5hZ2VkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGFudGljaXBhdGUgbmVlZGluZyB0byBhbmFseXplIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB3aWRlciB2aG9zdCBmcmFtZXdvcmsuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGVycm9yIGNvbmRpdGlvbnMsIGhvdyBpdCBzaWduYWxzIHN0YXR1cyBjaGFuZ2VzIHRvIHRoZSB2aG9zdCB1c2Vyc3BhY2UsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UncyBkcml2ZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGUgdmhvc3QvdkRQQSBpbnRlZ3JhdGlvbiBhcyB3ZWxsLCB0byBoYXZlIGFuIGlkZWEgb2Ygd2hlcmUgdGhpcyByb3V0aW5lIGlzIHNpdHVhdGVkIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBtYWRlIGluIG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLCBhbmQgY29uZmlybSB0aGV5IGFsaWduIHdpdGggdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjM1LjkxODY0NzE2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzExLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzExOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxcbiAzMTI6XFx0e1xcbiAzMTM6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4gMzE0OlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4gMzE1OlxcdFxcdHU4IHN0YXR1cywgc3RhdHVzX29sZDtcXG4gMzE2OlxcdFxcdHUzMiBudnFzID0gdi1cXHUwMDNlbnZxcztcXG4gMzE3OlxcdFxcdGludCByZXQ7XFxuIDMxODpcXHRcXHR1MTYgaTtcXG4gMzE5OlxcdFxcbiAzMjA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzdGF0dXMsIHN0YXR1c3AsIHNpemVvZihzdGF0dXMpKSlcXG4gMzIxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRzdGF0dXNfb2xkID0gb3BzLVxcdTAwM2VnZXRfc3RhdHVzKHZkcGEpO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHQvKlxcbiAzMjY6XFx0XFx0ICogVXNlcnNwYWNlIHNob3VsZG4ndCByZW1vdmUgc3RhdHVzIGJpdHMgdW5sZXNzIHJlc2V0IHRoZVxcbiAzMjc6XFx0XFx0ICogc3RhdHVzIHRvIDAuXFxuIDMyODpcXHRcXHQgKi9cXG4gMzI5OlxcdFxcdGlmIChzdGF0dXMgIT0gMCBcXHUwMDI2XFx1MDAyNiAoc3RhdHVzX29sZCBcXHUwMDI2IH5zdGF0dXMpICE9IDApXFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKChzdGF0dXNfb2xkIFxcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykgXFx1MDAyNlxcdTAwMjYgIShzdGF0dXMgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSlcXG4gMzMzOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudnFzOyBpKyspXFxuIDMzNDpcXHRcXHRcXHRcXHR2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGkpO1xcbiAzMzU6XFx0XFxuIDMzNjpcXHRcXHRpZiAoc3RhdHVzID09IDApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IF9jb21wYXRfdmRwYV9yZXNldCh2KTtcXG4gMzM4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDMzOTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNDA6XFx0XFx0fSBlbHNlXFxuIDM0MTpcXHRcXHRcXHR2ZHBhX3NldF9zdGF0dXModmRwYSwgc3RhdHVzKTtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSBcXHUwMDI2XFx1MDAyNiAhKHN0YXR1c19vbGQgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSlcXG4gMzQ0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudnFzOyBpKyspXFxuIDM0NTpcXHRcXHRcXHRcXHR2aG9zdF92ZHBhX3NldHVwX3ZxX2lycSh2LCBpKTtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9jb25maWdfdmFsaWRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjM1LjkxODc2MzE1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4MzAwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBSZXNldCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSByZXNldCBtZWNoYW5pc20gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCBnZXRzIGNhbGxlZCBmcm9tIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIHdoZW4gdGhlIHN0YXR1cyBpcyBzZXQgdG8gemVyby4gVGhpcyBjb25maXJtcyB0aGUgY3JpdGljYWwgbGluayBpbiB0aGUgY2hhaW4uXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBwb2ludHMsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoZXNlIGFyZTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgLCBhbmQsIG9mIGNvdXJzZSwgYF9jb21wYXRfdmRwYV9yZXNldGAgaXRzZWxmLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBob3cgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHVzZWQsIHNvIGxldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBhbmQgcG9zc2libGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzY3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDAuMTM3MDcyNTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTYyMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY0MS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2NDI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NDMtXFx0XFx0XFx0XFx0ICAgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz04MDY9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy05MTktXFx0XFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjkyMDpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTkyMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDAuMTgzNTY0MjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM5NDc5MDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgRnVuY3Rpb24gU2NvcGUgZm9yIFN5bWJvbCBGb2N1cyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgaWRlbnRpZnkgc3ltYm9scyBmb3IgYSBnaXZlbiBjb250ZXh0LiBJJ20gbG9va2luZyBhdCBgdmhvc3RfdmRwYWAgYW5kIGltbWVkaWF0ZWx5IHRoZSBjb2RlIHJldmVhbHMgdGhhdCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBhcmUgYm90aCAqc3RhdGljKi4gV2FpdCBhIHNlY29uZC4uLiBhbGwgdGhlIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdCBpbiB0aGlzIG1vZHVsZSBhcmUgc3RhdGljLiBUaGlzIHJlYWxseSBsaW1pdHMgbXkgb3B0aW9ucyBmb3IgYnVpbGRpbmcgdXNlZnVsIEZvY3VzU3ltYm9scy4gU3RhdGljIG1lYW5zIHRoZXkncmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggaXNuJ3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBmb3IgY3Jvc3MtbW9kdWxlIGFuYWx5c2lzLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgKm5vbiotc3RhdGljIHRoYXQgSSBjYW4gaG9vayBpbnRvLiBMZXQncyBzZWUgd2hhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCBpcyAtIHRoZSBgdmhvc3RfdmRwYV9mb3BzYCBzdHJ1Y3R1cmUuIFBlcmhhcHMgdGhlcmUncyBhIGZpbGUgb3BlcmF0aW9ucyBlbnRyeSBoZXJlIHRoYXQgd2lsbCBnaXZlIG1lIGEgcG9pbnQgdG8gc3RhcnQgd2l0aC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDguNTc4MzU3Mjk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ5MjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTY4LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzAtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1OTE9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MzUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTYzNjpcXHRjZGV2X2luaXQoXFx1MDAyNnYtXFx1MDAzZWNkZXYsIFxcdTAwMjZ2aG9zdF92ZHBhX2ZvcHMpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MzctXFx0di1cXHUwMDNlY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo0OC42Mjg4NTQ3MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMTQ4OTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy92aG9zdC92ZHBhLmNgIFN0YXRpYyBGaWxlIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIGFzc3VtcHRpb24sIGJ1dCBpdCdzIGNydWNpYWwgdG8gY29uZmlybSBpdCB0aG9yb3VnaGx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgaG93IHRoZXNlIGRyaXZlcnMgYXJlIG9mdGVuIHN0cnVjdHVyZWQsIGFuZCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhhdCBob2xkcyB0cnVlIGluIHRoaXMgcGFydGljdWxhciBjYXNlLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGRyaXZlciBpcyByZWx5aW5nIHNvbGVseSBvbiB0aG9zZSBzdGF0aWNhbGx5LWRlZmluZWQgZmlsZSBvcGVyYXRpb25zLCBvciBpZiB0aGVyZSBtaWdodCBiZSBkeW5hbWljIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRoYXQgYXJlIHNvbWVob3cgaW52b2x2ZWQgaW4gbWFuYWdpbmcgZGV2aWNlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBWRFBBLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGVuZCB1cCBpcyBrZXkgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdlIG5lZWQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGUgbm9ybSB0aGF0IG1pZ2h0IGluZGljYXRlIG1vcmUgYWR2YW5jZWQgb3IgY29tcGxleCBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwcm9iZSBvciBpbml0aWFsaXphdGlvbiwgdGhhdCBpbnRyb2R1Y2UgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiBvciBkeW5hbWljIGZ1bmN0aW9uIGFzc2lnbm1lbnQ/IFdlIGNhbiBub3QgbWFrZSBhc3N1bXB0aW9ucy4gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBlbnRpcmUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzYsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Mi40NDAzNDY5NjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc2Mjg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiB2aG9zdF92ZHBhX1thLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NTIuNDg2NTMzMDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjQ0NzE3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmVmaW5pbmcgdGhlIEFwcHJvYWNoOiBBIE5ldyBSZWdleCBTdHJhdGVneSoqXG5cblJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBUaGUgcHJldmlvdXMgcmVnZXggd2Fzbid0IHF1aXRlIGhpdHRpbmcgdGhlIG1hcms7IGl0J3MgdGltZSB0byByZWZpbmUgdGhpcy4gSSBuZWVkIHRvIHJldGhpbmsgdGhlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgcGF0dGVybi4gVGhlIGZ1bmRhbWVudGFsIGlzc3VlIHNlZW1zIHRvIGJlIGluIHRoZS4uLiAoZmlsbCBpbiB0aGUgYmxhbmsgd2l0aCB0aGUgYXJlYSB0aGV5IGFyZSBsaWtlbHkgc3RydWdnbGluZyB3aXRoIGluIHRoZSBwcm9ibGVtIHRoZXkgYXJlIHNvbHZpbmcpLiBTbyBpbnN0ZWFkIG9mLi4uIChkZXNjcmliZSB0aGUgcHJldmlvdXMgYXBwcm9hY2ggdGhhdCB3YXMgcHJvYmxlbWF0aWMpLCBJIHNob3VsZCB0cnkgc29tZXRoaW5nIHRoYXQgZm9jdXNlcyBvbi4uLiAoZGVzY3JpYmUgdGhlIGFzcGVjdHMgb2YgYSBuZXcgYXBwcm9hY2gpLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0byBlbnN1cmUgdGhpcyBpdGVyYXRpb24gaXMuLi4gKGhpZ2hsaWdodCBrZXkgY3JpdGVyaWEpLiBJJ20gdGhpbmtpbmcgb2YgaW5jb3Jwb3JhdGluZy4uLiAoZGVzY3JpYmUgdGVjaG5pY2FsIGVsZW1lbnRzIG9mIHRoZSByZWdleCBlLmcuIGxvb2thaGVhZHMsIGFuY2hvcnMsIHF1YW50aWZpZXJzKSBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWd1cmF0aW9uLiBNYXliZSBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIG1heSBwZXJmb3JtIHdpdGguLi4gKGNvbnNpZGVyIGVkZ2UgY2FzZXMsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb3RoZXIgaW5wdXRzIGV0YykuIEknbGwgc3RhcnQgd2l0aCB0aGlzIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBpdGVyYXRlLCB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgcmVnZXggbnVhbmNlcy4gSG9wZWZ1bGx5LCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggd2lsbCBnZXQgdG8gdGhlIHJlc3VsdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjc2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Ni41NTEwMDc0NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDQwMTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9BLVowLTldKyBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9NDU9c3RydWN0IHZob3N0X3ZkcGEge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjY6c3RhdGljIERFRklORV9JREEodmhvc3RfdmRwYV9pZGEpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Ni45MzE0MTYwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyODU3ODM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZEUEEgdmhvc3QgSU9DVEwgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyBzb21ldGhpbmcgaGVyZS4gSSB3YXMgaW5pdGlhbGx5IHRocm93biBieSBgc3RhdGljIERFRklORV9JREFgLCBzaW5jZSwgb2YgY291cnNlLCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24uIExldCdzIGp1c3QgZm9jdXMgb24gZmluZGluZyB0aGUgZmlsZSBvcGVyYXRpb25zIGZ1bmN0aW9ucyBpbiB2aG9zdC12ZHBhIGFuZCBzZWUgaWYgYW55IGFyZSBzdGF0aWMuIEFoLCB5ZXMsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBTbywgaWYgd2Ugb25seSBoYXZlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGVpdGhlciBvbWl0IEZvY3VzU3ltYm9scyBvciwgbW9yZSBsaWtlbHksIGp1c3QgaW5jbHVkZSB0aGUgc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlIHByb21wdCwgdGhvdWdoLCBzYXlzIHRvICpwcmVmZXIqIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gXCJQcmVmZXJcIiBpc24ndCBcIm11c3RcIiwgc28gd2UgY2FuIGFic29sdXRlbHkgdXNlIGEgc3RhdGljIGVudHJ5cG9pbnQgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBBbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBhbG1vc3QgY2VydGFpbmx5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIE5vdywgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV9zZXRfc3RhdHVzYCBhcmUgYm90aCBjYWxsZWQgZnJvbSB3aXRoaW4gYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnQsIHNvIHRoZXkgbWlnaHQgYmUgaW5saW5lZC4gQnV0IGxldCdzIGp1c3QgZ28gd2l0aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MDIuNDU5OTk2NjE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzMzc5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjAyLjUwODUzODg2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAyODc5ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVmhvc3QgVkRQQSBDb2RlIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2ZHBhLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdGAgZGlyZWN0b3J5LiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGV4cG9ydGluZyBzeW1ib2xzIGZyb20gdGhpcyBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhlIHZEUEEgZHJpdmVyIGlzIG1ha2luZyBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgcHJvYmFibHkgdGhlIHZob3N0IGNvcmUgb3Igc29tZSBvdGhlciB1cHBlci1sZXZlbCBjb21wb25lbnQuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZWdpc3RyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGxheWVyIHBlcmhhcHMsIG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZGF0YSBwbGFuZSBmdW5jdGlvbmFsaXR5PyBHcmFiYmluZyB0aGlzIHN5bWJvbCBleHBvcnQgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSB2ZHBhIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjA2LjAxMTQyMjM1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDE0MDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjA2LjA2MDMzMTE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODU4MzI3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgYSBWRFBBIERyaXZlciBNb2R1bGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFwiTm8gZXhwb3J0ZWQgc3ltYm9scy5cIiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBUeXBpY2FsbHksIGluIGEga2VybmVsIG1vZHVsZSwgeW91IGV4cGVjdCB0byBzZWUgc29tZSBzeW1ib2xzIGV4cG9zZWQg4oCTIGZ1bmN0aW9ucywgdmFyaWFibGVzIOKAkyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWlnaHQgbmVlZCB0byBhY2Nlc3MuIFRoZSAqYWJzZW5jZSogb2YgZXhwb3J0ZWQgc3ltYm9scyBzdWdnZXN0cyBhIGZldyB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgbW9kdWxlJ3Mgcm9sZS4gSXQgY291bGQgYmUgYSB2ZXJ5IHNlbGYtY29udGFpbmVkIHBpZWNlIG9mIGNvZGUsIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgdGlnaHRseSBpbnRlZ3JhdGVkIHdpdGggYSBzcGVjaWZpYyBzdWJzeXN0ZW0sIG9yIG1heWJlIGl0IGludGVudGlvbmFsbHkga2VlcHMgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcHJpdmF0ZS4gVGhlIGxhY2sgb2YgZXhwb3J0cyAqZG9lc24ndCogYXV0b21hdGljYWxseSBtZWFuIGl0J3MgYmFkIG9yIHBvb3JseSBkZXNpZ25lZCwgYnV0IGl0IGRvZXMgd2FycmFudCBhIGNsb3NlciBsb29rIGF0IHRoZSBtb2R1bGUncyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdGhlIHNlY29uZCBwYXJ0IGlzIGNsZWFyLiBcIlRoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgdmRwYSBkcml2ZXIuXCIgQWgsICp0aGF0KiBjbGFyaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gU28sIHRoaXMgaXNuJ3QgYSBnZW5lcmljIHV0aWxpdHkgbW9kdWxlOyBpdCdzIGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYSBWRFBBIChWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24pIGRyaXZlci4gVkRQQSBkcml2ZXJzIGFyZSBjcml0aWNhbCBjb21wb25lbnRzIGluIG1vZGVybiB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMsIGVuYWJsaW5nIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHVzdWFsbHkgTklDcyBhbmQvb3Igb3RoZXIgaGlnaC1zcGVlZCBJL08uIFRoZXkgd29yayB0byBvZmZsb2FkIEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIGh5cGVydmlzb3IsIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGFuZCByZWR1Y2luZyBDUFUgb3ZlcmhlYWQuIFNvLCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBsYWNrIG9mIGV4cG9ydGVkIHN5bWJvbHMgc3RhcnRzIHRvIG1ha2UgbW9yZSBzZW5zZS4gVGhlIGRyaXZlciBsaWtlbHkgaG9va3MgaW50byB0aGUgVkRQQSBjb3JlIGZyYW1ld29yaywgdXNpbmcgaXRzIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEl0IHByb2JhYmx5IGRvZXNuJ3QgbmVlZCB0byBleHBvc2UgaXRzICpvd24qIGZ1bmN0aW9ucyBkaXJlY3RseSB0byB0aGUgd2lkZXIga2VybmVsLCBpbnN0ZWFkIGFjdGluZyBhcyBhbiBcImFkYXB0ZXJcIiB0byB0aGUgY29yZSBWRFBBIGluZnJhc3RydWN0dXJlLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IG5lZWRzIHRvIGltcGxlbWVudCBzb21lIHNwZWNpZmljIFZEUEEgaW50ZXJmYWNlLiBTbywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGRyaXZlciBpcyBiZWluZyByZWdpc3RlcmVkLCB3aGF0IGNhbGxiYWNrcyBpdCBpbXBsZW1lbnRzIGFuZCB3aGF0IHRoZSBWRFBBIGNvcmUgZXhwZWN0cy4gVGhlIGZvY3VzIHdpbGwgYmUgb24gdGhlIFZEUEEgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXTigJlzIHVzaW5nLiBUaGUgZmFjdCB0aGF0IHRoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgVkRQQSBkcml2ZXIgcHJvdmlkZXMgYSB2ZXJ5IHN0cm9uZyBmdW5jdGlvbmFsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTAuNjQ2MTY2NjU3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwMDI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNjgxPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3ZkcGFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTcwMC19XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTcwMTptb2R1bGVfaW5pdCh2aG9zdF92ZHBhX2luaXQpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE3MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjEwLjY5MzA3NjYxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1MTUxMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHZob3N0X3ZkcGFfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBcIkxldCdzIGNoZWNrIGB2aG9zdF92ZHBhX2luaXRgXCIuIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhbiBpbnRlcm5hbCBjaGVja2xpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgbmVlZHMgdG8gYmUgKmNoZWNrZWQqIHJlZ2FyZGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGB2aG9zdF92ZHBhX2luaXRgLiBXaGF0J3MgdGhlIGNvbnRleHQ/IElzIHRoaXMgYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYSBzcGVjaWZpYyB2RFBBICh2aXJ0aW8gRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikgc2V0dXA/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgdmhvc3QgaW50ZWdyYXRpb24/IEFtIEkgbG9va2luZyBhdCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBvciBhIGJyb2FkZXIgY29uY2VwdD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBub3cgaW52b2x2ZXMgZnJhbWluZyBteSBpbnZlc3RpZ2F0aW9uLiBJcyB0aGlzIGFib3V0IGEgcG90ZW50aWFsIGJ1ZywgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIG5ldyBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHZhZ3VlbmVzcyBvZiB0aGUgcHJvbXB0IHdpbGwgZHJpdmUgbWUsIGF0IGZpcnN0LCB0byBpZGVudGlmeSB0aGVzZSBuZWNlc3NhcnkgY29udGV4dHVhbCBmYWN0b3JzIGFuZCBmb3JtIGEgcGxhbiB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjEzLjg0ODIzMDkwM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MTpcXHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF92ZHBhX2luaXQodm9pZClcXG4xNjgyOlxcdHtcXG4xNjgzOlxcdFxcdGludCByO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRyID0gYWxsb2NfY2hyZGV2X3JlZ2lvbihcXHUwMDI2dmhvc3RfdmRwYV9tYWpvciwgMCwgVkhPU1RfVkRQQV9ERVZfTUFYLFxcbjE2ODY6XFx0XFx0XFx0XFx0XFx0XFxcInZob3N0LXZkcGFcXFwiKTtcXG4xNjg3OlxcdFxcdGlmIChyKVxcbjE2ODg6XFx0XFx0XFx0Z290byBlcnJfYWxsb2NfY2hyZGV2O1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRyID0gdmRwYV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnZob3N0X3ZkcGFfZHJpdmVyKTtcXG4xNjkxOlxcdFxcdGlmIChyKVxcbjE2OTI6XFx0XFx0XFx0Z290byBlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdHJldHVybiAwO1xcbjE2OTU6XFx0XFxuMTY5NjpcXHRlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI6XFxuMTY5NzpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odmhvc3RfdmRwYV9tYWpvciwgVkhPU1RfVkRQQV9ERVZfTUFYKTtcXG4xNjk4OlxcdGVycl9hbGxvY19jaHJkZXY6XFxuMTY5OTpcXHRcXHRyZXR1cm4gcjtcXG4xNzAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTMuODQ4MzQxNDIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjA4MzM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3QtdmRwYSBDaGFyYWN0ZXIgRGV2aWNlIEludGVyYWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYHZob3N0LXZkcGFgIGNoYXJhY3RlciBkZXZpY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgaW9jdGxgIGNhbGxzLiBJdCBsb29rcyBsaWtlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLCBzbyB0aGF0J3MgZ3JvdW5kIHplcm8uIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoaW5ncyBsaWtlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBpb2N0bGAgb24gdGhlIGAvZGV2L3Zob3N0LXZkcGEtKmAgZGV2aWNlIGZpbGVzLiBBYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IG1vdmUuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBmdW5jdGlvbiBsYXlvdXQuIEknbGwgY2hlY2sgaWYgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBwcm9iYWJseSBub3QuIEknbGwgYWxzbyBjaGVjayBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgLSBpdCdzIGFsc28gYSBzaXplYWJsZSBmdW5jdGlvbi4gT2theSwgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enplci5cblxuSSdsbCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGB2aG9zdC12ZHBhYCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBpbiBwbGFjZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgZnV6eiB0YXJnZXQgaXMgYnVpbHQuIEkgc2VlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9VU0VSYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVkRQQV9TSU1gIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBsaWtlIGBWRFBBX1NJTV9ORVRgIG9yIGBWRFBBX1NJTV9CTE9DS2AuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnV6eiB0YXJnZXQgaXMgYWJsZSB0byBiZSBidWlsdCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTkuMTY5MTc4MzA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmRwYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEyOlxcdGNvbmZpZyBWRFBBX1NJTVxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbiAgMTU6XFx0XFx0c2VsZWN0IFZIT1NUX1JJTkdcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcXG4gIDE5OlxcdFxcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVkRQQV9TSU1fTkVUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxcbiAgMjQ6XFx0XFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDMxOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTkuMTY5MjUzNzk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzkyMDIwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgVkRQQSBTaW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgdGhlIFZEUEEgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gYFZEUEFfU0lNYCBpcyBjbGVhcmx5IHRoZSBjZW50cmFsIHBpZWNlLCB0aGUgZm91bmRhdGlvbi4gVGhlIGFjdHVhbCBzaW11bGF0b3JzIHRoZW1zZWx2ZXMgc2VlbSB0byBiZSBgVkRQQV9TSU1fTkVUYCBhbmQgYFZEUEFfU0lNX0JMT0NLYC4gVGhlcmVmb3JlLCBJJ2xsIGRlZmluaXRlbHkgZW5hYmxlIHRob3NlLiBJdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzaG91bGQgYWxzbyBlbmFibGUgYFZEUEFfVVNFUmAsIGl0IGNvdWxkIGJlIHVzZWZ1bCwgYW5kIGBWSE9TVF9WRFBBYCBpcyBuZWNlc3NhcnkuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX1ZEUEFgLiBSaWdodCwgaXQgaGFzIGEgZmV3OiBpdCBkZXBlbmRzIG9uIGBFVkVOVEZEYCwgc2VsZWN0cyBgVkhPU1RgLCBzZWxlY3RzIGBJUlFfQllQQVNTX01BTkFHRVJgLCBhbmQgYWxzbyBkZXBlbmRzIG9uIGBWRFBBYC5cblxuYEVWRU5URkRgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbSBub3QgdG9vIHdvcnJpZWQgdGhlcmUuIGBWRFBBYCBpcyBhbm90aGVyIGNvcmUgZGVwZW5kZW5jeSwgYXMgZXhwZWN0ZWQuIFNvIGBWSE9TVF9WRFBBYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDoyMy4xNDg0NTg2NDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODkzOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjE2OmNvbmZpZyBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJWSE9TVCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODItXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTktXFx0Ym9vbCBcXFwiRW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjIzLjE5OTM2MTM4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4MzE5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVkhPU1QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX01FTlVgIHRoaW5nLiBJdCBzZWVtcyB0byBiZSBhIGBtZW51Y29uZmlnYCBvcHRpb24sIHdoaWNoIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSBpdCBpZiBpdCdzIHJlbGV2YW50IHRvIG91ciBzZXR1cC4gSG1tLCBidXQgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGNsb3NlciwgYFZIT1NUX1ZEUEFgIGlzIG5lc3RlZCAqaW5zaWRlKiBhbiBgaWYgVkhPU1RfTUVOVWAgYmxvY2suIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGRlcGVuZGVuY3kuIExldCdzIGhlYWQgYmFjayB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhbmQgcmUtZXhhbWluZSB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MjYuNDU3NjgzMzcxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyODpcXHRtZW51Y29uZmlnIFZIT1NUX01FTlVcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuICAzMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDMxOlxcdFxcbiAgMzI6XFx0aWYgVkhPU1RfTUVOVVxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVkhPU1RfTkVUXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuICAzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEIFxcdTAwMjZcXHUwMDI2IChUVU4gfHwgIVRVTikgXFx1MDAyNlxcdTAwMjYgKFRBUCB8fCAhVEFQKVxcbiAgMzc6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcXG4gIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjI2LjQ1Nzc0NDc2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc5ODk4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVmlydHVhbGl6ZWQgSGFyZHdhcmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBWSE9TVF9NRU5VYCBkZWZhdWx0cyB0byAneScsIHdoaWNoIG1lYW5zIHdlJ3JlIGdvb2QgdGhlcmUuIFRoYXQgY29uZmlybXMgdGhlIGJhc2UgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgY29uZmlnczogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgdmlydHVhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuXG5cbkhvbGQgb24uLi4gYFZEUEFfU0lNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBjb25kaXRpb24gaXMgbWV0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZCB3aXRoIGFueXRoaW5nIHJlbHlpbmcgb24gdGhlIHNpbXVsYXRpb24uIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgUlVOVElNRV9URVNUSU5HX01FTlVgIGJlZm9yZSBwcm9jZWVkaW5nLCBvdGhlcndpc2UsIEknbSB3YXN0aW5nIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozMC42Mzc2NDUyNDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzgwOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yMjU2PWNvbmZpZyBLQ09WX1NFTEZURVNUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjIyNjQ6bWVudWNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbmxpYi9LY29uZmlnLmRlYnVnLTIyNjUtXFx0Ym9vbCBcXFwiUnVudGltZSBUZXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozMC42ODUwMzIyMTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTUzNDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkVuYWJsaW5nIFJ1bnRpbWUgVGVzdGluZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgbWVudWNvbmZpZyBpdGVtLiBJIHRoaW5rIHdlIG5lZWQgdG8gZW5hYmxlIHRoYXQ7IGl0IHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQuIFRoYXQnbGwgb3BlbiB1cCBhIHdob2xlIHNldCBvZiBvcHRpb25zLCBJJ20gZ3Vlc3NpbmcuIExldCdzIHN0YXJ0IHdpdGggZW5hYmxpbmcgaXQgZGlyZWN0bHkuXG5cbkdpdmVuIHRoYXQsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgYWxzbyBlbmFibGUgdGhlIGZvbGxvd2luZzogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYWxzbyBgVkRQQV9VU0VSYC4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhhdCBgVkRQQV9VU0VSYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCB0cmlwIHVzIHVwIGxhdGVyLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXAgZnJvbnQuIEknbGwgY2hlY2sgdGhvc2UgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozNS4wMzQ1Njg4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0Y29uZmlnIFZEUEFfVVNFUlxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAzODpcXHRcXHRzZWxlY3QgVkhPU1RfSU9UTEJcXG4gIDM5OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIFdpdGggVkRVU0UgaXQgaXMgcG9zc2libGUgdG8gZW11bGF0ZSBhIHZEUEEgRGV2aWNlXFxuICA0MjpcXHRcXHQgIGluIGEgdXNlcnNwYWNlIHByb2dyYW0uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBJRkNWRlxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIElGQyBWRiB2RFBBIGRyaXZlclxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGRyaXZlIEludGVsIElGQyBWRiBOSUMgdG8gb2ZmbG9hZFxcbiAgNDk6XFx0XFx0ICB2aXJ0aW8gZGF0YXBsYW5lIHRyYWZmaWMgdG8gaGFyZHdhcmUuXFxuICA1MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNTE6XFx0XFx0ICBiZSBjYWxsZWQgaWZjdmYuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBNTFg1X1ZEUEFcXG4gIDU0OlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MzUuMDM0NjMxOTI1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyODg2ODkzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkRQQSBDb25maWd1cmF0aW9uIGFuZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgVkRQQV9VU0VSYCByZWxpZXMgb24gYEVWRU5URkRgIGFuZCBgTU1VYCwgYm90aCBvZiB3aGljaCBhcmUgc3RhbmRhcmQgY29tcG9uZW50cywgc28gdGhhdCdzIGV4cGVjdGVkLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZXNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBtaWdodCBiZSB0aGUgb25seSBmdW5jdGlvbiB0byBjaGVjaywgYnV0IGxldCdzIG5vdCBiZSBoYXN0eS4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSBjbHVlLCBidXQgaXQncyBhIHNpemFibGUgZnVuY3Rpb24sIG5vdCBqdXN0IGEgc2ltcGxlIGlubGluZSBoZWxwZXIuIEl0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBTaW1pbGFybHksIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFuZCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgYWx0aG91Z2ggc3RhdGljIGFzIHdlbGwsIHdhcnJhbnQgbXkgYXR0ZW50aW9uIGdpdmVuIHRoZWlyIGRpc3RpbmN0IGZ1bmN0aW9uYWxpdHkuXG5cbkZvciB0aGlzIGFuYWx5c2lzLCBJIHdpbGwgaW5jbHVkZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvZGViYXNlLiBJdCBsb29rcyBsaWtlIGl0ICpkb2VzKiBpbnRyb2R1Y2UgYHZxX251bV9tYXhgIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAsIHdoaWNoIGlzIHByb21pc2luZy4gRGlnZ2luZyBkZWVwZXIsIGl0IGFwcGVhcnMgdGhhdCBgdi1cdTAwM2V2cV9udW1fbWF4ID0gb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpYCBpcyBzZXQgd2l0aGluIGBfY29tcGF0X3ZkcGFfcmVzZXRgLiBGdXJ0aGVybW9yZSwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGNoZWNrcyBgcy5udW0gXHUwMDNlIHYtXHUwMDNldnFfbnVtX21heGAgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYXMgSSd2ZSB2ZXJpZmllZCB0aGUga2V5IGNoYW5nZXMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxOTcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6NDQuMzIzMzI0NTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NzQyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaGFuZGxlciBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3RlZCByaW5nIHNpemUgYWdhaW5zdCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdC12ZHBhIGlvY3RsIHBhdGgsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6NDQuNDA1MjA1Njc4WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzOTQ0MjU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjQ0LjQwNTc0MTc5OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQzODkwMjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGEgYGNvcHlfZnJvbV91c2VyYCBjYWxsIHRvIHJlYWQgYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBmcm9tIHVzZXIgc3BhY2UsIHZhbGlkYXRlcyB0aGUgYG51bWAgZmllbGQgYWdhaW5zdCBhIG5ld2x5IGNhY2hlZCBgdnFfbnVtX21heGAgdmFsdWUsIGFuZCB1cGRhdGVzIHRoZSB2aXJ0cXVldWUgc3RhdGUuIEFsbCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuK1x0dTE2IHZxX251bV9tYXg7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxuIHN0YXRpYyBpbnQgX2NvbXBhdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbitcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHR2LVx1MDAzZXN1c3BlbmRlZCA9IGZhbHNlO1xuIFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHRcdFx0IFZEUEFfUkVTRVRfRl9DTEVBTl9NQVAgOiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbitcdHJldCA9IHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4rXHRcdHYtXHUwMDNldnFfbnVtX21heCA9IG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHR1MzIgaWR4O1xuIFx0bG9uZyByO1xuIFxuLVx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbi1cdGlmIChyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcjtcbitcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWR4ID0gcy5pbmRleDtcbitcdH0gZWxzZSB7XG4rXHRcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XG4rXHRcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByO1xuK1x0fVxuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTY1Miw2ICs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4rXHRcdFx0ciA9IC1FQlVTWTtcbitcdFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXHUwMDNlIDB4ZmZmZiB8fFxuK1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbitcdFx0XHQgICAocy5udW0gXHUwMDI2IChzLm51bSAtIDEpKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZxLVx1MDAzZW51bSA9IHMubnVtO1xuK1x0XHRcdHIgPSAwO1xuK1x0XHR9XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1x0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzY1LDkgKzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDo0NC40MDU3NDI5NThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0Mzg4NzgzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogdmhvc3QtdmRwYSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBoYW5kbGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCdzIGNoYW5nZWQgZnJvbSBjYWxsaW5nIGBvcHMtXHUwMDNlc2V0X3ZxX251bWAgZGlyZWN0bHkuIEJ1dCB0aGlzIGZ1bmN0aW9uIGFsc28gaGFuZGxlcyB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIG5vdywgYW5kIHRoZSBkaWZmIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQuXG5cbk15IGFuYWx5c2lzIHN0YXJ0ZWQgd2l0aCBub3RpY2luZyB0aGUgY2hhbmdlIGluIGhvdyBgaWR4YCBpcyBvYnRhaW5lZC4gSXQgdXNlZCB0byBiZSBhIHNpbXBsZSBgZ2V0X3VzZXJgIGNhbGwsIGJ1dCBub3csIHdoZW4gYGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgaXQncyByZXBsYWNlZCB3aXRoIGBjb3B5X2Zyb21fdXNlcmAgaW50byBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgc2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IHdlJ3JlIGdldHRpbmcgYm90aCB0aGUgaW5kZXggKmFuZCogdGhlIG51bWJlciBmcm9tIHRoZSB1c2VyIG5vdy5cblxuVGhlIGNvZGUgdGhlbiB2YWxpZGF0ZXMgYHMubnVtYDogY2hlY2tpbmcgZm9yIHplcm8sIGEgbWF4aW11bSB2YWx1ZSBiYXNlZCBvbiBgdi1cdTAwM2V2cV9udW1fbWF4YCwgYW5kIHdoZXRoZXIgaXQncyBhIHBvd2VyIG9mIHR3by4gVGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBoYXZlIGJlZW4gY29ycmVjdGx5IHZhbGlkYXRpbmcgYHZxLVx1MDAzZW51bWAuIEl0J3MgcHJvcGVybHkgbG9ja2VkIGFuZCB1bmxvY2tlZCB3aXRoIGB2cS1cdTAwM2VtdXRleGAuIElmIHRoZSB2aXJ0cXVldWUgaXMgYnVzeSwgaXQgcmV0dXJucyBgRUJVU1lgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIGFsd2F5czogSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkPyBUaGUgcGF0Y2ggKm9ubHkqIHJlYWRzIGRhdGEgZnJvbSB1c2VyIHNwYWNlLiBUaGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBgc2Agc3RydWN0LCBhbmQgaXQgKnVzZXMqIHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSwgc3BlY2lmaWNhbGx5IGBzLm51bWAgZm9yIGNvbmZpZ3VyYXRpb24sIGFmdGVyIHZhbGlkYXRpb24uIFRoZSBjb2RlIGluaXRpYWxpemVzIGB2LVx1MDAzZXZxX251bV9tYXhgIGFzIHdlbGwuIFRoZSBvbmx5IHBsYWNlIHRoZSB1c2VyIHNwYWNlIGRhdGEgaXMgcmVhZCBpcyB3aXRoIGBjb3B5X2Zyb21fdXNlcmAsIHdoaWNoIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCB0aHVzIEknbSBzdXJlIGl0J3Mgc2FmZSBhbmQgZG9lc24ndCBsZWFrIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS5cblxuVGhlIGB2aG9zdF92cmluZ19zdGF0ZWAgc3RydWN0IGl0c2VsZiwgd2l0aCBqdXN0IGBpbmRleGAgYW5kIGBudW1gLCBpcyBjbGVhbjsgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQgbWUgbWFrZSBzdXJlIGBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEVgIGlzIHNhZmUgYXMgd2VsbDogWWVzLCBpdCBhbHNvIGRvZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgaW50byBzdHJ1Y3QgYHNgLCB3aGljaCBpcyBzYWZlLlxuXG5Tbywgc3VtbWluZyBpdCB1cCwgbm8sIHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBrZXJuZWwgaW5mbyBsZWFrcyBpbiB0aGlzIHBhdGNoLiBJdCdzIHNhZmUgdG8gdXNlIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IG5vIEtNU0FOIGlzIG5lZWRlZCBoZXJlLiBUaGlzIHBhdGNoIHNpbXBseSBpbXByb3ZlcyB2YWxpZGF0aW9uIGFuZCBjb3JyZWN0IHVzZSBvZiB1c2VyLXByb3ZpZGVkIGRhdGEuIEtNU0FOIGlzIG92ZXJraWxsIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNCwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzE6MDIuODQ0NjI1NjYxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowfhcfn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 01:06:55 +0000 UTC FinishedAt: 2026-08-10 01:31:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "778a8357-cb20-42a4-be78-ed70cfed9397" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl", "vhost_vdpa_vring_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzYzA5YmVmZmEzMmJhYTBjYzU2YTBjNzJkMGY4MjY3ZDg3NGM5MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCA2OTI1NjRiMWJjYmJlLi5mMmVlZGIwNDY0YzI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNTMsNiAmIzQzOzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuJiM0MztcdHUxNiB2cV9udW1fbWF4O1xuIFx0aW50IHZpcnRpb19pZDtcbiBcdGludCBtaW5vcjtcbiBcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcbkBAIC0yMjksNyAmIzQzOzIzMCw5IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBxaWQpXG4gc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4ge1xuIFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cdTAwM2V2ZHBhO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0di1cdTAwM2VzdXNwZW5kZWQgPSBmYWxzZTtcbiBcbkBAIC0yMzksNyAmIzQzOzI0MiwxNCBAQCBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiBcdFx0XHQgVkRQQV9SRVNFVF9GX0NMRUFOX01BUCA6IDA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7XG4mIzQzO1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbiYjNDM7XHRyZXQgPSB2ZHBhX3Jlc2V0KHZkcGEsIGZsYWdzKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4mIzQzO1x0XHR2LVx1MDAzZXZxX251bV9tYXggPSBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5AQCAtNjQxLDkgJiM0Mzs2NTEsMTUgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHUzMiBpZHg7XG4gXHRsb25nIHI7XG4gXG4tXHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xuLVx0aWYgKHIgXHUwMDNjIDApXG4tXHRcdHJldHVybiByO1xuJiM0MztcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0aWR4ID0gcy5pbmRleDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbiYjNDM7XHRcdGlmIChyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaWR4IFx1MDAzZT0gdi1cdTAwM2VudnFzKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG5AQCAtNjUyLDYgJiM0Mzs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4mIzQzO1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4mIzQzO1x0XHRcdHIgPSAtRUJVU1k7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzLm51bSB8fCBzLm51bSBcdTAwM2UgMHhmZmZmIHx8XG4mIzQzO1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbiYjNDM7XHRcdFx0ICAgKHMubnVtIFx1MDAyNiAocy5udW0gLSAxKSkpIHtcbiYjNDM7XHRcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR2cS1cdTAwM2VudW0gPSBzLm51bTtcbiYjNDM7XHRcdFx0ciA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuJiM0MztcdFx0b3BzLVx1MDAzZXNldF92cV9udW0odmRwYSwgaWR4LCBzLm51bSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGNhc2UgVkhPU1RfVkRQQV9TRVRfVlJJTkdfRU5BQkxFOlxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC03NjUsOSAmIzQzOzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzYzA5YmVmZmEzMmJhYTBjYzU2YTBjNzJkMGY4MjY3ZDg3NGM5MDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHsKIAlzdHJ1Y3QgY2RldiBjZGV2OwogCWF0b21pY190IG9wZW5lZDsKIAl1MzIgbnZxczsKJiM0MzsJdTE2IHZxX251bV9tYXg7CiAJaW50IHZpcnRpb19pZDsKIAlpbnQgbWlub3I7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4OwpAQCAtMjI5LDcgJiM0MzsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKQogc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiB7CiAJc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi0mZ3Q7dmRwYTsKJiM0MzsJY29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS0mZ3Q7Y29uZmlnOwogCXUzMiBmbGFncyA9IDA7CiYjNDM7CWludCByZXQ7CiAKIAl2LSZndDtzdXNwZW5kZWQgPSBmYWxzZTsKIApAQCAtMjM5LDcgJiM0MzsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiAJCQkgVkRQQV9SRVNFVF9GX0NMRUFOX01BUCA6IDA7CiAJfQogCi0JcmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpOwomIzQzOwl2LSZndDt2cV9udW1fbWF4ID0gMDsKJiM0MzsJcmV0ID0gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQkvKiBTb21lIGJhY2tlbmRzIGRlcml2ZSB0aGUgbWF4IGZyb20gbXV0YWJsZSBxdWV1ZSBzdGF0ZS4gKi8KJiM0MzsJCXYtJmd0O3ZxX251bV9tYXggPSBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKQEAgLTY0MSw5ICYjNDM7NjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJdTMyIGlkeDsKIAlsb25nIHI7CiAKLQlyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApOwotCWlmIChyICZsdDsgMCkKLQkJcmV0dXJuIHI7CiYjNDM7CWlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkgewomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWlkeCA9IHMuaW5kZXg7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApOwomIzQzOwkJaWYgKHIgJmx0OyAwKQomIzQzOwkJCXJldHVybiByOwomIzQzOwl9CiAKIAlpZiAoaWR4ICZndDs9IHYtJmd0O252cXMpCiAJCXJldHVybiAtRU5PQlVGUzsKQEAgLTY1Miw2ICYjNDM7NjY4LDIzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJdnEgPSAmYW1wO3YtJmd0O3Zxc1tpZHhdOwogCiAJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CQlpZiAodnEtJmd0O3ByaXZhdGVfZGF0YSkgewomIzQzOwkJCXIgPSAtRUJVU1k7CiYjNDM7CQl9IGVsc2UgaWYgKCFzLm51bSB8fCBzLm51bSAmZ3Q7IDB4ZmZmZiB8fAomIzQzOwkJCSAgIHMubnVtICZndDsgdi0mZ3Q7dnFfbnVtX21heCB8fAomIzQzOwkJCSAgIChzLm51bSAmYW1wOyAocy5udW0gLSAxKSkpIHsKJiM0MzsJCQlyID0gLUVJTlZBTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdnEtJmd0O251bSA9IHMubnVtOwomIzQzOwkJCXIgPSAwOwomIzQzOwkJfQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwkJb3BzLSZndDtzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pOwomIzQzOwkJcmV0dXJuIDA7CiAJY2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3MsIGFyZ3AsIHNpemVvZihzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc2NSw5ICYjNDM7Nzk4LDYgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAkJb3BzLSZndDtzZXRfdnFfY2IodmRwYSwgaWR4LCAmYW1wO2NiKTsKIAkJYnJlYWs7CiAKLQljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06Ci0JCW9wcy0mZ3Q7c2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLSZndDtudW0pOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGB2cV9udW1fbWF4YCB0byB0aGUgYHN0cnVjdCB2aG9zdF92ZHBhYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzc3VlcyBoZXJlLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfY29tcGF0X3ZkcGFfcmVzZXRgIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyB0aGlzIG5ldyBgdnFfbnVtX21heGAgZmllbGQgdmlhIGBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpYC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdoYXQgZG9lcyB0aGF0IGBnZXRfdnFfbnVtX21heGAgYWN0dWFsbHkgcmV0dXJuPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgb24gaXRzIHJldHVybiB2YWx1ZT8gQW55IGluaGVyZW50IGxpbWl0cyBpbiB0aGUgYHZkcGFgIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzPwoKVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEhlcmUsIHRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgb24gaG93IGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpcyBoYW5kbGVkLiBUaGUgdXNlci1wcm92aWRlZCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCAoYHNgKSBpcyBub3cgdmFsaWRhdGVkIGFnYWluc3QgYHYtJmd0O3ZxX251bV9tYXhgLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGRvaW5nIGEgYm91bmRzIGNoZWNrOiBgcy5udW1gIGhhcyB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHYtJmd0O3ZxX251bV9tYXhgLiBUaGlzIGlzIGEgZ29vZCBzYW5pdHkgY2hlY2sgYnV0IGl0IGlzIGFsc28gb25lIHdoZXJlIGZ1enppbmcgd2lsbCBiZSB2ZXJ5IHVzZWZ1bC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpczogV2hhdCBoYXBwZW5zIGlmIGBzLm51bWAgaXMgKmV4YWN0bHkqIGB2LSZndDt2cV9udW1fbWF4YD8gRG9lcyB0aGF0IGV4cG9zZSBhbnkgbmV3IGVkZ2UgY2FzZXM/IERvZXMgdGhpcyB2YWx1ZSBnZXQgcmUtdmFsaWRhdGVkIGFnYWluPwoKVWx0aW1hdGVseSwgdGhpcyBgcy5udW1gIHZhbHVlIGlzIGFzc2lnbmVkIHRvIGB2cS0mZ3Q7bnVtYCBhbmQgdGhlbiBwYXNzZWQgdG8gYG9wcy0mZ3Q7c2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKWAuIFRoYXQgYHNldF92cV9udW1gIGlzIHRoZSBrZXkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gRG9lcyBpdCBhbHNvIHBlcmZvcm0gYW55IGFkZGl0aW9uYWwgY2hlY2tzIG9yIHNhbml0eSB2YWxpZGF0aW9uPyBXaGF0IGlzIHRoZSAqaW50ZXJhY3Rpb24qIGJldHdlZW4gdGhlIG5ldyBgdnFfbnVtX21heGAgY2hlY2sgYW5kIHRoZSBhY3Rpb25zIG9mIHRoZSBgc2V0X3ZxX251bWAgZnVuY3Rpb24/IEFuZCBpdCBpcyBjcml0aWNhbCB0aGF0IEkgZnV6eiB0aGlzIHRvby4KCkFsbCBpbiBhbGwsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGNoYW5nZSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhvc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucywgYW5kIHRoYXQgaXMgd2hlcmUgdGhlIGF0dGFjayBzdXJmYWNlIGhhcyBleHBhbmRlZC4gVGltZSB0byBodW50IGRvd24gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgdmhvc3RfdmRwYS5jYC4gSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLCB3aGljaCBzaG91bGQgdGVsbCBtZSBpZiBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfVkhPU1RfVkRQQWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZEUEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBWSE9TVF9WRFBBIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFZIT1NUX1ZEUEFgIHRoaW5nIGNvbXBsZXRlbHkuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBtYXAgb3V0IGV2ZXJ5IGNvbXBvbmVudCwgZXZlcnkgbW9kdWxlLCBldmVyeSBsaWJyYXJ5IHRoYXQgYFZIT1NUX1ZEUEFgIHJlbGllcyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgd2ViIG9mIGRlcGVuZGVuY2llcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gZ29pbmcgdG8gdHJvdWJsZXNob290IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gdGhpbmsgYWJvdXQgY29udHJpYnV0aW5nIHVwc3RyZWFtLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHVwc3RyZWFtIHJlcXVpcmVtZW50cyBhcmUgbWV0IGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSBtb3ZlIG9uIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2hhdCYjMzQ7IGFuZCAmIzM0O2hvdyYjMzQ7IG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZEUEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRvIHRoaXMuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdToKCioqSW50ZXJuYWwgQW5hbHlzaXM6IEZpbGUgSW5zcGVjdGlvbiAmYW1wOyBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIGxldCYjMzk7cyB0YWtlIGEgYmVhdCBhbmQgYWN0dWFsbHkgKnJlYWQqIHRoZSBmaWxlLiBObyBhc3N1bXB0aW9ucywgbm8ganVtcGluZyB0byBjb25jbHVzaW9ucywganVzdCBhIGNsZWFuLCB1bmJpYXNlZCBpbml0aWFsIHNjYW4uIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBvYnZpb3VzIOKAkyB0aGUgZmlsZSBmb3JtYXQsIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSwgYW55IGltbWVkaWF0ZWx5IGFwcGFyZW50IGRhdGEgdHlwZXMsIGFuZCBhbnkgZ2xhcmluZyByZWQgZmxhZ3Mgb3IgcHJvbWlzaW5nIGluZGljYXRvcnMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNydWNpYWwuIEl0JiMzOTtsbCBzaGFwZSB0aGUgcXVlc3Rpb25zIEkgYXNrIGFuZCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBhbmFseXNpcy4gSXQmIzM5O3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgZnJhbWV3b3JrLCBhIG1lbnRhbCBtYXAsIGJlZm9yZSBJIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0dmlydGlvX3RyYW5zcG9ydC5rbyBkcml2ZXIgbG9hZGVkIHRvIHVzZSB0aGUgdmlydGlvLXZzb2NrIGRldmljZS5cbiAgNjY6XHRcbiAgNjc6XHRcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNjg6XHRcdHZob3N0X3Zzb2NrLlxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBWSE9TVF9WRFBBXG4gIDcxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuICA3MjpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEXG4gIDczOlx0XHRzZWxlY3QgVkhPU1RcbiAgNzQ6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgNzU6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDc4Olx0XHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXG4gIDc5Olx0XG4gIDgwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgODE6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVkhPU1RfVkRQQSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGJvdGggYEVWRU5URkRgIGFuZCBgVkRQQWAgYXMgYSBwcmVyZXF1aXNpdGUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBzdGF0ZSBvZiBgVkRQQWAsIHdoaWNoIGlzIHRoZSBwb3RlbnRpYWxseSBtb3JlIGNvbXBsZXggZGVwZW5kZW5jeSBoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IHVwIGFzIGV4cGVjdGVkIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGVuYWJsZWQgb3B0aW9ucyB3aXRoaW4gdGhlIGBWRFBBYCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHZob3N0X3ZkcGFgIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBgdmhvc3RfdmRwYWAgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCB0byBlbmFibGUgYFZIT1NUX1ZEUEFgLCBvYnZpb3VzbHkuIEJ1dCB0byBtYWtlIHRoaXMgd29ydGh3aGlsZSwgd2UmIzM5O2xsIG5lZWQgYSBzdWl0YWJsZSB2aXJ0dWFsIGRhdGEgcGF0aCBhY2Nlc3MgKFZEUEEpIHNpbXVsYXRvciDigJMgc29tZXRoaW5nIGxpa2UgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGdldCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYW5kIGBWRFBBX1VTRVJgIGFkZGVkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdOKAmXMgdGhlIGdyb3VuZHdvcmsuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIOKAkyBsb3RzIG9mIGludGVyYWN0aW9uIHRoZXJlLiBUaGVuLCBJIHdhcyBsb29raW5nIGF0IGBfY29tcGF0X3ZkcGFfcmVzZXRgLCBpdCBiZWluZyBzdGF0aWMgbWlnaHQgcG9zZSBhIGNoYWxsZW5nZSwgdGhvdWdoIGB2aG9zdF92ZHBhX3Jlc2V0YCBpcyBhbHNvIHN0YXRpYyB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSwgYnV0IG1heWJlIHRoZXJlIGlzIGEgd2F5IHRvIG1ha2UgdXNlIG9mIGl0IHZpYSB0aGUgaW9jdGwuIEZpbmFsbHksIEkgc2hvdWxkIGFsc28gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgLSB0aGF0IGZlZWxzIGltcG9ydGFudCwgdG9vLiBPa2F5LCBnb29kLCBJIGhhdmUgbXkgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9NjQyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODA1LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODA2OnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODA3LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92ZHBhX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3My1cdC53cml0ZV9pdGVyXHQ9IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc1LSNpZmRlZiBDT05GSUdfTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHZob3N0LXZkcGFgIGRyaXZlciwgYW5kIG15IGZvY3VzIGlzIHRoZSBpb2N0bCBoYW5kbGluZy4gVGhlIGZpcnN0IGVudHJ5IHBvaW50IHRvIG5vdGUgaXMgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBGcm9tIHRoZXJlLCBJIHNlZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZ2V0cyBjYWxsZWQ7IHRoYXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHZyaW5nLXNwZWNpZmljIG9wZXJhdGlvbnMuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGBfY29tcGF0X3ZkcGFfcmVzZXRgLCBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBgdmhvc3RfdmRwYV9yZXNldGAsIHdoaWNoIHVsdGltYXRlbHkgaXMgYWxzbyB0cmlnZ2VyZWQgYnkgdGhlIHRvcC1sZXZlbCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGEgYFZIT1NUX1ZEUEFfU0VUX1NUQVRVU2AgY2FsbC4gSSBjYW4gc2VlIHRoaXMgY2FuIGJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgaW9jdGwgY2FsbHMuCgpUbyBnZXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGl0c2VsZi4gSXQmIzM5O3MgaW4gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc28gSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIG1vc3QgY3JpdGljYWwgcGllY2UgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwNjpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuIDgwNzpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gODA4Olx0e1xuIDgwOTpcdFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBmaWxlcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gODEwOlx0XHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkID0gXHUwMDI2di1cdTAwM2V2ZGV2O1xuIDgxMTpcdFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gODEyOlx0XHR1NjQgX191c2VyICpmZWF0dXJlcCA9IGFyZ3A7XG4gODEzOlx0XHR1NjQgZmVhdHVyZXM7XG4gODE0Olx0XHRsb25nIHIgPSAwO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKGNtZCA9PSBWSE9TVF9TRVRfQkFDS0VORF9GRUFUVVJFUykge1xuIDgxNzpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZmVhdHVyZXMsIGZlYXR1cmVwLCBzaXplb2YoZmVhdHVyZXMpKSlcbiA4MTg6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MTk6XHRcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiB+KFZIT1NUX1ZEUEFfQkFDS0VORF9GRUFUVVJFUyB8XG4gODIwOlx0XHRcdFx0XHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSB8XG4gODIxOlx0XHRcdFx0XHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkgfFxuIDgyMjpcdFx0XHRcdFx0IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1NVU1BFTkQpIHxcbiA4MjM6XHRcdFx0XHRcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpIHxcbiA4MjQ6XHRcdFx0XHRcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9FTkFCTEVfQUZURVJfRFJJVkVSX09LKSkpXG4gODI1Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDgyNjpcdFx0XHRpZiAoKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9TVVNQRU5EKSkgXHUwMDI2XHUwMDI2XG4gODI3Olx0XHRcdCAgICAgIXZob3N0X3ZkcGFfY2FuX3N1c3BlbmQodikpXG4gODI4Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDgyOTpcdFx0XHRpZiAoKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpKSBcdTAwMjZcdTAwMjZcbiA4MzA6XHRcdFx0ICAgICAhdmhvc3RfdmRwYV9jYW5fcmVzdW1lKHYpKVxuIDgzMTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4MzI6XHRcdFx0aWYgKChmZWF0dXJlcyBcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXHUwMDI2XHUwMDI2XG4gODMzOlx0XHRcdCAgICAhKGZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9BU0lEKSkpXG4gODM0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM1Olx0XHRcdGlmICgoZmVhdHVyZXMgXHUwMDI2IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX0RFU0NfQVNJRCkpIFx1MDAyNlx1MDAyNlxuIDgzNjpcdFx0XHQgICAgICF2aG9zdF92ZHBhX2hhc19kZXNjX2dyb3VwKHYpKVxuIDgzNzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4Mzg6XHRcdFx0aWYgKChmZWF0dXJlcyBcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkpIFx1MDAyNlx1MDAyNlxuIDgzOTpcdFx0XHQgICAgICF2aG9zdF92ZHBhX2hhc19wZXJzaXN0ZW50X21hcCh2KSlcbiA4NDA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODQxOlx0XHRcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFx1MDAyNnYtXHUwMDNldmRldiwgZmVhdHVyZXMpO1xuIDg0MjpcdFx0XHRyZXR1cm4gMDtcbiA4NDM6XHRcdH1cbiA4NDQ6XHRcbiA4NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2ZC1cdTAwM2VtdXRleCk7XG4gODQ2Olx0XG4gODQ3Olx0XHRzd2l0Y2ggKGNtZCkge1xuIDg0ODpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9ERVZJQ0VfSUQ6XG4gODQ5Olx0XHRcdHIgPSB2aG9zdF92ZHBhX2dldF9kZXZpY2VfaWQodiwgYXJncCk7XG4gODUwOlx0XHRcdGJyZWFrO1xuIDg1MTpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9TVEFUVVM6XG4gODUyOlx0XHRcdHIgPSB2aG9zdF92ZHBhX2dldF9zdGF0dXModiwgYXJncCk7XG4gODUzOlx0XHRcdGJyZWFrO1xuIDg1NDpcdFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9TVEFUVVM6XG4gODU1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3NldF9zdGF0dXModiwgYXJncCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIHZob3N0LXZkcGEgSW50ZXJmYWNlKioKCkFscmlnaHQsIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCDigJMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBnYXRld2F5LCB0aGUgYmlnIGthaHVuYSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHZob3N0LXZkcGEgc2V0dXAuIEJlZm9yZSBJIGRlbHZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpoYXBwZW5pbmcqIHVuZGVyIHRoZSBob29kLiBJIGtub3cgdGhlIGdlbmVyYWwgZmxvdywgYnV0IGxldCYjMzk7cyBxdWlja2x5IHpvb20gaW4gb24gdHdvIGNyaXRpY2FsIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBGaXJzdCwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgd2hlcmUgdGhlIHZpcnR1YWwgcmluZ3MgYXJlIG1hbmFnZWQsIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkYXRhIHRyYW5zZmVyIHByb2Nlc3MgaXMgYWN0dWFsbHkgb3JjaGVzdHJhdGVkLiBTZWNvbmQsIGB2aG9zdF92ZHBhX3Jlc2V0YC4uLiB0aGF0IGltcGxpZXMgYSBjcml0aWNhbCBjbGVhbnVwIG9yIHN0YXRlLXJlY292ZXJ5IG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb3ZlcnMgZnJvbSBlcnJvcnMgb3IgcHJlcGFyZXMgZm9yIG5ldyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpb2N0bGAgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9MTI1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdmRwYV9hcyAqdmhvc3RfdmRwYV9maW5kX2FsbG9jX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEzNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Jlc2V0X21hcChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIGFzaWQpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVtb3ZlX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgYXNpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjAtXHQgKi9cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE2MTpcdHZob3N0X3ZkcGFfcmVzZXRfbWFwKHYsIGFzaWQpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyLVx0a2ZyZWUoYXMpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTIzMD1zdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNTQtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNTU6c3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMjU2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDM0PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDQ4LVx0bnZxcyA9IHYtXHUwMDNlbnZxcztcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0NDk6XHRyID0gdmhvc3RfdmRwYV9yZXNldCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtXHRpZiAocilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDkzPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAwLVx0dmhvc3RfdmRwYV9jbGVhbl9pcnEodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTAxOlx0dmhvc3RfdmRwYV9yZXNldCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1MDItXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2LVx1MDAzZXZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgdmhvc3RfdmRwYV9yZXNldCBDYWxsIExvY2F0aW9ucyoqCgpSaWdodCwgc28gYHZob3N0X3ZkcGFfcmVzZXRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHByaW1hcmlseSBmcm9tIGB2aG9zdF92ZHBhX29wZW5gIGFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBvcGVuIGFuZCByZWxlYXNlIGFyZSB0aGUgbmF0dXJhbCBwb2ludHMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwL3Jlc2V0dGluZyB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLiBJdCYjMzk7cyB1c2VkIHdoZW4gdGhlIGRldmljZSBpcyBmaXJzdCBicm91Z2h0IG9ubGluZSBhbmQgd2hlbiBpdCYjMzk7cyBiZWluZyB0YWtlbiBvZmZsaW5lIHRvIHByZXZlbnQgc3RhbGUgc3RhdGVzLgoKSG93ZXZlciwgYSBxdWljayB0aG91Z2h0IGZsYXNoZXM6IElzIGl0IGFsc28gdHJpZ2dlcmVkIGJ5IGFuIGBpb2N0bGAgY2FsbD8gSWYgaXQgaXMsIHRoZW4gdGhlIHJlc2V0IGNvdWxkIGJlIGluaXRpYXRlZCBmcm9tIHVzZXItc3BhY2UgdG9vLCByaWdodD8gVGhpcyBtZWFucyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBjb250cm9sIG92ZXIgdGhlIHJlc2V0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOyBrbm93aW5nIHRoaXMgd291bGQgaW1wYWN0IGhvdyBJIGhhbmRsZSB0aGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgaWYgaW9jdGwgY2FsbHMgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJZiB0aGF04oCZcyB0aGUgY2FzZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGlvY3RscyBtaWdodCB0cmlnZ2VyIHRoZSByZXNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV9zZXRfc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9Mjk3PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfZ2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMC1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjMxMTpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9zdGF0dXMoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHU4IF9fdXNlciAqc3RhdHVzcClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMi17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9ODA2PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg1NC1cdGNhc2UgVkhPU1RfVkRQQV9TRVRfU1RBVFVTOlxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODU1Olx0XHRyID0gdmhvc3RfdmRwYV9zZXRfc3RhdHVzKHYsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODU2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipWaG9zdC1WRFBBIFN0YXR1cyBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN0YXR1cyBvZiB2RFBBIGRldmljZXMgaXMgYmVpbmcgbWFuYWdlZC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgd2lkZXIgdmhvc3QgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucywgaG93IGl0IHNpZ25hbHMgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIHZob3N0IHVzZXJzcGFjZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZSYjMzk7cyBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgb2YgdGhlIHZob3N0L3ZEUEEgaW50ZWdyYXRpb24gYXMgd2VsbCwgdG8gaGF2ZSBhbiBpZGVhIG9mIHdoZXJlIHRoaXMgcm91dGluZSBpcyBzaXR1YXRlZCBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGFzc3VtcHRpb25zIG1hZGUgaW4gbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0sIGFuZCBjb25maXJtIHRoZXkgYWxpZ24gd2l0aCB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMTpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbiAzMTQ6XHRcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIDMxNTpcdFx0dTggc3RhdHVzLCBzdGF0dXNfb2xkO1xuIDMxNjpcdFx0dTMyIG52cXMgPSB2LVx1MDAzZW52cXM7XG4gMzE3Olx0XHRpbnQgcmV0O1xuIDMxODpcdFx0dTE2IGk7XG4gMzE5Olx0XG4gMzIwOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3RhdHVzLCBzdGF0dXNwLCBzaXplb2Yoc3RhdHVzKSkpXG4gMzIxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMyMjpcdFxuIDMyMzpcdFx0c3RhdHVzX29sZCA9IG9wcy1cdTAwM2VnZXRfc3RhdHVzKHZkcGEpO1xuIDMyNDpcdFxuIDMyNTpcdFx0LypcbiAzMjY6XHRcdCAqIFVzZXJzcGFjZSBzaG91bGRuJiMzOTt0IHJlbW92ZSBzdGF0dXMgYml0cyB1bmxlc3MgcmVzZXQgdGhlXG4gMzI3Olx0XHQgKiBzdGF0dXMgdG8gMC5cbiAzMjg6XHRcdCAqL1xuIDMyOTpcdFx0aWYgKHN0YXR1cyAhPSAwIFx1MDAyNlx1MDAyNiAoc3RhdHVzX29sZCBcdTAwMjYgfnN0YXR1cykgIT0gMClcbiAzMzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAoKHN0YXR1c19vbGQgXHUwMDI2IFZJUlRJT19DT05GSUdfU19EUklWRVJfT0spIFx1MDAyNlx1MDAyNiAhKHN0YXR1cyBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykpXG4gMzMzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG52cXM7IGkmIzQzOyYjNDM7KVxuIDMzNDpcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaSk7XG4gMzM1Olx0XG4gMzM2Olx0XHRpZiAoc3RhdHVzID09IDApIHtcbiAzMzc6XHRcdFx0cmV0ID0gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xuIDMzODpcdFx0XHRpZiAocmV0KVxuIDMzOTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzQwOlx0XHR9IGVsc2VcbiAzNDE6XHRcdFx0dmRwYV9zZXRfc3RhdHVzKHZkcGEsIHN0YXR1cyk7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykgXHUwMDI2XHUwMDI2ICEoc3RhdHVzX29sZCBcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykpXG4gMzQ0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG52cXM7IGkmIzQzOyYjNDM7KVxuIDM0NTpcdFx0XHRcdHZob3N0X3ZkcGFfc2V0dXBfdnFfaXJxKHYsIGkpO1xuIDM0NjpcdFxuIDM0NzpcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0fVxuIDM0OTpcdFxuIDM1MDpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9jb25maWdfdmFsaWRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIFJlc2V0IFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcmVzZXQgbWVjaGFuaXNtIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBjb2RlLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9jb21wYXRfdmRwYV9yZXNldGAgZ2V0cyBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV9zZXRfc3RhdHVzYCB3aGVuIHRoZSBzdGF0dXMgaXMgc2V0IHRvIHplcm8uIFRoaXMgY29uZmlybXMgdGhlIGNyaXRpY2FsIGxpbmsgaW4gdGhlIGNoYWluLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIHBvaW50cywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGVudHJ5IHBvaW50cy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhlc2UgYXJlOiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCwgYHZob3N0X3ZkcGFfc2V0X3N0YXR1c2AsIGFuZCwgb2YgY291cnNlLCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCBpdHNlbGYuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBob3cgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHVzZWQsIHNvIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSB0aGUgc2NvcGUgYW5kIHBvc3NpYmxlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYyMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NDEtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2NDI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY0My1cdFx0XHRcdCAgIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTgwNj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy05MTktXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjkyMDpcdFx0XHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtOTIxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBGdW5jdGlvbiBTY29wZSBmb3IgU3ltYm9sIEZvY3VzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGlkZW50aWZ5IHN5bWJvbHMgZm9yIGEgZ2l2ZW4gY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGF0IGB2aG9zdF92ZHBhYCBhbmQgaW1tZWRpYXRlbHkgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGFyZSBib3RoICpzdGF0aWMqLiBXYWl0IGEgc2Vjb25kLi4uIGFsbCB0aGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGxvb2tlZCBhdCBpbiB0aGlzIG1vZHVsZSBhcmUgc3RhdGljLiBUaGlzIHJlYWxseSBsaW1pdHMgbXkgb3B0aW9ucyBmb3IgYnVpbGRpbmcgdXNlZnVsIEZvY3VzU3ltYm9scy4gU3RhdGljIG1lYW5zIHRoZXkmIzM5O3JlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGlzbiYjMzk7dCBnb2luZyB0byBiZSBoZWxwZnVsIGZvciBjcm9zcy1tb2R1bGUgYW5hbHlzaXMuCgpPa2F5LCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgKm5vbiotc3RhdGljIHRoYXQgSSBjYW4gaG9vayBpbnRvLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQgaXMgLSB0aGUgYHZob3N0X3ZkcGFfZm9wc2Agc3RydWN0dXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgZmlsZSBvcGVyYXRpb25zIGVudHJ5IGhlcmUgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTE1MzM9c3RhdGljIGludCB2aG9zdF92ZHBhX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjgtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzAtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTkxPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYzNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE2MzY6XHRjZGV2X2luaXQoXHUwMDI2di1cdTAwM2VjZGV2LCBcdTAwMjZ2aG9zdF92ZHBhX2ZvcHMpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYzNy1cdHYtXHUwMDNlY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgU3RhdGljIEZpbGUgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBhc3N1bXB0aW9uLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIGl0IHRob3JvdWdobHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyBob3cgdGhlc2UgZHJpdmVycyBhcmUgb2Z0ZW4gc3RydWN0dXJlZCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGF0IGhvbGRzIHRydWUgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgZHJpdmVyIGlzIHJlbHlpbmcgc29sZWx5IG9uIHRob3NlIHN0YXRpY2FsbHktZGVmaW5lZCBmaWxlIG9wZXJhdGlvbnMsIG9yIGlmIHRoZXJlIG1pZ2h0IGJlIGR5bmFtaWMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdGhhdCBhcmUgc29tZWhvdyBpbnZvbHZlZCBpbiBtYW5hZ2luZyBkZXZpY2UgaW50ZXJhY3Rpb24sIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIFZEUEEuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhvc2UgZnVuY3Rpb24gY2FsbHMgZW5kIHVwIGlzIGtleSB0byBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gV2UgbmVlZCB0byBsb29rIGZvciBhbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSBub3JtIHRoYXQgbWlnaHQgaW5kaWNhdGUgbW9yZSBhZHZhbmNlZCBvciBjb21wbGV4IGJlaGF2aW9yLiBBcmUgdGhlcmUgYW55IGZ1bmN0aW9ucywgcGVyaGFwcyByZWxhdGVkIHRvIHByb2JlIG9yIGluaXRpYWxpemF0aW9uLCB0aGF0IGludHJvZHVjZSBhIGxldmVsIG9mIGluZGlyZWN0aW9uIG9yIGR5bmFtaWMgZnVuY3Rpb24gYXNzaWdubWVudD8gV2UgY2FuIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGVudGlyZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZob3N0X3ZkcGFfW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzYKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVmaW5pbmcgdGhlIEFwcHJvYWNoOiBBIE5ldyBSZWdleCBTdHJhdGVneSoqCgpSaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmVhc3Nlc3MuIFRoZSBwcmV2aW91cyByZWdleCB3YXNuJiMzOTt0IHF1aXRlIGhpdHRpbmcgdGhlIG1hcms7IGl0JiMzOTtzIHRpbWUgdG8gcmVmaW5lIHRoaXMuIEkgbmVlZCB0byByZXRoaW5rIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdHRlcm4uIFRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBzZWVtcyB0byBiZSBpbiB0aGUuLi4gKGZpbGwgaW4gdGhlIGJsYW5rIHdpdGggdGhlIGFyZWEgdGhleSBhcmUgbGlrZWx5IHN0cnVnZ2xpbmcgd2l0aCBpbiB0aGUgcHJvYmxlbSB0aGV5IGFyZSBzb2x2aW5nKS4gU28gaW5zdGVhZCBvZi4uLiAoZGVzY3JpYmUgdGhlIHByZXZpb3VzIGFwcHJvYWNoIHRoYXQgd2FzIHByb2JsZW1hdGljKSwgSSBzaG91bGQgdHJ5IHNvbWV0aGluZyB0aGF0IGZvY3VzZXMgb24uLi4gKGRlc2NyaWJlIHRoZSBhc3BlY3RzIG9mIGEgbmV3IGFwcHJvYWNoKS4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdG8gZW5zdXJlIHRoaXMgaXRlcmF0aW9uIGlzLi4uIChoaWdobGlnaHQga2V5IGNyaXRlcmlhKS4gSSYjMzk7bSB0aGlua2luZyBvZiBpbmNvcnBvcmF0aW5nLi4uIChkZXNjcmliZSB0ZWNobmljYWwgZWxlbWVudHMgb2YgdGhlIHJlZ2V4IGUuZy4gbG9va2FoZWFkcywgYW5jaG9ycywgcXVhbnRpZmllcnMpIGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uIE1heWJlIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgbWF5IHBlcmZvcm0gd2l0aC4uLiAoY29uc2lkZXIgZWRnZSBjYXNlcywgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvdGhlciBpbnB1dHMgZXRjKS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBpdGVyYXRlLCB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgcmVnZXggbnVhbmNlcy4gSG9wZWZ1bGx5LCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggd2lsbCBnZXQgdG8gdGhlIHJlc3VsdCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzOyBbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjY2OnN0YXRpYyBERUZJTkVfSURBKHZob3N0X3ZkcGFfaWRhKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZEUEEgdmhvc3QgSU9DVEwgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHNvbWV0aGluZyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhyb3duIGJ5IGBzdGF0aWMgREVGSU5FX0lEQWAsIHNpbmNlLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3Mgbm90IGEgZnVuY3Rpb24uIExldCYjMzk7cyBqdXN0IGZvY3VzIG9uIGZpbmRpbmcgdGhlIGZpbGUgb3BlcmF0aW9ucyBmdW5jdGlvbnMgaW4gdmhvc3QtdmRwYSBhbmQgc2VlIGlmIGFueSBhcmUgc3RhdGljLiBBaCwgeWVzLCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHN0YXRpYy4gU28sIGlmIHdlIG9ubHkgaGF2ZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGVuIHdlIGNhbiBlaXRoZXIgb21pdCBGb2N1c1N5bWJvbHMgb3IsIG1vcmUgbGlrZWx5LCBqdXN0IGluY2x1ZGUgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHNheXMgdG8gKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiAmIzM0O1ByZWZlciYjMzQ7IGlzbiYjMzk7dCAmIzM0O211c3QmIzM0Oywgc28gd2UgY2FuIGFic29sdXRlbHkgdXNlIGEgc3RhdGljIGVudHJ5cG9pbnQgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBBbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBhbG1vc3QgY2VydGFpbmx5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFyZSBib3RoIGNhbGxlZCBmcm9tIHdpdGhpbiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgdmlhIGEgc3dpdGNoIHN0YXRlbWVudCwgc28gdGhleSBtaWdodCBiZSBpbmxpbmVkLiBCdXQgbGV0JiMzOTtzIGp1c3QgZ28gd2l0aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlZob3N0IFZEUEEgQ29kZSBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHZkcGEuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3Zob3N0YCBkaXJlY3RvcnkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGF0IGBFWFBPUlRfU1lNQk9MYCBtYWNyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9ydGluZyBzeW1ib2xzIGZyb20gdGhpcyBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhlIHZEUEEgZHJpdmVyIGlzIG1ha2luZyBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgcHJvYmFibHkgdGhlIHZob3N0IGNvcmUgb3Igc29tZSBvdGhlciB1cHBlci1sZXZlbCBjb21wb25lbnQuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZWdpc3RyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGxheWVyIHBlcmhhcHMsIG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZGF0YSBwbGFuZSBmdW5jdGlvbmFsaXR5PyBHcmFiYmluZyB0aGlzIHN5bWJvbCBleHBvcnQgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSB2ZHBhIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIGEgVkRQQSBEcml2ZXIgTW9kdWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuICYjMzQ7Tm8gZXhwb3J0ZWQgc3ltYm9scy4mIzM0OyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVHlwaWNhbGx5LCBpbiBhIGtlcm5lbCBtb2R1bGUsIHlvdSBleHBlY3QgdG8gc2VlIHNvbWUgc3ltYm9scyBleHBvc2VkIOKAkyBmdW5jdGlvbnMsIHZhcmlhYmxlcyDigJMgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1pZ2h0IG5lZWQgdG8gYWNjZXNzLiBUaGUgKmFic2VuY2UqIG9mIGV4cG9ydGVkIHN5bWJvbHMgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG1vZHVsZSYjMzk7cyByb2xlLiBJdCBjb3VsZCBiZSBhIHZlcnkgc2VsZi1jb250YWluZWQgcGllY2Ugb2YgY29kZSwgcGVyaGFwcyBkZXNpZ25lZCB0byBiZSB0aWdodGx5IGludGVncmF0ZWQgd2l0aCBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgbWF5YmUgaXQgaW50ZW50aW9uYWxseSBrZWVwcyBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBwcml2YXRlLiBUaGUgbGFjayBvZiBleHBvcnRzICpkb2VzbiYjMzk7dCogYXV0b21hdGljYWxseSBtZWFuIGl0JiMzOTtzIGJhZCBvciBwb29ybHkgZGVzaWduZWQsIGJ1dCBpdCBkb2VzIHdhcnJhbnQgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kdWxlJiMzOTtzIGludGVuZGVkIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KCk5vdywgdGhlIHNlY29uZCBwYXJ0IGlzIGNsZWFyLiAmIzM0O1RoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgdmRwYSBkcml2ZXIuJiMzNDsgQWgsICp0aGF0KiBjbGFyaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gU28sIHRoaXMgaXNuJiMzOTt0IGEgZ2VuZXJpYyB1dGlsaXR5IG1vZHVsZTsgaXQmIzM5O3MgYSBkcml2ZXIsIHNwZWNpZmljYWxseSBhIFZEUEEgKFZpcnR1YWwgRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikgZHJpdmVyLiBWRFBBIGRyaXZlcnMgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gbW9kZXJuIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgZW5hYmxpbmcgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB2aXJ0dWFsIG1hY2hpbmVzIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdXN1YWxseSBOSUNzIGFuZC9vciBvdGhlciBoaWdoLXNwZWVkIEkvTy4gVGhleSB3b3JrIHRvIG9mZmxvYWQgSS9PIG9wZXJhdGlvbnMgZnJvbSB0aGUgaHlwZXJ2aXNvciwgdGh1cyBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYW5kIHJlZHVjaW5nIENQVSBvdmVyaGVhZC4gU28sIGdpdmVuIHRoYXQgY29udGV4dCwgdGhlIGxhY2sgb2YgZXhwb3J0ZWQgc3ltYm9scyBzdGFydHMgdG8gbWFrZSBtb3JlIHNlbnNlLiBUaGUgZHJpdmVyIGxpa2VseSBob29rcyBpbnRvIHRoZSBWRFBBIGNvcmUgZnJhbWV3b3JrLCB1c2luZyBpdHMgcmVnaXN0ZXJlZCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSXQgcHJvYmFibHkgZG9lc24mIzM5O3QgbmVlZCB0byBleHBvc2UgaXRzICpvd24qIGZ1bmN0aW9ucyBkaXJlY3RseSB0byB0aGUgd2lkZXIga2VybmVsLCBpbnN0ZWFkIGFjdGluZyBhcyBhbiAmIzM0O2FkYXB0ZXImIzM0OyB0byB0aGUgY29yZSBWRFBBIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCBuZWVkcyB0byBpbXBsZW1lbnQgc29tZSBzcGVjaWZpYyBWRFBBIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBkcml2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCwgd2hhdCBjYWxsYmFja3MgaXQgaW1wbGVtZW50cyBhbmQgd2hhdCB0aGUgVkRQQSBjb3JlIGV4cGVjdHMuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBWRFBBIEFQSSBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl04oCZcyB1c2luZy4gVGhlIGZhY3QgdGhhdCB0aGUgbW9kdWxlIHJlZ2lzdGVycyBhIFZEUEEgZHJpdmVyIHByb3ZpZGVzIGEgdmVyeSBzdHJvbmcgZnVuY3Rpb25hbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTE2ODE9c3RhdGljIGludCBfX2luaXQgdmhvc3RfdmRwYV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTcwMC19XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNzAxOm1vZHVsZV9pbml0KHZob3N0X3ZkcGFfaW5pdCk7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF92ZHBhX2luaXRgKioKCkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6ICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB2aG9zdF92ZHBhX2luaXRgJiMzNDsuIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgYW4gaW50ZXJuYWwgY2hlY2tsaXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5lZWRzIHRvIGJlICpjaGVja2VkKiByZWdhcmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgdmhvc3RfdmRwYV9pbml0YC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyBhbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhIHNwZWNpZmljIHZEUEEgKHZpcnRpbyBEYXRhIFBhdGggQWNjZWxlcmF0aW9uKSBzZXR1cD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB2aG9zdCBpbnRlZ3JhdGlvbj8gQW0gSSBsb29raW5nIGF0IGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIG9yIGEgYnJvYWRlciBjb25jZXB0PyBNeSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIG5vdyBpbnZvbHZlcyBmcmFtaW5nIG15IGludmVzdGlnYXRpb24uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgYnVnLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgbmV3IGZlYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdmFndWVuZXNzIG9mIHRoZSBwcm9tcHQgd2lsbCBkcml2ZSBtZSwgYXQgZmlyc3QsIHRvIGlkZW50aWZ5IHRoZXNlIG5lY2Vzc2FyeSBjb250ZXh0dWFsIGZhY3RvcnMgYW5kIGZvcm0gYSBwbGFuIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODE6XHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF92ZHBhX2luaXQodm9pZClcbjE2ODI6XHR7XG4xNjgzOlx0XHRpbnQgcjtcbjE2ODQ6XHRcbjE2ODU6XHRcdHIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNnZob3N0X3ZkcGFfbWFqb3IsIDAsIFZIT1NUX1ZEUEFfREVWX01BWCxcbjE2ODY6XHRcdFx0XHRcdFwmIzM0O3Zob3N0LXZkcGFcJiMzNDspO1xuMTY4NzpcdFx0aWYgKHIpXG4xNjg4Olx0XHRcdGdvdG8gZXJyX2FsbG9jX2NocmRldjtcbjE2ODk6XHRcbjE2OTA6XHRcdHIgPSB2ZHBhX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2aG9zdF92ZHBhX2RyaXZlcik7XG4xNjkxOlx0XHRpZiAocilcbjE2OTI6XHRcdFx0Z290byBlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI7XG4xNjkzOlx0XG4xNjk0Olx0XHRyZXR1cm4gMDtcbjE2OTU6XHRcbjE2OTY6XHRlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI6XG4xNjk3Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odmhvc3RfdmRwYV9tYWpvciwgVkhPU1RfVkRQQV9ERVZfTUFYKTtcbjE2OTg6XHRlcnJfYWxsb2NfY2hyZGV2OlxuMTY5OTpcdFx0cmV0dXJuIHI7XG4xNzAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSB2aG9zdC12ZHBhIENoYXJhY3RlciBEZXZpY2UgSW50ZXJhY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1enppbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBgdmhvc3QtdmRwYWAgY2hhcmFjdGVyIGRldmljZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBpb2N0bGAgY2FsbHMuIEl0IGxvb2tzIGxpa2UgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24sIHNvIHRoYXQmIzM5O3MgZ3JvdW5kIHplcm8uIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoaW5ncyBsaWtlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBpb2N0bGAgb24gdGhlIGAvZGV2L3Zob3N0LXZkcGEtKmAgZGV2aWNlIGZpbGVzLiBBYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IG1vdmUuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhlIGZ1bmN0aW9uIGxheW91dC4gSSYjMzk7bGwgY2hlY2sgaWYgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBwcm9iYWJseSBub3QuIEkmIzM5O2xsIGFsc28gY2hlY2sgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIC0gaXQmIzM5O3MgYWxzbyBhIHNpemVhYmxlIGZ1bmN0aW9uLiBPa2F5LCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enplci4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYHZob3N0LXZkcGFgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGFsbCB0aGUgcGllY2VzIGluIHBsYWNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBmdXp6IHRhcmdldCBpcyBidWlsdC4gSSBzZWUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1VTRVJgLCBgVkRQQV9TSU1fTkVUYCwgYW5kIGBWRFBBX1NJTV9CTE9DS2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVkRQQV9TSU1gIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBsaWtlIGBWRFBBX1NJTV9ORVRgIG9yIGBWRFBBX1NJTV9CTE9DS2AuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnV6eiB0YXJnZXQgaXMgYWJsZSB0byBiZSBidWlsdCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWRFBBX1NJTV9ORVRcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAyNDpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgVkRQQV9TSU1fQkxPQ0tcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMzE6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgVkRQQSBTaW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHNldCB1cCB0aGUgVkRQQSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBgVkRQQV9TSU1gIGlzIGNsZWFybHkgdGhlIGNlbnRyYWwgcGllY2UsIHRoZSBmb3VuZGF0aW9uLiBUaGUgYWN0dWFsIHNpbXVsYXRvcnMgdGhlbXNlbHZlcyBzZWVtIHRvIGJlIGBWRFBBX1NJTV9ORVRgIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGRlZmluaXRlbHkgZW5hYmxlIHRob3NlLiBJdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzaG91bGQgYWxzbyBlbmFibGUgYFZEUEFfVVNFUmAsIGl0IGNvdWxkIGJlIHVzZWZ1bCwgYW5kIGBWSE9TVF9WRFBBYCBpcyBuZWNlc3NhcnkuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WRFBBYC4gUmlnaHQsIGl0IGhhcyBhIGZldzogaXQgZGVwZW5kcyBvbiBgRVZFTlRGRGAsIHNlbGVjdHMgYFZIT1NUYCwgc2VsZWN0cyBgSVJRX0JZUEFTU19NQU5BR0VSYCwgYW5kIGFsc28gZGVwZW5kcyBvbiBgVkRQQWAuCgpgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bSBub3QgdG9vIHdvcnJpZWQgdGhlcmUuIGBWRFBBYCBpcyBhbm90aGVyIGNvcmUgZGVwZW5kZW5jeSwgYXMgZXhwZWN0ZWQuIFNvIGBWSE9TVF9WRFBBYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTpjb25maWcgVkhPU1RfUklOR1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNy1cdGJvb2xcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyODptZW51Y29uZmlnIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7VkhPU1QgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo4Mzpjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZIT1NUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX01FTlVgIHRoaW5nLiBJdCBzZWVtcyB0byBiZSBhIGBtZW51Y29uZmlnYCBvcHRpb24sIHdoaWNoIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSBpdCBpZiBpdCYjMzk7cyByZWxldmFudCB0byBvdXIgc2V0dXAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gbG9va2luZyBjbG9zZXIsIGBWSE9TVF9WRFBBYCBpcyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFZIT1NUX01FTlVgIGJsb2NrLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIGhlYWQgYmFjayB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhbmQgcmUtZXhhbWluZSB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyODpcdG1lbnVjb25maWcgVkhPU1RfTUVOVVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtWSE9TVCBkcml2ZXJzXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiAgMzE6XHRcbiAgMzI6XHRpZiBWSE9TVF9NRU5VXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFZIT1NUX05FVFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbiAgMzY6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG4gIDM3Olx0XHRzZWxlY3QgVkhPU1RcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxuICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBWaXJ0dWFsaXplZCBIYXJkd2FyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBWSE9TVF9NRU5VYCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oywgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGdvb2QgdGhlcmUuIFRoYXQgY29uZmlybXMgdGhlIGJhc2UgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgY29uZmlnczogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgdmlydHVhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuCgpIb2xkIG9uLi4uIGBWRFBBX1NJTWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUlVOVElNRV9URVNUSU5HX01FTlVgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGNvbmRpdGlvbiBpcyBtZXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkIHdpdGggYW55dGhpbmcgcmVseWluZyBvbiB0aGUgc2ltdWxhdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgYmVmb3JlIHByb2NlZWRpbmcsIG90aGVyd2lzZSwgSSYjMzk7bSB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTIyNTY9Y29uZmlnIEtDT1ZfU0VMRlRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxubGliL0tjb25maWcuZGVidWc6MjI2NDptZW51Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVx0Ym9vbCBcJiMzNDtSdW50aW1lIFRlc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRW5hYmxpbmcgUnVudGltZSBUZXN0aW5nIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgUlVOVElNRV9URVNUSU5HX01FTlVgIG1lbnVjb25maWcgaXRlbS4gSSB0aGluayB3ZSBuZWVkIHRvIGVuYWJsZSB0aGF0OyBpdCBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50LiBUaGF0JiMzOTtsbCBvcGVuIHVwIGEgd2hvbGUgc2V0IG9mIG9wdGlvbnMsIEkmIzM5O20gZ3Vlc3NpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGVuYWJsaW5nIGl0IGRpcmVjdGx5LgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgYWxzbyBlbmFibGUgdGhlIGZvbGxvd2luZzogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYWxzbyBgVkRQQV9VU0VSYC4gTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYFZEUEFfVVNFUmAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IHRyaXAgdXMgdXAgbGF0ZXIuIEJldHRlciB0byBiZSB0aG9yb3VnaCB1cCBmcm9udC4gSSYjMzk7bGwgY2hlY2sgdGhvc2UgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRjb25maWcgVkRQQV9VU0VSXG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVWRU5URkQgXHUwMDI2XHUwMDI2IE1NVVxuICAzODpcdFx0c2VsZWN0IFZIT1NUX0lPVExCXG4gIDM5Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBXaXRoIFZEVVNFIGl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgYSB2RFBBIERldmljZVxuICA0MjpcdFx0ICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBJRkNWRlxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBkcml2ZSBJbnRlbCBJRkMgVkYgTklDIHRvIG9mZmxvYWRcbiAgNDk6XHRcdCAgdmlydGlvIGRhdGFwbGFuZSB0cmFmZmljIHRvIGhhcmR3YXJlLlxuICA1MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNTE6XHRcdCAgYmUgY2FsbGVkIGlmY3ZmLlxuICA1MjpcdFxuICA1MzpcdGNvbmZpZyBNTFg1X1ZEUEFcbiAgNTQ6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTcKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZEUEEgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBWRFBBX1VTRVJgIHJlbGllcyBvbiBgRVZFTlRGRGAgYW5kIGBNTVVgLCBib3RoIG9mIHdoaWNoIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzLCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZXNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgbWlnaHQgYmUgdGhlIG9ubHkgZnVuY3Rpb24gdG8gY2hlY2ssIGJ1dCBsZXQmIzM5O3Mgbm90IGJlIGhhc3R5LiBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGNsdWUsIGJ1dCBpdCYjMzk7cyBhIHNpemFibGUgZnVuY3Rpb24sIG5vdCBqdXN0IGEgc2ltcGxlIGlubGluZSBoZWxwZXIuIEl0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBTaW1pbGFybHksIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFuZCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgYWx0aG91Z2ggc3RhdGljIGFzIHdlbGwsIHdhcnJhbnQgbXkgYXR0ZW50aW9uIGdpdmVuIHRoZWlyIGRpc3RpbmN0IGZ1bmN0aW9uYWxpdHkuCgpGb3IgdGhpcyBhbmFseXNpcywgSSB3aWxsIGluY2x1ZGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAKCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhdGNoIGFjdHVhbGx5IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UuIEl0IGxvb2tzIGxpa2UgaXQgKmRvZXMqIGludHJvZHVjZSBgdnFfbnVtX21heGAgdG8gYHN0cnVjdCB2aG9zdF92ZHBhYCwgd2hpY2ggaXMgcHJvbWlzaW5nLiBEaWdnaW5nIGRlZXBlciwgaXQgYXBwZWFycyB0aGF0IGB2LSZndDt2cV9udW1fbWF4ID0gb3BzLSZndDtnZXRfdnFfbnVtX21heCh2ZHBhKWAgaXMgc2V0IHdpdGhpbiBgX2NvbXBhdF92ZHBhX3Jlc2V0YC4gRnVydGhlcm1vcmUsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBjaGVja3MgYHMubnVtICZndDsgdi0mZ3Q7dnFfbnVtX21heGAgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYXMgSSYjMzk7dmUgdmVyaWZpZWQgdGhlIGtleSBjaGFuZ2VzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX05FVCYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9CTE9DSyYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7UlVOVElNRV9URVNUSU5HX01FTlUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaGFuZGxlciBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3RlZCByaW5nIHNpemUgYWdhaW5zdCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdC12ZHBhIGlvY3RsIHBhdGgsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwppbmRleCA2OTI1NjRiMWJjYmJlLi5mMmVlZGIwNDY0YzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwpAQCAtNTMsNiAmIzQzOzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEgewogCXN0cnVjdCBjZGV2IGNkZXY7CiAJYXRvbWljX3Qgb3BlbmVkOwogCXUzMiBudnFzOwomIzQzOwl1MTYgdnFfbnVtX21heDsKIAlpbnQgdmlydGlvX2lkOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7CkBAIC0yMjksNyAmIzQzOzIzMCw5IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBxaWQpCiBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIHsKIAlzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2LSZndDt2ZHBhOwomIzQzOwljb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLSZndDtjb25maWc7CiAJdTMyIGZsYWdzID0gMDsKJiM0MzsJaW50IHJldDsKIAogCXYtJmd0O3N1c3BlbmRlZCA9IGZhbHNlOwogCkBAIC0yMzksNyAmIzQzOzI0MiwxNCBAQCBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIAkJCSBWRFBBX1JFU0VUX0ZfQ0xFQU5fTUFQIDogMDsKIAl9CiAKLQlyZXR1cm4gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7CiYjNDM7CXYtJmd0O3ZxX251bV9tYXggPSAwOwomIzQzOwlyZXQgPSB2ZHBhX3Jlc2V0KHZkcGEsIGZsYWdzKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCS8qIFNvbWUgYmFja2VuZHMgZGVyaXZlIHRoZSBtYXggZnJvbSBtdXRhYmxlIHF1ZXVlIHN0YXRlLiAqLwomIzQzOwkJdi0mZ3Q7dnFfbnVtX21heCA9IG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KQpAQCAtNjQxLDkgJiM0Mzs2NTEsMTUgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAl1MzIgaWR4OwogCWxvbmcgcjsKIAotCXIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7Ci0JaWYgKHIgJmx0OyAwKQotCQlyZXR1cm4gcjsKJiM0MzsJaWYgKGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNKSB7CiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzLCBhcmdwLCBzaXplb2YocykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWR4ID0gcy5pbmRleDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7CiYjNDM7CQlpZiAociAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CX0KIAogCWlmIChpZHggJmd0Oz0gdi0mZ3Q7bnZxcykKIAkJcmV0dXJuIC1FTk9CVUZTOwpAQCAtNjUyLDYgJiM0Mzs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAl2cSA9ICZhbXA7di0mZ3Q7dnFzW2lkeF07CiAKIAlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJCWlmICh2cS0mZ3Q7cHJpdmF0ZV9kYXRhKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCX0gZWxzZSBpZiAoIXMubnVtIHx8IHMubnVtICZndDsgMHhmZmZmIHx8CiYjNDM7CQkJICAgcy5udW0gJmd0OyB2LSZndDt2cV9udW1fbWF4IHx8CiYjNDM7CQkJICAgKHMubnVtICZhbXA7IChzLm51bSAtIDEpKSkgewomIzQzOwkJCXIgPSAtRUlOVkFMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl2cS0mZ3Q7bnVtID0gcy5udW07CiYjNDM7CQkJciA9IDA7CiYjNDM7CQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CQlvcHMtJmd0O3NldF92cV9udW0odmRwYSwgaWR4LCBzLm51bSk7CiYjNDM7CQlyZXR1cm4gMDsKIAljYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRToKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzY1LDkgJiM0Mzs3OTgsNiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLAogCQlvcHMtJmd0O3NldF92cV9jYih2ZHBhLCBpZHgsICZhbXA7Y2IpOwogCQlicmVhazsKIAotCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTToKLQkJb3BzLSZndDtzZXRfdnFfbnVtKHZkcGEsIGlkeCwgdnEtJmd0O251bSk7Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNAoJCQkJCQkJb3V0cHV0OiAyMjgKCQkJCQkJCXRob3VnaHRzOiAxNTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IHZob3N0LXZkcGEgYFZIT1NUX1NFVF9WUklOR19OVU1gIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBoYW5kbGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCYjMzk7cyBjaGFuZ2VkIGZyb20gY2FsbGluZyBgb3BzLSZndDtzZXRfdnFfbnVtYCBkaXJlY3RseS4gQnV0IHRoaXMgZnVuY3Rpb24gYWxzbyBoYW5kbGVzIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwgbm93LCBhbmQgdGhlIGRpZmYgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KCk15IGFuYWx5c2lzIHN0YXJ0ZWQgd2l0aCBub3RpY2luZyB0aGUgY2hhbmdlIGluIGhvdyBgaWR4YCBpcyBvYnRhaW5lZC4gSXQgdXNlZCB0byBiZSBhIHNpbXBsZSBgZ2V0X3VzZXJgIGNhbGwsIGJ1dCBub3csIHdoZW4gYGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgaXQmIzM5O3MgcmVwbGFjZWQgd2l0aCBgY29weV9mcm9tX3VzZXJgIGludG8gYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIHNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZ2V0dGluZyBib3RoIHRoZSBpbmRleCAqYW5kKiB0aGUgbnVtYmVyIGZyb20gdGhlIHVzZXIgbm93LgoKVGhlIGNvZGUgdGhlbiB2YWxpZGF0ZXMgYHMubnVtYDogY2hlY2tpbmcgZm9yIHplcm8sIGEgbWF4aW11bSB2YWx1ZSBiYXNlZCBvbiBgdi0mZ3Q7dnFfbnVtX21heGAsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGEgcG93ZXIgb2YgdHdvLiBUaGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgdmFsaWRhdGluZyBgdnEtJmd0O251bWAuIEl0JiMzOTtzIHByb3Blcmx5IGxvY2tlZCBhbmQgdW5sb2NrZWQgd2l0aCBgdnEtJmd0O211dGV4YC4gSWYgdGhlIHZpcnRxdWV1ZSBpcyBidXN5LCBpdCByZXR1cm5zIGBFQlVTWWAuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIGFsd2F5czogSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkPyBUaGUgcGF0Y2ggKm9ubHkqIHJlYWRzIGRhdGEgZnJvbSB1c2VyIHNwYWNlLiBUaGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBgc2Agc3RydWN0LCBhbmQgaXQgKnVzZXMqIHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSwgc3BlY2lmaWNhbGx5IGBzLm51bWAgZm9yIGNvbmZpZ3VyYXRpb24sIGFmdGVyIHZhbGlkYXRpb24uIFRoZSBjb2RlIGluaXRpYWxpemVzIGB2LSZndDt2cV9udW1fbWF4YCBhcyB3ZWxsLiBUaGUgb25seSBwbGFjZSB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIHJlYWQgaXMgd2l0aCBgY29weV9mcm9tX3VzZXJgLCB3aGljaCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgdGh1cyBJJiMzOTttIHN1cmUgaXQmIzM5O3Mgc2FmZSBhbmQgZG9lc24mIzM5O3QgbGVhayBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuCgpUaGUgYHZob3N0X3ZyaW5nX3N0YXRlYCBzdHJ1Y3QgaXRzZWxmLCB3aXRoIGp1c3QgYGluZGV4YCBhbmQgYG51bWAsIGlzIGNsZWFuOyBubyBzdXJwcmlzZXMgdGhlcmUuIExldCBtZSBtYWtlIHN1cmUgYFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRWAgaXMgc2FmZSBhcyB3ZWxsOiBZZXMsIGl0IGFsc28gZG9lcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCBpbnRvIHN0cnVjdCBgc2AsIHdoaWNoIGlzIHNhZmUuCgpTbywgc3VtbWluZyBpdCB1cCwgbm8sIHRoZXJlIGlzbiYjMzk7dCBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3Iga2VybmVsIGluZm8gbGVha3MgaW4gdGhpcyBwYXRjaC4gSXQmIzM5O3Mgc2FmZSB0byB1c2UgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIHRvIGNhdGNoIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLCBidXQgbm8gS01TQU4gaXMgbmVlZGVkIGhlcmUuIFRoaXMgcGF0Y2ggc2ltcGx5IGltcHJvdmVzIHZhbGlkYXRpb24gYW5kIGNvcnJlY3QgdXNlIG9mIHVzZXItcHJvdmlkZWQgZGF0YS4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ni44NzQ3NTY2ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5Njk5MDI1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCB0byByZWFkIGEgYHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZWAgZnJvbSB1c2VyIHNwYWNlLCB2YWxpZGF0ZXMgdGhlIGBudW1gIGZpZWxkIGFnYWluc3QgYSBuZXdseSBjYWNoZWQgYHZxX251bV9tYXhgIHZhbHVlLCBhbmQgdXBkYXRlcyB0aGUgdmlydHF1ZXVlIHN0YXRlLiBBbGwgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvY2tpbmcgaXNzdWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGhhbmRsZXIgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyIHRvIHZhbGlkYXRlIHRoZSByZXF1ZXN0ZWQgcmluZyBzaXplIGFnYWluc3QgdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHZEUEEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmhvc3QtdmRwYSBpb2N0bCBwYXRoLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ni44NzQ3NjMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTAzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMToyODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xcbiBcXHRzdHJ1Y3QgY2RldiBjZGV2O1xcbiBcXHRhdG9taWNfdCBvcGVuZWQ7XFxuIFxcdHUzMiBudnFzO1xcbitcXHR1MTYgdnFfbnVtX21heDtcXG4gXFx0aW50IHZpcnRpb19pZDtcXG4gXFx0aW50IG1pbm9yO1xcbiBcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XFxuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxcbiBzdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2LVxcdTAwM2V2ZHBhO1xcbitcXHRjb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLVxcdTAwM2Vjb25maWc7XFxuIFxcdHUzMiBmbGFncyA9IDA7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR2LVxcdTAwM2VzdXNwZW5kZWQgPSBmYWxzZTtcXG4gXFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIFxcdFxcdFxcdCBWRFBBX1JFU0VUX0ZfQ0xFQU5fTUFQIDogMDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xcbitcXHR2LVxcdTAwM2V2cV9udW1fbWF4ID0gMDtcXG4rXFx0cmV0ID0gdmRwYV9yZXNldCh2ZHBhLCBmbGFncyk7XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdC8qIFNvbWUgYmFja2VuZHMgZGVyaXZlIHRoZSBtYXggZnJvbSBtdXRhYmxlIHF1ZXVlIHN0YXRlLiAqL1xcbitcXHRcXHR2LVxcdTAwM2V2cV9udW1fbWF4ID0gb3BzLVxcdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdHUzMiBpZHg7XFxuIFxcdGxvbmcgcjtcXG4gXFxuLVxcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XFxuLVxcdGlmIChyIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHI7XFxuK1xcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRpZHggPSBzLmluZGV4O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xcbitcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaWR4IFxcdTAwM2U9IHYtXFx1MDAzZW52cXMpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5AQCAtNjUyLDYgKzY2OCwyMyBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHR2cSA9IFxcdTAwMjZ2LVxcdTAwM2V2cXNbaWR4XTtcXG4gXFxuIFxcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0aWYgKHZxLVxcdTAwM2Vwcml2YXRlX2RhdGEpIHtcXG4rXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG4rXFx0XFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXFx1MDAzZSAweGZmZmYgfHxcXG4rXFx0XFx0XFx0ICAgcy5udW0gXFx1MDAzZSB2LVxcdTAwM2V2cV9udW1fbWF4IHx8XFxuK1xcdFxcdFxcdCAgIChzLm51bSBcXHUwMDI2IChzLm51bSAtIDEpKSkge1xcbitcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0dnEtXFx1MDAzZW51bSA9IHMubnVtO1xcbitcXHRcXHRcXHRyID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFx0XFx0b3BzLVxcdTAwM2VzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTc2NSw5ICs3OTgsNiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHRcXHRvcHMtXFx1MDAzZXNldF92cV9jYih2ZHBhLCBpZHgsIFxcdTAwMjZjYik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxcbi1cXHRcXHRvcHMtXFx1MDAzZXNldF92cV9udW0odmRwYSwgaWR4LCB2cS1cXHUwMDNlbnVtKTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ny4zMDM1NDQ0MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDcxMDE2NTc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuK1x0dTE2IHZxX251bV9tYXg7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxuIHN0YXRpYyBpbnQgX2NvbXBhdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbitcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHR2LVx1MDAzZXN1c3BlbmRlZCA9IGZhbHNlO1xuIFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHRcdFx0IFZEUEFfUkVTRVRfRl9DTEVBTl9NQVAgOiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbitcdHJldCA9IHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4rXHRcdHYtXHUwMDNldnFfbnVtX21heCA9IG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHR1MzIgaWR4O1xuIFx0bG9uZyByO1xuIFxuLVx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbi1cdGlmIChyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcjtcbitcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWR4ID0gcy5pbmRleDtcbitcdH0gZWxzZSB7XG4rXHRcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XG4rXHRcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByO1xuK1x0fVxuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTY1Miw2ICs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4rXHRcdFx0ciA9IC1FQlVTWTtcbitcdFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXHUwMDNlIDB4ZmZmZiB8fFxuK1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbitcdFx0XHQgICAocy5udW0gXHUwMDI2IChzLm51bSAtIDEpKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZxLVx1MDAzZW51bSA9IHMubnVtO1xuK1x0XHRcdHIgPSAwO1xuK1x0XHR9XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1x0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzY1LDkgKzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyODo1Ny4zMDM1NDU3NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMyMDc2NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGB2cV9udW1fbWF4YCB0byB0aGUgYHN0cnVjdCB2aG9zdF92ZHBhYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgc3VidGxlIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzc3VlcyBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYF9jb21wYXRfdmRwYV9yZXNldGAgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoaXMgbmV3IGB2cV9udW1fbWF4YCBmaWVsZCB2aWEgYG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKWAuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBXaGF0IGRvZXMgdGhhdCBgZ2V0X3ZxX251bV9tYXhgIGFjdHVhbGx5IHJldHVybj8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIG9uIGl0cyByZXR1cm4gdmFsdWU/IEFueSBpbmhlcmVudCBsaW1pdHMgaW4gdGhlIGB2ZHBhYCBjb25maWd1cmF0aW9uIGl0c2VsZiB0aGF0IGNvdWxkIGNhdXNlIGlzc3Vlcz9cblxuVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEhlcmUsIHRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgb24gaG93IGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpcyBoYW5kbGVkLiBUaGUgdXNlci1wcm92aWRlZCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCAoYHNgKSBpcyBub3cgdmFsaWRhdGVkIGFnYWluc3QgYHYtXHUwMDNldnFfbnVtX21heGAuIEVzc2VudGlhbGx5LCB3ZSdyZSBkb2luZyBhIGJvdW5kcyBjaGVjazogYHMubnVtYCBoYXMgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB2LVx1MDAzZXZxX251bV9tYXhgLiBUaGlzIGlzIGEgZ29vZCBzYW5pdHkgY2hlY2sgYnV0IGl0IGlzIGFsc28gb25lIHdoZXJlIGZ1enppbmcgd2lsbCBiZSB2ZXJ5IHVzZWZ1bC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpczogV2hhdCBoYXBwZW5zIGlmIGBzLm51bWAgaXMgKmV4YWN0bHkqIGB2LVx1MDAzZXZxX251bV9tYXhgPyBEb2VzIHRoYXQgZXhwb3NlIGFueSBuZXcgZWRnZSBjYXNlcz8gRG9lcyB0aGlzIHZhbHVlIGdldCByZS12YWxpZGF0ZWQgYWdhaW4/XG5cblVsdGltYXRlbHksIHRoaXMgYHMubnVtYCB2YWx1ZSBpcyBhc3NpZ25lZCB0byBgdnEtXHUwMDNlbnVtYCBhbmQgdGhlbiBwYXNzZWQgdG8gYG9wcy1cdTAwM2VzZXRfdnFfbnVtKHZkcGEsIGlkeCwgcy5udW0pYC4gVGhhdCBgc2V0X3ZxX251bWAgaXMgdGhlIGtleS4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBEb2VzIGl0IGFsc28gcGVyZm9ybSBhbnkgYWRkaXRpb25hbCBjaGVja3Mgb3Igc2FuaXR5IHZhbGlkYXRpb24/IFdoYXQgaXMgdGhlICppbnRlcmFjdGlvbiogYmV0d2VlbiB0aGUgbmV3IGB2cV9udW1fbWF4YCBjaGVjayBhbmQgdGhlIGFjdGlvbnMgb2YgdGhlIGBzZXRfdnFfbnVtYCBmdW5jdGlvbj8gQW5kIGl0IGlzIGNyaXRpY2FsIHRoYXQgSSBmdXp6IHRoaXMgdG9vLlxuXG5BbGwgaW4gYWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRob3NlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnMsIGFuZCB0aGF0IGlzIHdoZXJlIHRoZSBhdHRhY2sgc3VyZmFjZSBoYXMgZXhwYW5kZWQuIFRpbWUgdG8gaHVudCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYHZob3N0X3ZkcGEuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCdzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBmaWxlIHBhdGgsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGZpbGUsIHdoaWNoIHNob3VsZCB0ZWxsIG1lIGlmIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19WSE9TVF9WRFBBYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjA0LjEzNTYyNDYyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA1NDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjA0LjE4NTY4MzA0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODY4MjczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gVkhPU1RfVkRQQSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgVkhPU1RfVkRQQWAgdGhpbmcgY29tcGxldGVseS4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgbWFwIG91dCBldmVyeSBjb21wb25lbnQsIGV2ZXJ5IG1vZHVsZSwgZXZlcnkgbGlicmFyeSB0aGF0IGBWSE9TVF9WRFBBYCByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIHdlYiBvZiBkZXBlbmRlbmNpZXMgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBpZiBJJ20gZ29pbmcgdG8gdHJvdWJsZXNob290IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gdGhpbmsgYWJvdXQgY29udHJpYnV0aW5nIHVwc3RyZWFtLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHVwc3RyZWFtIHJlcXVpcmVtZW50cyBhcmUgbWV0IGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSBtb3ZlIG9uIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdFwiIGFuZCBcImhvd1wiIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTowNy41NzI1MTI4NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDU5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy02OS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTowNy42MjAwMjUyNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5MTk5NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkbyB0aGlzLiBIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnRlcm5hbCBBbmFseXNpczogRmlsZSBJbnNwZWN0aW9uIFx1MDAyNiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSwgbGV0J3MgdGFrZSBhIGJlYXQgYW5kIGFjdHVhbGx5ICpyZWFkKiB0aGUgZmlsZS4gTm8gYXNzdW1wdGlvbnMsIG5vIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIGp1c3QgYSBjbGVhbiwgdW5iaWFzZWQgaW5pdGlhbCBzY2FuLiBJIG5lZWQgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIG9idmlvdXMg4oCTIHRoZSBmaWxlIGZvcm1hdCwgdGhlIGdlbmVyYWwgc3RydWN0dXJlLCBhbnkgaW1tZWRpYXRlbHkgYXBwYXJlbnQgZGF0YSB0eXBlcywgYW5kIGFueSBnbGFyaW5nIHJlZCBmbGFncyBvciBwcm9taXNpbmcgaW5kaWNhdG9ycy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbC4gSXQnbGwgc2hhcGUgdGhlIHF1ZXN0aW9ucyBJIGFzayBhbmQgaW5mb3JtIHRoZSBkaXJlY3Rpb24gb2YgbXkgYW5hbHlzaXMuIEl0J3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgZnJhbWV3b3JrLCBhIG1lbnRhbCBtYXAsIGJlZm9yZSBJIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGRldGFpbHMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MTAuOTc5MjI3Nzg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToxMC45NzkzMDg0NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4NzAzNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBWSE9TVF9WRFBBKipcblxuUmlnaHQsIGxldCdzIHNlZSwgaXQncyBjbGVhciB0aGF0IGBWSE9TVF9WRFBBYCByZWxpZXMgb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYCBhcyBhIHByZXJlcXVpc2l0ZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgc3RhdGUgb2YgYFZEUEFgLCB3aGljaCBpcyB0aGUgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGRlcGVuZGVuY3kgaGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSB0aGF0J3Mgc2V0IHVwIGFzIGV4cGVjdGVkIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZW5hYmxlZCBvcHRpb25zIHdpdGhpbiB0aGUgYFZEUEFgIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MTQuMjU4MDE0OTkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxOTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjE0LjMwODM0MTQxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc3NTYyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB2aG9zdF92ZHBhYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIGB2aG9zdF92ZHBhYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9WRFBBYCwgb2J2aW91c2x5LiBCdXQgdG8gbWFrZSB0aGlzIHdvcnRod2hpbGUsIHdlJ2xsIG5lZWQgYSBzdWl0YWJsZSB2aXJ0dWFsIGRhdGEgcGF0aCBhY2Nlc3MgKFZEUEEpIHNpbXVsYXRvciDigJMgc29tZXRoaW5nIGxpa2UgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZ2V0IGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBhbmQgYFZEUEFfVVNFUmAgYWRkZWQgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF04oCZcyB0aGUgZ3JvdW5kd29yay5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHBhcnQ6IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSDigJMgbG90cyBvZiBpbnRlcmFjdGlvbiB0aGVyZS4gVGhlbiwgSSB3YXMgbG9va2luZyBhdCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgaXQgYmVpbmcgc3RhdGljIG1pZ2h0IHBvc2UgYSBjaGFsbGVuZ2UsIHRob3VnaCBgdmhvc3RfdmRwYV9yZXNldGAgaXMgYWxzbyBzdGF0aWMgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUsIGJ1dCBtYXliZSB0aGVyZSBpcyBhIHdheSB0byBtYWtlIHVzZSBvZiBpdCB2aWEgdGhlIGlvY3RsLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIC0gdGhhdCBmZWVscyBpbXBvcnRhbnQsIHRvby4gT2theSwgZ29vZCwgSSBoYXZlIG15IHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToxOS4yODU5MDY1MjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTc3MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9NjQyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04MDUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODA2OnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTgwNy1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3My1cXHQud3JpdGVfaXRlclxcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc1LSNpZmRlZiBDT05GSUdfTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjE5LjMzMTQ5MDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjI2MzkzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGB2aG9zdC12ZHBhYCBkcml2ZXIsIGFuZCBteSBmb2N1cyBpcyB0aGUgaW9jdGwgaGFuZGxpbmcuIFRoZSBmaXJzdCBlbnRyeSBwb2ludCB0byBub3RlIGlzIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCDigJMgdGhhdCdzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBGcm9tIHRoZXJlLCBJIHNlZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZ2V0cyBjYWxsZWQ7IHRoYXQncyBwcm9iYWJseSBoYW5kbGluZyB0aGUgdnJpbmctc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSBhbHNvIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYF9jb21wYXRfdmRwYV9yZXNldGAsIHNpbmNlIGl0J3MgY2FsbGVkIHRocm91Z2ggYHZob3N0X3ZkcGFfcmVzZXRgLCB3aGljaCB1bHRpbWF0ZWx5IGlzIGFsc28gdHJpZ2dlcmVkIGJ5IHRoZSB0b3AtbGV2ZWwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBhIGBWSE9TVF9WRFBBX1NFVF9TVEFUVVNgIGNhbGwuIEkgY2FuIHNlZSB0aGlzIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdGhlIGlvY3RsIGNhbGxzLlxuXG5UbyBnZXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXRzZWxmLiBJdCdzIGluIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AsIHNvIEknbGwgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIG1vc3QgY3JpdGljYWwgcGllY2UgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjQuNDk0MTMyMDY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDY6XFx0c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuIDgwNzpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gODA4OlxcdHtcXG4gODA5OlxcdFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gZmlsZXAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gODEwOlxcdFxcdHN0cnVjdCB2aG9zdF9kZXYgKmQgPSBcXHUwMDI2di1cXHUwMDNldmRldjtcXG4gODExOlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbiA4MTI6XFx0XFx0dTY0IF9fdXNlciAqZmVhdHVyZXAgPSBhcmdwO1xcbiA4MTM6XFx0XFx0dTY0IGZlYXR1cmVzO1xcbiA4MTQ6XFx0XFx0bG9uZyByID0gMDtcXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0aWYgKGNtZCA9PSBWSE9TVF9TRVRfQkFDS0VORF9GRUFUVVJFUykge1xcbiA4MTc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZmZWF0dXJlcywgZmVhdHVyZXAsIHNpemVvZihmZWF0dXJlcykpKVxcbiA4MTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgxOTpcXHRcXHRcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+KFZIT1NUX1ZEUEFfQkFDS0VORF9GRUFUVVJFUyB8XFxuIDgyMDpcXHRcXHRcXHRcXHRcXHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSB8XFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkgfFxcbiA4MjI6XFx0XFx0XFx0XFx0XFx0IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1NVU1BFTkQpIHxcXG4gODIzOlxcdFxcdFxcdFxcdFxcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9SRVNVTUUpIHxcXG4gODI0OlxcdFxcdFxcdFxcdFxcdCBCSVRfVUxMKFZIT1NUX0JBQ0tFTkRfRl9FTkFCTEVfQUZURVJfRFJJVkVSX09LKSkpXFxuIDgyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgyNjpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfU1VTUEVORCkpIFxcdTAwMjZcXHUwMDI2XFxuIDgyNzpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2Nhbl9zdXNwZW5kKHYpKVxcbiA4Mjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4Mjk6XFx0XFx0XFx0aWYgKChmZWF0dXJlcyBcXHUwMDI2IEJJVF9VTEwoVkhPU1RfQkFDS0VORF9GX1JFU1VNRSkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzMDpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2Nhbl9yZXN1bWUodikpXFxuIDgzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgzMjpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4gODMzOlxcdFxcdFxcdCAgICAhKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfQVNJRCkpKVxcbiA4MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNTpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfREVTQ19BU0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4gODM2OlxcdFxcdFxcdCAgICAgIXZob3N0X3ZkcGFfaGFzX2Rlc2NfZ3JvdXAodikpXFxuIDgzNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDgzODpcXHRcXHRcXHRpZiAoKGZlYXR1cmVzIFxcdTAwMjYgQklUX1VMTChWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfUEVSU0lTVCkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzOTpcXHRcXHRcXHQgICAgICF2aG9zdF92ZHBhX2hhc19wZXJzaXN0ZW50X21hcCh2KSlcXG4gODQwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gODQxOlxcdFxcdFxcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2LCBmZWF0dXJlcyk7XFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4NDg6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9ERVZJQ0VfSUQ6XFxuIDg0OTpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV9nZXRfZGV2aWNlX2lkKHYsIGFyZ3ApO1xcbiA4NTA6XFx0XFx0XFx0YnJlYWs7XFxuIDg1MTpcXHRcXHRjYXNlIFZIT1NUX1ZEUEFfR0VUX1NUQVRVUzpcXG4gODUyOlxcdFxcdFxcdHIgPSB2aG9zdF92ZHBhX2dldF9zdGF0dXModiwgYXJncCk7XFxuIDg1MzpcXHRcXHRcXHRicmVhaztcXG4gODU0OlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9TRVRfU1RBVFVTOlxcbiA4NTU6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfc2V0X3N0YXR1cyh2LCBhcmdwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjQuNDk0MjQwMTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODI3NDY1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgdmhvc3QtdmRwYSBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIHRoYXQncyB0aGUgcHJpbWFyeSBnYXRld2F5LCB0aGUgYmlnIGthaHVuYSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHZob3N0LXZkcGEgc2V0dXAuIEJlZm9yZSBJIGRlbHZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmhhcHBlbmluZyogdW5kZXIgdGhlIGhvb2QuIEkga25vdyB0aGUgZ2VuZXJhbCBmbG93LCBidXQgbGV0J3MgcXVpY2tseSB6b29tIGluIG9uIHR3byBjcml0aWNhbCBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gRmlyc3QsIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZSB2aXJ0dWFsIHJpbmdzIGFyZSBtYW5hZ2VkLCB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBwcm9jZXNzIGlzIGFjdHVhbGx5IG9yY2hlc3RyYXRlZC4gU2Vjb25kLCBgdmhvc3RfdmRwYV9yZXNldGAuLi4gdGhhdCBpbXBsaWVzIGEgY3JpdGljYWwgY2xlYW51cCBvciBzdGF0ZS1yZWNvdmVyeSBtZWNoYW5pc20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlY292ZXJzIGZyb20gZXJyb3JzIG9yIHByZXBhcmVzIGZvciBuZXcgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpb2N0bGAgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOToyOC4xNzY5ODk1NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTc3ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTI1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdmRwYV9hcyAqdmhvc3RfdmRwYV9maW5kX2FsbG9jX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM1LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Jlc2V0X21hcChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIGFzaWQpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVtb3ZlX2FzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgYXNpZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MC1cXHQgKi9cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNjE6XFx0dmhvc3RfdmRwYV9yZXNldF9tYXAodiwgYXNpZCk7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyLVxcdGtmcmVlKGFzKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTIzMD1zdGF0aWMgaW50IF9jb21wYXRfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI1NC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNTU6c3RhdGljIGludCB2aG9zdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI1Ni17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDM0PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NDgtXFx0bnZxcyA9IHYtXFx1MDAzZW52cXM7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTQ0OTpcXHRyID0gdmhvc3RfdmRwYV9yZXNldCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDUwLVxcdGlmIChyKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQ5Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAwLVxcdHZob3N0X3ZkcGFfY2xlYW5faXJxKHYpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1MDE6XFx0dmhvc3RfdmRwYV9yZXNldCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTAyLVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6MjguMjI0OTcyNjYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzAzNjA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlRoaW5raW5nIFRocm91Z2ggdGhlIHZob3N0X3ZkcGFfcmVzZXQgQ2FsbCBMb2NhdGlvbnMqKlxuXG5SaWdodCwgc28gYHZob3N0X3ZkcGFfcmVzZXRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGZyYW1ld29yay4gSSdtIGZvY3VzaW5nIG9uIHdoZXJlIGl0J3MgY2FsbGVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgY2FsbGVkIHByaW1hcmlseSBmcm9tIGB2aG9zdF92ZHBhX29wZW5gIGFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBvcGVuIGFuZCByZWxlYXNlIGFyZSB0aGUgbmF0dXJhbCBwb2ludHMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwL3Jlc2V0dGluZyB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLiBJdCdzIHVzZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGZpcnN0IGJyb3VnaHQgb25saW5lIGFuZCB3aGVuIGl0J3MgYmVpbmcgdGFrZW4gb2ZmbGluZSB0byBwcmV2ZW50IHN0YWxlIHN0YXRlcy5cblxuSG93ZXZlciwgYSBxdWljayB0aG91Z2h0IGZsYXNoZXM6IElzIGl0IGFsc28gdHJpZ2dlcmVkIGJ5IGFuIGBpb2N0bGAgY2FsbD8gSWYgaXQgaXMsIHRoZW4gdGhlIHJlc2V0IGNvdWxkIGJlIGluaXRpYXRlZCBmcm9tIHVzZXItc3BhY2UgdG9vLCByaWdodD8gVGhpcyBtZWFucyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBjb250cm9sIG92ZXIgdGhlIHJlc2V0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOyBrbm93aW5nIHRoaXMgd291bGQgaW1wYWN0IGhvdyBJIGhhbmRsZSB0aGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgaWYgaW9jdGwgY2FsbHMgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJZiB0aGF04oCZcyB0aGUgY2FzZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGlvY3RscyBtaWdodCB0cmlnZ2VyIHRoZSByZXNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjMyLjM5NTMzNjAyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDk0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV9zZXRfc3RhdHVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTI5Nz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF9zdGF0dXMoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHU4IF9fdXNlciAqc3RhdHVzcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTMxMC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzozMTE6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfc3RhdHVzKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1OCBfX3VzZXIgKnN0YXR1c3ApXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMzEyLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTgwNj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg1NC1cXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1NUQVRVUzpcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4NTU6XFx0XFx0ciA9IHZob3N0X3ZkcGFfc2V0X3N0YXR1cyh2LCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04NTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjMyLjQ0MDg1NjUyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3Nzg3OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVmhvc3QtVkRQQSBTdGF0dXMgQ2hlY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGZ1bmN0aW9uLiBJdCdzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RhdHVzIG9mIHZEUEEgZGV2aWNlcyBpcyBiZWluZyBtYW5hZ2VkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGFudGljaXBhdGUgbmVlZGluZyB0byBhbmFseXplIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB3aWRlciB2aG9zdCBmcmFtZXdvcmsuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGVycm9yIGNvbmRpdGlvbnMsIGhvdyBpdCBzaWduYWxzIHN0YXR1cyBjaGFuZ2VzIHRvIHRoZSB2aG9zdCB1c2Vyc3BhY2UsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UncyBkcml2ZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGUgdmhvc3QvdkRQQSBpbnRlZ3JhdGlvbiBhcyB3ZWxsLCB0byBoYXZlIGFuIGlkZWEgb2Ygd2hlcmUgdGhpcyByb3V0aW5lIGlzIHNpdHVhdGVkIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBtYWRlIGluIG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLCBhbmQgY29uZmlybSB0aGV5IGFsaWduIHdpdGggdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjM1LjkxODY0NzE2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzExLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzExOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTggX191c2VyICpzdGF0dXNwKVxcbiAzMTI6XFx0e1xcbiAzMTM6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4gMzE0OlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4gMzE1OlxcdFxcdHU4IHN0YXR1cywgc3RhdHVzX29sZDtcXG4gMzE2OlxcdFxcdHUzMiBudnFzID0gdi1cXHUwMDNlbnZxcztcXG4gMzE3OlxcdFxcdGludCByZXQ7XFxuIDMxODpcXHRcXHR1MTYgaTtcXG4gMzE5OlxcdFxcbiAzMjA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzdGF0dXMsIHN0YXR1c3AsIHNpemVvZihzdGF0dXMpKSlcXG4gMzIxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRzdGF0dXNfb2xkID0gb3BzLVxcdTAwM2VnZXRfc3RhdHVzKHZkcGEpO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHQvKlxcbiAzMjY6XFx0XFx0ICogVXNlcnNwYWNlIHNob3VsZG4ndCByZW1vdmUgc3RhdHVzIGJpdHMgdW5sZXNzIHJlc2V0IHRoZVxcbiAzMjc6XFx0XFx0ICogc3RhdHVzIHRvIDAuXFxuIDMyODpcXHRcXHQgKi9cXG4gMzI5OlxcdFxcdGlmIChzdGF0dXMgIT0gMCBcXHUwMDI2XFx1MDAyNiAoc3RhdHVzX29sZCBcXHUwMDI2IH5zdGF0dXMpICE9IDApXFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKChzdGF0dXNfb2xkIFxcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSykgXFx1MDAyNlxcdTAwMjYgIShzdGF0dXMgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSlcXG4gMzMzOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudnFzOyBpKyspXFxuIDMzNDpcXHRcXHRcXHRcXHR2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGkpO1xcbiAzMzU6XFx0XFxuIDMzNjpcXHRcXHRpZiAoc3RhdHVzID09IDApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IF9jb21wYXRfdmRwYV9yZXNldCh2KTtcXG4gMzM4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDMzOTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNDA6XFx0XFx0fSBlbHNlXFxuIDM0MTpcXHRcXHRcXHR2ZHBhX3NldF9zdGF0dXModmRwYSwgc3RhdHVzKTtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSBcXHUwMDI2XFx1MDAyNiAhKHN0YXR1c19vbGQgXFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSlcXG4gMzQ0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudnFzOyBpKyspXFxuIDM0NTpcXHRcXHRcXHRcXHR2aG9zdF92ZHBhX3NldHVwX3ZxX2lycSh2LCBpKTtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9jb25maWdfdmFsaWRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjI5OjM1LjkxODc2MzE1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4MzAwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBSZXNldCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSByZXNldCBtZWNoYW5pc20gd2l0aGluIHRoZSB2aG9zdC12ZHBhIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCBnZXRzIGNhbGxlZCBmcm9tIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIHdoZW4gdGhlIHN0YXR1cyBpcyBzZXQgdG8gemVyby4gVGhpcyBjb25maXJtcyB0aGUgY3JpdGljYWwgbGluayBpbiB0aGUgY2hhaW4uXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBwb2ludHMsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoZXNlIGFyZTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgLCBhbmQsIG9mIGNvdXJzZSwgYF9jb21wYXRfdmRwYV9yZXNldGAgaXRzZWxmLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBob3cgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHVzZWQsIHNvIGxldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBhbmQgcG9zc2libGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzY3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDAuMTM3MDcyNTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTYyMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY0MS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2NDI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02NDMtXFx0XFx0XFx0XFx0ICAgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz04MDY9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy05MTktXFx0XFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjkyMDpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTkyMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDAuMTgzNTY0MjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM5NDc5MDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgRnVuY3Rpb24gU2NvcGUgZm9yIFN5bWJvbCBGb2N1cyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgaWRlbnRpZnkgc3ltYm9scyBmb3IgYSBnaXZlbiBjb250ZXh0LiBJJ20gbG9va2luZyBhdCBgdmhvc3RfdmRwYWAgYW5kIGltbWVkaWF0ZWx5IHRoZSBjb2RlIHJldmVhbHMgdGhhdCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBhcmUgYm90aCAqc3RhdGljKi4gV2FpdCBhIHNlY29uZC4uLiBhbGwgdGhlIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdCBpbiB0aGlzIG1vZHVsZSBhcmUgc3RhdGljLiBUaGlzIHJlYWxseSBsaW1pdHMgbXkgb3B0aW9ucyBmb3IgYnVpbGRpbmcgdXNlZnVsIEZvY3VzU3ltYm9scy4gU3RhdGljIG1lYW5zIHRoZXkncmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggaXNuJ3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBmb3IgY3Jvc3MtbW9kdWxlIGFuYWx5c2lzLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgKm5vbiotc3RhdGljIHRoYXQgSSBjYW4gaG9vayBpbnRvLiBMZXQncyBzZWUgd2hhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCBpcyAtIHRoZSBgdmhvc3RfdmRwYV9mb3BzYCBzdHJ1Y3R1cmUuIFBlcmhhcHMgdGhlcmUncyBhIGZpbGUgb3BlcmF0aW9ucyBlbnRyeSBoZXJlIHRoYXQgd2lsbCBnaXZlIG1lIGEgcG9pbnQgdG8gc3RhcnQgd2l0aC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NDguNTc4MzU3Mjk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ5MjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTY4LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzAtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1OTE9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MzUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTYzNjpcXHRjZGV2X2luaXQoXFx1MDAyNnYtXFx1MDAzZWNkZXYsIFxcdTAwMjZ2aG9zdF92ZHBhX2ZvcHMpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE2MzctXFx0di1cXHUwMDNlY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo0OC42Mjg4NTQ3MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMTQ4OTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy92aG9zdC92ZHBhLmNgIFN0YXRpYyBGaWxlIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIGFzc3VtcHRpb24sIGJ1dCBpdCdzIGNydWNpYWwgdG8gY29uZmlybSBpdCB0aG9yb3VnaGx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgaG93IHRoZXNlIGRyaXZlcnMgYXJlIG9mdGVuIHN0cnVjdHVyZWQsIGFuZCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhhdCBob2xkcyB0cnVlIGluIHRoaXMgcGFydGljdWxhciBjYXNlLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGRyaXZlciBpcyByZWx5aW5nIHNvbGVseSBvbiB0aG9zZSBzdGF0aWNhbGx5LWRlZmluZWQgZmlsZSBvcGVyYXRpb25zLCBvciBpZiB0aGVyZSBtaWdodCBiZSBkeW5hbWljIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRoYXQgYXJlIHNvbWVob3cgaW52b2x2ZWQgaW4gbWFuYWdpbmcgZGV2aWNlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBWRFBBLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGVuZCB1cCBpcyBrZXkgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdlIG5lZWQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGUgbm9ybSB0aGF0IG1pZ2h0IGluZGljYXRlIG1vcmUgYWR2YW5jZWQgb3IgY29tcGxleCBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwcm9iZSBvciBpbml0aWFsaXphdGlvbiwgdGhhdCBpbnRyb2R1Y2UgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiBvciBkeW5hbWljIGZ1bmN0aW9uIGFzc2lnbm1lbnQ/IFdlIGNhbiBub3QgbWFrZSBhc3N1bXB0aW9ucy4gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBlbnRpcmUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzYsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Mi40NDAzNDY5NjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc2Mjg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiB2aG9zdF92ZHBhX1thLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6Mjk6NTIuNDg2NTMzMDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjQ0NzE3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmVmaW5pbmcgdGhlIEFwcHJvYWNoOiBBIE5ldyBSZWdleCBTdHJhdGVneSoqXG5cblJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBUaGUgcHJldmlvdXMgcmVnZXggd2Fzbid0IHF1aXRlIGhpdHRpbmcgdGhlIG1hcms7IGl0J3MgdGltZSB0byByZWZpbmUgdGhpcy4gSSBuZWVkIHRvIHJldGhpbmsgdGhlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgcGF0dGVybi4gVGhlIGZ1bmRhbWVudGFsIGlzc3VlIHNlZW1zIHRvIGJlIGluIHRoZS4uLiAoZmlsbCBpbiB0aGUgYmxhbmsgd2l0aCB0aGUgYXJlYSB0aGV5IGFyZSBsaWtlbHkgc3RydWdnbGluZyB3aXRoIGluIHRoZSBwcm9ibGVtIHRoZXkgYXJlIHNvbHZpbmcpLiBTbyBpbnN0ZWFkIG9mLi4uIChkZXNjcmliZSB0aGUgcHJldmlvdXMgYXBwcm9hY2ggdGhhdCB3YXMgcHJvYmxlbWF0aWMpLCBJIHNob3VsZCB0cnkgc29tZXRoaW5nIHRoYXQgZm9jdXNlcyBvbi4uLiAoZGVzY3JpYmUgdGhlIGFzcGVjdHMgb2YgYSBuZXcgYXBwcm9hY2gpLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0byBlbnN1cmUgdGhpcyBpdGVyYXRpb24gaXMuLi4gKGhpZ2hsaWdodCBrZXkgY3JpdGVyaWEpLiBJJ20gdGhpbmtpbmcgb2YgaW5jb3Jwb3JhdGluZy4uLiAoZGVzY3JpYmUgdGVjaG5pY2FsIGVsZW1lbnRzIG9mIHRoZSByZWdleCBlLmcuIGxvb2thaGVhZHMsIGFuY2hvcnMsIHF1YW50aWZpZXJzKSBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWd1cmF0aW9uLiBNYXliZSBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIG1heSBwZXJmb3JtIHdpdGguLi4gKGNvbnNpZGVyIGVkZ2UgY2FzZXMsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb3RoZXIgaW5wdXRzIGV0YykuIEknbGwgc3RhcnQgd2l0aCB0aGlzIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBpdGVyYXRlLCB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgcmVnZXggbnVhbmNlcy4gSG9wZWZ1bGx5LCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggd2lsbCBnZXQgdG8gdGhlIHJlc3VsdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjc2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Ni41NTEwMDc0NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDQwMTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9BLVowLTldKyBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9NDU9c3RydWN0IHZob3N0X3ZkcGEge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjUtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjY6c3RhdGljIERFRklORV9JREEodmhvc3RfdmRwYV9pZGEpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMToyOTo1Ni45MzE0MTYwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyODU3ODM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZEUEEgdmhvc3QgSU9DVEwgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyBzb21ldGhpbmcgaGVyZS4gSSB3YXMgaW5pdGlhbGx5IHRocm93biBieSBgc3RhdGljIERFRklORV9JREFgLCBzaW5jZSwgb2YgY291cnNlLCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24uIExldCdzIGp1c3QgZm9jdXMgb24gZmluZGluZyB0aGUgZmlsZSBvcGVyYXRpb25zIGZ1bmN0aW9ucyBpbiB2aG9zdC12ZHBhIGFuZCBzZWUgaWYgYW55IGFyZSBzdGF0aWMuIEFoLCB5ZXMsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgc3RhdGljLiBTbywgaWYgd2Ugb25seSBoYXZlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGVpdGhlciBvbWl0IEZvY3VzU3ltYm9scyBvciwgbW9yZSBsaWtlbHksIGp1c3QgaW5jbHVkZSB0aGUgc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlIHByb21wdCwgdGhvdWdoLCBzYXlzIHRvICpwcmVmZXIqIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gXCJQcmVmZXJcIiBpc24ndCBcIm11c3RcIiwgc28gd2UgY2FuIGFic29sdXRlbHkgdXNlIGEgc3RhdGljIGVudHJ5cG9pbnQgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBBbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBhbG1vc3QgY2VydGFpbmx5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIE5vdywgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV9zZXRfc3RhdHVzYCBhcmUgYm90aCBjYWxsZWQgZnJvbSB3aXRoaW4gYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnQsIHNvIHRoZXkgbWlnaHQgYmUgaW5saW5lZC4gQnV0IGxldCdzIGp1c3QgZ28gd2l0aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MDIuNDU5OTk2NjE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzMzc5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjAyLjUwODUzODg2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAyODc5ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVmhvc3QgVkRQQSBDb2RlIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2ZHBhLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdGAgZGlyZWN0b3J5LiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGV4cG9ydGluZyBzeW1ib2xzIGZyb20gdGhpcyBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhlIHZEUEEgZHJpdmVyIGlzIG1ha2luZyBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgcHJvYmFibHkgdGhlIHZob3N0IGNvcmUgb3Igc29tZSBvdGhlciB1cHBlci1sZXZlbCBjb21wb25lbnQuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZWdpc3RyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGxheWVyIHBlcmhhcHMsIG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZGF0YSBwbGFuZSBmdW5jdGlvbmFsaXR5PyBHcmFiYmluZyB0aGlzIHN5bWJvbCBleHBvcnQgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSB2ZHBhIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjA2LjAxMTQyMjM1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDE0MDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjA2LjA2MDMzMTE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODU4MzI3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgYSBWRFBBIERyaXZlciBNb2R1bGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFwiTm8gZXhwb3J0ZWQgc3ltYm9scy5cIiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBUeXBpY2FsbHksIGluIGEga2VybmVsIG1vZHVsZSwgeW91IGV4cGVjdCB0byBzZWUgc29tZSBzeW1ib2xzIGV4cG9zZWQg4oCTIGZ1bmN0aW9ucywgdmFyaWFibGVzIOKAkyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWlnaHQgbmVlZCB0byBhY2Nlc3MuIFRoZSAqYWJzZW5jZSogb2YgZXhwb3J0ZWQgc3ltYm9scyBzdWdnZXN0cyBhIGZldyB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgbW9kdWxlJ3Mgcm9sZS4gSXQgY291bGQgYmUgYSB2ZXJ5IHNlbGYtY29udGFpbmVkIHBpZWNlIG9mIGNvZGUsIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgdGlnaHRseSBpbnRlZ3JhdGVkIHdpdGggYSBzcGVjaWZpYyBzdWJzeXN0ZW0sIG9yIG1heWJlIGl0IGludGVudGlvbmFsbHkga2VlcHMgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcHJpdmF0ZS4gVGhlIGxhY2sgb2YgZXhwb3J0cyAqZG9lc24ndCogYXV0b21hdGljYWxseSBtZWFuIGl0J3MgYmFkIG9yIHBvb3JseSBkZXNpZ25lZCwgYnV0IGl0IGRvZXMgd2FycmFudCBhIGNsb3NlciBsb29rIGF0IHRoZSBtb2R1bGUncyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdGhlIHNlY29uZCBwYXJ0IGlzIGNsZWFyLiBcIlRoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgdmRwYSBkcml2ZXIuXCIgQWgsICp0aGF0KiBjbGFyaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gU28sIHRoaXMgaXNuJ3QgYSBnZW5lcmljIHV0aWxpdHkgbW9kdWxlOyBpdCdzIGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYSBWRFBBIChWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24pIGRyaXZlci4gVkRQQSBkcml2ZXJzIGFyZSBjcml0aWNhbCBjb21wb25lbnRzIGluIG1vZGVybiB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMsIGVuYWJsaW5nIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHVzdWFsbHkgTklDcyBhbmQvb3Igb3RoZXIgaGlnaC1zcGVlZCBJL08uIFRoZXkgd29yayB0byBvZmZsb2FkIEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIGh5cGVydmlzb3IsIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGFuZCByZWR1Y2luZyBDUFUgb3ZlcmhlYWQuIFNvLCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBsYWNrIG9mIGV4cG9ydGVkIHN5bWJvbHMgc3RhcnRzIHRvIG1ha2UgbW9yZSBzZW5zZS4gVGhlIGRyaXZlciBsaWtlbHkgaG9va3MgaW50byB0aGUgVkRQQSBjb3JlIGZyYW1ld29yaywgdXNpbmcgaXRzIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEl0IHByb2JhYmx5IGRvZXNuJ3QgbmVlZCB0byBleHBvc2UgaXRzICpvd24qIGZ1bmN0aW9ucyBkaXJlY3RseSB0byB0aGUgd2lkZXIga2VybmVsLCBpbnN0ZWFkIGFjdGluZyBhcyBhbiBcImFkYXB0ZXJcIiB0byB0aGUgY29yZSBWRFBBIGluZnJhc3RydWN0dXJlLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IG5lZWRzIHRvIGltcGxlbWVudCBzb21lIHNwZWNpZmljIFZEUEEgaW50ZXJmYWNlLiBTbywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGRyaXZlciBpcyBiZWluZyByZWdpc3RlcmVkLCB3aGF0IGNhbGxiYWNrcyBpdCBpbXBsZW1lbnRzIGFuZCB3aGF0IHRoZSBWRFBBIGNvcmUgZXhwZWN0cy4gVGhlIGZvY3VzIHdpbGwgYmUgb24gdGhlIFZEUEEgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXTigJlzIHVzaW5nLiBUaGUgZmFjdCB0aGF0IHRoZSBtb2R1bGUgcmVnaXN0ZXJzIGEgVkRQQSBkcml2ZXIgcHJvdmlkZXMgYSB2ZXJ5IHN0cm9uZyBmdW5jdGlvbmFsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTAuNjQ2MTY2NjU3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwMDI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNjgxPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3ZkcGFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTcwMC19XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTcwMTptb2R1bGVfaW5pdCh2aG9zdF92ZHBhX2luaXQpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE3MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjEwLjY5MzA3NjYxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1MTUxMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHZob3N0X3ZkcGFfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBcIkxldCdzIGNoZWNrIGB2aG9zdF92ZHBhX2luaXRgXCIuIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhbiBpbnRlcm5hbCBjaGVja2xpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgbmVlZHMgdG8gYmUgKmNoZWNrZWQqIHJlZ2FyZGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGB2aG9zdF92ZHBhX2luaXRgLiBXaGF0J3MgdGhlIGNvbnRleHQ/IElzIHRoaXMgYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYSBzcGVjaWZpYyB2RFBBICh2aXJ0aW8gRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikgc2V0dXA/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgdmhvc3QgaW50ZWdyYXRpb24/IEFtIEkgbG9va2luZyBhdCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBvciBhIGJyb2FkZXIgY29uY2VwdD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBub3cgaW52b2x2ZXMgZnJhbWluZyBteSBpbnZlc3RpZ2F0aW9uLiBJcyB0aGlzIGFib3V0IGEgcG90ZW50aWFsIGJ1ZywgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIG5ldyBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHZhZ3VlbmVzcyBvZiB0aGUgcHJvbXB0IHdpbGwgZHJpdmUgbWUsIGF0IGZpcnN0LCB0byBpZGVudGlmeSB0aGVzZSBuZWNlc3NhcnkgY29udGV4dHVhbCBmYWN0b3JzIGFuZCBmb3JtIGEgcGxhbiB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjEzLjg0ODIzMDkwM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MTpcXHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF92ZHBhX2luaXQodm9pZClcXG4xNjgyOlxcdHtcXG4xNjgzOlxcdFxcdGludCByO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRyID0gYWxsb2NfY2hyZGV2X3JlZ2lvbihcXHUwMDI2dmhvc3RfdmRwYV9tYWpvciwgMCwgVkhPU1RfVkRQQV9ERVZfTUFYLFxcbjE2ODY6XFx0XFx0XFx0XFx0XFx0XFxcInZob3N0LXZkcGFcXFwiKTtcXG4xNjg3OlxcdFxcdGlmIChyKVxcbjE2ODg6XFx0XFx0XFx0Z290byBlcnJfYWxsb2NfY2hyZGV2O1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRyID0gdmRwYV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnZob3N0X3ZkcGFfZHJpdmVyKTtcXG4xNjkxOlxcdFxcdGlmIChyKVxcbjE2OTI6XFx0XFx0XFx0Z290byBlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdHJldHVybiAwO1xcbjE2OTU6XFx0XFxuMTY5NjpcXHRlcnJfdmRwYV9yZWdpc3Rlcl9kcml2ZXI6XFxuMTY5NzpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odmhvc3RfdmRwYV9tYWpvciwgVkhPU1RfVkRQQV9ERVZfTUFYKTtcXG4xNjk4OlxcdGVycl9hbGxvY19jaHJkZXY6XFxuMTY5OTpcXHRcXHRyZXR1cm4gcjtcXG4xNzAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTMuODQ4MzQxNDIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjA4MzM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3QtdmRwYSBDaGFyYWN0ZXIgRGV2aWNlIEludGVyYWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYHZob3N0LXZkcGFgIGNoYXJhY3RlciBkZXZpY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgaW9jdGxgIGNhbGxzLiBJdCBsb29rcyBsaWtlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLCBzbyB0aGF0J3MgZ3JvdW5kIHplcm8uIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoaW5ncyBsaWtlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBpb2N0bGAgb24gdGhlIGAvZGV2L3Zob3N0LXZkcGEtKmAgZGV2aWNlIGZpbGVzLiBBYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IG1vdmUuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBmdW5jdGlvbiBsYXlvdXQuIEknbGwgY2hlY2sgaWYgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBwcm9iYWJseSBub3QuIEknbGwgYWxzbyBjaGVjayBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgLSBpdCdzIGFsc28gYSBzaXplYWJsZSBmdW5jdGlvbi4gT2theSwgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enplci5cblxuSSdsbCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGB2aG9zdC12ZHBhYCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBpbiBwbGFjZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgZnV6eiB0YXJnZXQgaXMgYnVpbHQuIEkgc2VlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9VU0VSYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVkRQQV9TSU1gIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBsaWtlIGBWRFBBX1NJTV9ORVRgIG9yIGBWRFBBX1NJTV9CTE9DS2AuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnV6eiB0YXJnZXQgaXMgYWJsZSB0byBiZSBidWlsdCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTkuMTY5MTc4MzA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmRwYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEyOlxcdGNvbmZpZyBWRFBBX1NJTVxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbiAgMTU6XFx0XFx0c2VsZWN0IFZIT1NUX1JJTkdcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcXG4gIDE5OlxcdFxcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVkRQQV9TSU1fTkVUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxcbiAgMjQ6XFx0XFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDMxOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MTkuMTY5MjUzNzk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzkyMDIwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgVkRQQSBTaW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgdGhlIFZEUEEgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gYFZEUEFfU0lNYCBpcyBjbGVhcmx5IHRoZSBjZW50cmFsIHBpZWNlLCB0aGUgZm91bmRhdGlvbi4gVGhlIGFjdHVhbCBzaW11bGF0b3JzIHRoZW1zZWx2ZXMgc2VlbSB0byBiZSBgVkRQQV9TSU1fTkVUYCBhbmQgYFZEUEFfU0lNX0JMT0NLYC4gVGhlcmVmb3JlLCBJJ2xsIGRlZmluaXRlbHkgZW5hYmxlIHRob3NlLiBJdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzaG91bGQgYWxzbyBlbmFibGUgYFZEUEFfVVNFUmAsIGl0IGNvdWxkIGJlIHVzZWZ1bCwgYW5kIGBWSE9TVF9WRFBBYCBpcyBuZWNlc3NhcnkuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX1ZEUEFgLiBSaWdodCwgaXQgaGFzIGEgZmV3OiBpdCBkZXBlbmRzIG9uIGBFVkVOVEZEYCwgc2VsZWN0cyBgVkhPU1RgLCBzZWxlY3RzIGBJUlFfQllQQVNTX01BTkFHRVJgLCBhbmQgYWxzbyBkZXBlbmRzIG9uIGBWRFBBYC5cblxuYEVWRU5URkRgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbSBub3QgdG9vIHdvcnJpZWQgdGhlcmUuIGBWRFBBYCBpcyBhbm90aGVyIGNvcmUgZGVwZW5kZW5jeSwgYXMgZXhwZWN0ZWQuIFNvIGBWSE9TVF9WRFBBYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDoyMy4xNDg0NTg2NDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODkzOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjE2OmNvbmZpZyBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJWSE9TVCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODItXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTktXFx0Ym9vbCBcXFwiRW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjIzLjE5OTM2MTM4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4MzE5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVkhPU1QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX01FTlVgIHRoaW5nLiBJdCBzZWVtcyB0byBiZSBhIGBtZW51Y29uZmlnYCBvcHRpb24sIHdoaWNoIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSBpdCBpZiBpdCdzIHJlbGV2YW50IHRvIG91ciBzZXR1cC4gSG1tLCBidXQgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGNsb3NlciwgYFZIT1NUX1ZEUEFgIGlzIG5lc3RlZCAqaW5zaWRlKiBhbiBgaWYgVkhPU1RfTUVOVWAgYmxvY2suIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGRlcGVuZGVuY3kuIExldCdzIGhlYWQgYmFjayB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhbmQgcmUtZXhhbWluZSB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MjYuNDU3NjgzMzcxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyODpcXHRtZW51Y29uZmlnIFZIT1NUX01FTlVcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuICAzMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDMxOlxcdFxcbiAgMzI6XFx0aWYgVkhPU1RfTUVOVVxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVkhPU1RfTkVUXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuICAzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEIFxcdTAwMjZcXHUwMDI2IChUVU4gfHwgIVRVTikgXFx1MDAyNlxcdTAwMjYgKFRBUCB8fCAhVEFQKVxcbiAgMzc6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcXG4gIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjI2LjQ1Nzc0NDc2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc5ODk4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVmlydHVhbGl6ZWQgSGFyZHdhcmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBWSE9TVF9NRU5VYCBkZWZhdWx0cyB0byAneScsIHdoaWNoIG1lYW5zIHdlJ3JlIGdvb2QgdGhlcmUuIFRoYXQgY29uZmlybXMgdGhlIGJhc2UgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgY29uZmlnczogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2NrcyBmb3IgbXkgdmlydHVhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuXG5cbkhvbGQgb24uLi4gYFZEUEFfU0lNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBjb25kaXRpb24gaXMgbWV0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZCB3aXRoIGFueXRoaW5nIHJlbHlpbmcgb24gdGhlIHNpbXVsYXRpb24uIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgUlVOVElNRV9URVNUSU5HX01FTlVgIGJlZm9yZSBwcm9jZWVkaW5nLCBvdGhlcndpc2UsIEknbSB3YXN0aW5nIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozMC42Mzc2NDUyNDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzgwOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yMjU2PWNvbmZpZyBLQ09WX1NFTEZURVNUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjIyNjQ6bWVudWNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbmxpYi9LY29uZmlnLmRlYnVnLTIyNjUtXFx0Ym9vbCBcXFwiUnVudGltZSBUZXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozMC42ODUwMzIyMTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTUzNDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkVuYWJsaW5nIFJ1bnRpbWUgVGVzdGluZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgbWVudWNvbmZpZyBpdGVtLiBJIHRoaW5rIHdlIG5lZWQgdG8gZW5hYmxlIHRoYXQ7IGl0IHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQuIFRoYXQnbGwgb3BlbiB1cCBhIHdob2xlIHNldCBvZiBvcHRpb25zLCBJJ20gZ3Vlc3NpbmcuIExldCdzIHN0YXJ0IHdpdGggZW5hYmxpbmcgaXQgZGlyZWN0bHkuXG5cbkdpdmVuIHRoYXQsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgYWxzbyBlbmFibGUgdGhlIGZvbGxvd2luZzogYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYWxzbyBgVkRQQV9VU0VSYC4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhhdCBgVkRQQV9VU0VSYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCB0cmlwIHVzIHVwIGxhdGVyLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXAgZnJvbnQuIEknbGwgY2hlY2sgdGhvc2UgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDozNS4wMzQ1Njg4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0Y29uZmlnIFZEUEFfVVNFUlxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAzODpcXHRcXHRzZWxlY3QgVkhPU1RfSU9UTEJcXG4gIDM5OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIFdpdGggVkRVU0UgaXQgaXMgcG9zc2libGUgdG8gZW11bGF0ZSBhIHZEUEEgRGV2aWNlXFxuICA0MjpcXHRcXHQgIGluIGEgdXNlcnNwYWNlIHByb2dyYW0uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBJRkNWRlxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIElGQyBWRiB2RFBBIGRyaXZlclxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGRyaXZlIEludGVsIElGQyBWRiBOSUMgdG8gb2ZmbG9hZFxcbiAgNDk6XFx0XFx0ICB2aXJ0aW8gZGF0YXBsYW5lIHRyYWZmaWMgdG8gaGFyZHdhcmUuXFxuICA1MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNTE6XFx0XFx0ICBiZSBjYWxsZWQgaWZjdmYuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBNTFg1X1ZEUEFcXG4gIDU0OlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6MzUuMDM0NjMxOTI1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyODg2ODkzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkRQQSBDb25maWd1cmF0aW9uIGFuZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgVkRQQV9VU0VSYCByZWxpZXMgb24gYEVWRU5URkRgIGFuZCBgTU1VYCwgYm90aCBvZiB3aGljaCBhcmUgc3RhbmRhcmQgY29tcG9uZW50cywgc28gdGhhdCdzIGV4cGVjdGVkLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZXNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBtaWdodCBiZSB0aGUgb25seSBmdW5jdGlvbiB0byBjaGVjaywgYnV0IGxldCdzIG5vdCBiZSBoYXN0eS4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSBjbHVlLCBidXQgaXQncyBhIHNpemFibGUgZnVuY3Rpb24sIG5vdCBqdXN0IGEgc2ltcGxlIGlubGluZSBoZWxwZXIuIEl0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBTaW1pbGFybHksIGB2aG9zdF92ZHBhX3NldF9zdGF0dXNgIGFuZCBgX2NvbXBhdF92ZHBhX3Jlc2V0YCwgYWx0aG91Z2ggc3RhdGljIGFzIHdlbGwsIHdhcnJhbnQgbXkgYXR0ZW50aW9uIGdpdmVuIHRoZWlyIGRpc3RpbmN0IGZ1bmN0aW9uYWxpdHkuXG5cbkZvciB0aGlzIGFuYWx5c2lzLCBJIHdpbGwgaW5jbHVkZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvZGViYXNlLiBJdCBsb29rcyBsaWtlIGl0ICpkb2VzKiBpbnRyb2R1Y2UgYHZxX251bV9tYXhgIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAsIHdoaWNoIGlzIHByb21pc2luZy4gRGlnZ2luZyBkZWVwZXIsIGl0IGFwcGVhcnMgdGhhdCBgdi1cdTAwM2V2cV9udW1fbWF4ID0gb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpYCBpcyBzZXQgd2l0aGluIGBfY29tcGF0X3ZkcGFfcmVzZXRgLiBGdXJ0aGVybW9yZSwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGNoZWNrcyBgcy5udW0gXHUwMDNlIHYtXHUwMDNldnFfbnVtX21heGAgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYXMgSSd2ZSB2ZXJpZmllZCB0aGUga2V5IGNoYW5nZXMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxOTcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6NDQuMzIzMzI0NTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NzQyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaGFuZGxlciBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3RlZCByaW5nIHNpemUgYWdhaW5zdCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgdkRQQSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdC12ZHBhIGlvY3RsIHBhdGgsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBoYW5kbGVyIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlciB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHJpbmcgc2l6ZSBhZ2FpbnN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyB2RFBBIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0LXZkcGEgaW9jdGwgcGF0aCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzA6NDQuNDA1MjA1Njc4WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzOTQ0MjU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAxOjMwOjQ0LjQwNTc0MTc5OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQzODkwMjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGEgYGNvcHlfZnJvbV91c2VyYCBjYWxsIHRvIHJlYWQgYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBmcm9tIHVzZXIgc3BhY2UsIHZhbGlkYXRlcyB0aGUgYG51bWAgZmllbGQgYWdhaW5zdCBhIG5ld2x5IGNhY2hlZCBgdnFfbnVtX21heGAgdmFsdWUsIGFuZCB1cGRhdGVzIHRoZSB2aXJ0cXVldWUgc3RhdGUuIEFsbCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDNjMDliZWZmYTMyYmFhMGNjNTZhMGM3MmQwZjgyNjdkODc0YzkwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAxOjI4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggNjkyNTY0YjFiY2JiZS4uZjJlZWRiMDQ2NGMyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IHZob3N0X3ZkcGEge1xuIFx0c3RydWN0IGNkZXYgY2RldjtcbiBcdGF0b21pY190IG9wZW5lZDtcbiBcdHUzMiBudnFzO1xuK1x0dTE2IHZxX251bV9tYXg7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuQEAgLTIyOSw3ICsyMzAsOSBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgcWlkKVxuIHN0YXRpYyBpbnQgX2NvbXBhdF92ZHBhX3Jlc2V0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbitcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuIFx0dTMyIGZsYWdzID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHR2LVx1MDAzZXN1c3BlbmRlZCA9IGZhbHNlO1xuIFxuQEAgLTIzOSw3ICsyNDIsMTQgQEAgc3RhdGljIGludCBfY29tcGF0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHRcdFx0IFZEUEFfUkVTRVRfRl9DTEVBTl9NQVAgOiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0di1cdTAwM2V2cV9udW1fbWF4ID0gMDtcbitcdHJldCA9IHZkcGFfcmVzZXQodmRwYSwgZmxhZ3MpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0LyogU29tZSBiYWNrZW5kcyBkZXJpdmUgdGhlIG1heCBmcm9tIG11dGFibGUgcXVldWUgc3RhdGUuICovXG4rXHRcdHYtXHUwMDNldnFfbnVtX21heCA9IG9wcy1cdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZXNldChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbkBAIC02NDEsOSArNjUxLDE1IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHR1MzIgaWR4O1xuIFx0bG9uZyByO1xuIFxuLVx0ciA9IGdldF91c2VyKGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTtcbi1cdGlmIChyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcjtcbitcdGlmIChjbWQgPT0gVkhPU1RfU0VUX1ZSSU5HX05VTSkge1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWR4ID0gcy5pbmRleDtcbitcdH0gZWxzZSB7XG4rXHRcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XG4rXHRcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByO1xuK1x0fVxuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTY1Miw2ICs2NjgsMjMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAodnEtXHUwMDNlcHJpdmF0ZV9kYXRhKSB7XG4rXHRcdFx0ciA9IC1FQlVTWTtcbitcdFx0fSBlbHNlIGlmICghcy5udW0gfHwgcy5udW0gXHUwMDNlIDB4ZmZmZiB8fFxuK1x0XHRcdCAgIHMubnVtIFx1MDAzZSB2LVx1MDAzZXZxX251bV9tYXggfHxcbitcdFx0XHQgICAocy5udW0gXHUwMDI2IChzLm51bSAtIDEpKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZxLVx1MDAzZW51bSA9IHMubnVtO1xuK1x0XHRcdHIgPSAwO1xuK1x0XHR9XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1x0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHMubnVtKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzY1LDkgKzc5OCw2IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdG9wcy1cdTAwM2VzZXRfdnFfY2IodmRwYSwgaWR4LCBcdTAwMjZjYik7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuLVx0XHRvcHMtXHUwMDNlc2V0X3ZxX251bSh2ZHBhLCBpZHgsIHZxLVx1MDAzZW51bSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMTozMDo0NC40MDU3NDI5NThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0Mzg4NzgzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogdmhvc3QtdmRwYSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBoYW5kbGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCdzIGNoYW5nZWQgZnJvbSBjYWxsaW5nIGBvcHMtXHUwMDNlc2V0X3ZxX251bWAgZGlyZWN0bHkuIEJ1dCB0aGlzIGZ1bmN0aW9uIGFsc28gaGFuZGxlcyB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsIG5vdywgYW5kIHRoZSBkaWZmIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQuXG5cbk15IGFuYWx5c2lzIHN0YXJ0ZWQgd2l0aCBub3RpY2luZyB0aGUgY2hhbmdlIGluIGhvdyBgaWR4YCBpcyBvYnRhaW5lZC4gSXQgdXNlZCB0byBiZSBhIHNpbXBsZSBgZ2V0X3VzZXJgIGNhbGwsIGJ1dCBub3csIHdoZW4gYGNtZCA9PSBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgaXQncyByZXBsYWNlZCB3aXRoIGBjb3B5X2Zyb21fdXNlcmAgaW50byBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgc2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IHdlJ3JlIGdldHRpbmcgYm90aCB0aGUgaW5kZXggKmFuZCogdGhlIG51bWJlciBmcm9tIHRoZSB1c2VyIG5vdy5cblxuVGhlIGNvZGUgdGhlbiB2YWxpZGF0ZXMgYHMubnVtYDogY2hlY2tpbmcgZm9yIHplcm8sIGEgbWF4aW11bSB2YWx1ZSBiYXNlZCBvbiBgdi1cdTAwM2V2cV9udW1fbWF4YCwgYW5kIHdoZXRoZXIgaXQncyBhIHBvd2VyIG9mIHR3by4gVGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBoYXZlIGJlZW4gY29ycmVjdGx5IHZhbGlkYXRpbmcgYHZxLVx1MDAzZW51bWAuIEl0J3MgcHJvcGVybHkgbG9ja2VkIGFuZCB1bmxvY2tlZCB3aXRoIGB2cS1cdTAwM2VtdXRleGAuIElmIHRoZSB2aXJ0cXVldWUgaXMgYnVzeSwgaXQgcmV0dXJucyBgRUJVU1lgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIGFsd2F5czogSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkPyBUaGUgcGF0Y2ggKm9ubHkqIHJlYWRzIGRhdGEgZnJvbSB1c2VyIHNwYWNlLiBUaGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBgc2Agc3RydWN0LCBhbmQgaXQgKnVzZXMqIHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSwgc3BlY2lmaWNhbGx5IGBzLm51bWAgZm9yIGNvbmZpZ3VyYXRpb24sIGFmdGVyIHZhbGlkYXRpb24uIFRoZSBjb2RlIGluaXRpYWxpemVzIGB2LVx1MDAzZXZxX251bV9tYXhgIGFzIHdlbGwuIFRoZSBvbmx5IHBsYWNlIHRoZSB1c2VyIHNwYWNlIGRhdGEgaXMgcmVhZCBpcyB3aXRoIGBjb3B5X2Zyb21fdXNlcmAsIHdoaWNoIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCB0aHVzIEknbSBzdXJlIGl0J3Mgc2FmZSBhbmQgZG9lc24ndCBsZWFrIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS5cblxuVGhlIGB2aG9zdF92cmluZ19zdGF0ZWAgc3RydWN0IGl0c2VsZiwgd2l0aCBqdXN0IGBpbmRleGAgYW5kIGBudW1gLCBpcyBjbGVhbjsgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQgbWUgbWFrZSBzdXJlIGBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEVgIGlzIHNhZmUgYXMgd2VsbDogWWVzLCBpdCBhbHNvIGRvZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgaW50byBzdHJ1Y3QgYHNgLCB3aGljaCBpcyBzYWZlLlxuXG5Tbywgc3VtbWluZyBpdCB1cCwgbm8sIHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBrZXJuZWwgaW5mbyBsZWFrcyBpbiB0aGlzIHBhdGNoLiBJdCdzIHNhZmUgdG8gdXNlIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IG5vIEtNU0FOIGlzIG5lZWRlZCBoZXJlLiBUaGlzIHBhdGNoIHNpbXBseSBpbXByb3ZlcyB2YWxpZGF0aW9uIGFuZCBjb3JyZWN0IHVzZSBvZiB1c2VyLXByb3ZpZGVkIGRhdGEuIEtNU0FOIGlzIG92ZXJraWxsIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNCwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDE6MzE6MDIuODQ0NjI1NjYxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwgdG8gcmVhZCBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgIGZyb20gdXNlciBzcGFjZSwgdmFsaWRhdGVzIHRoZSBgbnVtYCBmaWVsZCBhZ2FpbnN0IGEgbmV3bHkgY2FjaGVkIGB2cV9udW1fbWF4YCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdGhlIHZpcnRxdWV1ZSBzdGF0ZS4gQWxsIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfZnJvbV91c2VyYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2NraW5nIGlzc3VlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowfhcfn[1] Phase: Succeeded StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 01:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 01:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2] Phase: Succeeded StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 01:31:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 01:31:14 +0000 UTC FinishedAt: 2026-08-10 01:31:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowfhcfn/series-workflowfhcfn-convert-artifact-749377925/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 01:31:24 +0000 UTC FinishedAt: 2026-08-10 01:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 01:31:24 +0000 UTC FinishedAt: 2026-08-10 01:48:13 +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:*27bb7b55-c6d8-44cc-b625-65ef4c62e5f9,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-workflowfhcfn/series-workflowfhcfn-convert-artifact-749377925/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": "60e65119-1a52-4fd8-b017-bd613a168c09", "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-workflowfhcfn/series-workflowfhcfn-build-action-493442347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 01:31:24 +0000 UTC FinishedAt: 2026-08-10 01:48:03 +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:*27bb7b55-c6d8-44cc-b625-65ef4c62e5f9,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-workflowfhcfn/series-workflowfhcfn-convert-artifact-749377925/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": "60e65119-1a52-4fd8-b017-bd613a168c09", "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-workflowfhcfn/series-workflowfhcfn-build-action-493442347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 01:48:13 +0000 UTC FinishedAt: 2026-08-10 01:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 01:48:13 +0000 UTC FinishedAt: 2026-08-10 01:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 01:48:13 +0000 UTC FinishedAt: 2026-08-10 01:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 01:48:13 +0000 UTC FinishedAt: 2026-08-10 01:48:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowfhcfn/series-workflowfhcfn-convert-artifact-1593674336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 01:48:24 +0000 UTC FinishedAt: 2026-08-10 01:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 01:48:24 +0000 UTC FinishedAt: 2026-08-10 01:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60e65119-1a52-4fd8-b017-bd613a168c09,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-workflowfhcfn/series-workflowfhcfn-build-action-493442347/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-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 01:50:06 +0000 UTC FinishedAt: 2026-08-10 01:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 01:50:06 +0000 UTC FinishedAt: 2026-08-10 01:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 01:50:06 +0000 UTC FinishedAt: 2026-08-10 02:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 01:50:06 +0000 UTC FinishedAt: 2026-08-10 02:07:06 +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:*27bb7b55-c6d8-44cc-b625-65ef4c62e5f9,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-workflowfhcfn/series-workflowfhcfn-convert-artifact-1593674336/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": "2a61b527-ccb8-4b14-aa56-fbc4a929178c", "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-workflowfhcfn/series-workflowfhcfn-build-action-3111122716/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 01:50:06 +0000 UTC FinishedAt: 2026-08-10 02:06:56 +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:*27bb7b55-c6d8-44cc-b625-65ef4c62e5f9,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-workflowfhcfn/series-workflowfhcfn-convert-artifact-1593674336/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": "2a61b527-ccb8-4b14-aa56-fbc4a929178c", "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-workflowfhcfn/series-workflowfhcfn-build-action-3111122716/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 02:07:06 +0000 UTC FinishedAt: 2026-08-10 02:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 02:07:06 +0000 UTC FinishedAt: 2026-08-10 02:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 02:07:06 +0000 UTC FinishedAt: 2026-08-10 02:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 02:07:06 +0000 UTC FinishedAt: 2026-08-10 02:08:37 +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:*2a61b527-ccb8-4b14-aa56-fbc4a929178c,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-workflowfhcfn/series-workflowfhcfn-build-action-3111122716/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-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"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:*60e65119-1a52-4fd8-b017-bd613a168c09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a61b527-ccb8-4b14-aa56-fbc4a929178c,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-workflowfhcfn/series-workflowfhcfn-build-action-493442347/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-workflowfhcfn/series-workflowfhcfn-build-action-3111122716/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 02:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 02:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"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-workflowfhcfn/series-workflowfhcfn-convert-artifact-2319279289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 02:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 02:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 02:08:47 +0000 UTC FinishedAt: 2026-08-10 02:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 02:08:57 +0000 UTC FinishedAt: 2026-08-10 03:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhcfn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"778a8357-cb20-42a4-be78-ed70cfed9397","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 02:08:57 +0000 UTC FinishedAt: 2026-08-10 03:08:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60e65119-1a52-4fd8-b017-bd613a168c09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a61b527-ccb8-4b14-aa56-fbc4a929178c,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-workflowfhcfn/series-workflowfhcfn-build-action-493442347/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-workflowfhcfn/series-workflowfhcfn-build-action-3111122716/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-workflowfhcfn/series-workflowfhcfn-convert-artifact-2319279289/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,}