Name: series-workflowv99j7 Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[0] Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:46:50 +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": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "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": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "e41cba06-8317-4ded-9e38-a2ab14824946" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_fastopen_subflow_synack_set_params", "mptcp_subflow_init_cookie_req", "mptcp_pm_announced_alloc", "mptcp_pm_destroy", "mptcp_userspace_pm_get_local_id", "mptcp_pm_nl_announce_doit", "mptcp_pm_nl_subflow_create_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2MmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDttcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTc5OTRmYzBhYjNmYjgwNjdkNTMwNGQ1NmExNjQ5OGNlZGY1YmUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTo0NToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvZmFzdG9wZW4uYyBiL25ldC9tcHRjcC9mYXN0b3Blbi5jXG5pbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL2Zhc3RvcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9mYXN0b3Blbi5jXG5AQCAtMjQsMTIgJiM0MzsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZlxuIFx0c2sgPSBzdWJmbG93LVx1MDAzZWNvbm47XG4gXHR0cCA9IHRjcF9zayhzc2spO1xuIFxuLVx0c3ViZmxvdy1cdTAwM2Vpc19tcHRmbyA9IDE7XG4tXG4mIzQzO1x0LyogQSB2YWxpZCBURk8gY29va2llIGRvZXMgbm90IGd1YXJhbnRlZSBTWU4gZGF0YS4gKi9cbiBcdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnNzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNrYikpXG4mIzQzO1x0aWYgKCFza2IpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzdWJmbG93LVx1MDAzZWlzX21wdGZvID0gMTtcbiYjNDM7XG4gXHQvKiBkZXF1ZXVlIHRoZSBza2IgZnJvbSBzayByZWNlaXZlIHF1ZXVlICovXG4gXHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZzc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXHRza2JfZXh0X3Jlc2V0KHNrYik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYTguLjEwNTdkNTAwNTc3YjAgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avb3B0aW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5AQCAtNTAsNiAmIzQzOzUwLDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuJiM0MztcdFx0LyogT25seSB0aGUgTVBDICYjNDM7IEFDSyBjYW4gYmUgdXNlZCB3aXRoIGEgUk1fQUREUiAqL1xuJiM0MztcdFx0aWYgKHN1Ym9wdCA9PSBPUFRJT05fTVBUQ1BfTVBDX0FDSykge1xuJiM0MztcdFx0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zICE9IDApIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBDZnIgUkZDIDg2ODQgU2VjdGlvbiAzLjMuMDpcbiBcdFx0ICogSWYgYSBjaGVja3N1bSBpcyBwcmVzZW50IGJ1dCBpdHMgdXNlIGhhZFxuIFx0XHQgKiBub3QgYmVlbiBuZWdvdGlhdGVkIGluIHRoZSBNUF9DQVBBQkxFIGhhbmRzaGFrZSwgdGhlIHJlY2VpdmVyIE1VU1RcbkBAIC0xMjIsNiAmIzQzOzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9NUEpfU1lOKSB7XG4gXHRcdFx0bXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX01QSl9TWU47XG4gXHRcdFx0bXBfb3B0LVx1MDAzZWJhY2t1cCA9ICpwdHImIzQzOyYjNDM7IFx1MDAyNiBNUFRDUE9QVF9CQUNLVVA7XG5AQCAtMTUzLDYgJiM0MzsxNjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9EU1M6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfQUREX0FERFIgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHxcbiYjNDM7XHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBSUwpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHByX2RlYnVnKFwmIzM0O0RTU1xcblwmIzM0Oyk7XG4gXHRcdHB0ciYjNDM7JiM0Mzs7XG4gXG5AQCAtMTg4LDggJiM0MzsyMDksMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjAgY2hlY2tzIGxhdGVyIGluIHN1YmZsb3dfZGF0YV9yZWFkeVxuIFx0XHQgKi9cbiBcdFx0aWYgKG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICYjNDM7IFRDUE9MRU5fTVBUQ1BfRFNTX0NIRUNLU1VNKVxuJiM0MztcdFx0ICAgIG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgJiM0MzsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcbiYjNDM7XHRcdFx0bXBfb3B0LVx1MDAzZWRzbjY0ID0gMDtcbiYjNDM7XHRcdFx0bXBfb3B0LVx1MDAzZXVzZV9tYXAgPSAwO1xuJiM0MztcdFx0XHRtcF9vcHQtXHUwMDNlYWNrNjQgPSAwO1xuJiM0MztcdFx0XHRtcF9vcHQtXHUwMDNldXNlX2FjayA9IDA7XG4mIzQzO1x0XHRcdG1wX29wdC1cdTAwM2VkYXRhX2ZpbiA9IDA7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9EU1M7XG4gXHRcdGlmIChtcF9vcHQtXHUwMDNldXNlX2Fjaykge1xuQEAgLTIzNCw2ICYjNDM7MjYxLDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfQUREX0FERFI6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JNX0FERFIgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRtcF9vcHQtXHUwMDNlZWNobyA9ICgqcHRyJiM0MzsmIzQzOykgXHUwMDI2IE1QVENQX0FERFJfRUNITztcbiBcdFx0aWYgKCFtcF9vcHQtXHUwMDNlZWNobykge1xuIFx0XHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fFxuQEAgLTI5Myw2ICYjNDM7MzI2LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfUk1fQUREUjpcbiYjNDM7XHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4mIzQzO1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9NUENfQUNLIHxcbiYjNDM7XHRcdFx0XHRcdCAgICBPUFRJT05TX01QVENQX01QSiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgXHUwMDNjIFRDUE9MRU5fTVBUQ1BfUk1fQUREUl9CQVNFICYjNDM7IDEgfHxcbiBcdFx0ICAgIG9wc2l6ZSBcdTAwM2UgVENQT0xFTl9NUFRDUF9STV9BRERSX0JBU0UgJiM0MzsgTVBUQ1BfUk1fSURTX01BWClcbiBcdFx0XHRicmVhaztcbkBAIC0zMDcsNiAmIzQzOzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX1BSSU86XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX01QSiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JNX0FERFIpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9QUklPKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTMxNiw2ICYjNDM7MzY0LDExIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfTVBfRkFTVENMT1NFOlxuJiM0MztcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbiYjNDM7XHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQVNUQ0xPU0UpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMzI3LDYgJiM0MzszODAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9SU1Q6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfRkFJTCB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSkpICE9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1JTVClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zNDIsNiAmIzQzOzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0ZBSUw6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JTVCkpICE9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBSUwpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTQwMCw3ICYjNDM7MTQ2Myw3IEBAIHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4gXHQgKiAgUk0gICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiBcdCAqICBQUklPIHwgIFggICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuIFx0ICogIEZBSUwgfCAgWCAgIHwgIFggICB8ICBDICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXwtLS0tLS18XG4tXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiYjNDM7XHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiBcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxuIFx0ICogLS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmNcbkBAIC0zODAsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBlbnRyeS1cdTAwM2Vzb2NrO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0dW5zaWduZWQgaW50IHRpbWVvdXQgPSAwO1xuJiM0MztcdGJvb2wgcmV0cmFuc21pdDtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O21zaz0lcFxcblwmIzM0OywgbXNrKTtcbiBcbkBAIC00MTIsMTQgJiM0Mzs0MTMsMTUgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0XHRlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzIFx1MDAzYyBBRERfQUREUl9SRVRSQU5TX01BWClcbiYjNDM7XHRyZXRyYW5zbWl0ID0gZW50cnktXHUwMDNlcmV0cmFuc190aW1lcyBcdTAwM2MgQUREX0FERFJfUkVUUkFOU19NQVg7XG4mIzQzO1x0aWYgKHJldHJhbnNtaXQpXG4gXHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSBlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzO1xuIFx0ZWxzZVxuIFx0XHR0aW1lb3V0ID0gMDtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxuJiM0MztcdGlmICghcmV0cmFuc21pdClcbiBcdFx0bXB0Y3BfcG1fc3ViZmxvd19lc3RhYmxpc2hlZChtc2spO1xuIFxuIG91dDpcbkBAIC00NDEsNiAmIzQzOzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbiYjNDM7XHRpZiAobXNrLVx1MDAzZXBtLnN0YXR1cyBcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdGFkZF9lbnRyeSA9IG1wdGNwX3BtX2Fubm91bmNlZF9sb29rdXAobXNrLCBhZGRyKTtcbiBcdGlmIChhZGRfZW50cnkpIHtcbiBcdFx0aWYgKFdBUk5fT05fT05DRShtcHRjcF9wbV9pc19rZXJuZWwobXNrKSkpXG5AQCAtMTE0MywxMCAmIzQzOzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcbiB2b2lkIG1wdGNwX3BtX2Rlc3Ryb3koc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiYjNDM7XHRtc2stXHUwMDNlcG0uc3RhdHVzIHw9IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzQzO1xuIFx0bXB0Y3BfcG1fZnJlZV9hbm5vdW5jZWRfbGlzdChtc2spO1xuIFxuLVx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKVxuLVx0XHRtcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTtcbiYjNDM7XHQvKiBGcmVlIHRoZSB1c2Vyc3BhY2UgbG9jYWwgYWRkcmVzcyBsaXN0IHVuY29uZGl0aW9uYWxseTogdGhlIHNvY2tldFxuJiM0MztcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXG4mIzQzO1x0ICovXG4mIzQzO1x0bXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7XG4gfVxuIFxuIHZvaWQgbXB0Y3BfcG1fZGF0YV9yZXNldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuaW5kZXggOTQ1YWE1YWZjMmRkZi4uMjIwM2NjMmQyNzQ4NSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5AQCAtNTQsNiAmIzQzOzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0Yml0bWFwX3plcm8oaWRfYml0bWFwLCBNUFRDUF9QTV9NQVhfQUREUl9JRCAmIzQzOyAxKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2VwbS5zdGF0dXMgXHUwMDI2IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gYXBwZW5kX2VycjtcbiYjNDM7XHR9XG4gXHRtcHRjcF9mb3JfZWFjaF91c2Vyc3BhY2VfcG1fYWRkcihtc2ssIGUpIHtcbiBcdFx0YWRkcl9tYXRjaCA9IG1wdGNwX2FkZHJlc3Nlc19lcXVhbChcdTAwMjZlLVx1MDAzZWFkZHIsIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIHRydWUpO1xuIFx0XHRpZiAoYWRkcl9tYXRjaCBcdTAwMjZcdTAwMjYgZW50cnktXHUwMDNlYWRkci5pZCA9PSAwIFx1MDAyNlx1MDAyNiBuZWVkc19pZClcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBjYTY0NGVjNTNlZWRiLi43YzgxODBkOGQ1ZWZmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMTQ5LDYgJiM0MzsxNDksMTIgQEAgc3RydWN0IHNvY2sgKl9fbXB0Y3Bfbm1wY19zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHQvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5XG4mIzQzO1x0ICogbXB0Y3BfYm9ycm93X2Z3ZG1lbSgpLCBldmVuIGJlZm9yZSBzZXR0aW5nIHRoZSBkZXN0cnVjdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRlc3RydWN0b3IpXG4mIzQzO1x0XHRza19tZW1fcmVjbGFpbShzayk7XG4mIzQzO1xuIFx0c2tfZHJvcHNfc2tiYWRkKHNrLCBza2IpO1xuIFx0X19rZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uMWI4MGYyZDZlYzVhMiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gXHRcdFx0XHQgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gI2RlZmluZSBPUFRJT05TX01QVENQX01QSlx0KE9QVElPTl9NUFRDUF9NUEpfU1lOIHwgT1BUSU9OX01QVENQX01QSl9TWU5BQ0sgfCBcXFxuIFx0XHRcdFx0IE9QVElPTl9NUFRDUF9NUEpfQUNLKVxuJiM0MzsjZGVmaW5lIE9QVElPTlNfTVBUQ1BfRFNTXHQoT1BUSU9OX01QVENQX0RTUyB8IE9QVElPTl9NUFRDUF9DU1VNUkVRRClcbiBcbiAvKiBNUFRDUCBvcHRpb24gc3VidHlwZXMgKi9cbiAjZGVmaW5lIE1QVENQT1BUX01QX0NBUEFCTEVcdDBcbkBAIC0xODksOSAmIzQzOzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7XG4gXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcbiBcdE1QVENQX1BNX1NVQkZMT1dfRVNUQUJMSVNIRUQsXG4gXHRNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELFx0LyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBFU1RBQkxJU0hFRCBldmVudCAqL1xuLVx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzXG4tXHRcdFx0XHRcdCAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwXG4tXHRcdFx0XHRcdCAqL1xuJiM0MztcdE1QVENQX1BNX01QQ19FTkRQT0lOVF9BQ0NPVU5URUQsIC8qIHBlcnNpc3RlbnQgc3RhdHVzLCBzZXQgYWZ0ZXIgTVBDIGxvY2FsIGFkZHJlc3MgaXNcbiYjNDM7XHRcdFx0XHRcdCAgKiBhY2NvdW50ZWQgaW50IGlkX2F2YWlsX2JpdG1hcFxuJiM0MztcdFx0XHRcdFx0ICAqL1xuJiM0MztcdE1QVENQX1BNX0RFU1RST1lJTkcsXHRcdC8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqL1xuIH07XG4gXG4gZW51bSBtcHRjcF9wbV90eXBlIHtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggOGUzODY4OTljZWI5OC4uZTFmMjBmZjhmZGI0MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC0xNzQsOCAmIzQzOzE3NCw2IEBAIHN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFxuIFx0XHRpZiAodW5saWtlbHkobGlzdGVuZXItXHUwMDNlcG1fbGlzdGVuZXIpKVxuIFx0XHRcdHJldHVybiBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHJlcSwgc2tiKTtcbi1cdFx0aWYgKG9wdF9tcF9qb2luKVxuLVx0XHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIGlmIChvcHRfbXBfam9pbikge1xuIFx0XHRTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTlNZTlJYKTtcbiBcbkBAIC0yNzcsOSAmIzQzOzI3NSw2IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRvcHRfbXBfY2FwYWJsZSA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XG4gXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XG4tXHRpZiAob3B0X21wX2NhcGFibGUgXHUwMDI2XHUwMDI2IG9wdF9tcF9qb2luKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggYzBhZWZmZDVjYjcxNC4uN2RjOTFmYWM0OTE3ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTU4NCw3ICYjNDM7NTg0LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxuIFx0XHRtdiBcJiMzNDskdG1wZmlsZVwmIzM0OyBcJiMzNDskb3V0XCYjMzQ7XG4gXHRcdHRtcGZpbGU9XCYjMzQ7XCYjMzQ7XG4gXHRmaVxuLVx0Y21wIC1sIFwmIzM0OyRpblwmIzM0OyBcJiMzNDskb3V0XCYjMzQ7IHwgd2hpbGUgcmVhZCAtciBpIGEgYjsgZG9cbiYjNDM7XHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xuIFx0XHRsb2NhbCBzdW09JCgoMCR7YX0gJiM0MzsgMCR7Yn0pKVxuIFx0XHRpZiBbICRjaGVja19pbnZlcnQgLWVxIDAgXSB8fCBbICRzdW0gLW5lICQoKDB4ZmYpKSBdOyB0aGVuXG4gXHRcdFx0ZmFpbF90ZXN0IFwmIzM0OyR3aGF0IGRvZXMgbm90IG1hdGNoIChpbiwgb3V0KTpcJiMzNDtcbkBAIC01OTUsNyAmIzQzOzU5NSw3IEBAIGNoZWNrX3RyYW5zZmVyKClcbiBcdFx0ZWxzZVxuIFx0XHRcdHByaW50X2luZm8gXCYjMzQ7JHdoYXQgaGFzIGludmVydGVkIGJ5dGUgYXQgJHtpfVwmIzM0O1xuIFx0XHRmaVxuLVx0ZG9uZVxuJiM0MztcdGRvbmUgXHUwMDNjIFx1MDAzYyhjbXAgLWwgXCYjMzQ7JGluXCYjMzQ7IFwmIzM0OyRvdXRcJiMzNDspXG4gXG4gXHRyZXR1cm4gMFxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExNzk5NGZjMGFiM2ZiODA2N2Q1MzA0ZDU2YTE2NDk4Y2VkZjViZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL2Zhc3RvcGVuLmMgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uYwppbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvZmFzdG9wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uYwpAQCAtMjQsMTIgJiM0MzsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZgogCXNrID0gc3ViZmxvdy0mZ3Q7Y29ubjsKIAl0cCA9IHRjcF9zayhzc2spOwogCi0Jc3ViZmxvdy0mZ3Q7aXNfbXB0Zm8gPSAxOwotCiYjNDM7CS8qIEEgdmFsaWQgVEZPIGNvb2tpZSBkb2VzIG5vdCBndWFyYW50ZWUgU1lOIGRhdGEuICovCiAJc2tiID0gc2tiX3BlZWsoJmFtcDtzc2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwotCWlmIChXQVJOX09OX09OQ0UoIXNrYikpCiYjNDM7CWlmICghc2tiKQogCQlyZXR1cm47CiAKJiM0MzsJc3ViZmxvdy0mZ3Q7aXNfbXB0Zm8gPSAxOwomIzQzOwogCS8qIGRlcXVldWUgdGhlIHNrYiBmcm9tIHNrIHJlY2VpdmUgcXVldWUgKi8KIAlfX3NrYl91bmxpbmsoc2tiLCAmYW1wO3Nzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJc2tiX2V4dF9yZXNldChza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggYzY2NDAyM2QzN2JhOC4uMTA1N2Q1MDA1NzdiMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC01MCw2ICYjNDM7NTAsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQl9CiAJCX0KIAomIzQzOwkJLyogT25seSB0aGUgTVBDICYjNDM7IEFDSyBjYW4gYmUgdXNlZCB3aXRoIGEgUk1fQUREUiAqLwomIzQzOwkJaWYgKHN1Ym9wdCA9PSBPUFRJT05fTVBUQ1BfTVBDX0FDSykgewomIzQzOwkJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH5PUFRJT05fTVBUQ1BfUk1fQUREUikgIT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9IGVsc2UgaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAhPSAwKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIENmciBSRkMgODY4NCBTZWN0aW9uIDMuMy4wOgogCQkgKiBJZiBhIGNoZWNrc3VtIGlzIHByZXNlbnQgYnV0IGl0cyB1c2UgaGFkCiAJCSAqIG5vdCBiZWVuIG5lZ290aWF0ZWQgaW4gdGhlIE1QX0NBUEFCTEUgaGFuZHNoYWtlLCB0aGUgcmVjZWl2ZXIgTVVTVApAQCAtMTIyLDYgJiM0MzsxMzAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9NUF9KT0lOOgomIzQzOwkJLyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi8KJiM0MzsJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH4oT1BUSU9OX01QVENQX1JNX0FERFIgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX01QSl9TWU4pIHsKIAkJCW1wX29wdC0mZ3Q7c3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfTVBKX1NZTjsKIAkJCW1wX29wdC0mZ3Q7YmFja3VwID0gKnB0ciYjNDM7JiM0MzsgJmFtcDsgTVBUQ1BPUFRfQkFDS1VQOwpAQCAtMTUzLDYgJiM0MzsxNjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9EU1M6CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05fTVBUQ1BfQUREX0FERFIgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUFJJTyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0ZBSUwpKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlwcl9kZWJ1ZygmIzM0O0RTU1xuJiMzNDspOwogCQlwdHImIzQzOyYjNDM7OwogCkBAIC0xODgsOCAmIzQzOzIwOSwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICogUkZDIDg2ODQgU2VjdGlvbiAzLjMuMCBjaGVja3MgbGF0ZXIgaW4gc3ViZmxvd19kYXRhX3JlYWR5CiAJCSAqLwogCQlpZiAob3BzaXplICE9IGV4cGVjdGVkX29wc2l6ZSAmYW1wOyZhbXA7Ci0JCSAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICYjNDM7IFRDUE9MRU5fTVBUQ1BfRFNTX0NIRUNLU1VNKQomIzQzOwkJICAgIG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgJiM0MzsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHsKJiM0MzsJCQltcF9vcHQtJmd0O2RzbjY0ID0gMDsKJiM0MzsJCQltcF9vcHQtJmd0O3VzZV9tYXAgPSAwOwomIzQzOwkJCW1wX29wdC0mZ3Q7YWNrNjQgPSAwOwomIzQzOwkJCW1wX29wdC0mZ3Q7dXNlX2FjayA9IDA7CiYjNDM7CQkJbXBfb3B0LSZndDtkYXRhX2ZpbiA9IDA7CiAJCQlicmVhazsKJiM0MzsJCX0KIAogCQltcF9vcHQtJmd0O3N1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX0RTUzsKIAkJaWYgKG1wX29wdC0mZ3Q7dXNlX2FjaykgewpAQCAtMjM0LDYgJiM0MzsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9BRERfQUREUjoKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTlNfTVBUQ1BfRFNTIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQltcF9vcHQtJmd0O2VjaG8gPSAoKnB0ciYjNDM7JiM0MzspICZhbXA7IE1QVENQX0FERFJfRUNITzsKIAkJaWYgKCFtcF9vcHQtJmd0O2VjaG8pIHsKIAkJCWlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fApAQCAtMjkzLDYgJiM0MzszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9STV9BRERSOgomIzQzOwkJLyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi8KJiM0MzsJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH4oT1BUSU9OX01QVENQX01QQ19BQ0sgfAomIzQzOwkJCQkJICAgIE9QVElPTlNfTVBUQ1BfTVBKIHwKJiM0MzsJCQkJCSAgICBPUFRJT05TX01QVENQX0RTUyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChvcHNpemUgJmx0OyBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSAmIzQzOyAxIHx8CiAJCSAgICBvcHNpemUgJmd0OyBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSAmIzQzOyBNUFRDUF9STV9JRFNfTUFYKQogCQkJYnJlYWs7CkBAIC0zMDcsNiAmIzQzOzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX1BSSU86CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05TX01QVENQX01QSiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OU19NUFRDUF9EU1MgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1JNX0FERFIpKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfUFJJTykKIAkJCWJyZWFrOwogCkBAIC0zMTYsNiAmIzQzOzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRToKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTlNfTVBUQ1BfRFNTIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBU1RDTE9TRSkKIAkJCWJyZWFrOwogCkBAIC0zMjcsNiAmIzQzOzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX1JTVDoKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTl9NUFRDUF9GQUlMIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1JTVCkKIAkJCWJyZWFrOwogCkBAIC0zNDIsNiAmIzQzOzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX0ZBSUw6CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05TX01QVENQX0RTUyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1JTVCkpICE9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQUlMKQogCQkJYnJlYWs7CiAKQEAgLTE0MDAsNyAmIzQzOzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCSAqICBSTSAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwgIFAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfAogCSAqICBQUklPIHwgIFggICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfAogCSAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfAotCSAqICBGQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8LS0tLS0tfAomIzQzOwkgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXwKIAkgKiAgUlNUICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBPICAgfCAgTyAgIHwKIAkgKiAtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uYwppbmRleCA2YWZkMzlhZWExMTBhLi42NGExMjM2YWFiZWU5IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG0uYwpAQCAtMzgwLDYgJiM0MzszODAsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGVudHJ5LSZndDtzb2NrOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDA7CiYjNDM7CWJvb2wgcmV0cmFuc21pdDsKIAogCXByX2RlYnVnKCYjMzQ7bXNrPSVwXG4mIzM0OywgbXNrKTsKIApAQCAtNDEyLDE0ICYjNDM7NDEzLDE1IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAkJZW50cnktJmd0O3JldHJhbnNfdGltZXMmIzQzOyYjNDM7OwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7cmV0cmFuc190aW1lcyAmbHQ7IEFERF9BRERSX1JFVFJBTlNfTUFYKQomIzQzOwlyZXRyYW5zbWl0ID0gZW50cnktJmd0O3JldHJhbnNfdGltZXMgJmx0OyBBRERfQUREUl9SRVRSQU5TX01BWDsKJiM0MzsJaWYgKHJldHJhbnNtaXQpCiAJCXRpbWVvdXQgJmx0OyZsdDs9IGVudHJ5LSZndDtyZXRyYW5zX3RpbWVzOwogCWVsc2UKIAkJdGltZW91dCA9IDA7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO21zay0mZ3Q7cG0ubG9jayk7CiAKLQlpZiAoZW50cnktJmd0O3JldHJhbnNfdGltZXMgPT0gQUREX0FERFJfUkVUUkFOU19NQVgpCiYjNDM7CWlmICghcmV0cmFuc21pdCkKIAkJbXB0Y3BfcG1fc3ViZmxvd19lc3RhYmxpc2hlZChtc2spOwogCiBvdXQ6CkBAIC00NDEsNiAmIzQzOzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bXNrLSZndDtwbS5sb2NrKTsKIAomIzQzOwlpZiAobXNrLSZndDtwbS5zdGF0dXMgJmFtcDsgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWFkZF9lbnRyeSA9IG1wdGNwX3BtX2Fubm91bmNlZF9sb29rdXAobXNrLCBhZGRyKTsKIAlpZiAoYWRkX2VudHJ5KSB7CiAJCWlmIChXQVJOX09OX09OQ0UobXB0Y3BfcG1faXNfa2VybmVsKG1zaykpKQpAQCAtMTE0MywxMCAmIzQzOzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAogdm9pZCBtcHRjcF9wbV9kZXN0cm95KHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO21zay0mZ3Q7cG0ubG9jayk7CiYjNDM7CW1zay0mZ3Q7cG0uc3RhdHVzIHw9IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwomIzQzOwogCW1wdGNwX3BtX2ZyZWVfYW5ub3VuY2VkX2xpc3QobXNrKTsKIAotCWlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSkKLQkJbXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7CiYjNDM7CS8qIEZyZWUgdGhlIHVzZXJzcGFjZSBsb2NhbCBhZGRyZXNzIGxpc3QgdW5jb25kaXRpb25hbGx5OiB0aGUgc29ja2V0CiYjNDM7CSAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNCiYjNDM7CSAqLwomIzQzOwltcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTsKIH0KIAogdm9pZCBtcHRjcF9wbV9kYXRhX3Jlc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKaW5kZXggOTQ1YWE1YWZjMmRkZi4uMjIwM2NjMmQyNzQ4NSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwpAQCAtNTQsNiAmIzQzOzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCWJpdG1hcF96ZXJvKGlkX2JpdG1hcCwgTVBUQ1BfUE1fTUFYX0FERFJfSUQgJiM0MzsgMSk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwomIzQzOwlpZiAobXNrLSZndDtwbS5zdGF0dXMgJmFtcDsgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBhcHBlbmRfZXJyOwomIzQzOwl9CiAJbXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7CiAJCWFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoJmFtcDtlLSZndDthZGRyLCAmYW1wO2VudHJ5LSZndDthZGRyLCB0cnVlKTsKIAkJaWYgKGFkZHJfbWF0Y2ggJmFtcDsmYW1wOyBlbnRyeS0mZ3Q7YWRkci5pZCA9PSAwICZhbXA7JmFtcDsgbmVlZHNfaWQpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjdjODE4MGQ4ZDVlZmYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0xNDksNiAmIzQzOzE0OSwxMiBAQCBzdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAKIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewomIzQzOwkvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5CiYjNDM7CSAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci4KJiM0MzsJICovCiYjNDM7CWlmICghc2tiLSZndDtkZXN0cnVjdG9yKQomIzQzOwkJc2tfbWVtX3JlY2xhaW0oc2spOwomIzQzOwogCXNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTsKIAlfX2tmcmVlX3NrYihza2IpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCA0YTJkNDBjZDdiMTMyLi4xYjgwZjJkNmVjNWEyIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAKIAkJCQkgT1BUSU9OX01QVENQX01QQ19BQ0spCiAjZGVmaW5lIE9QVElPTlNfTVBUQ1BfTVBKCShPUFRJT05fTVBUQ1BfTVBKX1NZTiB8IE9QVElPTl9NUFRDUF9NUEpfU1lOQUNLIHwgXAogCQkJCSBPUFRJT05fTVBUQ1BfTVBKX0FDSykKJiM0MzsjZGVmaW5lIE9QVElPTlNfTVBUQ1BfRFNTCShPUFRJT05fTVBUQ1BfRFNTIHwgT1BUSU9OX01QVENQX0NTVU1SRVFEKQogCiAvKiBNUFRDUCBvcHRpb24gc3VidHlwZXMgKi8KICNkZWZpbmUgTVBUQ1BPUFRfTVBfQ0FQQUJMRQkwCkBAIC0xODksOSAmIzQzOzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7CiAJTVBUQ1BfUE1fRVNUQUJMSVNIRUQsCiAJTVBUQ1BfUE1fU1VCRkxPV19FU1RBQkxJU0hFRCwKIAlNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELAkvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIEVTVEFCTElTSEVEIGV2ZW50ICovCi0JTVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzCi0JCQkJCSAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwCi0JCQkJCSAqLwomIzQzOwlNUFRDUF9QTV9NUENfRU5EUE9JTlRfQUNDT1VOVEVELCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzCiYjNDM7CQkJCQkgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXAKJiM0MzsJCQkJCSAgKi8KJiM0MzsJTVBUQ1BfUE1fREVTVFJPWUlORywJCS8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqLwogfTsKIAogZW51bSBtcHRjcF9wbV90eXBlIHsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IDhlMzg2ODk5Y2ViOTguLmUxZjIwZmY4ZmRiNDIgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtMTc0LDggJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAogCQlpZiAodW5saWtlbHkobGlzdGVuZXItJmd0O3BtX2xpc3RlbmVyKSkKIAkJCXJldHVybiBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHJlcSwgc2tiKTsKLQkJaWYgKG9wdF9tcF9qb2luKQotCQkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChvcHRfbXBfam9pbikgewogCQlTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTlNZTlJYKTsKIApAQCAtMjc3LDkgJiM0MzsyNzUsNiBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCiAJb3B0X21wX2NhcGFibGUgPSAhIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7CiAJb3B0X21wX2pvaW4gPSAhIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7Ci0JaWYgKG9wdF9tcF9jYXBhYmxlICZhbXA7JmFtcDsgb3B0X21wX2pvaW4pCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKG9wdF9tcF9jYXBhYmxlICZhbXA7JmFtcDsgbGlzdGVuZXItJmd0O3JlcXVlc3RfbXB0Y3ApIHsKIAkJaWYgKG1wX29wdC5zbmRyX2tleSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCmluZGV4IGMwYWVmZmQ1Y2I3MTQuLjdkYzkxZmFjNDkxN2UgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCkBAIC01ODQsNyAmIzQzOzU4NCw3IEBAIGNoZWNrX3RyYW5zZmVyKCkKIAkJbXYgJiMzNDskdG1wZmlsZSYjMzQ7ICYjMzQ7JG91dCYjMzQ7CiAJCXRtcGZpbGU9JiMzNDsmIzM0OwogCWZpCi0JY21wIC1sICYjMzQ7JGluJiMzNDsgJiMzNDskb3V0JiMzNDsgfCB3aGlsZSByZWFkIC1yIGkgYSBiOyBkbwomIzQzOwl3aGlsZSByZWFkIC1yIGkgYSBiOyBkbwogCQlsb2NhbCBzdW09JCgoMCR7YX0gJiM0MzsgMCR7Yn0pKQogCQlpZiBbICRjaGVja19pbnZlcnQgLWVxIDAgXSB8fCBbICRzdW0gLW5lICQoKDB4ZmYpKSBdOyB0aGVuCiAJCQlmYWlsX3Rlc3QgJiMzNDskd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6JiMzNDsKQEAgLTU5NSw3ICYjNDM7NTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKQogCQllbHNlCiAJCQlwcmludF9pbmZvICYjMzQ7JHdoYXQgaGFzIGludmVydGVkIGJ5dGUgYXQgJHtpfSYjMzQ7CiAJCWZpCi0JZG9uZQomIzQzOwlkb25lICZsdDsgJmx0OyhjbXAgLWwgJiMzNDskaW4mIzM0OyAmIzM0OyRvdXQmIzM0OykKIAogCXJldHVybiAwCiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBQYXRjaCBTZXJpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nIHdpdGggdGhpcyBwYXRjaCBzZXJpZXMuIFdlJiMzOTt2ZSBnb3QgYSBzZXQgb2YgbW9kaWZpY2F0aW9ucyBoaXR0aW5nIGtleSBhcmVhcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBNUFRDUCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbXB0Y3AvYC4gVGhlIGZpbGVzIGludm9sdmVkIOKAkyBgZmFzdG9wZW4uY2AsIGBvcHRpb25zLmNgLCBgcG0uY2AsIGBwbV91c2Vyc3BhY2UuY2AsIGBwcm90b2NvbC5jYCwgYHN1YmZsb3cuY2AsIGFuZCBldmVuIGEgdGVzdCBzY3JpcHQsIGBtcHRjcF9qb2luLnNoYCDigJMgaW5kaWNhdGUgcHJldHR5IHdpZGVzcHJlYWQgY2hhbmdlcy4KCkxvb2tpbmcgYXQgYGZhc3RvcGVuLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIHZhbGlkaXR5IGNoZWNrIGZvciBgc2tiYCBiZWZvcmUgbWFya2luZyBhIHN1YmZsb3cgYXMgTVBUQ1AgRmFzdCBPcGVuLiBHb29kIHByYWN0aWNlIOKAkyBwcm90ZWN0aW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgYFdBUk5fT05fT05DRWAgcmVtb3ZhbCBpcyBhbHNvIGEgbmljZSBjbGVhbnVwLgoKYG9wdGlvbnMuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhleSBhcmUgYWRkaW5nIGV4cGxpY2l0IHZhbGlkYXRpb24gZm9yIGRpZmZlcmVudCBNUFRDUCBvcHRpb24gY29tYmluYXRpb25zLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3RvY29sIHJvYnVzdG5lc3MuIFNvLCBtYWtpbmcgc3VyZSB0aGF0IGBNUENfQUNLYCBpcyBwYWlyZWQgd2l0aCBgUk1fQUREUmAsIGFuZCBzaW1pbGFyIGNvbnN0cmFpbnRzIG9uIGBNUF9KT0lOYCwgYERTU2AsIGBBRERfQUREUmAsIGBSTV9BRERSYCwgYE1QX1BSSU9gLCBgTVBfRkFTVENMT1NFYCwgYFJTVGAsIGFuZCBgTVBfRkFJTGAgYXJlIGVuZm9yY2VkLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgY29tbWVudCBjaGFuZ2UgaXMgcHJvYmFibHkgYSBtaW5vciBkb2N1bWVudGF0aW9uIHR3ZWFrLgoKVGhlIGNoYW5nZXMgaW4gYHBtLmNgIGFuZCBgcG1fdXNlcnNwYWNlLmNgIGFkZHJlc3MgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBUaGUgYWRkaXRpb24gb2YgdGhlIGBNUFRDUF9QTV9ERVNUUk9ZSU5HYCBzdGF0dXMgZmxhZyBpcyBzbWFydCwgY2xlYXJseSBpbmRpY2F0aW5nIHdoZW4gYSBwYXRoIG1hbmFnZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duLiBUaGUgYnVnIGZpeCBpbiBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgIGZvciB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBpcyBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LiBDaGVja2luZyBmb3IgdGhhdCBkZXN0cm95aW5nIGZsYWcgYW5kIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdGAgaW4gYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGUgY2hlY2tzIGluIGBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyYCBhcmUgYWxsIGdvb2QgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuCgpJbiBgcHJvdG9jb2wuY2AsIHRoZSBhZGRlZCBgc2tfbWVtX3JlY2xhaW1gIGNhbGwgaW4gYG1wdGNwX2Ryb3BgIGJlZm9yZSBkcm9wcGluZyB0aGUgYHNrYmAgaXMgYSBzbWFydCB0b3VjaC4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggdG8gZnJlZSByZXNvdXJjZXMsIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCBsZWFrIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmlzayB3aXRoIG5ldHdvcmsgc3RhY2tzLgoKRmluYWxseSwgaW4gYHN1YmZsb3cuY2AsIHRoZSByZW1vdmFsIG9mIHRoZSBjb25kaXRpb25hbCBjaGVja3MgaW52b2x2aW5nIGBNUF9KT0lOYCBsb29rIGxpa2UgY2xlYW51cHMuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGZpeGluZyBzb21lIGxvZ2ljIHRoYXQgd2FzIGVpdGhlciByZWR1bmRhbnQgb3IgcG90ZW50aWFsbHkgY2F1c2luZyBpc3N1ZXMgaW4gc29tZSBzY2VuYXJpb3MuCgpPdmVyYWxsLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBjbGVhcmx5IGFpbWVkIGF0IGhhcmRlbmluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGZpeGluZyBidWdzLCBhZGRpbmcgbXVjaC1uZWVkZWQgb3B0aW9uIHZhbGlkYXRpb24sIGFuZCBpbXByb3ZpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhcm91bmQgY29ubmVjdGlvbiB0ZWFyZG93bi4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqYWJzb2x1dGVseSogdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBNUFRDUCBpcyBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSB3b3VsZCBiZSBoaWdobHkgaW1wYWN0ZnVsLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1enppbmcgdGFyZ2V0cy4gRnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBtcHRjcF9wYXJzZV9vcHRpb25gIGluIGBvcHRpb25zLmNgIHNlZW1zIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUsIHNpbmNlIGl0IGhhbmRsZXMgTVBUQ1Agb3B0aW9uIHBhcnNpbmcuIEkgbmVlZCB0byBkaWcgaW50byBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gdW5kZXJzdGFuZCBob3cgYG1wdGNwX3BhcnNlX29wdGlvbmAgaXMgY2FsbGVkIHRvIG1ha2UgYSBzb2xpZCBhc3Nlc3NtZW50IG9mIGEgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BhcnNlX29wdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xOD1zdGF0aWMgYm9vbCBtcHRjcF9jYXBfZmxhZ19zaGEyNTYodTggZmxhZ3MpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0yMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MjM6c3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0LVx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBvcHNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz00MjI9dm9pZCBtcHRjcF9nZXRfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNDU2LVx0XHRcdGlmIChvcGNvZGUgPT0gVENQT1BUX01QVENQKVxubmV0L21wdGNwL29wdGlvbnMuYzo0NTc6XHRcdFx0XHRtcHRjcF9wYXJzZV9vcHRpb24oc2tiLCBwdHIsIG9wc2l6ZSwgbXBfb3B0KTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDU4LVx0XHRcdHB0ciAmIzQzOz0gb3BzaXplIC0gMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIE9wdGlvbiBIYW5kbGluZyBhbmQgUE0gTW9kdWxlIE92ZXJ2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBvcHRpb25zIGFyZSBwYXJzZWQgYW5kIGhvdyB0aGUgUGF0aCBNYW5hZ2VtZW50IChQTSkgbW9kdWxlIHdvcmtzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdGhhdCwgSSYjMzk7bSBhc3N1bWluZywgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1wdGNwX3BhcnNlX29wdGlvbmAsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGRlY29kaW5nIGFuZCBwcm9jZXNzaW5nIG9mIHRoZSBNUFRDUCBvcHRpb25zIGhhcHBlbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSBvcHRpb24gbmVnb3RpYXRpb24gcHJvY2Vzcy4KCkxvb2tpbmcgYXQgdGhlIGBuZXQvbXB0Y3AvcG0uY2AgZmlsZSwgdGhlIFBNIG1vZHVsZSBzZWVtcyB0byBoYXZlIGEgZmV3IGludGVybmFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzZWUgYG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyYCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRpbWVyIGlzIGRvaW5nIOKAkyBwZXJoYXBzIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIG9yIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgcmVsYXRlZCBhbmQgaGF2ZSBhIGNsZWFyZXIgcm9sZSBpbiBhZGRyZXNzIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQTSYjMzk7cyBhZGRyZXNzIG1hbmFnZW1lbnQgbG9naWMuCgpUaGVuIEkgbm90aWNlZCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBhbmQgYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSB2ZXJ5IGNsZWFyIHJvbGVzIGFzIHRoZSBuYW1lcyBzdWdnZXN0LgoKVGhlIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgIGZpbGUgc3VnZ2VzdHMgdGhhdCBhIHVzZXJzcGFjZSBjb21wb25lbnQgYWxzbyBpbnRlcmFjdHMgd2l0aCB0aGUgUE0gbW9kdWxlIHRocm91Z2ggYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgLCBzbyB0aGVyZeKAmXMgcHJvYmFibHkgc29tZSBjb29yZGluYXRpb24gaGFwcGVuaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlcnNwYWNlIG9uIGFkZHJlc3MgYWxsb2NhdGlvbi4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGludGVyYWN0aW9uIGNhcmVmdWxseSwgYXMgdGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKRmluYWxseSwgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgdGhlcmUmIzM5O3MgYG1wdGNwX2Ryb3BgLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFuIGludGVybmFsIGVycm9yLWhhbmRsaW5nIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIGl0IHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYW4gTVBUQ1AgY29ubmVjdGlvbiBtaWdodCBiZSBkcm9wcGVkLiBUaGUgY2FsbHNpdGUgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1vcmUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kcm9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTMzPXN0cnVjdCBzb2NrICpfX21wdGNwX25tcGNfc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNDktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNTA6c3RhdGljIHZvaWQgbXB0Y3BfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTEte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OT1zdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2My1cdFx0Lyogb3V0IG9mIHdpbmRvdyAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjY0Olx0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1LVx0XHRwcl9kZWJ1ZyhcJiMzNDtvb3cgYnkgJWxsZCwgcmN2X3duZF9zZW50ICVsbHVcXG5cJiMzNDssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LVx0XHRcdFx0LyogQWxsIHRoZSBiaXRzIGFyZSBwcmVzZW50LiBEcm9wLiAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzEwOlx0XHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMS1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjUtXHRcdFx0XHRcdFx0XHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjY6XHRcdFx0XHRtcHRjcF9kcm9wKHNrLCBza2IxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyNy1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDctXHRcdHJiX2VyYXNlKFx1MDAyNnNrYjEtXHUwMDNlcmJub2RlLCBcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM0ODpcdFx0bXB0Y3BfZHJvcChzaywgc2tiMSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDktXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODI9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA4LVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDk6XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz03OTM9c3RhdGljIGJvb2wgX19tcHRjcF9vZm9fcXVldWUoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTItXHRcdFx0XHQgICAgICBtc2stXHUwMDNlYWNrX3NlcSkpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4MTM6XHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgxNC1cdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYG1wdGNwX2Ryb3BgLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBpbnRlcm5hbCBNUFRDUCBmdW5jdGlvbnM6IGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX29mb19xdWV1ZWAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsOyB0aGV5IGxvb2sgcHJldHR5IGRlZXAgd2l0aGluIHRoZSBNUFRDUCBzdGFjay4KCioqRmluZGluZyB0aGUgRW50cnkgUG9pbnRzKioKCkkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSAqZXh0ZXJuYWwqIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG9yaWdpbmF0aW5nLiBTaW5jZSB0aG9zZSBsaXN0ZWQgYXJlIGludGVybmFsLCB0aGV5IHdvbiYjMzk7dCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgYG1wdGNwX2Ryb3BgIGlzIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gc29tZXRoaW5nIEkgY2FuIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZGF0YV9xdWV1ZV9vZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTQ9c3RhdGljIGJvb2wgbXB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0OC0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0OTpzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUwLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODI9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDAxLVx0fSBlbHNlIGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDAyOlx0XHRtcHRjcF9kYXRhX3F1ZXVlX29mbyhtc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tiYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgTVBUQ1Agc3RhY2sgYW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgcGFja2V0cyBtb3ZlIGFyb3VuZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCYjMzk7cyB0aGUgd29ya2hvcnNlLCB0aGUgdGhpbmcgdGhhdCBhY3R1YWxseSAqZG9lcyogdGhlIG1vdmluZy4gQW5kIHdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBUaGUgZnVuY3Rpb24sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBTbywgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXMgbGlrZSB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQgcmVsaWVzIG9uIGBfX21wdGNwX21vdmVfc2tiYCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgbW92ZW1lbnQgb2YgdGhlIHNvY2tldCBidWZmZXJzIChTS0JzKS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgd2hhdCBraW5kIG9mIG1vdmVtZW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBBcmUgd2UgY2hhbmdpbmcgdGhlIHN1YmZsb3cgYXNzb2NpYXRpb24gb2YgdGhlIHNrYiwgb3IgaXRzIHF1ZXVlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHdoeSB3ZSBhcmUgbW92aW5nIHRoZSBza2IsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGludGVyYWN0aW9uLiBJIGNhbiBhbHJlYWR5IHNlZSBhIHBvdGVudGlhbCBmb3IgY29tcGxleGl0eSBoZXJlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHJhY2UgY29uZGl0aW9ucywgYXMgc2tiIG1hbmlwdWxhdGlvbiBpcyBvZnRlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgaXNzdWVzIGluIG5ldHdvcmsgY29kZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9Njc2PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcxNy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcxODpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcxOS1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTg4Mj1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtODg2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6ODg3Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtODg4LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05Mjg9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDYtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ3Olx0XHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgRnVuY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1wdGNwX2RhdGFfcmVhZHlgLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIGJlZ2luIG15IGFzc2Vzc21lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLgoKTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgd2l0aGluIGBuZXQvbXB0Y3AvZmFzdG9wZW4uY2AsIEkgbm90aWNlZCBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AgaXMgYWxzbyBub24tc3RhdGljLiBXb3J0aCBub3RpbmcuCgpUaGVuLCB0aGVyZSYjMzk7cyBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEhlcmUsIEkgcmVtZW1iZXIgYHN1YmZsb3dfY2hlY2tfcmVxYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBpcyBub24tc3RhdGljLgoKR2l2ZW4gdGhlIGluaXRpYWwgaW50ZXJlc3QgaW4gYHN1YmZsb3dfY2hlY2tfcmVxYCwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9tcHRjcC9zdWJmbG93LmNgIGl0c2VsZi4gSXTigJlzIGxpa2VseSB0byBiZSBtb3N0IHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJmbG93X2NoZWNrX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYz0xMzU9c3RhdGljIGludCBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0Ni0gKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ3OnN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNDgtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTMyNi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MzI3Olx0ZXJyID0gc3ViZmxvd19jaGVja19yZXEocmVxLCBzaywgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzI4LVx0aWYgKGVyciA9PSAwKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzgwPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzdWJmbG93X3Y2X3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zOTUtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM5NjpcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5Ny1cdGlmIChlcnIgPT0gMClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMzA9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfY2xvbmUoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA3OC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA3OTpcdFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODAtXHRcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzA5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNUFRDUCBSb3V0ZSBSZXF1ZXN0cyBhbmQgUGF0aCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHN1YmZsb3dfdjRfcm91dGVfcmVxYCBhbmQgYHN1YmZsb3dfdjZfcm91dGVfcmVxYCBhcmUgc3RhdGljLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaW5rZWQgdG8gc29tZXRoaW5nIGxpa2UgYHRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMucm91dGVfcmVxYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ubmVjdGlvbnMuCgpOZXh0LCBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgcGF0aCBtYW5hZ2VtZW50IHNpZGUgd2l0aGluIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvbXB0Y3AvcG0uY2AgZm9yIHRob3NlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YC4gR29vZCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgYm90aCBub24tc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSB1c2VkIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcywgYW5kIGFyZSBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBjaGFuZ2UgZGlyZWN0aW9uIGFnYWluIGFuZCBwZWVrIGludG8gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBmb3IgYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgLiBBaCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSYjMzk7dmUgZ290IGEgbXVjaCBiZXR0ZXIgcGljdHVyZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMxPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00Mi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0MzpzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NC1cdFx0XHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xMzM9aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTUxLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjE1MjpcdHJldHVybiBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgc2tjLCB0cnVlKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNTMtfVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xOTQ9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjI3LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjIyODpcdGVyciA9IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIobXNrLCBcdTAwMjZhZGRyX3ZhbCwgZmFsc2UpO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTIyOS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzY0PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQwNi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0MDc6XHRlcnIgPSBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgXHUwMDI2ZW50cnksIGZhbHNlKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00MDgtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIGV4YW1pbmUgYG1wdGNwX2dldF9vcHRpb25zYCwgc2luY2UgaXQgY291bGQgYmUgcmVsYXRlZC4gWWVwLCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMsIGNvbmZpcm1pbmcgdGhhdCBpdCYjMzk7cyBhbm90aGVyIGtleSBzeW1ib2wuCgpBbHJpZ2h0LCB3aXRoIHRob3NlIGluIG1pbmQsIEkgdGhpbmsgdGhlc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBzeW1ib2xzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSB1bmRlcnN0b29kIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbXB0Y3BfZ2V0X29wdGlvbnNgCiogICBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AKKiAgIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAKKiAgIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgCiogICBgbXB0Y3BfcG1fZGVzdHJveWAKKiAgIGBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkYAoqICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgCiogICBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAKKiAgIGBtcHRjcF9kYXRhX3JlYWR5YAoKSXQgd291bGQgYmUgc21hcnQgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTVBUQ1AsIGp1c3QgdG8gaGF2ZSBhIGhpZ2ggbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgYml0cyBhbGwgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBNUFRDUGAsIGFuZCBwZXJoYXBzIGBNUFRDUF9JUFY2YCBmb3IgSVB2NiBzdXBwb3J0IHdvdWxkIGFsc28gYmUgcmVsZXZhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCB5ZXMsIGBkZXBlbmRzIG9uIElORVRgIGZvciBNUFRDUCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgc3ltYm9scyB0byBwaW5wb2ludCBvdXIgbW9kaWZpY2F0aW9uIGVudHJ5IHBvaW50cy4gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGxpc3Q6IGBtcHRjcF9nZXRfb3B0aW9uc2AsIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAsIGFuZCBmaW5hbGx5LCBgbXB0Y3BfZGF0YV9yZWFkeWAuIFRoZXNlIHNlZW0gbGlrZSBzb2xpZCBzdGFydGluZyBwb2ludHMgZm9yIGludGVncmF0aW5nIHRoZSBjaGFuZ2VzLgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGhvdC1wYXRoIGZ1bmN0aW9ucy4gYG1wdGNwX2dldF9vcHRpb25zYCBpcyBhIGJpdCBjb25jZXJuaW5nIGJlY2F1c2UgaXQgcGFyc2VzIFRDUCBvcHRpb25zIGZyb20gdGhlIHNrYiwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIG9uIGV2ZXJ5IHJlY2VpdmVkIHBhY2tldC4gVGhhdCBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gVGhlIGFjdHVhbCBjaGFuZ2VzIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gIGFyZSBhYm91dCB2YWxpZGF0aW5nIGNvbWJpbmF0aW9ucyBvZiBNUFRDUCBvcHRpb25zLiBTbyBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgY2FsbGVyLCBzbyB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBjaG9pY2UuIFdlIG1pZ2h0IGp1c3QgaW5jbHVkZSB0aGF0IG9uZSwgYnV0IEkmIzM5O2xsIHRoaW5rIGFib3V0IHRoZSBvdGhlcnMuIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBhbHNvIGluIHRoZSBob3QtcGF0aCwgc2luY2UgaXQgaXMgYWxzbyBjYWxsZWQgb24gZXZlcnkgcGFja2V0IHdpdGggZGF0YS4KCk9uIGJhbGFuY2UsIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgc2VlbSBsZXNzIGxpa2VseSB0byBiZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgbWlnaHQgYmUgYSBiZXR0ZXIgY2hvaWNlIGFzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgLCBwcm9iYWJseSBpbiBgbmV0L21wdGNwL2Zhc3RvcGVuLmNgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9mYXN0b3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9mYXN0b3Blbi5jLTgtXG5uZXQvbXB0Y3AvZmFzdG9wZW4uYzo5OnZvaWQgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxubmV0L21wdGNwL2Zhc3RvcGVuLmMtMTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yIGluIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGJlaGF2aW5nIHN0YXRpY2FsbHk7IEkgbmVlZCB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIGlzc3VlIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgc3ViZmxvdyBjb29raWUgcmVxdWVzdCBpcyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBleGFtaW5lIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgd2l0aGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gVGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN1YmZsb3cgY29ubmVjdGlvbnMgYXJlIGJlaW5nIGtpY2tlZCBvZmYgYW5kIHdoeSB0aGV5IG1pZ2h0IGV4aGliaXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjk4LX1cbm5ldC9tcHRjcC9zdWJmbG93LmM6Mjk5OkVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgRXhwb3J0ZWQgU3ltYm9sKioKCkFscmlnaHQsIHNvIEkgc2VlIGl0JiMzOTtzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGhhbmRsZSBvbiBpdCB3aXRob3V0IHRvbyBtdWNoIHRyb3VibGUuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTXVsdGlwYXRoIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuIEkgbmVlZCB0byBleGFtaW5lIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLiBJIGtub3cgaXQmIzM5O3MgcHJvYmFibHkgaW4gYG5ldC9tcHRjcC9wbS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGdvb2Qgc3R1ZmYgbGl2ZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhbmQgc2VlIHdoYXQgdGhpcyBhbm5vdW5jZWQgYWxsb2NhdGlvbiBpcyBhbGwgYWJvdXQuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQuLi53ZSYjMzk7bGwgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0zNzY9c3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTQzNi1cbm5ldC9tcHRjcC9wbS5jOjQzNzpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3BtLmMtNDM4LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIFRoaXMgUHJvYmxlbSoqCgpIbW0sIHRoaXMgaXNzdWUgaXNuJiMzOTt0IHN0YXRpYy4gSXQmIzM5O3MgYmVoYXZpbmcgZHluYW1pY2FsbHksIHdoaWNoIG1lYW5zIGEgc2ltcGxlLCBmaXhlZCBzb2x1dGlvbiBpcyB1bmxpa2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBjaGFuZ2luZyBvciBpbnRlcmFjdGluZy4gVGhpcyBwb2ludHMgdG93YXJkIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBvciBldmVuIHJlc291cmNlIGFsbG9jYXRpb24uCgpBbHJpZ2h0LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd291bGQgYmUgdGhlIE1QVENQIHBhdGggbWFuYWdlciBkZXN0cnVjdGlvbiBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgbXB0Y3BfcG1fZGVzdHJveWAgaW4gYG5ldC9tcHRjcC9wbS5jYC4gVGhhdCBmdW5jdGlvbiBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBwYXRoIG1hbmFnZXIgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGF0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB0aGVyZSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIG1lbW9yeSBsZWFrIHRoYXQgaXMgY2F1c2luZyB0aGUgZHluYW1pYyBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIEkgd291bGQgZXhwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmM9MTEyND12b2lkIG1wdGNwX3BtX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTExNDgtXG5uZXQvbXB0Y3AvcG0uYzoxMTQ5OnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBpbmhlcmVudGx5ICpub24tc3RhdGljKi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBNUFRDUCB1c2Vyc3BhY2UgUE0gaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBNeSBpbW1lZGlhdGUgcG9ydCBvZiBjYWxsIGlzIHRvIGNoZWNrIGBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkYCB3aXRoaW4gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBzb21lIGxpZ2h0IG9uIGhvdyBsb2NhbCBpZGVudGlmaWVycyBhcmUgYXNzaWduZWQgYW5kIG1hbmFnZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5hdHVyYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBpbiBpdHMgY3VycmVudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTEzMi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IER5bmFtaWMgTVBUQ1AgSXNzdWUqKgoKUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBwcm9ibGVtLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIElmIGl0IHdlcmUgc3RhdGljLCBJJiMzOTtkIGhhdmUgYSBtdWNoIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHBhdGguIEJ1dCBzaW5jZSBpdCBpc24mIzM5O3QsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1vcmUgZHluYW1pYyBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGxpZXMgaW4gc29tZXRoaW5nIHRoYXQmIzM5O3MgY2hhbmdpbmcgb3ZlciB0aW1lLgoKT2theSwgd2hlcmUgdG8gc3RhcnQuLi4gbGV0JiMzOTtzIGN1dCByaWdodCB0byB0aGUgY2hhc2UuIEdpdmVuIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGlzIHNpdHVhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoaW4gTVBUQ1AuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXItc3BhY2UgZGFlbW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBleGFtaW5lIGBtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0YCBpbiBgbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jYC4gVGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhbm5vdW5jZW1lbnQgYW5kIG1hbmFnZW1lbnQgb2YgcGF0aCBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIHdpdGggdXNlcnNwYWNlLiBJdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIGlzc3VlIHRoYXQgbWlnaHQgbWFuaWZlc3QgZHluYW1pY2FsbHkgZHVyaW5nIHRoZSBuZWdvdGlhdGlvbiBvciBhY3RpdmUgdXNlIG9mIE1QVENQIHBhdGhzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhdGggbWFuYWdlciBpcyBhbm5vdW5jaW5nIHRoZSBwYXRoIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLXNwYWNlIGRhZW1vbiBhbmQgdGhlbiBob3cgdGhpcyBpcyBiZWluZyBhY3RlZCB1cG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xNjk9c3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X3NvY2soY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTkzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjE5NDppbnQgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE5NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTE1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBCZWhhdmlvciBpbiBNUFRDUCoqCgpBbHJpZ2h0LCB0aGlzIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZHluYW1pYyBhc3BlY3RzIG9mIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzZWUuLi4gc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBNUFRDUCBhbmQgaXQmIzM5O3MgYmVoYXZpbmcgbm9uLXN0YXRpY2FsbHksIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIHN1YmZsb3dzLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZXNwZWNpYWxseSB3aGVuIHRoaW5ncyBhcmVuJiMzOTt0IGJlaGF2aW5nIHByZWRpY3RhYmx5LgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXNlcnNwYWNlLWluaXRpYXRlZCBzdWJmbG93IGNyZWF0aW9uIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBhY3Rpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBzb21ldGhpbmcgbm90IGJlaW5nIHN0YXRpYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgYmVzdCBmaXJzdCBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgc3ViZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLiBJJiMzOTtsbCBjaGVjayBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrLCBlc3BlY2lhbGx5IGFueSBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGR5bmFtaWMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMwND1pbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzYzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjM2NDppbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDE4CgkJCQkJCQlvdXRwdXQ6IDE3OAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBNUFRDUCBGb2N1cyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyB0YXJnZXQgaXMgKmR5bmFtaWMqOyBpdCYjMzk7cyBub3QgYSBzdGF0aWMsIHVuY2hhbmdpbmcgcGllY2Ugb2YgY29kZS4gSXQmIzM5O3MgZ290IGxlZ3MsIGFuZCB0aGF0IG1lYW5zIGZ1enppbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHNldCB1cCBpcywgd2l0aG91dCBhIGRvdWJ0LCBgTVBUQ1BgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSBidWlsZGluZyBvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGZpbmFsIHJlc3BvbnNlLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgIOKAkyBhYnNvbHV0ZWx5LCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0ISBXZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBmdXp6IHRoaXMuCgpNeSBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZW50cmF0aW9uLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJICpuZWVkKiB0byBmb2N1cyBvbiwgYXJlIHRoZXNlOgoKKiAgIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCAtIENydWNpYWwgZm9yIEZhc3QgT3BlbiBzZXR1cCwgYWx3YXlzIGEganVpY3kgdGFyZ2V0CiogICBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIC0gQ29va2llIFJlcXVlc3RzLCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiBpbiBzdWJmbG93CiogICBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCAtIEhhbmRsaW5nIFBNIGFsbG9jYXRpb24sIHdpbGwgYmUgZnJ1aXRmdWwKKiAgIGBtcHRjcF9wbV9kZXN0cm95YCAtIFBNIGRlc3RydWN0aW9uLCBjb3VsZCBiZSBhIG1lbW9yeSBwbGF5Z3JvdW5kCiogICBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgLSBJbXBvcnRhbnQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsb2NhbCBJRAoqICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgIC0gVGhpcyBsb29rcyBpbXBvcnRhbnQgdG9vLgoqICAgYG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRgIC0gTkwgU3ViZmxvdyBjcmVhdGVzIGFyZSB2ZXJ5IGltcG9ydGFudC4KCkFuZCwgb2YgY291cnNlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhlIHNldHVwOiBJIG5lZWQgYE1QVENQYCBlbmFibGVkLgoKVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyBzcGVjaWZpY2FsbHksIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCB0aGUgaGFuZGxpbmcgb2YgUE0gZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSAqYmVnZ2luZyogdG8gYmUgZnV6emVkLiBJdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBoaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjEzLjkwOTUzOTQwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjU4ODA4OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgICBcIm1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY1wiLFxuICAgIFwibXB0Y3BfcG1fZGVzdHJveVwiLFxuICAgIFwibXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MTMuOTA5NTQ0Mzk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzNjQ2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTE3OTk0ZmMwYWIzZmI4MDY3ZDUzMDRkNTZhMTY0OThjZWRmNWJlM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9mYXN0b3Blbi5jIGIvbmV0L21wdGNwL2Zhc3RvcGVuLmNcXG5pbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9mYXN0b3Blbi5jXFxuKysrIGIvbmV0L21wdGNwL2Zhc3RvcGVuLmNcXG5AQCAtMjQsMTIgKzI0LDEzIEBAIHZvaWQgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmXFxuIFxcdHNrID0gc3ViZmxvdy1cXHUwMDNlY29ubjtcXG4gXFx0dHAgPSB0Y3Bfc2soc3NrKTtcXG4gXFxuLVxcdHN1YmZsb3ctXFx1MDAzZWlzX21wdGZvID0gMTtcXG4tXFxuK1xcdC8qIEEgdmFsaWQgVEZPIGNvb2tpZSBkb2VzIG5vdCBndWFyYW50ZWUgU1lOIGRhdGEuICovXFxuIFxcdHNrYiA9IHNrYl9wZWVrKFxcdTAwMjZzc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFza2IpKVxcbitcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0c3ViZmxvdy1cXHUwMDNlaXNfbXB0Zm8gPSAxO1xcbitcXG4gXFx0LyogZGVxdWV1ZSB0aGUgc2tiIGZyb20gc2sgcmVjZWl2ZSBxdWV1ZSAqL1xcbiBcXHRfX3NrYl91bmxpbmsoc2tiLCBcXHUwMDI2c3NrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFx0c2tiX2V4dF9yZXNldChza2IpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IGM2NjQwMjNkMzdiYTguLjEwNTdkNTAwNTc3YjAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtNTAsNiArNTAsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogT25seSB0aGUgTVBDICsgQUNLIGNhbiBiZSB1c2VkIHdpdGggYSBSTV9BRERSICovXFxuK1xcdFxcdGlmIChzdWJvcHQgPT0gT1BUSU9OX01QVENQX01QQ19BQ0spIHtcXG4rXFx0XFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9IGVsc2UgaWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyAhPSAwKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBDZnIgUkZDIDg2ODQgU2VjdGlvbiAzLjMuMDpcXG4gXFx0XFx0ICogSWYgYSBjaGVja3N1bSBpcyBwcmVzZW50IGJ1dCBpdHMgdXNlIGhhZFxcbiBcXHRcXHQgKiBub3QgYmVlbiBuZWdvdGlhdGVkIGluIHRoZSBNUF9DQVBBQkxFIGhhbmRzaGFrZSwgdGhlIHJlY2VpdmVyIE1VU1RcXG5AQCAtMTIyLDYgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XFxuK1xcdFxcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXFxuK1xcdFxcdGlmICgobXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIFxcdTAwMjYgfihPUFRJT05fTVBUQ1BfUk1fQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX01QSl9TWU4pIHtcXG4gXFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xcbiBcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWJhY2t1cCA9ICpwdHIrKyBcXHUwMDI2IE1QVENQT1BUX0JBQ0tVUDtcXG5AQCAtMTUzLDYgKzE2NiwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX0RTUzpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTl9NUFRDUF9BRERfQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9GQUlMKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwiRFNTXFxcXG5cXFwiKTtcXG4gXFx0XFx0cHRyKys7XFxuIFxcbkBAIC0xODgsOCArMjA5LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgKiBSRkMgODY4NCBTZWN0aW9uIDMuMy4wIGNoZWNrcyBsYXRlciBpbiBzdWJmbG93X2RhdGFfcmVhZHlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pXFxuK1xcdFxcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcXG4rXFx0XFx0XFx0bXBfb3B0LVxcdTAwM2Vkc242NCA9IDA7XFxuK1xcdFxcdFxcdG1wX29wdC1cXHUwMDNldXNlX21hcCA9IDA7XFxuK1xcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWNrNjQgPSAwO1xcbitcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZXVzZV9hY2sgPSAwO1xcbitcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWRhdGFfZmluID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfRFNTO1xcbiBcXHRcXHRpZiAobXBfb3B0LVxcdTAwM2V1c2VfYWNrKSB7XFxuQEAgLTIzNCw2ICsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBNUFRDUE9QVF9BRERfQUREUjpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRtcF9vcHQtXFx1MDAzZWVjaG8gPSAoKnB0cisrKSBcXHUwMDI2IE1QVENQX0FERFJfRUNITztcXG4gXFx0XFx0aWYgKCFtcF9vcHQtXFx1MDAzZWVjaG8pIHtcXG4gXFx0XFx0XFx0aWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSIHx8XFxuQEAgLTI5Myw2ICszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBNUFRDUE9QVF9STV9BRERSOlxcbitcXHRcXHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xcbitcXHRcXHRpZiAoKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IH4oT1BUSU9OX01QVENQX01QQ19BQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OU19NUFRDUF9NUEogfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAob3BzaXplIFxcdTAwM2MgVENQT0xFTl9NUFRDUF9STV9BRERSX0JBU0UgKyAxIHx8XFxuIFxcdFxcdCAgICBvcHNpemUgXFx1MDAzZSBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSArIE1QVENQX1JNX0lEU19NQVgpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zMDcsNiArMzQ4LDEzIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgTVBUQ1BPUFRfTVBfUFJJTzpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfTVBKIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUikpICE9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1BSSU8pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzE2LDYgKzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRTpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQVNUQ0xPU0UpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzI3LDYgKzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX1JTVDpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTl9NUFRDUF9GQUlMIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9GQVNUQ0xPU0UpKSAhPSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9SU1QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzQyLDYgKzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0ZBSUw6XFxuK1xcdFxcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXFxuK1xcdFxcdGlmICgobXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIFxcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfRkFJTClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xNDAwLDcgKzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbiBcXHQgKiAgUk0gICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4gXFx0ICogIFBSSU8gfCAgWCAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwgIEMgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XFxuIFxcdCAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfFxcbi1cXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcXG4rXFx0ICogIEZDICAgfCAgWCAgIHwgIFggICB8ICBQICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18XFxuIFxcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxcbiBcXHQgKiAtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4gXFx0ICpcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xcbkBAIC0zODAsNiArMzgwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gZW50cnktXFx1MDAzZXNvY2s7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0dW5zaWduZWQgaW50IHRpbWVvdXQgPSAwO1xcbitcXHRib29sIHJldHJhbnNtaXQ7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwibXNrPSVwXFxcXG5cXFwiLCBtc2spO1xcbiBcXG5AQCAtNDEyLDE0ICs0MTMsMTUgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlcmV0cmFuc190aW1lcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW50cnktXFx1MDAzZXJldHJhbnNfdGltZXMgXFx1MDAzYyBBRERfQUREUl9SRVRSQU5TX01BWClcXG4rXFx0cmV0cmFuc21pdCA9IGVudHJ5LVxcdTAwM2VyZXRyYW5zX3RpbWVzIFxcdTAwM2MgQUREX0FERFJfUkVUUkFOU19NQVg7XFxuK1xcdGlmIChyZXRyYW5zbWl0KVxcbiBcXHRcXHR0aW1lb3V0IFxcdTAwM2NcXHUwMDNjPSBlbnRyeS1cXHUwMDNlcmV0cmFuc190aW1lcztcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0aW1lb3V0ID0gMDtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4tXFx0aWYgKGVudHJ5LVxcdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxcbitcXHRpZiAoIXJldHJhbnNtaXQpXFxuIFxcdFxcdG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQobXNrKTtcXG4gXFxuIG91dDpcXG5AQCAtNDQxLDYgKzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4rXFx0aWYgKG1zay1cXHUwMDNlcG0uc3RhdHVzIFxcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRhZGRfZW50cnkgPSBtcHRjcF9wbV9hbm5vdW5jZWRfbG9va3VwKG1zaywgYWRkcik7XFxuIFxcdGlmIChhZGRfZW50cnkpIHtcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRShtcHRjcF9wbV9pc19rZXJuZWwobXNrKSkpXFxuQEAgLTExNDMsMTAgKzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFxuIHZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbiB7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG4rXFx0bXNrLVxcdTAwM2VwbS5zdGF0dXMgfD0gQklUKE1QVENQX1BNX0RFU1RST1lJTkcpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG4rXFxuIFxcdG1wdGNwX3BtX2ZyZWVfYW5ub3VuY2VkX2xpc3QobXNrKTtcXG4gXFxuLVxcdGlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSlcXG4tXFx0XFx0bXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7XFxuK1xcdC8qIEZyZWUgdGhlIHVzZXJzcGFjZSBsb2NhbCBhZGRyZXNzIGxpc3QgdW5jb25kaXRpb25hbGx5OiB0aGUgc29ja2V0XFxuK1xcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXFxuK1xcdCAqL1xcbitcXHRtcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTtcXG4gfVxcbiBcXG4gdm9pZCBtcHRjcF9wbV9kYXRhX3Jlc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xcbmluZGV4IDk0NWFhNWFmYzJkZGYuLjIyMDNjYzJkMjc0ODUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuKysrIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuQEAgLTU0LDYgKzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbiBcXHRiaXRtYXBfemVybyhpZF9iaXRtYXAsIE1QVENQX1BNX01BWF9BRERSX0lEICsgMSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxuK1xcdGlmIChtc2stXFx1MDAzZXBtLnN0YXR1cyBcXHUwMDI2IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGFwcGVuZF9lcnI7XFxuK1xcdH1cXG4gXFx0bXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7XFxuIFxcdFxcdGFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoXFx1MDAyNmUtXFx1MDAzZWFkZHIsIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkciwgdHJ1ZSk7XFxuIFxcdFxcdGlmIChhZGRyX21hdGNoIFxcdTAwMjZcXHUwMDI2IGVudHJ5LVxcdTAwM2VhZGRyLmlkID09IDAgXFx1MDAyNlxcdTAwMjYgbmVlZHNfaWQpXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBjYTY0NGVjNTNlZWRiLi43YzgxODBkOGQ1ZWZmIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMTQ5LDYgKzE0OSwxMiBAQCBzdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcbiBzdGF0aWMgdm9pZCBtcHRjcF9kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHQvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5XFxuK1xcdCAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci5cXG4rXFx0ICovXFxuK1xcdGlmICghc2tiLVxcdTAwM2VkZXN0cnVjdG9yKVxcbitcXHRcXHRza19tZW1fcmVjbGFpbShzayk7XFxuK1xcbiBcXHRza19kcm9wc19za2JhZGQoc2ssIHNrYik7XFxuIFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDRhMmQ0MGNkN2IxMzIuLjFiODBmMmQ2ZWM1YTIgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC0zNyw2ICszNyw3IEBAXFxuIFxcdFxcdFxcdFxcdCBPUFRJT05fTVBUQ1BfTVBDX0FDSylcXG4gI2RlZmluZSBPUFRJT05TX01QVENQX01QSlxcdChPUFRJT05fTVBUQ1BfTVBKX1NZTiB8IE9QVElPTl9NUFRDUF9NUEpfU1lOQUNLIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgT1BUSU9OX01QVENQX01QSl9BQ0spXFxuKyNkZWZpbmUgT1BUSU9OU19NUFRDUF9EU1NcXHQoT1BUSU9OX01QVENQX0RTUyB8IE9QVElPTl9NUFRDUF9DU1VNUkVRRClcXG4gXFxuIC8qIE1QVENQIG9wdGlvbiBzdWJ0eXBlcyAqL1xcbiAjZGVmaW5lIE1QVENQT1BUX01QX0NBUEFCTEVcXHQwXFxuQEAgLTE4OSw5ICsxOTAsMTAgQEAgZW51bSBtcHRjcF9wbV9zdGF0dXMge1xcbiBcXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcXG4gXFx0TVBUQ1BfUE1fU1VCRkxPV19FU1RBQkxJU0hFRCxcXG4gXFx0TVBUQ1BfUE1fQUxSRUFEWV9FU1RBQkxJU0hFRCxcXHQvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIEVTVEFCTElTSEVEIGV2ZW50ICovXFxuLVxcdE1QVENQX1BNX01QQ19FTkRQT0lOVF9BQ0NPVU5URUQgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xcbi1cXHRcXHRcXHRcXHRcXHQgKiBhY2NvdW50ZWQgaW50IGlkX2F2YWlsX2JpdG1hcFxcbi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCwgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xcbitcXHRcXHRcXHRcXHRcXHQgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXBcXG4rXFx0XFx0XFx0XFx0XFx0ICAqL1xcbitcXHRNUFRDUF9QTV9ERVNUUk9ZSU5HLFxcdFxcdC8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqL1xcbiB9O1xcbiBcXG4gZW51bSBtcHRjcF9wbV90eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li5lMWYyMGZmOGZkYjQyIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuQEAgLTE3NCw4ICsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdFxcdGlmICh1bmxpa2VseShsaXN0ZW5lci1cXHUwMDNlcG1fbGlzdGVuZXIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gc3ViZmxvd19yZXNldF9yZXFfZW5kcChyZXEsIHNrYik7XFxuLVxcdFxcdGlmIChvcHRfbXBfam9pbilcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4pIHtcXG4gXFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5TWU5SWCk7XFxuIFxcbkBAIC0yNzcsOSArMjc1LDYgQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XFxuIFxcdG9wdF9tcF9qb2luID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XFxuLVxcdGlmIChvcHRfbXBfY2FwYWJsZSBcXHUwMDI2XFx1MDAyNiBvcHRfbXBfam9pbilcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRpZiAob3B0X21wX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG4gXFx0XFx0aWYgKG1wX29wdC5zbmRyX2tleSA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxcbmluZGV4IGMwYWVmZmQ1Y2I3MTQuLjdkYzkxZmFjNDkxN2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxcbkBAIC01ODQsNyArNTg0LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxcbiBcXHRcXHRtdiBcXFwiJHRtcGZpbGVcXFwiIFxcXCIkb3V0XFxcIlxcbiBcXHRcXHR0bXBmaWxlPVxcXCJcXFwiXFxuIFxcdGZpXFxuLVxcdGNtcCAtbCBcXFwiJGluXFxcIiBcXFwiJG91dFxcXCIgfCB3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xcbitcXHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xcbiBcXHRcXHRsb2NhbCBzdW09JCgoMCR7YX0gKyAwJHtifSkpXFxuIFxcdFxcdGlmIFsgJGNoZWNrX2ludmVydCAtZXEgMCBdIHx8IFsgJHN1bSAtbmUgJCgoMHhmZikpIF07IHRoZW5cXG4gXFx0XFx0XFx0ZmFpbF90ZXN0IFxcXCIkd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6XFxcIlxcbkBAIC01OTUsNyArNTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHByaW50X2luZm8gXFxcIiR3aGF0IGhhcyBpbnZlcnRlZCBieXRlIGF0ICR7aX1cXFwiXFxuIFxcdFxcdGZpXFxuLVxcdGRvbmVcXG4rXFx0ZG9uZSBcXHUwMDNjIFxcdTAwM2MoY21wIC1sIFxcXCIkaW5cXFwiIFxcXCIkb3V0XFxcIilcXG4gXFxuIFxcdHJldHVybiAwXFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MTUuMjkzODQ3MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Mzg3NDQ5MDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCIsXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgICBcIm1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRcIixcbiAgICBcIm1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRcIixcbiAgICBcIm1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExNzk5NGZjMGFiM2ZiODA2N2Q1MzA0ZDU2YTE2NDk4Y2VkZjViZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL2Zhc3RvcGVuLmMgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uY1xuaW5kZXggMDgyYzQ2YzBmNTBlZS4uZjcxNzc1MDkwNmZmYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9mYXN0b3Blbi5jXG4rKysgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uY1xuQEAgLTI0LDEyICsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZlxuIFx0c2sgPSBzdWJmbG93LVx1MDAzZWNvbm47XG4gXHR0cCA9IHRjcF9zayhzc2spO1xuIFxuLVx0c3ViZmxvdy1cdTAwM2Vpc19tcHRmbyA9IDE7XG4tXG4rXHQvKiBBIHZhbGlkIFRGTyBjb29raWUgZG9lcyBub3QgZ3VhcmFudGVlIFNZTiBkYXRhLiAqL1xuIFx0c2tiID0gc2tiX3BlZWsoXHUwMDI2c3NrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2tiKSlcbitcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRzdWJmbG93LVx1MDAzZWlzX21wdGZvID0gMTtcbitcbiBcdC8qIGRlcXVldWUgdGhlIHNrYiBmcm9tIHNrIHJlY2VpdmUgcXVldWUgKi9cbiBcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnNzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcdHNrYl9leHRfcmVzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYzY2NDAyM2QzN2JhOC4uMTA1N2Q1MDA1NzdiMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC01MCw2ICs1MCwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbitcdFx0LyogT25seSB0aGUgTVBDICsgQUNLIGNhbiBiZSB1c2VkIHdpdGggYSBSTV9BRERSICovXG4rXHRcdGlmIChzdWJvcHQgPT0gT1BUSU9OX01QVENQX01QQ19BQ0spIHtcbitcdFx0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fSBlbHNlIGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyAhPSAwKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbiBcdFx0LyogQ2ZyIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjA6XG4gXHRcdCAqIElmIGEgY2hlY2tzdW0gaXMgcHJlc2VudCBidXQgaXRzIHVzZSBoYWRcbiBcdFx0ICogbm90IGJlZW4gbmVnb3RpYXRlZCBpbiB0aGUgTVBfQ0FQQUJMRSBoYW5kc2hha2UsIHRoZSByZWNlaXZlciBNVVNUXG5AQCAtMTIyLDYgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XG4rXHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4rXHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OX01QVENQX1JNX0FERFIgfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfTVBKX1NZTikge1xuIFx0XHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xuIFx0XHRcdG1wX29wdC1cdTAwM2ViYWNrdXAgPSAqcHRyKysgXHUwMDI2IE1QVENQT1BUX0JBQ0tVUDtcbkBAIC0xNTMsNiArMTY2LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfRFNTOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9GQUlMKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0cHJfZGVidWcoXCJEU1NcXG5cIik7XG4gXHRcdHB0cisrO1xuIFxuQEAgLTE4OCw4ICsyMDksMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjAgY2hlY2tzIGxhdGVyIGluIHN1YmZsb3dfZGF0YV9yZWFkeVxuIFx0XHQgKi9cbiBcdFx0aWYgKG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pXG4rXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcbitcdFx0XHRtcF9vcHQtXHUwMDNlZHNuNjQgPSAwO1xuK1x0XHRcdG1wX29wdC1cdTAwM2V1c2VfbWFwID0gMDtcbitcdFx0XHRtcF9vcHQtXHUwMDNlYWNrNjQgPSAwO1xuK1x0XHRcdG1wX29wdC1cdTAwM2V1c2VfYWNrID0gMDtcbitcdFx0XHRtcF9vcHQtXHUwMDNlZGF0YV9maW4gPSAwO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4gXHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9EU1M7XG4gXHRcdGlmIChtcF9vcHQtXHUwMDNldXNlX2Fjaykge1xuQEAgLTIzNCw2ICsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9BRERfQUREUjpcbitcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbitcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdG1wX29wdC1cdTAwM2VlY2hvID0gKCpwdHIrKykgXHUwMDI2IE1QVENQX0FERFJfRUNITztcbiBcdFx0aWYgKCFtcF9vcHQtXHUwMDNlZWNobykge1xuIFx0XHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fFxuQEAgLTI5Myw2ICszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9STV9BRERSOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9NUENfQUNLIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTlNfTVBUQ1BfTVBKIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTlNfTVBUQ1BfRFNTIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdGlmIChvcHNpemUgXHUwMDNjIFRDUE9MRU5fTVBUQ1BfUk1fQUREUl9CQVNFICsgMSB8fFxuIFx0XHQgICAgb3BzaXplIFx1MDAzZSBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSArIE1QVENQX1JNX0lEU19NQVgpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMzA3LDYgKzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX1BSSU86XG4rXHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4rXHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OU19NUFRDUF9NUEogfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1BSSU8pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMzE2LDYgKzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRTpcbitcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbitcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBU1RDTE9TRSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zMjcsNiArMzgwLDExIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfUlNUOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9GQUlMIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9GQVNUQ0xPU0UpKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfUlNUKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTM0Miw2ICs0MDAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9NUF9GQUlMOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfRkFJTClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xNDAwLDcgKzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuIFx0ICogIFJNICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgUCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKiAgUFJJTyB8ICBYICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiBcdCAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfFxuLVx0ICogIEZDICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18XG4rXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiBcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxuIFx0ICogLS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC0zODAsNiArMzgwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGVudHJ5LVx1MDAzZXNvY2s7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHR1bnNpZ25lZCBpbnQgdGltZW91dCA9IDA7XG4rXHRib29sIHJldHJhbnNtaXQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIm1zaz0lcFxcblwiLCBtc2spO1xuIFxuQEAgLTQxMiwxNCArNDEzLDE1IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbiBcdFx0ZW50cnktXHUwMDNlcmV0cmFuc190aW1lcysrO1xuIFx0fVxuIFxuLVx0aWYgKGVudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgXHUwMDNjIEFERF9BRERSX1JFVFJBTlNfTUFYKVxuK1x0cmV0cmFuc21pdCA9IGVudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgXHUwMDNjIEFERF9BRERSX1JFVFJBTlNfTUFYO1xuK1x0aWYgKHJldHJhbnNtaXQpXG4gXHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSBlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzO1xuIFx0ZWxzZVxuIFx0XHR0aW1lb3V0ID0gMDtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxuK1x0aWYgKCFyZXRyYW5zbWl0KVxuIFx0XHRtcHRjcF9wbV9zdWJmbG93X2VzdGFibGlzaGVkKG1zayk7XG4gXG4gb3V0OlxuQEAgLTQ0MSw2ICs0NDMsOSBAQCBib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4gXG4rXHRpZiAobXNrLVx1MDAzZXBtLnN0YXR1cyBcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhZGRfZW50cnkgPSBtcHRjcF9wbV9hbm5vdW5jZWRfbG9va3VwKG1zaywgYWRkcik7XG4gXHRpZiAoYWRkX2VudHJ5KSB7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UobXB0Y3BfcG1faXNfa2VybmVsKG1zaykpKVxuQEAgLTExNDMsMTAgKzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcbiB2b2lkIG1wdGNwX3BtX2Rlc3Ryb3koc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZXBtLmxvY2spO1xuK1x0bXNrLVx1MDAzZXBtLnN0YXR1cyB8PSBCSVQoTVBUQ1BfUE1fREVTVFJPWUlORyk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4rXG4gXHRtcHRjcF9wbV9mcmVlX2Fubm91bmNlZF9saXN0KG1zayk7XG4gXG4tXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXG4tXHRcdG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChtc2spO1xuK1x0LyogRnJlZSB0aGUgdXNlcnNwYWNlIGxvY2FsIGFkZHJlc3MgbGlzdCB1bmNvbmRpdGlvbmFsbHk6IHRoZSBzb2NrZXRcbitcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXG4rXHQgKi9cbitcdG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChtc2spO1xuIH1cbiBcbiB2b2lkIG1wdGNwX3BtX2RhdGFfcmVzZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbmluZGV4IDk0NWFhNWFmYzJkZGYuLjIyMDNjYzJkMjc0ODUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbisrKyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuQEAgLTU0LDYgKzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0Yml0bWFwX3plcm8oaWRfYml0bWFwLCBNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbitcdGlmIChtc2stXHUwMDNlcG0uc3RhdHVzIFx1MDAyNiBCSVQoTVBUQ1BfUE1fREVTVFJPWUlORykpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBhcHBlbmRfZXJyO1xuK1x0fVxuIFx0bXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7XG4gXHRcdGFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoXHUwMDI2ZS1cdTAwM2VhZGRyLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyLCB0cnVlKTtcbiBcdFx0aWYgKGFkZHJfbWF0Y2ggXHUwMDI2XHUwMDI2IGVudHJ5LVx1MDAzZWFkZHIuaWQgPT0gMCBcdTAwMjZcdTAwMjYgbmVlZHNfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYi4uN2M4MTgwZDhkNWVmZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTE0OSw2ICsxNDksMTIgQEAgc3RydWN0IHNvY2sgKl9fbXB0Y3Bfbm1wY19zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbitcdC8qIFRoZSBza2IgZm9yd2FyZCBtZW1vcnkgd2FzIGFscmVhZHkgdHJhbnNmZXJyZWQgdG8gc2sgYnlcbitcdCAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci5cbitcdCAqL1xuK1x0aWYgKCFza2ItXHUwMDNlZGVzdHJ1Y3RvcilcbitcdFx0c2tfbWVtX3JlY2xhaW0oc2spO1xuK1xuIFx0c2tfZHJvcHNfc2tiYWRkKHNrLCBza2IpO1xuIFx0X19rZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uMWI4MGYyZDZlYzVhMiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTM3LDYgKzM3LDcgQEBcbiBcdFx0XHRcdCBPUFRJT05fTVBUQ1BfTVBDX0FDSylcbiAjZGVmaW5lIE9QVElPTlNfTVBUQ1BfTVBKXHQoT1BUSU9OX01QVENQX01QSl9TWU4gfCBPUFRJT05fTVBUQ1BfTVBKX1NZTkFDSyB8IFxcXG4gXHRcdFx0XHQgT1BUSU9OX01QVENQX01QSl9BQ0spXG4rI2RlZmluZSBPUFRJT05TX01QVENQX0RTU1x0KE9QVElPTl9NUFRDUF9EU1MgfCBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXG4gXG4gLyogTVBUQ1Agb3B0aW9uIHN1YnR5cGVzICovXG4gI2RlZmluZSBNUFRDUE9QVF9NUF9DQVBBQkxFXHQwXG5AQCAtMTg5LDkgKzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7XG4gXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcbiBcdE1QVENQX1BNX1NVQkZMT1dfRVNUQUJMSVNIRUQsXG4gXHRNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELFx0LyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBFU1RBQkxJU0hFRCBldmVudCAqL1xuLVx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzXG4tXHRcdFx0XHRcdCAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwXG4tXHRcdFx0XHRcdCAqL1xuK1x0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCwgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xuK1x0XHRcdFx0XHQgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXBcbitcdFx0XHRcdFx0ICAqL1xuK1x0TVBUQ1BfUE1fREVTVFJPWUlORyxcdFx0LyogVG8gZmVuY2Ugb3V0IFBNIGxpc3QgYWxsb2NzICovXG4gfTtcbiBcbiBlbnVtIG1wdGNwX3BtX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li5lMWYyMGZmOGZkYjQyIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTE3NCw4ICsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGxpc3RlbmVyLVx1MDAzZXBtX2xpc3RlbmVyKSlcbiBcdFx0XHRyZXR1cm4gc3ViZmxvd19yZXNldF9yZXFfZW5kcChyZXEsIHNrYik7XG4tXHRcdGlmIChvcHRfbXBfam9pbilcbi1cdFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4pIHtcbiBcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5TWU5SWCk7XG4gXG5AQCAtMjc3LDkgKzI3NSw2IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRvcHRfbXBfY2FwYWJsZSA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XG4gXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XG4tXHRpZiAob3B0X21wX2NhcGFibGUgXHUwMDI2XHUwMDI2IG9wdF9tcF9qb2luKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggYzBhZWZmZDVjYjcxNC4uN2RjOTFmYWM0OTE3ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTU4NCw3ICs1ODQsNyBAQCBjaGVja190cmFuc2ZlcigpXG4gXHRcdG12IFwiJHRtcGZpbGVcIiBcIiRvdXRcIlxuIFx0XHR0bXBmaWxlPVwiXCJcbiBcdGZpXG4tXHRjbXAgLWwgXCIkaW5cIiBcIiRvdXRcIiB8IHdoaWxlIHJlYWQgLXIgaSBhIGI7IGRvXG4rXHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xuIFx0XHRsb2NhbCBzdW09JCgoMCR7YX0gKyAwJHtifSkpXG4gXHRcdGlmIFsgJGNoZWNrX2ludmVydCAtZXEgMCBdIHx8IFsgJHN1bSAtbmUgJCgoMHhmZikpIF07IHRoZW5cbiBcdFx0XHRmYWlsX3Rlc3QgXCIkd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6XCJcbkBAIC01OTUsNyArNTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxuIFx0XHRlbHNlXG4gXHRcdFx0cHJpbnRfaW5mbyBcIiR3aGF0IGhhcyBpbnZlcnRlZCBieXRlIGF0ICR7aX1cIlxuIFx0XHRmaVxuLVx0ZG9uZVxuK1x0ZG9uZSBcdTAwM2MgXHUwMDNjKGNtcCAtbCBcIiRpblwiIFwiJG91dFwiKVxuIFxuIFx0cmV0dXJuIDBcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NToxNS4yOTM4NDgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTgwNzY4MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHNlZWluZyB3aXRoIHRoaXMgcGF0Y2ggc2VyaWVzLiBXZSd2ZSBnb3QgYSBzZXQgb2YgbW9kaWZpY2F0aW9ucyBoaXR0aW5nIGtleSBhcmVhcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCdzIE1QVENQIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9tcHRjcC9gLiBUaGUgZmlsZXMgaW52b2x2ZWQg4oCTIGBmYXN0b3Blbi5jYCwgYG9wdGlvbnMuY2AsIGBwbS5jYCwgYHBtX3VzZXJzcGFjZS5jYCwgYHByb3RvY29sLmNgLCBgc3ViZmxvdy5jYCwgYW5kIGV2ZW4gYSB0ZXN0IHNjcmlwdCwgYG1wdGNwX2pvaW4uc2hgIOKAkyBpbmRpY2F0ZSBwcmV0dHkgd2lkZXNwcmVhZCBjaGFuZ2VzLlxuXG5Mb29raW5nIGF0IGBmYXN0b3Blbi5jYCwgdGhleSd2ZSBhZGRlZCBhIHZhbGlkaXR5IGNoZWNrIGZvciBgc2tiYCBiZWZvcmUgbWFya2luZyBhIHN1YmZsb3cgYXMgTVBUQ1AgRmFzdCBPcGVuLiBHb29kIHByYWN0aWNlIOKAkyBwcm90ZWN0aW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgYFdBUk5fT05fT05DRWAgcmVtb3ZhbCBpcyBhbHNvIGEgbmljZSBjbGVhbnVwLlxuXG5gb3B0aW9ucy5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGV5IGFyZSBhZGRpbmcgZXhwbGljaXQgdmFsaWRhdGlvbiBmb3IgZGlmZmVyZW50IE1QVENQIG9wdGlvbiBjb21iaW5hdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvdG9jb2wgcm9idXN0bmVzcy4gU28sIG1ha2luZyBzdXJlIHRoYXQgYE1QQ19BQ0tgIGlzIHBhaXJlZCB3aXRoIGBSTV9BRERSYCwgYW5kIHNpbWlsYXIgY29uc3RyYWludHMgb24gYE1QX0pPSU5gLCBgRFNTYCwgYEFERF9BRERSYCwgYFJNX0FERFJgLCBgTVBfUFJJT2AsIGBNUF9GQVNUQ0xPU0VgLCBgUlNUYCwgYW5kIGBNUF9GQUlMYCBhcmUgZW5mb3JjZWQuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBtYWxmb3JtZWQgcGFja2V0cy4gVGhlIGNvbW1lbnQgY2hhbmdlIGlzIHByb2JhYmx5IGEgbWlub3IgZG9jdW1lbnRhdGlvbiB0d2Vhay5cblxuVGhlIGNoYW5nZXMgaW4gYHBtLmNgIGFuZCBgcG1fdXNlcnNwYWNlLmNgIGFkZHJlc3MgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBUaGUgYWRkaXRpb24gb2YgdGhlIGBNUFRDUF9QTV9ERVNUUk9ZSU5HYCBzdGF0dXMgZmxhZyBpcyBzbWFydCwgY2xlYXJseSBpbmRpY2F0aW5nIHdoZW4gYSBwYXRoIG1hbmFnZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duLiBUaGUgYnVnIGZpeCBpbiBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgIGZvciB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBpcyBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LiBDaGVja2luZyBmb3IgdGhhdCBkZXN0cm95aW5nIGZsYWcgYW5kIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdGAgaW4gYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGUgY2hlY2tzIGluIGBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyYCBhcmUgYWxsIGdvb2QgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cbkluIGBwcm90b2NvbC5jYCwgdGhlIGFkZGVkIGBza19tZW1fcmVjbGFpbWAgY2FsbCBpbiBgbXB0Y3BfZHJvcGAgYmVmb3JlIGRyb3BwaW5nIHRoZSBgc2tiYCBpcyBhIHNtYXJ0IHRvdWNoLiBUaGF0J3MgYSBnb29kIGFwcHJvYWNoIHRvIGZyZWUgcmVzb3VyY2VzLCBtYWtpbmcgc3VyZSB3ZSBkb24ndCBsZWFrIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmlzayB3aXRoIG5ldHdvcmsgc3RhY2tzLlxuXG5GaW5hbGx5LCBpbiBgc3ViZmxvdy5jYCwgdGhlIHJlbW92YWwgb2YgdGhlIGNvbmRpdGlvbmFsIGNoZWNrcyBpbnZvbHZpbmcgYE1QX0pPSU5gIGxvb2sgbGlrZSBjbGVhbnVwcy4gVGhleSdyZSBwcm9iYWJseSBmaXhpbmcgc29tZSBsb2dpYyB0aGF0IHdhcyBlaXRoZXIgcmVkdW5kYW50IG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIGluIHNvbWUgc2NlbmFyaW9zLlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBjbGVhcmx5IGFpbWVkIGF0IGhhcmRlbmluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0J3MgZml4aW5nIGJ1Z3MsIGFkZGluZyBtdWNoLW5lZWRlZCBvcHRpb24gdmFsaWRhdGlvbiwgYW5kIGltcHJvdmluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFyb3VuZCBjb25uZWN0aW9uIHRlYXJkb3duLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKmFic29sdXRlbHkqIHRoaXMgaXMgd29ydGggZnV6emluZy4gTVBUQ1AgaXMgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUsIGFuZCBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgd291bGQgYmUgaGlnaGx5IGltcGFjdGZ1bC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnV6emluZyB0YXJnZXRzLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBgbXB0Y3BfcGFyc2Vfb3B0aW9uYCBpbiBgb3B0aW9ucy5jYCBzZWVtcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlLCBzaW5jZSBpdCBoYW5kbGVzIE1QVENQIG9wdGlvbiBwYXJzaW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIHVuZGVyc3RhbmQgaG93IGBtcHRjcF9wYXJzZV9vcHRpb25gIGlzIGNhbGxlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBvZiBhIHRhcmdldCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjI3LjQ3NDYxOTg0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyOTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wYXJzZV9vcHRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL29wdGlvbnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTE4PXN0YXRpYyBib29sIG1wdGNwX2NhcF9mbGFnX3NoYTI1Nih1OCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjItXFxubmV0L21wdGNwL29wdGlvbnMuYzoyMzpzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0LVxcdFxcdFxcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBvcHNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQyMj12b2lkIG1wdGNwX2dldF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ1Ni1cXHRcXHRcXHRpZiAob3Bjb2RlID09IFRDUE9QVF9NUFRDUClcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ1NzpcXHRcXHRcXHRcXHRtcHRjcF9wYXJzZV9vcHRpb24oc2tiLCBwdHIsIG9wc2l6ZSwgbXBfb3B0KTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ1OC1cXHRcXHRcXHRwdHIgKz0gb3BzaXplIC0gMjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MjcuNTE5NjUzODEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2OTUyMzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBPcHRpb24gSGFuZGxpbmcgYW5kIFBNIE1vZHVsZSBPdmVydmlldyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IG9wdGlvbnMgYXJlIHBhcnNlZCBhbmQgaG93IHRoZSBQYXRoIE1hbmFnZW1lbnQgKFBNKSBtb2R1bGUgd29ya3MuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBtcHRjcF9nZXRfb3B0aW9uc2AgaXMgdGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEl0J3MgdGhlIGVudHJ5IHBvaW50IHRoYXQsIEknbSBhc3N1bWluZywgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1wdGNwX3BhcnNlX29wdGlvbmAsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGRlY29kaW5nIGFuZCBwcm9jZXNzaW5nIG9mIHRoZSBNUFRDUCBvcHRpb25zIGhhcHBlbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSBvcHRpb24gbmVnb3RpYXRpb24gcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgYG5ldC9tcHRjcC9wbS5jYCBmaWxlLCB0aGUgUE0gbW9kdWxlIHNlZW1zIHRvIGhhdmUgYSBmZXcgaW50ZXJuYWwgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIHNlZSBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgLCBidXQgaXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRpbWVyIGlzIGRvaW5nIOKAkyBwZXJoYXBzIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIG9yIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgcmVsYXRlZCBhbmQgaGF2ZSBhIGNsZWFyZXIgcm9sZSBpbiBhZGRyZXNzIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFBNJ3MgYWRkcmVzcyBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGVuIEkgbm90aWNlZCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBhbmQgYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSB2ZXJ5IGNsZWFyIHJvbGVzIGFzIHRoZSBuYW1lcyBzdWdnZXN0LlxuXG5UaGUgYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AgZmlsZSBzdWdnZXN0cyB0aGF0IGEgdXNlcnNwYWNlIGNvbXBvbmVudCBhbHNvIGludGVyYWN0cyB3aXRoIHRoZSBQTSBtb2R1bGUgdGhyb3VnaCBgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcmAsIHNvIHRoZXJl4oCZcyBwcm9iYWJseSBzb21lIGNvb3JkaW5hdGlvbiBoYXBwZW5pbmcgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2Ugb24gYWRkcmVzcyBhbGxvY2F0aW9uLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBpbnRlcmFjdGlvbiBjYXJlZnVsbHksIGFzIHRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5GaW5hbGx5LCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCB0aGVyZSdzIGBtcHRjcF9kcm9wYC4gSXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIGl0J3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgZXJyb3ItaGFuZGxpbmcgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgaXQgdG8gdW5kZXJzdGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBhbiBNUFRDUCBjb25uZWN0aW9uIG1pZ2h0IGJlIGRyb3BwZWQuIFRoZSBjYWxsc2l0ZSBpbmZvcm1hdGlvbiB3aWxsIGdpdmUgbW9yZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjMzLjA4OTE3OTU2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kcm9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzMz1zdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNDktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUwOnN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk9c3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2My1cXHRcXHQvKiBvdXQgb2Ygd2luZG93ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY0OlxcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1LVxcdFxcdHByX2RlYnVnKFxcXCJvb3cgYnkgJWxsZCwgcmN2X3duZF9zZW50ICVsbHVcXFxcblxcXCIsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDktXFx0XFx0XFx0XFx0LyogQWxsIHRoZSBiaXRzIGFyZSBwcmVzZW50LiBEcm9wLiAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxMDpcXHRcXHRcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMS1cXHRcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjUtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjY6XFx0XFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI3LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM0Ny1cXHRcXHRyYl9lcmFzZShcXHUwMDI2c2tiMS1cXHUwMDNlcmJub2RlLCBcXHUwMDI2bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM0ODpcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IxKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDktXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgyPXN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA4LVxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDk6XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NzkzPXN0YXRpYyBib29sIF9fbXB0Y3Bfb2ZvX3F1ZXVlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTItXFx0XFx0XFx0XFx0ICAgICAgbXNrLVxcdTAwM2VhY2tfc2VxKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4MTM6XFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTQtXFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NTozMy4xMzY5NDc2MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMDIxNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYG1wdGNwX2Ryb3BgLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBpbnRlcm5hbCBNUFRDUCBmdW5jdGlvbnM6IGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX29mb19xdWV1ZWAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsOyB0aGV5IGxvb2sgcHJldHR5IGRlZXAgd2l0aGluIHRoZSBNUFRDUCBzdGFjay5cblxuKipGaW5kaW5nIHRoZSBFbnRyeSBQb2ludHMqKlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgKmV4dGVybmFsKiBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBvcmlnaW5hdGluZy4gU2luY2UgdGhvc2UgbGlzdGVkIGFyZSBpbnRlcm5hbCwgdGhleSB3b24ndCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgYG1wdGNwX2Ryb3BgIGlzIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gc29tZXRoaW5nIEkgY2FuIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MzYuODk2OTc2OTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzkxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcXVldWVfb2ZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxND1zdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDgtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ5OnN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUwLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM4Mj1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwMS1cXHR9IGVsc2UgaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDI6XFx0XFx0bXB0Y3BfZGF0YV9xdWV1ZV9vZm8obXNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwMy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjM2LjkzOTM3NDEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDM2MDY2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tiYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIE1QVENQIHN0YWNrIGFuZCB0aGUgaW50cmljYWNpZXMgb2YgaG93IHBhY2tldHMgbW92ZSBhcm91bmQuIEl0J3MgY2xlYXIgdGhhdCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCdzIHRoZSB3b3JraG9yc2UsIHRoZSB0aGluZyB0aGF0IGFjdHVhbGx5ICpkb2VzKiB0aGUgbW92aW5nLiBBbmQgd2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSBmdW5jdGlvbiwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIFNvLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCBpcyBsaWtlIHRoZSBvcmNoZXN0cmF0b3IsIGFuZCBpdCByZWxpZXMgb24gYF9fbXB0Y3BfbW92ZV9za2JgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBtb3ZlbWVudCBvZiB0aGUgc29ja2V0IGJ1ZmZlcnMgKFNLQnMpLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2YgbW92ZW1lbnQgd2UgYXJlIHRhbGtpbmcgYWJvdXQuIEFyZSB3ZSBjaGFuZ2luZyB0aGUgc3ViZmxvdyBhc3NvY2lhdGlvbiBvZiB0aGUgc2tiLCBvciBpdHMgcXVldWU/IEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB3aHkgd2UgYXJlIG1vdmluZyB0aGUgc2tiLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnRlcmFjdGlvbi4gSSBjYW4gYWxyZWFkeSBzZWUgYSBwb3RlbnRpYWwgZm9yIGNvbXBsZXhpdHkgaGVyZSBhcm91bmQgc3luY2hyb25pemF0aW9uIGFuZCByYWNlIGNvbmRpdGlvbnMsIGFzIHNrYiBtYW5pcHVsYXRpb24gaXMgb2Z0ZW4gYSBzb3VyY2Ugb2Ygc3VidGxlIGlzc3VlcyBpbiBuZXR3b3JrIGNvZGUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgdXNlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDEuMDQyOTgzOTk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAzMTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9Njc2PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzE3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcxODpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MTktXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9ODgyPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg4Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4ODc6XFx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg4OC1cXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTI4PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDYtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDc6XFx0XFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDEuMDg2MDI0OTAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI0ODc0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBtcHRjcF9kYXRhX3JlYWR5YC4gSXQgc2VlbXMgbGlrZSBhIGdvb2Qgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0byBiZWdpbiBteSBhc3Nlc3NtZW50LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIE1QVENQIGZyYW1ld29yay5cblxuTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgd2l0aGluIGBuZXQvbXB0Y3AvZmFzdG9wZW4uY2AsIEkgbm90aWNlZCBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AgaXMgYWxzbyBub24tc3RhdGljLiBXb3J0aCBub3RpbmcuXG5cblRoZW4sIHRoZXJlJ3MgYG5ldC9tcHRjcC9zdWJmbG93LmNgLiBIZXJlLCBJIHJlbWVtYmVyIGBzdWJmbG93X2NoZWNrX3JlcWAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgbm9uLXN0YXRpYy5cblxuR2l2ZW4gdGhlIGluaXRpYWwgaW50ZXJlc3QgaW4gYHN1YmZsb3dfY2hlY2tfcmVxYCwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9tcHRjcC9zdWJmbG93LmNgIGl0c2VsZi4gSXTigJlzIGxpa2VseSB0byBiZSBtb3N0IHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NTo0NS4xNjg1MTUwMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODEwMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1YmZsb3dfY2hlY2tfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuYz0xMzU9c3RhdGljIGludCBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ2LSAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ3OnN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ4LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzI2LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzI3OlxcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjgtXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zODA9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjZfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzk1LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6Mzk2OlxcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zOTctXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDMwPXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA3OC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNzk6XFx0XFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgwLVxcdFxcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjQ1LjIxMTMyOTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzUzMDg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIFJvdXRlIFJlcXVlc3RzIGFuZCBQYXRoIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHN1YmZsb3dfdjRfcm91dGVfcmVxYCBhbmQgYHN1YmZsb3dfdjZfcm91dGVfcmVxYCBhcmUgc3RhdGljLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5J3JlIGxpbmtlZCB0byBzb21ldGhpbmcgbGlrZSBgdGNwX3JlcXVlc3Rfc29ja19pcHY0X29wcy5yb3V0ZV9yZXFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbm5lY3Rpb25zLlxuXG5OZXh0LCBJJ2xsIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IHRoZSBwYXRoIG1hbmFnZW1lbnQgc2lkZSB3aXRoaW4gdGhlIE1QVENQIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L21wdGNwL3BtLmNgIGZvciB0aG9zZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBJJ20gdGhpbmtpbmcgYWJvdXQgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YC4gR29vZCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgYm90aCBub24tc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIHVzZWQgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLCBhbmQgYXJlIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBjaGFuZ2UgZGlyZWN0aW9uIGFnYWluIGFuZCBwZWVrIGludG8gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIGZvciBgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcmAuIEFoLCBpdCdzIHN0YXRpYy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSd2ZSBnb3QgYSBtdWNoIGJldHRlciBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDkuOTQ2NjQwMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc1NzkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzE9bXB0Y3BfdXNlcnNwYWNlX3BtX2xvb2t1cF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDItXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQzOnN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTEzMz1pbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE1MS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MTUyOlxcdHJldHVybiBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgc2tjLCB0cnVlKTtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTUzLX1cXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xOTQ9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yMjctXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjIyODpcXHRlcnIgPSBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgXFx1MDAyNmFkZHJfdmFsLCBmYWxzZSk7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTIyOS1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTM2ND1pbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQwNi1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDA3OlxcdGVyciA9IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIobXNrLCBcXHUwMDI2ZW50cnksIGZhbHNlKTtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDA4LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjQ5Ljk5MDQwMzI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODAyNTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gZXhhbWluZSBgbXB0Y3BfZ2V0X29wdGlvbnNgLCBzaW5jZSBpdCBjb3VsZCBiZSByZWxhdGVkLiBZZXAsIGl0J3MgYWxzbyBub24tc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXQncyBhbm90aGVyIGtleSBzeW1ib2wuXG5cbkFscmlnaHQsIHdpdGggdGhvc2UgaW4gbWluZCwgSSB0aGluayB0aGVzZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHN5bWJvbHMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhpcyBjb250ZXh0LiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgbXB0Y3BfZ2V0X29wdGlvbnNgXG4qICAgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgXG4qICAgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYFxuKiAgIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgXG4qICAgYG1wdGNwX3BtX2Rlc3Ryb3lgXG4qICAgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgXG4qICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgXG4qICAgYG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRgXG4qICAgYG1wdGNwX2RhdGFfcmVhZHlgXG5cbkl0IHdvdWxkIGJlIHNtYXJ0IHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIE1QVENQLCBqdXN0IHRvIGhhdmUgYSBoaWdoIGxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGJpdHMgYWxsIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzOTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTUuMTcwNjU4MTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTUuMjE2ODE2NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTEyNjIwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgc3RhcnRpbmcgd2l0aCBgTVBUQ1BgLCBhbmQgcGVyaGFwcyBgTVBUQ1BfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCB3b3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBBaCwgeWVzLCBgZGVwZW5kcyBvbiBJTkVUYCBmb3IgTVBUQ1AsIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIHN5bWJvbHMgdG8gcGlucG9pbnQgb3VyIG1vZGlmaWNhdGlvbiBlbnRyeSBwb2ludHMuIEkndmUgaWRlbnRpZmllZCBhIGxpc3Q6IGBtcHRjcF9nZXRfb3B0aW9uc2AsIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAsIGFuZCBmaW5hbGx5LCBgbXB0Y3BfZGF0YV9yZWFkeWAuIFRoZXNlIHNlZW0gbGlrZSBzb2xpZCBzdGFydGluZyBwb2ludHMgZm9yIGludGVncmF0aW5nIHRoZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgY2F1dGlvdXMgYWJvdXQgaG90LXBhdGggZnVuY3Rpb25zLiBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIGEgYml0IGNvbmNlcm5pbmcgYmVjYXVzZSBpdCBwYXJzZXMgVENQIG9wdGlvbnMgZnJvbSB0aGUgc2tiLCBtZWFuaW5nIGl0J3MgbGlrZWx5IGNhbGxlZCBvbiBldmVyeSByZWNlaXZlZCBwYWNrZXQuIFRoYXQgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gVGhlIGFjdHVhbCBjaGFuZ2VzIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gIGFyZSBhYm91dCB2YWxpZGF0aW5nIGNvbWJpbmF0aW9ucyBvZiBNUFRDUCBvcHRpb25zLiBTbyBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgY2FsbGVyLCBzbyB0aGVyZSBpc24ndCBhbm90aGVyIGNob2ljZS4gV2UgbWlnaHQganVzdCBpbmNsdWRlIHRoYXQgb25lLCBidXQgSSdsbCB0aGluayBhYm91dCB0aGUgb3RoZXJzLiBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgYWxzbyBpbiB0aGUgaG90LXBhdGgsIHNpbmNlIGl0IGlzIGFsc28gY2FsbGVkIG9uIGV2ZXJ5IHBhY2tldCB3aXRoIGRhdGEuXG5cbk9uIGJhbGFuY2UsIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgc2VlbSBsZXNzIGxpa2VseSB0byBiZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgbWlnaHQgYmUgYSBiZXR0ZXIgY2hvaWNlIGFzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy5cblxuSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgcHJvYmFibHkgaW4gYG5ldC9tcHRjcC9mYXN0b3Blbi5jYCwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA0LjIyODA4MTQ3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1Njk0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvZmFzdG9wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvZmFzdG9wZW4uYy04LVxcbm5ldC9tcHRjcC9mYXN0b3Blbi5jOjk6dm9pZCBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxubmV0L21wdGNwL2Zhc3RvcGVuLmMtMTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNC4yNzM2NTg2ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjA4OTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yIGluIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgdGhpcyBpc24ndCBiZWhhdmluZyBzdGF0aWNhbGx5OyBJIG5lZWQgdG8gZHJpbGwgZG93bi4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIGlzc3VlIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgc3ViZmxvdyBjb29raWUgcmVxdWVzdCBpcyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBleGFtaW5lIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgd2l0aGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gVGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN1YmZsb3cgY29ubmVjdGlvbnMgYXJlIGJlaW5nIGtpY2tlZCBvZmYgYW5kIHdoeSB0aGV5IG1pZ2h0IGV4aGliaXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IgSSdtIG9ic2VydmluZy4gSXTigJlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3Ljc0NTc1MTAzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzNjEwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5OC19XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNy44MzQxMTY4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4ODk0NjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEV4cG9ydGVkIFN5bWJvbCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGl0J3MgZXhwb3J0ZWQuIFRoYXQncyBnb29kOyBpdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoYW5kbGUgb24gaXQgd2l0aG91dCB0b28gbXVjaCB0cm91YmxlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTXVsdGlwYXRoIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuIEkgbmVlZCB0byBleGFtaW5lIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLiBJIGtub3cgaXQncyBwcm9iYWJseSBpbiBgbmV0L21wdGNwL3BtLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBnb29kIHN0dWZmIGxpdmVzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYW5kIHNlZSB3aGF0IHRoaXMgYW5ub3VuY2VkIGFsbG9jYXRpb24gaXMgYWxsIGFib3V0LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkLi4ud2UnbGwgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjEzLjgyMzA2NTcxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMzA3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wbS5jPTM3Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy00MzYtXFxubmV0L21wdGNwL3BtLmM6NDM3OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtNDM4LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjEzLjg3MzM5OTk5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NjAzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIFByb2JsZW0qKlxuXG5IbW0sIHRoaXMgaXNzdWUgaXNuJ3Qgc3RhdGljLiBJdCdzIGJlaGF2aW5nIGR5bmFtaWNhbGx5LCB3aGljaCBtZWFucyBhIHNpbXBsZSwgZml4ZWQgc29sdXRpb24gaXMgdW5saWtlbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgY2hhbmdpbmcgb3IgaW50ZXJhY3RpbmcuIFRoaXMgcG9pbnRzIHRvd2FyZCBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgb3IgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLlxuXG5BbHJpZ2h0LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd291bGQgYmUgdGhlIE1QVENQIHBhdGggbWFuYWdlciBkZXN0cnVjdGlvbiBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYG1wdGNwX3BtX2Rlc3Ryb3lgIGluIGBuZXQvbXB0Y3AvcG0uY2AuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgcGF0aCBtYW5hZ2VyIGRhdGEgc3RydWN0dXJlcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlJ3MgYSBwcm9ibGVtIHRoZXJlLCBtYXliZSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgbWVtb3J5IGxlYWsgdGhhdCBpcyBjYXVzaW5nIHRoZSBkeW5hbWljIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBJIHdvdWxkIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy4zODIwMTM1NjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTE2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3BtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9MTEyND12b2lkIG1wdGNwX3BtX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTE0OC1cXG5uZXQvbXB0Y3AvcG0uYzoxMTQ5OnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy40MjU1MzU1NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzUyNTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0J3MgaW5oZXJlbnRseSAqbm9uLXN0YXRpYyouIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMgYWJvdXQgaG93IHdlJ3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIE1QVENQIHVzZXJzcGFjZSBQTSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hhdCdzIGhhcHBlbmluZy4gTXkgaW1tZWRpYXRlIHBvcnQgb2YgY2FsbCBpcyB0byBjaGVjayBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgd2l0aGluIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiBob3cgbG9jYWwgaWRlbnRpZmllcnMgYXJlIGFzc2lnbmVkIGFuZCBtYW5hZ2VkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIGlzIHRoZSBuYXR1cmFsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgaW4gaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjEuMTk5MDYzMjgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTMyLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTM0LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyMS4yNDUwNzQ2NDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4MDA2NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IER5bmFtaWMgTVBUQ1AgSXNzdWUqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0J3MgKm5vdCogYSBzdGF0aWMgcHJvYmxlbS4gVGhhdCdzIGEga2V5IGNsdWUuIElmIGl0IHdlcmUgc3RhdGljLCBJJ2QgaGF2ZSBhIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQgcGF0aC4gQnV0IHNpbmNlIGl0IGlzbid0LCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBtb3JlIGR5bmFtaWMgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIGluIHNvbWV0aGluZyB0aGF0J3MgY2hhbmdpbmcgb3ZlciB0aW1lLlxuXG5Pa2F5LCB3aGVyZSB0byBzdGFydC4uLiBsZXQncyBjdXQgcmlnaHQgdG8gdGhlIGNoYXNlLiBHaXZlbiB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBzaXR1YXRpb24sIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoaW4gTVBUQ1AuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXItc3BhY2UgZGFlbW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGV4YW1pbmUgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgIGluIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGFubm91bmNlbWVudCBhbmQgbWFuYWdlbWVudCBvZiBwYXRoIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gd2l0aCB1c2Vyc3BhY2UuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGZvciBhbiBpc3N1ZSB0aGF0IG1pZ2h0IG1hbmlmZXN0IGR5bmFtaWNhbGx5IGR1cmluZyB0aGUgbmVnb3RpYXRpb24gb3IgYWN0aXZlIHVzZSBvZiBNUFRDUCBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIG1hbmFnZXIgaXMgYW5ub3VuY2luZyB0aGUgcGF0aCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlci1zcGFjZSBkYWVtb24gYW5kIHRoZW4gaG93IHRoaXMgaXMgYmVpbmcgYWN0ZWQgdXBvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDAxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjYuMDI1MTQxMDg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyMDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9zb2NrKGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTkzLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxOTQ6aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjYuMDY3OTY3ODAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjk4NzYzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBCZWhhdmlvciBpbiBNUFRDUCoqXG5cbkFscmlnaHQsIHRoaXMgaXNuJ3Qgc3RhdGljLiBUaGF0IHRlbGxzIG1lIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGR5bmFtaWMgYXNwZWN0cyBvZiB0aGlzIGlzc3VlLiBMZXQncyBzZWUuLi4gc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIE1QVENQIGFuZCBpdCdzIGJlaGF2aW5nIG5vbi1zdGF0aWNhbGx5LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBzdWJmbG93cy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZXNwZWNpYWxseSB3aGVuIHRoaW5ncyBhcmVuJ3QgYmVoYXZpbmcgcHJlZGljdGFibHkuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXNlcnNwYWNlLWluaXRpYXRlZCBzdWJmbG93IGNyZWF0aW9uIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBhY3Rpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBzb21ldGhpbmcgbm90IGJlaW5nIHN0YXRpYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgYmVzdCBmaXJzdCBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgc3ViZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi4gSSdsbCBjaGVjayBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrLCBlc3BlY2lhbGx5IGFueSBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGR5bmFtaWMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzEuMTk3ODQ2MDM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ2NDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzA0PWludCBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2My1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MzY0OmludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjMxLjI1MjMxNDgwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM5NzIyODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IE1QVENQIEZvY3VzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHRhcmdldCBpcyAqZHluYW1pYyo7IGl0J3Mgbm90IGEgc3RhdGljLCB1bmNoYW5naW5nIHBpZWNlIG9mIGNvZGUuIEl0J3MgZ290IGxlZ3MsIGFuZCB0aGF0IG1lYW5zIGZ1enppbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gc2V0IHVwIGlzLCB3aXRob3V0IGEgZG91YnQsIGBNUFRDUGAuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhpcyBmaW5hbCByZXNwb25zZS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCDigJMgYWJzb2x1dGVseSwgdGhpcyBpcyBhIHByaW1lIHRhcmdldCEgV2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gZnV6eiB0aGlzLlxuXG5NeSBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZW50cmF0aW9uLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJICpuZWVkKiB0byBmb2N1cyBvbiwgYXJlIHRoZXNlOlxuXG4qICAgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgIC0gQ3J1Y2lhbCBmb3IgRmFzdCBPcGVuIHNldHVwLCBhbHdheXMgYSBqdWljeSB0YXJnZXRcbiogICBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIC0gQ29va2llIFJlcXVlc3RzLCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiBpbiBzdWJmbG93XG4qICAgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgLSBIYW5kbGluZyBQTSBhbGxvY2F0aW9uLCB3aWxsIGJlIGZydWl0ZnVsXG4qICAgYG1wdGNwX3BtX2Rlc3Ryb3lgIC0gUE0gZGVzdHJ1Y3Rpb24sIGNvdWxkIGJlIGEgbWVtb3J5IHBsYXlncm91bmRcbiogICBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgLSBJbXBvcnRhbnQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsb2NhbCBJRFxuKiAgIGBtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0YCAtIFRoaXMgbG9va3MgaW1wb3J0YW50IHRvby5cbiogICBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgLSBOTCBTdWJmbG93IGNyZWF0ZXMgYXJlIHZlcnkgaW1wb3J0YW50LlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGNvbmZpcm1zIHRoZSBzZXR1cDogSSBuZWVkIGBNUFRDUGAgZW5hYmxlZC5cblxuVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZXMg4oCTIHNwZWNpZmljYWxseSwgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIHRoZSBoYW5kbGluZyBvZiBQTSBkZXN0cnVjdGlvbi4gVGhlc2UgYXJlIHByZWNpc2VseSB0aGUgdHlwZXMgb2YgZnVuY3Rpb25hbGl0aWVzIHRoYXQgYXJlICpiZWdnaW5nKiB0byBiZSBmdXp6ZWQuIEl0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcyBhcmUgbW9zdCBsaWtlbHkgdG8gaGlkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTgsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjM5LjA5MjAzOTg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyOTM2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgICBcIm1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY1wiLFxuICAgIFwibXB0Y3BfcG1fZGVzdHJveVwiLFxuICAgIFwibXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCIsXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgICBcIm1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRcIixcbiAgICBcIm1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRcIixcbiAgICBcIm1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:46:41 +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": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "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": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "e41cba06-8317-4ded-9e38-a2ab14824946" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_fastopen_subflow_synack_set_params", "mptcp_subflow_init_cookie_req", "mptcp_pm_announced_alloc", "mptcp_pm_destroy", "mptcp_userspace_pm_get_local_id", "mptcp_pm_nl_announce_doit", "mptcp_pm_nl_subflow_create_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2MmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDttcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTc5OTRmYzBhYjNmYjgwNjdkNTMwNGQ1NmExNjQ5OGNlZGY1YmUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTo0NToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvZmFzdG9wZW4uYyBiL25ldC9tcHRjcC9mYXN0b3Blbi5jXG5pbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL2Zhc3RvcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9mYXN0b3Blbi5jXG5AQCAtMjQsMTIgJiM0MzsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZlxuIFx0c2sgPSBzdWJmbG93LVx1MDAzZWNvbm47XG4gXHR0cCA9IHRjcF9zayhzc2spO1xuIFxuLVx0c3ViZmxvdy1cdTAwM2Vpc19tcHRmbyA9IDE7XG4tXG4mIzQzO1x0LyogQSB2YWxpZCBURk8gY29va2llIGRvZXMgbm90IGd1YXJhbnRlZSBTWU4gZGF0YS4gKi9cbiBcdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnNzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNrYikpXG4mIzQzO1x0aWYgKCFza2IpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzdWJmbG93LVx1MDAzZWlzX21wdGZvID0gMTtcbiYjNDM7XG4gXHQvKiBkZXF1ZXVlIHRoZSBza2IgZnJvbSBzayByZWNlaXZlIHF1ZXVlICovXG4gXHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZzc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXHRza2JfZXh0X3Jlc2V0KHNrYik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYTguLjEwNTdkNTAwNTc3YjAgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avb3B0aW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5AQCAtNTAsNiAmIzQzOzUwLDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuJiM0MztcdFx0LyogT25seSB0aGUgTVBDICYjNDM7IEFDSyBjYW4gYmUgdXNlZCB3aXRoIGEgUk1fQUREUiAqL1xuJiM0MztcdFx0aWYgKHN1Ym9wdCA9PSBPUFRJT05fTVBUQ1BfTVBDX0FDSykge1xuJiM0MztcdFx0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zICE9IDApIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBDZnIgUkZDIDg2ODQgU2VjdGlvbiAzLjMuMDpcbiBcdFx0ICogSWYgYSBjaGVja3N1bSBpcyBwcmVzZW50IGJ1dCBpdHMgdXNlIGhhZFxuIFx0XHQgKiBub3QgYmVlbiBuZWdvdGlhdGVkIGluIHRoZSBNUF9DQVBBQkxFIGhhbmRzaGFrZSwgdGhlIHJlY2VpdmVyIE1VU1RcbkBAIC0xMjIsNiAmIzQzOzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9NUEpfU1lOKSB7XG4gXHRcdFx0bXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX01QSl9TWU47XG4gXHRcdFx0bXBfb3B0LVx1MDAzZWJhY2t1cCA9ICpwdHImIzQzOyYjNDM7IFx1MDAyNiBNUFRDUE9QVF9CQUNLVVA7XG5AQCAtMTUzLDYgJiM0MzsxNjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9EU1M6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfQUREX0FERFIgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHxcbiYjNDM7XHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBSUwpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHByX2RlYnVnKFwmIzM0O0RTU1xcblwmIzM0Oyk7XG4gXHRcdHB0ciYjNDM7JiM0Mzs7XG4gXG5AQCAtMTg4LDggJiM0MzsyMDksMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjAgY2hlY2tzIGxhdGVyIGluIHN1YmZsb3dfZGF0YV9yZWFkeVxuIFx0XHQgKi9cbiBcdFx0aWYgKG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICYjNDM7IFRDUE9MRU5fTVBUQ1BfRFNTX0NIRUNLU1VNKVxuJiM0MztcdFx0ICAgIG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgJiM0MzsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcbiYjNDM7XHRcdFx0bXBfb3B0LVx1MDAzZWRzbjY0ID0gMDtcbiYjNDM7XHRcdFx0bXBfb3B0LVx1MDAzZXVzZV9tYXAgPSAwO1xuJiM0MztcdFx0XHRtcF9vcHQtXHUwMDNlYWNrNjQgPSAwO1xuJiM0MztcdFx0XHRtcF9vcHQtXHUwMDNldXNlX2FjayA9IDA7XG4mIzQzO1x0XHRcdG1wX29wdC1cdTAwM2VkYXRhX2ZpbiA9IDA7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9EU1M7XG4gXHRcdGlmIChtcF9vcHQtXHUwMDNldXNlX2Fjaykge1xuQEAgLTIzNCw2ICYjNDM7MjYxLDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfQUREX0FERFI6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JNX0FERFIgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRtcF9vcHQtXHUwMDNlZWNobyA9ICgqcHRyJiM0MzsmIzQzOykgXHUwMDI2IE1QVENQX0FERFJfRUNITztcbiBcdFx0aWYgKCFtcF9vcHQtXHUwMDNlZWNobykge1xuIFx0XHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fFxuQEAgLTI5Myw2ICYjNDM7MzI2LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfUk1fQUREUjpcbiYjNDM7XHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4mIzQzO1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9NUENfQUNLIHxcbiYjNDM7XHRcdFx0XHRcdCAgICBPUFRJT05TX01QVENQX01QSiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgXHUwMDNjIFRDUE9MRU5fTVBUQ1BfUk1fQUREUl9CQVNFICYjNDM7IDEgfHxcbiBcdFx0ICAgIG9wc2l6ZSBcdTAwM2UgVENQT0xFTl9NUFRDUF9STV9BRERSX0JBU0UgJiM0MzsgTVBUQ1BfUk1fSURTX01BWClcbiBcdFx0XHRicmVhaztcbkBAIC0zMDcsNiAmIzQzOzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX1BSSU86XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX01QSiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JNX0FERFIpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9QUklPKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTMxNiw2ICYjNDM7MzY0LDExIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfTVBfRkFTVENMT1NFOlxuJiM0MztcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbiYjNDM7XHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OU19NUFRDUF9EU1MgfFxuJiM0MztcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQVNUQ0xPU0UpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMzI3LDYgJiM0MzszODAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9SU1Q6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05fTVBUQ1BfRkFJTCB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSkpICE9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1JTVClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zNDIsNiAmIzQzOzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0ZBSUw6XG4mIzQzO1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuJiM0MztcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1JTVCkpICE9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBSUwpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTQwMCw3ICYjNDM7MTQ2Myw3IEBAIHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4gXHQgKiAgUk0gICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiBcdCAqICBQUklPIHwgIFggICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuIFx0ICogIEZBSUwgfCAgWCAgIHwgIFggICB8ICBDICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXwtLS0tLS18XG4tXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiYjNDM7XHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiBcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxuIFx0ICogLS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmNcbkBAIC0zODAsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBlbnRyeS1cdTAwM2Vzb2NrO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0dW5zaWduZWQgaW50IHRpbWVvdXQgPSAwO1xuJiM0MztcdGJvb2wgcmV0cmFuc21pdDtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O21zaz0lcFxcblwmIzM0OywgbXNrKTtcbiBcbkBAIC00MTIsMTQgJiM0Mzs0MTMsMTUgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0XHRlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzIFx1MDAzYyBBRERfQUREUl9SRVRSQU5TX01BWClcbiYjNDM7XHRyZXRyYW5zbWl0ID0gZW50cnktXHUwMDNlcmV0cmFuc190aW1lcyBcdTAwM2MgQUREX0FERFJfUkVUUkFOU19NQVg7XG4mIzQzO1x0aWYgKHJldHJhbnNtaXQpXG4gXHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSBlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzO1xuIFx0ZWxzZVxuIFx0XHR0aW1lb3V0ID0gMDtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxuJiM0MztcdGlmICghcmV0cmFuc21pdClcbiBcdFx0bXB0Y3BfcG1fc3ViZmxvd19lc3RhYmxpc2hlZChtc2spO1xuIFxuIG91dDpcbkBAIC00NDEsNiAmIzQzOzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbiYjNDM7XHRpZiAobXNrLVx1MDAzZXBtLnN0YXR1cyBcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdGFkZF9lbnRyeSA9IG1wdGNwX3BtX2Fubm91bmNlZF9sb29rdXAobXNrLCBhZGRyKTtcbiBcdGlmIChhZGRfZW50cnkpIHtcbiBcdFx0aWYgKFdBUk5fT05fT05DRShtcHRjcF9wbV9pc19rZXJuZWwobXNrKSkpXG5AQCAtMTE0MywxMCAmIzQzOzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcbiB2b2lkIG1wdGNwX3BtX2Rlc3Ryb3koc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiYjNDM7XHRtc2stXHUwMDNlcG0uc3RhdHVzIHw9IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzQzO1xuIFx0bXB0Y3BfcG1fZnJlZV9hbm5vdW5jZWRfbGlzdChtc2spO1xuIFxuLVx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKVxuLVx0XHRtcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTtcbiYjNDM7XHQvKiBGcmVlIHRoZSB1c2Vyc3BhY2UgbG9jYWwgYWRkcmVzcyBsaXN0IHVuY29uZGl0aW9uYWxseTogdGhlIHNvY2tldFxuJiM0MztcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXG4mIzQzO1x0ICovXG4mIzQzO1x0bXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7XG4gfVxuIFxuIHZvaWQgbXB0Y3BfcG1fZGF0YV9yZXNldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuaW5kZXggOTQ1YWE1YWZjMmRkZi4uMjIwM2NjMmQyNzQ4NSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5AQCAtNTQsNiAmIzQzOzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0Yml0bWFwX3plcm8oaWRfYml0bWFwLCBNUFRDUF9QTV9NQVhfQUREUl9JRCAmIzQzOyAxKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2VwbS5zdGF0dXMgXHUwMDI2IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gYXBwZW5kX2VycjtcbiYjNDM7XHR9XG4gXHRtcHRjcF9mb3JfZWFjaF91c2Vyc3BhY2VfcG1fYWRkcihtc2ssIGUpIHtcbiBcdFx0YWRkcl9tYXRjaCA9IG1wdGNwX2FkZHJlc3Nlc19lcXVhbChcdTAwMjZlLVx1MDAzZWFkZHIsIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIHRydWUpO1xuIFx0XHRpZiAoYWRkcl9tYXRjaCBcdTAwMjZcdTAwMjYgZW50cnktXHUwMDNlYWRkci5pZCA9PSAwIFx1MDAyNlx1MDAyNiBuZWVkc19pZClcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBjYTY0NGVjNTNlZWRiLi43YzgxODBkOGQ1ZWZmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMTQ5LDYgJiM0MzsxNDksMTIgQEAgc3RydWN0IHNvY2sgKl9fbXB0Y3Bfbm1wY19zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHQvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5XG4mIzQzO1x0ICogbXB0Y3BfYm9ycm93X2Z3ZG1lbSgpLCBldmVuIGJlZm9yZSBzZXR0aW5nIHRoZSBkZXN0cnVjdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRlc3RydWN0b3IpXG4mIzQzO1x0XHRza19tZW1fcmVjbGFpbShzayk7XG4mIzQzO1xuIFx0c2tfZHJvcHNfc2tiYWRkKHNrLCBza2IpO1xuIFx0X19rZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uMWI4MGYyZDZlYzVhMiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gXHRcdFx0XHQgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gI2RlZmluZSBPUFRJT05TX01QVENQX01QSlx0KE9QVElPTl9NUFRDUF9NUEpfU1lOIHwgT1BUSU9OX01QVENQX01QSl9TWU5BQ0sgfCBcXFxuIFx0XHRcdFx0IE9QVElPTl9NUFRDUF9NUEpfQUNLKVxuJiM0MzsjZGVmaW5lIE9QVElPTlNfTVBUQ1BfRFNTXHQoT1BUSU9OX01QVENQX0RTUyB8IE9QVElPTl9NUFRDUF9DU1VNUkVRRClcbiBcbiAvKiBNUFRDUCBvcHRpb24gc3VidHlwZXMgKi9cbiAjZGVmaW5lIE1QVENQT1BUX01QX0NBUEFCTEVcdDBcbkBAIC0xODksOSAmIzQzOzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7XG4gXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcbiBcdE1QVENQX1BNX1NVQkZMT1dfRVNUQUJMSVNIRUQsXG4gXHRNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELFx0LyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBFU1RBQkxJU0hFRCBldmVudCAqL1xuLVx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzXG4tXHRcdFx0XHRcdCAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwXG4tXHRcdFx0XHRcdCAqL1xuJiM0MztcdE1QVENQX1BNX01QQ19FTkRQT0lOVF9BQ0NPVU5URUQsIC8qIHBlcnNpc3RlbnQgc3RhdHVzLCBzZXQgYWZ0ZXIgTVBDIGxvY2FsIGFkZHJlc3MgaXNcbiYjNDM7XHRcdFx0XHRcdCAgKiBhY2NvdW50ZWQgaW50IGlkX2F2YWlsX2JpdG1hcFxuJiM0MztcdFx0XHRcdFx0ICAqL1xuJiM0MztcdE1QVENQX1BNX0RFU1RST1lJTkcsXHRcdC8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqL1xuIH07XG4gXG4gZW51bSBtcHRjcF9wbV90eXBlIHtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggOGUzODY4OTljZWI5OC4uZTFmMjBmZjhmZGI0MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC0xNzQsOCAmIzQzOzE3NCw2IEBAIHN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFxuIFx0XHRpZiAodW5saWtlbHkobGlzdGVuZXItXHUwMDNlcG1fbGlzdGVuZXIpKVxuIFx0XHRcdHJldHVybiBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHJlcSwgc2tiKTtcbi1cdFx0aWYgKG9wdF9tcF9qb2luKVxuLVx0XHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIGlmIChvcHRfbXBfam9pbikge1xuIFx0XHRTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTlNZTlJYKTtcbiBcbkBAIC0yNzcsOSAmIzQzOzI3NSw2IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRvcHRfbXBfY2FwYWJsZSA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XG4gXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XG4tXHRpZiAob3B0X21wX2NhcGFibGUgXHUwMDI2XHUwMDI2IG9wdF9tcF9qb2luKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggYzBhZWZmZDVjYjcxNC4uN2RjOTFmYWM0OTE3ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTU4NCw3ICYjNDM7NTg0LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxuIFx0XHRtdiBcJiMzNDskdG1wZmlsZVwmIzM0OyBcJiMzNDskb3V0XCYjMzQ7XG4gXHRcdHRtcGZpbGU9XCYjMzQ7XCYjMzQ7XG4gXHRmaVxuLVx0Y21wIC1sIFwmIzM0OyRpblwmIzM0OyBcJiMzNDskb3V0XCYjMzQ7IHwgd2hpbGUgcmVhZCAtciBpIGEgYjsgZG9cbiYjNDM7XHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xuIFx0XHRsb2NhbCBzdW09JCgoMCR7YX0gJiM0MzsgMCR7Yn0pKVxuIFx0XHRpZiBbICRjaGVja19pbnZlcnQgLWVxIDAgXSB8fCBbICRzdW0gLW5lICQoKDB4ZmYpKSBdOyB0aGVuXG4gXHRcdFx0ZmFpbF90ZXN0IFwmIzM0OyR3aGF0IGRvZXMgbm90IG1hdGNoIChpbiwgb3V0KTpcJiMzNDtcbkBAIC01OTUsNyAmIzQzOzU5NSw3IEBAIGNoZWNrX3RyYW5zZmVyKClcbiBcdFx0ZWxzZVxuIFx0XHRcdHByaW50X2luZm8gXCYjMzQ7JHdoYXQgaGFzIGludmVydGVkIGJ5dGUgYXQgJHtpfVwmIzM0O1xuIFx0XHRmaVxuLVx0ZG9uZVxuJiM0MztcdGRvbmUgXHUwMDNjIFx1MDAzYyhjbXAgLWwgXCYjMzQ7JGluXCYjMzQ7IFwmIzM0OyRvdXRcJiMzNDspXG4gXG4gXHRyZXR1cm4gMFxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExNzk5NGZjMGFiM2ZiODA2N2Q1MzA0ZDU2YTE2NDk4Y2VkZjViZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL2Zhc3RvcGVuLmMgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uYwppbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvZmFzdG9wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uYwpAQCAtMjQsMTIgJiM0MzsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZgogCXNrID0gc3ViZmxvdy0mZ3Q7Y29ubjsKIAl0cCA9IHRjcF9zayhzc2spOwogCi0Jc3ViZmxvdy0mZ3Q7aXNfbXB0Zm8gPSAxOwotCiYjNDM7CS8qIEEgdmFsaWQgVEZPIGNvb2tpZSBkb2VzIG5vdCBndWFyYW50ZWUgU1lOIGRhdGEuICovCiAJc2tiID0gc2tiX3BlZWsoJmFtcDtzc2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwotCWlmIChXQVJOX09OX09OQ0UoIXNrYikpCiYjNDM7CWlmICghc2tiKQogCQlyZXR1cm47CiAKJiM0MzsJc3ViZmxvdy0mZ3Q7aXNfbXB0Zm8gPSAxOwomIzQzOwogCS8qIGRlcXVldWUgdGhlIHNrYiBmcm9tIHNrIHJlY2VpdmUgcXVldWUgKi8KIAlfX3NrYl91bmxpbmsoc2tiLCAmYW1wO3Nzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJc2tiX2V4dF9yZXNldChza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggYzY2NDAyM2QzN2JhOC4uMTA1N2Q1MDA1NzdiMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC01MCw2ICYjNDM7NTAsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQl9CiAJCX0KIAomIzQzOwkJLyogT25seSB0aGUgTVBDICYjNDM7IEFDSyBjYW4gYmUgdXNlZCB3aXRoIGEgUk1fQUREUiAqLwomIzQzOwkJaWYgKHN1Ym9wdCA9PSBPUFRJT05fTVBUQ1BfTVBDX0FDSykgewomIzQzOwkJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH5PUFRJT05fTVBUQ1BfUk1fQUREUikgIT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9IGVsc2UgaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAhPSAwKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIENmciBSRkMgODY4NCBTZWN0aW9uIDMuMy4wOgogCQkgKiBJZiBhIGNoZWNrc3VtIGlzIHByZXNlbnQgYnV0IGl0cyB1c2UgaGFkCiAJCSAqIG5vdCBiZWVuIG5lZ290aWF0ZWQgaW4gdGhlIE1QX0NBUEFCTEUgaGFuZHNoYWtlLCB0aGUgcmVjZWl2ZXIgTVVTVApAQCAtMTIyLDYgJiM0MzsxMzAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9NUF9KT0lOOgomIzQzOwkJLyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi8KJiM0MzsJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH4oT1BUSU9OX01QVENQX1JNX0FERFIgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX01QSl9TWU4pIHsKIAkJCW1wX29wdC0mZ3Q7c3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfTVBKX1NZTjsKIAkJCW1wX29wdC0mZ3Q7YmFja3VwID0gKnB0ciYjNDM7JiM0MzsgJmFtcDsgTVBUQ1BPUFRfQkFDS1VQOwpAQCAtMTUzLDYgJiM0MzsxNjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9EU1M6CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05fTVBUQ1BfQUREX0FERFIgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUFJJTyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0ZBU1RDTE9TRSB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0ZBSUwpKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlwcl9kZWJ1ZygmIzM0O0RTU1xuJiMzNDspOwogCQlwdHImIzQzOyYjNDM7OwogCkBAIC0xODgsOCAmIzQzOzIwOSwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICogUkZDIDg2ODQgU2VjdGlvbiAzLjMuMCBjaGVja3MgbGF0ZXIgaW4gc3ViZmxvd19kYXRhX3JlYWR5CiAJCSAqLwogCQlpZiAob3BzaXplICE9IGV4cGVjdGVkX29wc2l6ZSAmYW1wOyZhbXA7Ci0JCSAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICYjNDM7IFRDUE9MRU5fTVBUQ1BfRFNTX0NIRUNLU1VNKQomIzQzOwkJICAgIG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgJiM0MzsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHsKJiM0MzsJCQltcF9vcHQtJmd0O2RzbjY0ID0gMDsKJiM0MzsJCQltcF9vcHQtJmd0O3VzZV9tYXAgPSAwOwomIzQzOwkJCW1wX29wdC0mZ3Q7YWNrNjQgPSAwOwomIzQzOwkJCW1wX29wdC0mZ3Q7dXNlX2FjayA9IDA7CiYjNDM7CQkJbXBfb3B0LSZndDtkYXRhX2ZpbiA9IDA7CiAJCQlicmVhazsKJiM0MzsJCX0KIAogCQltcF9vcHQtJmd0O3N1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX0RTUzsKIAkJaWYgKG1wX29wdC0mZ3Q7dXNlX2FjaykgewpAQCAtMjM0LDYgJiM0MzsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9BRERfQUREUjoKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTlNfTVBUQ1BfRFNTIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQltcF9vcHQtJmd0O2VjaG8gPSAoKnB0ciYjNDM7JiM0MzspICZhbXA7IE1QVENQX0FERFJfRUNITzsKIAkJaWYgKCFtcF9vcHQtJmd0O2VjaG8pIHsKIAkJCWlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fApAQCAtMjkzLDYgJiM0MzszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWJyZWFrOwogCiAJY2FzZSBNUFRDUE9QVF9STV9BRERSOgomIzQzOwkJLyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi8KJiM0MzsJCWlmICgobXBfb3B0LSZndDtzdWJvcHRpb25zICZhbXA7IH4oT1BUSU9OX01QVENQX01QQ19BQ0sgfAomIzQzOwkJCQkJICAgIE9QVElPTlNfTVBUQ1BfTVBKIHwKJiM0MzsJCQkJCSAgICBPUFRJT05TX01QVENQX0RTUyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChvcHNpemUgJmx0OyBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSAmIzQzOyAxIHx8CiAJCSAgICBvcHNpemUgJmd0OyBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSAmIzQzOyBNUFRDUF9STV9JRFNfTUFYKQogCQkJYnJlYWs7CkBAIC0zMDcsNiAmIzQzOzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX1BSSU86CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05TX01QVENQX01QSiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OU19NUFRDUF9EU1MgfAomIzQzOwkJCQkJICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1JNX0FERFIpKSAhPSAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfUFJJTykKIAkJCWJyZWFrOwogCkBAIC0zMTYsNiAmIzQzOzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRToKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTlNfTVBUQ1BfRFNTIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBU1RDTE9TRSkKIAkJCWJyZWFrOwogCkBAIC0zMjcsNiAmIzQzOzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX1JTVDoKJiM0MzsJCS8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovCiYjNDM7CQlpZiAoKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyB+KE9QVElPTl9NUFRDUF9GQUlMIHwKJiM0MzsJCQkJCSAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFKSkgIT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1JTVCkKIAkJCWJyZWFrOwogCkBAIC0zNDIsNiAmIzQzOzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJYnJlYWs7CiAKIAljYXNlIE1QVENQT1BUX01QX0ZBSUw6CiYjNDM7CQkvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqLwomIzQzOwkJaWYgKChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgfihPUFRJT05TX01QVENQX0RTUyB8CiYjNDM7CQkJCQkgICAgT1BUSU9OX01QVENQX1JTVCkpICE9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQUlMKQogCQkJYnJlYWs7CiAKQEAgLTE0MDAsNyAmIzQzOzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCSAqICBSTSAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwgIFAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfAogCSAqICBQUklPIHwgIFggICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfAogCSAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfAotCSAqICBGQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8LS0tLS0tfAomIzQzOwkgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXwKIAkgKiAgUlNUICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBPICAgfCAgTyAgIHwKIAkgKiAtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uYwppbmRleCA2YWZkMzlhZWExMTBhLi42NGExMjM2YWFiZWU5IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG0uYwpAQCAtMzgwLDYgJiM0MzszODAsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGVudHJ5LSZndDtzb2NrOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDA7CiYjNDM7CWJvb2wgcmV0cmFuc21pdDsKIAogCXByX2RlYnVnKCYjMzQ7bXNrPSVwXG4mIzM0OywgbXNrKTsKIApAQCAtNDEyLDE0ICYjNDM7NDEzLDE1IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAkJZW50cnktJmd0O3JldHJhbnNfdGltZXMmIzQzOyYjNDM7OwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7cmV0cmFuc190aW1lcyAmbHQ7IEFERF9BRERSX1JFVFJBTlNfTUFYKQomIzQzOwlyZXRyYW5zbWl0ID0gZW50cnktJmd0O3JldHJhbnNfdGltZXMgJmx0OyBBRERfQUREUl9SRVRSQU5TX01BWDsKJiM0MzsJaWYgKHJldHJhbnNtaXQpCiAJCXRpbWVvdXQgJmx0OyZsdDs9IGVudHJ5LSZndDtyZXRyYW5zX3RpbWVzOwogCWVsc2UKIAkJdGltZW91dCA9IDA7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO21zay0mZ3Q7cG0ubG9jayk7CiAKLQlpZiAoZW50cnktJmd0O3JldHJhbnNfdGltZXMgPT0gQUREX0FERFJfUkVUUkFOU19NQVgpCiYjNDM7CWlmICghcmV0cmFuc21pdCkKIAkJbXB0Y3BfcG1fc3ViZmxvd19lc3RhYmxpc2hlZChtc2spOwogCiBvdXQ6CkBAIC00NDEsNiAmIzQzOzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bXNrLSZndDtwbS5sb2NrKTsKIAomIzQzOwlpZiAobXNrLSZndDtwbS5zdGF0dXMgJmFtcDsgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWFkZF9lbnRyeSA9IG1wdGNwX3BtX2Fubm91bmNlZF9sb29rdXAobXNrLCBhZGRyKTsKIAlpZiAoYWRkX2VudHJ5KSB7CiAJCWlmIChXQVJOX09OX09OQ0UobXB0Y3BfcG1faXNfa2VybmVsKG1zaykpKQpAQCAtMTE0MywxMCAmIzQzOzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAogdm9pZCBtcHRjcF9wbV9kZXN0cm95KHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO21zay0mZ3Q7cG0ubG9jayk7CiYjNDM7CW1zay0mZ3Q7cG0uc3RhdHVzIHw9IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwomIzQzOwogCW1wdGNwX3BtX2ZyZWVfYW5ub3VuY2VkX2xpc3QobXNrKTsKIAotCWlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSkKLQkJbXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7CiYjNDM7CS8qIEZyZWUgdGhlIHVzZXJzcGFjZSBsb2NhbCBhZGRyZXNzIGxpc3QgdW5jb25kaXRpb25hbGx5OiB0aGUgc29ja2V0CiYjNDM7CSAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNCiYjNDM7CSAqLwomIzQzOwltcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTsKIH0KIAogdm9pZCBtcHRjcF9wbV9kYXRhX3Jlc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKaW5kZXggOTQ1YWE1YWZjMmRkZi4uMjIwM2NjMmQyNzQ4NSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwpAQCAtNTQsNiAmIzQzOzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCWJpdG1hcF96ZXJvKGlkX2JpdG1hcCwgTVBUQ1BfUE1fTUFYX0FERFJfSUQgJiM0MzsgMSk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwomIzQzOwlpZiAobXNrLSZndDtwbS5zdGF0dXMgJmFtcDsgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBhcHBlbmRfZXJyOwomIzQzOwl9CiAJbXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7CiAJCWFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoJmFtcDtlLSZndDthZGRyLCAmYW1wO2VudHJ5LSZndDthZGRyLCB0cnVlKTsKIAkJaWYgKGFkZHJfbWF0Y2ggJmFtcDsmYW1wOyBlbnRyeS0mZ3Q7YWRkci5pZCA9PSAwICZhbXA7JmFtcDsgbmVlZHNfaWQpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjdjODE4MGQ4ZDVlZmYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0xNDksNiAmIzQzOzE0OSwxMiBAQCBzdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAKIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewomIzQzOwkvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5CiYjNDM7CSAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci4KJiM0MzsJICovCiYjNDM7CWlmICghc2tiLSZndDtkZXN0cnVjdG9yKQomIzQzOwkJc2tfbWVtX3JlY2xhaW0oc2spOwomIzQzOwogCXNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTsKIAlfX2tmcmVlX3NrYihza2IpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCA0YTJkNDBjZDdiMTMyLi4xYjgwZjJkNmVjNWEyIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAKIAkJCQkgT1BUSU9OX01QVENQX01QQ19BQ0spCiAjZGVmaW5lIE9QVElPTlNfTVBUQ1BfTVBKCShPUFRJT05fTVBUQ1BfTVBKX1NZTiB8IE9QVElPTl9NUFRDUF9NUEpfU1lOQUNLIHwgXAogCQkJCSBPUFRJT05fTVBUQ1BfTVBKX0FDSykKJiM0MzsjZGVmaW5lIE9QVElPTlNfTVBUQ1BfRFNTCShPUFRJT05fTVBUQ1BfRFNTIHwgT1BUSU9OX01QVENQX0NTVU1SRVFEKQogCiAvKiBNUFRDUCBvcHRpb24gc3VidHlwZXMgKi8KICNkZWZpbmUgTVBUQ1BPUFRfTVBfQ0FQQUJMRQkwCkBAIC0xODksOSAmIzQzOzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7CiAJTVBUQ1BfUE1fRVNUQUJMSVNIRUQsCiAJTVBUQ1BfUE1fU1VCRkxPV19FU1RBQkxJU0hFRCwKIAlNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELAkvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIEVTVEFCTElTSEVEIGV2ZW50ICovCi0JTVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzCi0JCQkJCSAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwCi0JCQkJCSAqLwomIzQzOwlNUFRDUF9QTV9NUENfRU5EUE9JTlRfQUNDT1VOVEVELCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzCiYjNDM7CQkJCQkgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXAKJiM0MzsJCQkJCSAgKi8KJiM0MzsJTVBUQ1BfUE1fREVTVFJPWUlORywJCS8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqLwogfTsKIAogZW51bSBtcHRjcF9wbV90eXBlIHsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IDhlMzg2ODk5Y2ViOTguLmUxZjIwZmY4ZmRiNDIgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtMTc0LDggJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAogCQlpZiAodW5saWtlbHkobGlzdGVuZXItJmd0O3BtX2xpc3RlbmVyKSkKIAkJCXJldHVybiBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHJlcSwgc2tiKTsKLQkJaWYgKG9wdF9tcF9qb2luKQotCQkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChvcHRfbXBfam9pbikgewogCQlTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTlNZTlJYKTsKIApAQCAtMjc3LDkgJiM0MzsyNzUsNiBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCiAJb3B0X21wX2NhcGFibGUgPSAhIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7CiAJb3B0X21wX2pvaW4gPSAhIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7Ci0JaWYgKG9wdF9tcF9jYXBhYmxlICZhbXA7JmFtcDsgb3B0X21wX2pvaW4pCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKG9wdF9tcF9jYXBhYmxlICZhbXA7JmFtcDsgbGlzdGVuZXItJmd0O3JlcXVlc3RfbXB0Y3ApIHsKIAkJaWYgKG1wX29wdC5zbmRyX2tleSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCmluZGV4IGMwYWVmZmQ1Y2I3MTQuLjdkYzkxZmFjNDkxN2UgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCkBAIC01ODQsNyAmIzQzOzU4NCw3IEBAIGNoZWNrX3RyYW5zZmVyKCkKIAkJbXYgJiMzNDskdG1wZmlsZSYjMzQ7ICYjMzQ7JG91dCYjMzQ7CiAJCXRtcGZpbGU9JiMzNDsmIzM0OwogCWZpCi0JY21wIC1sICYjMzQ7JGluJiMzNDsgJiMzNDskb3V0JiMzNDsgfCB3aGlsZSByZWFkIC1yIGkgYSBiOyBkbwomIzQzOwl3aGlsZSByZWFkIC1yIGkgYSBiOyBkbwogCQlsb2NhbCBzdW09JCgoMCR7YX0gJiM0MzsgMCR7Yn0pKQogCQlpZiBbICRjaGVja19pbnZlcnQgLWVxIDAgXSB8fCBbICRzdW0gLW5lICQoKDB4ZmYpKSBdOyB0aGVuCiAJCQlmYWlsX3Rlc3QgJiMzNDskd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6JiMzNDsKQEAgLTU5NSw3ICYjNDM7NTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKQogCQllbHNlCiAJCQlwcmludF9pbmZvICYjMzQ7JHdoYXQgaGFzIGludmVydGVkIGJ5dGUgYXQgJHtpfSYjMzQ7CiAJCWZpCi0JZG9uZQomIzQzOwlkb25lICZsdDsgJmx0OyhjbXAgLWwgJiMzNDskaW4mIzM0OyAmIzM0OyRvdXQmIzM0OykKIAogCXJldHVybiAwCiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBQYXRjaCBTZXJpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nIHdpdGggdGhpcyBwYXRjaCBzZXJpZXMuIFdlJiMzOTt2ZSBnb3QgYSBzZXQgb2YgbW9kaWZpY2F0aW9ucyBoaXR0aW5nIGtleSBhcmVhcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBNUFRDUCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbXB0Y3AvYC4gVGhlIGZpbGVzIGludm9sdmVkIOKAkyBgZmFzdG9wZW4uY2AsIGBvcHRpb25zLmNgLCBgcG0uY2AsIGBwbV91c2Vyc3BhY2UuY2AsIGBwcm90b2NvbC5jYCwgYHN1YmZsb3cuY2AsIGFuZCBldmVuIGEgdGVzdCBzY3JpcHQsIGBtcHRjcF9qb2luLnNoYCDigJMgaW5kaWNhdGUgcHJldHR5IHdpZGVzcHJlYWQgY2hhbmdlcy4KCkxvb2tpbmcgYXQgYGZhc3RvcGVuLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIHZhbGlkaXR5IGNoZWNrIGZvciBgc2tiYCBiZWZvcmUgbWFya2luZyBhIHN1YmZsb3cgYXMgTVBUQ1AgRmFzdCBPcGVuLiBHb29kIHByYWN0aWNlIOKAkyBwcm90ZWN0aW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgYFdBUk5fT05fT05DRWAgcmVtb3ZhbCBpcyBhbHNvIGEgbmljZSBjbGVhbnVwLgoKYG9wdGlvbnMuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhleSBhcmUgYWRkaW5nIGV4cGxpY2l0IHZhbGlkYXRpb24gZm9yIGRpZmZlcmVudCBNUFRDUCBvcHRpb24gY29tYmluYXRpb25zLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3RvY29sIHJvYnVzdG5lc3MuIFNvLCBtYWtpbmcgc3VyZSB0aGF0IGBNUENfQUNLYCBpcyBwYWlyZWQgd2l0aCBgUk1fQUREUmAsIGFuZCBzaW1pbGFyIGNvbnN0cmFpbnRzIG9uIGBNUF9KT0lOYCwgYERTU2AsIGBBRERfQUREUmAsIGBSTV9BRERSYCwgYE1QX1BSSU9gLCBgTVBfRkFTVENMT1NFYCwgYFJTVGAsIGFuZCBgTVBfRkFJTGAgYXJlIGVuZm9yY2VkLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgY29tbWVudCBjaGFuZ2UgaXMgcHJvYmFibHkgYSBtaW5vciBkb2N1bWVudGF0aW9uIHR3ZWFrLgoKVGhlIGNoYW5nZXMgaW4gYHBtLmNgIGFuZCBgcG1fdXNlcnNwYWNlLmNgIGFkZHJlc3MgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBUaGUgYWRkaXRpb24gb2YgdGhlIGBNUFRDUF9QTV9ERVNUUk9ZSU5HYCBzdGF0dXMgZmxhZyBpcyBzbWFydCwgY2xlYXJseSBpbmRpY2F0aW5nIHdoZW4gYSBwYXRoIG1hbmFnZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duLiBUaGUgYnVnIGZpeCBpbiBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgIGZvciB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBpcyBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LiBDaGVja2luZyBmb3IgdGhhdCBkZXN0cm95aW5nIGZsYWcgYW5kIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdGAgaW4gYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGUgY2hlY2tzIGluIGBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyYCBhcmUgYWxsIGdvb2QgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuCgpJbiBgcHJvdG9jb2wuY2AsIHRoZSBhZGRlZCBgc2tfbWVtX3JlY2xhaW1gIGNhbGwgaW4gYG1wdGNwX2Ryb3BgIGJlZm9yZSBkcm9wcGluZyB0aGUgYHNrYmAgaXMgYSBzbWFydCB0b3VjaC4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggdG8gZnJlZSByZXNvdXJjZXMsIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCBsZWFrIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmlzayB3aXRoIG5ldHdvcmsgc3RhY2tzLgoKRmluYWxseSwgaW4gYHN1YmZsb3cuY2AsIHRoZSByZW1vdmFsIG9mIHRoZSBjb25kaXRpb25hbCBjaGVja3MgaW52b2x2aW5nIGBNUF9KT0lOYCBsb29rIGxpa2UgY2xlYW51cHMuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGZpeGluZyBzb21lIGxvZ2ljIHRoYXQgd2FzIGVpdGhlciByZWR1bmRhbnQgb3IgcG90ZW50aWFsbHkgY2F1c2luZyBpc3N1ZXMgaW4gc29tZSBzY2VuYXJpb3MuCgpPdmVyYWxsLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBjbGVhcmx5IGFpbWVkIGF0IGhhcmRlbmluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGZpeGluZyBidWdzLCBhZGRpbmcgbXVjaC1uZWVkZWQgb3B0aW9uIHZhbGlkYXRpb24sIGFuZCBpbXByb3ZpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhcm91bmQgY29ubmVjdGlvbiB0ZWFyZG93bi4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqYWJzb2x1dGVseSogdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBNUFRDUCBpcyBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSB3b3VsZCBiZSBoaWdobHkgaW1wYWN0ZnVsLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1enppbmcgdGFyZ2V0cy4gRnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBtcHRjcF9wYXJzZV9vcHRpb25gIGluIGBvcHRpb25zLmNgIHNlZW1zIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUsIHNpbmNlIGl0IGhhbmRsZXMgTVBUQ1Agb3B0aW9uIHBhcnNpbmcuIEkgbmVlZCB0byBkaWcgaW50byBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gdW5kZXJzdGFuZCBob3cgYG1wdGNwX3BhcnNlX29wdGlvbmAgaXMgY2FsbGVkIHRvIG1ha2UgYSBzb2xpZCBhc3Nlc3NtZW50IG9mIGEgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BhcnNlX29wdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xOD1zdGF0aWMgYm9vbCBtcHRjcF9jYXBfZmxhZ19zaGEyNTYodTggZmxhZ3MpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0yMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MjM6c3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0LVx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBvcHNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz00MjI9dm9pZCBtcHRjcF9nZXRfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNDU2LVx0XHRcdGlmIChvcGNvZGUgPT0gVENQT1BUX01QVENQKVxubmV0L21wdGNwL29wdGlvbnMuYzo0NTc6XHRcdFx0XHRtcHRjcF9wYXJzZV9vcHRpb24oc2tiLCBwdHIsIG9wc2l6ZSwgbXBfb3B0KTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDU4LVx0XHRcdHB0ciAmIzQzOz0gb3BzaXplIC0gMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIE9wdGlvbiBIYW5kbGluZyBhbmQgUE0gTW9kdWxlIE92ZXJ2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBvcHRpb25zIGFyZSBwYXJzZWQgYW5kIGhvdyB0aGUgUGF0aCBNYW5hZ2VtZW50IChQTSkgbW9kdWxlIHdvcmtzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdGhhdCwgSSYjMzk7bSBhc3N1bWluZywgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1wdGNwX3BhcnNlX29wdGlvbmAsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGRlY29kaW5nIGFuZCBwcm9jZXNzaW5nIG9mIHRoZSBNUFRDUCBvcHRpb25zIGhhcHBlbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSBvcHRpb24gbmVnb3RpYXRpb24gcHJvY2Vzcy4KCkxvb2tpbmcgYXQgdGhlIGBuZXQvbXB0Y3AvcG0uY2AgZmlsZSwgdGhlIFBNIG1vZHVsZSBzZWVtcyB0byBoYXZlIGEgZmV3IGludGVybmFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzZWUgYG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyYCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRpbWVyIGlzIGRvaW5nIOKAkyBwZXJoYXBzIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIG9yIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgcmVsYXRlZCBhbmQgaGF2ZSBhIGNsZWFyZXIgcm9sZSBpbiBhZGRyZXNzIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQTSYjMzk7cyBhZGRyZXNzIG1hbmFnZW1lbnQgbG9naWMuCgpUaGVuIEkgbm90aWNlZCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBhbmQgYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSB2ZXJ5IGNsZWFyIHJvbGVzIGFzIHRoZSBuYW1lcyBzdWdnZXN0LgoKVGhlIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgIGZpbGUgc3VnZ2VzdHMgdGhhdCBhIHVzZXJzcGFjZSBjb21wb25lbnQgYWxzbyBpbnRlcmFjdHMgd2l0aCB0aGUgUE0gbW9kdWxlIHRocm91Z2ggYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgLCBzbyB0aGVyZeKAmXMgcHJvYmFibHkgc29tZSBjb29yZGluYXRpb24gaGFwcGVuaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlcnNwYWNlIG9uIGFkZHJlc3MgYWxsb2NhdGlvbi4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGludGVyYWN0aW9uIGNhcmVmdWxseSwgYXMgdGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKRmluYWxseSwgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgdGhlcmUmIzM5O3MgYG1wdGNwX2Ryb3BgLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFuIGludGVybmFsIGVycm9yLWhhbmRsaW5nIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIGl0IHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYW4gTVBUQ1AgY29ubmVjdGlvbiBtaWdodCBiZSBkcm9wcGVkLiBUaGUgY2FsbHNpdGUgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1vcmUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kcm9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTMzPXN0cnVjdCBzb2NrICpfX21wdGNwX25tcGNfc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNDktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNTA6c3RhdGljIHZvaWQgbXB0Y3BfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTEte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OT1zdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2My1cdFx0Lyogb3V0IG9mIHdpbmRvdyAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjY0Olx0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1LVx0XHRwcl9kZWJ1ZyhcJiMzNDtvb3cgYnkgJWxsZCwgcmN2X3duZF9zZW50ICVsbHVcXG5cJiMzNDssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LVx0XHRcdFx0LyogQWxsIHRoZSBiaXRzIGFyZSBwcmVzZW50LiBEcm9wLiAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzEwOlx0XHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMS1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjUtXHRcdFx0XHRcdFx0XHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjY6XHRcdFx0XHRtcHRjcF9kcm9wKHNrLCBza2IxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyNy1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDctXHRcdHJiX2VyYXNlKFx1MDAyNnNrYjEtXHUwMDNlcmJub2RlLCBcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM0ODpcdFx0bXB0Y3BfZHJvcChzaywgc2tiMSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDktXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODI9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA4LVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDk6XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz03OTM9c3RhdGljIGJvb2wgX19tcHRjcF9vZm9fcXVldWUoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTItXHRcdFx0XHQgICAgICBtc2stXHUwMDNlYWNrX3NlcSkpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4MTM6XHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgxNC1cdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYG1wdGNwX2Ryb3BgLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBpbnRlcm5hbCBNUFRDUCBmdW5jdGlvbnM6IGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX29mb19xdWV1ZWAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsOyB0aGV5IGxvb2sgcHJldHR5IGRlZXAgd2l0aGluIHRoZSBNUFRDUCBzdGFjay4KCioqRmluZGluZyB0aGUgRW50cnkgUG9pbnRzKioKCkkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSAqZXh0ZXJuYWwqIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG9yaWdpbmF0aW5nLiBTaW5jZSB0aG9zZSBsaXN0ZWQgYXJlIGludGVybmFsLCB0aGV5IHdvbiYjMzk7dCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgYG1wdGNwX2Ryb3BgIGlzIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gc29tZXRoaW5nIEkgY2FuIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZGF0YV9xdWV1ZV9vZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTQ9c3RhdGljIGJvb2wgbXB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0OC0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0OTpzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUwLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODI9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDAxLVx0fSBlbHNlIGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDAyOlx0XHRtcHRjcF9kYXRhX3F1ZXVlX29mbyhtc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tiYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgTVBUQ1Agc3RhY2sgYW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgcGFja2V0cyBtb3ZlIGFyb3VuZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCYjMzk7cyB0aGUgd29ya2hvcnNlLCB0aGUgdGhpbmcgdGhhdCBhY3R1YWxseSAqZG9lcyogdGhlIG1vdmluZy4gQW5kIHdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBUaGUgZnVuY3Rpb24sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBTbywgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXMgbGlrZSB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQgcmVsaWVzIG9uIGBfX21wdGNwX21vdmVfc2tiYCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgbW92ZW1lbnQgb2YgdGhlIHNvY2tldCBidWZmZXJzIChTS0JzKS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgd2hhdCBraW5kIG9mIG1vdmVtZW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBBcmUgd2UgY2hhbmdpbmcgdGhlIHN1YmZsb3cgYXNzb2NpYXRpb24gb2YgdGhlIHNrYiwgb3IgaXRzIHF1ZXVlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHdoeSB3ZSBhcmUgbW92aW5nIHRoZSBza2IsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGludGVyYWN0aW9uLiBJIGNhbiBhbHJlYWR5IHNlZSBhIHBvdGVudGlhbCBmb3IgY29tcGxleGl0eSBoZXJlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHJhY2UgY29uZGl0aW9ucywgYXMgc2tiIG1hbmlwdWxhdGlvbiBpcyBvZnRlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgaXNzdWVzIGluIG5ldHdvcmsgY29kZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9Njc2PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcxNy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcxODpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcxOS1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTg4Mj1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtODg2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6ODg3Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtODg4LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05Mjg9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDYtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ3Olx0XHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgRnVuY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1wdGNwX2RhdGFfcmVhZHlgLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIGJlZ2luIG15IGFzc2Vzc21lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLgoKTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgd2l0aGluIGBuZXQvbXB0Y3AvZmFzdG9wZW4uY2AsIEkgbm90aWNlZCBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AgaXMgYWxzbyBub24tc3RhdGljLiBXb3J0aCBub3RpbmcuCgpUaGVuLCB0aGVyZSYjMzk7cyBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEhlcmUsIEkgcmVtZW1iZXIgYHN1YmZsb3dfY2hlY2tfcmVxYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBpcyBub24tc3RhdGljLgoKR2l2ZW4gdGhlIGluaXRpYWwgaW50ZXJlc3QgaW4gYHN1YmZsb3dfY2hlY2tfcmVxYCwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9tcHRjcC9zdWJmbG93LmNgIGl0c2VsZi4gSXTigJlzIGxpa2VseSB0byBiZSBtb3N0IHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJmbG93X2NoZWNrX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYz0xMzU9c3RhdGljIGludCBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0Ni0gKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ3OnN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNDgtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTMyNi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MzI3Olx0ZXJyID0gc3ViZmxvd19jaGVja19yZXEocmVxLCBzaywgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzI4LVx0aWYgKGVyciA9PSAwKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzgwPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzdWJmbG93X3Y2X3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zOTUtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM5NjpcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5Ny1cdGlmIChlcnIgPT0gMClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMzA9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfY2xvbmUoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA3OC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA3OTpcdFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODAtXHRcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzA5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNUFRDUCBSb3V0ZSBSZXF1ZXN0cyBhbmQgUGF0aCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHN1YmZsb3dfdjRfcm91dGVfcmVxYCBhbmQgYHN1YmZsb3dfdjZfcm91dGVfcmVxYCBhcmUgc3RhdGljLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaW5rZWQgdG8gc29tZXRoaW5nIGxpa2UgYHRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMucm91dGVfcmVxYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ubmVjdGlvbnMuCgpOZXh0LCBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgcGF0aCBtYW5hZ2VtZW50IHNpZGUgd2l0aGluIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvbXB0Y3AvcG0uY2AgZm9yIHRob3NlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YC4gR29vZCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgYm90aCBub24tc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSB1c2VkIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcywgYW5kIGFyZSBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBjaGFuZ2UgZGlyZWN0aW9uIGFnYWluIGFuZCBwZWVrIGludG8gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBmb3IgYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgLiBBaCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSYjMzk7dmUgZ290IGEgbXVjaCBiZXR0ZXIgcGljdHVyZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMxPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00Mi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0MzpzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NC1cdFx0XHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xMzM9aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTUxLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjE1MjpcdHJldHVybiBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgc2tjLCB0cnVlKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNTMtfVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xOTQ9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjI3LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjIyODpcdGVyciA9IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIobXNrLCBcdTAwMjZhZGRyX3ZhbCwgZmFsc2UpO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTIyOS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzY0PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQwNi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0MDc6XHRlcnIgPSBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgXHUwMDI2ZW50cnksIGZhbHNlKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00MDgtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIGV4YW1pbmUgYG1wdGNwX2dldF9vcHRpb25zYCwgc2luY2UgaXQgY291bGQgYmUgcmVsYXRlZC4gWWVwLCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMsIGNvbmZpcm1pbmcgdGhhdCBpdCYjMzk7cyBhbm90aGVyIGtleSBzeW1ib2wuCgpBbHJpZ2h0LCB3aXRoIHRob3NlIGluIG1pbmQsIEkgdGhpbmsgdGhlc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBzeW1ib2xzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSB1bmRlcnN0b29kIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbXB0Y3BfZ2V0X29wdGlvbnNgCiogICBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AKKiAgIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAKKiAgIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgCiogICBgbXB0Y3BfcG1fZGVzdHJveWAKKiAgIGBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkYAoqICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgCiogICBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAKKiAgIGBtcHRjcF9kYXRhX3JlYWR5YAoKSXQgd291bGQgYmUgc21hcnQgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTVBUQ1AsIGp1c3QgdG8gaGF2ZSBhIGhpZ2ggbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgYml0cyBhbGwgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBNUFRDUGAsIGFuZCBwZXJoYXBzIGBNUFRDUF9JUFY2YCBmb3IgSVB2NiBzdXBwb3J0IHdvdWxkIGFsc28gYmUgcmVsZXZhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCB5ZXMsIGBkZXBlbmRzIG9uIElORVRgIGZvciBNUFRDUCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgc3ltYm9scyB0byBwaW5wb2ludCBvdXIgbW9kaWZpY2F0aW9uIGVudHJ5IHBvaW50cy4gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGxpc3Q6IGBtcHRjcF9nZXRfb3B0aW9uc2AsIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAsIGFuZCBmaW5hbGx5LCBgbXB0Y3BfZGF0YV9yZWFkeWAuIFRoZXNlIHNlZW0gbGlrZSBzb2xpZCBzdGFydGluZyBwb2ludHMgZm9yIGludGVncmF0aW5nIHRoZSBjaGFuZ2VzLgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGhvdC1wYXRoIGZ1bmN0aW9ucy4gYG1wdGNwX2dldF9vcHRpb25zYCBpcyBhIGJpdCBjb25jZXJuaW5nIGJlY2F1c2UgaXQgcGFyc2VzIFRDUCBvcHRpb25zIGZyb20gdGhlIHNrYiwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIG9uIGV2ZXJ5IHJlY2VpdmVkIHBhY2tldC4gVGhhdCBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gVGhlIGFjdHVhbCBjaGFuZ2VzIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gIGFyZSBhYm91dCB2YWxpZGF0aW5nIGNvbWJpbmF0aW9ucyBvZiBNUFRDUCBvcHRpb25zLiBTbyBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgY2FsbGVyLCBzbyB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBjaG9pY2UuIFdlIG1pZ2h0IGp1c3QgaW5jbHVkZSB0aGF0IG9uZSwgYnV0IEkmIzM5O2xsIHRoaW5rIGFib3V0IHRoZSBvdGhlcnMuIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBhbHNvIGluIHRoZSBob3QtcGF0aCwgc2luY2UgaXQgaXMgYWxzbyBjYWxsZWQgb24gZXZlcnkgcGFja2V0IHdpdGggZGF0YS4KCk9uIGJhbGFuY2UsIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgc2VlbSBsZXNzIGxpa2VseSB0byBiZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgbWlnaHQgYmUgYSBiZXR0ZXIgY2hvaWNlIGFzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgLCBwcm9iYWJseSBpbiBgbmV0L21wdGNwL2Zhc3RvcGVuLmNgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9mYXN0b3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9mYXN0b3Blbi5jLTgtXG5uZXQvbXB0Y3AvZmFzdG9wZW4uYzo5OnZvaWQgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxubmV0L21wdGNwL2Zhc3RvcGVuLmMtMTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yIGluIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGJlaGF2aW5nIHN0YXRpY2FsbHk7IEkgbmVlZCB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIGlzc3VlIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgc3ViZmxvdyBjb29raWUgcmVxdWVzdCBpcyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBleGFtaW5lIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgd2l0aGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gVGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN1YmZsb3cgY29ubmVjdGlvbnMgYXJlIGJlaW5nIGtpY2tlZCBvZmYgYW5kIHdoeSB0aGV5IG1pZ2h0IGV4aGliaXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjk4LX1cbm5ldC9tcHRjcC9zdWJmbG93LmM6Mjk5OkVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgRXhwb3J0ZWQgU3ltYm9sKioKCkFscmlnaHQsIHNvIEkgc2VlIGl0JiMzOTtzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGhhbmRsZSBvbiBpdCB3aXRob3V0IHRvbyBtdWNoIHRyb3VibGUuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTXVsdGlwYXRoIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuIEkgbmVlZCB0byBleGFtaW5lIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLiBJIGtub3cgaXQmIzM5O3MgcHJvYmFibHkgaW4gYG5ldC9tcHRjcC9wbS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGdvb2Qgc3R1ZmYgbGl2ZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhbmQgc2VlIHdoYXQgdGhpcyBhbm5vdW5jZWQgYWxsb2NhdGlvbiBpcyBhbGwgYWJvdXQuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQuLi53ZSYjMzk7bGwgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0zNzY9c3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTQzNi1cbm5ldC9tcHRjcC9wbS5jOjQzNzpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3BtLmMtNDM4LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIFRoaXMgUHJvYmxlbSoqCgpIbW0sIHRoaXMgaXNzdWUgaXNuJiMzOTt0IHN0YXRpYy4gSXQmIzM5O3MgYmVoYXZpbmcgZHluYW1pY2FsbHksIHdoaWNoIG1lYW5zIGEgc2ltcGxlLCBmaXhlZCBzb2x1dGlvbiBpcyB1bmxpa2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBjaGFuZ2luZyBvciBpbnRlcmFjdGluZy4gVGhpcyBwb2ludHMgdG93YXJkIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBvciBldmVuIHJlc291cmNlIGFsbG9jYXRpb24uCgpBbHJpZ2h0LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd291bGQgYmUgdGhlIE1QVENQIHBhdGggbWFuYWdlciBkZXN0cnVjdGlvbiBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgbXB0Y3BfcG1fZGVzdHJveWAgaW4gYG5ldC9tcHRjcC9wbS5jYC4gVGhhdCBmdW5jdGlvbiBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBwYXRoIG1hbmFnZXIgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGF0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB0aGVyZSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIG1lbW9yeSBsZWFrIHRoYXQgaXMgY2F1c2luZyB0aGUgZHluYW1pYyBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIEkgd291bGQgZXhwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmM9MTEyND12b2lkIG1wdGNwX3BtX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTExNDgtXG5uZXQvbXB0Y3AvcG0uYzoxMTQ5OnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBpbmhlcmVudGx5ICpub24tc3RhdGljKi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBNUFRDUCB1c2Vyc3BhY2UgUE0gaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBNeSBpbW1lZGlhdGUgcG9ydCBvZiBjYWxsIGlzIHRvIGNoZWNrIGBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkYCB3aXRoaW4gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBzb21lIGxpZ2h0IG9uIGhvdyBsb2NhbCBpZGVudGlmaWVycyBhcmUgYXNzaWduZWQgYW5kIG1hbmFnZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5hdHVyYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBpbiBpdHMgY3VycmVudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTEzMi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IER5bmFtaWMgTVBUQ1AgSXNzdWUqKgoKUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBwcm9ibGVtLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIElmIGl0IHdlcmUgc3RhdGljLCBJJiMzOTtkIGhhdmUgYSBtdWNoIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHBhdGguIEJ1dCBzaW5jZSBpdCBpc24mIzM5O3QsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1vcmUgZHluYW1pYyBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGxpZXMgaW4gc29tZXRoaW5nIHRoYXQmIzM5O3MgY2hhbmdpbmcgb3ZlciB0aW1lLgoKT2theSwgd2hlcmUgdG8gc3RhcnQuLi4gbGV0JiMzOTtzIGN1dCByaWdodCB0byB0aGUgY2hhc2UuIEdpdmVuIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGlzIHNpdHVhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoaW4gTVBUQ1AuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXItc3BhY2UgZGFlbW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBleGFtaW5lIGBtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0YCBpbiBgbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jYC4gVGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhbm5vdW5jZW1lbnQgYW5kIG1hbmFnZW1lbnQgb2YgcGF0aCBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIHdpdGggdXNlcnNwYWNlLiBJdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIGlzc3VlIHRoYXQgbWlnaHQgbWFuaWZlc3QgZHluYW1pY2FsbHkgZHVyaW5nIHRoZSBuZWdvdGlhdGlvbiBvciBhY3RpdmUgdXNlIG9mIE1QVENQIHBhdGhzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhdGggbWFuYWdlciBpcyBhbm5vdW5jaW5nIHRoZSBwYXRoIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLXNwYWNlIGRhZW1vbiBhbmQgdGhlbiBob3cgdGhpcyBpcyBiZWluZyBhY3RlZCB1cG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xNjk9c3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X3NvY2soY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTkzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjE5NDppbnQgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE5NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTE1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBCZWhhdmlvciBpbiBNUFRDUCoqCgpBbHJpZ2h0LCB0aGlzIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZHluYW1pYyBhc3BlY3RzIG9mIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzZWUuLi4gc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBNUFRDUCBhbmQgaXQmIzM5O3MgYmVoYXZpbmcgbm9uLXN0YXRpY2FsbHksIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIHN1YmZsb3dzLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZXNwZWNpYWxseSB3aGVuIHRoaW5ncyBhcmVuJiMzOTt0IGJlaGF2aW5nIHByZWRpY3RhYmx5LgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXNlcnNwYWNlLWluaXRpYXRlZCBzdWJmbG93IGNyZWF0aW9uIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBhY3Rpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBzb21ldGhpbmcgbm90IGJlaW5nIHN0YXRpYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgYmVzdCBmaXJzdCBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgc3ViZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLiBJJiMzOTtsbCBjaGVjayBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrLCBlc3BlY2lhbGx5IGFueSBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGR5bmFtaWMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMwND1pbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzYzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjM2NDppbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDE4CgkJCQkJCQlvdXRwdXQ6IDE3OAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBNUFRDUCBGb2N1cyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyB0YXJnZXQgaXMgKmR5bmFtaWMqOyBpdCYjMzk7cyBub3QgYSBzdGF0aWMsIHVuY2hhbmdpbmcgcGllY2Ugb2YgY29kZS4gSXQmIzM5O3MgZ290IGxlZ3MsIGFuZCB0aGF0IG1lYW5zIGZ1enppbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHNldCB1cCBpcywgd2l0aG91dCBhIGRvdWJ0LCBgTVBUQ1BgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSBidWlsZGluZyBvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGZpbmFsIHJlc3BvbnNlLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgIOKAkyBhYnNvbHV0ZWx5LCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0ISBXZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBmdXp6IHRoaXMuCgpNeSBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZW50cmF0aW9uLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJICpuZWVkKiB0byBmb2N1cyBvbiwgYXJlIHRoZXNlOgoKKiAgIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCAtIENydWNpYWwgZm9yIEZhc3QgT3BlbiBzZXR1cCwgYWx3YXlzIGEganVpY3kgdGFyZ2V0CiogICBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIC0gQ29va2llIFJlcXVlc3RzLCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiBpbiBzdWJmbG93CiogICBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCAtIEhhbmRsaW5nIFBNIGFsbG9jYXRpb24sIHdpbGwgYmUgZnJ1aXRmdWwKKiAgIGBtcHRjcF9wbV9kZXN0cm95YCAtIFBNIGRlc3RydWN0aW9uLCBjb3VsZCBiZSBhIG1lbW9yeSBwbGF5Z3JvdW5kCiogICBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgLSBJbXBvcnRhbnQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsb2NhbCBJRAoqICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgIC0gVGhpcyBsb29rcyBpbXBvcnRhbnQgdG9vLgoqICAgYG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRgIC0gTkwgU3ViZmxvdyBjcmVhdGVzIGFyZSB2ZXJ5IGltcG9ydGFudC4KCkFuZCwgb2YgY291cnNlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhlIHNldHVwOiBJIG5lZWQgYE1QVENQYCBlbmFibGVkLgoKVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyBzcGVjaWZpY2FsbHksIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCB0aGUgaGFuZGxpbmcgb2YgUE0gZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSAqYmVnZ2luZyogdG8gYmUgZnV6emVkLiBJdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBoaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O21wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjEzLjkwOTUzOTQwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjU4ODA4OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgICBcIm1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY1wiLFxuICAgIFwibXB0Y3BfcG1fZGVzdHJveVwiLFxuICAgIFwibXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MTMuOTA5NTQ0Mzk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzNjQ2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTE3OTk0ZmMwYWIzZmI4MDY3ZDUzMDRkNTZhMTY0OThjZWRmNWJlM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9mYXN0b3Blbi5jIGIvbmV0L21wdGNwL2Zhc3RvcGVuLmNcXG5pbmRleCAwODJjNDZjMGY1MGVlLi5mNzE3NzUwOTA2ZmZhIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9mYXN0b3Blbi5jXFxuKysrIGIvbmV0L21wdGNwL2Zhc3RvcGVuLmNcXG5AQCAtMjQsMTIgKzI0LDEzIEBAIHZvaWQgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmXFxuIFxcdHNrID0gc3ViZmxvdy1cXHUwMDNlY29ubjtcXG4gXFx0dHAgPSB0Y3Bfc2soc3NrKTtcXG4gXFxuLVxcdHN1YmZsb3ctXFx1MDAzZWlzX21wdGZvID0gMTtcXG4tXFxuK1xcdC8qIEEgdmFsaWQgVEZPIGNvb2tpZSBkb2VzIG5vdCBndWFyYW50ZWUgU1lOIGRhdGEuICovXFxuIFxcdHNrYiA9IHNrYl9wZWVrKFxcdTAwMjZzc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFza2IpKVxcbitcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0c3ViZmxvdy1cXHUwMDNlaXNfbXB0Zm8gPSAxO1xcbitcXG4gXFx0LyogZGVxdWV1ZSB0aGUgc2tiIGZyb20gc2sgcmVjZWl2ZSBxdWV1ZSAqL1xcbiBcXHRfX3NrYl91bmxpbmsoc2tiLCBcXHUwMDI2c3NrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFx0c2tiX2V4dF9yZXNldChza2IpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IGM2NjQwMjNkMzdiYTguLjEwNTdkNTAwNTc3YjAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtNTAsNiArNTAsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogT25seSB0aGUgTVBDICsgQUNLIGNhbiBiZSB1c2VkIHdpdGggYSBSTV9BRERSICovXFxuK1xcdFxcdGlmIChzdWJvcHQgPT0gT1BUSU9OX01QVENQX01QQ19BQ0spIHtcXG4rXFx0XFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9IGVsc2UgaWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyAhPSAwKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBDZnIgUkZDIDg2ODQgU2VjdGlvbiAzLjMuMDpcXG4gXFx0XFx0ICogSWYgYSBjaGVja3N1bSBpcyBwcmVzZW50IGJ1dCBpdHMgdXNlIGhhZFxcbiBcXHRcXHQgKiBub3QgYmVlbiBuZWdvdGlhdGVkIGluIHRoZSBNUF9DQVBBQkxFIGhhbmRzaGFrZSwgdGhlIHJlY2VpdmVyIE1VU1RcXG5AQCAtMTIyLDYgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XFxuK1xcdFxcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXFxuK1xcdFxcdGlmICgobXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIFxcdTAwMjYgfihPUFRJT05fTVBUQ1BfUk1fQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX01QSl9TWU4pIHtcXG4gXFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xcbiBcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWJhY2t1cCA9ICpwdHIrKyBcXHUwMDI2IE1QVENQT1BUX0JBQ0tVUDtcXG5AQCAtMTUzLDYgKzE2NiwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX0RTUzpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTl9NUFRDUF9BRERfQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9GQUlMKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwiRFNTXFxcXG5cXFwiKTtcXG4gXFx0XFx0cHRyKys7XFxuIFxcbkBAIC0xODgsOCArMjA5LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgKiBSRkMgODY4NCBTZWN0aW9uIDMuMy4wIGNoZWNrcyBsYXRlciBpbiBzdWJmbG93X2RhdGFfcmVhZHlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pXFxuK1xcdFxcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcXG4rXFx0XFx0XFx0bXBfb3B0LVxcdTAwM2Vkc242NCA9IDA7XFxuK1xcdFxcdFxcdG1wX29wdC1cXHUwMDNldXNlX21hcCA9IDA7XFxuK1xcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWNrNjQgPSAwO1xcbitcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZXVzZV9hY2sgPSAwO1xcbitcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWRhdGFfZmluID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfRFNTO1xcbiBcXHRcXHRpZiAobXBfb3B0LVxcdTAwM2V1c2VfYWNrKSB7XFxuQEAgLTIzNCw2ICsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBNUFRDUE9QVF9BRERfQUREUjpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRtcF9vcHQtXFx1MDAzZWVjaG8gPSAoKnB0cisrKSBcXHUwMDI2IE1QVENQX0FERFJfRUNITztcXG4gXFx0XFx0aWYgKCFtcF9vcHQtXFx1MDAzZWVjaG8pIHtcXG4gXFx0XFx0XFx0aWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSIHx8XFxuQEAgLTI5Myw2ICszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBNUFRDUE9QVF9STV9BRERSOlxcbitcXHRcXHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xcbitcXHRcXHRpZiAoKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IH4oT1BUSU9OX01QVENQX01QQ19BQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OU19NUFRDUF9NUEogfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9QUklPKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAob3BzaXplIFxcdTAwM2MgVENQT0xFTl9NUFRDUF9STV9BRERSX0JBU0UgKyAxIHx8XFxuIFxcdFxcdCAgICBvcHNpemUgXFx1MDAzZSBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSArIE1QVENQX1JNX0lEU19NQVgpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zMDcsNiArMzQ4LDEzIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgTVBUQ1BPUFRfTVBfUFJJTzpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfTVBKIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUikpICE9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1BSSU8pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzE2LDYgKzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRTpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9GQVNUQ0xPU0UpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzI3LDYgKzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX1JTVDpcXG4rXFx0XFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cXG4rXFx0XFx0aWYgKChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiB+KE9QVElPTl9NUFRDUF9GQUlMIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE9QVElPTl9NUFRDUF9GQVNUQ0xPU0UpKSAhPSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdGlmIChvcHNpemUgIT0gVENQT0xFTl9NUFRDUF9SU1QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzQyLDYgKzQwMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1QVENQT1BUX01QX0ZBSUw6XFxuK1xcdFxcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXFxuK1xcdFxcdGlmICgobXBfb3B0LVxcdTAwM2VzdWJvcHRpb25zIFxcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfRkFJTClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xNDAwLDcgKzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbiBcXHQgKiAgUk0gICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4gXFx0ICogIFBSSU8gfCAgWCAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwgIEMgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XFxuIFxcdCAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfFxcbi1cXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcXG4rXFx0ICogIEZDICAgfCAgWCAgIHwgIFggICB8ICBQICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18XFxuIFxcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxcbiBcXHQgKiAtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4gXFx0ICpcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xcbkBAIC0zODAsNiArMzgwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gZW50cnktXFx1MDAzZXNvY2s7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0dW5zaWduZWQgaW50IHRpbWVvdXQgPSAwO1xcbitcXHRib29sIHJldHJhbnNtaXQ7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwibXNrPSVwXFxcXG5cXFwiLCBtc2spO1xcbiBcXG5AQCAtNDEyLDE0ICs0MTMsMTUgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlcmV0cmFuc190aW1lcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW50cnktXFx1MDAzZXJldHJhbnNfdGltZXMgXFx1MDAzYyBBRERfQUREUl9SRVRSQU5TX01BWClcXG4rXFx0cmV0cmFuc21pdCA9IGVudHJ5LVxcdTAwM2VyZXRyYW5zX3RpbWVzIFxcdTAwM2MgQUREX0FERFJfUkVUUkFOU19NQVg7XFxuK1xcdGlmIChyZXRyYW5zbWl0KVxcbiBcXHRcXHR0aW1lb3V0IFxcdTAwM2NcXHUwMDNjPSBlbnRyeS1cXHUwMDNlcmV0cmFuc190aW1lcztcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0aW1lb3V0ID0gMDtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4tXFx0aWYgKGVudHJ5LVxcdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxcbitcXHRpZiAoIXJldHJhbnNtaXQpXFxuIFxcdFxcdG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQobXNrKTtcXG4gXFxuIG91dDpcXG5AQCAtNDQxLDYgKzQ0Myw5IEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4rXFx0aWYgKG1zay1cXHUwMDNlcG0uc3RhdHVzIFxcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRhZGRfZW50cnkgPSBtcHRjcF9wbV9hbm5vdW5jZWRfbG9va3VwKG1zaywgYWRkcik7XFxuIFxcdGlmIChhZGRfZW50cnkpIHtcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRShtcHRjcF9wbV9pc19rZXJuZWwobXNrKSkpXFxuQEAgLTExNDMsMTAgKzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFxuIHZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbiB7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG4rXFx0bXNrLVxcdTAwM2VwbS5zdGF0dXMgfD0gQklUKE1QVENQX1BNX0RFU1RST1lJTkcpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG4rXFxuIFxcdG1wdGNwX3BtX2ZyZWVfYW5ub3VuY2VkX2xpc3QobXNrKTtcXG4gXFxuLVxcdGlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSlcXG4tXFx0XFx0bXB0Y3BfdXNlcnNwYWNlX3BtX2ZyZWVfbG9jYWxfYWRkcl9saXN0KG1zayk7XFxuK1xcdC8qIEZyZWUgdGhlIHVzZXJzcGFjZSBsb2NhbCBhZGRyZXNzIGxpc3QgdW5jb25kaXRpb25hbGx5OiB0aGUgc29ja2V0XFxuK1xcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXFxuK1xcdCAqL1xcbitcXHRtcHRjcF91c2Vyc3BhY2VfcG1fZnJlZV9sb2NhbF9hZGRyX2xpc3QobXNrKTtcXG4gfVxcbiBcXG4gdm9pZCBtcHRjcF9wbV9kYXRhX3Jlc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xcbmluZGV4IDk0NWFhNWFmYzJkZGYuLjIyMDNjYzJkMjc0ODUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuKysrIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuQEAgLTU0LDYgKzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbiBcXHRiaXRtYXBfemVybyhpZF9iaXRtYXAsIE1QVENQX1BNX01BWF9BRERSX0lEICsgMSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxuK1xcdGlmIChtc2stXFx1MDAzZXBtLnN0YXR1cyBcXHUwMDI2IEJJVChNUFRDUF9QTV9ERVNUUk9ZSU5HKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGFwcGVuZF9lcnI7XFxuK1xcdH1cXG4gXFx0bXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7XFxuIFxcdFxcdGFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoXFx1MDAyNmUtXFx1MDAzZWFkZHIsIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkciwgdHJ1ZSk7XFxuIFxcdFxcdGlmIChhZGRyX21hdGNoIFxcdTAwMjZcXHUwMDI2IGVudHJ5LVxcdTAwM2VhZGRyLmlkID09IDAgXFx1MDAyNlxcdTAwMjYgbmVlZHNfaWQpXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBjYTY0NGVjNTNlZWRiLi43YzgxODBkOGQ1ZWZmIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMTQ5LDYgKzE0OSwxMiBAQCBzdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcbiBzdGF0aWMgdm9pZCBtcHRjcF9kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHQvKiBUaGUgc2tiIGZvcndhcmQgbWVtb3J5IHdhcyBhbHJlYWR5IHRyYW5zZmVycmVkIHRvIHNrIGJ5XFxuK1xcdCAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci5cXG4rXFx0ICovXFxuK1xcdGlmICghc2tiLVxcdTAwM2VkZXN0cnVjdG9yKVxcbitcXHRcXHRza19tZW1fcmVjbGFpbShzayk7XFxuK1xcbiBcXHRza19kcm9wc19za2JhZGQoc2ssIHNrYik7XFxuIFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDRhMmQ0MGNkN2IxMzIuLjFiODBmMmQ2ZWM1YTIgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC0zNyw2ICszNyw3IEBAXFxuIFxcdFxcdFxcdFxcdCBPUFRJT05fTVBUQ1BfTVBDX0FDSylcXG4gI2RlZmluZSBPUFRJT05TX01QVENQX01QSlxcdChPUFRJT05fTVBUQ1BfTVBKX1NZTiB8IE9QVElPTl9NUFRDUF9NUEpfU1lOQUNLIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgT1BUSU9OX01QVENQX01QSl9BQ0spXFxuKyNkZWZpbmUgT1BUSU9OU19NUFRDUF9EU1NcXHQoT1BUSU9OX01QVENQX0RTUyB8IE9QVElPTl9NUFRDUF9DU1VNUkVRRClcXG4gXFxuIC8qIE1QVENQIG9wdGlvbiBzdWJ0eXBlcyAqL1xcbiAjZGVmaW5lIE1QVENQT1BUX01QX0NBUEFCTEVcXHQwXFxuQEAgLTE4OSw5ICsxOTAsMTAgQEAgZW51bSBtcHRjcF9wbV9zdGF0dXMge1xcbiBcXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcXG4gXFx0TVBUQ1BfUE1fU1VCRkxPV19FU1RBQkxJU0hFRCxcXG4gXFx0TVBUQ1BfUE1fQUxSRUFEWV9FU1RBQkxJU0hFRCxcXHQvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIEVTVEFCTElTSEVEIGV2ZW50ICovXFxuLVxcdE1QVENQX1BNX01QQ19FTkRQT0lOVF9BQ0NPVU5URUQgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xcbi1cXHRcXHRcXHRcXHRcXHQgKiBhY2NvdW50ZWQgaW50IGlkX2F2YWlsX2JpdG1hcFxcbi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCwgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xcbitcXHRcXHRcXHRcXHRcXHQgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXBcXG4rXFx0XFx0XFx0XFx0XFx0ICAqL1xcbitcXHRNUFRDUF9QTV9ERVNUUk9ZSU5HLFxcdFxcdC8qIFRvIGZlbmNlIG91dCBQTSBsaXN0IGFsbG9jcyAqL1xcbiB9O1xcbiBcXG4gZW51bSBtcHRjcF9wbV90eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li5lMWYyMGZmOGZkYjQyIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuQEAgLTE3NCw4ICsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdFxcdGlmICh1bmxpa2VseShsaXN0ZW5lci1cXHUwMDNlcG1fbGlzdGVuZXIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gc3ViZmxvd19yZXNldF9yZXFfZW5kcChyZXEsIHNrYik7XFxuLVxcdFxcdGlmIChvcHRfbXBfam9pbilcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4pIHtcXG4gXFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5TWU5SWCk7XFxuIFxcbkBAIC0yNzcsOSArMjc1LDYgQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XFxuIFxcdG9wdF9tcF9qb2luID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XFxuLVxcdGlmIChvcHRfbXBfY2FwYWJsZSBcXHUwMDI2XFx1MDAyNiBvcHRfbXBfam9pbilcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRpZiAob3B0X21wX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG4gXFx0XFx0aWYgKG1wX29wdC5zbmRyX2tleSA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxcbmluZGV4IGMwYWVmZmQ1Y2I3MTQuLjdkYzkxZmFjNDkxN2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxcbkBAIC01ODQsNyArNTg0LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxcbiBcXHRcXHRtdiBcXFwiJHRtcGZpbGVcXFwiIFxcXCIkb3V0XFxcIlxcbiBcXHRcXHR0bXBmaWxlPVxcXCJcXFwiXFxuIFxcdGZpXFxuLVxcdGNtcCAtbCBcXFwiJGluXFxcIiBcXFwiJG91dFxcXCIgfCB3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xcbitcXHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xcbiBcXHRcXHRsb2NhbCBzdW09JCgoMCR7YX0gKyAwJHtifSkpXFxuIFxcdFxcdGlmIFsgJGNoZWNrX2ludmVydCAtZXEgMCBdIHx8IFsgJHN1bSAtbmUgJCgoMHhmZikpIF07IHRoZW5cXG4gXFx0XFx0XFx0ZmFpbF90ZXN0IFxcXCIkd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6XFxcIlxcbkBAIC01OTUsNyArNTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHByaW50X2luZm8gXFxcIiR3aGF0IGhhcyBpbnZlcnRlZCBieXRlIGF0ICR7aX1cXFwiXFxuIFxcdFxcdGZpXFxuLVxcdGRvbmVcXG4rXFx0ZG9uZSBcXHUwMDNjIFxcdTAwM2MoY21wIC1sIFxcXCIkaW5cXFwiIFxcXCIkb3V0XFxcIilcXG4gXFxuIFxcdHJldHVybiAwXFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MTUuMjkzODQ3MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Mzg3NDQ5MDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCIsXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgICBcIm1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRcIixcbiAgICBcIm1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRcIixcbiAgICBcIm1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExNzk5NGZjMGFiM2ZiODA2N2Q1MzA0ZDU2YTE2NDk4Y2VkZjViZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL2Zhc3RvcGVuLmMgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uY1xuaW5kZXggMDgyYzQ2YzBmNTBlZS4uZjcxNzc1MDkwNmZmYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9mYXN0b3Blbi5jXG4rKysgYi9uZXQvbXB0Y3AvZmFzdG9wZW4uY1xuQEAgLTI0LDEyICsyNCwxMyBAQCB2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZlxuIFx0c2sgPSBzdWJmbG93LVx1MDAzZWNvbm47XG4gXHR0cCA9IHRjcF9zayhzc2spO1xuIFxuLVx0c3ViZmxvdy1cdTAwM2Vpc19tcHRmbyA9IDE7XG4tXG4rXHQvKiBBIHZhbGlkIFRGTyBjb29raWUgZG9lcyBub3QgZ3VhcmFudGVlIFNZTiBkYXRhLiAqL1xuIFx0c2tiID0gc2tiX3BlZWsoXHUwMDI2c3NrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2tiKSlcbitcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRzdWJmbG93LVx1MDAzZWlzX21wdGZvID0gMTtcbitcbiBcdC8qIGRlcXVldWUgdGhlIHNrYiBmcm9tIHNrIHJlY2VpdmUgcXVldWUgKi9cbiBcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnNzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcdHNrYl9leHRfcmVzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYzY2NDAyM2QzN2JhOC4uMTA1N2Q1MDA1NzdiMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC01MCw2ICs1MCwxNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbitcdFx0LyogT25seSB0aGUgTVBDICsgQUNLIGNhbiBiZSB1c2VkIHdpdGggYSBSTV9BRERSICovXG4rXHRcdGlmIChzdWJvcHQgPT0gT1BUSU9OX01QVENQX01QQ19BQ0spIHtcbitcdFx0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+T1BUSU9OX01QVENQX1JNX0FERFIpICE9IDApXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fSBlbHNlIGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyAhPSAwKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbiBcdFx0LyogQ2ZyIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjA6XG4gXHRcdCAqIElmIGEgY2hlY2tzdW0gaXMgcHJlc2VudCBidXQgaXRzIHVzZSBoYWRcbiBcdFx0ICogbm90IGJlZW4gbmVnb3RpYXRlZCBpbiB0aGUgTVBfQ0FQQUJMRSBoYW5kc2hha2UsIHRoZSByZWNlaXZlciBNVVNUXG5AQCAtMTIyLDYgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0pPSU46XG4rXHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4rXHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OX01QVENQX1JNX0FERFIgfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX1BSSU8pKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfTVBKX1NZTikge1xuIFx0XHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xuIFx0XHRcdG1wX29wdC1cdTAwM2ViYWNrdXAgPSAqcHRyKysgXHUwMDI2IE1QVENQT1BUX0JBQ0tVUDtcbkBAIC0xNTMsNiArMTY2LDE0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfRFNTOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfRkFTVENMT1NFIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9GQUlMKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0cHJfZGVidWcoXCJEU1NcXG5cIik7XG4gXHRcdHB0cisrO1xuIFxuQEAgLTE4OCw4ICsyMDksMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIFJGQyA4Njg0IFNlY3Rpb24gMy4zLjAgY2hlY2tzIGxhdGVyIGluIHN1YmZsb3dfZGF0YV9yZWFkeVxuIFx0XHQgKi9cbiBcdFx0aWYgKG9wc2l6ZSAhPSBleHBlY3RlZF9vcHNpemUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pXG4rXHRcdCAgICBvcHNpemUgIT0gZXhwZWN0ZWRfb3BzaXplICsgVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU0pIHtcbitcdFx0XHRtcF9vcHQtXHUwMDNlZHNuNjQgPSAwO1xuK1x0XHRcdG1wX29wdC1cdTAwM2V1c2VfbWFwID0gMDtcbitcdFx0XHRtcF9vcHQtXHUwMDNlYWNrNjQgPSAwO1xuK1x0XHRcdG1wX29wdC1cdTAwM2V1c2VfYWNrID0gMDtcbitcdFx0XHRtcF9vcHQtXHUwMDNlZGF0YV9maW4gPSAwO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4gXHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9EU1M7XG4gXHRcdGlmIChtcF9vcHQtXHUwMDNldXNlX2Fjaykge1xuQEAgLTIzNCw2ICsyNjEsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9BRERfQUREUjpcbitcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbitcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUk1fQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdG1wX29wdC1cdTAwM2VlY2hvID0gKCpwdHIrKykgXHUwMDI2IE1QVENQX0FERFJfRUNITztcbiBcdFx0aWYgKCFtcF9vcHQtXHUwMDNlZWNobykge1xuIFx0XHRcdGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUiB8fFxuQEAgLTI5Myw2ICszMjYsMTQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9STV9BRERSOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9NUENfQUNLIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTlNfTVBUQ1BfTVBKIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTlNfTVBUQ1BfRFNTIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9BRERfQUREUiB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUFJJTykpICE9IDApXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdGlmIChvcHNpemUgXHUwMDNjIFRDUE9MRU5fTVBUQ1BfUk1fQUREUl9CQVNFICsgMSB8fFxuIFx0XHQgICAgb3BzaXplIFx1MDAzZSBUQ1BPTEVOX01QVENQX1JNX0FERFJfQkFTRSArIE1QVENQX1JNX0lEU19NQVgpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMzA3LDYgKzM0OCwxMyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX1BSSU86XG4rXHRcdC8qIENhbiBiZSB1c2VkIHdpdGggYSByZXN0cmljdGVkIG51bWJlciBvZiBvdGhlciBvcHRpb25zICovXG4rXHRcdGlmICgobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IH4oT1BUSU9OU19NUFRDUF9NUEogfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OU19NUFRDUF9EU1MgfFxuK1x0XHRcdFx0XHQgICAgT1BUSU9OX01QVENQX0FERF9BRERSIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9STV9BRERSKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX1BSSU8pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMzE2LDYgKzM2NCwxMSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1QVENQT1BUX01QX0ZBU1RDTE9TRTpcbitcdFx0LyogQ2FuIGJlIHVzZWQgd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMgKi9cbitcdFx0aWYgKChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgfihPUFRJT05TX01QVENQX0RTUyB8XG4rXHRcdFx0XHRcdCAgICBPUFRJT05fTVBUQ1BfUlNUKSkgIT0gMClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKG9wc2l6ZSAhPSBUQ1BPTEVOX01QVENQX0ZBU1RDTE9TRSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zMjcsNiArMzgwLDExIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTVBUQ1BPUFRfUlNUOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTl9NUFRDUF9GQUlMIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9GQVNUQ0xPU0UpKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfUlNUKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTM0Miw2ICs0MDAsMTEgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBNUFRDUE9QVF9NUF9GQUlMOlxuK1x0XHQvKiBDYW4gYmUgdXNlZCB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2Ygb3RoZXIgb3B0aW9ucyAqL1xuK1x0XHRpZiAoKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiB+KE9QVElPTlNfTVBUQ1BfRFNTIHxcbitcdFx0XHRcdFx0ICAgIE9QVElPTl9NUFRDUF9SU1QpKSAhPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAob3BzaXplICE9IFRDUE9MRU5fTVBUQ1BfRkFJTClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xNDAwLDcgKzE0NjMsNyBAQCB2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuIFx0ICogIFJNICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgUCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKiAgUFJJTyB8ICBYICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiBcdCAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfFxuLVx0ICogIEZDICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18XG4rXHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbiBcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxuIFx0ICogLS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gXHQgKlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDZhZmQzOWFlYTExMGEuLjY0YTEyMzZhYWJlZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC0zODAsNiArMzgwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGVudHJ5LVx1MDAzZXNvY2s7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHR1bnNpZ25lZCBpbnQgdGltZW91dCA9IDA7XG4rXHRib29sIHJldHJhbnNtaXQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIm1zaz0lcFxcblwiLCBtc2spO1xuIFxuQEAgLTQxMiwxNCArNDEzLDE1IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbiBcdFx0ZW50cnktXHUwMDNlcmV0cmFuc190aW1lcysrO1xuIFx0fVxuIFxuLVx0aWYgKGVudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgXHUwMDNjIEFERF9BRERSX1JFVFJBTlNfTUFYKVxuK1x0cmV0cmFuc21pdCA9IGVudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgXHUwMDNjIEFERF9BRERSX1JFVFJBTlNfTUFYO1xuK1x0aWYgKHJldHJhbnNtaXQpXG4gXHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSBlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzO1xuIFx0ZWxzZVxuIFx0XHR0aW1lb3V0ID0gMDtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID09IEFERF9BRERSX1JFVFJBTlNfTUFYKVxuK1x0aWYgKCFyZXRyYW5zbWl0KVxuIFx0XHRtcHRjcF9wbV9zdWJmbG93X2VzdGFibGlzaGVkKG1zayk7XG4gXG4gb3V0OlxuQEAgLTQ0MSw2ICs0NDMsOSBAQCBib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4gXG4rXHRpZiAobXNrLVx1MDAzZXBtLnN0YXR1cyBcdTAwMjYgQklUKE1QVENQX1BNX0RFU1RST1lJTkcpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhZGRfZW50cnkgPSBtcHRjcF9wbV9hbm5vdW5jZWRfbG9va3VwKG1zaywgYWRkcik7XG4gXHRpZiAoYWRkX2VudHJ5KSB7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UobXB0Y3BfcG1faXNfa2VybmVsKG1zaykpKVxuQEAgLTExNDMsMTAgKzExNDgsMTYgQEAgdm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcbiB2b2lkIG1wdGNwX3BtX2Rlc3Ryb3koc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZXBtLmxvY2spO1xuK1x0bXNrLVx1MDAzZXBtLnN0YXR1cyB8PSBCSVQoTVBUQ1BfUE1fREVTVFJPWUlORyk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4rXG4gXHRtcHRjcF9wbV9mcmVlX2Fubm91bmNlZF9saXN0KG1zayk7XG4gXG4tXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXG4tXHRcdG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChtc2spO1xuK1x0LyogRnJlZSB0aGUgdXNlcnNwYWNlIGxvY2FsIGFkZHJlc3MgbGlzdCB1bmNvbmRpdGlvbmFsbHk6IHRoZSBzb2NrZXRcbitcdCAqIGNhbiBiZSByZXVzZWQgKG1wdGNwX2Rpc2Nvbm5lY3QoKSkgYW5kIHJlLXNlbGVjdGVkIHRvIGEgZGlmZmVyZW50IFBNXG4rXHQgKi9cbitcdG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChtc2spO1xuIH1cbiBcbiB2b2lkIG1wdGNwX3BtX2RhdGFfcmVzZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbmluZGV4IDk0NWFhNWFmYzJkZGYuLjIyMDNjYzJkMjc0ODUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbisrKyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuQEAgLTU0LDYgKzU0LDEwIEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0Yml0bWFwX3plcm8oaWRfYml0bWFwLCBNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbitcdGlmIChtc2stXHUwMDNlcG0uc3RhdHVzIFx1MDAyNiBCSVQoTVBUQ1BfUE1fREVTVFJPWUlORykpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBhcHBlbmRfZXJyO1xuK1x0fVxuIFx0bXB0Y3BfZm9yX2VhY2hfdXNlcnNwYWNlX3BtX2FkZHIobXNrLCBlKSB7XG4gXHRcdGFkZHJfbWF0Y2ggPSBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoXHUwMDI2ZS1cdTAwM2VhZGRyLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyLCB0cnVlKTtcbiBcdFx0aWYgKGFkZHJfbWF0Y2ggXHUwMDI2XHUwMDI2IGVudHJ5LVx1MDAzZWFkZHIuaWQgPT0gMCBcdTAwMjZcdTAwMjYgbmVlZHNfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYi4uN2M4MTgwZDhkNWVmZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTE0OSw2ICsxNDksMTIgQEAgc3RydWN0IHNvY2sgKl9fbXB0Y3Bfbm1wY19zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbitcdC8qIFRoZSBza2IgZm9yd2FyZCBtZW1vcnkgd2FzIGFscmVhZHkgdHJhbnNmZXJyZWQgdG8gc2sgYnlcbitcdCAqIG1wdGNwX2JvcnJvd19md2RtZW0oKSwgZXZlbiBiZWZvcmUgc2V0dGluZyB0aGUgZGVzdHJ1Y3Rvci5cbitcdCAqL1xuK1x0aWYgKCFza2ItXHUwMDNlZGVzdHJ1Y3RvcilcbitcdFx0c2tfbWVtX3JlY2xhaW0oc2spO1xuK1xuIFx0c2tfZHJvcHNfc2tiYWRkKHNrLCBza2IpO1xuIFx0X19rZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uMWI4MGYyZDZlYzVhMiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTM3LDYgKzM3LDcgQEBcbiBcdFx0XHRcdCBPUFRJT05fTVBUQ1BfTVBDX0FDSylcbiAjZGVmaW5lIE9QVElPTlNfTVBUQ1BfTVBKXHQoT1BUSU9OX01QVENQX01QSl9TWU4gfCBPUFRJT05fTVBUQ1BfTVBKX1NZTkFDSyB8IFxcXG4gXHRcdFx0XHQgT1BUSU9OX01QVENQX01QSl9BQ0spXG4rI2RlZmluZSBPUFRJT05TX01QVENQX0RTU1x0KE9QVElPTl9NUFRDUF9EU1MgfCBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXG4gXG4gLyogTVBUQ1Agb3B0aW9uIHN1YnR5cGVzICovXG4gI2RlZmluZSBNUFRDUE9QVF9NUF9DQVBBQkxFXHQwXG5AQCAtMTg5LDkgKzE5MCwxMCBAQCBlbnVtIG1wdGNwX3BtX3N0YXR1cyB7XG4gXHRNUFRDUF9QTV9FU1RBQkxJU0hFRCxcbiBcdE1QVENQX1BNX1NVQkZMT1dfRVNUQUJMSVNIRUQsXG4gXHRNUFRDUF9QTV9BTFJFQURZX0VTVEFCTElTSEVELFx0LyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBFU1RBQkxJU0hFRCBldmVudCAqL1xuLVx0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCAvKiBwZXJzaXN0ZW50IHN0YXR1cywgc2V0IGFmdGVyIE1QQyBsb2NhbCBhZGRyZXNzIGlzXG4tXHRcdFx0XHRcdCAqIGFjY291bnRlZCBpbnQgaWRfYXZhaWxfYml0bWFwXG4tXHRcdFx0XHRcdCAqL1xuK1x0TVBUQ1BfUE1fTVBDX0VORFBPSU5UX0FDQ09VTlRFRCwgLyogcGVyc2lzdGVudCBzdGF0dXMsIHNldCBhZnRlciBNUEMgbG9jYWwgYWRkcmVzcyBpc1xuK1x0XHRcdFx0XHQgICogYWNjb3VudGVkIGludCBpZF9hdmFpbF9iaXRtYXBcbitcdFx0XHRcdFx0ICAqL1xuK1x0TVBUQ1BfUE1fREVTVFJPWUlORyxcdFx0LyogVG8gZmVuY2Ugb3V0IFBNIGxpc3QgYWxsb2NzICovXG4gfTtcbiBcbiBlbnVtIG1wdGNwX3BtX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li5lMWYyMGZmOGZkYjQyIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTE3NCw4ICsxNzQsNiBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGxpc3RlbmVyLVx1MDAzZXBtX2xpc3RlbmVyKSlcbiBcdFx0XHRyZXR1cm4gc3ViZmxvd19yZXNldF9yZXFfZW5kcChyZXEsIHNrYik7XG4tXHRcdGlmIChvcHRfbXBfam9pbilcbi1cdFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4pIHtcbiBcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5TWU5SWCk7XG4gXG5AQCAtMjc3LDkgKzI3NSw2IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRvcHRfbXBfY2FwYWJsZSA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XG4gXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSyk7XG4tXHRpZiAob3B0X21wX2NhcGFibGUgXHUwMDI2XHUwMDI2IG9wdF9tcF9qb2luKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggYzBhZWZmZDVjYjcxNC4uN2RjOTFmYWM0OTE3ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTU4NCw3ICs1ODQsNyBAQCBjaGVja190cmFuc2ZlcigpXG4gXHRcdG12IFwiJHRtcGZpbGVcIiBcIiRvdXRcIlxuIFx0XHR0bXBmaWxlPVwiXCJcbiBcdGZpXG4tXHRjbXAgLWwgXCIkaW5cIiBcIiRvdXRcIiB8IHdoaWxlIHJlYWQgLXIgaSBhIGI7IGRvXG4rXHR3aGlsZSByZWFkIC1yIGkgYSBiOyBkb1xuIFx0XHRsb2NhbCBzdW09JCgoMCR7YX0gKyAwJHtifSkpXG4gXHRcdGlmIFsgJGNoZWNrX2ludmVydCAtZXEgMCBdIHx8IFsgJHN1bSAtbmUgJCgoMHhmZikpIF07IHRoZW5cbiBcdFx0XHRmYWlsX3Rlc3QgXCIkd2hhdCBkb2VzIG5vdCBtYXRjaCAoaW4sIG91dCk6XCJcbkBAIC01OTUsNyArNTk1LDcgQEAgY2hlY2tfdHJhbnNmZXIoKVxuIFx0XHRlbHNlXG4gXHRcdFx0cHJpbnRfaW5mbyBcIiR3aGF0IGhhcyBpbnZlcnRlZCBieXRlIGF0ICR7aX1cIlxuIFx0XHRmaVxuLVx0ZG9uZVxuK1x0ZG9uZSBcdTAwM2MgXHUwMDNjKGNtcCAtbCBcIiRpblwiIFwiJG91dFwiKVxuIFxuIFx0cmV0dXJuIDBcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NToxNS4yOTM4NDgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTgwNzY4MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHNlZWluZyB3aXRoIHRoaXMgcGF0Y2ggc2VyaWVzLiBXZSd2ZSBnb3QgYSBzZXQgb2YgbW9kaWZpY2F0aW9ucyBoaXR0aW5nIGtleSBhcmVhcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCdzIE1QVENQIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9tcHRjcC9gLiBUaGUgZmlsZXMgaW52b2x2ZWQg4oCTIGBmYXN0b3Blbi5jYCwgYG9wdGlvbnMuY2AsIGBwbS5jYCwgYHBtX3VzZXJzcGFjZS5jYCwgYHByb3RvY29sLmNgLCBgc3ViZmxvdy5jYCwgYW5kIGV2ZW4gYSB0ZXN0IHNjcmlwdCwgYG1wdGNwX2pvaW4uc2hgIOKAkyBpbmRpY2F0ZSBwcmV0dHkgd2lkZXNwcmVhZCBjaGFuZ2VzLlxuXG5Mb29raW5nIGF0IGBmYXN0b3Blbi5jYCwgdGhleSd2ZSBhZGRlZCBhIHZhbGlkaXR5IGNoZWNrIGZvciBgc2tiYCBiZWZvcmUgbWFya2luZyBhIHN1YmZsb3cgYXMgTVBUQ1AgRmFzdCBPcGVuLiBHb29kIHByYWN0aWNlIOKAkyBwcm90ZWN0aW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgYFdBUk5fT05fT05DRWAgcmVtb3ZhbCBpcyBhbHNvIGEgbmljZSBjbGVhbnVwLlxuXG5gb3B0aW9ucy5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGV5IGFyZSBhZGRpbmcgZXhwbGljaXQgdmFsaWRhdGlvbiBmb3IgZGlmZmVyZW50IE1QVENQIG9wdGlvbiBjb21iaW5hdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvdG9jb2wgcm9idXN0bmVzcy4gU28sIG1ha2luZyBzdXJlIHRoYXQgYE1QQ19BQ0tgIGlzIHBhaXJlZCB3aXRoIGBSTV9BRERSYCwgYW5kIHNpbWlsYXIgY29uc3RyYWludHMgb24gYE1QX0pPSU5gLCBgRFNTYCwgYEFERF9BRERSYCwgYFJNX0FERFJgLCBgTVBfUFJJT2AsIGBNUF9GQVNUQ0xPU0VgLCBgUlNUYCwgYW5kIGBNUF9GQUlMYCBhcmUgZW5mb3JjZWQuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBtYWxmb3JtZWQgcGFja2V0cy4gVGhlIGNvbW1lbnQgY2hhbmdlIGlzIHByb2JhYmx5IGEgbWlub3IgZG9jdW1lbnRhdGlvbiB0d2Vhay5cblxuVGhlIGNoYW5nZXMgaW4gYHBtLmNgIGFuZCBgcG1fdXNlcnNwYWNlLmNgIGFkZHJlc3MgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBUaGUgYWRkaXRpb24gb2YgdGhlIGBNUFRDUF9QTV9ERVNUUk9ZSU5HYCBzdGF0dXMgZmxhZyBpcyBzbWFydCwgY2xlYXJseSBpbmRpY2F0aW5nIHdoZW4gYSBwYXRoIG1hbmFnZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duLiBUaGUgYnVnIGZpeCBpbiBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgIGZvciB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBpcyBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LiBDaGVja2luZyBmb3IgdGhhdCBkZXN0cm95aW5nIGZsYWcgYW5kIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdGAgaW4gYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGUgY2hlY2tzIGluIGBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyYCBhcmUgYWxsIGdvb2QgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cbkluIGBwcm90b2NvbC5jYCwgdGhlIGFkZGVkIGBza19tZW1fcmVjbGFpbWAgY2FsbCBpbiBgbXB0Y3BfZHJvcGAgYmVmb3JlIGRyb3BwaW5nIHRoZSBgc2tiYCBpcyBhIHNtYXJ0IHRvdWNoLiBUaGF0J3MgYSBnb29kIGFwcHJvYWNoIHRvIGZyZWUgcmVzb3VyY2VzLCBtYWtpbmcgc3VyZSB3ZSBkb24ndCBsZWFrIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmlzayB3aXRoIG5ldHdvcmsgc3RhY2tzLlxuXG5GaW5hbGx5LCBpbiBgc3ViZmxvdy5jYCwgdGhlIHJlbW92YWwgb2YgdGhlIGNvbmRpdGlvbmFsIGNoZWNrcyBpbnZvbHZpbmcgYE1QX0pPSU5gIGxvb2sgbGlrZSBjbGVhbnVwcy4gVGhleSdyZSBwcm9iYWJseSBmaXhpbmcgc29tZSBsb2dpYyB0aGF0IHdhcyBlaXRoZXIgcmVkdW5kYW50IG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIGluIHNvbWUgc2NlbmFyaW9zLlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBjbGVhcmx5IGFpbWVkIGF0IGhhcmRlbmluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0J3MgZml4aW5nIGJ1Z3MsIGFkZGluZyBtdWNoLW5lZWRlZCBvcHRpb24gdmFsaWRhdGlvbiwgYW5kIGltcHJvdmluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFyb3VuZCBjb25uZWN0aW9uIHRlYXJkb3duLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKmFic29sdXRlbHkqIHRoaXMgaXMgd29ydGggZnV6emluZy4gTVBUQ1AgaXMgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUsIGFuZCBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgd291bGQgYmUgaGlnaGx5IGltcGFjdGZ1bC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnV6emluZyB0YXJnZXRzLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBgbXB0Y3BfcGFyc2Vfb3B0aW9uYCBpbiBgb3B0aW9ucy5jYCBzZWVtcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlLCBzaW5jZSBpdCBoYW5kbGVzIE1QVENQIG9wdGlvbiBwYXJzaW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIHVuZGVyc3RhbmQgaG93IGBtcHRjcF9wYXJzZV9vcHRpb25gIGlzIGNhbGxlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBvZiBhIHRhcmdldCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjI3LjQ3NDYxOTg0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyOTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wYXJzZV9vcHRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL29wdGlvbnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTE4PXN0YXRpYyBib29sIG1wdGNwX2NhcF9mbGFnX3NoYTI1Nih1OCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjItXFxubmV0L21wdGNwL29wdGlvbnMuYzoyMzpzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0LVxcdFxcdFxcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBvcHNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQyMj12b2lkIG1wdGNwX2dldF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ1Ni1cXHRcXHRcXHRpZiAob3Bjb2RlID09IFRDUE9QVF9NUFRDUClcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ1NzpcXHRcXHRcXHRcXHRtcHRjcF9wYXJzZV9vcHRpb24oc2tiLCBwdHIsIG9wc2l6ZSwgbXBfb3B0KTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ1OC1cXHRcXHRcXHRwdHIgKz0gb3BzaXplIC0gMjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MjcuNTE5NjUzODEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2OTUyMzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBPcHRpb24gSGFuZGxpbmcgYW5kIFBNIE1vZHVsZSBPdmVydmlldyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IG9wdGlvbnMgYXJlIHBhcnNlZCBhbmQgaG93IHRoZSBQYXRoIE1hbmFnZW1lbnQgKFBNKSBtb2R1bGUgd29ya3MuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBtcHRjcF9nZXRfb3B0aW9uc2AgaXMgdGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIEl0J3MgdGhlIGVudHJ5IHBvaW50IHRoYXQsIEknbSBhc3N1bWluZywgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1wdGNwX3BhcnNlX29wdGlvbmAsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGRlY29kaW5nIGFuZCBwcm9jZXNzaW5nIG9mIHRoZSBNUFRDUCBvcHRpb25zIGhhcHBlbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSBvcHRpb24gbmVnb3RpYXRpb24gcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgYG5ldC9tcHRjcC9wbS5jYCBmaWxlLCB0aGUgUE0gbW9kdWxlIHNlZW1zIHRvIGhhdmUgYSBmZXcgaW50ZXJuYWwgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIHNlZSBgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXJgLCBidXQgaXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRpbWVyIGlzIGRvaW5nIOKAkyBwZXJoYXBzIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIG9yIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgcmVsYXRlZCBhbmQgaGF2ZSBhIGNsZWFyZXIgcm9sZSBpbiBhZGRyZXNzIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFBNJ3MgYWRkcmVzcyBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGVuIEkgbm90aWNlZCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBhbmQgYG1wdGNwX3BtX2Rlc3Ryb3lgIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSB2ZXJ5IGNsZWFyIHJvbGVzIGFzIHRoZSBuYW1lcyBzdWdnZXN0LlxuXG5UaGUgYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AgZmlsZSBzdWdnZXN0cyB0aGF0IGEgdXNlcnNwYWNlIGNvbXBvbmVudCBhbHNvIGludGVyYWN0cyB3aXRoIHRoZSBQTSBtb2R1bGUgdGhyb3VnaCBgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcmAsIHNvIHRoZXJl4oCZcyBwcm9iYWJseSBzb21lIGNvb3JkaW5hdGlvbiBoYXBwZW5pbmcgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2Ugb24gYWRkcmVzcyBhbGxvY2F0aW9uLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBpbnRlcmFjdGlvbiBjYXJlZnVsbHksIGFzIHRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5GaW5hbGx5LCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCB0aGVyZSdzIGBtcHRjcF9kcm9wYC4gSXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIGl0J3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgZXJyb3ItaGFuZGxpbmcgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgaXQgdG8gdW5kZXJzdGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBhbiBNUFRDUCBjb25uZWN0aW9uIG1pZ2h0IGJlIGRyb3BwZWQuIFRoZSBjYWxsc2l0ZSBpbmZvcm1hdGlvbiB3aWxsIGdpdmUgbW9yZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjMzLjA4OTE3OTU2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kcm9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzMz1zdHJ1Y3Qgc29jayAqX19tcHRjcF9ubXBjX3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNDktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUwOnN0YXRpYyB2b2lkIG1wdGNwX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk9c3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2My1cXHRcXHQvKiBvdXQgb2Ygd2luZG93ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY0OlxcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1LVxcdFxcdHByX2RlYnVnKFxcXCJvb3cgYnkgJWxsZCwgcmN2X3duZF9zZW50ICVsbHVcXFxcblxcXCIsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDktXFx0XFx0XFx0XFx0LyogQWxsIHRoZSBiaXRzIGFyZSBwcmVzZW50LiBEcm9wLiAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxMDpcXHRcXHRcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMS1cXHRcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjUtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjY6XFx0XFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI3LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM0Ny1cXHRcXHRyYl9lcmFzZShcXHUwMDI2c2tiMS1cXHUwMDNlcmJub2RlLCBcXHUwMDI2bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM0ODpcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IxKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDktXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgyPXN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA4LVxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDk6XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NzkzPXN0YXRpYyBib29sIF9fbXB0Y3Bfb2ZvX3F1ZXVlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTItXFx0XFx0XFx0XFx0ICAgICAgbXNrLVxcdTAwM2VhY2tfc2VxKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4MTM6XFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MTQtXFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NTozMy4xMzY5NDc2MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMDIxNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYG1wdGNwX2Ryb3BgLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBpbnRlcm5hbCBNUFRDUCBmdW5jdGlvbnM6IGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX29mb19xdWV1ZWAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsOyB0aGV5IGxvb2sgcHJldHR5IGRlZXAgd2l0aGluIHRoZSBNUFRDUCBzdGFjay5cblxuKipGaW5kaW5nIHRoZSBFbnRyeSBQb2ludHMqKlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgKmV4dGVybmFsKiBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBvcmlnaW5hdGluZy4gU2luY2UgdGhvc2UgbGlzdGVkIGFyZSBpbnRlcm5hbCwgdGhleSB3b24ndCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgYG1wdGNwX2Ryb3BgIGlzIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gc29tZXRoaW5nIEkgY2FuIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6MzYuODk2OTc2OTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzkxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcXVldWVfb2ZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxND1zdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDgtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ5OnN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUwLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM4Mj1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwMS1cXHR9IGVsc2UgaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDI6XFx0XFx0bXB0Y3BfZGF0YV9xdWV1ZV9vZm8obXNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwMy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjM2LjkzOTM3NDEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDM2MDY2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tiYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIE1QVENQIHN0YWNrIGFuZCB0aGUgaW50cmljYWNpZXMgb2YgaG93IHBhY2tldHMgbW92ZSBhcm91bmQuIEl0J3MgY2xlYXIgdGhhdCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCdzIHRoZSB3b3JraG9yc2UsIHRoZSB0aGluZyB0aGF0IGFjdHVhbGx5ICpkb2VzKiB0aGUgbW92aW5nLiBBbmQgd2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSBmdW5jdGlvbiwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIFNvLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCBpcyBsaWtlIHRoZSBvcmNoZXN0cmF0b3IsIGFuZCBpdCByZWxpZXMgb24gYF9fbXB0Y3BfbW92ZV9za2JgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBtb3ZlbWVudCBvZiB0aGUgc29ja2V0IGJ1ZmZlcnMgKFNLQnMpLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2YgbW92ZW1lbnQgd2UgYXJlIHRhbGtpbmcgYWJvdXQuIEFyZSB3ZSBjaGFuZ2luZyB0aGUgc3ViZmxvdyBhc3NvY2lhdGlvbiBvZiB0aGUgc2tiLCBvciBpdHMgcXVldWU/IEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB3aHkgd2UgYXJlIG1vdmluZyB0aGUgc2tiLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnRlcmFjdGlvbi4gSSBjYW4gYWxyZWFkeSBzZWUgYSBwb3RlbnRpYWwgZm9yIGNvbXBsZXhpdHkgaGVyZSBhcm91bmQgc3luY2hyb25pemF0aW9uIGFuZCByYWNlIGNvbmRpdGlvbnMsIGFzIHNrYiBtYW5pcHVsYXRpb24gaXMgb2Z0ZW4gYSBzb3VyY2Ugb2Ygc3VidGxlIGlzc3VlcyBpbiBuZXR3b3JrIGNvZGUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgdXNlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDEuMDQyOTgzOTk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAzMTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9Njc2PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzE3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcxODpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MTktXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9ODgyPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg4Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4ODc6XFx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg4OC1cXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTI4PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDYtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDc6XFx0XFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDEuMDg2MDI0OTAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI0ODc0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBtcHRjcF9kYXRhX3JlYWR5YC4gSXQgc2VlbXMgbGlrZSBhIGdvb2Qgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0byBiZWdpbiBteSBhc3Nlc3NtZW50LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIE1QVENQIGZyYW1ld29yay5cblxuTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgd2l0aGluIGBuZXQvbXB0Y3AvZmFzdG9wZW4uY2AsIEkgbm90aWNlZCBgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc2AgaXMgYWxzbyBub24tc3RhdGljLiBXb3J0aCBub3RpbmcuXG5cblRoZW4sIHRoZXJlJ3MgYG5ldC9tcHRjcC9zdWJmbG93LmNgLiBIZXJlLCBJIHJlbWVtYmVyIGBzdWJmbG93X2NoZWNrX3JlcWAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgbm9uLXN0YXRpYy5cblxuR2l2ZW4gdGhlIGluaXRpYWwgaW50ZXJlc3QgaW4gYHN1YmZsb3dfY2hlY2tfcmVxYCwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9tcHRjcC9zdWJmbG93LmNgIGl0c2VsZi4gSXTigJlzIGxpa2VseSB0byBiZSBtb3N0IHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NTo0NS4xNjg1MTUwMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODEwMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1YmZsb3dfY2hlY2tfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuYz0xMzU9c3RhdGljIGludCBzdWJmbG93X3Jlc2V0X3JlcV9lbmRwKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ2LSAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ3OnN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ4LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzI2LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzI3OlxcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjgtXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zODA9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjZfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzk1LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6Mzk2OlxcdGVyciA9IHN1YmZsb3dfY2hlY2tfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zOTctXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDMwPXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA3OC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNzk6XFx0XFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgwLVxcdFxcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjQ1LjIxMTMyOTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzUzMDg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIFJvdXRlIFJlcXVlc3RzIGFuZCBQYXRoIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHN1YmZsb3dfdjRfcm91dGVfcmVxYCBhbmQgYHN1YmZsb3dfdjZfcm91dGVfcmVxYCBhcmUgc3RhdGljLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5J3JlIGxpbmtlZCB0byBzb21ldGhpbmcgbGlrZSBgdGNwX3JlcXVlc3Rfc29ja19pcHY0X29wcy5yb3V0ZV9yZXFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbm5lY3Rpb25zLlxuXG5OZXh0LCBJJ2xsIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IHRoZSBwYXRoIG1hbmFnZW1lbnQgc2lkZSB3aXRoaW4gdGhlIE1QVENQIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L21wdGNwL3BtLmNgIGZvciB0aG9zZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBJJ20gdGhpbmtpbmcgYWJvdXQgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YC4gR29vZCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9wbV9kZXN0cm95YCBhcmUgYm90aCBub24tc3RhdGljLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIHVzZWQgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLCBhbmQgYXJlIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBjaGFuZ2UgZGlyZWN0aW9uIGFnYWluIGFuZCBwZWVrIGludG8gYG5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIGZvciBgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcmAuIEFoLCBpdCdzIHN0YXRpYy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSd2ZSBnb3QgYSBtdWNoIGJldHRlciBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NDkuOTQ2NjQwMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc1NzkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzE9bXB0Y3BfdXNlcnNwYWNlX3BtX2xvb2t1cF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDItXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQzOnN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTEzMz1pbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE1MS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MTUyOlxcdHJldHVybiBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgc2tjLCB0cnVlKTtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTUzLX1cXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xOTQ9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yMjctXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjIyODpcXHRlcnIgPSBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKG1zaywgXFx1MDAyNmFkZHJfdmFsLCBmYWxzZSk7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTIyOS1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTM2ND1pbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQwNi1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDA3OlxcdGVyciA9IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIobXNrLCBcXHUwMDI2ZW50cnksIGZhbHNlKTtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDA4LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjQ5Ljk5MDQwMzI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODAyNTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gZXhhbWluZSBgbXB0Y3BfZ2V0X29wdGlvbnNgLCBzaW5jZSBpdCBjb3VsZCBiZSByZWxhdGVkLiBZZXAsIGl0J3MgYWxzbyBub24tc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXQncyBhbm90aGVyIGtleSBzeW1ib2wuXG5cbkFscmlnaHQsIHdpdGggdGhvc2UgaW4gbWluZCwgSSB0aGluayB0aGVzZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHN5bWJvbHMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhpcyBjb250ZXh0LiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgbXB0Y3BfZ2V0X29wdGlvbnNgXG4qICAgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgXG4qICAgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYFxuKiAgIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgXG4qICAgYG1wdGNwX3BtX2Rlc3Ryb3lgXG4qICAgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgXG4qICAgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgXG4qICAgYG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRgXG4qICAgYG1wdGNwX2RhdGFfcmVhZHlgXG5cbkl0IHdvdWxkIGJlIHNtYXJ0IHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIE1QVENQLCBqdXN0IHRvIGhhdmUgYSBoaWdoIGxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGJpdHMgYWxsIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzOTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTUuMTcwNjU4MTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTUuMjE2ODE2NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTEyNjIwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgc3RhcnRpbmcgd2l0aCBgTVBUQ1BgLCBhbmQgcGVyaGFwcyBgTVBUQ1BfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCB3b3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBBaCwgeWVzLCBgZGVwZW5kcyBvbiBJTkVUYCBmb3IgTVBUQ1AsIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIHN5bWJvbHMgdG8gcGlucG9pbnQgb3VyIG1vZGlmaWNhdGlvbiBlbnRyeSBwb2ludHMuIEkndmUgaWRlbnRpZmllZCBhIGxpc3Q6IGBtcHRjcF9nZXRfb3B0aW9uc2AsIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAsIGFuZCBmaW5hbGx5LCBgbXB0Y3BfZGF0YV9yZWFkeWAuIFRoZXNlIHNlZW0gbGlrZSBzb2xpZCBzdGFydGluZyBwb2ludHMgZm9yIGludGVncmF0aW5nIHRoZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgY2F1dGlvdXMgYWJvdXQgaG90LXBhdGggZnVuY3Rpb25zLiBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIGEgYml0IGNvbmNlcm5pbmcgYmVjYXVzZSBpdCBwYXJzZXMgVENQIG9wdGlvbnMgZnJvbSB0aGUgc2tiLCBtZWFuaW5nIGl0J3MgbGlrZWx5IGNhbGxlZCBvbiBldmVyeSByZWNlaXZlZCBwYWNrZXQuIFRoYXQgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gVGhlIGFjdHVhbCBjaGFuZ2VzIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gIGFyZSBhYm91dCB2YWxpZGF0aW5nIGNvbWJpbmF0aW9ucyBvZiBNUFRDUCBvcHRpb25zLiBTbyBgbXB0Y3BfZ2V0X29wdGlvbnNgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgY2FsbGVyLCBzbyB0aGVyZSBpc24ndCBhbm90aGVyIGNob2ljZS4gV2UgbWlnaHQganVzdCBpbmNsdWRlIHRoYXQgb25lLCBidXQgSSdsbCB0aGluayBhYm91dCB0aGUgb3RoZXJzLiBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgYWxzbyBpbiB0aGUgaG90LXBhdGgsIHNpbmNlIGl0IGlzIGFsc28gY2FsbGVkIG9uIGV2ZXJ5IHBhY2tldCB3aXRoIGRhdGEuXG5cbk9uIGJhbGFuY2UsIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCwgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBtcHRjcF9wbV9kZXN0cm95YCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRgLCBgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdGAsIGFuZCBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgc2VlbSBsZXNzIGxpa2VseSB0byBiZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgbWlnaHQgYmUgYSBiZXR0ZXIgY2hvaWNlIGFzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy5cblxuSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zYCwgcHJvYmFibHkgaW4gYG5ldC9tcHRjcC9mYXN0b3Blbi5jYCwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA0LjIyODA4MTQ3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1Njk0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvZmFzdG9wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvZmFzdG9wZW4uYy04LVxcbm5ldC9tcHRjcC9mYXN0b3Blbi5jOjk6dm9pZCBtcHRjcF9mYXN0b3Blbl9zdWJmbG93X3N5bmFja19zZXRfcGFyYW1zKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxubmV0L21wdGNwL2Zhc3RvcGVuLmMtMTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNC4yNzM2NTg2ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjA4OTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yIGluIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgdGhpcyBpc24ndCBiZWhhdmluZyBzdGF0aWNhbGx5OyBJIG5lZWQgdG8gZHJpbGwgZG93bi4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIGlzc3VlIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgc3ViZmxvdyBjb29raWUgcmVxdWVzdCBpcyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBleGFtaW5lIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgd2l0aGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gVGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN1YmZsb3cgY29ubmVjdGlvbnMgYXJlIGJlaW5nIGtpY2tlZCBvZmYgYW5kIHdoeSB0aGV5IG1pZ2h0IGV4aGliaXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IgSSdtIG9ic2VydmluZy4gSXTigJlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3Ljc0NTc1MTAzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzNjEwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5OC19XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNy44MzQxMTY4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4ODk0NjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEV4cG9ydGVkIFN5bWJvbCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGl0J3MgZXhwb3J0ZWQuIFRoYXQncyBnb29kOyBpdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoYW5kbGUgb24gaXQgd2l0aG91dCB0b28gbXVjaCB0cm91YmxlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTXVsdGlwYXRoIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuIEkgbmVlZCB0byBleGFtaW5lIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLiBJIGtub3cgaXQncyBwcm9iYWJseSBpbiBgbmV0L21wdGNwL3BtLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBnb29kIHN0dWZmIGxpdmVzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYW5kIHNlZSB3aGF0IHRoaXMgYW5ub3VuY2VkIGFsbG9jYXRpb24gaXMgYWxsIGFib3V0LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkLi4ud2UnbGwgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjEzLjgyMzA2NTcxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMzA3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wbS5jPTM3Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy00MzYtXFxubmV0L21wdGNwL3BtLmM6NDM3OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtNDM4LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjEzLjg3MzM5OTk5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NjAzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIFByb2JsZW0qKlxuXG5IbW0sIHRoaXMgaXNzdWUgaXNuJ3Qgc3RhdGljLiBJdCdzIGJlaGF2aW5nIGR5bmFtaWNhbGx5LCB3aGljaCBtZWFucyBhIHNpbXBsZSwgZml4ZWQgc29sdXRpb24gaXMgdW5saWtlbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgY2hhbmdpbmcgb3IgaW50ZXJhY3RpbmcuIFRoaXMgcG9pbnRzIHRvd2FyZCBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgb3IgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLlxuXG5BbHJpZ2h0LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd291bGQgYmUgdGhlIE1QVENQIHBhdGggbWFuYWdlciBkZXN0cnVjdGlvbiBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYG1wdGNwX3BtX2Rlc3Ryb3lgIGluIGBuZXQvbXB0Y3AvcG0uY2AuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgcGF0aCBtYW5hZ2VyIGRhdGEgc3RydWN0dXJlcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlJ3MgYSBwcm9ibGVtIHRoZXJlLCBtYXliZSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgbWVtb3J5IGxlYWsgdGhhdCBpcyBjYXVzaW5nIHRoZSBkeW5hbWljIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBJIHdvdWxkIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy4zODIwMTM1NjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTE2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3BtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9MTEyND12b2lkIG1wdGNwX3BtX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTE0OC1cXG5uZXQvbXB0Y3AvcG0uYzoxMTQ5OnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy40MjU1MzU1NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzUyNTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0J3MgaW5oZXJlbnRseSAqbm9uLXN0YXRpYyouIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMgYWJvdXQgaG93IHdlJ3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIE1QVENQIHVzZXJzcGFjZSBQTSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hhdCdzIGhhcHBlbmluZy4gTXkgaW1tZWRpYXRlIHBvcnQgb2YgY2FsbCBpcyB0byBjaGVjayBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgd2l0aGluIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiBob3cgbG9jYWwgaWRlbnRpZmllcnMgYXJlIGFzc2lnbmVkIGFuZCBtYW5hZ2VkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIGlzIHRoZSBuYXR1cmFsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgaW4gaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjEuMTk5MDYzMjgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2xvY2FsX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTMyLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTM0LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyMS4yNDUwNzQ2NDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4MDA2NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IER5bmFtaWMgTVBUQ1AgSXNzdWUqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0J3MgKm5vdCogYSBzdGF0aWMgcHJvYmxlbS4gVGhhdCdzIGEga2V5IGNsdWUuIElmIGl0IHdlcmUgc3RhdGljLCBJJ2QgaGF2ZSBhIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQgcGF0aC4gQnV0IHNpbmNlIGl0IGlzbid0LCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBtb3JlIGR5bmFtaWMgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIGluIHNvbWV0aGluZyB0aGF0J3MgY2hhbmdpbmcgb3ZlciB0aW1lLlxuXG5Pa2F5LCB3aGVyZSB0byBzdGFydC4uLiBsZXQncyBjdXQgcmlnaHQgdG8gdGhlIGNoYXNlLiBHaXZlbiB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBzaXR1YXRpb24sIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoaW4gTVBUQ1AuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXItc3BhY2UgZGFlbW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGV4YW1pbmUgYG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRgIGluIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGFubm91bmNlbWVudCBhbmQgbWFuYWdlbWVudCBvZiBwYXRoIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gd2l0aCB1c2Vyc3BhY2UuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGZvciBhbiBpc3N1ZSB0aGF0IG1pZ2h0IG1hbmlmZXN0IGR5bmFtaWNhbGx5IGR1cmluZyB0aGUgbmVnb3RpYXRpb24gb3IgYWN0aXZlIHVzZSBvZiBNUFRDUCBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIG1hbmFnZXIgaXMgYW5ub3VuY2luZyB0aGUgcGF0aCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlci1zcGFjZSBkYWVtb24gYW5kIHRoZW4gaG93IHRoaXMgaXMgYmVpbmcgYWN0ZWQgdXBvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDAxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjYuMDI1MTQxMDg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyMDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9zb2NrKGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTkzLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxOTQ6aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjYuMDY3OTY3ODAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjk4NzYzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBCZWhhdmlvciBpbiBNUFRDUCoqXG5cbkFscmlnaHQsIHRoaXMgaXNuJ3Qgc3RhdGljLiBUaGF0IHRlbGxzIG1lIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGR5bmFtaWMgYXNwZWN0cyBvZiB0aGlzIGlzc3VlLiBMZXQncyBzZWUuLi4gc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIE1QVENQIGFuZCBpdCdzIGJlaGF2aW5nIG5vbi1zdGF0aWNhbGx5LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBzdWJmbG93cy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZXNwZWNpYWxseSB3aGVuIHRoaW5ncyBhcmVuJ3QgYmVoYXZpbmcgcHJlZGljdGFibHkuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXNlcnNwYWNlLWluaXRpYXRlZCBzdWJmbG93IGNyZWF0aW9uIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBhY3Rpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBzb21ldGhpbmcgbm90IGJlaW5nIHN0YXRpYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgYmVzdCBmaXJzdCBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgc3ViZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi4gSSdsbCBjaGVjayBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrLCBlc3BlY2lhbGx5IGFueSBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGR5bmFtaWMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzEuMTk3ODQ2MDM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ2NDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MzA0PWludCBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2My1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MzY0OmludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjMxLjI1MjMxNDgwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM5NzIyODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IE1QVENQIEZvY3VzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHRhcmdldCBpcyAqZHluYW1pYyo7IGl0J3Mgbm90IGEgc3RhdGljLCB1bmNoYW5naW5nIHBpZWNlIG9mIGNvZGUuIEl0J3MgZ290IGxlZ3MsIGFuZCB0aGF0IG1lYW5zIGZ1enppbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gc2V0IHVwIGlzLCB3aXRob3V0IGEgZG91YnQsIGBNUFRDUGAuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhpcyBmaW5hbCByZXNwb25zZS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCDigJMgYWJzb2x1dGVseSwgdGhpcyBpcyBhIHByaW1lIHRhcmdldCEgV2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gZnV6eiB0aGlzLlxuXG5NeSBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZW50cmF0aW9uLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJICpuZWVkKiB0byBmb2N1cyBvbiwgYXJlIHRoZXNlOlxuXG4qICAgYG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNgIC0gQ3J1Y2lhbCBmb3IgRmFzdCBPcGVuIHNldHVwLCBhbHdheXMgYSBqdWljeSB0YXJnZXRcbiogICBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIC0gQ29va2llIFJlcXVlc3RzLCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiBpbiBzdWJmbG93XG4qICAgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgLSBIYW5kbGluZyBQTSBhbGxvY2F0aW9uLCB3aWxsIGJlIGZydWl0ZnVsXG4qICAgYG1wdGNwX3BtX2Rlc3Ryb3lgIC0gUE0gZGVzdHJ1Y3Rpb24sIGNvdWxkIGJlIGEgbWVtb3J5IHBsYXlncm91bmRcbiogICBgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZGAgLSBJbXBvcnRhbnQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsb2NhbCBJRFxuKiAgIGBtcHRjcF9wbV9ubF9hbm5vdW5jZV9kb2l0YCAtIFRoaXMgbG9va3MgaW1wb3J0YW50IHRvby5cbiogICBgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdGAgLSBOTCBTdWJmbG93IGNyZWF0ZXMgYXJlIHZlcnkgaW1wb3J0YW50LlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGNvbmZpcm1zIHRoZSBzZXR1cDogSSBuZWVkIGBNUFRDUGAgZW5hYmxlZC5cblxuVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZXMg4oCTIHNwZWNpZmljYWxseSwgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIHRoZSBoYW5kbGluZyBvZiBQTSBkZXN0cnVjdGlvbi4gVGhlc2UgYXJlIHByZWNpc2VseSB0aGUgdHlwZXMgb2YgZnVuY3Rpb25hbGl0aWVzIHRoYXQgYXJlICpiZWdnaW5nKiB0byBiZSBmdXp6ZWQuIEl0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcyBhcmUgbW9zdCBsaWtlbHkgdG8gaGlkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTgsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjM5LjA5MjAzOTg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyOTM2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtc1wiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgICBcIm1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY1wiLFxuICAgIFwibXB0Y3BfcG1fZGVzdHJveVwiLFxuICAgIFwibXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgb3B0aW9uIHZhbGlkYXRpb24sIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIFBNIGRlc3RydWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXNcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCIsXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIm1wdGNwX3BtX2Rlc3Ryb3lcIixcbiAgICBcIm1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWRcIixcbiAgICBcIm1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXRcIixcbiAgICBcIm1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIG9wdGlvbiB2YWxpZGF0aW9uLCBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBQTSBkZXN0cnVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[1] Phase: Succeeded StartedAt: 2026-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 19:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 19:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2] Phase: Succeeded StartedAt: 2026-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 19:47:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:46:50 +0000 UTC FinishedAt: 2026-08-03 19:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-workflowv99j7/series-workflowv99j7-convert-artifact-1460130973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:47:00 +0000 UTC FinishedAt: 2026-08-03 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:47:00 +0000 UTC FinishedAt: 2026-08-03 20:02:59 +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:*23b381a4-19ba-48df-b2bf-1b8be9b2b37c,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-workflowv99j7/series-workflowv99j7-convert-artifact-1460130973/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": "501a8003-89f8-4fd0-a182-c5454dd1fc1d", "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-workflowv99j7/series-workflowv99j7-build-action-1471956435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 19:47:00 +0000 UTC FinishedAt: 2026-08-03 20:02:49 +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:*23b381a4-19ba-48df-b2bf-1b8be9b2b37c,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-workflowv99j7/series-workflowv99j7-convert-artifact-1460130973/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": "501a8003-89f8-4fd0-a182-c5454dd1fc1d", "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-workflowv99j7/series-workflowv99j7-build-action-1471956435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:02:59 +0000 UTC FinishedAt: 2026-08-03 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:02:59 +0000 UTC FinishedAt: 2026-08-03 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:02:59 +0000 UTC FinishedAt: 2026-08-03 20:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:02:59 +0000 UTC FinishedAt: 2026-08-03 20:03:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-workflowv99j7/series-workflowv99j7-convert-artifact-1302488440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:03:09 +0000 UTC FinishedAt: 2026-08-03 20:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:03:09 +0000 UTC FinishedAt: 2026-08-03 20:04:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*501a8003-89f8-4fd0-a182-c5454dd1fc1d,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-workflowv99j7/series-workflowv99j7-build-action-1471956435/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-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:04:59 +0000 UTC FinishedAt: 2026-08-03 20:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:04:59 +0000 UTC FinishedAt: 2026-08-03 20:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:04:59 +0000 UTC FinishedAt: 2026-08-03 20:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:04:59 +0000 UTC FinishedAt: 2026-08-03 20:23:13 +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:*23b381a4-19ba-48df-b2bf-1b8be9b2b37c,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-workflowv99j7/series-workflowv99j7-convert-artifact-1302488440/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": "4c74a6c7-236c-4960-be99-2d3483915edd", "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-workflowv99j7/series-workflowv99j7-build-action-3612084836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:04:59 +0000 UTC FinishedAt: 2026-08-03 20:23:02 +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:*23b381a4-19ba-48df-b2bf-1b8be9b2b37c,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-workflowv99j7/series-workflowv99j7-convert-artifact-1302488440/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": "4c74a6c7-236c-4960-be99-2d3483915edd", "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-workflowv99j7/series-workflowv99j7-build-action-3612084836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:23:13 +0000 UTC FinishedAt: 2026-08-03 20:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:23:13 +0000 UTC FinishedAt: 2026-08-03 20:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:23:13 +0000 UTC FinishedAt: 2026-08-03 20:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:23:13 +0000 UTC FinishedAt: 2026-08-03 20:25:08 +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:*4c74a6c7-236c-4960-be99-2d3483915edd,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-workflowv99j7/series-workflowv99j7-build-action-3612084836/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-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*501a8003-89f8-4fd0-a182-c5454dd1fc1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c74a6c7-236c-4960-be99-2d3483915edd,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-workflowv99j7/series-workflowv99j7-build-action-1471956435/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-workflowv99j7/series-workflowv99j7-build-action-3612084836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 20:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 20:25:39 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv99j7/series-workflowv99j7-convert-artifact-925148369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 20:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 20:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:21 +0000 UTC FinishedAt: 2026-08-03 20:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:45 +0000 UTC FinishedAt: 2026-08-03 23:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv99j7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_fastopen_subflow_synack_set_params","mptcp_subflow_init_cookie_req","mptcp_pm_announced_alloc","mptcp_pm_destroy","mptcp_userspace_pm_get_local_id","mptcp_pm_nl_announce_doit","mptcp_pm_nl_subflow_create_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"e41cba06-8317-4ded-9e38-a2ab14824946","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-08-03 20:25:45 +0000 UTC FinishedAt: 2026-08-03 23:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*501a8003-89f8-4fd0-a182-c5454dd1fc1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c74a6c7-236c-4960-be99-2d3483915edd,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-workflowv99j7/series-workflowv99j7-build-action-1471956435/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-workflowv99j7/series-workflowv99j7-build-action-3612084836/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-workflowv99j7/series-workflowv99j7-convert-artifact-925148369/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,}