Name: series-workflow7shgt Phase: Succeeded StartedAt: 2026-07-11 08:57:03 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[0] Phase: Succeeded StartedAt: 2026-07-11 08:57:03 +0000 UTC FinishedAt: 2026-07-11 09:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 08:57:03 +0000 UTC FinishedAt: 2026-07-11 09:18:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cpa_collapse_large_pages", "ptdump_walk_pgd", "set_memory_rox" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiY2YxZDM3ZDVkYmY1YjdjOTFiNDJjZTBjZDdiNGUzNTlhNTM0OTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDk6MTU6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcbiYjNDM7XHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuJiM0MztcdCAqIHdyaXRlIGxvY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjZjFkMzdkNWRiZjViN2M5MWI0MmNlMGNkN2I0ZTM1OWE1MzQ5MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MzYsOSAmIzQzOzQzNywxNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAKIAlmbHVzaF90bGJfYWxsKCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKLQkJbGlzdF9kZWwoJmFtcDtwdGRlc2MtJmd0O3B0X2xpc3QpOwotCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkvKgomIzQzOwkgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieQomIzQzOwkgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcAomIzQzOwkgKiB3cml0ZSBsb2NrKS4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7CiYjNDM7CQkJcGFnZXRhYmxlX2ZyZWUocHRkZXNjKTsKJiM0MzsJCX0KIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGBzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSlgIHdoZW4gdGhlIGZ1bmN0aW9uIGZyZWVzIHBhZ2UgdGFibGVzLiBJbnRlcmVzdGluZy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbiBvZiB0cnlpbmcgdG8gZml4IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hpY2ggbWVhbnMgc29tZXRoaW5nIGlzIGdvaW5nIHRvIGJlIHJlYWRpbmcgdGhlc2UgcGFnZSB0YWJsZXMuIEkgd29uZGVyIHdoYXQgaXQgaXMuCgpUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgYHB0ZHVtcGAsIHdoaWNoIGltcGxpZXMgdGhhdCBgcHRkdW1wYCBpcyByZWFkaW5nIHRoZXNlIHBhZ2UgdGFibGVzLCBhbmQgcG9zc2libHkgZG9pbmcgc28gd2hpbGUgaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrLiBTZWVtcyBsaWtlIGEgY2xlYXIgcmFjZSBpZiB5b3UgYXJlbiYjMzk7dCBjYXJlZnVsIGFib3V0IHN5bmNocm9uaXphdGlvbi4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIExldCYjMzk7cyB0cmFjZSB0aGUgY2FsbHMgYW5kIHNlZSBob3cgdGhpcyBndWFyZCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00MTI9c3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0MTQ6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg4LVx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgQ1BBX0NPTExBUFNFKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODk6XHRcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKlRyYWNpbmcgdGhlIFBhZ2UgRmx1c2hpbmcgRnVuY3Rpb24qKgoKT2theSwgc28gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgaW52b2tlZCBieSBgY3BhX2ZsdXNoYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aGVuKiB0aGVzZSBsYXJnZSBwYWdlIGNvbGxhcHNlcyBvY2N1ci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgY3BhX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2sgdXB3YXJkcyB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VycyBmb3IgdGhpcyBmbHVzaGluZyBvcGVyYXRpb24gYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGxhcmdlIHBhZ2UgY29sbGFwc2luZy4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBmcm9tIGBjcGFfZmx1c2hgIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIGFuZCBwcm9jZXNzZXMgdGhhdCBsZWFkIHRvIGxhcmdlIHBhZ2VzIGJlaW5nIGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNlLiBUaGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiBwbGF5IGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgcGF0dGVybnMgaW4gdGhlIGNhbGwgc2l0ZXMgdGhhdCBtaWdodCBoaW50IGF0IHNwZWNpZmljIG1lbW9yeSBwcmVzc3VyZXMgb3Igd29ya2xvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNzk9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3B1X2NhY2hlX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcJiMzNDtERVZNRU1cJiMzNDspO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozODI6c3RhdGljIHZvaWQgX19jcGFfZmx1c2hfYWxsKHZvaWQgKmFyZylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM5NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mzk2OnN0YXRpYyB2b2lkIGNwYV9mbHVzaF9hbGwodW5zaWduZWQgbG9uZyBjYWNoZSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAwOlx0b25fZWFjaF9jcHUoX19jcGFfZmx1c2hfYWxsLCAodm9pZCAqKSBjYWNoZSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMS19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAzOnN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MDQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDUzOnN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU5LVx0aWYgKGNhY2hlIFx1MDAyNlx1MDAyNiAhc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSCkpIHtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDYwOlx0XHRjcGFfZmx1c2hfYWxsKGNhY2hlKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDYxLVx0XHRnb3RvIGNvbGxhcHNlX2xhcmdlX3BhZ2VzO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY2LVx0ZWxzZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0Njc6XHRcdG9uX2VhY2hfY3B1KF9fY3BhX2ZsdXNoX3RsYiwgY3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY4LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjA2ND1zdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM3LVx0aWYgKHJldCkge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTM4Olx0XHRjcGFfZmx1c2hfYWxsKGNhY2hlKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEzOS1cdFx0Z290byBvdXQ7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTQyOlx0Y3BhX2ZsdXNoKFx1MDAyNmNwYSwgY2FjaGUpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQzLW91dDpcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTA9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxMi1cdGlmICh4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3RsYl9mbHVzaF9yZXF1aXJlZChlbmMpKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOlx0XHRjcGFfZmx1c2goXHUwMDI2Y3BhLCB4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX2NhY2hlX2ZsdXNoX3JlcXVpcmVkKCkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDE0LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyNC1cdCAqIGluIGNhc2UgYW55IHNwZWN1bGF0aXZlIFRMQiBjYWNoaW5nIG9jY3VycmVkIChidXQgbm8gbmVlZCB0byBmbHVzaFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI1Olx0ICogY2FjaGVzIGFnYWluKS4gIFdlIGNvdWxkIGp1c3QgdXNlIGNwYV9mbHVzaF9hbGwoKSwgYnV0IGluIGNhc2UgVExCXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MjY6XHQgKiBmbHVzaGluZyBnZXRzIG9wdGltaXplZCBpbiB0aGUgY3BhX2ZsdXNoKCkgcGF0aCB1c2UgdGhlIHNhbWUgbG9naWNcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyNy1cdCAqIGFzIGFib3ZlLlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI4LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0Mjk6XHRjcGFfZmx1c2goXHUwMDI2Y3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgY2hhbmdlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY3BhX2ZsdXNoYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGFuZCBgX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlYC4gSSBrbm93IGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHRoZSBoZWFydCBvZiBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYW5kIHRob3NlIG90aGVyIG1lbW9yeSBwZXJtaXNzaW9uIHNldHRlcnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KClJpZ2h0LCBzbyB0byBkaWcgaW4gZnVydGhlciBJJiMzOTtsbCBmb2N1cyBvbiBgY3BhX2ZsdXNoYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgb3IgZXZlbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gV2FpdC4uLiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBvbmx5IGdldHMgY2FsbGVkIGlmIHRoZSBgQ1BBX0NPTExBUFNFYCBmbGFnIGlzIHNldCBpbiB0aGUgYGNwYWAgc3RydWN0dXJlLiAgVGhhdCBnaXZlcyBtZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhhdCBgQ1BBX0NPTExBUFNFYCBmbGFnIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHdlIGFyZSBjb2xsYXBzaW5nIGxhcmdlIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NQQV9DT0xMQVBTRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKlVucmF2ZWxpbmcgYSBNZW1vcnkgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENQQV9DT0xMQVBTRWAuLi4gSSBzYXcgaXQgbWVudGlvbmVkIGluIGBzZXRfbWVtb3J5X3JveGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLiBBIHF1aWNrIGdyZXAgZm9yIGBDUEFfQ09MTEFQU0VgIGFjcm9zcyB0aGUgY29kZWJhc2UgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb250ZXh0IGFuZCBldmVyeSBwbGFjZSBpdCYjMzk7cyB0b3VjaGVkOyBJdCBjb3VsZCBiZSB1c2VkIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgSSYjMzk7bGwgbmVlZCBhbGwgdGhlIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3aWRlc3ByZWFkIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NQQV9DT0xMQVBTRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGZvciBDb2xsYXRlcmFsIERhbWFnZSoqCgpIbW0sIHNvIGBzZXRfbWVtb3J5X3JveGAgc2V0cyBgQ1BBX0NPTExBUFNFYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGRlZmluaXRlbHkgcmluZ3MgYSBiZWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByaXBwbGUgZWZmZWN0cy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgQ1BBX0NPTExBUFNFYCBtaWdodCBiZSBtYW5pcHVsYXRlZD8gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBvaW50LCBhbmQgaWYgaXQgaXMsIHRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgY2xvc2UgcmV2aWV3LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGxvY2FsaXplZCwgb3IgSSB3aWxsIGhhdmUgdG8gc3RhcnQgZGlnZ2luZyBpbiBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1BBX0NPTExBUFNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NzE9c3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03Ni0jZGVmaW5lIENQQV9OT19DSEVDS19BTElBUyA4IC8qIERvIG5vdCBzZWFyY2ggZm9yIGFsaWFzZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Nzc6I2RlZmluZSBDUEFfQ09MTEFQU0UgMTYgLyogdHJ5IHRvIGNvbGxhcHNlIGxhcmdlIHBhZ2VzICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc4LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg3LWNvbGxhcHNlX2xhcmdlX3BhZ2VzOlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODg6XHRpZiAoY3BhLVx1MDAzZWZsYWdzIFx1MDAyNiBDUEFfQ09MTEFQU0UpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OS1cdFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzM0PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEtXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQyOlx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipUcmFjaW5nIERvd24gdGhlIENQQV9DT0xMQVBTRSBTZXR0aW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgdGhpcyBgQ1BBX0NPTExBUFNFYCBmbGFnLiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0ICpvbmx5KiB0aGUgYHNldF9tZW1vcnlfcm94YCBmdW5jdGlvbiBjYW4gc2V0IGl0LiBUaGF0JiMzOTtzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQsIGEgZm9jdXNlZCBoeXBvdGhlc2lzLiBNeSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxscyB0byBgc2V0X21lbW9yeV9yb3hgLiBGaW5kaW5nIHRob3NlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdHJpZ2dlcnMsIHRoZSBjb25kaXRpb25zLCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGxlYWRzIHRvIGBDUEFfQ09MTEFQU0VgIGJlaW5nIGFjdGl2YXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgYHNldF9tZW1vcnlfcm94YCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz01OT12b2lkICpvbWFwX3NyYW1fcHVzaCh2b2lkICpmdW5jcCwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvc3JhbS1pbml0LmMtNzYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjc3Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy03OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jPTg5PXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2RldGVjdF9hbmRfbWFwX3NyYW0odm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTEyNS1cbmFyY2gvYXJtL21hY2gtb21hcDEvc3JhbS1pbml0LmM6MTI2Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy0xMjctfVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jPTgxPXZvaWQgKm9tYXBfc3JhbV9wdXNoKHZvaWQgKmZ1bmNwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtOTgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYzo5OTpcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jLTEwMC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYz0xODA9c3RhdGljIHZvaWQgX19pbml0IG9tYXAyX21hcF9zcmFtKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtMjE4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM6MjE5Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtMjIwLX1cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTQ1PXZvaWQgKmFsbG9jX2luc25fcGFnZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtNTEtXHRcdHJldHVybiBOVUxMO1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzo1MjpcdGlmIChzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylhZGRyLCAxKSkge1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy01My1cdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM9MjYwPWludCBsYXJjaF9pbnNuX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jLTI4OC1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM6Mjg5Olx0ZXJyID0gc2V0X21lbW9yeV9yb3goc3RhcnQsIChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYy0yOTAtXHRpZiAoZXJyKSB7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jOjI5MTpcdFx0cHJfaW5mbyhcJiMzNDslczogc2V0X21lbW9yeV9yb3goKSBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmMtMjkyLVx0XHRyZXR1cm4gZXJyO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NDA9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ2LXtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ4LX1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01MC1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTI3PWludCBfX3NldF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG51bXBhZ2VzLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMjgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjI5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMzAtXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD01OD1fX1NFVF9NRU1PUllfRlVOQyhzZXRfbWVtb3J5X3gsIFNFVF9NRU1PUllfWClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTk6X19TRVRfTUVNT1JZX0ZVTkMoc2V0X21lbW9yeV9yb3gsIFNFVF9NRU1PUllfUk8gfCBTRVRfTUVNT1JZX1gpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTYwLV9fU0VUX01FTU9SWV9GVU5DKHNldF9tZW1vcnlfcndueCwgU0VUX01FTU9SWV9SVyB8IFNFVF9NRU1PUllfTlgpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM9MzY9dm9pZCAqYWxsb2NfaW5zbl9wYWdlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDItXHRcdHJldHVybiBOVUxMO1xuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM6NDM6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWdlLCAxKTtcbmFyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jLTQ0LVx0cmV0dXJuIHBhZ2U7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYz00NzA9c3RhdGljIGludCBtb2R1bGVfYWxsb2NfZnRyYWNlX2hvdHBhdGNoX3RyYW1wb2xpbmVzKHN0cnVjdCBtb2R1bGUgKm1lLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgxLVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmM6NDgyOlx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpc3RhcnQsIG51bXBhZ2VzKTtcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgzLVx0ZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZTtcbi0tXG5hcmNoL3MzOTAvbW0vdm1lbS5jPTY3ND12b2lkIF9faW5pdCB2bWVtX21hcF9pbml0KHZvaWQpXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3NS17XG5hcmNoL3MzOTAvbW0vdm1lbS5jOjY3NjpcdF9fc2V0X21lbW9yeV9yb3goX3N0ZXh0LCBfZXRleHQpO1xuYXJjaC9zMzkwL21tL3ZtZW0uYy02NzctXHRfX3NldF9tZW1vcnlfcm8oX2V0ZXh0LCBfX2VuZF9yb2RhdGEpO1xuYXJjaC9zMzkwL21tL3ZtZW0uYzo2Nzg6XHRfX3NldF9tZW1vcnlfcm94KF9fc3RleHRfYW1vZGUzMSwgX19ldGV4dF9hbW9kZTMxKTtcbmFyY2gvczM5MC9tbS92bWVtLmMtNjc5LVx0Lypcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz0zMDk9Y3JlYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgaW50ICp0cmFtcF9zaXplKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjctXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDI4Olx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZSwgbnBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjktXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY0LVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjYtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PWludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuLS1cbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYz03Mz12b2lkICpzcmFtX2V4ZWNfY29weShzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHZvaWQgKmRzdCwgdm9pZCAqc3JjLFxuLS1cbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYy0xMDgtXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmM6MTA5Olx0cmV0ID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpYmFzZSwgcGFnZXMpO1xuZHJpdmVycy9taXNjL3NyYW0tZXhlYy5jLTExMC1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg9Njc9dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtNzUtICogYWZ0ZXIgaXQgd2FzIHRlbXBvcmFyaWx5IHJlbWFwcGVkIGFzIHdyaXRhYmxlLiBSZWxpZXMgb24gYXJjaGl0ZWN0dXJlXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDo3NjogKiBpbXBsZW1lbnRhdGlvbiBvZiBzZXRfbWVtb3J5X3JveCgpIHRvIHJlc3RvcmUgbWFwcGluZyB1c2luZyBsYXJnZSBwYWdlcy5cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc3LSAqXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTExPWJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTEzLVx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKGhkcik7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExMTQ6XHRyZXR1cm4gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpaGRyLCBoZHItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExMTUtfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTE0PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxNzojaWZuZGVmIHNldF9tZW1vcnlfcm94XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz05MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05MzQtXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xua2VybmVsL2JwZi9jb3JlLmM6OTM1Olx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG5rZXJuZWwvYnBmL2NvcmUuYy05MzYtXHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTk0OD12b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05NzEtXHRcdFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHB0cik7XG5rZXJuZWwvYnBmL2NvcmUuYzo5NzI6XHRcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcHRyLFxua2VybmVsL2JwZi9jb3JlLmMtOTczLVx0XHRcdFx0XHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE0NjE9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NjMtXHRXQVJOX09OX09OQ0Uoc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0NjQ6XHRyZXR1cm4gc2V0X21lbW9yeV9yb3goKGxvbmcpaW1hZ2UsIDEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2NS19XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM9MzM9aW50IG1vZHVsZV9lbmFibGVfdGV4dF9yb3goY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTQxLVx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo0MjpcdFx0XHRyZXQgPSBtb2R1bGVfc2V0X21lbW9yeShtb2QsIHR5cGUsIHNldF9tZW1vcnlfcm94KTtcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTQzLVx0XHRlbHNlXG4tLVxubW0vZXhlY21lbS5jPTE1MD1pbnQgZXhlY21lbV9yZXN0b3JlX3JveCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy0xNTQtXG5tbS9leGVjbWVtLmM6MTU1Olx0cmV0dXJuIHNldF9tZW1vcnlfcm94KGFkZHIsIG5yKTtcbm1tL2V4ZWNtZW0uYy0xNTYtfVxuLS1cbm1tL2V4ZWNtZW0uYz0yNzc9c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9leGVjbWVtLmMtMzAyLVxubW0vZXhlY21lbS5jOjMwMzpcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXAsIHZtLVx1MDAzZW5yX3BhZ2VzKTtcbm1tL2V4ZWNtZW0uYy0zMDQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgVnVsbmVyYWJpbGl0eSBGaXgqKgoKT2theSwgc28gYHNldF9tZW1vcnlfcm94YCBpcyBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcHJldHR5IGJyb2FkbHkgdXNlZCDigJMgY2FsbGVkIGZyb20gYWxsIHNvcnRzIG9mIHBsYWNlczogQlBGLCBrZXJuZWwgbW9kdWxlcywga3Byb2JlcywgZnRyYWNlLCBldmVuIGtleGVjLiBUaGF0IG1lYW5zIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgICppcyogZGVmaW5pdGVseSByZWFjaGFibGUsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFkZHMgYSBgc2NvcGVkX2d1YXJkYCBhcm91bmQgdGhlIHBhZ2UgdGFibGUgZnJlZWluZyBsb29wIHdpdGhpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBhbmQgYSBnb29kIG9uZSwgc2VlbWluZ2x5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSwgbW9zdCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGBwdGR1bXBgLgoKSGFuZyBvbiwgYHB0ZHVtcGDigKYgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIHRocm91Z2ggZGVidWdmcyBvciBzeXNmcyB0byBkdW1wIG91dCBwYWdlIHRhYmxlcy4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gd2hlcmUgYHB0ZHVtcGAgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcHJvY2Vzcy4gSSB0aGluayB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy03LVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjg6c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTMtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTQ6REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTY6c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE3LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIyLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNC1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNS0jaWZkZWYgQ09ORklHX01JVElHQVRJT05fUEFHRV9UQUJMRV9JU09MQVRJT05cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjcte1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCB0cnVlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozMzpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2N1cnVzcik7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM2LSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mzc6c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00My1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0NDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2VmaSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1NTpcdFx0XHQgICAgXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Ni1cbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2N1cnJlbnRfdXNlclwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU5Olx0XHRcdCAgICBcdTAwMjZwdGR1bXBfY3VydXNyX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VmaVwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLCBcdTAwMjZwdGR1bXBfZWZpX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjAtXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9Mjg9c3RydWN0IHBnX3N0YXRlIHtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI5Olx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMC1cdGludCBsZXZlbDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjc9c3RhdGljIHZvaWQgbm90ZV93eChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTIte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlx0c3RydWN0IHBnX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdF9zdCwgc3RydWN0IHBnX3N0YXRlLCBwdGR1bXApO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjU0LVx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjY5OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3B0ZShzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcHRlX3QgcHRlKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjcwLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNzQ6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcG1kKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwbWRfdCBwbWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI4MC17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjg0OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3A0ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcDRkX3QgcDRkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg1LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyODk6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwZ2RfdCBwZ2QpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI5OS0gKi9cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAxLVx0XHQgICAgICB1NjQgdmFsKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAyLXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMzpcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwNC1cdHBncHJvdHZhbF90IG5ld19wcm90LCBuZXdfZWZmO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5MC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjM5MTpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcHRlKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk1LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MDE6c3RhdGljIHZvaWQgbm90ZV9wYWdlX3B1ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDIte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQwNjpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcDRkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHA0ZF90IHA0ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MTY6c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDE3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXHRcdFx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI3Olx0Y29uc3Qgc3RydWN0IHB0ZHVtcF9yYW5nZSBwdGR1bXBfcmFuZ2VzW10gPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzctXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Mzg6XHRcdC5wdGR1bXAgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzktXHRcdFx0Lm5vdGVfcGFnZV9wdGUgPSBub3RlX3BhZ2VfcHRlLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cdFx0XHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDUwOlx0XHRcdC5yYW5nZVx0XHQ9IHB0ZHVtcF9yYW5nZXNcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1MS1cdFx0fSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTctXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBtbSwgcGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzY6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzctfVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cdFx0XHRcdCAgIGJvb2wgdXNlcilcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODYtI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg4LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ5MDp2b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ5MS17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAwLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTEwOlx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTEtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0MC1cdC8qXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MTpcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MjpcdCAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0My1cdCAqIHdyaXRlIGxvY2spLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggUmVsYXRlZCB0byBQYWdlIFRhYmxlIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBgcHRkdW1wYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWNjZXNzaWJsZSB0aHJvdWdoIGRlYnVnZnMgYXQgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pYCB0byB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gTXkgbWVudGFsIGFsYXJtcyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGxvY2sgYWRkaXRpb24gbWVhbnMgdGhhdCBgcHRkdW1wYCAqYWNxdWlyZXMqIHRoZSBtbWFwICpyZWFkKiBsb2NrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2tpbmcgY29udGV4dCBvZiBgcHRkdW1wYC4gVG8gYmUgY2VydGFpbiB0aGlzIGlzIGNvcnJlY3QgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhlIGNvZGUsIEkgd2lsbCBjaGVjayBlaXRoZXIgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBvciBwb3NzaWJseSBgcHRkdW1wX3dhbGtfcGdkYC4gR290dGEgbWFrZSBzdXJlIHRoaXMgbG9jayBhY3F1aXNpdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCB0aGF0IHRoZXkmIzM5O3JlIG5vdCBjYXVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgaXNzdWUuIEEgcXVpY2sgcmV2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIHNob3VsZCBwcm92aWRlIGNvbmZpcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1hcF8uKmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wdGR1bXAuYz0xNzU9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuLS1cbm1tL3B0ZHVtcC5jLTE3OS1cdGdldF9vbmxpbmVfbWVtcygpO1xubW0vcHRkdW1wLmM6MTgwOlx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbm1tL3B0ZHVtcC5jLTE4MS1cdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbi0tXG5tbS9wdGR1bXAuYy0xODUtXHR9XG5tbS9wdGR1bXAuYzoxODY6XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG5tbS9wdGR1bXAuYy0xODctXHRwdXRfb25saW5lX21lbXMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uY3VycmVuY3kgQnVnIEZpeCAtIFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RgICpkb2VzKiB0YWtlIGBtbWFwX3dyaXRlX2xvY2sobW0pYC4gVGhhdCBtZWFucyB0YWtpbmcgYG1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSlgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNyZWF0ZXMgc3luY2hyb25pemF0aW9uIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHRvIGJlIHByZWNpc2UuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEZ1enppbmcgY291bGQgZXhwb3NlIHRoZSByYWNlIGNvbmRpdGlvbiBpZiB0aGUgZml4IHdhc24mIzM5O3QgcHJlc2VudCwgb3IgaXQgY291bGQgaGVscCB0byB2YWxpZGF0ZSB0aGUgbmV3IGxvY2tpbmcgbWVjaGFuaXNtLgoKSGFuZyBvbi4uLiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBjYWxsZWQgd2hlbiBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEFuZCBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQgYnkgYSByYW5nZSBvZiBpbnRlcmVzdGluZyB0aGluZ3M6IEJQRiwga2VybmVsIG1vZHVsZXMsIGFuZCBrcHJvYmVzLiBUaGlzIG9wZW5zIHVwIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gV2UgY2FuIHRyaWdnZXIgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2Agc2ltcGx5IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIG9yIG1vZHVsZXMuIE9uIHRoZSBvdGhlciBoYW5kIHdlIGNhbiB0cmlnZ2VyIGBwdGR1bXBgIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQgb2YgYSBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MgZmluZCB0aGUgZm9jdXMgc3ltYm9scy4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBjcGFfZmx1c2hgLCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBgc2V0X21lbW9yeV9yb3hgIGlzIGV4cG9ydGVkIHRob3VnaC4gU28gd2UgY2FuIGZvY3VzIG9uIGBzZXRfbWVtb3J5X3JveGAgYW5kIGBwdGR1bXBfd2Fsa19wZ2RgIGFzIGVudHJ5IHBvaW50cy4gQWN0dWFsbHksIHNpbmNlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgaXQmIzM5O3Mgd29ydGggc2VlaW5nIGlmIHdlIGNhbiBmb2N1cyBvbiBpdCBkaXJlY3RseS4gU3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIGRlYnVnIGluZm8uIElmIHRoYXQgZmFpbHMgdGhlbiBgc2V0X21lbW9yeV9yb3hgIGlzIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCBzbyBpcyBgcHRkdW1wX3Nob3dgIG9yIGBwdGR1bXBfd2Fsa19wZ2RgLgoKRmluYWxseSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgZW5hYmxlZCwgYW5kIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBBUk1fUFREVU1QX0NPUkVcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTUtXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy03LVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MjM6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlNcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTI0LSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0U1pfMUdcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuLS1cbmFyY2gvYXJtL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXHQmIzQzOz0gZHVtcC5vXG5hcmNoL2FybS9tbS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19NT0RVTEVTKVx0XHQmIzQzOz0gcHJvYy1zeW1zLm9cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTcwPXZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzE6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03Mi0jZGVmaW5lIEVGSV9SVU5USU1FX01BUF9FTkRcdERFRkFVTFRfTUFQX1dJTkRPV182NFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo3NzojZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc4LSNlbHNlXG4tLVxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZT04PW9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBwdGR1bXAub1xuYXJjaC9hcm02NC9tbS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBwdGR1bXBfZGVidWdmcy5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19UUkFOU19UQUJMRSlcdCYjNDM7PSB0cmFuc19wZ2Qub1xuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTc5PUNPTkZJR19QUENfRUFSTFlfREVCVUc9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6ODA6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpXHQmIzQzOz0gYm9vazNzNjQub1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUENfQk9PSzNTXzMyKVx0JiM0Mzs9IGJhdHMubyBzZWdtZW50X3JlZ3Mub1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQ0LUNPTkZJR19ERUJVR19PQkpFQ1RTPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODIyOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTE4Mj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjQtXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjI1OiNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTI1NT1ERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Ny1cbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1NS1cdHNvcnQoXHUwMDI2bWFya2Vyc1sxXSwgbWFya2Vyc19jbnQgLSAxLCBzaXplb2YoKm1hcmtlcnMpLCBwdGR1bXBfY21wLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTY6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsX3BhZ2VfdGFibGVzXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwdGR1bXBfZm9wcyk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzU4OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBkZWJ1Z19wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjctXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yOS0jaW5jbHVkZSBcdTAwM2Nhc20vcHRkdW1wLmhcdTAwM2Vcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9Nzg9Q09ORklHX0tBU0FOX1ZNQUxMT0M9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjc5OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctODAtQ09ORklHX1NDSEVEX1NUQUNLX0VORF9DSEVDSz15XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjExNTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTExNi1DT05GSUdfUkNfREVWSUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD05NT1DT05GSUdfUFJPVkVfTE9DS0lORz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojk2OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBwdGR1bXAgRmVhdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgYHB0ZHVtcGAgZmVhdHVyZSBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgZXhwb3NpbmcgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIGRlYnVnZnMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhIGRlYnVnZ2luZyB0b29sLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGx1cmtpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3aGljaCB0ZWxscyBtZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZSB0YWJsZSBvciBQQVQgaXMgaW52b2x2ZWQuCgpgQ09ORklHX1g4Nl9QQVRgIGNvdWxkIGJlIHJlbGF0ZWQuIEhvd2V2ZXIsIHNpbmNlIHRoZSBQQVQgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODYsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdy4gVGhlIHJlYWwgdHJpZ2dlciBmb3IgYHB0ZHVtcGAgaXMgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmNgIGFuZCBzZWUgaG93IHRoaXMgZGVidWdmcyBpbnRlZ3JhdGlvbiBpcyBzZXQgdXAuIFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBoYW5kbGVyIG9yIHN0cnVjdHVyZSByZWdpc3RlcmVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxMDpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xMS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0xNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJrbmxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBQYWdlIFRhYmxlIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGBwdGR1bXBfc2hvd2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBmb3IgYGluaXRfbW1gLiBBdCB0aGUgc2FtZSB0aW1lLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0YWtlcyBhbiBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwdGR1bXBfc2hvd2AgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuCgpJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYnV0IHdhaXQgYSBtaW51dGUsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYy4gVGhhdCBtaWdodCBtYWtlIGl0IGhhcmRlciB0byBleHBsb2l0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgaW4gdGhhdCBnZW5lcmFsIGFyZWEsIHBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmx1c2hpbmcgb3Igc2V0dGluZyBtZW1vcnkgcHJvdGVjdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgc2V0X21lbW9yeV9yb3hgIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBleGFtaW5hdGlvbi4gYHB0ZHVtcF9zaG93YCBpdHNlbGYgaXMgYWxzbyBhbiBpbXBvcnRhbnQgc3ltYm9sIHRvIGtlZXAgaW4gbWluZC4KCk9uZSBtb3JlIHRoaW5nLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJcyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIGV4cG9ydGVkPyBJIGNhbiYjMzk7dCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQmIzM5O3MgbG9jYXRlZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBzbyBJIHNob3VsZCBjb25maXJtIHRoYXQgaXQgaXNuJiMzOTt0IGV4cG9ydGVkLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3ND12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXHRcdFx0XHQgICBib29sIHVzZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJiMzOTt0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGFsb25nc2lkZSBpdCwgSSBzaG91bGQgaW5jbHVkZSBgc2V0X21lbW9yeV9yb3hgLiBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgdGhhdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcG90ZW50aWFsbHkgdXRpbGl6ZSBpdCwgcHJvdmlkZWQgdGhlIGFzc29jaWF0ZWQgZGVidWcgaW5mb3JtYXRpb24gaXMgcHJlc2VudC4gTGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgdGFyZ2V0IGxpc3QgYXMgd2VsbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMsIEkgc2VlIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLiBBbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX1g4Nl9QQVRgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBkb24mIzM5O3Qgc2VlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgYHNldF9tZW1vcnlfcm94YCwgc28gaXQgYXBwZWFycyB0byBiZSBhdmFpbGFibGUgb24geDg2IGJ5IGRlZmF1bHQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhpcyBwYXRjaC4gQWhhLCBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGUgY29kZSBjaGFuZ2UgaW52b2x2ZXMgYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBgaW5pdF9tbWAgYmVmb3JlIGZyZWVpbmcgcGFnZSB0YWJsZXMuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjb25jdXJyZW5jeSBidWcgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBTbywgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCkhlcmUgYXJlIHRoZSBmb2N1cyBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCBhbmQgYHNldF9tZW1vcnlfcm94YC4gQW5kIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGBQVERVTVBfREVCVUdGU2AuCgpCZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gYHB0ZHVtcF9zaG93YCBjYWxscyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCB0aGVuIGZpbmFsbHkgYHB0ZHVtcF93YWxrX3BnZGAuIEFoLCBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RgIGlzIHRoZSBvbmUgdGhhdCB0YWtlcyB0aGUgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gQW5kIGBwdGR1bXBfd2Fsa19wZ2RgIHJlc2lkZXMgaW4gYG1tL3B0ZHVtcC5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaXQgaXMgYSBnbG9iYWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XG4tLVxubW0vcHRkdW1wLmMtMTc0LVxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbm1tL3B0ZHVtcC5jLTE3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgUGFnZSBUYWJsZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciB0aGlzIHBhZ2UgdGFibGUgYW5hbHlzaXMuIEkgc3RhcnRlZCBieSBjb25maXJtaW5nIHRoYXQgYHB0ZHVtcF93YWxrX3BnZGAgaXMgaW5kZWVkIGEgZ2xvYmFsIGZ1bmN0aW9uIOKAkyB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gVGhlIGFkZGVkIGJlbmVmaXQgaXMgdGhhdCBpdCYjMzk7cyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIGxvY2ssIHdoaWNoIGlzIGtleS4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gbGltaXQgbXkgYW5hbHlzaXMgYnkgaXNvbGF0aW5nIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgZnVuY3Rpb25zLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB3aXRoaW4gKnRoaXMqIHNwZWNpZmljIGNvbnRleHQsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGF0LgoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbjoKCiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYAoqICAgYHB0ZHVtcF93YWxrX3BnZGAKKiAgIGBzZXRfbWVtb3J5X3JveGAKCkJ1dCB3YWl0LCBgc2V0X21lbW9yeV9yb3hgIGlzICpqdXN0KiBvbmUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBjYWxsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgYHNldF9tZW1vcnlfKmAgdmFyaWFudHM/IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgPyBEbyB0aGV5IGFsc28gc2V0IGBDUEFfQ09MTEFQU0VgPyBJJiMzOTtkIGJldHRlciBjaGVjayBgc2V0X21lbW9yeV9yb2AgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMyMT1pbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMjk6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3JvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjA3Olx0cmV0dXJuIHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBzZXRfbWVtb3J5X3JvYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBgc2V0X21lbW9yeV9yb2AgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgbG93LWxldmVsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgaXQgYWNoaWV2ZXMgbWFraW5nIGEgbWVtb3J5IHJlZ2lvbiByZWFkLW9ubHkuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBhc3BlY3RzIOKAkyB3aGF0IHRyaWNrcyBhcmUgYmVpbmcgdXNlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWw/IEFyZSB0aGV5IGxldmVyYWdpbmcgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLCBNTVUgZmVhdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBDUFUgaW5zdHJ1Y3Rpb25zIGRlc2lnbmVkIGZvciBtZW1vcnkgcHJvdGVjdGlvbj8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJhbCBudWFuY2VzLiBEb2VzIGl0IHRha2UgaW50byBhY2NvdW50IHZpcnR1YWwgbWVtb3J5IGNvbmNlcHRzPyBJcyB0aGVyZSBhbnkgY2FjaGluZyBvciB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChUTEIpIGludmFsaWRhdGlvbiBpbnZvbHZlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGVmZmVjdGl2ZT8gSSBhbnRpY2lwYXRlIHNlZWluZyBzb21lIGludGVyYWN0aW9uIHdpdGggc3lzdGVtIGNhbGxzLCBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgbXByb3RlY3RgIG9yIGVxdWl2YWxlbnQsIHRob3VnaCBJIHdhbnQgdG8gc2VlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVpbmcgY2FsbGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzOyBhcmUgdGhleSBjaGVja2luZyByZXR1cm4gdmFsdWVzIHByb3Blcmx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaG9zZW4gYXBwcm9hY2ggb24gcGVyZm9ybWFuY2UsIGFuZCBvbiBtZW1vcnkgZnJhZ21lbnRhdGlvbj8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXZlIGFueSBpbmhlcmVudCB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGV5IGNvbnNpZGVyaW5nIG11bHRpLXRocmVhZGVkIGFjY2VzcyBhbmQgdGhlIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdoZW4gbW9kaWZ5aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGF0dHJpYnV0ZXM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgc2hhcmVkIG1lbW9yeSByZWdpb25zPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkZXRhaWxzIHRoYXQgYXJlIGVhc3kgdG8gb3Zlcmxvb2ssIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBzeXN0ZW1zLWxldmVsIGNvZGUgbGlrZSB0aGlzLiBTbywgbGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMyMT1pbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMjk6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHNldF9tZW1vcnlfcm9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGZvciBgc2V0X21lbW9yeV9yb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyBsaWtlbHkgY29udHJvbGxpbmcgcmVhZC1vbmx5IGFjY2VzcyBmb3IgYSBtZW1vcnkgcmVnaW9uLCBwb3NzaWJseSBhIHBoeXNpY2FsIG1lbW9yeSByYW5nZSBvciBhIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGluIHNjZW5hcmlvcyBkZW1hbmRpbmcgbWVtb3J5IHByb3RlY3Rpb24sIHNlY3VyaXR5IGhhcmRlbmluZywgb3IgcGVyaGFwcyBldmVuIGluIGRlYnVnZ2luZyB3aGVuIHRyeWluZyB0byBpc29sYXRlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbjoKCiogICAqKlVuZGVybHlpbmcgTWVjaGFuaXNtOioqIEhvdyBkb2VzIGl0IGFjdHVhbGx5IGVuZm9yY2UgdGhlIHJlYWQtb25seSByZXN0cmljdGlvbj8gSXMgaXQgbGV2ZXJhZ2luZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudD8gT3IsIGlzIGl0IHBlcmhhcHMgYSB1c2VybGFuZCB1dGlsaXR5IHRoYXQgdXNlcyBzeXN0ZW0gY2FsbHMgdG8gYWNoaWV2ZSB0aGlzIGVmZmVjdD8KKiAgICoqQ29udGV4dDoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXM/IEVtYmVkZGVkIHN5c3RlbXM/IE9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIG1vZHVsZXM/IEh5cGVydmlzb3JzPyBTZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zPwoqICAgKipHcmFudWxhcml0eToqKiBXaGF0JiMzOTtzIHRoZSBzbWFsbGVzdCB1bml0IG9mIG1lbW9yeSBpdCBjYW4gYWZmZWN0PyBJcyBpdCBwYWdlLWxldmVsLCBieXRlLWxldmVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KKiAgICoqQXRvbWljaXR5OioqIElmIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMsIGhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3k/IEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBvcGVyYXRpb24gZmFpbHM/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIHJhaXNlIGFuIGV4Y2VwdGlvbiwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncy4KKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIFdoYXQgYXJlIHRoZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcHJpdmlsZWdlcyB0aGF0IGFyZSBuZWVkZWQgdG8gZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uPyBBbnkgcG90ZW50aWFsIGZvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiBpZiBtaXN1c2VkPwoKSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBzZXRfbWVtb3J5X3JvYCBpbiBhIGdpdmVuIHNpdHVhdGlvbi4gVGhpcyByZXF1aXJlcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aWxsIGFpZCBpbiBteSBhbmFseXNpcy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGxpa2UgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGNhY2hlcyBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gdmVyeSBjYXJlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyOTpcdGludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuMjMzMDpcdHtcbjIzMzE6XHRcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSwgMCk7XG4yMzMyOlx0fVxuMjMzMzpcdFxuMjMzNDpcdGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbjIzMzU6XHR7XG4yMzM2Olx0XHRwZ3Byb3RfdCBjbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKTtcbjIzMzc6XHRcbjIzMzg6XHRcdGlmIChfX3N1cHBvcnRlZF9wdGVfbWFzayBcdTAwMjYgX1BBR0VfTlgpXG4yMzM5Olx0XHRcdGNsci5wZ3Byb3QgfD0gX1BBR0VfTlg7XG4yMzQwOlx0XG4yMzQxOlx0XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuMjM0MjpcdFx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuMjM0MzpcdH1cbjIzNDQ6XHRcbjIzNDU6XHRpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbjIzNDY6XHR7XG4yMzQ3Olx0XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXKSwgMCk7XG4yMzQ4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg1MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBgQ1BBX0NPTExBUFNFYCB0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNldHMgaXQgaXMgYHNldF9tZW1vcnlfcm94YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhhdCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnVnIGZpeC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtLCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBmaXggaW52b2x2ZXMgYWRkaW5nIGEgcmVhZCBsb2NrIHdpdGhpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jIHdpdGggYHB0ZHVtcGAsIGJlY2F1c2UgYHB0ZHVtcGAgdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwgY29kZSB0aGF04oCZcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBpbiBkZXRhaWwuCgpNeSBjdXJyZW50IHN1bW1hcnkgaXM6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGZyb250IG9mIG1pbmQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYW5kIG9mIGNvdXJzZSBgc2V0X21lbW9yeV9yb3hgLiBBbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZW5hYmxlZCB0aGUgYFBURFVNUF9ERUJVR0ZTYCBjb25maWcuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19ERUJVR19XWGAuIEl0IGxvb2tzIGxpa2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAsIHdoaWNoIHRoZW4gY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYC4gSSBuZWVkIHRvIGZvbGxvdyB0aGF0IGZsb3cgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBhY3QuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgY2hlY2sgb2YgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgcnVubmluZyBhdCBhIHByZXR0eSBjcnVjaWFsIHBvaW50IOKAkyBlaXRoZXIgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2Ugb3Igd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssICYjMzQ7SW50ZXJlc3RpbmcuIFdoYXQmIzM5O3MgaXQgY2hlY2tpbmcsIGFuZCB3aGVyZSBpcyBpdCBiZWluZyB1c2VkPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHNvIGVhcmx5IGdpdmVzIHVzIHZhbHVhYmxlIGluc2lnaHRzIGludG8gaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgb3IgYW55IGVhcmx5IHN5c3RlbSBjaGVja3MuIEEgZnVsbCB1bmRlcnN0YW5kaW5nIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAgaXMgaW52b2tlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzI9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVx0XHRcdFx0ICAgYm9vbCB1c2VyKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNDpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzYtdm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHB0ZHVtcF9jaGVja193eGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGhlIG1lbnRhbCBtYXAgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgcHRkdW1wX2NoZWNrX3d4YC4gTXkgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSB3YXkgSSYjMzk7dmUgc3RydWN0dXJlZCBteSBtZW50YWwgbWFwLCBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIGRhdGEgdmFsaWRhdGlvbiBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IGBwdGR1bXBfY2hlY2tfd3hgIGlzIHVzZWQgb3Igd2hlcmUgaXRzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgaW50ZW50aW9uIGlzIGJ5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIGFuZCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9jaGVja193eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNS0jaWZkZWYgQ09ORklHX0FSTV9ERUJVR19XWFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzY6I2RlZmluZSBhcm1fZGVidWdfY2hlY2t3eCgpIHB0ZHVtcF9jaGVja193eCgpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNy0jZWxzZVxuLS1cbmFyY2gvYXJtL21tL2R1bXAuYz00NDc9c3RhdGljIHN0cnVjdCBwdGR1bXBfaW5mbyBrZXJuZWxfcHRkdW1wX2luZm8gPSB7XG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1Mi1cbmFyY2gvYXJtL21tL2R1bXAuYzo0NTM6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZClcbmFyY2gvYXJtL21tL2R1bXAuYy00NTQte1xuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzM0PXN0YXRpYyBzdHJ1Y3QgcHRkdW1wX2luZm8ga2VybmVsX3B0ZHVtcF9pbmZvIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzNy1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzM4OmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzOS17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX3BndGFibGVfY29tcGxldGVfbWFzayh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY3LVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozNjg6Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY5LXtcbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzUtXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3Njpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzcte1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xNzU9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODEtXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MTgyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgzLXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzQ9Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNTojZGVmaW5lIHB0ZHVtcF9jaGVja193eCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTMxPXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMy1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2NoZWNrd3godm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM2LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1dYKSlcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mzc6XHRcdHB0ZHVtcF9jaGVja193eCgpO1xuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zOC19XG4tLVxubW0vcHRkdW1wLmM9MTkzPXN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9wdGR1bXAuYy0xOTQte1xubW0vcHRkdW1wLmM6MTk1Olx0aWYgKHB0ZHVtcF9jaGVja193eCgpKVxubW0vcHRkdW1wLmMtMTk2LVx0XHRzZXFfcHV0cyhtLCBcJiMzNDtTVUNDRVNTXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0ODYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQm9vdC1UaW1lIFJlYWQtT25seSBEYXRhIENoZWNrKioKClJpZ2h0LCBzbyBgZGVidWdfY2hlY2t3eGAgaXMgaW52b2tlZCBieSBgbWFya19yb2RhdGFfcm9gLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBhIHNhbml0eSBjaGVjayBlYXJseSBvbiwgdHlwaWNhbGx5IGF0IGJvb3QsIHRvIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHJlYWQtb25seSBkYXRhLiBCdXQgd2hhdCYjMzk7cyBzbGlnaHRseSB1bnVzdWFsIGlzIHRoYXQgYGNoZWNrX3d4X3Nob3dgIGlzIGRlZmluZWQgd2l0aGluIGBtbS9wdGR1bXAuY2AuIFRoYXQmIzM5O3MgYSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlLiBXaHkgd291bGQgYSByZWFkLW9ubHkgZGF0YSBpbnRlZ3JpdHkgY2hlY2ssIHdoaWNoLCBJIHByZXN1bWUsIGlzIHJlbGF0aXZlbHkgc3RhdGljIGF0IHRoYXQgcG9pbnQsIHJlc2lkZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgY2hlY2tfd3hfc2hvd2AgaXMgdXNlZC4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBmb3IgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJseSByZXZlYWwgc29tZXRoaW5nIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNoZWNrIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfd3hfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4tLVxubW0vcHRkdW1wLmMtMTkyLVxubW0vcHRkdW1wLmM6MTkzOnN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9wdGR1bXAuYy0xOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbW0vcHRkdW1wLmNgIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgdGhlIGBjaGVja193eF9zaG93YCBmdW5jdGlvbiwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gYG1tL3B0ZHVtcC5jYCBhbmQgYGNoZWNrX3d4X3Nob3dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9wdGR1bXAuY2AsIG5hdHVyYWxseSBncmF2aXRhdGluZyB0b3dhcmRzIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRlY2lkaW5nIHdoYXQmIzM5O3MgZGlzcGxheWVkIG9yIGhpZGRlbiwgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyBvciBwcm90ZWN0aW9uIGluIHRoZSBzeXN0ZW0uIFRoZSBmaWxlJiMzOTtzIG5hbWUgaXRzZWxmIHN0cm9uZ2x5IHN1Z2dlc3RzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcsIHNvIHRoZSBjb250ZXh0IGlzIHByZXR0eSBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzIGlmIHNvbWV0aGluZyBuZWVkcyB0byBiZSBzaG93biwgd2hhdCBjcml0ZXJpYSBhcmUgdXNlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgdGhpbmtpbmcgYWJvdXQ6CiogICAqKlNlY3VyaXR5IENvbnRleHQqKjogSXMgdGhpcyByZWxhdGVkIHRvIHJlc3RyaWN0aW5nIGFjY2VzcyB0byBjZXJ0YWluIG1lbW9yeSByZWdpb25zIGZvciBzZWN1cml0eSByZWFzb25zLCBwZXJoYXBzIHJlbGF0ZWQgdG8gV15YIChXcml0ZSBYT1IgRXhlY3V0ZSkgcHJvdGVjdGlvbnM/CiogICAqKkRlYnVnZ2luZyBUb29scyoqOiBDb3VsZCBpdCBiZSBhIGRlYnVnZ2luZyBhaWQsIGFsbG93aW5nIGNlcnRhaW4gbWVtb3J5IHN0YXRlcyB0byBiZSBzaG93biBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbioqOiBEb2VzIGl0IGZpbHRlciBvdXQgaW5mb3JtYXRpb24gdG8gcmVkdWNlIG92ZXJoZWFkIGR1cmluZyBhIHB0ZHVtcCwgb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/CiogICAqKkVycm9yIERldGVjdGlvbioqOiBQZXJoYXBzIGl0JiMzOTtzIGEgZGlhZ25vc3RpYyB0b29sLCBmbGFnZ2luZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG1hcHBpbmdzLgoqICAgKipSYWNlIENvbmRpdGlvbnMqKjogQ291bGQgdGhlcmUgYmUgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGFsbG93cyBtZW1vcnkgdG8gYmUgZGlzcGxheWVkIHVuZGVyIGNlcnRhaW4gcmFyZSBjb25kaXRpb25zPwoKSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBjb21wYXJpc29ucyBhZ2FpbnN0IGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGFuZCBjYWxscyB0byBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhIHNoYXJwIGV5ZSBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRzdC1cdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIDE5NDpcdHtcbiAxOTU6XHRcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcbiAxOTY6XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7U1VDQ0VTU1xcblwmIzM0Oyk7XG4gMTk3Olx0XHRlbHNlXG4gMTk4Olx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O0ZBSUxFRFxcblwmIzM0Oyk7XG4gMTk5Olx0XG4gMjAwOlx0XHRyZXR1cm4gMDtcbiAyMDE6XHR9XG4gMjAyOlx0XG4gMjAzOlx0REVGSU5FX1NIT1dfQVRUUklCVVRFKGNoZWNrX3d4KTtcbiAyMDQ6XHRcbiAyMDU6XHRzdGF0aWMgaW50IHB0ZHVtcF9kZWJ1Z2ZzX2luaXQodm9pZClcbiAyMDY6XHR7XG4gMjA3Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NoZWNrX3d4X3BhZ2VzXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZjaGVja193eF9mb3BzKTtcbiAyMDg6XHRcbiAyMDk6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyNAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWxpemluZyB0aGUgQW5hbHlzaXMqKgoKT2theSwgc28gYGNoZWNrX3d4X3BhZ2VzYCBpcyBhY3R1YWxseSBwYXJ0IG9mIGBkZWJ1Z2ZzYCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIFNvLCBjb25maXJtaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0LiBMZXQmIzM5O3MgbWFrZSB0aGlzIGZpbmFsLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyB0aGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQmIzM5O3MgYWRkcmVzc2luZyB0aGUgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHB0ZHVtcGAsIHN5bmNocm9uaXppbmcgdGhlbSB3aXRoIGEgcmVhZCBsb2NrLCBhbmQgdGhlIHdyaXRlIGxvY2ssIHJlc3BlY3RpdmVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGFmZmVjdHMgY29kZSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBjb3JlIGtlcm5lbC4KClRoZSBjcml0aWNhbCBzeW1ib2xzIEkmIzM5O2xsIGZvY3VzIG9uIGFyZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGFuZCBgc2V0X21lbW9yeV9yb3hgLiBBbmQgb2YgY291cnNlLCB3ZSYjMzk7bGwgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AgdG8gbWFrZSB0aGlzIGFsbCBhY2Nlc3NpYmxlLiBJIGZlZWwgZ29vZCBhYm91dCB0aGVzZSBjb25jbHVzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo0Ni40NTExNDg1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwNjI4MTE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwic2V0X21lbW9yeV9yb3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjQ2LjQ1MTE1NDY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzNDY0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmNmMWQzN2Q1ZGJmNWI3YzkxYjQyY2UwY2Q3YjRlMzU5YTUzNDkzMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2U4MjAvYXBpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTQzNiw5ICs0MzcsMTYgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXG4gXFx0Zmx1c2hfdGxiX2FsbCgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdC8qXFxuK1xcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XFxuK1xcdCAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwXFxuK1xcdCAqIHdyaXRlIGxvY2spLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFxcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xcbitcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9saXN0KTtcXG4rXFx0XFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjQ3LjM3NjMwODExM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MTM3NjQwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBidWcgKHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSByZWFkIGxvY2sgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gc3luY2hyb25pemUgd2l0aCBgcHRkdW1wYCB3aGljaCB0YWtlcyB0aGUgd3JpdGUgbG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZjFkMzdkNWRiZjViN2M5MWI0MmNlMGNkN2I0ZTM1OWE1MzQ5MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uNGM0YjgyNDQ1MDJmY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDM2LDkgKzQzNywxNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXG4gXHRmbHVzaF90bGJfYWxsKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdC8qXG4rXHQgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieVxuK1x0ICogYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBpbml0X21tIChwdGR1bXAgYWNxdWlyZXMgdGhlIG1tYXBcbitcdCAqIHdyaXRlIGxvY2spLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbitcdFx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTU6NDcuMzc2MzEwMjMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1NzEzODQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgYHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlgIHdoZW4gdGhlIGZ1bmN0aW9uIGZyZWVzIHBhZ2UgdGFibGVzLiBJbnRlcmVzdGluZy4gVGhhdCdzIGEgY2xhc3NpYyBzaWduIG9mIHRyeWluZyB0byBmaXggYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBtZWFucyBzb21ldGhpbmcgaXMgZ29pbmcgdG8gYmUgcmVhZGluZyB0aGVzZSBwYWdlIHRhYmxlcy4gSSB3b25kZXIgd2hhdCBpdCBpcy5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGBwdGR1bXBgLCB3aGljaCBpbXBsaWVzIHRoYXQgYHB0ZHVtcGAgaXMgcmVhZGluZyB0aGVzZSBwYWdlIHRhYmxlcywgYW5kIHBvc3NpYmx5IGRvaW5nIHNvIHdoaWxlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jay4gU2VlbXMgbGlrZSBhIGNsZWFyIHJhY2UgaWYgeW91IGFyZW4ndCBjYXJlZnVsIGFib3V0IHN5bmNocm9uaXphdGlvbi5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFjdHVhbGx5ICpkb2VzKi4gSXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTGV0J3MgdHJhY2UgdGhlIGNhbGxzIGFuZCBzZWUgaG93IHRoaXMgZ3VhcmQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjUxLjczMzQ1MTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI2MjY1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00MTI9c3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQxNDpzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OC1cXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4OTpcXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjUxLjk2NjA4NDEwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU1MDM4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqVHJhY2luZyB0aGUgUGFnZSBGbHVzaGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGludm9rZWQgYnkgYGNwYV9mbHVzaGAuIFRoYXQncyBhIGNsZWFyIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aGVuKiB0aGVzZSBsYXJnZSBwYWdlIGNvbGxhcHNlcyBvY2N1ci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgY3BhX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBzdGFjayB1cHdhcmRzIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXJzIGZvciB0aGlzIGZsdXNoaW5nIG9wZXJhdGlvbiBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGZyb20gYGNwYV9mbHVzaGAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgYW5kIHByb2Nlc3NlcyB0aGF0IGxlYWQgdG8gbGFyZ2UgcGFnZXMgYmVpbmcgY29uc2lkZXJlZCBmb3IgY29sbGFwc2UuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGluIHBsYXkgaGVyZS4gSSdtIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IHBhdHRlcm5zIGluIHRoZSBjYWxsIHNpdGVzIHRoYXQgbWlnaHQgaGludCBhdCBzcGVjaWZpYyBtZW1vcnkgcHJlc3N1cmVzIG9yIHdvcmtsb2Fkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjU1LjE4MTU4OTgzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMyMjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM3OT1FWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFxcXCJERVZNRU1cXFwiKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzgyOnN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX2FsbCh2b2lkICphcmcpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zODMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zOTUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozOTY6c3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FsbCh1bnNpZ25lZCBsb25nIGNhY2hlKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAwOlxcdG9uX2VhY2hfY3B1KF9fY3BhX2ZsdXNoX2FsbCwgKHZvaWQgKikgY2FjaGUsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDAxLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQwMzpzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwNC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxND1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1MzpzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1OS1cXHRpZiAoY2FjaGUgXFx1MDAyNlxcdTAwMjYgIXN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NjA6XFx0XFx0Y3BhX2ZsdXNoX2FsbChjYWNoZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NjEtXFx0XFx0Z290byBjb2xsYXBzZV9sYXJnZV9wYWdlcztcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY2LVxcdGVsc2VcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ2NzpcXHRcXHRvbl9lYWNoX2NwdShfX2NwYV9mbHVzaF90bGIsIGNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIwNjQ9c3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM3LVxcdGlmIChyZXQpIHtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxMzg6XFx0XFx0Y3BhX2ZsdXNoX2FsbChjYWNoZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE0MjpcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgY2FjaGUpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE0My1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTA9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxcdGlmICh4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3RsYl9mbHVzaF9yZXF1aXJlZChlbmMpKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQxMzpcXHRcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgeDg2X3BsYXRmb3JtLmd1ZXN0LmVuY19jYWNoZV9mbHVzaF9yZXF1aXJlZCgpKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MTQtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjQtXFx0ICogaW4gY2FzZSBhbnkgc3BlY3VsYXRpdmUgVExCIGNhY2hpbmcgb2NjdXJyZWQgKGJ1dCBubyBuZWVkIHRvIGZsdXNoXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI1OlxcdCAqIGNhY2hlcyBhZ2FpbikuICBXZSBjb3VsZCBqdXN0IHVzZSBjcGFfZmx1c2hfYWxsKCksIGJ1dCBpbiBjYXNlIFRMQlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyNjpcXHQgKiBmbHVzaGluZyBnZXRzIG9wdGltaXplZCBpbiB0aGUgY3BhX2ZsdXNoKCkgcGF0aCB1c2UgdGhlIHNhbWUgbG9naWNcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjctXFx0ICogYXMgYWJvdmUuXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI4LVxcdCAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyOTpcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDMwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo1NS4yNzQ5MTg4NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MzI0NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGNwYV9mbHVzaGAsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBhbmQgYF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZWAuIEkga25vdyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgaGVhcnQgb2YgZnVuY3Rpb25zIGxpa2UgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGFuZCB0aG9zZSBvdGhlciBtZW1vcnkgcGVybWlzc2lvbiBzZXR0ZXJzIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblJpZ2h0LCBzbyB0byBkaWcgaW4gZnVydGhlciBJJ2xsIGZvY3VzIG9uIGBjcGFfZmx1c2hgLCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBvciBldmVuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBXYWl0Li4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIG9ubHkgZ2V0cyBjYWxsZWQgaWYgdGhlIGBDUEFfQ09MTEFQU0VgIGZsYWcgaXMgc2V0IGluIHRoZSBgY3BhYCBzdHJ1Y3R1cmUuICBUaGF0IGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGBDUEFfQ09MTEFQU0VgIGZsYWcgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB3ZSBhcmUgY29sbGFwc2luZyBsYXJnZSBwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo1OS42ODAyNDU5MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTgxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNQQV9DT0xMQVBTRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NzE9c3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Nzc6I2RlZmluZSBDUEFfQ09MTEFQU0UgMTYgLyogdHJ5IHRvIGNvbGxhcHNlIGxhcmdlIHBhZ2VzICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03OC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODg6XFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDUEFfQ09MTEFQU0UpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODktXFx0XFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQxLVxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MjpcXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjU5LjkxNTIzMzA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODU0OTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKlVucmF2ZWxpbmcgYSBNZW1vcnkgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ1BBX0NPTExBUFNFYC4uLiBJIHNhdyBpdCBtZW50aW9uZWQgaW4gYHNldF9tZW1vcnlfcm94YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gQSBxdWljayBncmVwIGZvciBgQ1BBX0NPTExBUFNFYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEdvdHRhIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgY29udGV4dCBhbmQgZXZlcnkgcGxhY2UgaXQncyB0b3VjaGVkOyBJdCBjb3VsZCBiZSB1c2VkIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgSSdsbCBuZWVkIGFsbCB0aGUgaW5mb3JtYXRpb24uIExldCdzIHNlZSBob3cgd2lkZXNwcmVhZCB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MDIuOTQzNzg0NzQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxOTIyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1BBX0NPTExBUFNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzYtI2RlZmluZSBDUEFfTk9fQ0hFQ0tfQUxJQVMgOCAvKiBEbyBub3Qgc2VhcmNoIGZvciBhbGlhc2VzICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc4LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4Ny1jb2xsYXBzZV9sYXJnZV9wYWdlczpcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OS1cXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMzND1pbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEtXFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQyOlxcdFxcdFxcdFxcdFxcdENQQV9DT0xMQVBTRSwgTlVMTCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MDMuNDM1OTg3MDE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzI0MzU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGZvciBDb2xsYXRlcmFsIERhbWFnZSoqXG5cbkhtbSwgc28gYHNldF9tZW1vcnlfcm94YCBzZXRzIGBDUEFfQ09MTEFQU0VgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBkZWZpbml0ZWx5IHJpbmdzIGEgYmVsbC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcmlwcGxlIGVmZmVjdHMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcy4gQXJlIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbnMgd2hlcmUgYENQQV9DT0xMQVBTRWAgbWlnaHQgYmUgbWFuaXB1bGF0ZWQ/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCwgYW5kIGlmIGl0IGlzLCB0aGUgY29kZSB3aWxsIGxpa2VseSBuZWVkIGNsb3NlIHJldmlldy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIG9yIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gb3RoZXIgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjowNi41Njg0MjU2OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODU1MDgzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1BBX0NPTExBUFNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTcxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03Ni0jZGVmaW5lIENQQV9OT19DSEVDS19BTElBUyA4IC8qIERvIG5vdCBzZWFyY2ggZm9yIGFsaWFzZXMgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc3OiNkZWZpbmUgQ1BBX0NPTExBUFNFIDE2IC8qIHRyeSB0byBjb2xsYXBzZSBsYXJnZSBwYWdlcyAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg3LWNvbGxhcHNlX2xhcmdlX3BhZ2VzOlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg4OlxcdGlmIChjcGEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ1BBX0NPTExBUFNFKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVxcdFxcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzM0PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIGNsciwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XFx0XFx0XFx0XFx0XFx0Q1BBX0NPTExBUFNFLCBOVUxMKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjoxMi40NTM5MzkzNDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMzYwMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgQ1BBX0NPTExBUFNFIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBlbmFibGluZyB0aGlzIGBDUEFfQ09MTEFQU0VgIGZsYWcuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgKm9ubHkqIHRoZSBgc2V0X21lbW9yeV9yb3hgIGZ1bmN0aW9uIGNhbiBzZXQgaXQuIFRoYXQncyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50LCBhIGZvY3VzZWQgaHlwb3RoZXNpcy4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB0cmFjZSAqYWxsKiB0aGUgY2FsbHMgdG8gYHNldF9tZW1vcnlfcm94YC4gRmluZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEknbSBsb29raW5nIGZvciB0aGUgdHJpZ2dlcnMsIHRoZSBjb25kaXRpb25zLCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGxlYWRzIHRvIGBDUEFfQ09MTEFQU0VgIGJlaW5nIGFjdGl2YXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgYHNldF9tZW1vcnlfcm94YCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjE1LjI3NzU0MzU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwODE5NzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz01OT12b2lkICpvbWFwX3NyYW1fcHVzaCh2b2lkICpmdW5jcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy03Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjc3OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz04OT1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9kZXRlY3RfYW5kX21hcF9zcmFtKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTEyNS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjEyNjpcXHRzZXRfbWVtb3J5X3JveChiYXNlLCBwYWdlcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy0xMjctfVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM9ODE9dm9pZCAqb21hcF9zcmFtX3B1c2godm9pZCAqZnVuY3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jLTk4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jOjk5OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0xMDAtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYz0xODA9c3RhdGljIHZvaWQgX19pbml0IG9tYXAyX21hcF9zcmFtKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0yMTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM6MjE5OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0yMjAtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz00NT12b2lkICphbGxvY19pbnNuX3BhZ2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtNTEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzo1MjpcXHRpZiAoc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpYWRkciwgMSkpIHtcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTUzLVxcdFxcdGV4ZWNtZW1fZnJlZShhZGRyKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM9MjYwPWludCBsYXJjaF9pbnNuX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmMtMjg4LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM6Mjg5OlxcdGVyciA9IHNldF9tZW1vcnlfcm94KHN0YXJ0LCAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jLTI5MC1cXHRpZiAoZXJyKSB7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYzoyOTE6XFx0XFx0cHJfaW5mbyhcXFwiJXM6IHNldF9tZW1vcnlfcm94KCkgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYy0yOTItXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NDA9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNDQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC00Ni17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ4LX1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTUwLVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0yNz1pbnQgX19zZXRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBudW1wYWdlcywgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0yOC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjI5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTMwLVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD01OD1fX1NFVF9NRU1PUllfRlVOQyhzZXRfbWVtb3J5X3gsIFNFVF9NRU1PUllfWClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU5Ol9fU0VUX01FTU9SWV9GVU5DKHNldF9tZW1vcnlfcm94LCBTRVRfTUVNT1JZX1JPIHwgU0VUX01FTU9SWV9YKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNjAtX19TRVRfTUVNT1JZX0ZVTkMoc2V0X21lbW9yeV9yd254LCBTRVRfTUVNT1JZX1JXIHwgU0VUX01FTU9SWV9OWClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jPTM2PXZvaWQgKmFsbG9jX2luc25fcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDItXFx0XFx0cmV0dXJuIE5VTEw7XFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM6NDM6XFx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFnZSwgMSk7XFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDQtXFx0cmV0dXJuIHBhZ2U7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTQ3MD1zdGF0aWMgaW50IG1vZHVsZV9hbGxvY19mdHJhY2VfaG90cGF0Y2hfdHJhbXBvbGluZXMoc3RydWN0IG1vZHVsZSAqbWUsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jLTQ4MS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jOjQ4MjpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylzdGFydCwgbnVtcGFnZXMpO1xcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgzLVxcdGVuZCA9IHN0YXJ0ICsgc2l6ZTtcXG4tLVxcbmFyY2gvczM5MC9tbS92bWVtLmM9Njc0PXZvaWQgX19pbml0IHZtZW1fbWFwX2luaXQodm9pZClcXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3NS17XFxuYXJjaC9zMzkwL21tL3ZtZW0uYzo2NzY6XFx0X19zZXRfbWVtb3J5X3JveChfc3RleHQsIF9ldGV4dCk7XFxuYXJjaC9zMzkwL21tL3ZtZW0uYy02NzctXFx0X19zZXRfbWVtb3J5X3JvKF9ldGV4dCwgX19lbmRfcm9kYXRhKTtcXG5hcmNoL3MzOTAvbW0vdm1lbS5jOjY3ODpcXHRfX3NldF9tZW1vcnlfcm94KF9fc3RleHRfYW1vZGUzMSwgX19ldGV4dF9hbW9kZTMxKTtcXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3OS1cXHQvKlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xMS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz0zMDk9Y3JlYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgaW50ICp0cmFtcF9zaXplKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyNy1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDI4OlxcdHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmUsIG5wYWdlcyk7XFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyOS1cXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9MzQzPWludCBtYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM2NC1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjM2NTpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PWludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzM1LXtcXG4tLVxcbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYz03Mz12b2lkICpzcmFtX2V4ZWNfY29weShzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHZvaWQgKmRzdCwgdm9pZCAqc3JjLFxcbi0tXFxuZHJpdmVycy9taXNjL3NyYW0tZXhlYy5jLTEwOC1cXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmM6MTA5OlxcdHJldCA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKWJhc2UsIHBhZ2VzKTtcXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmMtMTEwLVxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD02Nz12b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc1LSAqIGFmdGVyIGl0IHdhcyB0ZW1wb3JhcmlseSByZW1hcHBlZCBhcyB3cml0YWJsZS4gUmVsaWVzIG9uIGFyY2hpdGVjdHVyZVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjc2OiAqIGltcGxlbWVudGF0aW9uIG9mIHNldF9tZW1vcnlfcm94KCkgdG8gcmVzdG9yZSBtYXBwaW5nIHVzaW5nIGxhcmdlIHBhZ2VzLlxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc3LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExMTE9YnBmX2ppdF9iaW5hcnlfbG9ja19ybyhzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTExMy1cXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMoaGRyKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExMTQ6XFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKWhkciwgaGRyLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTExNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE4OnN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTkxOD1zdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtOTM0LVxcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVxcdTAwM2VwdHIpO1xcbmtlcm5lbC9icGYvY29yZS5jOjkzNTpcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVxcdTAwM2VwdHIsXFxua2VybmVsL2JwZi9jb3JlLmMtOTM2LVxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTk0OD12b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTk3MS1cXHRcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocHRyKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzo5NzI6XFx0XFx0XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcHRyLFxcbmtlcm5lbC9icGYvY29yZS5jLTk3My1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2MT1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDYzLVxcdFdBUk5fT05fT05DRShzaXplIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDY0OlxcdHJldHVybiBzZXRfbWVtb3J5X3JveCgobG9uZylpbWFnZSwgMSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2NS19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYz0zMz1pbnQgbW9kdWxlX2VuYWJsZV90ZXh0X3JveChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy00MS1cXHRcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6NDI6XFx0XFx0XFx0cmV0ID0gbW9kdWxlX3NldF9tZW1vcnkobW9kLCB0eXBlLCBzZXRfbWVtb3J5X3JveCk7XFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNDMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZXhlY21lbS5jPTE1MD1pbnQgZXhlY21lbV9yZXN0b3JlX3JveCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vZXhlY21lbS5jLTE1NC1cXG5tbS9leGVjbWVtLmM6MTU1OlxcdHJldHVybiBzZXRfbWVtb3J5X3JveChhZGRyLCBucik7XFxubW0vZXhlY21lbS5jLTE1Ni19XFxuLS1cXG5tbS9leGVjbWVtLmM9Mjc3PXN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtMzAyLVxcbm1tL2V4ZWNtZW0uYzozMDM6XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcCwgdm0tXFx1MDAzZW5yX3BhZ2VzKTtcXG5tbS9leGVjbWVtLmMtMzA0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjE5LjI4NTc0ODYzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg3MjEwMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBgc2V0X21lbW9yeV9yb3hgIGlzIGEgZnVuY3Rpb24gdGhhdCdzIHByZXR0eSBicm9hZGx5IHVzZWQg4oCTIGNhbGxlZCBmcm9tIGFsbCBzb3J0cyBvZiBwbGFjZXM6IEJQRiwga2VybmVsIG1vZHVsZXMsIGtwcm9iZXMsIGZ0cmFjZSwgZXZlbiBrZXhlYy4gVGhhdCBtZWFucyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIFRoZSBwYXRjaCBhZGRzIGEgYHNjb3BlZF9ndWFyZGAgYXJvdW5kIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgbG9vcCB3aXRoaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSwgYW5kIGEgZ29vZCBvbmUsIHNlZW1pbmdseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgaXNzdWUsIG1vc3QgbGlrZWx5IHRyaWdnZXJlZCBieSBgcHRkdW1wYC5cblxuSGFuZyBvbiwgYHB0ZHVtcGDigKYgcmlnaHQsIHRoYXQncyB0aGUgaW50ZXJmYWNlIHVzZWQgdGhyb3VnaCBkZWJ1Z2ZzIG9yIHN5c2ZzIHRvIGR1bXAgb3V0IHBhZ2UgdGFibGVzLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB3aGVyZSBgcHRkdW1wYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwcm9jZXNzLiBJIHRoaW5rIHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjIzLjE3Mjk2MTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNzYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNy1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6ODpzdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTEzLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxNDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE2OnN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTcte1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjQtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI1LSNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9QQUdFX1RBQkxFX0lTT0xBVElPTlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI3LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjMzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3VydXNyKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzYtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWDg2XzY0KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozNzpzdGF0aWMgaW50IHB0ZHVtcF9lZmlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXFx0aWYgKGVmaV9tbS5wZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZlZmlfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDMtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQ0OkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfZWZpKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9NDk9c3RhdGljIGludCBfX2luaXQgcHRfZHVtcF9kZWJ1Z19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjUzOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbFxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTQtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF9rZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU1OlxcdFxcdFxcdCAgICBcXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF91c2VyXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1OTpcXHRcXHRcXHQgICAgXFx1MDAyNnB0ZHVtcF9jdXJ1c3JfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy02MS0jaWYgZGVmaW5lZChDT05GSUdfRUZJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjYyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVmaVxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMC1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTI4PXN0cnVjdCBwZ19zdGF0ZSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjk6XFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAtXFx0aW50IGxldmVsO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI3PXN0YXRpYyB2b2lkIG5vdGVfd3goc3RydWN0IHBnX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI1MTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Mi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTQtXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI2OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB0ZV90IHB0ZSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBtZF90IHBtZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHA0ZF90IHA0ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBnZF90IHBnZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjk5LSAqL1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMS1cXHRcXHQgICAgICB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzAzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMDQtXFx0cGdwcm90dmFsX3QgbmV3X3Byb3QsIG5ld19lZmY7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzkxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDAxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDA2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcDRkX3QgcDRkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQxMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDE2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTcte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNzpcXHRjb25zdCBzdHJ1Y3QgcHRkdW1wX3JhbmdlIHB0ZHVtcF9yYW5nZXNbXSA9IHtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQzNy1cXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDM4OlxcdFxcdC5wdGR1bXAgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDM5LVxcdFxcdFxcdC5ub3RlX3BhZ2VfcHRlID0gbm90ZV9wYWdlX3B0ZSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cXHRcXHRcXHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1MDpcXHRcXHRcXHQucmFuZ2VcXHRcXHQ9IHB0ZHVtcF9yYW5nZXNcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTEtXFx0XFx0fSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXFx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQwLVxcdC8qXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDE6XFx0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MjpcXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQzLVxcdCAqIHdyaXRlIGxvY2spLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjoyMy4zMzYzNDMwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY0NzAzNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBSZWxhdGVkIHRvIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGBwdGR1bXBgLCB3aGljaCBpcywgb2YgY291cnNlLCBhY2Nlc3NpYmxlIHRocm91Z2ggZGVidWdmcyBhdCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV90YWJsZXMva2VybmVsYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pYCB0byB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBNeSBtZW50YWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuIFRoaXMgbG9jayBhZGRpdGlvbiBtZWFucyB0aGF0IGBwdGR1bXBgICphY3F1aXJlcyogdGhlIG1tYXAgKnJlYWQqIGxvY2suIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9ja2luZyBjb250ZXh0IG9mIGBwdGR1bXBgLiBUbyBiZSBjZXJ0YWluIHRoaXMgaXMgY29ycmVjdCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSwgSSB3aWxsIGNoZWNrIGVpdGhlciBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIG9yIHBvc3NpYmx5IGBwdGR1bXBfd2Fsa19wZ2RgLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBsb2NrIGFjcXVpc2l0aW9uIGlzIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHRoYXQgdGhleSdyZSBub3QgY2F1c2luZyBhIGRpZmZlcmVudCBraW5kIG9mIGlzc3VlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjI3LjUwMTA0OTM3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDQzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfLipsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xNzktXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxubW0vcHRkdW1wLmM6MTgwOlxcdG1tYXBfd3JpdGVfbG9jayhtbSk7XFxubW0vcHRkdW1wLmMtMTgxLVxcdHdoaWxlIChyYW5nZS1cXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXFx1MDAzZWVuZCkge1xcbi0tXFxubW0vcHRkdW1wLmMtMTg1LVxcdH1cXG5tbS9wdGR1bXAuYzoxODY6XFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbm1tL3B0ZHVtcC5jLTE4Ny1cXHRwdXRfb25saW5lX21lbXMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MjcuNjUxMTAwMDU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzI5MDUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY3VycmVuY3kgQnVnIEZpeCAtIFdvcnRoIEZ1enppbmc/KipcblxuT2theSwgc28gYHB0ZHVtcF93YWxrX3BnZGAgKmRvZXMqIHRha2UgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGF0IG1lYW5zIHRha2luZyBgbW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSlgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNyZWF0ZXMgc3luY2hyb25pemF0aW9uIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHRvIGJlIHByZWNpc2UuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEZ1enppbmcgY291bGQgZXhwb3NlIHRoZSByYWNlIGNvbmRpdGlvbiBpZiB0aGUgZml4IHdhc24ndCBwcmVzZW50LCBvciBpdCBjb3VsZCBoZWxwIHRvIHZhbGlkYXRlIHRoZSBuZXcgbG9ja2luZyBtZWNoYW5pc20uXG5cbkhhbmcgb24uLi4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgY2FsbGVkIHdoZW4gYHNldF9tZW1vcnlfcm94YCBpcyB1c2VkLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEFuZCBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQgYnkgYSByYW5nZSBvZiBpbnRlcmVzdGluZyB0aGluZ3M6IEJQRiwga2VybmVsIG1vZHVsZXMsIGFuZCBrcHJvYmVzLiBUaGlzIG9wZW5zIHVwIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gV2UgY2FuIHRyaWdnZXIgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2Agc2ltcGx5IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIG9yIG1vZHVsZXMuIE9uIHRoZSBvdGhlciBoYW5kIHdlIGNhbiB0cmlnZ2VyIGBwdGR1bXBgIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQgb2YgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5Ob3csIGxldCdzIGZpbmQgdGhlIGZvY3VzIHN5bWJvbHMuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgY3BhX2ZsdXNoYCwgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucy4gYHNldF9tZW1vcnlfcm94YCBpcyBleHBvcnRlZCB0aG91Z2guIFNvIHdlIGNhbiBmb2N1cyBvbiBgc2V0X21lbW9yeV9yb3hgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBhcyBlbnRyeSBwb2ludHMuIEFjdHVhbGx5LCBzaW5jZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIGl0J3Mgd29ydGggc2VlaW5nIGlmIHdlIGNhbiBmb2N1cyBvbiBpdCBkaXJlY3RseS4gU3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgZGVidWcgaW5mby4gSWYgdGhhdCBmYWlscyB0aGVuIGBzZXRfbWVtb3J5X3JveGAgaXMgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHNvIGlzIGBwdGR1bXBfc2hvd2Agb3IgYHB0ZHVtcF93YWxrX3BnZGAuXG5cbkZpbmFsbHksIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgZW5hYmxlZCwgYW5kIHdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjM1LjA4NDAwNzgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODkzMjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVERVTVBfREVCVUdGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3Q9MjM9Y29uZmlndXJhdGlvbnMgYW5kIG1vdW50IGRlYnVnZnM6OlxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0LTI0LVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0LTI2LVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBBUk1fUFREVU1QX0NPUkVcXG4tLVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIzOiNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjQtI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0U1pfMUdcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMC1cXG4tLVxcbmFyY2gvYXJtL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXFx0Kz0gZHVtcC5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0FSTV9QVERVTVBfREVCVUdGUylcXHQrPSBwdGR1bXBfZGVidWdmcy5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX01PRFVMRVMpXFx0XFx0Kz0gcHJvYy1zeW1zLm9cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzA9dm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzE6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzItI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0REVGQVVMVF9NQVBfV0lORE9XXzY0XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03Ni1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKSB7IH1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjc3OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc4LSNlbHNlXFxuLS1cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFREVU1QX0RFQlVHRlMpXFx0Kz0gcHRkdW1wX2RlYnVnZnMub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVxcdCs9IHRyYW5zX3BnZC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz03OT1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZzo4MDpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZT05PW9iai0kKENPTkZJR19QUENfQk9PSzNTXzY0KVxcdCs9IGJvb2szczY0Lm9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEwLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBDX0JPT0szU18zMilcXHQrPSBiYXRzLm8gc2VnbWVudF9yZWdzLm9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQxOS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFREVU1QX0RFQlVHRlMpKVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIxLVxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbF9wYWdlX3RhYmxlc1xcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwdGR1bXBfZm9wcyk7XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg0MzpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04NDQtQ09ORklHX0RFQlVHX09CSkVDVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTgyMT1DT05GSUdfREVCVUdfV1g9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo4MjI6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTgyPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMjU6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjU1PURFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXApO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU1LVxcdHNvcnQoXFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NjojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTg6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfUFREVU1QKVxcdFxcdCs9IGR1bXBfcGFnZXRhYmxlcy5vXFxuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVxcdCs9IGRlYnVnX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yNy1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2FzbS9wdGR1bXAuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZz03OD1DT05GSUdfS0FTQU5fVk1BTExPQz15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjc5OkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTgwLUNPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0s9eVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDoxMTU6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMTE2LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9OTU9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6OTY6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MzkuMzQyOTQ1MTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzY1Nzk5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIHRoZSBwdGR1bXAgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzIGBwdGR1bXBgIGZlYXR1cmUgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciBleHBvc2luZyBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRocm91Z2ggZGVidWdmcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGEgZGVidWdnaW5nIHRvb2wuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbHVya2luZyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHdoaWNoIHRlbGxzIG1lIHRoZSBtZW1vcnkgYXR0cmlidXRlIHRhYmxlIG9yIFBBVCBpcyBpbnZvbHZlZC5cblxuYENPTkZJR19YODZfUEFUYCBjb3VsZCBiZSByZWxhdGVkLiBIb3dldmVyLCBzaW5jZSB0aGUgUEFUIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2LCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdy4gVGhlIHJlYWwgdHJpZ2dlciBmb3IgYHB0ZHVtcGAgaXMgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5MZXQncyBkaWcgaW50byBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBhbmQgc2VlIGhvdyB0aGlzIGRlYnVnZnMgaW50ZWdyYXRpb24gaXMgc2V0IHVwLiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoZXJlJ3Mgc29tZSBraW5kIG9mIGhhbmRsZXIgb3Igc3RydWN0dXJlIHJlZ2lzdGVyZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDUwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjQzLjI3OTUyNzgxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxMjY4ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTE2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cXHRpZiAoZWZpX21tLnBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NDA6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmVmaV9tbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6NDMuNjMwODAyOTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDQ4NDUxNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGBwdGR1bXBfc2hvd2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBmb3IgYGluaXRfbW1gLiBBdCB0aGUgc2FtZSB0aW1lLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0YWtlcyBhbiBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwdGR1bXBfc2hvd2AgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuXG5cbkknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGJ1dCB3YWl0IGEgbWludXRlLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBzdGF0aWMuIFRoYXQgbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gZXhwbG9pdC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBpbiB0aGF0IGdlbmVyYWwgYXJlYSwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBmbHVzaGluZyBvciBzZXR0aW5nIG1lbW9yeSBwcm90ZWN0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBzZXRfbWVtb3J5X3JveGAgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBgcHRkdW1wX3Nob3dgIGl0c2VsZiBpcyBhbHNvIGFuIGltcG9ydGFudCBzeW1ib2wgdG8ga2VlcCBpbiBtaW5kLlxuXG5PbmUgbW9yZSB0aGluZy4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBleHBvcnRlZD8gSSBjYW4ndCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQncyBsb2NhdGVkIGluIGBhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY2AsIHNvIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpdCBpc24ndCBleHBvcnRlZCwganVzdCB0byBtYWtlIHN1cmUgSSdtIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQyMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjo1NC4wNzkyNTg2ODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTgwMDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00NzQ9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cXHRcXHRcXHRcXHQgICBib29sIHVzZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjU0LjU4NTA2ODIxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTIyNzEzMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZXNlIGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhhdCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIGlzbid0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgZm9jdXMgc3ltYm9sLCBhbmQgYWxvbmdzaWRlIGl0LCBJIHNob3VsZCBpbmNsdWRlIGBzZXRfbWVtb3J5X3JveGAuIEkndmUgZ290IHRvIGNvbnNpZGVyIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBzeXprYWxsZXIgY2FuIHN0aWxsIHBvdGVudGlhbGx5IHV0aWxpemUgaXQsIHByb3ZpZGVkIHRoZSBhc3NvY2lhdGVkIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByZXNlbnQuIExldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgdGFyZ2V0IGxpc3QgYXMgd2VsbC5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucywgSSBzZWUgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIHByaW1hcnkgb25lIGhlcmUuIEFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfWDg2X1BBVGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIGRvbid0IHNlZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGBzZXRfbWVtb3J5X3JveGAsIHNvIGl0IGFwcGVhcnMgdG8gYmUgYXZhaWxhYmxlIG9uIHg4NiBieSBkZWZhdWx0LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhpcyBwYXRjaC4gQWhhLCBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGUgY29kZSBjaGFuZ2UgaW52b2x2ZXMgYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBgaW5pdF9tbWAgYmVmb3JlIGZyZWVpbmcgcGFnZSB0YWJsZXMuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjb25jdXJyZW5jeSBidWcgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBTbywgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSGVyZSBhcmUgdGhlIGZvY3VzIHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkOiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIEFuZCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpcyBgUFREVU1QX0RFQlVHRlNgLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gYHB0ZHVtcF9zaG93YCBjYWxscyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCB0aGVuIGZpbmFsbHkgYHB0ZHVtcF93YWxrX3BnZGAuIEFoLCBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RgIGlzIHRoZSBvbmUgdGhhdCB0YWtlcyB0aGUgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gQW5kIGBwdGR1bXBfd2Fsa19wZ2RgIHJlc2lkZXMgaW4gYG1tL3B0ZHVtcC5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaXQgaXMgYSBnbG9iYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA0LjEwNzc4NTA2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTg3OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wdGR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wdGR1bXAuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwdGR1bXBfb3BzID0ge1xcbi0tXFxubW0vcHRkdW1wLmMtMTc0LVxcbm1tL3B0ZHVtcC5jOjE3NTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxubW0vcHRkdW1wLmMtMTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MDQuMjYwOTc4MjU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTIyMDQxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBQYWdlIFRhYmxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciB0aGlzIHBhZ2UgdGFibGUgYW5hbHlzaXMuIEkgc3RhcnRlZCBieSBjb25maXJtaW5nIHRoYXQgYHB0ZHVtcF93YWxrX3BnZGAgaXMgaW5kZWVkIGEgZ2xvYmFsIGZ1bmN0aW9uIOKAkyB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gVGhlIGFkZGVkIGJlbmVmaXQgaXMgdGhhdCBpdCdzIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBob2xkcyB0aGUgbG9jaywgd2hpY2ggaXMga2V5LlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gbGltaXQgbXkgYW5hbHlzaXMgYnkgaXNvbGF0aW5nIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgZnVuY3Rpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHdpdGhpbiAqdGhpcyogc3BlY2lmaWMgY29udGV4dCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoYXQuXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYFxuKiAgIGBwdGR1bXBfd2Fsa19wZ2RgXG4qICAgYHNldF9tZW1vcnlfcm94YFxuXG5CdXQgd2FpdCwgYHNldF9tZW1vcnlfcm94YCBpcyAqanVzdCogb25lIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBjYW4gY2FsbCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUuIFdoYXQgYWJvdXQgdGhlIG90aGVyIGBzZXRfbWVtb3J5XypgIHZhcmlhbnRzPyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YD8gRG8gdGhleSBhbHNvIHNldCBgQ1BBX0NPTExBUFNFYD8gSSdkIGJldHRlciBjaGVjayBgc2V0X21lbW9yeV9yb2AgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA4Ljc3MzE4NDk2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTA0NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjE9aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzI5OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjAzPWludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MDc6XFx0cmV0dXJuIHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA4LjkyODI5NTQ5NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk0NDY3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYHNldF9tZW1vcnlfcm9gIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBgc2V0X21lbW9yeV9yb2AgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBjcml0aWNhbCBsb3ctbGV2ZWwgcGllY2UsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyBpdCBhY2hpZXZlcyBtYWtpbmcgYSBtZW1vcnkgcmVnaW9uIHJlYWQtb25seS4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYXNwZWN0cyDigJMgd2hhdCB0cmlja3MgYXJlIGJlaW5nIHVzZWQgYXQgdGhlIGhhcmR3YXJlIGxldmVsPyBBcmUgdGhleSBsZXZlcmFnaW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgTU1VIGZlYXR1cmVzLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgQ1BVIGluc3RydWN0aW9ucyBkZXNpZ25lZCBmb3IgbWVtb3J5IHByb3RlY3Rpb24/XG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmFsIG51YW5jZXMuIERvZXMgaXQgdGFrZSBpbnRvIGFjY291bnQgdmlydHVhbCBtZW1vcnkgY29uY2VwdHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXIgKFRMQikgaW52YWxpZGF0aW9uIGludm9sdmVkIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgaW1tZWRpYXRlbHkgZWZmZWN0aXZlPyBJIGFudGljaXBhdGUgc2VlaW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBzeXN0ZW0gY2FsbHMsIHByb2JhYmx5IHNvbWV0aGluZyBsaWtlIGBtcHJvdGVjdGAgb3IgZXF1aXZhbGVudCwgdGhvdWdoIEkgd2FudCB0byBzZWUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWluZyBjYWxsZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnM7IGFyZSB0aGV5IGNoZWNraW5nIHJldHVybiB2YWx1ZXMgcHJvcGVybHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNob3NlbiBhcHByb2FjaCBvbiBwZXJmb3JtYW5jZSwgYW5kIG9uIG1lbW9yeSBmcmFnbWVudGF0aW9uP1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXZlIGFueSBpbmhlcmVudCB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGV5IGNvbnNpZGVyaW5nIG11bHRpLXRocmVhZGVkIGFjY2VzcyBhbmQgdGhlIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdoZW4gbW9kaWZ5aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGF0dHJpYnV0ZXM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnM/IEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc3VidGxlIGRldGFpbHMgdGhhdCBhcmUgZWFzeSB0byBvdmVybG9vaywgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHN5c3RlbXMtbGV2ZWwgY29kZSBsaWtlIHRoaXMuIFNvLCBsZXQgbWUgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MTIuOTIyNzY1OTAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA1MTU2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjE9aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzI5OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzoxMy4xMjMyOTE4NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MjQ0NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc2V0X21lbW9yeV9yb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGZvciBgc2V0X21lbW9yeV9yb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyBsaWtlbHkgY29udHJvbGxpbmcgcmVhZC1vbmx5IGFjY2VzcyBmb3IgYSBtZW1vcnkgcmVnaW9uLCBwb3NzaWJseSBhIHBoeXNpY2FsIG1lbW9yeSByYW5nZSBvciBhIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgaW4gc2NlbmFyaW9zIGRlbWFuZGluZyBtZW1vcnkgcHJvdGVjdGlvbiwgc2VjdXJpdHkgaGFyZGVuaW5nLCBvciBwZXJoYXBzIGV2ZW4gaW4gZGVidWdnaW5nIHdoZW4gdHJ5aW5nIHRvIGlzb2xhdGUgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICAqKlVuZGVybHlpbmcgTWVjaGFuaXNtOioqIEhvdyBkb2VzIGl0IGFjdHVhbGx5IGVuZm9yY2UgdGhlIHJlYWQtb25seSByZXN0cmljdGlvbj8gSXMgaXQgbGV2ZXJhZ2luZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50PyBPciwgaXMgaXQgcGVyaGFwcyBhIHVzZXJsYW5kIHV0aWxpdHkgdGhhdCB1c2VzIHN5c3RlbSBjYWxscyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0P1xuKiAgICoqQ29udGV4dDoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXM/IEVtYmVkZGVkIHN5c3RlbXM/IE9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIG1vZHVsZXM/IEh5cGVydmlzb3JzPyBTZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zP1xuKiAgICoqR3JhbnVsYXJpdHk6KiogV2hhdCdzIHRoZSBzbWFsbGVzdCB1bml0IG9mIG1lbW9yeSBpdCBjYW4gYWZmZWN0PyBJcyBpdCBwYWdlLWxldmVsLCBieXRlLWxldmVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cbiogICAqKkF0b21pY2l0eToqKiBJZiBpdCdzIGRlYWxpbmcgd2l0aCBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMsIGhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3k/IEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCByYWlzZSBhbiBleGNlcHRpb24sIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byBwcmV2ZW50aW5nIGJ1Z3MuXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwcml2aWxlZ2VzIHRoYXQgYXJlIG5lZWRlZCB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24/IEFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGlmIG1pc3VzZWQ/XG5cbkkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBgc2V0X21lbW9yeV9yb2AgaW4gYSBnaXZlbiBzaXR1YXRpb24uIFRoaXMgcmVxdWlyZXMgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBhaWQgaW4gbXkgYW5hbHlzaXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBsaWtlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBjYWNoZXMgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcmVhZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gdmVyeSBjYXJlZnVsbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MTcuNDk1NzQwNDkzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMjk6XFx0aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuMjMzMDpcXHR7XFxuMjMzMTpcXHRcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLCAwKTtcXG4yMzMyOlxcdH1cXG4yMzMzOlxcdFxcbjIzMzQ6XFx0aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbjIzMzU6XFx0e1xcbjIzMzY6XFx0XFx0cGdwcm90X3QgY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSk7XFxuMjMzNzpcXHRcXG4yMzM4OlxcdFxcdGlmIChfX3N1cHBvcnRlZF9wdGVfbWFzayBcXHUwMDI2IF9QQUdFX05YKVxcbjIzMzk6XFx0XFx0XFx0Y2xyLnBncHJvdCB8PSBfUEFHRV9OWDtcXG4yMzQwOlxcdFxcbjIzNDE6XFx0XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbjIzNDM6XFx0fVxcbjIzNDQ6XFx0XFxuMjM0NTpcXHRpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4yMzQ2OlxcdHtcXG4yMzQ3OlxcdFxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldChcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXKSwgMCk7XFxuMjM0ODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjE3LjQ5NjAxNjk0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDkxMDIwMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBgQ1BBX0NPTExBUFNFYCB0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNldHMgaXQgaXMgYHNldF9tZW1vcnlfcm94YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhhdCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnVnIGZpeC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgY29uY3VycmVuY3kgcHJvYmxlbSwgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBhIHJlYWQgbG9jayB3aXRoaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gc3luYyB3aXRoIGBwdGR1bXBgLCBiZWNhdXNlIGBwdGR1bXBgIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsIGNvZGUgdGhhdOKAmXMgYWN0dWFsbHkgcmVhY2hhYmxlLCB3aGljaCBtYWtlcyBpdCBpbXBvcnRhbnQgdG8gaW52ZXN0aWdhdGUgaW4gZGV0YWlsLlxuXG5NeSBjdXJyZW50IHN1bW1hcnkgaXM6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGZyb250IG9mIG1pbmQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYW5kIG9mIGNvdXJzZSBgc2V0X21lbW9yeV9yb3hgLiBBbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBlbmFibGVkIHRoZSBgUFREVU1QX0RFQlVHRlNgIGNvbmZpZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfREVCVUdfV1hgLiBJdCBsb29rcyBsaWtlIHRoYXQgY291bGQgdHJpZ2dlciBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgLCB3aGljaCB0aGVuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAuIEkgbmVlZCB0byBmb2xsb3cgdGhhdCBmbG93IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbXBhY3QuIExldCdzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjIyLjU4NzA0MDA2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDc2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNC1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjIyLjc0MjEyMjgyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExMjI0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFBhdGggb2YgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3gqKlxuXG5Pa2F5LCBzbyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgIGlzIHNvbWV0aGluZyB0aGF0J3MgcnVubmluZyBhdCBhIHByZXR0eSBjcnVjaWFsIHBvaW50IOKAkyBlaXRoZXIgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2Ugb3Igd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiSW50ZXJlc3RpbmcuIFdoYXQncyBpdCBjaGVja2luZywgYW5kIHdoZXJlIGlzIGl0IGJlaW5nIHVzZWQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhhdCBpdCdzIGNhbGxlZCBzbyBlYXJseSBnaXZlcyB1cyB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIG9yIGFueSBlYXJseSBzeXN0ZW0gY2hlY2tzLiBBIGZ1bGwgdW5kZXJzdGFuZGluZyBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgIGlzIGludm9rZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzoyNS43NTMzNTAwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzk3MjU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTMyPXZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzMtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzQ6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzU6I2RlZmluZSBwdGR1bXBfY2hlY2tfd3ggcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzYtdm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDkwPXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MzEuMDk3MzkzODc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk1NDQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgcHRkdW1wX2NoZWNrX3d4YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBtZW50YWwgbWFwIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYHB0ZHVtcF9jaGVja193eGAuIE15IGludHVpdGlvbiBpcyBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gaXQuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSB3YXkgSSd2ZSBzdHJ1Y3R1cmVkIG15IG1lbnRhbCBtYXAsIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBzb21ldGhpbmcgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGVyZS4gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIGRhdGEgdmFsaWRhdGlvbiBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IGBwdGR1bXBfY2hlY2tfd3hgIGlzIHVzZWQgb3Igd2hlcmUgaXRzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBpbnRlbnRpb24gaXMgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24gYW5kIHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzozNC40MjY5NDEzNTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTkxNDY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX2NoZWNrX3d4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMzAtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMzItXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNS0jaWZkZWYgQ09ORklHX0FSTV9ERUJVR19XWFxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjM2OiNkZWZpbmUgYXJtX2RlYnVnX2NoZWNrd3goKSBwdGR1bXBfY2hlY2tfd3goKVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTM3LSNlbHNlXFxuLS1cXG5hcmNoL2FybS9tbS9kdW1wLmM9NDQ3PXN0YXRpYyBzdHJ1Y3QgcHRkdW1wX2luZm8ga2VybmVsX3B0ZHVtcF9pbmZvID0ge1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1Mi1cXG5hcmNoL2FybS9tbS9kdW1wLmM6NDUzOnZvaWQgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1NC17XFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTMzND1zdGF0aWMgc3RydWN0IHB0ZHVtcF9pbmZvIGtlcm5lbF9wdGR1bXBfaW5mbyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzNy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMzODpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzM5LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9wZ3RhYmxlX2NvbXBsZXRlX21hc2sodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY3LVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzY4OmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zNjkte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYz0zNTM9c3RhdGljIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkX21tX2luZm8gKnBpbmZvKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzUtXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzozNzY6Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Ny17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTc1PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODEtXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjE4Mjpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODMte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTM0PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzE9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMzMtXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaD0zND1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zNi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfV1gpKVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mzc6XFx0XFx0cHRkdW1wX2NoZWNrX3d4KCk7XFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zOC19XFxuLS1cXG5tbS9wdGR1bXAuYz0xOTM9c3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9wdGR1bXAuYy0xOTQte1xcbm1tL3B0ZHVtcC5jOjE5NTpcXHRpZiAocHRkdW1wX2NoZWNrX3d4KCkpXFxubW0vcHRkdW1wLmMtMTk2LVxcdFxcdHNlcV9wdXRzKG0sIFxcXCJTVUNDRVNTXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MzkuOTQ2MDkzNDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTAxNTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJvb3QtVGltZSBSZWFkLU9ubHkgRGF0YSBDaGVjayoqXG5cblJpZ2h0LCBzbyBgZGVidWdfY2hlY2t3eGAgaXMgaW52b2tlZCBieSBgbWFya19yb2RhdGFfcm9gLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGEgc2FuaXR5IGNoZWNrIGVhcmx5IG9uLCB0eXBpY2FsbHkgYXQgYm9vdCwgdG8gdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgcmVhZC1vbmx5IGRhdGEuIEJ1dCB3aGF0J3Mgc2xpZ2h0bHkgdW51c3VhbCBpcyB0aGF0IGBjaGVja193eF9zaG93YCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vcHRkdW1wLmNgLiBUaGF0J3MgYSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlLiBXaHkgd291bGQgYSByZWFkLW9ubHkgZGF0YSBpbnRlZ3JpdHkgY2hlY2ssIHdoaWNoLCBJIHByZXN1bWUsIGlzIHJlbGF0aXZlbHkgc3RhdGljIGF0IHRoYXQgcG9pbnQsIHJlc2lkZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgY2hlY2tfd3hfc2hvd2AgaXMgdXNlZC4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBmb3IgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJseSByZXZlYWwgc29tZXRoaW5nIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNoZWNrIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0ODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzo0NC4wMjExMTE2NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTk3NTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja193eF9zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xOTItXFxubW0vcHRkdW1wLmM6MTkzOnN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vcHRkdW1wLmMtMTk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NDQuMzMxMTI1MDY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzk4OTg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgYXJvdW5kIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG1tL3B0ZHVtcC5jYCBhbmQgYGNoZWNrX3d4X3Nob3dgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9wdGR1bXAuY2AsIG5hdHVyYWxseSBncmF2aXRhdGluZyB0b3dhcmRzIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRlY2lkaW5nIHdoYXQncyBkaXNwbGF5ZWQgb3IgaGlkZGVuLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIG9yIHByb3RlY3Rpb24gaW4gdGhlIHN5c3RlbS4gVGhlIGZpbGUncyBuYW1lIGl0c2VsZiBzdHJvbmdseSBzdWdnZXN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLCBzbyB0aGUgY29udGV4dCBpcyBwcmV0dHkgY2xlYXIuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGRldGVybWluZXMgaWYgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHNob3duLCB3aGF0IGNyaXRlcmlhIGFyZSB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgdGhpbmtpbmcgYWJvdXQ6XG4qICAgKipTZWN1cml0eSBDb250ZXh0Kio6IElzIHRoaXMgcmVsYXRlZCB0byByZXN0cmljdGluZyBhY2Nlc3MgdG8gY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBmb3Igc2VjdXJpdHkgcmVhc29ucywgcGVyaGFwcyByZWxhdGVkIHRvIFdeWCAoV3JpdGUgWE9SIEV4ZWN1dGUpIHByb3RlY3Rpb25zP1xuKiAgICoqRGVidWdnaW5nIFRvb2xzKio6IENvdWxkIGl0IGJlIGEgZGVidWdnaW5nIGFpZCwgYWxsb3dpbmcgY2VydGFpbiBtZW1vcnkgc3RhdGVzIHRvIGJlIHNob3duIG9ubHkgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucz9cbiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbioqOiBEb2VzIGl0IGZpbHRlciBvdXQgaW5mb3JtYXRpb24gdG8gcmVkdWNlIG92ZXJoZWFkIGR1cmluZyBhIHB0ZHVtcCwgb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/XG4qICAgKipFcnJvciBEZXRlY3Rpb24qKjogUGVyaGFwcyBpdCdzIGEgZGlhZ25vc3RpYyB0b29sLCBmbGFnZ2luZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG1hcHBpbmdzLlxuKiAgICoqUmFjZSBDb25kaXRpb25zKio6IENvdWxkIHRoZXJlIGJlIGEgcmFjZSBjb25kaXRpb24gdGhhdCBhbGxvd3MgbWVtb3J5IHRvIGJlIGRpc3BsYXllZCB1bmRlciBjZXJ0YWluIHJhcmUgY29uZGl0aW9ucz9cblxuSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgY29tcGFyaXNvbnMgYWdhaW5zdCBmbGFncyBvciBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBhbmQgY2FsbHMgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8ga2VlcCBhIHNoYXJwIGV5ZSBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NDguNTExMDI1NzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3B0ZHVtcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzdC1cXHUwMDNlbm90ZV9wYWdlX2ZsdXNoKHN0KTtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0c3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcXG4gMTk2OlxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJTVUNDRVNTXFxcXG5cXFwiKTtcXG4gMTk3OlxcdFxcdGVsc2VcXG4gMTk4OlxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJGQUlMRURcXFxcblxcXCIpO1xcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyZXR1cm4gMDtcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0REVGSU5FX1NIT1dfQVRUUklCVVRFKGNoZWNrX3d4KTtcXG4gMjA0OlxcdFxcbiAyMDU6XFx0c3RhdGljIGludCBwdGR1bXBfZGVidWdmc19pbml0KHZvaWQpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjaGVja193eF9wYWdlc1xcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZjaGVja193eF9mb3BzKTtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjQ4LjUxMTE0NTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NTc3MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbGl6aW5nIHRoZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBjaGVja193eF9wYWdlc2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZGVidWdmc2AsIHRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBjb25maXJtaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0LiBMZXQncyBtYWtlIHRoaXMgZmluYWwuXG5cbkknbSBjb25maWRlbnQgaW4gY2FsbGluZyB0aGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQncyBhZGRyZXNzaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgcHRkdW1wYCwgc3luY2hyb25pemluZyB0aGVtIHdpdGggYSByZWFkIGxvY2ssIGFuZCB0aGUgd3JpdGUgbG9jaywgcmVzcGVjdGl2ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBhZmZlY3RzIGNvZGUgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBjb3JlIGtlcm5lbC5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSdsbCBmb2N1cyBvbiBhcmUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHNldF9tZW1vcnlfcm94YC4gQW5kIG9mIGNvdXJzZSwgd2UnbGwgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AgdG8gbWFrZSB0aGlzIGFsbCBhY2Nlc3NpYmxlLiBJIGZlZWwgZ29vZCBhYm91dCB0aGVzZSBjb25jbHVzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MjQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NTUuMjU2OTE5MzI1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MDIxODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYnVnICh1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgcmVhZCBsb2NrIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHRvIHN5bmNocm9uaXplIHdpdGggYHB0ZHVtcGAgd2hpY2ggdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYnVnICh1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgcmVhZCBsb2NrIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHRvIHN5bmNocm9uaXplIHdpdGggYHB0ZHVtcGAgd2hpY2ggdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 08:57:03 +0000 UTC FinishedAt: 2026-07-11 09:17:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cpa_collapse_large_pages", "ptdump_walk_pgd", "set_memory_rox" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiY2YxZDM3ZDVkYmY1YjdjOTFiNDJjZTBjZDdiNGUzNTlhNTM0OTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDk6MTU6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcbiYjNDM7XHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuJiM0MztcdCAqIHdyaXRlIGxvY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjZjFkMzdkNWRiZjViN2M5MWI0MmNlMGNkN2I0ZTM1OWE1MzQ5MzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MzYsOSAmIzQzOzQzNywxNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAKIAlmbHVzaF90bGJfYWxsKCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKLQkJbGlzdF9kZWwoJmFtcDtwdGRlc2MtJmd0O3B0X2xpc3QpOwotCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkvKgomIzQzOwkgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieQomIzQzOwkgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcAomIzQzOwkgKiB3cml0ZSBsb2NrKS4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7CiYjNDM7CQkJcGFnZXRhYmxlX2ZyZWUocHRkZXNjKTsKJiM0MzsJCX0KIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGBzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSlgIHdoZW4gdGhlIGZ1bmN0aW9uIGZyZWVzIHBhZ2UgdGFibGVzLiBJbnRlcmVzdGluZy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbiBvZiB0cnlpbmcgdG8gZml4IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hpY2ggbWVhbnMgc29tZXRoaW5nIGlzIGdvaW5nIHRvIGJlIHJlYWRpbmcgdGhlc2UgcGFnZSB0YWJsZXMuIEkgd29uZGVyIHdoYXQgaXQgaXMuCgpUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgYHB0ZHVtcGAsIHdoaWNoIGltcGxpZXMgdGhhdCBgcHRkdW1wYCBpcyByZWFkaW5nIHRoZXNlIHBhZ2UgdGFibGVzLCBhbmQgcG9zc2libHkgZG9pbmcgc28gd2hpbGUgaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrLiBTZWVtcyBsaWtlIGEgY2xlYXIgcmFjZSBpZiB5b3UgYXJlbiYjMzk7dCBjYXJlZnVsIGFib3V0IHN5bmNocm9uaXphdGlvbi4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIExldCYjMzk7cyB0cmFjZSB0aGUgY2FsbHMgYW5kIHNlZSBob3cgdGhpcyBndWFyZCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00MTI9c3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0MTQ6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg4LVx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgQ1BBX0NPTExBUFNFKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODk6XHRcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKlRyYWNpbmcgdGhlIFBhZ2UgRmx1c2hpbmcgRnVuY3Rpb24qKgoKT2theSwgc28gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgaW52b2tlZCBieSBgY3BhX2ZsdXNoYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aGVuKiB0aGVzZSBsYXJnZSBwYWdlIGNvbGxhcHNlcyBvY2N1ci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgY3BhX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2sgdXB3YXJkcyB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VycyBmb3IgdGhpcyBmbHVzaGluZyBvcGVyYXRpb24gYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGxhcmdlIHBhZ2UgY29sbGFwc2luZy4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBmcm9tIGBjcGFfZmx1c2hgIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIGFuZCBwcm9jZXNzZXMgdGhhdCBsZWFkIHRvIGxhcmdlIHBhZ2VzIGJlaW5nIGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNlLiBUaGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiBwbGF5IGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgcGF0dGVybnMgaW4gdGhlIGNhbGwgc2l0ZXMgdGhhdCBtaWdodCBoaW50IGF0IHNwZWNpZmljIG1lbW9yeSBwcmVzc3VyZXMgb3Igd29ya2xvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNzk9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3B1X2NhY2hlX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcJiMzNDtERVZNRU1cJiMzNDspO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozODI6c3RhdGljIHZvaWQgX19jcGFfZmx1c2hfYWxsKHZvaWQgKmFyZylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM5NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mzk2OnN0YXRpYyB2b2lkIGNwYV9mbHVzaF9hbGwodW5zaWduZWQgbG9uZyBjYWNoZSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAwOlx0b25fZWFjaF9jcHUoX19jcGFfZmx1c2hfYWxsLCAodm9pZCAqKSBjYWNoZSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMS19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAzOnN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MDQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDUzOnN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU5LVx0aWYgKGNhY2hlIFx1MDAyNlx1MDAyNiAhc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSCkpIHtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDYwOlx0XHRjcGFfZmx1c2hfYWxsKGNhY2hlKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDYxLVx0XHRnb3RvIGNvbGxhcHNlX2xhcmdlX3BhZ2VzO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY2LVx0ZWxzZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0Njc6XHRcdG9uX2VhY2hfY3B1KF9fY3BhX2ZsdXNoX3RsYiwgY3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY4LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjA2ND1zdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM3LVx0aWYgKHJldCkge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTM4Olx0XHRjcGFfZmx1c2hfYWxsKGNhY2hlKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEzOS1cdFx0Z290byBvdXQ7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTQyOlx0Y3BhX2ZsdXNoKFx1MDAyNmNwYSwgY2FjaGUpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQzLW91dDpcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTA9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxMi1cdGlmICh4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3RsYl9mbHVzaF9yZXF1aXJlZChlbmMpKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOlx0XHRjcGFfZmx1c2goXHUwMDI2Y3BhLCB4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX2NhY2hlX2ZsdXNoX3JlcXVpcmVkKCkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDE0LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyNC1cdCAqIGluIGNhc2UgYW55IHNwZWN1bGF0aXZlIFRMQiBjYWNoaW5nIG9jY3VycmVkIChidXQgbm8gbmVlZCB0byBmbHVzaFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI1Olx0ICogY2FjaGVzIGFnYWluKS4gIFdlIGNvdWxkIGp1c3QgdXNlIGNwYV9mbHVzaF9hbGwoKSwgYnV0IGluIGNhc2UgVExCXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MjY6XHQgKiBmbHVzaGluZyBnZXRzIG9wdGltaXplZCBpbiB0aGUgY3BhX2ZsdXNoKCkgcGF0aCB1c2UgdGhlIHNhbWUgbG9naWNcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyNy1cdCAqIGFzIGFib3ZlLlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI4LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0Mjk6XHRjcGFfZmx1c2goXHUwMDI2Y3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgY2hhbmdlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY3BhX2ZsdXNoYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGFuZCBgX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlYC4gSSBrbm93IGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHRoZSBoZWFydCBvZiBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYW5kIHRob3NlIG90aGVyIG1lbW9yeSBwZXJtaXNzaW9uIHNldHRlcnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KClJpZ2h0LCBzbyB0byBkaWcgaW4gZnVydGhlciBJJiMzOTtsbCBmb2N1cyBvbiBgY3BhX2ZsdXNoYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgb3IgZXZlbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gV2FpdC4uLiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBvbmx5IGdldHMgY2FsbGVkIGlmIHRoZSBgQ1BBX0NPTExBUFNFYCBmbGFnIGlzIHNldCBpbiB0aGUgYGNwYWAgc3RydWN0dXJlLiAgVGhhdCBnaXZlcyBtZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhhdCBgQ1BBX0NPTExBUFNFYCBmbGFnIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHdlIGFyZSBjb2xsYXBzaW5nIGxhcmdlIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NQQV9DT0xMQVBTRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKlVucmF2ZWxpbmcgYSBNZW1vcnkgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENQQV9DT0xMQVBTRWAuLi4gSSBzYXcgaXQgbWVudGlvbmVkIGluIGBzZXRfbWVtb3J5X3JveGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLiBBIHF1aWNrIGdyZXAgZm9yIGBDUEFfQ09MTEFQU0VgIGFjcm9zcyB0aGUgY29kZWJhc2UgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb250ZXh0IGFuZCBldmVyeSBwbGFjZSBpdCYjMzk7cyB0b3VjaGVkOyBJdCBjb3VsZCBiZSB1c2VkIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgSSYjMzk7bGwgbmVlZCBhbGwgdGhlIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3aWRlc3ByZWFkIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NQQV9DT0xMQVBTRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGZvciBDb2xsYXRlcmFsIERhbWFnZSoqCgpIbW0sIHNvIGBzZXRfbWVtb3J5X3JveGAgc2V0cyBgQ1BBX0NPTExBUFNFYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGRlZmluaXRlbHkgcmluZ3MgYSBiZWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByaXBwbGUgZWZmZWN0cy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgQ1BBX0NPTExBUFNFYCBtaWdodCBiZSBtYW5pcHVsYXRlZD8gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBvaW50LCBhbmQgaWYgaXQgaXMsIHRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgY2xvc2UgcmV2aWV3LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGxvY2FsaXplZCwgb3IgSSB3aWxsIGhhdmUgdG8gc3RhcnQgZGlnZ2luZyBpbiBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1BBX0NPTExBUFNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NzE9c3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03Ni0jZGVmaW5lIENQQV9OT19DSEVDS19BTElBUyA4IC8qIERvIG5vdCBzZWFyY2ggZm9yIGFsaWFzZXMgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Nzc6I2RlZmluZSBDUEFfQ09MTEFQU0UgMTYgLyogdHJ5IHRvIGNvbGxhcHNlIGxhcmdlIHBhZ2VzICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc4LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg3LWNvbGxhcHNlX2xhcmdlX3BhZ2VzOlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODg6XHRpZiAoY3BhLVx1MDAzZWZsYWdzIFx1MDAyNiBDUEFfQ09MTEFQU0UpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OS1cdFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzM0PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEtXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQyOlx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipUcmFjaW5nIERvd24gdGhlIENQQV9DT0xMQVBTRSBTZXR0aW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgdGhpcyBgQ1BBX0NPTExBUFNFYCBmbGFnLiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0ICpvbmx5KiB0aGUgYHNldF9tZW1vcnlfcm94YCBmdW5jdGlvbiBjYW4gc2V0IGl0LiBUaGF0JiMzOTtzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQsIGEgZm9jdXNlZCBoeXBvdGhlc2lzLiBNeSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxscyB0byBgc2V0X21lbW9yeV9yb3hgLiBGaW5kaW5nIHRob3NlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdHJpZ2dlcnMsIHRoZSBjb25kaXRpb25zLCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGxlYWRzIHRvIGBDUEFfQ09MTEFQU0VgIGJlaW5nIGFjdGl2YXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgYHNldF9tZW1vcnlfcm94YCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz01OT12b2lkICpvbWFwX3NyYW1fcHVzaCh2b2lkICpmdW5jcCwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvc3JhbS1pbml0LmMtNzYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjc3Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy03OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jPTg5PXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2RldGVjdF9hbmRfbWFwX3NyYW0odm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTEyNS1cbmFyY2gvYXJtL21hY2gtb21hcDEvc3JhbS1pbml0LmM6MTI2Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy0xMjctfVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jPTgxPXZvaWQgKm9tYXBfc3JhbV9wdXNoKHZvaWQgKmZ1bmNwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtOTgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYzo5OTpcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jLTEwMC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYz0xODA9c3RhdGljIHZvaWQgX19pbml0IG9tYXAyX21hcF9zcmFtKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtMjE4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM6MjE5Olx0c2V0X21lbW9yeV9yb3goYmFzZSwgcGFnZXMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmMtMjIwLX1cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTQ1PXZvaWQgKmFsbG9jX2luc25fcGFnZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtNTEtXHRcdHJldHVybiBOVUxMO1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzo1MjpcdGlmIChzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylhZGRyLCAxKSkge1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy01My1cdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM9MjYwPWludCBsYXJjaF9pbnNuX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jLTI4OC1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM6Mjg5Olx0ZXJyID0gc2V0X21lbW9yeV9yb3goc3RhcnQsIChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYy0yOTAtXHRpZiAoZXJyKSB7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jOjI5MTpcdFx0cHJfaW5mbyhcJiMzNDslczogc2V0X21lbW9yeV9yb3goKSBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmMtMjkyLVx0XHRyZXR1cm4gZXJyO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NDA9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ2LXtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ4LX1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01MC1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTI3PWludCBfX3NldF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG51bXBhZ2VzLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMjgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjI5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMzAtXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD01OD1fX1NFVF9NRU1PUllfRlVOQyhzZXRfbWVtb3J5X3gsIFNFVF9NRU1PUllfWClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTk6X19TRVRfTUVNT1JZX0ZVTkMoc2V0X21lbW9yeV9yb3gsIFNFVF9NRU1PUllfUk8gfCBTRVRfTUVNT1JZX1gpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTYwLV9fU0VUX01FTU9SWV9GVU5DKHNldF9tZW1vcnlfcndueCwgU0VUX01FTU9SWV9SVyB8IFNFVF9NRU1PUllfTlgpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM9MzY9dm9pZCAqYWxsb2NfaW5zbl9wYWdlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDItXHRcdHJldHVybiBOVUxMO1xuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM6NDM6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWdlLCAxKTtcbmFyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jLTQ0LVx0cmV0dXJuIHBhZ2U7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYz00NzA9c3RhdGljIGludCBtb2R1bGVfYWxsb2NfZnRyYWNlX2hvdHBhdGNoX3RyYW1wb2xpbmVzKHN0cnVjdCBtb2R1bGUgKm1lLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgxLVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmM6NDgyOlx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpc3RhcnQsIG51bXBhZ2VzKTtcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgzLVx0ZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZTtcbi0tXG5hcmNoL3MzOTAvbW0vdm1lbS5jPTY3ND12b2lkIF9faW5pdCB2bWVtX21hcF9pbml0KHZvaWQpXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3NS17XG5hcmNoL3MzOTAvbW0vdm1lbS5jOjY3NjpcdF9fc2V0X21lbW9yeV9yb3goX3N0ZXh0LCBfZXRleHQpO1xuYXJjaC9zMzkwL21tL3ZtZW0uYy02NzctXHRfX3NldF9tZW1vcnlfcm8oX2V0ZXh0LCBfX2VuZF9yb2RhdGEpO1xuYXJjaC9zMzkwL21tL3ZtZW0uYzo2Nzg6XHRfX3NldF9tZW1vcnlfcm94KF9fc3RleHRfYW1vZGUzMSwgX19ldGV4dF9hbW9kZTMxKTtcbmFyY2gvczM5MC9tbS92bWVtLmMtNjc5LVx0Lypcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz0zMDk9Y3JlYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgaW50ICp0cmFtcF9zaXplKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjctXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDI4Olx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZSwgbnBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjktXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY0LVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjYtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PWludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuLS1cbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYz03Mz12b2lkICpzcmFtX2V4ZWNfY29weShzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHZvaWQgKmRzdCwgdm9pZCAqc3JjLFxuLS1cbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYy0xMDgtXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmM6MTA5Olx0cmV0ID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpYmFzZSwgcGFnZXMpO1xuZHJpdmVycy9taXNjL3NyYW0tZXhlYy5jLTExMC1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg9Njc9dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtNzUtICogYWZ0ZXIgaXQgd2FzIHRlbXBvcmFyaWx5IHJlbWFwcGVkIGFzIHdyaXRhYmxlLiBSZWxpZXMgb24gYXJjaGl0ZWN0dXJlXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDo3NjogKiBpbXBsZW1lbnRhdGlvbiBvZiBzZXRfbWVtb3J5X3JveCgpIHRvIHJlc3RvcmUgbWFwcGluZyB1c2luZyBsYXJnZSBwYWdlcy5cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc3LSAqXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTExPWJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTEzLVx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKGhkcik7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExMTQ6XHRyZXR1cm4gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpaGRyLCBoZHItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExMTUtfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTE0PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxNzojaWZuZGVmIHNldF9tZW1vcnlfcm94XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz05MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05MzQtXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xua2VybmVsL2JwZi9jb3JlLmM6OTM1Olx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG5rZXJuZWwvYnBmL2NvcmUuYy05MzYtXHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTk0OD12b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05NzEtXHRcdFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHB0cik7XG5rZXJuZWwvYnBmL2NvcmUuYzo5NzI6XHRcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcHRyLFxua2VybmVsL2JwZi9jb3JlLmMtOTczLVx0XHRcdFx0XHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE0NjE9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NjMtXHRXQVJOX09OX09OQ0Uoc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0NjQ6XHRyZXR1cm4gc2V0X21lbW9yeV9yb3goKGxvbmcpaW1hZ2UsIDEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2NS19XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM9MzM9aW50IG1vZHVsZV9lbmFibGVfdGV4dF9yb3goY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTQxLVx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo0MjpcdFx0XHRyZXQgPSBtb2R1bGVfc2V0X21lbW9yeShtb2QsIHR5cGUsIHNldF9tZW1vcnlfcm94KTtcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTQzLVx0XHRlbHNlXG4tLVxubW0vZXhlY21lbS5jPTE1MD1pbnQgZXhlY21lbV9yZXN0b3JlX3JveCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy0xNTQtXG5tbS9leGVjbWVtLmM6MTU1Olx0cmV0dXJuIHNldF9tZW1vcnlfcm94KGFkZHIsIG5yKTtcbm1tL2V4ZWNtZW0uYy0xNTYtfVxuLS1cbm1tL2V4ZWNtZW0uYz0yNzc9c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9leGVjbWVtLmMtMzAyLVxubW0vZXhlY21lbS5jOjMwMzpcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXAsIHZtLVx1MDAzZW5yX3BhZ2VzKTtcbm1tL2V4ZWNtZW0uYy0zMDQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgVnVsbmVyYWJpbGl0eSBGaXgqKgoKT2theSwgc28gYHNldF9tZW1vcnlfcm94YCBpcyBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcHJldHR5IGJyb2FkbHkgdXNlZCDigJMgY2FsbGVkIGZyb20gYWxsIHNvcnRzIG9mIHBsYWNlczogQlBGLCBrZXJuZWwgbW9kdWxlcywga3Byb2JlcywgZnRyYWNlLCBldmVuIGtleGVjLiBUaGF0IG1lYW5zIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgICppcyogZGVmaW5pdGVseSByZWFjaGFibGUsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFkZHMgYSBgc2NvcGVkX2d1YXJkYCBhcm91bmQgdGhlIHBhZ2UgdGFibGUgZnJlZWluZyBsb29wIHdpdGhpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBhbmQgYSBnb29kIG9uZSwgc2VlbWluZ2x5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSwgbW9zdCBsaWtlbHkgdHJpZ2dlcmVkIGJ5IGBwdGR1bXBgLgoKSGFuZyBvbiwgYHB0ZHVtcGDigKYgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIHRocm91Z2ggZGVidWdmcyBvciBzeXNmcyB0byBkdW1wIG91dCBwYWdlIHRhYmxlcy4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gd2hlcmUgYHB0ZHVtcGAgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcHJvY2Vzcy4gSSB0aGluayB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy03LVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjg6c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTMtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTQ6REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTY6c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE3LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIyLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNC1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNS0jaWZkZWYgQ09ORklHX01JVElHQVRJT05fUEFHRV9UQUJMRV9JU09MQVRJT05cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjcte1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCB0cnVlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozMzpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2N1cnVzcik7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM2LSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mzc6c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00My1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0NDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2VmaSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1NTpcdFx0XHQgICAgXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Ni1cbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2N1cnJlbnRfdXNlclwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU5Olx0XHRcdCAgICBcdTAwMjZwdGR1bXBfY3VydXNyX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VmaVwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLCBcdTAwMjZwdGR1bXBfZWZpX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjAtXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9Mjg9c3RydWN0IHBnX3N0YXRlIHtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI5Olx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMC1cdGludCBsZXZlbDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjc9c3RhdGljIHZvaWQgbm90ZV93eChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTIte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlx0c3RydWN0IHBnX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdF9zdCwgc3RydWN0IHBnX3N0YXRlLCBwdGR1bXApO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjU0LVx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjY5OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3B0ZShzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcHRlX3QgcHRlKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjcwLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNzQ6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcG1kKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwbWRfdCBwbWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI4MC17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjg0OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3A0ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcDRkX3QgcDRkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg1LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyODk6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwZ2RfdCBwZ2QpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI5OS0gKi9cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAxLVx0XHQgICAgICB1NjQgdmFsKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAyLXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMzpcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwNC1cdHBncHJvdHZhbF90IG5ld19wcm90LCBuZXdfZWZmO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5MC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjM5MTpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcHRlKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk1LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MDE6c3RhdGljIHZvaWQgbm90ZV9wYWdlX3B1ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDIte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQwNjpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcDRkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHA0ZF90IHA0ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MTY6c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDE3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXHRcdFx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI3Olx0Y29uc3Qgc3RydWN0IHB0ZHVtcF9yYW5nZSBwdGR1bXBfcmFuZ2VzW10gPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzctXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Mzg6XHRcdC5wdGR1bXAgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzktXHRcdFx0Lm5vdGVfcGFnZV9wdGUgPSBub3RlX3BhZ2VfcHRlLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cdFx0XHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDUwOlx0XHRcdC5yYW5nZVx0XHQ9IHB0ZHVtcF9yYW5nZXNcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1MS1cdFx0fSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTctXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBtbSwgcGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzY6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzctfVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cdFx0XHRcdCAgIGJvb2wgdXNlcilcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODYtI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg4LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ5MDp2b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ5MS17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAwLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTEwOlx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTEtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0MC1cdC8qXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MTpcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MjpcdCAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0My1cdCAqIHdyaXRlIGxvY2spLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggUmVsYXRlZCB0byBQYWdlIFRhYmxlIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBgcHRkdW1wYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWNjZXNzaWJsZSB0aHJvdWdoIGRlYnVnZnMgYXQgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pYCB0byB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gTXkgbWVudGFsIGFsYXJtcyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGxvY2sgYWRkaXRpb24gbWVhbnMgdGhhdCBgcHRkdW1wYCAqYWNxdWlyZXMqIHRoZSBtbWFwICpyZWFkKiBsb2NrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2tpbmcgY29udGV4dCBvZiBgcHRkdW1wYC4gVG8gYmUgY2VydGFpbiB0aGlzIGlzIGNvcnJlY3QgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhlIGNvZGUsIEkgd2lsbCBjaGVjayBlaXRoZXIgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBvciBwb3NzaWJseSBgcHRkdW1wX3dhbGtfcGdkYC4gR290dGEgbWFrZSBzdXJlIHRoaXMgbG9jayBhY3F1aXNpdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCB0aGF0IHRoZXkmIzM5O3JlIG5vdCBjYXVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgaXNzdWUuIEEgcXVpY2sgcmV2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIHNob3VsZCBwcm92aWRlIGNvbmZpcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1hcF8uKmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wdGR1bXAuYz0xNzU9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuLS1cbm1tL3B0ZHVtcC5jLTE3OS1cdGdldF9vbmxpbmVfbWVtcygpO1xubW0vcHRkdW1wLmM6MTgwOlx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbm1tL3B0ZHVtcC5jLTE4MS1cdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbi0tXG5tbS9wdGR1bXAuYy0xODUtXHR9XG5tbS9wdGR1bXAuYzoxODY6XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG5tbS9wdGR1bXAuYy0xODctXHRwdXRfb25saW5lX21lbXMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uY3VycmVuY3kgQnVnIEZpeCAtIFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RgICpkb2VzKiB0YWtlIGBtbWFwX3dyaXRlX2xvY2sobW0pYC4gVGhhdCBtZWFucyB0YWtpbmcgYG1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSlgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNyZWF0ZXMgc3luY2hyb25pemF0aW9uIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHRvIGJlIHByZWNpc2UuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEZ1enppbmcgY291bGQgZXhwb3NlIHRoZSByYWNlIGNvbmRpdGlvbiBpZiB0aGUgZml4IHdhc24mIzM5O3QgcHJlc2VudCwgb3IgaXQgY291bGQgaGVscCB0byB2YWxpZGF0ZSB0aGUgbmV3IGxvY2tpbmcgbWVjaGFuaXNtLgoKSGFuZyBvbi4uLiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBjYWxsZWQgd2hlbiBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEFuZCBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQgYnkgYSByYW5nZSBvZiBpbnRlcmVzdGluZyB0aGluZ3M6IEJQRiwga2VybmVsIG1vZHVsZXMsIGFuZCBrcHJvYmVzLiBUaGlzIG9wZW5zIHVwIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gV2UgY2FuIHRyaWdnZXIgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2Agc2ltcGx5IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIG9yIG1vZHVsZXMuIE9uIHRoZSBvdGhlciBoYW5kIHdlIGNhbiB0cmlnZ2VyIGBwdGR1bXBgIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQgb2YgYSBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MgZmluZCB0aGUgZm9jdXMgc3ltYm9scy4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBjcGFfZmx1c2hgLCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBgc2V0X21lbW9yeV9yb3hgIGlzIGV4cG9ydGVkIHRob3VnaC4gU28gd2UgY2FuIGZvY3VzIG9uIGBzZXRfbWVtb3J5X3JveGAgYW5kIGBwdGR1bXBfd2Fsa19wZ2RgIGFzIGVudHJ5IHBvaW50cy4gQWN0dWFsbHksIHNpbmNlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgaXQmIzM5O3Mgd29ydGggc2VlaW5nIGlmIHdlIGNhbiBmb2N1cyBvbiBpdCBkaXJlY3RseS4gU3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIGRlYnVnIGluZm8uIElmIHRoYXQgZmFpbHMgdGhlbiBgc2V0X21lbW9yeV9yb3hgIGlzIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCBzbyBpcyBgcHRkdW1wX3Nob3dgIG9yIGBwdGR1bXBfd2Fsa19wZ2RgLgoKRmluYWxseSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgZW5hYmxlZCwgYW5kIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBBUk1fUFREVU1QX0NPUkVcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTUtXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy03LVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MjM6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlNcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTI0LSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0U1pfMUdcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuLS1cbmFyY2gvYXJtL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXHQmIzQzOz0gZHVtcC5vXG5hcmNoL2FybS9tbS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19NT0RVTEVTKVx0XHQmIzQzOz0gcHJvYy1zeW1zLm9cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTcwPXZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzE6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03Mi0jZGVmaW5lIEVGSV9SVU5USU1FX01BUF9FTkRcdERFRkFVTFRfTUFQX1dJTkRPV182NFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo3NzojZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc4LSNlbHNlXG4tLVxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZT04PW9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBwdGR1bXAub1xuYXJjaC9hcm02NC9tbS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBwdGR1bXBfZGVidWdmcy5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19UUkFOU19UQUJMRSlcdCYjNDM7PSB0cmFuc19wZ2Qub1xuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTc5PUNPTkZJR19QUENfRUFSTFlfREVCVUc9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6ODA6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpXHQmIzQzOz0gYm9vazNzNjQub1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUENfQk9PSzNTXzMyKVx0JiM0Mzs9IGJhdHMubyBzZWdtZW50X3JlZ3Mub1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQ0LUNPTkZJR19ERUJVR19PQkpFQ1RTPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODIyOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTE4Mj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjQtXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjI1OiNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTI1NT1ERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Ny1cbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1NS1cdHNvcnQoXHUwMDI2bWFya2Vyc1sxXSwgbWFya2Vyc19jbnQgLSAxLCBzaXplb2YoKm1hcmtlcnMpLCBwdGR1bXBfY21wLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTY6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsX3BhZ2VfdGFibGVzXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwdGR1bXBfZm9wcyk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzU4OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBkZWJ1Z19wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjctXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yOS0jaW5jbHVkZSBcdTAwM2Nhc20vcHRkdW1wLmhcdTAwM2Vcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9Nzg9Q09ORklHX0tBU0FOX1ZNQUxMT0M9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjc5OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctODAtQ09ORklHX1NDSEVEX1NUQUNLX0VORF9DSEVDSz15XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjExNTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTExNi1DT05GSUdfUkNfREVWSUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD05NT1DT05GSUdfUFJPVkVfTE9DS0lORz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojk2OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBwdGR1bXAgRmVhdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgYHB0ZHVtcGAgZmVhdHVyZSBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgZXhwb3NpbmcgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIGRlYnVnZnMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhIGRlYnVnZ2luZyB0b29sLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGx1cmtpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3aGljaCB0ZWxscyBtZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZSB0YWJsZSBvciBQQVQgaXMgaW52b2x2ZWQuCgpgQ09ORklHX1g4Nl9QQVRgIGNvdWxkIGJlIHJlbGF0ZWQuIEhvd2V2ZXIsIHNpbmNlIHRoZSBQQVQgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODYsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdy4gVGhlIHJlYWwgdHJpZ2dlciBmb3IgYHB0ZHVtcGAgaXMgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmNgIGFuZCBzZWUgaG93IHRoaXMgZGVidWdmcyBpbnRlZ3JhdGlvbiBpcyBzZXQgdXAuIFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBoYW5kbGVyIG9yIHN0cnVjdHVyZSByZWdpc3RlcmVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxMDpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xMS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0xNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJrbmxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBQYWdlIFRhYmxlIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGBwdGR1bXBfc2hvd2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBmb3IgYGluaXRfbW1gLiBBdCB0aGUgc2FtZSB0aW1lLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0YWtlcyBhbiBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwdGR1bXBfc2hvd2AgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuCgpJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYnV0IHdhaXQgYSBtaW51dGUsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYy4gVGhhdCBtaWdodCBtYWtlIGl0IGhhcmRlciB0byBleHBsb2l0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgaW4gdGhhdCBnZW5lcmFsIGFyZWEsIHBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmx1c2hpbmcgb3Igc2V0dGluZyBtZW1vcnkgcHJvdGVjdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgc2V0X21lbW9yeV9yb3hgIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBleGFtaW5hdGlvbi4gYHB0ZHVtcF9zaG93YCBpdHNlbGYgaXMgYWxzbyBhbiBpbXBvcnRhbnQgc3ltYm9sIHRvIGtlZXAgaW4gbWluZC4KCk9uZSBtb3JlIHRoaW5nLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJcyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIGV4cG9ydGVkPyBJIGNhbiYjMzk7dCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQmIzM5O3MgbG9jYXRlZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBzbyBJIHNob3VsZCBjb25maXJtIHRoYXQgaXQgaXNuJiMzOTt0IGV4cG9ydGVkLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3ND12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXHRcdFx0XHQgICBib29sIHVzZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJiMzOTt0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIFRoYXQgbWFrZXMgaXQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGFsb25nc2lkZSBpdCwgSSBzaG91bGQgaW5jbHVkZSBgc2V0X21lbW9yeV9yb3hgLiBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgdGhhdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcG90ZW50aWFsbHkgdXRpbGl6ZSBpdCwgcHJvdmlkZWQgdGhlIGFzc29jaWF0ZWQgZGVidWcgaW5mb3JtYXRpb24gaXMgcHJlc2VudC4gTGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgdGFyZ2V0IGxpc3QgYXMgd2VsbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMsIEkgc2VlIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLiBBbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX1g4Nl9QQVRgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBkb24mIzM5O3Qgc2VlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgYHNldF9tZW1vcnlfcm94YCwgc28gaXQgYXBwZWFycyB0byBiZSBhdmFpbGFibGUgb24geDg2IGJ5IGRlZmF1bHQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhpcyBwYXRjaC4gQWhhLCBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGUgY29kZSBjaGFuZ2UgaW52b2x2ZXMgYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBgaW5pdF9tbWAgYmVmb3JlIGZyZWVpbmcgcGFnZSB0YWJsZXMuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjb25jdXJyZW5jeSBidWcgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBTbywgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCkhlcmUgYXJlIHRoZSBmb2N1cyBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCBhbmQgYHNldF9tZW1vcnlfcm94YC4gQW5kIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGBQVERVTVBfREVCVUdGU2AuCgpCZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gYHB0ZHVtcF9zaG93YCBjYWxscyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCB0aGVuIGZpbmFsbHkgYHB0ZHVtcF93YWxrX3BnZGAuIEFoLCBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RgIGlzIHRoZSBvbmUgdGhhdCB0YWtlcyB0aGUgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gQW5kIGBwdGR1bXBfd2Fsa19wZ2RgIHJlc2lkZXMgaW4gYG1tL3B0ZHVtcC5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaXQgaXMgYSBnbG9iYWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XG4tLVxubW0vcHRkdW1wLmMtMTc0LVxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbm1tL3B0ZHVtcC5jLTE3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgUGFnZSBUYWJsZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciB0aGlzIHBhZ2UgdGFibGUgYW5hbHlzaXMuIEkgc3RhcnRlZCBieSBjb25maXJtaW5nIHRoYXQgYHB0ZHVtcF93YWxrX3BnZGAgaXMgaW5kZWVkIGEgZ2xvYmFsIGZ1bmN0aW9uIOKAkyB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gVGhlIGFkZGVkIGJlbmVmaXQgaXMgdGhhdCBpdCYjMzk7cyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIGxvY2ssIHdoaWNoIGlzIGtleS4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gbGltaXQgbXkgYW5hbHlzaXMgYnkgaXNvbGF0aW5nIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgZnVuY3Rpb25zLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB3aXRoaW4gKnRoaXMqIHNwZWNpZmljIGNvbnRleHQsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGF0LgoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbjoKCiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYAoqICAgYHB0ZHVtcF93YWxrX3BnZGAKKiAgIGBzZXRfbWVtb3J5X3JveGAKCkJ1dCB3YWl0LCBgc2V0X21lbW9yeV9yb3hgIGlzICpqdXN0KiBvbmUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBjYWxsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgYHNldF9tZW1vcnlfKmAgdmFyaWFudHM/IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgPyBEbyB0aGV5IGFsc28gc2V0IGBDUEFfQ09MTEFQU0VgPyBJJiMzOTtkIGJldHRlciBjaGVjayBgc2V0X21lbW9yeV9yb2AgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMyMT1pbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMjk6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3JvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjA3Olx0cmV0dXJuIHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBzZXRfbWVtb3J5X3JvYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBgc2V0X21lbW9yeV9yb2AgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgbG93LWxldmVsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgaXQgYWNoaWV2ZXMgbWFraW5nIGEgbWVtb3J5IHJlZ2lvbiByZWFkLW9ubHkuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBhc3BlY3RzIOKAkyB3aGF0IHRyaWNrcyBhcmUgYmVpbmcgdXNlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWw/IEFyZSB0aGV5IGxldmVyYWdpbmcgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLCBNTVUgZmVhdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBDUFUgaW5zdHJ1Y3Rpb25zIGRlc2lnbmVkIGZvciBtZW1vcnkgcHJvdGVjdGlvbj8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJhbCBudWFuY2VzLiBEb2VzIGl0IHRha2UgaW50byBhY2NvdW50IHZpcnR1YWwgbWVtb3J5IGNvbmNlcHRzPyBJcyB0aGVyZSBhbnkgY2FjaGluZyBvciB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChUTEIpIGludmFsaWRhdGlvbiBpbnZvbHZlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGVmZmVjdGl2ZT8gSSBhbnRpY2lwYXRlIHNlZWluZyBzb21lIGludGVyYWN0aW9uIHdpdGggc3lzdGVtIGNhbGxzLCBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgbXByb3RlY3RgIG9yIGVxdWl2YWxlbnQsIHRob3VnaCBJIHdhbnQgdG8gc2VlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVpbmcgY2FsbGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzOyBhcmUgdGhleSBjaGVja2luZyByZXR1cm4gdmFsdWVzIHByb3Blcmx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaG9zZW4gYXBwcm9hY2ggb24gcGVyZm9ybWFuY2UsIGFuZCBvbiBtZW1vcnkgZnJhZ21lbnRhdGlvbj8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXZlIGFueSBpbmhlcmVudCB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGV5IGNvbnNpZGVyaW5nIG11bHRpLXRocmVhZGVkIGFjY2VzcyBhbmQgdGhlIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdoZW4gbW9kaWZ5aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGF0dHJpYnV0ZXM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgc2hhcmVkIG1lbW9yeSByZWdpb25zPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkZXRhaWxzIHRoYXQgYXJlIGVhc3kgdG8gb3Zlcmxvb2ssIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBzeXN0ZW1zLWxldmVsIGNvZGUgbGlrZSB0aGlzLiBTbywgbGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMyMT1pbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMjk6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHNldF9tZW1vcnlfcm9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGZvciBgc2V0X21lbW9yeV9yb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyBsaWtlbHkgY29udHJvbGxpbmcgcmVhZC1vbmx5IGFjY2VzcyBmb3IgYSBtZW1vcnkgcmVnaW9uLCBwb3NzaWJseSBhIHBoeXNpY2FsIG1lbW9yeSByYW5nZSBvciBhIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGluIHNjZW5hcmlvcyBkZW1hbmRpbmcgbWVtb3J5IHByb3RlY3Rpb24sIHNlY3VyaXR5IGhhcmRlbmluZywgb3IgcGVyaGFwcyBldmVuIGluIGRlYnVnZ2luZyB3aGVuIHRyeWluZyB0byBpc29sYXRlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbjoKCiogICAqKlVuZGVybHlpbmcgTWVjaGFuaXNtOioqIEhvdyBkb2VzIGl0IGFjdHVhbGx5IGVuZm9yY2UgdGhlIHJlYWQtb25seSByZXN0cmljdGlvbj8gSXMgaXQgbGV2ZXJhZ2luZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudD8gT3IsIGlzIGl0IHBlcmhhcHMgYSB1c2VybGFuZCB1dGlsaXR5IHRoYXQgdXNlcyBzeXN0ZW0gY2FsbHMgdG8gYWNoaWV2ZSB0aGlzIGVmZmVjdD8KKiAgICoqQ29udGV4dDoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXM/IEVtYmVkZGVkIHN5c3RlbXM/IE9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIG1vZHVsZXM/IEh5cGVydmlzb3JzPyBTZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zPwoqICAgKipHcmFudWxhcml0eToqKiBXaGF0JiMzOTtzIHRoZSBzbWFsbGVzdCB1bml0IG9mIG1lbW9yeSBpdCBjYW4gYWZmZWN0PyBJcyBpdCBwYWdlLWxldmVsLCBieXRlLWxldmVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KKiAgICoqQXRvbWljaXR5OioqIElmIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMsIGhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3k/IEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBvcGVyYXRpb24gZmFpbHM/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIHJhaXNlIGFuIGV4Y2VwdGlvbiwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncy4KKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIFdoYXQgYXJlIHRoZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcHJpdmlsZWdlcyB0aGF0IGFyZSBuZWVkZWQgdG8gZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uPyBBbnkgcG90ZW50aWFsIGZvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiBpZiBtaXN1c2VkPwoKSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBzZXRfbWVtb3J5X3JvYCBpbiBhIGdpdmVuIHNpdHVhdGlvbi4gVGhpcyByZXF1aXJlcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aWxsIGFpZCBpbiBteSBhbmFseXNpcy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGxpa2UgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGNhY2hlcyBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gdmVyeSBjYXJlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyOTpcdGludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuMjMzMDpcdHtcbjIzMzE6XHRcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSwgMCk7XG4yMzMyOlx0fVxuMjMzMzpcdFxuMjMzNDpcdGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbjIzMzU6XHR7XG4yMzM2Olx0XHRwZ3Byb3RfdCBjbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKTtcbjIzMzc6XHRcbjIzMzg6XHRcdGlmIChfX3N1cHBvcnRlZF9wdGVfbWFzayBcdTAwMjYgX1BBR0VfTlgpXG4yMzM5Olx0XHRcdGNsci5wZ3Byb3QgfD0gX1BBR0VfTlg7XG4yMzQwOlx0XG4yMzQxOlx0XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuMjM0MjpcdFx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuMjM0MzpcdH1cbjIzNDQ6XHRcbjIzNDU6XHRpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbjIzNDY6XHR7XG4yMzQ3Olx0XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXKSwgMCk7XG4yMzQ4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg1MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBgQ1BBX0NPTExBUFNFYCB0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNldHMgaXQgaXMgYHNldF9tZW1vcnlfcm94YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhhdCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnVnIGZpeC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtLCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBmaXggaW52b2x2ZXMgYWRkaW5nIGEgcmVhZCBsb2NrIHdpdGhpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jIHdpdGggYHB0ZHVtcGAsIGJlY2F1c2UgYHB0ZHVtcGAgdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwgY29kZSB0aGF04oCZcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBpbiBkZXRhaWwuCgpNeSBjdXJyZW50IHN1bW1hcnkgaXM6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGZyb250IG9mIG1pbmQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYW5kIG9mIGNvdXJzZSBgc2V0X21lbW9yeV9yb3hgLiBBbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZW5hYmxlZCB0aGUgYFBURFVNUF9ERUJVR0ZTYCBjb25maWcuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19ERUJVR19XWGAuIEl0IGxvb2tzIGxpa2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAsIHdoaWNoIHRoZW4gY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYC4gSSBuZWVkIHRvIGZvbGxvdyB0aGF0IGZsb3cgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBhY3QuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgY2hlY2sgb2YgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgcnVubmluZyBhdCBhIHByZXR0eSBjcnVjaWFsIHBvaW50IOKAkyBlaXRoZXIgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2Ugb3Igd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssICYjMzQ7SW50ZXJlc3RpbmcuIFdoYXQmIzM5O3MgaXQgY2hlY2tpbmcsIGFuZCB3aGVyZSBpcyBpdCBiZWluZyB1c2VkPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHNvIGVhcmx5IGdpdmVzIHVzIHZhbHVhYmxlIGluc2lnaHRzIGludG8gaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgb3IgYW55IGVhcmx5IHN5c3RlbSBjaGVja3MuIEEgZnVsbCB1bmRlcnN0YW5kaW5nIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eGAgaXMgaW52b2tlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzI9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVx0XHRcdFx0ICAgYm9vbCB1c2VyKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNDpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzYtdm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHB0ZHVtcF9jaGVja193eGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGhlIG1lbnRhbCBtYXAgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgcHRkdW1wX2NoZWNrX3d4YC4gTXkgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSB3YXkgSSYjMzk7dmUgc3RydWN0dXJlZCBteSBtZW50YWwgbWFwLCBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIGRhdGEgdmFsaWRhdGlvbiBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IGBwdGR1bXBfY2hlY2tfd3hgIGlzIHVzZWQgb3Igd2hlcmUgaXRzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgaW50ZW50aW9uIGlzIGJ5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIGFuZCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9jaGVja193eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNS0jaWZkZWYgQ09ORklHX0FSTV9ERUJVR19XWFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzY6I2RlZmluZSBhcm1fZGVidWdfY2hlY2t3eCgpIHB0ZHVtcF9jaGVja193eCgpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNy0jZWxzZVxuLS1cbmFyY2gvYXJtL21tL2R1bXAuYz00NDc9c3RhdGljIHN0cnVjdCBwdGR1bXBfaW5mbyBrZXJuZWxfcHRkdW1wX2luZm8gPSB7XG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1Mi1cbmFyY2gvYXJtL21tL2R1bXAuYzo0NTM6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZClcbmFyY2gvYXJtL21tL2R1bXAuYy00NTQte1xuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzM0PXN0YXRpYyBzdHJ1Y3QgcHRkdW1wX2luZm8ga2VybmVsX3B0ZHVtcF9pbmZvIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzNy1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzM4OmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzOS17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX3BndGFibGVfY29tcGxldGVfbWFzayh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY3LVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozNjg6Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY5LXtcbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzUtXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3Njpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzcte1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xNzU9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODEtXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MTgyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgzLXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzQ9Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNTojZGVmaW5lIHB0ZHVtcF9jaGVja193eCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTMxPXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMy1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2NoZWNrd3godm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM2LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1dYKSlcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mzc6XHRcdHB0ZHVtcF9jaGVja193eCgpO1xuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zOC19XG4tLVxubW0vcHRkdW1wLmM9MTkzPXN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9wdGR1bXAuYy0xOTQte1xubW0vcHRkdW1wLmM6MTk1Olx0aWYgKHB0ZHVtcF9jaGVja193eCgpKVxubW0vcHRkdW1wLmMtMTk2LVx0XHRzZXFfcHV0cyhtLCBcJiMzNDtTVUNDRVNTXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0ODYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQm9vdC1UaW1lIFJlYWQtT25seSBEYXRhIENoZWNrKioKClJpZ2h0LCBzbyBgZGVidWdfY2hlY2t3eGAgaXMgaW52b2tlZCBieSBgbWFya19yb2RhdGFfcm9gLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBhIHNhbml0eSBjaGVjayBlYXJseSBvbiwgdHlwaWNhbGx5IGF0IGJvb3QsIHRvIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHJlYWQtb25seSBkYXRhLiBCdXQgd2hhdCYjMzk7cyBzbGlnaHRseSB1bnVzdWFsIGlzIHRoYXQgYGNoZWNrX3d4X3Nob3dgIGlzIGRlZmluZWQgd2l0aGluIGBtbS9wdGR1bXAuY2AuIFRoYXQmIzM5O3MgYSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlLiBXaHkgd291bGQgYSByZWFkLW9ubHkgZGF0YSBpbnRlZ3JpdHkgY2hlY2ssIHdoaWNoLCBJIHByZXN1bWUsIGlzIHJlbGF0aXZlbHkgc3RhdGljIGF0IHRoYXQgcG9pbnQsIHJlc2lkZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgY2hlY2tfd3hfc2hvd2AgaXMgdXNlZC4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBmb3IgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJseSByZXZlYWwgc29tZXRoaW5nIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNoZWNrIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfd3hfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4tLVxubW0vcHRkdW1wLmMtMTkyLVxubW0vcHRkdW1wLmM6MTkzOnN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9wdGR1bXAuYy0xOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbW0vcHRkdW1wLmNgIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgdGhlIGBjaGVja193eF9zaG93YCBmdW5jdGlvbiwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gYG1tL3B0ZHVtcC5jYCBhbmQgYGNoZWNrX3d4X3Nob3dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9wdGR1bXAuY2AsIG5hdHVyYWxseSBncmF2aXRhdGluZyB0b3dhcmRzIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRlY2lkaW5nIHdoYXQmIzM5O3MgZGlzcGxheWVkIG9yIGhpZGRlbiwgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyBvciBwcm90ZWN0aW9uIGluIHRoZSBzeXN0ZW0uIFRoZSBmaWxlJiMzOTtzIG5hbWUgaXRzZWxmIHN0cm9uZ2x5IHN1Z2dlc3RzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcsIHNvIHRoZSBjb250ZXh0IGlzIHByZXR0eSBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzIGlmIHNvbWV0aGluZyBuZWVkcyB0byBiZSBzaG93biwgd2hhdCBjcml0ZXJpYSBhcmUgdXNlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgdGhpbmtpbmcgYWJvdXQ6CiogICAqKlNlY3VyaXR5IENvbnRleHQqKjogSXMgdGhpcyByZWxhdGVkIHRvIHJlc3RyaWN0aW5nIGFjY2VzcyB0byBjZXJ0YWluIG1lbW9yeSByZWdpb25zIGZvciBzZWN1cml0eSByZWFzb25zLCBwZXJoYXBzIHJlbGF0ZWQgdG8gV15YIChXcml0ZSBYT1IgRXhlY3V0ZSkgcHJvdGVjdGlvbnM/CiogICAqKkRlYnVnZ2luZyBUb29scyoqOiBDb3VsZCBpdCBiZSBhIGRlYnVnZ2luZyBhaWQsIGFsbG93aW5nIGNlcnRhaW4gbWVtb3J5IHN0YXRlcyB0byBiZSBzaG93biBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbioqOiBEb2VzIGl0IGZpbHRlciBvdXQgaW5mb3JtYXRpb24gdG8gcmVkdWNlIG92ZXJoZWFkIGR1cmluZyBhIHB0ZHVtcCwgb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/CiogICAqKkVycm9yIERldGVjdGlvbioqOiBQZXJoYXBzIGl0JiMzOTtzIGEgZGlhZ25vc3RpYyB0b29sLCBmbGFnZ2luZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG1hcHBpbmdzLgoqICAgKipSYWNlIENvbmRpdGlvbnMqKjogQ291bGQgdGhlcmUgYmUgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGFsbG93cyBtZW1vcnkgdG8gYmUgZGlzcGxheWVkIHVuZGVyIGNlcnRhaW4gcmFyZSBjb25kaXRpb25zPwoKSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBjb21wYXJpc29ucyBhZ2FpbnN0IGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGFuZCBjYWxscyB0byBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhIHNoYXJwIGV5ZSBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRzdC1cdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIDE5NDpcdHtcbiAxOTU6XHRcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcbiAxOTY6XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7U1VDQ0VTU1xcblwmIzM0Oyk7XG4gMTk3Olx0XHRlbHNlXG4gMTk4Olx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O0ZBSUxFRFxcblwmIzM0Oyk7XG4gMTk5Olx0XG4gMjAwOlx0XHRyZXR1cm4gMDtcbiAyMDE6XHR9XG4gMjAyOlx0XG4gMjAzOlx0REVGSU5FX1NIT1dfQVRUUklCVVRFKGNoZWNrX3d4KTtcbiAyMDQ6XHRcbiAyMDU6XHRzdGF0aWMgaW50IHB0ZHVtcF9kZWJ1Z2ZzX2luaXQodm9pZClcbiAyMDY6XHR7XG4gMjA3Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NoZWNrX3d4X3BhZ2VzXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZjaGVja193eF9mb3BzKTtcbiAyMDg6XHRcbiAyMDk6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyNAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWxpemluZyB0aGUgQW5hbHlzaXMqKgoKT2theSwgc28gYGNoZWNrX3d4X3BhZ2VzYCBpcyBhY3R1YWxseSBwYXJ0IG9mIGBkZWJ1Z2ZzYCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIFNvLCBjb25maXJtaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0LiBMZXQmIzM5O3MgbWFrZSB0aGlzIGZpbmFsLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyB0aGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQmIzM5O3MgYWRkcmVzc2luZyB0aGUgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHB0ZHVtcGAsIHN5bmNocm9uaXppbmcgdGhlbSB3aXRoIGEgcmVhZCBsb2NrLCBhbmQgdGhlIHdyaXRlIGxvY2ssIHJlc3BlY3RpdmVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGFmZmVjdHMgY29kZSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBjb3JlIGtlcm5lbC4KClRoZSBjcml0aWNhbCBzeW1ib2xzIEkmIzM5O2xsIGZvY3VzIG9uIGFyZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGFuZCBgc2V0X21lbW9yeV9yb3hgLiBBbmQgb2YgY291cnNlLCB3ZSYjMzk7bGwgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AgdG8gbWFrZSB0aGlzIGFsbCBhY2Nlc3NpYmxlLiBJIGZlZWwgZ29vZCBhYm91dCB0aGVzZSBjb25jbHVzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo0Ni40NTExNDg1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwNjI4MTE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwic2V0X21lbW9yeV9yb3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyAodXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHJlYWQgbG9jayBpbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byBzeW5jaHJvbml6ZSB3aXRoIGBwdGR1bXBgIHdoaWNoIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjQ2LjQ1MTE1NDY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzNDY0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmNmMWQzN2Q1ZGJmNWI3YzkxYjQyY2UwY2Q3YjRlMzU5YTUzNDkzMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2U4MjAvYXBpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTQzNiw5ICs0MzcsMTYgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXG4gXFx0Zmx1c2hfdGxiX2FsbCgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdC8qXFxuK1xcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XFxuK1xcdCAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwXFxuK1xcdCAqIHdyaXRlIGxvY2spLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFxcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xcbitcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9saXN0KTtcXG4rXFx0XFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjQ3LjM3NjMwODExM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MTM3NjQwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBidWcgKHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSByZWFkIGxvY2sgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gc3luY2hyb25pemUgd2l0aCBgcHRkdW1wYCB3aGljaCB0YWtlcyB0aGUgd3JpdGUgbG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZjFkMzdkNWRiZjViN2M5MWI0MmNlMGNkN2I0ZTM1OWE1MzQ5MzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOToxNTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uNGM0YjgyNDQ1MDJmY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDM2LDkgKzQzNywxNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXG4gXHRmbHVzaF90bGJfYWxsKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdC8qXG4rXHQgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieVxuK1x0ICogYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBpbml0X21tIChwdGR1bXAgYWNxdWlyZXMgdGhlIG1tYXBcbitcdCAqIHdyaXRlIGxvY2spLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbitcdFx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTU6NDcuMzc2MzEwMjMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1NzEzODQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgYHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlgIHdoZW4gdGhlIGZ1bmN0aW9uIGZyZWVzIHBhZ2UgdGFibGVzLiBJbnRlcmVzdGluZy4gVGhhdCdzIGEgY2xhc3NpYyBzaWduIG9mIHRyeWluZyB0byBmaXggYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBtZWFucyBzb21ldGhpbmcgaXMgZ29pbmcgdG8gYmUgcmVhZGluZyB0aGVzZSBwYWdlIHRhYmxlcy4gSSB3b25kZXIgd2hhdCBpdCBpcy5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGBwdGR1bXBgLCB3aGljaCBpbXBsaWVzIHRoYXQgYHB0ZHVtcGAgaXMgcmVhZGluZyB0aGVzZSBwYWdlIHRhYmxlcywgYW5kIHBvc3NpYmx5IGRvaW5nIHNvIHdoaWxlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jay4gU2VlbXMgbGlrZSBhIGNsZWFyIHJhY2UgaWYgeW91IGFyZW4ndCBjYXJlZnVsIGFib3V0IHN5bmNocm9uaXphdGlvbi5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFjdHVhbGx5ICpkb2VzKi4gSXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTGV0J3MgdHJhY2UgdGhlIGNhbGxzIGFuZCBzZWUgaG93IHRoaXMgZ3VhcmQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjUxLjczMzQ1MTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI2MjY1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00MTI9c3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQxNDpzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OC1cXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4OTpcXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjUxLjk2NjA4NDEwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU1MDM4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqVHJhY2luZyB0aGUgUGFnZSBGbHVzaGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGludm9rZWQgYnkgYGNwYV9mbHVzaGAuIFRoYXQncyBhIGNsZWFyIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aGVuKiB0aGVzZSBsYXJnZSBwYWdlIGNvbGxhcHNlcyBvY2N1ci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgY3BhX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBzdGFjayB1cHdhcmRzIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXJzIGZvciB0aGlzIGZsdXNoaW5nIG9wZXJhdGlvbiBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGZyb20gYGNwYV9mbHVzaGAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgYW5kIHByb2Nlc3NlcyB0aGF0IGxlYWQgdG8gbGFyZ2UgcGFnZXMgYmVpbmcgY29uc2lkZXJlZCBmb3IgY29sbGFwc2UuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGluIHBsYXkgaGVyZS4gSSdtIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IHBhdHRlcm5zIGluIHRoZSBjYWxsIHNpdGVzIHRoYXQgbWlnaHQgaGludCBhdCBzcGVjaWZpYyBtZW1vcnkgcHJlc3N1cmVzIG9yIHdvcmtsb2Fkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjU1LjE4MTU4OTgzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMyMjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM3OT1FWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFxcXCJERVZNRU1cXFwiKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzgxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzgyOnN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX2FsbCh2b2lkICphcmcpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zODMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zOTUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozOTY6c3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FsbCh1bnNpZ25lZCBsb25nIGNhY2hlKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzk5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDAwOlxcdG9uX2VhY2hfY3B1KF9fY3BhX2ZsdXNoX2FsbCwgKHZvaWQgKikgY2FjaGUsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDAxLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQwMzpzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQwNC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxND1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1MzpzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1OS1cXHRpZiAoY2FjaGUgXFx1MDAyNlxcdTAwMjYgIXN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NjA6XFx0XFx0Y3BhX2ZsdXNoX2FsbChjYWNoZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NjEtXFx0XFx0Z290byBjb2xsYXBzZV9sYXJnZV9wYWdlcztcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDY2LVxcdGVsc2VcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ2NzpcXHRcXHRvbl9lYWNoX2NwdShfX2NwYV9mbHVzaF90bGIsIGNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIwNjQ9c3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM3LVxcdGlmIChyZXQpIHtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxMzg6XFx0XFx0Y3BhX2ZsdXNoX2FsbChjYWNoZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE0MjpcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgY2FjaGUpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE0My1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTA9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxcdGlmICh4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3RsYl9mbHVzaF9yZXF1aXJlZChlbmMpKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQxMzpcXHRcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgeDg2X3BsYXRmb3JtLmd1ZXN0LmVuY19jYWNoZV9mbHVzaF9yZXF1aXJlZCgpKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MTQtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjQtXFx0ICogaW4gY2FzZSBhbnkgc3BlY3VsYXRpdmUgVExCIGNhY2hpbmcgb2NjdXJyZWQgKGJ1dCBubyBuZWVkIHRvIGZsdXNoXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI1OlxcdCAqIGNhY2hlcyBhZ2FpbikuICBXZSBjb3VsZCBqdXN0IHVzZSBjcGFfZmx1c2hfYWxsKCksIGJ1dCBpbiBjYXNlIFRMQlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyNjpcXHQgKiBmbHVzaGluZyBnZXRzIG9wdGltaXplZCBpbiB0aGUgY3BhX2ZsdXNoKCkgcGF0aCB1c2UgdGhlIHNhbWUgbG9naWNcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjctXFx0ICogYXMgYWJvdmUuXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI4LVxcdCAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyOTpcXHRjcGFfZmx1c2goXFx1MDAyNmNwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDMwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo1NS4yNzQ5MTg4NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MzI0NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGNwYV9mbHVzaGAsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBhbmQgYF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZWAuIEkga25vdyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgaGVhcnQgb2YgZnVuY3Rpb25zIGxpa2UgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGFuZCB0aG9zZSBvdGhlciBtZW1vcnkgcGVybWlzc2lvbiBzZXR0ZXJzIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblJpZ2h0LCBzbyB0byBkaWcgaW4gZnVydGhlciBJJ2xsIGZvY3VzIG9uIGBjcGFfZmx1c2hgLCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBvciBldmVuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBXYWl0Li4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIG9ubHkgZ2V0cyBjYWxsZWQgaWYgdGhlIGBDUEFfQ09MTEFQU0VgIGZsYWcgaXMgc2V0IGluIHRoZSBgY3BhYCBzdHJ1Y3R1cmUuICBUaGF0IGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGBDUEFfQ09MTEFQU0VgIGZsYWcgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB3ZSBhcmUgY29sbGFwc2luZyBsYXJnZSBwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNTo1OS42ODAyNDU5MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTgxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNQQV9DT0xMQVBTRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NzE9c3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc2LSNkZWZpbmUgQ1BBX05PX0NIRUNLX0FMSUFTIDggLyogRG8gbm90IHNlYXJjaCBmb3IgYWxpYXNlcyAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Nzc6I2RlZmluZSBDUEFfQ09MTEFQU0UgMTYgLyogdHJ5IHRvIGNvbGxhcHNlIGxhcmdlIHBhZ2VzICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03OC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDUzPXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODctY29sbGFwc2VfbGFyZ2VfcGFnZXM6XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0ODg6XFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDUEFfQ09MTEFQU0UpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00ODktXFx0XFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzQ9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQxLVxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MjpcXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE1OjU5LjkxNTIzMzA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODU0OTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKlVucmF2ZWxpbmcgYSBNZW1vcnkgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ1BBX0NPTExBUFNFYC4uLiBJIHNhdyBpdCBtZW50aW9uZWQgaW4gYHNldF9tZW1vcnlfcm94YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gQSBxdWljayBncmVwIGZvciBgQ1BBX0NPTExBUFNFYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEdvdHRhIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgY29udGV4dCBhbmQgZXZlcnkgcGxhY2UgaXQncyB0b3VjaGVkOyBJdCBjb3VsZCBiZSB1c2VkIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgSSdsbCBuZWVkIGFsbCB0aGUgaW5mb3JtYXRpb24uIExldCdzIHNlZSBob3cgd2lkZXNwcmVhZCB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MDIuOTQzNzg0NzQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxOTIyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1BBX0NPTExBUFNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03MT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwYV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzYtI2RlZmluZSBDUEFfTk9fQ0hFQ0tfQUxJQVMgOCAvKiBEbyBub3Qgc2VhcmNoIGZvciBhbGlhc2VzICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3NzojZGVmaW5lIENQQV9DT0xMQVBTRSAxNiAvKiB0cnkgdG8gY29sbGFwc2UgbGFyZ2UgcGFnZXMgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc4LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTM9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4Ny1jb2xsYXBzZV9sYXJnZV9wYWdlczpcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ4ODpcXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OS1cXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMzND1pbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEtXFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQyOlxcdFxcdFxcdFxcdFxcdENQQV9DT0xMQVBTRSwgTlVMTCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MDMuNDM1OTg3MDE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzI0MzU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGZvciBDb2xsYXRlcmFsIERhbWFnZSoqXG5cbkhtbSwgc28gYHNldF9tZW1vcnlfcm94YCBzZXRzIGBDUEFfQ09MTEFQU0VgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBkZWZpbml0ZWx5IHJpbmdzIGEgYmVsbC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcmlwcGxlIGVmZmVjdHMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcy4gQXJlIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbnMgd2hlcmUgYENQQV9DT0xMQVBTRWAgbWlnaHQgYmUgbWFuaXB1bGF0ZWQ/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCwgYW5kIGlmIGl0IGlzLCB0aGUgY29kZSB3aWxsIGxpa2VseSBuZWVkIGNsb3NlIHJldmlldy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIG9yIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gb3RoZXIgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjowNi41Njg0MjU2OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODU1MDgzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1BBX0NPTExBUFNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTcxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03Ni0jZGVmaW5lIENQQV9OT19DSEVDS19BTElBUyA4IC8qIERvIG5vdCBzZWFyY2ggZm9yIGFsaWFzZXMgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc3OiNkZWZpbmUgQ1BBX0NPTExBUFNFIDE2IC8qIHRyeSB0byBjb2xsYXBzZSBsYXJnZSBwYWdlcyAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg3LWNvbGxhcHNlX2xhcmdlX3BhZ2VzOlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg4OlxcdGlmIChjcGEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ1BBX0NPTExBUFNFKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg5LVxcdFxcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzM0PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS1cXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIGNsciwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDI6XFx0XFx0XFx0XFx0XFx0Q1BBX0NPTExBUFNFLCBOVUxMKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjoxMi40NTM5MzkzNDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMzYwMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgQ1BBX0NPTExBUFNFIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBlbmFibGluZyB0aGlzIGBDUEFfQ09MTEFQU0VgIGZsYWcuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgKm9ubHkqIHRoZSBgc2V0X21lbW9yeV9yb3hgIGZ1bmN0aW9uIGNhbiBzZXQgaXQuIFRoYXQncyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50LCBhIGZvY3VzZWQgaHlwb3RoZXNpcy4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB0cmFjZSAqYWxsKiB0aGUgY2FsbHMgdG8gYHNldF9tZW1vcnlfcm94YC4gRmluZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEknbSBsb29raW5nIGZvciB0aGUgdHJpZ2dlcnMsIHRoZSBjb25kaXRpb25zLCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGxlYWRzIHRvIGBDUEFfQ09MTEFQU0VgIGJlaW5nIGFjdGl2YXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgYHNldF9tZW1vcnlfcm94YCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjE1LjI3NzU0MzU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwODE5NzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz01OT12b2lkICpvbWFwX3NyYW1fcHVzaCh2b2lkICpmdW5jcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy03Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjc3OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYz04OT1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9kZXRlY3RfYW5kX21hcF9zcmFtKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jLTEyNS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0taW5pdC5jOjEyNjpcXHRzZXRfbWVtb3J5X3JveChiYXNlLCBwYWdlcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLWluaXQuYy0xMjctfVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM9ODE9dm9pZCAqb21hcF9zcmFtX3B1c2godm9pZCAqZnVuY3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jLTk4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jOjk5OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0xMDAtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYz0xODA9c3RhdGljIHZvaWQgX19pbml0IG9tYXAyX21hcF9zcmFtKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0yMTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLmM6MjE5OlxcdHNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYy0yMjAtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz00NT12b2lkICphbGxvY19pbnNuX3BhZ2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtNTEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzo1MjpcXHRpZiAoc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpYWRkciwgMSkpIHtcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTUzLVxcdFxcdGV4ZWNtZW1fZnJlZShhZGRyKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM9MjYwPWludCBsYXJjaF9pbnNuX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmMtMjg4LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9pbnN0LmM6Mjg5OlxcdGVyciA9IHNldF9tZW1vcnlfcm94KHN0YXJ0LCAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvaW5zdC5jLTI5MC1cXHRpZiAoZXJyKSB7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYzoyOTE6XFx0XFx0cHJfaW5mbyhcXFwiJXM6IHNldF9tZW1vcnlfcm94KCkgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2luc3QuYy0yOTItXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NDA9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNDQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC00Ni17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTQ4LX1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTUwLVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD0yNz1pbnQgX19zZXRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBudW1wYWdlcywgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0yOC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjI5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTMwLVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaD01OD1fX1NFVF9NRU1PUllfRlVOQyhzZXRfbWVtb3J5X3gsIFNFVF9NRU1PUllfWClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU5Ol9fU0VUX01FTU9SWV9GVU5DKHNldF9tZW1vcnlfcm94LCBTRVRfTUVNT1JZX1JPIHwgU0VUX01FTU9SWV9YKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNjAtX19TRVRfTUVNT1JZX0ZVTkMoc2V0X21lbW9yeV9yd254LCBTRVRfTUVNT1JZX1JXIHwgU0VUX01FTU9SWV9OWClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jPTM2PXZvaWQgKmFsbG9jX2luc25fcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDItXFx0XFx0cmV0dXJuIE5VTEw7XFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmM6NDM6XFx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFnZSwgMSk7XFxuYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMtNDQtXFx0cmV0dXJuIHBhZ2U7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTQ3MD1zdGF0aWMgaW50IG1vZHVsZV9hbGxvY19mdHJhY2VfaG90cGF0Y2hfdHJhbXBvbGluZXMoc3RydWN0IG1vZHVsZSAqbWUsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jLTQ4MS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jOjQ4MjpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylzdGFydCwgbnVtcGFnZXMpO1xcbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtNDgzLVxcdGVuZCA9IHN0YXJ0ICsgc2l6ZTtcXG4tLVxcbmFyY2gvczM5MC9tbS92bWVtLmM9Njc0PXZvaWQgX19pbml0IHZtZW1fbWFwX2luaXQodm9pZClcXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3NS17XFxuYXJjaC9zMzkwL21tL3ZtZW0uYzo2NzY6XFx0X19zZXRfbWVtb3J5X3JveChfc3RleHQsIF9ldGV4dCk7XFxuYXJjaC9zMzkwL21tL3ZtZW0uYy02NzctXFx0X19zZXRfbWVtb3J5X3JvKF9ldGV4dCwgX19lbmRfcm9kYXRhKTtcXG5hcmNoL3MzOTAvbW0vdm1lbS5jOjY3ODpcXHRfX3NldF9tZW1vcnlfcm94KF9fc3RleHRfYW1vZGUzMSwgX19ldGV4dF9hbW9kZTMxKTtcXG5hcmNoL3MzOTAvbW0vdm1lbS5jLTY3OS1cXHQvKlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xMS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz0zMDk9Y3JlYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgaW50ICp0cmFtcF9zaXplKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyNy1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDI4OlxcdHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmUsIG5wYWdlcyk7XFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyOS1cXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdHJhbXBvbGluZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9MzQzPWludCBtYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM2NC1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjM2NTpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PWludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzNDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzM1LXtcXG4tLVxcbmRyaXZlcnMvbWlzYy9zcmFtLWV4ZWMuYz03Mz12b2lkICpzcmFtX2V4ZWNfY29weShzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHZvaWQgKmRzdCwgdm9pZCAqc3JjLFxcbi0tXFxuZHJpdmVycy9taXNjL3NyYW0tZXhlYy5jLTEwOC1cXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmM6MTA5OlxcdHJldCA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKWJhc2UsIHBhZ2VzKTtcXG5kcml2ZXJzL21pc2Mvc3JhbS1leGVjLmMtMTEwLVxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD02Nz12b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc1LSAqIGFmdGVyIGl0IHdhcyB0ZW1wb3JhcmlseSByZW1hcHBlZCBhcyB3cml0YWJsZS4gUmVsaWVzIG9uIGFyY2hpdGVjdHVyZVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjc2OiAqIGltcGxlbWVudGF0aW9uIG9mIHNldF9tZW1vcnlfcm94KCkgdG8gcmVzdG9yZSBtYXBwaW5nIHVzaW5nIGxhcmdlIHBhZ2VzLlxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTc3LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExMTE9YnBmX2ppdF9iaW5hcnlfbG9ja19ybyhzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTExMy1cXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMoaGRyKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExMTQ6XFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKWhkciwgaGRyLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTExNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE4OnN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTkxOD1zdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtOTM0LVxcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVxcdTAwM2VwdHIpO1xcbmtlcm5lbC9icGYvY29yZS5jOjkzNTpcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVxcdTAwM2VwdHIsXFxua2VybmVsL2JwZi9jb3JlLmMtOTM2LVxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTk0OD12b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTk3MS1cXHRcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocHRyKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzo5NzI6XFx0XFx0XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcHRyLFxcbmtlcm5lbC9icGYvY29yZS5jLTk3My1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2MT1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDYzLVxcdFdBUk5fT05fT05DRShzaXplIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDY0OlxcdHJldHVybiBzZXRfbWVtb3J5X3JveCgobG9uZylpbWFnZSwgMSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2NS19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYz0zMz1pbnQgbW9kdWxlX2VuYWJsZV90ZXh0X3JveChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy00MS1cXHRcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6NDI6XFx0XFx0XFx0cmV0ID0gbW9kdWxlX3NldF9tZW1vcnkobW9kLCB0eXBlLCBzZXRfbWVtb3J5X3JveCk7XFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNDMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZXhlY21lbS5jPTE1MD1pbnQgZXhlY21lbV9yZXN0b3JlX3JveCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vZXhlY21lbS5jLTE1NC1cXG5tbS9leGVjbWVtLmM6MTU1OlxcdHJldHVybiBzZXRfbWVtb3J5X3JveChhZGRyLCBucik7XFxubW0vZXhlY21lbS5jLTE1Ni19XFxuLS1cXG5tbS9leGVjbWVtLmM9Mjc3PXN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtMzAyLVxcbm1tL2V4ZWNtZW0uYzozMDM6XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcCwgdm0tXFx1MDAzZW5yX3BhZ2VzKTtcXG5tbS9leGVjbWVtLmMtMzA0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjE5LjI4NTc0ODYzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg3MjEwMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBgc2V0X21lbW9yeV9yb3hgIGlzIGEgZnVuY3Rpb24gdGhhdCdzIHByZXR0eSBicm9hZGx5IHVzZWQg4oCTIGNhbGxlZCBmcm9tIGFsbCBzb3J0cyBvZiBwbGFjZXM6IEJQRiwga2VybmVsIG1vZHVsZXMsIGtwcm9iZXMsIGZ0cmFjZSwgZXZlbiBrZXhlYy4gVGhhdCBtZWFucyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIFRoZSBwYXRjaCBhZGRzIGEgYHNjb3BlZF9ndWFyZGAgYXJvdW5kIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgbG9vcCB3aXRoaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSwgYW5kIGEgZ29vZCBvbmUsIHNlZW1pbmdseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgaXNzdWUsIG1vc3QgbGlrZWx5IHRyaWdnZXJlZCBieSBgcHRkdW1wYC5cblxuSGFuZyBvbiwgYHB0ZHVtcGDigKYgcmlnaHQsIHRoYXQncyB0aGUgaW50ZXJmYWNlIHVzZWQgdGhyb3VnaCBkZWJ1Z2ZzIG9yIHN5c2ZzIHRvIGR1bXAgb3V0IHBhZ2UgdGFibGVzLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB3aGVyZSBgcHRkdW1wYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwcm9jZXNzLiBJIHRoaW5rIHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjIzLjE3Mjk2MTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNzYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNy1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6ODpzdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTEzLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxNDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE2OnN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTcte1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjQtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI1LSNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9QQUdFX1RBQkxFX0lTT0xBVElPTlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI3LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjMzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3VydXNyKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzYtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWDg2XzY0KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozNzpzdGF0aWMgaW50IHB0ZHVtcF9lZmlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXFx0aWYgKGVmaV9tbS5wZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZlZmlfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDMtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQ0OkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfZWZpKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9NDk9c3RhdGljIGludCBfX2luaXQgcHRfZHVtcF9kZWJ1Z19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjUzOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbFxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTQtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF9rZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU1OlxcdFxcdFxcdCAgICBcXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF91c2VyXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1OTpcXHRcXHRcXHQgICAgXFx1MDAyNnB0ZHVtcF9jdXJ1c3JfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy02MS0jaWYgZGVmaW5lZChDT05GSUdfRUZJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjYyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVmaVxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMC1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTI4PXN0cnVjdCBwZ19zdGF0ZSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjk6XFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAtXFx0aW50IGxldmVsO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI3PXN0YXRpYyB2b2lkIG5vdGVfd3goc3RydWN0IHBnX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI1MTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Mi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTQtXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI2OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB0ZV90IHB0ZSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBtZF90IHBtZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHA0ZF90IHA0ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBnZF90IHBnZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjk5LSAqL1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMS1cXHRcXHQgICAgICB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzAzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMDQtXFx0cGdwcm90dmFsX3QgbmV3X3Byb3QsIG5ld19lZmY7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzkxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDAxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDA2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcDRkX3QgcDRkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQxMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDE2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTcte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNzpcXHRjb25zdCBzdHJ1Y3QgcHRkdW1wX3JhbmdlIHB0ZHVtcF9yYW5nZXNbXSA9IHtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQzNy1cXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDM4OlxcdFxcdC5wdGR1bXAgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDM5LVxcdFxcdFxcdC5ub3RlX3BhZ2VfcHRlID0gbm90ZV9wYWdlX3B0ZSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cXHRcXHRcXHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1MDpcXHRcXHRcXHQucmFuZ2VcXHRcXHQ9IHB0ZHVtcF9yYW5nZXNcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTEtXFx0XFx0fSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXFx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDE0PXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQwLVxcdC8qXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDE6XFx0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ0MjpcXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQzLVxcdCAqIHdyaXRlIGxvY2spLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjoyMy4zMzYzNDMwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY0NzAzNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBSZWxhdGVkIHRvIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGBwdGR1bXBgLCB3aGljaCBpcywgb2YgY291cnNlLCBhY2Nlc3NpYmxlIHRocm91Z2ggZGVidWdmcyBhdCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV90YWJsZXMva2VybmVsYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pYCB0byB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBNeSBtZW50YWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuIFRoaXMgbG9jayBhZGRpdGlvbiBtZWFucyB0aGF0IGBwdGR1bXBgICphY3F1aXJlcyogdGhlIG1tYXAgKnJlYWQqIGxvY2suIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9ja2luZyBjb250ZXh0IG9mIGBwdGR1bXBgLiBUbyBiZSBjZXJ0YWluIHRoaXMgaXMgY29ycmVjdCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSwgSSB3aWxsIGNoZWNrIGVpdGhlciBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIG9yIHBvc3NpYmx5IGBwdGR1bXBfd2Fsa19wZ2RgLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBsb2NrIGFjcXVpc2l0aW9uIGlzIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHRoYXQgdGhleSdyZSBub3QgY2F1c2luZyBhIGRpZmZlcmVudCBraW5kIG9mIGlzc3VlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjI3LjUwMTA0OTM3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDQzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfLipsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xNzktXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxubW0vcHRkdW1wLmM6MTgwOlxcdG1tYXBfd3JpdGVfbG9jayhtbSk7XFxubW0vcHRkdW1wLmMtMTgxLVxcdHdoaWxlIChyYW5nZS1cXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXFx1MDAzZWVuZCkge1xcbi0tXFxubW0vcHRkdW1wLmMtMTg1LVxcdH1cXG5tbS9wdGR1bXAuYzoxODY6XFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbm1tL3B0ZHVtcC5jLTE4Ny1cXHRwdXRfb25saW5lX21lbXMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MjcuNjUxMTAwMDU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzI5MDUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY3VycmVuY3kgQnVnIEZpeCAtIFdvcnRoIEZ1enppbmc/KipcblxuT2theSwgc28gYHB0ZHVtcF93YWxrX3BnZGAgKmRvZXMqIHRha2UgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGF0IG1lYW5zIHRha2luZyBgbW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSlgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNyZWF0ZXMgc3luY2hyb25pemF0aW9uIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHRvIGJlIHByZWNpc2UuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEZ1enppbmcgY291bGQgZXhwb3NlIHRoZSByYWNlIGNvbmRpdGlvbiBpZiB0aGUgZml4IHdhc24ndCBwcmVzZW50LCBvciBpdCBjb3VsZCBoZWxwIHRvIHZhbGlkYXRlIHRoZSBuZXcgbG9ja2luZyBtZWNoYW5pc20uXG5cbkhhbmcgb24uLi4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgY2FsbGVkIHdoZW4gYHNldF9tZW1vcnlfcm94YCBpcyB1c2VkLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEFuZCBgc2V0X21lbW9yeV9yb3hgIGlzIHVzZWQgYnkgYSByYW5nZSBvZiBpbnRlcmVzdGluZyB0aGluZ3M6IEJQRiwga2VybmVsIG1vZHVsZXMsIGFuZCBrcHJvYmVzLiBUaGlzIG9wZW5zIHVwIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gV2UgY2FuIHRyaWdnZXIgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2Agc2ltcGx5IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIG9yIG1vZHVsZXMuIE9uIHRoZSBvdGhlciBoYW5kIHdlIGNhbiB0cmlnZ2VyIGBwdGR1bXBgIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2VfdGFibGVzL2tlcm5lbGAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQgb2YgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5Ob3csIGxldCdzIGZpbmQgdGhlIGZvY3VzIHN5bWJvbHMuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgY3BhX2ZsdXNoYCwgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucy4gYHNldF9tZW1vcnlfcm94YCBpcyBleHBvcnRlZCB0aG91Z2guIFNvIHdlIGNhbiBmb2N1cyBvbiBgc2V0X21lbW9yeV9yb3hgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBhcyBlbnRyeSBwb2ludHMuIEFjdHVhbGx5LCBzaW5jZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIGl0J3Mgd29ydGggc2VlaW5nIGlmIHdlIGNhbiBmb2N1cyBvbiBpdCBkaXJlY3RseS4gU3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgZGVidWcgaW5mby4gSWYgdGhhdCBmYWlscyB0aGVuIGBzZXRfbWVtb3J5X3JveGAgaXMgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHNvIGlzIGBwdGR1bXBfc2hvd2Agb3IgYHB0ZHVtcF93YWxrX3BnZGAuXG5cbkZpbmFsbHksIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgZW5hYmxlZCwgYW5kIHdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjM1LjA4NDAwNzgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODkzMjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVERVTVBfREVCVUdGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3Q9MjM9Y29uZmlndXJhdGlvbnMgYW5kIG1vdW50IGRlYnVnZnM6OlxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0LTI0LVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0LTI2LVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBBUk1fUFREVU1QX0NPUkVcXG4tLVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIzOiNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjQtI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0U1pfMUdcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMC1cXG4tLVxcbmFyY2gvYXJtL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXFx0Kz0gZHVtcC5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0FSTV9QVERVTVBfREVCVUdGUylcXHQrPSBwdGR1bXBfZGVidWdmcy5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX01PRFVMRVMpXFx0XFx0Kz0gcHJvYy1zeW1zLm9cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzA9dm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzE6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzItI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0REVGQVVMVF9NQVBfV0lORE9XXzY0XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03Ni1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKSB7IH1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjc3OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc4LSNlbHNlXFxuLS1cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFREVU1QX0RFQlVHRlMpXFx0Kz0gcHRkdW1wX2RlYnVnZnMub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVxcdCs9IHRyYW5zX3BnZC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz03OT1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZzo4MDpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZT05PW9iai0kKENPTkZJR19QUENfQk9PSzNTXzY0KVxcdCs9IGJvb2szczY0Lm9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEwLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBDX0JPT0szU18zMilcXHQrPSBiYXRzLm8gc2VnbWVudF9yZWdzLm9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQxOS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFREVU1QX0RFQlVHRlMpKVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIxLVxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbF9wYWdlX3RhYmxlc1xcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwdGR1bXBfZm9wcyk7XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg0MzpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04NDQtQ09ORklHX0RFQlVHX09CSkVDVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTgyMT1DT05GSUdfREVCVUdfV1g9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo4MjI6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTgyPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMjU6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjU1PURFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXApO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU1LVxcdHNvcnQoXFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NjojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTg6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfUFREVU1QKVxcdFxcdCs9IGR1bXBfcGFnZXRhYmxlcy5vXFxuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVxcdCs9IGRlYnVnX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yNy1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2FzbS9wdGR1bXAuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZz03OD1DT05GSUdfS0FTQU5fVk1BTExPQz15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjc5OkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTgwLUNPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0s9eVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDoxMTU6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMTE2LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9OTU9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6OTY6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6MzkuMzQyOTQ1MTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzY1Nzk5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIHRoZSBwdGR1bXAgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzIGBwdGR1bXBgIGZlYXR1cmUgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciBleHBvc2luZyBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRocm91Z2ggZGVidWdmcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGEgZGVidWdnaW5nIHRvb2wuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbHVya2luZyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHdoaWNoIHRlbGxzIG1lIHRoZSBtZW1vcnkgYXR0cmlidXRlIHRhYmxlIG9yIFBBVCBpcyBpbnZvbHZlZC5cblxuYENPTkZJR19YODZfUEFUYCBjb3VsZCBiZSByZWxhdGVkLiBIb3dldmVyLCBzaW5jZSB0aGUgUEFUIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2LCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdy4gVGhlIHJlYWwgdHJpZ2dlciBmb3IgYHB0ZHVtcGAgaXMgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5MZXQncyBkaWcgaW50byBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBhbmQgc2VlIGhvdyB0aGlzIGRlYnVnZnMgaW50ZWdyYXRpb24gaXMgc2V0IHVwLiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoZXJlJ3Mgc29tZSBraW5kIG9mIGhhbmRsZXIgb3Igc3RydWN0dXJlIHJlZ2lzdGVyZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDUwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjQzLjI3OTUyNzgxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxMjY4ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTE2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cXHRpZiAoZWZpX21tLnBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NDA6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmVmaV9tbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTY6NDMuNjMwODAyOTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDQ4NDUxNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGBwdGR1bXBfc2hvd2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBmb3IgYGluaXRfbW1gLiBBdCB0aGUgc2FtZSB0aW1lLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0YWtlcyBhbiBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwdGR1bXBfc2hvd2AgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuXG5cbkknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGJ1dCB3YWl0IGEgbWludXRlLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBzdGF0aWMuIFRoYXQgbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gZXhwbG9pdC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBpbiB0aGF0IGdlbmVyYWwgYXJlYSwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBmbHVzaGluZyBvciBzZXR0aW5nIG1lbW9yeSBwcm90ZWN0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBzZXRfbWVtb3J5X3JveGAgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBgcHRkdW1wX3Nob3dgIGl0c2VsZiBpcyBhbHNvIGFuIGltcG9ydGFudCBzeW1ib2wgdG8ga2VlcCBpbiBtaW5kLlxuXG5PbmUgbW9yZSB0aGluZy4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBleHBvcnRlZD8gSSBjYW4ndCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQncyBsb2NhdGVkIGluIGBhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY2AsIHNvIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpdCBpc24ndCBleHBvcnRlZCwganVzdCB0byBtYWtlIHN1cmUgSSdtIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQyMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNjo1NC4wNzkyNTg2ODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTgwMDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00NzQ9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cXHRcXHRcXHRcXHQgICBib29sIHVzZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE2OjU0LjU4NTA2ODIxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTIyNzEzMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZXNlIGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhhdCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIGlzbid0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgZm9jdXMgc3ltYm9sLCBhbmQgYWxvbmdzaWRlIGl0LCBJIHNob3VsZCBpbmNsdWRlIGBzZXRfbWVtb3J5X3JveGAuIEkndmUgZ290IHRvIGNvbnNpZGVyIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBzeXprYWxsZXIgY2FuIHN0aWxsIHBvdGVudGlhbGx5IHV0aWxpemUgaXQsIHByb3ZpZGVkIHRoZSBhc3NvY2lhdGVkIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByZXNlbnQuIExldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgdGFyZ2V0IGxpc3QgYXMgd2VsbC5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucywgSSBzZWUgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgdGhlIHByaW1hcnkgb25lIGhlcmUuIEFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfWDg2X1BBVGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIGRvbid0IHNlZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGBzZXRfbWVtb3J5X3JveGAsIHNvIGl0IGFwcGVhcnMgdG8gYmUgYXZhaWxhYmxlIG9uIHg4NiBieSBkZWZhdWx0LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhpcyBwYXRjaC4gQWhhLCBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGUgY29kZSBjaGFuZ2UgaW52b2x2ZXMgYWNxdWlyaW5nIHRoZSBtbWFwIHJlYWQgbG9jayBvbiBgaW5pdF9tbWAgYmVmb3JlIGZyZWVpbmcgcGFnZSB0YWJsZXMuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjb25jdXJyZW5jeSBidWcgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBTbywgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSGVyZSBhcmUgdGhlIGZvY3VzIHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkOiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIEFuZCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpcyBgUFREVU1QX0RFQlVHRlNgLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gYHB0ZHVtcF9zaG93YCBjYWxscyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCB0aGVuIGZpbmFsbHkgYHB0ZHVtcF93YWxrX3BnZGAuIEFoLCBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RgIGlzIHRoZSBvbmUgdGhhdCB0YWtlcyB0aGUgYG1tYXBfd3JpdGVfbG9jayhtbSlgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gQW5kIGBwdGR1bXBfd2Fsa19wZ2RgIHJlc2lkZXMgaW4gYG1tL3B0ZHVtcC5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaXQgaXMgYSBnbG9iYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA0LjEwNzc4NTA2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTg3OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wdGR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wdGR1bXAuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwdGR1bXBfb3BzID0ge1xcbi0tXFxubW0vcHRkdW1wLmMtMTc0LVxcbm1tL3B0ZHVtcC5jOjE3NTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxubW0vcHRkdW1wLmMtMTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MDQuMjYwOTc4MjU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTIyMDQxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBQYWdlIFRhYmxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciB0aGlzIHBhZ2UgdGFibGUgYW5hbHlzaXMuIEkgc3RhcnRlZCBieSBjb25maXJtaW5nIHRoYXQgYHB0ZHVtcF93YWxrX3BnZGAgaXMgaW5kZWVkIGEgZ2xvYmFsIGZ1bmN0aW9uIOKAkyB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gVGhlIGFkZGVkIGJlbmVmaXQgaXMgdGhhdCBpdCdzIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBob2xkcyB0aGUgbG9jaywgd2hpY2ggaXMga2V5LlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gbGltaXQgbXkgYW5hbHlzaXMgYnkgaXNvbGF0aW5nIHRoZSBwYWdlIHRhYmxlIGZyZWVpbmcgZnVuY3Rpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHdpdGhpbiAqdGhpcyogc3BlY2lmaWMgY29udGV4dCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoYXQuXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYFxuKiAgIGBwdGR1bXBfd2Fsa19wZ2RgXG4qICAgYHNldF9tZW1vcnlfcm94YFxuXG5CdXQgd2FpdCwgYHNldF9tZW1vcnlfcm94YCBpcyAqanVzdCogb25lIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBjYW4gY2FsbCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUuIFdoYXQgYWJvdXQgdGhlIG90aGVyIGBzZXRfbWVtb3J5XypgIHZhcmlhbnRzPyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YD8gRG8gdGhleSBhbHNvIHNldCBgQ1BBX0NPTExBUFNFYD8gSSdkIGJldHRlciBjaGVjayBgc2V0X21lbW9yeV9yb2AgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA4Ljc3MzE4NDk2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTA0NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjE9aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzI5OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjAzPWludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MDc6XFx0cmV0dXJuIHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjA4LjkyODI5NTQ5NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk0NDY3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYHNldF9tZW1vcnlfcm9gIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBgc2V0X21lbW9yeV9yb2AgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBjcml0aWNhbCBsb3ctbGV2ZWwgcGllY2UsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyBpdCBhY2hpZXZlcyBtYWtpbmcgYSBtZW1vcnkgcmVnaW9uIHJlYWQtb25seS4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYXNwZWN0cyDigJMgd2hhdCB0cmlja3MgYXJlIGJlaW5nIHVzZWQgYXQgdGhlIGhhcmR3YXJlIGxldmVsPyBBcmUgdGhleSBsZXZlcmFnaW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgTU1VIGZlYXR1cmVzLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgQ1BVIGluc3RydWN0aW9ucyBkZXNpZ25lZCBmb3IgbWVtb3J5IHByb3RlY3Rpb24/XG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmFsIG51YW5jZXMuIERvZXMgaXQgdGFrZSBpbnRvIGFjY291bnQgdmlydHVhbCBtZW1vcnkgY29uY2VwdHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXIgKFRMQikgaW52YWxpZGF0aW9uIGludm9sdmVkIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgaW1tZWRpYXRlbHkgZWZmZWN0aXZlPyBJIGFudGljaXBhdGUgc2VlaW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBzeXN0ZW0gY2FsbHMsIHByb2JhYmx5IHNvbWV0aGluZyBsaWtlIGBtcHJvdGVjdGAgb3IgZXF1aXZhbGVudCwgdGhvdWdoIEkgd2FudCB0byBzZWUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWluZyBjYWxsZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnM7IGFyZSB0aGV5IGNoZWNraW5nIHJldHVybiB2YWx1ZXMgcHJvcGVybHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNob3NlbiBhcHByb2FjaCBvbiBwZXJmb3JtYW5jZSwgYW5kIG9uIG1lbW9yeSBmcmFnbWVudGF0aW9uP1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXZlIGFueSBpbmhlcmVudCB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGV5IGNvbnNpZGVyaW5nIG11bHRpLXRocmVhZGVkIGFjY2VzcyBhbmQgdGhlIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdoZW4gbW9kaWZ5aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGF0dHJpYnV0ZXM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnM/IEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc3VidGxlIGRldGFpbHMgdGhhdCBhcmUgZWFzeSB0byBvdmVybG9vaywgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHN5c3RlbXMtbGV2ZWwgY29kZSBsaWtlIHRoaXMuIFNvLCBsZXQgbWUgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MTIuOTIyNzY1OTAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA1MTU2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjE9aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzI5OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzoxMy4xMjMyOTE4NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MjQ0NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc2V0X21lbW9yeV9yb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGZvciBgc2V0X21lbW9yeV9yb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyBsaWtlbHkgY29udHJvbGxpbmcgcmVhZC1vbmx5IGFjY2VzcyBmb3IgYSBtZW1vcnkgcmVnaW9uLCBwb3NzaWJseSBhIHBoeXNpY2FsIG1lbW9yeSByYW5nZSBvciBhIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgaW4gc2NlbmFyaW9zIGRlbWFuZGluZyBtZW1vcnkgcHJvdGVjdGlvbiwgc2VjdXJpdHkgaGFyZGVuaW5nLCBvciBwZXJoYXBzIGV2ZW4gaW4gZGVidWdnaW5nIHdoZW4gdHJ5aW5nIHRvIGlzb2xhdGUgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICAqKlVuZGVybHlpbmcgTWVjaGFuaXNtOioqIEhvdyBkb2VzIGl0IGFjdHVhbGx5IGVuZm9yY2UgdGhlIHJlYWQtb25seSByZXN0cmljdGlvbj8gSXMgaXQgbGV2ZXJhZ2luZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50PyBPciwgaXMgaXQgcGVyaGFwcyBhIHVzZXJsYW5kIHV0aWxpdHkgdGhhdCB1c2VzIHN5c3RlbSBjYWxscyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0P1xuKiAgICoqQ29udGV4dDoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXM/IEVtYmVkZGVkIHN5c3RlbXM/IE9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIG1vZHVsZXM/IEh5cGVydmlzb3JzPyBTZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zP1xuKiAgICoqR3JhbnVsYXJpdHk6KiogV2hhdCdzIHRoZSBzbWFsbGVzdCB1bml0IG9mIG1lbW9yeSBpdCBjYW4gYWZmZWN0PyBJcyBpdCBwYWdlLWxldmVsLCBieXRlLWxldmVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cbiogICAqKkF0b21pY2l0eToqKiBJZiBpdCdzIGRlYWxpbmcgd2l0aCBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMsIGhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3k/IEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCByYWlzZSBhbiBleGNlcHRpb24sIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byBwcmV2ZW50aW5nIGJ1Z3MuXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwcml2aWxlZ2VzIHRoYXQgYXJlIG5lZWRlZCB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24/IEFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGlmIG1pc3VzZWQ/XG5cbkkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBgc2V0X21lbW9yeV9yb2AgaW4gYSBnaXZlbiBzaXR1YXRpb24uIFRoaXMgcmVxdWlyZXMgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBhaWQgaW4gbXkgYW5hbHlzaXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBsaWtlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBjYWNoZXMgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcmVhZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gdmVyeSBjYXJlZnVsbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MTcuNDk1NzQwNDkzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMjk6XFx0aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuMjMzMDpcXHR7XFxuMjMzMTpcXHRcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLCAwKTtcXG4yMzMyOlxcdH1cXG4yMzMzOlxcdFxcbjIzMzQ6XFx0aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbjIzMzU6XFx0e1xcbjIzMzY6XFx0XFx0cGdwcm90X3QgY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSk7XFxuMjMzNzpcXHRcXG4yMzM4OlxcdFxcdGlmIChfX3N1cHBvcnRlZF9wdGVfbWFzayBcXHUwMDI2IF9QQUdFX05YKVxcbjIzMzk6XFx0XFx0XFx0Y2xyLnBncHJvdCB8PSBfUEFHRV9OWDtcXG4yMzQwOlxcdFxcbjIzNDE6XFx0XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbjIzNDM6XFx0fVxcbjIzNDQ6XFx0XFxuMjM0NTpcXHRpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4yMzQ2OlxcdHtcXG4yMzQ3OlxcdFxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldChcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KF9QQUdFX1JXKSwgMCk7XFxuMjM0ODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjE3LjQ5NjAxNjk0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDkxMDIwMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBgQ1BBX0NPTExBUFNFYCB0aGluZy4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNldHMgaXQgaXMgYHNldF9tZW1vcnlfcm94YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhhdCBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnVnIGZpeC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgY29uY3VycmVuY3kgcHJvYmxlbSwgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBhIHJlYWQgbG9jayB3aXRoaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gc3luYyB3aXRoIGBwdGR1bXBgLCBiZWNhdXNlIGBwdGR1bXBgIHRha2VzIHRoZSB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsIGNvZGUgdGhhdOKAmXMgYWN0dWFsbHkgcmVhY2hhYmxlLCB3aGljaCBtYWtlcyBpdCBpbXBvcnRhbnQgdG8gaW52ZXN0aWdhdGUgaW4gZGV0YWlsLlxuXG5NeSBjdXJyZW50IHN1bW1hcnkgaXM6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGZyb250IG9mIG1pbmQ6IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYW5kIG9mIGNvdXJzZSBgc2V0X21lbW9yeV9yb3hgLiBBbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBlbmFibGVkIHRoZSBgUFREVU1QX0RFQlVHRlNgIGNvbmZpZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfREVCVUdfV1hgLiBJdCBsb29rcyBsaWtlIHRoYXQgY291bGQgdHJpZ2dlciBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgLCB3aGljaCB0aGVuIGNhbGxzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAuIEkgbmVlZCB0byBmb2xsb3cgdGhhdCBmbG93IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbXBhY3QuIExldCdzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjIyLjU4NzA0MDA2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDc2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNC1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjIyLjc0MjEyMjgyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExMjI0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFBhdGggb2YgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3gqKlxuXG5Pa2F5LCBzbyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgIGlzIHNvbWV0aGluZyB0aGF0J3MgcnVubmluZyBhdCBhIHByZXR0eSBjcnVjaWFsIHBvaW50IOKAkyBlaXRoZXIgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2Ugb3Igd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiSW50ZXJlc3RpbmcuIFdoYXQncyBpdCBjaGVja2luZywgYW5kIHdoZXJlIGlzIGl0IGJlaW5nIHVzZWQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhhdCBpdCdzIGNhbGxlZCBzbyBlYXJseSBnaXZlcyB1cyB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIG9yIGFueSBlYXJseSBzeXN0ZW0gY2hlY2tzLiBBIGZ1bGwgdW5kZXJzdGFuZGluZyBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hgIGlzIGludm9rZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzoyNS43NTMzNTAwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzk3MjU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTMyPXZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzMtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzQ6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzU6I2RlZmluZSBwdGR1bXBfY2hlY2tfd3ggcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzYtdm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDkwPXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MzEuMDk3MzkzODc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk1NDQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgcHRkdW1wX2NoZWNrX3d4YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBtZW50YWwgbWFwIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYHB0ZHVtcF9jaGVja193eGAuIE15IGludHVpdGlvbiBpcyBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gaXQuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSB3YXkgSSd2ZSBzdHJ1Y3R1cmVkIG15IG1lbnRhbCBtYXAsIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBzb21ldGhpbmcgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGVyZS4gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIGRhdGEgdmFsaWRhdGlvbiBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IGBwdGR1bXBfY2hlY2tfd3hgIGlzIHVzZWQgb3Igd2hlcmUgaXRzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBpbnRlbnRpb24gaXMgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24gYW5kIHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzozNC40MjY5NDEzNTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTkxNDY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX2NoZWNrX3d4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMzAtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMzItXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNS0jaWZkZWYgQ09ORklHX0FSTV9ERUJVR19XWFxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjM2OiNkZWZpbmUgYXJtX2RlYnVnX2NoZWNrd3goKSBwdGR1bXBfY2hlY2tfd3goKVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTM3LSNlbHNlXFxuLS1cXG5hcmNoL2FybS9tbS9kdW1wLmM9NDQ3PXN0YXRpYyBzdHJ1Y3QgcHRkdW1wX2luZm8ga2VybmVsX3B0ZHVtcF9pbmZvID0ge1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1Mi1cXG5hcmNoL2FybS9tbS9kdW1wLmM6NDUzOnZvaWQgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuYXJjaC9hcm0vbW0vZHVtcC5jLTQ1NC17XFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTMzND1zdGF0aWMgc3RydWN0IHB0ZHVtcF9pbmZvIGtlcm5lbF9wdGR1bXBfaW5mbyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMzNy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMzODpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzM5LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9wZ3RhYmxlX2NvbXBsZXRlX21hc2sodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzY3LVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzY4OmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zNjkte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYz0zNTM9c3RhdGljIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkX21tX2luZm8gKnBpbmZvKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzUtXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzozNzY6Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Ny17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTc1PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODEtXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjE4Mjpib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0xODMte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTM0PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzE9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMyOmJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMzMtXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaD0zND1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zNi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfV1gpKVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mzc6XFx0XFx0cHRkdW1wX2NoZWNrX3d4KCk7XFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zOC19XFxuLS1cXG5tbS9wdGR1bXAuYz0xOTM9c3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9wdGR1bXAuYy0xOTQte1xcbm1tL3B0ZHVtcC5jOjE5NTpcXHRpZiAocHRkdW1wX2NoZWNrX3d4KCkpXFxubW0vcHRkdW1wLmMtMTk2LVxcdFxcdHNlcV9wdXRzKG0sIFxcXCJTVUNDRVNTXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6MzkuOTQ2MDkzNDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTAxNTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJvb3QtVGltZSBSZWFkLU9ubHkgRGF0YSBDaGVjayoqXG5cblJpZ2h0LCBzbyBgZGVidWdfY2hlY2t3eGAgaXMgaW52b2tlZCBieSBgbWFya19yb2RhdGFfcm9gLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGEgc2FuaXR5IGNoZWNrIGVhcmx5IG9uLCB0eXBpY2FsbHkgYXQgYm9vdCwgdG8gdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgcmVhZC1vbmx5IGRhdGEuIEJ1dCB3aGF0J3Mgc2xpZ2h0bHkgdW51c3VhbCBpcyB0aGF0IGBjaGVja193eF9zaG93YCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vcHRkdW1wLmNgLiBUaGF0J3MgYSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlLiBXaHkgd291bGQgYSByZWFkLW9ubHkgZGF0YSBpbnRlZ3JpdHkgY2hlY2ssIHdoaWNoLCBJIHByZXN1bWUsIGlzIHJlbGF0aXZlbHkgc3RhdGljIGF0IHRoYXQgcG9pbnQsIHJlc2lkZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgY2hlY2tfd3hfc2hvd2AgaXMgdXNlZC4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBmb3IgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJseSByZXZlYWwgc29tZXRoaW5nIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNoZWNrIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0ODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOToxNzo0NC4wMjExMTE2NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTk3NTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja193eF9zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xOTItXFxubW0vcHRkdW1wLmM6MTkzOnN0YXRpYyBpbnQgY2hlY2tfd3hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vcHRkdW1wLmMtMTk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NDQuMzMxMTI1MDY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzk4OTg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgYXJvdW5kIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG1tL3B0ZHVtcC5jYCBhbmQgYGNoZWNrX3d4X3Nob3dgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9wdGR1bXAuY2AsIG5hdHVyYWxseSBncmF2aXRhdGluZyB0b3dhcmRzIHRoZSBgY2hlY2tfd3hfc2hvd2AgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRlY2lkaW5nIHdoYXQncyBkaXNwbGF5ZWQgb3IgaGlkZGVuLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIG9yIHByb3RlY3Rpb24gaW4gdGhlIHN5c3RlbS4gVGhlIGZpbGUncyBuYW1lIGl0c2VsZiBzdHJvbmdseSBzdWdnZXN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLCBzbyB0aGUgY29udGV4dCBpcyBwcmV0dHkgY2xlYXIuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGRldGVybWluZXMgaWYgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHNob3duLCB3aGF0IGNyaXRlcmlhIGFyZSB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgdGhpbmtpbmcgYWJvdXQ6XG4qICAgKipTZWN1cml0eSBDb250ZXh0Kio6IElzIHRoaXMgcmVsYXRlZCB0byByZXN0cmljdGluZyBhY2Nlc3MgdG8gY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBmb3Igc2VjdXJpdHkgcmVhc29ucywgcGVyaGFwcyByZWxhdGVkIHRvIFdeWCAoV3JpdGUgWE9SIEV4ZWN1dGUpIHByb3RlY3Rpb25zP1xuKiAgICoqRGVidWdnaW5nIFRvb2xzKio6IENvdWxkIGl0IGJlIGEgZGVidWdnaW5nIGFpZCwgYWxsb3dpbmcgY2VydGFpbiBtZW1vcnkgc3RhdGVzIHRvIGJlIHNob3duIG9ubHkgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucz9cbiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbioqOiBEb2VzIGl0IGZpbHRlciBvdXQgaW5mb3JtYXRpb24gdG8gcmVkdWNlIG92ZXJoZWFkIGR1cmluZyBhIHB0ZHVtcCwgb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/XG4qICAgKipFcnJvciBEZXRlY3Rpb24qKjogUGVyaGFwcyBpdCdzIGEgZGlhZ25vc3RpYyB0b29sLCBmbGFnZ2luZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG1hcHBpbmdzLlxuKiAgICoqUmFjZSBDb25kaXRpb25zKio6IENvdWxkIHRoZXJlIGJlIGEgcmFjZSBjb25kaXRpb24gdGhhdCBhbGxvd3MgbWVtb3J5IHRvIGJlIGRpc3BsYXllZCB1bmRlciBjZXJ0YWluIHJhcmUgY29uZGl0aW9ucz9cblxuSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgY29tcGFyaXNvbnMgYWdhaW5zdCBmbGFncyBvciBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBhbmQgY2FsbHMgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8ga2VlcCBhIHNoYXJwIGV5ZSBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NDguNTExMDI1NzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3B0ZHVtcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzdC1cXHUwMDNlbm90ZV9wYWdlX2ZsdXNoKHN0KTtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0c3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcXG4gMTk2OlxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJTVUNDRVNTXFxcXG5cXFwiKTtcXG4gMTk3OlxcdFxcdGVsc2VcXG4gMTk4OlxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJGQUlMRURcXFxcblxcXCIpO1xcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyZXR1cm4gMDtcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0REVGSU5FX1NIT1dfQVRUUklCVVRFKGNoZWNrX3d4KTtcXG4gMjA0OlxcdFxcbiAyMDU6XFx0c3RhdGljIGludCBwdGR1bXBfZGVidWdmc19pbml0KHZvaWQpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjaGVja193eF9wYWdlc1xcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZjaGVja193eF9mb3BzKTtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjE3OjQ4LjUxMTE0NTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NTc3MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbGl6aW5nIHRoZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBjaGVja193eF9wYWdlc2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZGVidWdmc2AsIHRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBjb25maXJtaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0LiBMZXQncyBtYWtlIHRoaXMgZmluYWwuXG5cbkknbSBjb25maWRlbnQgaW4gY2FsbGluZyB0aGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gSXQncyBhZGRyZXNzaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgcHRkdW1wYCwgc3luY2hyb25pemluZyB0aGVtIHdpdGggYSByZWFkIGxvY2ssIGFuZCB0aGUgd3JpdGUgbG9jaywgcmVzcGVjdGl2ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBhZmZlY3RzIGNvZGUgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBjb3JlIGtlcm5lbC5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSdsbCBmb2N1cyBvbiBhcmUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHNldF9tZW1vcnlfcm94YC4gQW5kIG9mIGNvdXJzZSwgd2UnbGwgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AgdG8gbWFrZSB0aGlzIGFsbCBhY2Nlc3NpYmxlLiBJIGZlZWwgZ29vZCBhYm91dCB0aGVzZSBjb25jbHVzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MjQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MTc6NTUuMjU2OTE5MzI1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MDIxODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYnVnICh1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgcmVhZCBsb2NrIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHRvIHN5bmNocm9uaXplIHdpdGggYHB0ZHVtcGAgd2hpY2ggdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYnVnICh1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgcmVhZCBsb2NrIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHRvIHN5bmNocm9uaXplIHdpdGggYHB0ZHVtcGAgd2hpY2ggdGFrZXMgdGhlIHdyaXRlIGxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[1] Phase: Succeeded StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 09:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 09:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2] Phase: Succeeded StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 09:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 09:18:08 +0000 UTC FinishedAt: 2026-07-11 09:18:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7shgt/series-workflow7shgt-convert-artifact-3852339974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 09:18:20 +0000 UTC FinishedAt: 2026-07-11 09:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 09:18:20 +0000 UTC FinishedAt: 2026-07-11 09:50:34 +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:*3bc30c9e-875a-43bb-8f8b-88b9962039bb,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-workflow7shgt/series-workflow7shgt-convert-artifact-3852339974/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": "23b7526e-222d-4f7d-ba20-adda3f0aa74d", "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-workflow7shgt/series-workflow7shgt-build-action-635391644/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 09:18:20 +0000 UTC FinishedAt: 2026-07-11 09:50:11 +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:*3bc30c9e-875a-43bb-8f8b-88b9962039bb,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-workflow7shgt/series-workflow7shgt-convert-artifact-3852339974/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": "23b7526e-222d-4f7d-ba20-adda3f0aa74d", "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-workflow7shgt/series-workflow7shgt-build-action-635391644/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 09:50:34 +0000 UTC FinishedAt: 2026-07-11 09:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 09:50:34 +0000 UTC FinishedAt: 2026-07-11 09:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 09:50:34 +0000 UTC FinishedAt: 2026-07-11 09:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 09:50:34 +0000 UTC FinishedAt: 2026-07-11 09:50:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7shgt/series-workflow7shgt-convert-artifact-2719369049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 09:50:44 +0000 UTC FinishedAt: 2026-07-11 09:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 09:50:44 +0000 UTC FinishedAt: 2026-07-11 09:52:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23b7526e-222d-4f7d-ba20-adda3f0aa74d,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-workflow7shgt/series-workflow7shgt-build-action-635391644/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-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 09:52:51 +0000 UTC FinishedAt: 2026-07-11 09:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 09:52:51 +0000 UTC FinishedAt: 2026-07-11 09:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 09:52:51 +0000 UTC FinishedAt: 2026-07-11 10:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 09:52:51 +0000 UTC FinishedAt: 2026-07-11 10:29:35 +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:*3bc30c9e-875a-43bb-8f8b-88b9962039bb,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-workflow7shgt/series-workflow7shgt-convert-artifact-2719369049/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": "c3ca5cf2-fd38-46f4-a529-41ebf9234ee6", "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-workflow7shgt/series-workflow7shgt-build-action-787311541/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 09:52:51 +0000 UTC FinishedAt: 2026-07-11 10:28:46 +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:*3bc30c9e-875a-43bb-8f8b-88b9962039bb,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-workflow7shgt/series-workflow7shgt-convert-artifact-2719369049/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": "c3ca5cf2-fd38-46f4-a529-41ebf9234ee6", "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-workflow7shgt/series-workflow7shgt-build-action-787311541/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 10:29:35 +0000 UTC FinishedAt: 2026-07-11 10:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 10:29:35 +0000 UTC FinishedAt: 2026-07-11 10:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 10:29:35 +0000 UTC FinishedAt: 2026-07-11 10:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 10:29:35 +0000 UTC FinishedAt: 2026-07-11 10:31:39 +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:*c3ca5cf2-fd38-46f4-a529-41ebf9234ee6,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-workflow7shgt/series-workflow7shgt-build-action-787311541/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-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},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:*23b7526e-222d-4f7d-ba20-adda3f0aa74d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3ca5cf2-fd38-46f4-a529-41ebf9234ee6,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-workflow7shgt/series-workflow7shgt-build-action-635391644/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-workflow7shgt/series-workflow7shgt-build-action-787311541/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 10:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 10:31:57 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},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-workflow7shgt/series-workflow7shgt-convert-artifact-2761914190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 10:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 10:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 10:31:49 +0000 UTC FinishedAt: 2026-07-11 10:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 10:31:59 +0000 UTC FinishedAt: 2026-07-11 13:38:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7shgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["cpa_collapse_large_pages","ptdump_walk_pgd","set_memory_rox"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"22b07a8e-ddf0-4c5d-abd4-e52d6e3e7c41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 10:31:59 +0000 UTC FinishedAt: 2026-07-11 13:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23b7526e-222d-4f7d-ba20-adda3f0aa74d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3ca5cf2-fd38-46f4-a529-41ebf9234ee6,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-workflow7shgt/series-workflow7shgt-build-action-635391644/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-workflow7shgt/series-workflow7shgt-build-action-787311541/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-workflow7shgt/series-workflow7shgt-convert-artifact-2761914190/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,}