Name: series-workflow89gjm Phase: Succeeded StartedAt: 2026-08-12 17:09:29 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[0] Phase: Succeeded StartedAt: 2026-08-12 17:09:29 +0000 UTC FinishedAt: 2026-08-12 17:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 17:09:29 +0000 UTC FinishedAt: 2026-08-12 17:14:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "094f3a75-7951-49c9-ac96-83f2a0a43d97" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_pm_subflow_check_next", "mptcp_pm_nl_remove_doit", "mptcp_init_sock", "__mptcp_retrans", "mptcp_finish_join", "__mptcp_subflow_connect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfaW5pdF9zb2NrJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9maW5pc2hfam9pbiYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3N1YmZsb3dfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjYzIwYjYyNWVmOWQ1ZjFhNGRhNjhiZmJmZDlkN2I5YmU3N2JjMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCAmIzQzOzE5LDYgQEAgc3RydWN0IHNlcV9maWxlO1xuIFxuIC8qIE1QVENQIHNrX2J1ZmYgZXh0ZW5zaW9uIGRhdGEgKi9cbiBzdHJ1Y3QgbXB0Y3BfZXh0IHtcbi1cdHVuaW9uIHtcbi1cdFx0dTY0XHRkYXRhX2Fjaztcbi1cdFx0dTMyXHRkYXRhX2FjazMyO1xuLVx0fTtcbiBcdHU2NFx0XHRkYXRhX3NlcTtcbiBcdHUzMlx0XHRzdWJmbG93X3NlcTtcbiBcdHUxNlx0XHRkYXRhX2xlbjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuaW5kZXggMDQ1MjFhY2JhNDgzMi4uMjI4ODJiZDAzNDU5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcbkBAIC03NSw3ICYjNDM7NzUsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHRUUF9BUkdTKG1wZXh0KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4tXHRcdF9fZmllbGQodTY0LCBkYXRhX2FjaylcbiBcdFx0X19maWVsZCh1NjQsIGRhdGFfc2VxKVxuIFx0XHRfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpXG4gXHRcdF9fZmllbGQodTE2LCBkYXRhX2xlbilcbkBAIC05NCw3ICYjNDM7OTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCAmIzQzOzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCxcbiBcdFx0X19lbnRyeS1cdTAwM2VpbmZpbml0ZV9tYXAgPSBtcGV4dC1cdTAwM2VpbmZpbml0ZV9tYXA7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwmIzM0O2RhdGFfYWNrPSVsbHUgZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXVcJiMzNDssXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7ZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXVcJiMzNDssXG4mIzQzO1x0XHQgIF9fZW50cnktXHUwMDNlZGF0YV9zZXEsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VzdWJmbG93X3NlcSwgX19lbnRyeS1cdTAwM2VkYXRhX2xlbixcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZWNzdW0sIF9fZW50cnktXHUwMDNldXNlX21hcCxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZWRzbjY0LCBfX2VudHJ5LVx1MDAzZWRhdGFfZmluLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggMjU2OTM4NWJhYjdjYS4uNjA4Y2I1Njg4OTdjZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtMjEsMTQgJiM0MzsyMSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEZhbGxiYWNrVG9rZW5Jbml0XCYjMzQ7LCBNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUFRDUFJldHJhbnNcJiMzNDssIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbk5vVG9rZW5Gb3VuZFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5OT1RPS0VOKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbk5vSWRGb3VuZFwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5blJ4XCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlJYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luQmFja3VwUnhcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5TeW5BY2tSeFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5bkFja0JhY2t1cFJ4XCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luQWNrSE1hY0ZhaWx1cmVcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5bkFja05vTVBKb2luXCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5BY2tSeFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbkFja0hNYWNGYWlsdXJlXCYjMzQ7LCBNUFRDUF9NSUJfSk9JTkFDS01BQyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5BY2tOb01QSm9pblwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbkFja05vQ3R4XCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5SZWplY3RlZFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5Ob3RFc3RhYmxpc2hlZFwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luVHhcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5TeW5UeENyZWF0U2tFcnJcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFhDUkVBVFNLRVJSKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luVHhCaW5kRXJyXCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyAmIzQzOzg2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmxhY2tob2xlXCYjMzQ7LCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBDYXBhYmxlRGF0YUZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfTVBDQVBBQkxFREFUQUZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TUQ1U2lnRmFsbGJhY2tcJiMzNDssIE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNRDVTaWdSZXNldFwmIzM0OywgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RHNzRmFsbGJhY2tcJiMzNDssIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtEc3NSZXNldFwmIzM0OywgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgJiM0MzsxNiwxOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQsXHQvKiBDb3VsZCBub3QgaW5pdC9hbGxvY2F0ZSB0b2tlbiAqL1xuIFx0TVBUQ1BfTUlCX1JFVFJBTlNTRUdTLFx0XHQvKiBTZWdtZW50cyByZXRyYW5zbWl0dGVkIGF0IHRoZSBNUFRDUC1sZXZlbCAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5OT1RPS0VOLFx0XHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCAqL1xuJiM0MztcdE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQsXHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCBubyBsb2NhbCBJRCB3YXMgZm91bmQgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOUlgsXHRcdC8qIFJlY2VpdmVkIGEgU1lOICYjNDM7IE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTkFDS1JYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyxcdC8qIEhNQUMgd2FzIHdyb25nIG9uIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqL1xuJiM0MztcdE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIFNZTi9BQ0sgKi9cbiBcdE1QVENQX01JQl9KT0lOQUNLUlgsXHRcdC8qIFJlY2VpdmVkIGFuIEFDSyAmIzQzOyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTkFDS01BQyxcdFx0LyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICYjNDM7IE1QX0pPSU4gKi9cbiYjNDM7XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4sXHQvKiBNUF9SU1Q6IG1pc3NpbmcgTVBfSk9JTiBpbiBBQ0sgKi9cbiYjNDM7XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgsXHQvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi9cbiBcdE1QVENQX01JQl9KT0lOUkVKRUNURUQsXHRcdC8qIFRoZSBQTSByZWplY3RlZCB0aGUgSk9JTiByZXF1ZXN0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIsXHQvKiBOb3QgYWJsZSB0byBjcmVhdGUgYSBzb2NrZXQgd2hlbiBzZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSLFx0LyogTm90IGFibGUgdG8gYmluZCgpIHRoZSBhZGRyZXNzIHdoZW4gc2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovXG5AQCAtODQsNyAmIzQzOzg5LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0XHRcdFx0XHQgKiBlc3RhYmxpc2hlZCBwYWNrZXRcbiBcdFx0XHRcdFx0ICovXG4gXHRNUFRDUF9NSUJfTUQ1U0lHRkFMTEJBQ0ssXHQvKiBDb25mbGljdGluZyBUQ1Agb3B0aW9uIGVuYWJsZWQgKi9cbiYjNDM7XHRNUFRDUF9NSUJfTUQ1U0lHUkVTRVQsXHRcdC8qIE1QX1JTVDogTUQ1U0lHIGVuYWJsZWQgb24gbGlzdGVuZXIgKi9cbiBcdE1QVENQX01JQl9EU1NGQUxMQkFDSyxcdFx0LyogQmFkIG9yIG1pc3NpbmcgRFNTICovXG4mIzQzO1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xuaW5kZXggZDFmNzNjM2UzOWZhMy4uOGI2ODg2ODI1NWM1MCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG0uY1xuQEAgLTY3MCw3ICYjNDM7NjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdGlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSkge1xuIFx0XHRpZiAodXBkYXRlX3N1YmZsb3dzKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBtLVx1MDAzZWxvY2spO1xuLVx0XHRcdHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzLS07XG4mIzQzO1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuJiM0MztcdFx0XHRcdHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzLS07XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cG0tXHUwMDNlbG9jayk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5AQCAtMjgxLDggJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tXHRcdFx0XHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9ybV9saXN0IGFsaXN0ID0geyAubnIgPSAwIH07XG4gXHRpbnQgYW5ub19uciA9IDA7XG5AQCAtMzQwLDcgJiM0MzszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuJiM0MztcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcbiBcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTU4MSwxNyAmIzQzOzU4MSwyMyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuJiM0MztcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbiYjNDM7XHR1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfcnRvX21heCk7XG4gXHR1MzIgcmV0cmFuc21pdHM7XG4gXG4mIzQzO1x0LyogVGhlIHN5c2N0bHMgYXJlIHZhbGlkYXRlZCBpbmRlcGVuZGVudGx5OiBydG9fbWluIFx1MDAzZSBydG9fbWF4IGlzXG4mIzQzO1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4mIzQzO1x0ICovXG4gXHRyZXRyYW5zbWl0cyA9IG1pbl90KHUzMiwgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdCAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7XG4mIzQzO1x0XHRcdCAgICBpbG9nMihtYXhfdCh1MzIsIHJ0b19tYXggLyBydG9fbWluLCAxKSkpO1xuIFxuLVx0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTiBcdTAwM2NcdTAwM2MgcmV0cmFuc21pdHM7XG4mIzQzO1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4mIzQzO1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSB0b3V0IFx1MDAzZSAwID8gdG91dCA6XG4mIzQzO1x0XHRcdFx0ICAgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3J0b19taW4pO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuQEAgLTMxNjEsNyAmIzQzOzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4mIzQzO1x0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1zay1cdTAwM2Vqb2luX2xpc3QpO1xuQEAgLTMxNzAsNyAmIzQzOzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuJiM0MztcbiYjNDM7XHQvKiBtc2sgZG9lcyBub3QgZ28gdGhyb3VnaCB0Y3BfaW5pdF9zb2NrKCk7IHNlZWQgUlRPIGJvdW5kcy4gKi9cbiYjNDM7XHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4mIzQzO1x0XHR1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19taW5fdXMpKTtcbiYjNDM7XHRpY3NrLVx1MDAzZWljc2tfcnRvX21heCA9XG4mIzQzO1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbiYjNDM7XHRtc2stXHUwMDNldGltZXJfaXZhbCA9IGljc2stXHUwMDNlaWNza19ydG9fbWluO1xuIFx0bXNrLVx1MDAzZXNjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPO1xuIFx0bXNrLVx1MDAzZWJhY2tsb2dfbGVuID0gMDtcbiBcdG1wdGNwX2luaXRfcnR0X2VzdChtc2spO1xuQEAgLTM5ODgsNiAmIzQzOzQwMDIsNyBAQCBib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXG4gXG4gXHQvKiBtcHRjcCBzb2NrZXQgYWxyZWFkeSBjbG9zaW5nPyAqL1xuIFx0aWYgKCFtcHRjcF9pc19mdWxseV9lc3RhYmxpc2hlZChwYXJlbnQpKSB7XG4mIzQzO1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCAmIzQzOzExNDksNiBAQCBpbnQgbXB0Y3BfcG1fYW5ub3VuY2VfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIsXG4gXHRcdFx0ICAgYm9vbCBlY2hvKTtcbiBpbnQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpO1xuLXZvaWQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi1cdFx0XHRcdHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSk7XG4gXG4gLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi9cbiBleHRlcm4gc3RydWN0IG1wdGNwX3BtX29wcyBtcHRjcF9wbV9rZXJuZWw7XG5AQCAtMTI1NCw3ICYjNDM7MTI1Miw4IEBAIHU4IG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiAvKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRpZiAoLS1tc2stXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgLS1tc2stXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxuIFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VwbS5hY2NlcHRfc3ViZmxvdywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCBlMWYyMGZmOGZkYjQyLi5hZjgxYWQ1ZTY5OWQxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTk2LDYgJiM0Mzs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFxuIFx0bG9jYWxfaWQgPSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcbiBcdGlmIChsb2NhbF9pZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHQgKiBUQ1Agb3B0aW9uIHNwYWNlLlxuIFx0ICovXG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKHRjcF9zayhza19saXN0ZW5lciktXHUwMDNlbWQ1c2lnX2luZm8pKSB7XG4mIzQzO1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2tfbGlzdGVuZXIpLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpO1xuIFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTYzLDYgJiM0Mzs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4mIzQzO1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRcdGdvdG8gZG9fcmVzZXQ7XG4gXHRcdH1cbkBAIC04NjUsNiAmIzQzOzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xuIFx0XHRcdGlmIChmYWxsYmFja19pc19mYXRhbCkge1xuJiM0MztcdFx0XHRcdGlmICghY3R4KVxuJiM0MztcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xuJiM0MztcdFx0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4mIzQzO1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xuIFx0XHRcdFx0Z290byBkaXNwb3NlX2NoaWxkO1xuIFx0XHRcdH1cbkBAIC0xNDE2LDYgJiM0MzsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4mIzQzO1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlcmVzZXRfcmVhc29uID0gc3RhdHVzID09IE1BUFBJTkdfTk9EU1MgP1xuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTUlERExFQk9YIDpcbiBcdFx0XHRcdFx0XHRNUFRDUF9SU1RfRU1QVENQO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5pbmRleCBjYmU1NzNjNGFiM2FkLi5lYTRjYjZjMWJkNWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuQEAgLTEyNjQsNyAmIzQzOzEyNjQsNyBAQCBzdGF0aWMgdm9pZCBhcHBseV9jbXNnX3R5cGVzKGludCBmZCwgY29uc3Qgc3RydWN0IGNmZ19jbXNnX3R5cGVzICpjbXNnKVxuIFxuIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTtcbiYjNDM7XHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTtcbiBcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuIFxuIFx0Y2ZnX2Ntc2dfdHlwZXMuY21zZ19lbmFibGVkID0gMTtcbkBAIC0xMjkyLDcgJiM0MzsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKVxuIFxuIHN0YXRpYyB2b2lkIHBhcnNlX3NldHNvY2tfb3B0aW9ucyhjb25zdCBjaGFyICpuYW1lKVxuIHtcbi1cdGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRpZiAobmV4dCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcbmluZGV4IGQxNTg2NzhmYTZhYjAuLjdhMmE4NTFmYTBhZGIgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcbkBAIC0yMTIsOCAmIzQzOzIxMiw4IEBAIGlmICRjaGVja3N1bTsgdGhlblxuIGZpXG4gXG4gaWYgJGNhcHR1cmU7IHRoZW5cbi1cdHJuZGg9XCYjMzQ7JHtuczE6NH1cJiMzNDtcbi1cdG1wdGNwX2xpYl9wcl9pbmZvIFwmIzM0O1BhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS1cJiMzNDtcbiYjNDM7XHRjYXBwcmVmaXg9XCYjMzQ7bXB0Y3BfY29ubmVjdC0ke25zMTo0fVwmIzM0O1xuJiM0MztcdG1wdGNwX2xpYl9wcl9pbmZvIFwmIzM0O3BjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tXCYjMzQ7XG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCAmIzQzOzM3Miw4IEBAIGRvX3RyYW5zZmVyKClcbiBcdFx0XHRjYXB1c2VyPVwmIzM0Oy1aICRTVURPX1VTRVJcJiMzNDtcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cJiMzNDske3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwmIzM0O1xuLVx0XHRsb2NhbCBjYXBvcHQ9XCYjMzQ7LWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cJiMzNDtcbiYjNDM7XHRcdGxvY2FsIGNhcGZpbGU9XCYjMzQ7JHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwmIzM0O1xuJiM0MztcdFx0bG9jYWwgY2Fwb3B0PVwmIzM0Oy1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwmIzM0O1xuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bGlzdGVuZXJfbnN9IHRjcGR1bXAgJHtjYXBvcHR9IFxcXG4gXHRcdFx0LXcgXCYjMzQ7JHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwXCYjMzQ7IFx1MDAzZVx1MDAzZSBcJiMzNDske2NhcG91dH1cJiMzNDsgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcbmluZGV4IDVlMjIyYmE5NzdlNGUuLjNiOGQyYzhhNjIxNjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5AQCAtMzc3LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwmIzM0OyVbXjpdOiVkICVbXjpdOiVkXCYjMzQ7LCBzYWRkciwgXHUwMDI2c3BvcnQsIGRhZGRyLCBcdTAwMjZkcG9ydCk7XG4mIzQzO1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwmIzM0OyU2M1teOl06JWQgJTYzW146XTolZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwmIzM0O0lQIFBPUlQgUGFpcnMgaGFzIHN0eWxlIHByb2JsZW1zIVwmIzM0Oyk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggN2RjOTFmYWM0OTE3ZS4uMThjZTcxMzZhMmIwZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTc1LDYgJiM0Mzs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4mIzQzO3Vuc2V0IGpvaW5fc3luYWNrX25vX21wam9pblxuJiM0Mzt1bnNldCBqb2luX2Fja19ub19tcGpvaW5cbiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fY3R4XG4mIzQzO3Vuc2V0IGpvaW5fbm90X2VzdGFibGlzaGVkXG4mIzQzO3Vuc2V0IGpvaW5fbm9faWRfZm91bmRcbiYjNDM7XG4mIzQzO3Vuc2V0IHJzdF9tZDVzaWdcbiYjNDM7dW5zZXQgcnN0X2Rzc1xuIFxuIHVuc2V0IGZiX25zMVxuIHVuc2V0IGZiX25zMlxuQEAgLTk3MSw3ICYjNDM7OTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcJiMzNDttcF9qb2luLSUwMnUtJXMucGNhcFwmIzM0OyBcJiMzNDskTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwmIzM0OyBcJiMzNDskbnNcJiMzNDspXG4gXG4gXHRcdGVjaG8gXCYjMzQ7Q2FwdHVyaW5nIHRyYWZmaWMgZm9yIHRlc3QgJE1QVENQX0xJQl9URVNUX0NPVU5URVIgaW50byAkY2FwZmlsZVwmIzM0O1xuLVx0XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc1wmIzM0OyB0Y3BkdW1wIC1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAkY2FwdXNlciAtdyBcJiMzNDskY2FwZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGNhcG91dFwmIzM0OyAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiYjNDM7XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IHRjcGR1bXAgLWkgYW55IC1zIDEyOCAtQiAzMjc2OCAkY2FwdXNlciAtdyBcJiMzNDskY2FwZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGNhcG91dFwmIzM0OyAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgJiM0MzsxMzYxLDggQEAgY2hrX3JzdF9ucigpXG4gXHRsb2NhbCByc3RfdHg9JDFcbiBcdGxvY2FsIHJzdF9yeD0kMlxuIFx0bG9jYWwgbnNfaW52ZXJ0PSR7MzotXCYjMzQ7XCYjMzQ7fVxuJiM0MztcdGxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9XG4mIzQzO1x0bG9jYWwgZHNzPSR7cnN0X2RzczotMH1cbiBcdGxvY2FsIGNvdW50XG4gXHRsb2NhbCBuc190eD0kbnMxXG4gXHRsb2NhbCBuc19yeD0kbnMyXG5AQCAtMTM4OSw2ICYjNDM7MTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4mIzQzO1xuJiM0MztcdCMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxuJiM0MztcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4mIzQzO1x0IyAoc2VydmVyKSwgRHNzUmVzZXQgb24gdGhlIGRhdGEgcmVjZWl2ZXIgKGNsaWVudCkuXG4mIzQzO1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwmIzM0O01QVGNwRXh0TUQ1U2lnUmVzZXRcJiMzNDspXG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskY291bnRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskY291bnRcJiMzNDsgIT0gXCYjMzQ7JG1kNXNpZ1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtNRDVTaWdSZXNldFwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZ1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcJiMzNDtNUFRjcEV4dERzc1Jlc2V0XCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRkc3NcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cHJpbnRfY2hlY2sgXCYjMzQ7RHNzUmVzZXRcJiMzNDtcbiYjNDM7XHRcdGZhaWxfdGVzdCBcJiMzNDtnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3NcJiMzNDtcbiYjNDM7XHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICYjNDM7MTYxMiwxMSBAQCBjaGtfam9pbl9ucigpXG4gXHRsb2NhbCByc3RfbnI9JHtqb2luX3JzdF9ucjotMH1cbiBcdGxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9XG4gXHRsb2NhbCBjb3JydXB0ZWRfcGt0cz0ke2pvaW5fY29ycnVwdGVkX3BrdHM6LTB9XG4mIzQzO1x0bG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH1cbiYjNDM7XHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuJiM0MztcdGxvY2FsIGFja19ub19jdHg9JHtqb2luX2Fja19ub19jdHg6LTB9XG4mIzQzO1x0bG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9XG4mIzQzO1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgJiM0MzsxNjg1LDQ0IEBAIGNoa19qb2luX25yKClcbiBcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBzeW4gcmVqZWN0ZWQgZXhwZWN0ZWQgJHN5bl9yZWpcJiMzNDtcbiBcdGZpXG4gXG4mIzQzO1x0IyBQZXItZXZlbnQgTVBUQ1BfUlNUX0VNUFRDUCBKT0lOIGNvdW50ZXJzOyBkZWZhdWx0IDAsIGdhdGVkIG9uXG4mIzQzO1x0IyBhdmFpbGFiaWxpdHkuICBGaXhlZCBuYW1lc3BhY2VzOiB0aGUgKlN5bkFjayogb25lIGZpcmVzIG9uIHRoZVxuJiM0MztcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcJiMzNDtNUFRjcEV4dE1QSm9pblN5bkFja05vTVBKb2luXCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRzeW5hY2tfbm9fbXBqb2luXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJjPSR7S1NGVF9GQUlMfVxuJiM0MztcdFx0cHJpbnRfY2hlY2sgXCYjMzQ7c3luYWNrIG5vIG1wam9pblwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBzeW5hY2sgbm8gbXBqb2luIGV4cGVjdGVkICRzeW5hY2tfbm9fbXBqb2luXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cJiMzNDspXG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskY291bnRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskY291bnRcJiMzNDsgIT0gXCYjMzQ7JGFja19ub19tcGpvaW5cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDthY2sgbm8gbXBqb2luXCYjMzQ7XG4mIzQzO1x0XHRmYWlsX3Rlc3QgXCYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIGFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJGFja19ub19tcGpvaW5cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCYjMzQ7TVBUY3BFeHRNUEpvaW5BY2tOb0N0eFwmIzM0OylcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyRjb3VudFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRjb3VudFwmIzM0OyAhPSBcJiMzNDskYWNrX25vX2N0eFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRyYz0ke0tTRlRfRkFJTH1cbiYjNDM7XHRcdHByaW50X2NoZWNrIFwmIzM0O2FjayBubyBjdHhcJiMzNDtcbiYjNDM7XHRcdGZhaWxfdGVzdCBcJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcJiMzNDtNUFRjcEV4dE1QSm9pbk5vdEVzdGFibGlzaGVkXCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRub3RfZXN0YWJsaXNoZWRcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtqb2luIG5vdCBlc3RhYmxpc2hlZFwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBub3QgZXN0YWJsaXNoZWQgZXhwZWN0ZWQgJG5vdF9lc3RhYmxpc2hlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcJiMzNDtNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwmIzM0OylcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyRjb3VudFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRjb3VudFwmIzM0OyAhPSBcJiMzNDskbm9faWRfZm91bmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtqb2luIG5vIGlkIGZvdW5kXCYjMzQ7XG4mIzQzO1x0XHRmYWlsX3Rlc3QgXCYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIG5vIGlkIGZvdW5kIGV4cGVjdGVkICRub19pZF9mb3VuZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuIFx0cHJpbnRfcmVzdWx0cyBcJiMzNDtqb2luIFJ4XCYjMzQ7ICR7cmN9XG4gXG4gXHRqb2luX3N5bl90eD1cJiMzNDske2pvaW5fc3luX3R4Oi0ke3N5bl9ucn19XCYjMzQ7IFxcXG5AQCAtMjM1OSw2ICYjNDM7MjQyNywzMSBAQCBzaWduYWxfYWRkcmVzc190ZXN0cygpXG4gXHRcdFx0Y2hrX2FkZF9uciA0IDRcbiBcdFx0ZmlcbiBcdGZpXG4mIzQzO1xuJiM0MztcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4mIzQzO1x0IyBsaXN0ZW5lciBpcyBib3VuZCBhdCBpdDogdGhlIGNsaWVudCYjMzk7cyBNUF9KT0lOIHJvdXRlcyBsb2NhbGx5XG4mIzQzO1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4mIzQzO1x0IyBNUEpvaW5TeW5BY2tOb01QSm9pbiBpbmNyZW1lbnRzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiYjNDM7XHRpZiByZXNldCBcJiMzNDtzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRsb2NhbCBleHRyYV9iaW5kXG4mIzQzO1x0XHRsb2NhbCBwb3J0XG4mIzQzO1xuJiM0MztcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMVxuJiM0MztcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuJiM0MztcdFx0cG1fbmxfYWRkX2VuZHBvaW50ICRuczEgMTAuMC4yLjIgZmxhZ3Mgc2lnbmFsXG4mIzQzO1xuJiM0MztcdFx0cG9ydD0kKGdldF9wb3J0KVxuJiM0MztcdFx0aXAgbmV0bnMgZXhlYyAke25zMn0gLi9tcHRjcF9jb25uZWN0IC1sIC10IC0xIC1wIFwmIzM0OyRwb3J0XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdC1zIFRDUCAxMC4wLjIuMiBcdTAwMjZcbiYjNDM7XHRcdGV4dHJhX2JpbmQ9JCFcbiYjNDM7XHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwmIzM0OyRuczJcJiMzNDsgXCYjMzQ7JHBvcnRcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4mIzQzO1x0XHRqb2luX3N5bmFja19ub19tcGpvaW49MSBqb2luX3N5bl90eD0xIFxcXG4mIzQzO1x0XHRcdGNoa19qb2luX25yIDAgMCAwXG4mIzQzO1xuJiM0MztcdFx0a2lsbCAke2V4dHJhX2JpbmR9IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuIH1cbiBcbiBsYW1pbmFyX2VuZHBfdGVzdHMoKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoXG5pbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAIHNtYWxsPVwmIzM0O1wmIzM0O1xuIHNvdXQ9XCYjMzQ7XCYjMzQ7XG4gY291dD1cJiMzNDtcJiMzNDtcbiBjYXBvdXQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO2NhcHByZWZpeD1cJiMzNDtcJiMzNDtcbiBzaXplPTBcbiBcbiB1c2FnZSgpIHtcbkBAIC03MCw2ICYjNDM7NzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbiYjNDM7XHRpZiAkY2FwdHVyZTsgdGhlblxuJiM0MztcdFx0Y2FwcHJlZml4PVwmIzM0O3NpbXVsdF9mbG93cy0ke25zMTo0fVwmIzM0O1xuJiM0MztcdFx0bXB0Y3BfbGliX3ByX2luZm8gXCYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCYjMzQ7JG5zMVwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDEgbmV0bnMgXCYjMzQ7JG5zMlwmIzM0O1xuIFx0aXAgbGluayBhZGQgbnMxZXRoMiBuZXRucyBcJiMzNDskbnMxXCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcJiMzNDskbnMyXCYjMzQ7XG4gXHRpcCBsaW5rIGFkZCBuczJldGgzIG5ldG5zIFwmIzM0OyRuczJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczNldGgxIG5ldG5zIFwmIzM0OyRuczNcJiMzNDtcbkBAIC0xMzYsMTUgJiM0MzsxNDIsMTQgQEAgZG9fdHJhbnNmZXIoKVxuIFxuIFx0aWYgJGNhcHR1cmU7IHRoZW5cbiBcdFx0bG9jYWwgY2FwdXNlclxuLVx0XHRsb2NhbCBybmRoPVwmIzM0OyR7bnMxOjR9XCYjMzQ7XG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCYjMzQ7XCYjMzQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRjYXB1c2VyPVwmIzM0Oy1aICRTVURPX1VTRVJcJiMzNDtcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cJiMzNDske3JuZGh9LSR7cG9ydH1cJiMzNDtcbi1cdFx0bG9jYWwgY2Fwb3B0PVwmIzM0Oy1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAke2NhcHVzZXJ9XCYjMzQ7XG4mIzQzO1x0XHRsb2NhbCBjYXBmaWxlPVwmIzM0OyR7Y2FwcHJlZml4fS0ke3BvcnR9XCYjMzQ7XG4mIzQzO1x0XHRsb2NhbCBjYXBvcHQ9XCYjMzQ7LWkgYW55IC1zIDEwOCAtQiAzMjc2OCAke2NhcHVzZXJ9XCYjMzQ7XG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtuczN9ICB0Y3BkdW1wICR7Y2Fwb3B0fSAtdyBcJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcJiMzNDsgIFx1MDAzZVx1MDAzZSBcJiMzNDske2NhcG91dH1cJiMzNDsgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0JiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX3JlbW92ZV9kb2l0JiMzNDssCiAgICAmIzM0O21wdGNwX2luaXRfc29jayYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZmluaXNoX2pvaW4mIzM0OywKICAgICYjMzQ7X19tcHRjcF9zdWJmbG93X2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYzIwYjYyNWVmOWQ1ZjFhNGRhNjhiZmJmZDlkN2I5YmU3N2JjMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oCmluZGV4IDcxYjlmYzVhNTc5NjMuLjQ4NWQ1NWI2NmVhNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaApAQCAtMTksMTAgJiM0MzsxOSw2IEBAIHN0cnVjdCBzZXFfZmlsZTsKIAogLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqLwogc3RydWN0IG1wdGNwX2V4dCB7Ci0JdW5pb24gewotCQl1NjQJZGF0YV9hY2s7Ci0JCXUzMglkYXRhX2FjazMyOwotCX07CiAJdTY0CQlkYXRhX3NlcTsKIAl1MzIJCXN1YmZsb3dfc2VxOwogCXUxNgkJZGF0YV9sZW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaAppbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmgKQEAgLTc1LDcgJiM0Mzs3NSw2IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAlUUF9BUkdTKG1wZXh0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQodTY0LCBkYXRhX2FjaykKIAkJX19maWVsZCh1NjQsIGRhdGFfc2VxKQogCQlfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpCiAJCV9fZmllbGQodTE2LCBkYXRhX2xlbikKQEAgLTk0LDcgJiM0Mzs5Myw2IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktJmd0O2RhdGFfYWNrID0gbXBleHQtJmd0O2FjazY0ID8gbXBleHQtJmd0O2RhdGFfYWNrIDogbXBleHQtJmd0O2RhdGFfYWNrMzI7CiAJCV9fZW50cnktJmd0O2RhdGFfc2VxID0gbXBleHQtJmd0O2RhdGFfc2VxOwogCQlfX2VudHJ5LSZndDtzdWJmbG93X3NlcSA9IG1wZXh0LSZndDtzdWJmbG93X3NlcTsKIAkJX19lbnRyeS0mZ3Q7ZGF0YV9sZW4gPSBtcGV4dC0mZ3Q7ZGF0YV9sZW47CkBAIC0xMTIsOCAmIzQzOzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAkJX19lbnRyeS0mZ3Q7aW5maW5pdGVfbWFwID0gbXBleHQtJmd0O2luZmluaXRlX21hcDsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7ZGF0YV9hY2s9JWxsdSBkYXRhX3NlcT0lbGx1IHN1YmZsb3dfc2VxPSV1IGRhdGFfbGVuPSV1IGNzdW09JXggdXNlX21hcD0ldSBkc242ND0ldSBkYXRhX2Zpbj0ldSB1c2VfYWNrPSV1IGFjazY0PSV1IG1wY19tYXA9JXUgZnJvemVuPSV1IHJlc2V0X3RyYW5zaWVudD0ldSByZXNldF9yZWFzb249JXUgY3N1bV9yZXFkPSV1IGluZmluaXRlX21hcD0ldSYjMzQ7LAotCQkgIF9fZW50cnktJmd0O2RhdGFfYWNrLCBfX2VudHJ5LSZndDtkYXRhX3NlcSwKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7ZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXUmIzM0OywKJiM0MzsJCSAgX19lbnRyeS0mZ3Q7ZGF0YV9zZXEsCiAJCSAgX19lbnRyeS0mZ3Q7c3ViZmxvd19zZXEsIF9fZW50cnktJmd0O2RhdGFfbGVuLAogCQkgIF9fZW50cnktJmd0O2NzdW0sIF9fZW50cnktJmd0O3VzZV9tYXAsCiAJCSAgX19lbnRyeS0mZ3Q7ZHNuNjQsIF9fZW50cnktJmd0O2RhdGFfZmluLApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jCmluZGV4IDI1NjkzODViYWI3Y2EuLjYwOGNiNTY4ODk3Y2YgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTIxLDE0ICYjNDM7MjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBGYWxsYmFja1Rva2VuSW5pdCYjMzQ7LCBNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUFRDUFJldHJhbnMmIzM0OywgTVBUQ1BfTUlCX1JFVFJBTlNTRUdTKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm9Ub2tlbkZvdW5kJiMzNDssIE1QVENQX01JQl9KT0lOTk9UT0tFTiksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5Ob0lkRm91bmQmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blJ4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5CYWNrdXBSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5bkFja0JhY2t1cFJ4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tITWFjRmFpbHVyZSYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tOb01QSm9pbiYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5BY2tSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTkFDS1JYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrSE1hY0ZhaWx1cmUmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tNQUMpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrTm9NUEpvaW4mIzM0OywgTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja05vQ3R4JiMzNDssIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblJlamVjdGVkJiMzNDssIE1QVENQX01JQl9KT0lOUkVKRUNURUQpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm90RXN0YWJsaXNoZWQmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luVHgmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4Q3JlYXRTa0VyciYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4QmluZEVyciYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksCkBAIC04MSw3ICYjNDM7ODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0gewogCVNOTVBfTUlCX0lURU0oJiMzNDtCbGFja2hvbGUmIzM0OywgTVBUQ1BfTUlCX0JMQUNLSE9MRSksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QQ2FwYWJsZURhdGFGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfTVBDQVBBQkxFREFUQUZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TUQ1U2lnRmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01ENVNpZ1Jlc2V0JiMzNDssIE1QVENQX01JQl9NRDVTSUdSRVNFVCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O0Rzc0ZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9EU1NGQUxMQkFDSyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtEc3NSZXNldCYjMzQ7LCBNUFRDUF9NSUJfRFNTUkVTRVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtTaW11bHRDb25uZWN0RmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O0ZhbGxiYWNrRmFpbGVkJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O1dpblByb2JlJiMzNDssIE1QVENQX01JQl9XSU5QUk9CRSksCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmgKaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtMTYsMTQgJiM0MzsxNiwxOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklULAkvKiBDb3VsZCBub3QgaW5pdC9hbGxvY2F0ZSB0b2tlbiAqLwogCU1QVENQX01JQl9SRVRSQU5TU0VHUywJCS8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovCiAJTVBUQ1BfTUlCX0pPSU5OT1RPS0VOLAkJLyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgdGhlIHRva2VuIHdhcyBub3QgZm91bmQgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCwJLyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5SWCwJCS8qIFJlY2VpdmVkIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYLAkvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCwJCS8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCwJLyogUmVjZWl2ZWQgYSBTWU4vQUNLICYjNDM7IE1QX0pPSU4gJiM0MzsgYmFja3VwIGZsYWcgKi8KIAlNUFRDUF9NSUJfSk9JTlNZTkFDS01BQywJLyogSE1BQyB3YXMgd3Jvbmcgb24gU1lOL0FDSyAmIzQzOyBNUF9KT0lOICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTiwJLyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqLwogCU1QVENQX01JQl9KT0lOQUNLUlgsCQkvKiBSZWNlaXZlZCBhbiBBQ0sgJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOQUNLTUFDLAkJLyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICYjNDM7IE1QX0pPSU4gKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOLAkvKiBNUF9SU1Q6IG1pc3NpbmcgTVBfSk9JTiBpbiBBQ0sgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLAkvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi8KIAlNUFRDUF9NSUJfSk9JTlJFSkVDVEVELAkJLyogVGhlIFBNIHJlamVjdGVkIHRoZSBKT0lOIHJlcXVlc3QgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELAkvKiBNUF9SU1Q6IEpPSU4gb24gbm90LWZ1bGx5LWVzdGFibGlzaGVkIG1zayAqLwogCU1QVENQX01JQl9KT0lOU1lOVFgsCQkvKiBTZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiwJLyogTm90IGFibGUgdG8gY3JlYXRlIGEgc29ja2V0IHdoZW4gc2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5UWEJJTkRFUlIsCS8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqLwpAQCAtODQsNyAmIzQzOzg5LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCQkJCQkgKiBlc3RhYmxpc2hlZCBwYWNrZXQKIAkJCQkJICovCiAJTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLLAkvKiBDb25mbGljdGluZyBUQ1Agb3B0aW9uIGVuYWJsZWQgKi8KJiM0MzsJTVBUQ1BfTUlCX01ENVNJR1JFU0VULAkJLyogTVBfUlNUOiBNRDVTSUcgZW5hYmxlZCBvbiBsaXN0ZW5lciAqLwogCU1QVENQX01JQl9EU1NGQUxMQkFDSywJCS8qIEJhZCBvciBtaXNzaW5nIERTUyAqLwomIzQzOwlNUFRDUF9NSUJfRFNTUkVTRVQsCQkvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi8KIAlNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLAkvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqLwogCU1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCwJLyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovCiAJTVBUQ1BfTUlCX1dJTlBST0JFLAkJLyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi8KZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmMKaW5kZXggZDFmNzNjM2UzOWZhMy4uOGI2ODg2ODI1NWM1MCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmMKQEAgLTY3MCw3ICYjNDM7NjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHsKIAkJaWYgKHVwZGF0ZV9zdWJmbG93cykgewogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7cG0tJmd0O2xvY2spOwotCQkJcG0tJmd0O2V4dHJhX3N1YmZsb3dzLS07CiYjNDM7CQkJaWYgKCFXQVJOX09OX09OQ0UocG0tJmd0O2V4dHJhX3N1YmZsb3dzID09IDApKQomIzQzOwkJCQlwbS0mZ3Q7ZXh0cmFfc3ViZmxvd3MtLTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7cG0tJmd0O2xvY2spOwogCQl9CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwppbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCkBAIC0yODEsOCAmIzQzOzI4MSw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCi0JCQkJc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KQomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KQogewogCXN0cnVjdCBtcHRjcF9ybV9saXN0IGFsaXN0ID0geyAubnIgPSAwIH07CiAJaW50IGFubm9fbnIgPSAwOwpAQCAtMzQwLDcgJiM0MzszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlsaXN0X2RlbF9yY3UoJmFtcDttYXRjaC0mZ3Q7bGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwogCi0JbXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7CiYjNDM7CW1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTU4MSwxNyAmIzQzOzU4MSwyMyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpCiBzdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CXUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfcnRvX21pbik7CiYjNDM7CXUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfcnRvX21heCk7CiAJdTMyIHJldHJhbnNtaXRzOwogCiYjNDM7CS8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiAmZ3Q7IHJ0b19tYXggaXMKJiM0MzsJICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuCiYjNDM7CSAqLwogCXJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAotCQkJICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTsKJiM0MzsJCQkgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTsKIAotCW1wdGNwX3NrKHNrKS0mZ3Q7dGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOICZsdDsmbHQ7IHJldHJhbnNtaXRzOwomIzQzOwltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSBydG9fbWluICZsdDsmbHQ7IHJldHJhbnNtaXRzOwogfQogCiBzdGF0aWMgdm9pZCBfX21wdGNwX3NldF90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgbG9uZyB0b3V0KQogewotCW1wdGNwX3NrKHNrKS0mZ3Q7dGltZXJfaXZhbCA9IHRvdXQgJmd0OyAwID8gdG91dCA6IFRDUF9SVE9fTUlOOwomIzQzOwltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSB0b3V0ICZndDsgMCA/IHRvdXQgOgomIzQzOwkJCQkgICBSRUFEX09OQ0UoaW5ldF9jc2soc2spLSZndDtpY3NrX3J0b19taW4pOwogfQogCiBzdGF0aWMgbG9uZyBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KQpAQCAtMzE2MSw3ICYjNDM7MzE2Nyw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKJiM0MzsJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7bXNrLSZndDtjb25uX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bXNrLSZndDtqb2luX2xpc3QpOwpAQCAtMzE3MCw3ICYjNDM7MzE3OCwxMyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAJSU5JVF9XT1JLKCZhbXA7bXNrLSZndDt3b3JrLCBtcHRjcF93b3JrZXIpOwogCW1zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDsKIAltc2stJmd0O2ZpcnN0X3BlbmRpbmcgPSBOVUxMOwotCW1zay0mZ3Q7dGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOOwomIzQzOwomIzQzOwkvKiBtc2sgZG9lcyBub3QgZ28gdGhyb3VnaCB0Y3BfaW5pdF9zb2NrKCk7IHNlZWQgUlRPIGJvdW5kcy4gKi8KJiM0MzsJaWNzay0mZ3Q7aWNza19ydG9fbWluID0KJiM0MzsJCXVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19taW5fdXMpKTsKJiM0MzsJaWNzay0mZ3Q7aWNza19ydG9fbWF4ID0KJiM0MzsJCW1zZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTsKJiM0MzsJbXNrLSZndDt0aW1lcl9pdmFsID0gaWNzay0mZ3Q7aWNza19ydG9fbWluOwogCW1zay0mZ3Q7c2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87CiAJbXNrLSZndDtiYWNrbG9nX2xlbiA9IDA7CiAJbXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7CkBAIC0zOTg4LDYgJiM0Mzs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKQogCiAJLyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi8KIAlpZiAoIW1wdGNwX2lzX2Z1bGx5X2VzdGFibGlzaGVkKHBhcmVudCkpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChwYXJlbnQpLCBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQpOwogCQlzdWJmbG93LSZndDtyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCBiM2FmMzQ2MmJkZDE2Li4wNmExMDdkNGU4MzkyIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTE0OSw4ICYjNDM7MTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJCQkgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyLAogCQkJICAgYm9vbCBlY2hvKTsKIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7Ci12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCi0JCQkJc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTsKIAogLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi8KIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDsKQEAgLTEyNTQsNyAmIzQzOzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiAvKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewotCWlmICgtLW1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgJmx0OyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSkKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UobXNrLSZndDtwbS5leHRyYV9zdWJmbG93cyA9PSAwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAtLW1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgJmx0OyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSkKIAkJV1JJVEVfT05DRShtc2stJmd0O3BtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uYWY4MWFkNWU2OTlkMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC05Niw2ICYjNDM7OTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAogCWxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7CiAJaWYgKGxvY2FsX2lkICZsdDsgMCkgewomIzQzOwkJU1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7CiAJCXNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE2MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJICogVENQIG9wdGlvbiBzcGFjZS4KIAkgKi8KIAlpZiAocmN1X2FjY2Vzc19wb2ludGVyKHRjcF9zayhza19saXN0ZW5lciktJmd0O21kNXNpZ19pbmZvKSkgewomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTsKIAkJc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU2Myw2ICYjNDM7NTY1LDcgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJCXU4IGhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFXTsKIAogCQlpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBKX1NZTkFDSykpIHsKJiM0MzsJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pOwogCQkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDsKIAkJCWdvdG8gZG9fcmVzZXQ7CiAJCX0KQEAgLTg2NSw2ICYjNDM7ODY4LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJICovCiAJCWlmICghY3R4IHx8IGZhbGxiYWNrKSB7CiAJCQlpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHsKJiM0MzsJCQkJaWYgKCFjdHgpCiYjNDM7CQkJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLAomIzQzOwkJCQkJCQlNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLAomIzQzOwkJCQkJCQlNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pOwogCQkJCXN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApOwogCQkJCWdvdG8gZGlzcG9zZV9jaGlsZDsKIAkJCX0KQEAgLTE0MTYsNiAmIzQzOzE0MjUsNyBAQCBzdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaykKIAkJCSAqIHN1YmZsb3dfZXJyb3JfcmVwb3J0KCkgd2lsbCBpbnRyb2R1Y2UgdGhlIGFwcHJvcHJpYXRlIGJhcnJpZXJzCiAJCQkgKi8KIAkJCXN1YmZsb3ctJmd0O3Jlc2V0X3RyYW5zaWVudCA9IDA7CiYjNDM7CQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7CiAJCQlzdWJmbG93LSZndDtyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/CiAJCQkJCQlNUFRDUF9SU1RfRU1JRERMRUJPWCA6CiAJCQkJCQlNUFRDUF9SU1RfRU1QVENQOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKaW5kZXggY2JlNTczYzRhYjNhZC4uZWE0Y2I2YzFiZDVlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCkBAIC0xMjY0LDcgJiM0MzsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZykKIAogc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKQogewotCWNoYXIgKm5leHQgPSBzdHJjaHIodHlwZSwgJiMzOTssJiMzOTspOwomIzQzOwljb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAogCWNmZ19jbXNnX3R5cGVzLmNtc2dfZW5hYmxlZCA9IDE7CkBAIC0xMjkyLDcgJiM0MzsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKQogCiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSkKIHsKLQljaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICYjMzk7LCYjMzk7KTsKJiM0MzsJY29uc3QgY2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiAJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKIAlpZiAobmV4dCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaAppbmRleCBkMTU4Njc4ZmE2YWIwLi43YTJhODUxZmEwYWRiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaApAQCAtMjEyLDggJiM0MzsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW4KIGZpCiAKIGlmICRjYXB0dXJlOyB0aGVuCi0Jcm5kaD0mIzM0OyR7bnMxOjR9JiMzNDsKLQltcHRjcF9saWJfcHJfaW5mbyAmIzM0O1BhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS0mIzM0OwomIzQzOwljYXBwcmVmaXg9JiMzNDttcHRjcF9jb25uZWN0LSR7bnMxOjR9JiMzNDsKJiM0MzsJbXB0Y3BfbGliX3ByX2luZm8gJiMzNDtwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LSYjMzQ7CiBmaQogCiBzZXRfZXRodG9vbF9mbGFncygpIHsKQEAgLTM3Miw4ICYjNDM7MzcyLDggQEAgZG9fdHJhbnNmZXIoKQogCQkJY2FwdXNlcj0mIzM0Oy1aICRTVURPX1VTRVImIzM0OwogCQlmaQogCi0JCWxvY2FsIGNhcGZpbGU9JiMzNDske3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fSYjMzQ7Ci0JCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAke2NhcHVzZXJ9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcGZpbGU9JiMzNDske2NhcHByZWZpeH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiAKIAkJaXAgbmV0bnMgZXhlYyAke2xpc3RlbmVyX25zfSB0Y3BkdW1wICR7Y2Fwb3B0fSBcCiAJCQktdyAmIzM0OyR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcCYjMzQ7ICZndDsmZ3Q7ICYjMzQ7JHtjYXBvdXR9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCmluZGV4IDVlMjIyYmE5NzdlNGUuLjNiOGQyYzhhNjIxNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYwpAQCAtMzc3LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpCiAJaW50IHJldDsKIAlpbnQgZmQ7CiAKLQlyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgJiMzNDslW146XTolZCAlW146XTolZCYjMzQ7LCBzYWRkciwgJmFtcDtzcG9ydCwgZGFkZHIsICZhbXA7ZHBvcnQpOwomIzQzOwlyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgJiMzNDslNjNbXjpdOiVkICU2M1teOl06JWQmIzM0OywKJiM0MzsJCSAgICAgc2FkZHIsICZhbXA7c3BvcnQsIGRhZGRyLCAmYW1wO2Rwb3J0KTsKIAlpZiAocmV0ICE9IDQpCiAJCWRpZV9wZXJyb3IoJiMzNDtJUCBQT1JUIFBhaXJzIGhhcyBzdHlsZSBwcm9ibGVtcyEmIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKaW5kZXggN2RjOTFmYWM0OTE3ZS4uMThjZTcxMzZhMmIwZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKQEAgLTc1LDYgJiM0Mzs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eAogdW5zZXQgam9pbl9jcmVhdGVfZXJyCiB1bnNldCBqb2luX2JpbmRfZXJyCiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyCiYjNDM7dW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luCiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fbXBqb2luCiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fY3R4CiYjNDM7dW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWQKJiM0Mzt1bnNldCBqb2luX25vX2lkX2ZvdW5kCiYjNDM7CiYjNDM7dW5zZXQgcnN0X21kNXNpZwomIzQzO3Vuc2V0IHJzdF9kc3MKIAogdW5zZXQgZmJfbnMxCiB1bnNldCBmYl9uczIKQEAgLTk3MSw3ICYjNDM7OTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKCkKIAkJY2FwZmlsZT0kKHByaW50ZiAmIzM0O21wX2pvaW4tJTAydS0lcy5wY2FwJiMzNDsgJiMzNDskTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiYjMzQ7ICYjMzQ7JG5zJiMzNDspCiAKIAkJZWNobyAmIzM0O0NhcHR1cmluZyB0cmFmZmljIGZvciB0ZXN0ICRNUFRDUF9MSUJfVEVTVF9DT1VOVEVSIGludG8gJGNhcGZpbGUmIzM0OwotCQlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgdGNwZHVtcCAtaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJGNhcHVzZXIgLXcgJiMzNDskY2FwZmlsZSYjMzQ7ICZndDsgJiMzNDskY2Fwb3V0JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMmIzM0OyB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgJiMzNDskY2FwZmlsZSYjMzQ7ICZndDsgJiMzNDskY2Fwb3V0JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKIAkJY2FwcGlkPSQhCiAKIAkJc2xlZXAgMQpAQCAtMTM1Myw2ICYjNDM7MTM2MSw4IEBAIGNoa19yc3RfbnIoKQogCWxvY2FsIHJzdF90eD0kMQogCWxvY2FsIHJzdF9yeD0kMgogCWxvY2FsIG5zX2ludmVydD0kezM6LSYjMzQ7JiMzNDt9CiYjNDM7CWxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9CiYjNDM7CWxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9CiAJbG9jYWwgY291bnQKIAlsb2NhbCBuc190eD0kbnMxCiAJbG9jYWwgbnNfcng9JG5zMgpAQCAtMTM4OSw2ICYjNDM7MTM5OSwyMSBAQCBjaGtfcnN0X25yKCkKIAllbHNlCiAJCXByaW50X29rCiAJZmkKJiM0MzsKJiM0MzsJIyBNUFRDUF9SU1RfRU1QVENQIHJlc2V0LWV2ZW50IGNvdW50ZXJzOyBkZWZhdWx0IDAsIGdhdGVkIG9uCiYjNDM7CSMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyCiYjNDM7CSMgKHNlcnZlciksIERzc1Jlc2V0IG9uIHRoZSBkYXRhIHJlY2VpdmVyIChjbGllbnQpLgomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1ENVNpZ1Jlc2V0JiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JG1kNXNpZyYjMzQ7IF07IHRoZW4KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7TUQ1U2lnUmVzZXQmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9ICYjMzQ7TVBUY3BFeHREc3NSZXNldCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRkc3MmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludF9jaGVjayAmIzM0O0Rzc1Jlc2V0JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzcyYjMzQ7CiYjNDM7CWZpCiB9CiAKIGNoa19pbmZpX25yKCkKQEAgLTE1ODcsNiAmIzQzOzE2MTIsMTEgQEAgY2hrX2pvaW5fbnIoKQogCWxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfQogCWxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9CiAJbG9jYWwgY29ycnVwdGVkX3BrdHM9JHtqb2luX2NvcnJ1cHRlZF9wa3RzOi0wfQomIzQzOwlsb2NhbCBzeW5hY2tfbm9fbXBqb2luPSR7am9pbl9zeW5hY2tfbm9fbXBqb2luOi0wfQomIzQzOwlsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfQomIzQzOwlsb2NhbCBhY2tfbm9fY3R4PSR7am9pbl9hY2tfbm9fY3R4Oi0wfQomIzQzOwlsb2NhbCBub3RfZXN0YWJsaXNoZWQ9JHtqb2luX25vdF9lc3RhYmxpc2hlZDotMH0KJiM0MzsJbG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfQogCWxvY2FsIHJjPSR7S1NGVF9QQVNTfQogCWxvY2FsIGNvdW50CiAJbG9jYWwgd2l0aF9jb29raWUKQEAgLTE2NTUsNiAmIzQzOzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKQogCQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqJiMzNDsKIAlmaQogCiYjNDM7CSMgUGVyLWV2ZW50IE1QVENQX1JTVF9FTVBUQ1AgSk9JTiBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvbgomIzQzOwkjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IHRoZSAqU3luQWNrKiBvbmUgZmlyZXMgb24gdGhlCiYjNDM7CSMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLgomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gJiMzNDtNUFRjcEV4dE1QSm9pblN5bkFja05vTVBKb2luJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JHN5bmFja19ub19tcGpvaW4mIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7c3luYWNrIG5vIG1wam9pbiYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gc3luYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkc3luYWNrX25vX21wam9pbiYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSAmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW4mIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskYWNrX25vX21wam9pbiYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDthY2sgbm8gbXBqb2luJiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5BY2tOb0N0eCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRhY2tfbm9fY3R4JiMzNDsgXTsgdGhlbgomIzQzOwkJcmM9JHtLU0ZUX0ZBSUx9CiYjNDM7CQlwcmludF9jaGVjayAmIzM0O2FjayBubyBjdHgmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIGFjayBubyBjdHggZXhwZWN0ZWQgJGFja19ub19jdHgmIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbk5vdEVzdGFibGlzaGVkJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JG5vdF9lc3RhYmxpc2hlZCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtqb2luIG5vdCBlc3RhYmxpc2hlZCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gbm90IGVzdGFibGlzaGVkIGV4cGVjdGVkICRub3RfZXN0YWJsaXNoZWQmIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRub19pZF9mb3VuZCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtqb2luIG5vIGlkIGZvdW5kJiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmQmIzM0OwomIzQzOwlmaQomIzQzOwogCXByaW50X3Jlc3VsdHMgJiMzNDtqb2luIFJ4JiMzNDsgJHtyY30KIAogCWpvaW5fc3luX3R4PSYjMzQ7JHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fSYjMzQ7IFwKQEAgLTIzNTksNiAmIzQzOzI0MjcsMzEgQEAgc2lnbmFsX2FkZHJlc3NfdGVzdHMoKQogCQkJY2hrX2FkZF9uciA0IDQKIAkJZmkKIAlmaQomIzQzOwomIzQzOwkjIHNpZ25hbGxlZCBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGNsaWVudCwgd2hlcmUgYSBUQ1Atb25seQomIzQzOwkjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50JiMzOTtzIE1QX0pPSU4gcm91dGVzIGxvY2FsbHkKJiM0MzsJIyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uCiYjNDM7CSMgTVBKb2luU3luQWNrTm9NUEpvaW4gaW5jcmVtZW50cyBvbiB0aGUgY2xpZW50IHNpZGUuCiYjNDM7CWlmIHJlc2V0ICYjMzQ7c2lnbmFsIGFkZHJlc3MsIFRDUC1vbmx5IGxpc3RlbmVyIG9uIGNsaWVudCYjMzQ7OyB0aGVuCiYjNDM7CQlsb2NhbCBleHRyYV9iaW5kCiYjNDM7CQlsb2NhbCBwb3J0CiYjNDM7CiYjNDM7CQlwbV9ubF9zZXRfbGltaXRzICRuczEgMCAxCiYjNDM7CQlwbV9ubF9zZXRfbGltaXRzICRuczIgMSAxCiYjNDM7CQlwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWwKJiM0MzsKJiM0MzsJCXBvcnQ9JChnZXRfcG9ydCkKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJHtuczJ9IC4vbXB0Y3BfY29ubmVjdCAtbCAtdCAtMSAtcCAmIzM0OyRwb3J0JiMzNDsgXAomIzQzOwkJCS1zIFRDUCAxMC4wLjIuMiAmYW1wOwomIzQzOwkJZXh0cmFfYmluZD0kIQomIzQzOwkJbXB0Y3BfbGliX3dhaXRfbG9jYWxfcG9ydF9saXN0ZW4gJiMzNDskbnMyJiMzNDsgJiMzNDskcG9ydCYjMzQ7CiYjNDM7CiYjNDM7CQlydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xCiYjNDM7CQlqb2luX3N5bmFja19ub19tcGpvaW49MSBqb2luX3N5bl90eD0xIFwKJiM0MzsJCQljaGtfam9pbl9uciAwIDAgMAomIzQzOwomIzQzOwkJa2lsbCAke2V4dHJhX2JpbmR9IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiB9CiAKIGxhbWluYXJfZW5kcF90ZXN0cygpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaAppbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2gKQEAgLTI0LDYgJiM0MzsyNCw3IEBAIHNtYWxsPSYjMzQ7JiMzNDsKIHNvdXQ9JiMzNDsmIzM0OwogY291dD0mIzM0OyYjMzQ7CiBjYXBvdXQ9JiMzNDsmIzM0OwomIzQzO2NhcHByZWZpeD0mIzM0OyYjMzQ7CiBzaXplPTAKIAogdXNhZ2UoKSB7CkBAIC03MCw2ICYjNDM7NzEsMTEgQEAgc2V0dXAoKQogCiAJbXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczMKIAomIzQzOwlpZiAkY2FwdHVyZTsgdGhlbgomIzQzOwkJY2FwcHJlZml4PSYjMzQ7c2ltdWx0X2Zsb3dzLSR7bnMxOjR9JiMzNDsKJiM0MzsJCW1wdGNwX2xpYl9wcl9pbmZvICYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS0mIzM0OwomIzQzOwlmaQomIzQzOwogCWlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgJiMzNDskbnMxJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zICYjMzQ7JG5zMiYjMzQ7CiAJaXAgbGluayBhZGQgbnMxZXRoMiBuZXRucyAmIzM0OyRuczEmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDIgbmV0bnMgJiMzNDskbnMyJiMzNDsKIAlpcCBsaW5rIGFkZCBuczJldGgzIG5ldG5zICYjMzQ7JG5zMiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMzZXRoMSBuZXRucyAmIzM0OyRuczMmIzM0OwpAQCAtMTM2LDE1ICYjNDM7MTQyLDE0IEBAIGRvX3RyYW5zZmVyKCkKIAogCWlmICRjYXB0dXJlOyB0aGVuCiAJCWxvY2FsIGNhcHVzZXIKLQkJbG9jYWwgcm5kaD0mIzM0OyR7bnMxOjR9JiMzNDsKIAkJaWYgWyAteiAkU1VET19VU0VSIF0gOyB0aGVuCiAJCQljYXB1c2VyPSYjMzQ7JiMzNDsKIAkJZWxzZQogCQkJY2FwdXNlcj0mIzM0Oy1aICRTVURPX1VTRVImIzM0OwogCQlmaQogCi0JCWxvY2FsIGNhcGZpbGU9JiMzNDske3JuZGh9LSR7cG9ydH0mIzM0OwotCQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtjYXBwcmVmaXh9LSR7cG9ydH0mIzM0OwomIzQzOwkJbG9jYWwgY2Fwb3B0PSYjMzQ7LWkgYW55IC1zIDEwOCAtQiAzMjc2OCAke2NhcHVzZXJ9JiMzNDsKIAogCQlpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXAmIzM0OyAgJmd0OyZndDsgJiMzNDske2NhcG91dH0mIzM0OyAyJmd0OyZhbXA7MSAmYW1wOwogCQlsb2NhbCBjYXBwaWRfbGlzdGVuZXI9JCEKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmYWlyIGJpdCBvZiB0aGUgTVBUQ1Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiB0aGUgaGVhZGVycywgTUlCIChNYW5hZ2VtZW50IEluZm9ybWF0aW9uIEJhc2UpIGludGVyYWN0aW9ucywgcGF0aCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNvcmUgcHJvdG9jb2wgbG9naWMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgbWl4IG9mIGNsZWFudXAsIG9ic2VydmFiaWxpdHkgaW1wcm92ZW1lbnRzLCBhbmQgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50cyB0byB0aGUgVENQL01QVENQIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zLgoKRmlyc3QsIEkgc2VlIHRoZSByZW1vdmFsIG9mIGBkYXRhX2Fja2AgYW5kIGBkYXRhX2FjazMyYCBmcm9tIGBtcHRjcF9leHRgIGFuZCBpdHMgdHJhY2Vwb2ludC4gVGhpcyBpcyBsaWtlbHkgYSBzaW1wbGlmaWNhdGlvbiBvciByZWZhY3RvcmluZywgYXNzdW1pbmcgdGhvc2UgZmllbGRzIHdlcmUgZWl0aGVyIHJlZHVuZGFudCBvciBubyBsb25nZXIgcmVsZXZhbnQuIFRoZXNlIGFyZSBjb3NtZXRpYywgdW5saWtlbHkgdG8gYmUgaW1wYWN0ZnVsLgoKVGhlIGFkZGl0aW9uIG9mIG5ldyBTTk1QIE1JQiBjb3VudGVycyBpcyBwcmltYXJpbHkgYWJvdXQgcHJvdmlkaW5nIGJldHRlciB2aXNpYmlsaXR5IGludG8gTVBUQ1AmIzM5O3MgaW50ZXJuYWwgc3RhdGUuIFRoaXMgaXMgZ29vZCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgdGhlIGFkZGl0aW9uIGl0c2VsZiB3b24mIzM5O3QgYmUgc29tZXRoaW5nIHRvIGZ1enogZGlyZWN0bHkuIFRoaXMgaXMgZ29vZCBzdHVmZi4KCk5vdywgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpcyB0aGUgY29kZSBpbiBgbmV0L21wdGNwL3BtLmNgIHdpdGggdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UocG0tJmd0O2V4dHJhX3N1YmZsb3dzID09IDApYCBjaGVjayBiZWZvcmUgZGVjcmVtZW50aW5nLiBUaGlzIGlzIGEgcG90ZW50aWFsIGJ1ZyB0cmFwLiBUaGlzIGlzIHNjcmVhbWluZyBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiBpbmRpY2F0ZSBhIHByb2JsZW0gaW4gaG93IHRoZSBrZXJuZWwgaXMgdHJhY2tpbmcgc3ViZmxvd3MuIERlZmluaXRlbHkgYSBoaWdoIHByaW9yaXR5IGFyZWEuCgpUaGUgcmVuYW1lIG9mIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgYW5kIG1ha2luZyBpdCBgc3RhdGljYCBpbiBgcG1fdXNlcnNwYWNlLmNgIGlzIGp1c3QgY29kZSBoeWdpZW5lLgoKVGhlIGNoYW5nZXMgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBhcmUgd2hhdCBJJiMzOTttIHJlYWxseSBmb2N1c2luZyBvbi4gVGhlIHNoaWZ0IHRvIHVzaW5nIGBpY3NrLSZndDtpY3NrX3J0b19taW5gIGFuZCBgaWNzay0mZ3Q7aWNza19ydG9fbWF4YCAoYmFzZWQgb24gc3lzdGVtIHR1bmluZyB3aXRoIGBzeXNjdGxfdGNwX3J0b19taW5fdXNgIGFuZCBgc3lzY3RsX3RjcF9ydG9fbWF4X21zYCkgaW5zdGVhZCBvZiBoYXJkY29kZWQgVENQIFJUTyB2YWx1ZXMgaW4gYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBgX19tcHRjcF9zZXRfdGltZW91dGAgYW5kIGBfX21wdGNwX2luaXRfc29ja2AgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFsbG93aW5nIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byAqdHVuZSogdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHRocm91Z2ggdGhlIHN5c3RlbSB3aWRlIG5ldHdvcmsgcGFyYW1ldGVycy4gVGhpcyBjaGFuZ2VzIHRoZSB0aW1pbmcgb2YgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCB3aGljaCBjYW4gYmUgZ29vZCBvciBiYWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgbmV0d29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdHJ5IGFuZCBnZW5lcmF0ZSB0aW1pbmcgcmVsYXRlZCBpc3N1ZXMuIFRoZXNlIFJUTyBjaGFuZ2VzIHdpbGwgbGlrZWx5IGFmZmVjdCBvdmVyYWxsIGNvbm5lY3Rpb24gcGVyZm9ybWFuY2UgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMsIHNvIHRoaXMgYmVhcnMgY2xvc2VyIHNjcnV0aW55LgoKVGhlIGluY3JlbWVudCBvZiBgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEYCBpbiBgbXB0Y3BfZmluaXNoX2pvaW5gIGlzIGZvciBtb25pdG9yaW5nIHB1cnBvc2VzIGFuZCBsaWtlbHkgd29uJiMzOTt0IGFmZmVjdCB1cy4KCkluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIHRoZSBgV0FSTl9PTl9PTkNFYCBjaGVjayBpcyByZXBlYXRlZCwgYW5kIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgaGFzIGdvbmUgYXdheS4KClRoZSBpbmNyZW1lbnRpbmcgb2YgdmFyaW91cyBNSUIgY291bnRlcnMgaW4gYHN1YmZsb3cuY2AgYmFzZWQgb24gZGlmZmVyZW50IGNvbm5lY3Rpb24gc3RhdGVzIChlLmcuLCBgTVBKT0lOTk9JREZPVU5EYCwgYE1ENVNJR1JFU0VUYCwgZXRjLikgaXMgcHVyZWx5IGZvciBTTk1QL01JQiByZXBvcnRpbmcgYW5kIG1vbml0b3JpbmcgYW5kIGlzIG5vdCBhIHByaW9yaXR5IGZvciBmdXp6aW5nLgoKTXkgcHJpb3JpdGllcyBmb3IgZnV6emluZzoKCjEuICAqKlRyaWdnZXJpbmcgdGhlIGBXQVJOX09OX09OQ0VgKio6IEkgd2FudCB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYHBtLSZndDtleHRyYV9zdWJmbG93c2AgZ28gdG8gemVybyB1bmV4cGVjdGVkbHkgYmVmb3JlIHRoZSBkZWNyZW1lbnQgaGFwcGVucy4gVGhpcyBsaWtlbHkgbWVhbnMgY29ycnVwdGluZyB0aGUgc3ViZmxvdyBhY2NvdW50aW5nIG9yIGNhdXNpbmcgdGhlIHJlbW92YWwgb2YgYW4gZXh0cmEgc3ViZmxvdy4gVGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGluY2x1ZGUgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGFuZCBpdHMgY2FsbGVycyAoYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgLCBgbXB0Y3BfcG1fbmxfcm1fc3ViZmxvd19yZWNlaXZlZGAsIGV0Yy4pIHNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gc3ViZmxvdyBtYW5hZ2VtZW50LgoyLiAgKipFeHBsb3JpbmcgdGhlIFJUTyBCb3VuZHMgQ2hhbmdlKio6IEkgbmVlZCB0byB0ZXN0IGhvdyB0aGUgbmV3IFJUTyBjYWxjdWxhdGlvbnMgaW1wYWN0IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy4gSSB3aWxsIGZvY3VzIG9uIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgLgoKSSYjMzk7bGwgYmUgc3RhcnRpbmcgYnkgbG9va2luZyBpbnRvIHRoZSBjYWxscyBpbiBgbmV0L21wdGNwL3BtLmNgIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3Igc3ViZmxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz02NjI9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02ODQtXHRpZiAodXBkYXRlX3N1YmZsb3dzKVxubmV0L21wdGNwL3BtLmM6Njg1Olx0XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wbS5jLTY4Ni1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjUwPXU4IG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjUyLS8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNTQte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyNjA9c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNjM6XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBNUFRDUCBGbG93IE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZyB3aXRoaW4gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCBzZWVtIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBsaWtlbHkgaGFuZGxlIHRoZSBzdWJmbG93IG1hbmFnZW1lbnQsIHdoaWNoIGlzIG9mdGVuIGEgYm90dGxlbmVjay4gSG93ZXZlciwgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhvc2UsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IHRoZSByb2xlIG9mIHRpbWVvdXQgbWVjaGFuaXNtcy4gSSB3aWxsIGNoZWNrIGJvdGggYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgIGFuZCBgX19tcHRjcF9zZXRfdGltZW91dGAgdG8gc2VlIGlmIHRob3NlIHJvdXRpbmVzIGFyZSBwYXJ0IG9mIHRoZSBib3R0bGVuZWNrLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aW1lb3V0cyBhcmUgY29udHJpYnV0aW5nIHRvIGEgbmVnYXRpdmUgc3ViZmxvdyBleHBlcmllbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTU2MT1zdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6NTgxOnN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTIwPXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMS1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMwMDI6XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDAzLVx0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxOTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTVBUQ1AgUmV0cmFuc21pc3Npb24gVGltZW91dHMqKgoKT2theSwgc28gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaGFuZGxpbmcgcmV0cmFuc21pc3Npb25zIGluIE1QVENQLCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBfX21wdGNwX3NldF90aW1lb3V0YCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGltZW91dCBjb25maWd1cmF0aW9uIGluIHRoaXMgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHRpbWVvdXQgbWVjaGFuaXNtcyBhcmUgcmVhbGx5IHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHRpbWVvdXRzIGFyZSBzZXQgaXMga2V5IHRvIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYW5kIGRpYWdub3NpbmcgYW55IGNvbmdlc3Rpb24tcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBgX19tcHRjcF9zZXRfdGltZW91dGAgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lb3V0IHR5cGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3Bfc2V0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTU4MT1zdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01OTYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo1OTc6c3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTU5OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NjExPXN0YXRpYyB2b2lkIG1wdGNwX3NldF90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTctXHRcdHRvdXQgPSBtYXgodG91dCwgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coc3ViZmxvdykpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NjE4Olx0X19tcHRjcF9zZXRfdGltZW91dChzaywgdG91dCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTktfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODc9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjI4LVx0fVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTYyOTpcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTYzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgVGltZW91dCBhbmQgU3ViZmxvdyBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aW1lb3V0IG1lY2hhbmlzbXMgYW5kIHN1YmZsb3cgbWFuYWdlbWVudCBhcmUgaGFuZGxlZCB3aXRoaW4gTVBUQ1AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBJdCBzZWVtcyB0aGF0IGJvdGggYG1wdGNwX3NldF90aW1lb3V0YCBhbmQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIHV0aWxpemUgdGhlIGBfX21wdGNwX3NldF90aW1lb3V0YCBmdW5jdGlvbiwgd2hpY2ggd2FycmFudHMgYSBjbG9zZXIgaW5zcGVjdGlvbiBvZiB0aG9zZSBjYWxsaW5nIHBvaW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIG1pZ2h0IGJlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGZvY3VzIG9uIHRoYXQgb25lIGZvciBub3cuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gYXJlYXMsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YC4gUmlnaHQsIEkgcmVjYWxsIGl0IHdhcyBvcmlnaW5hbGx5IG5hbWVkIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAsIGFuZCBpdCBoYXMgc2luY2UgYmVlbiBtYWRlIHN0YXRpYy4gVGhhdCYjMzk7cyByZWxldmFudC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBub3cgY2FsbGVkIGZyb20gYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGF0IGNoYWluIG9mIGNhbGxzLCBhcyBJJiMzOTttIHRoaW5raW5nIG9mIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSBiZWluZyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yODQ9c3RhdGljIHZvaWRcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyODU6bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjg2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMwNT1pbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzQzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjM0NDpcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zNDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVBUQ1AgUmVtb3ZhbCoqCgpSaWdodCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzIG9mIE1QVENQLiBJJiMzOTt2ZSBzZWVuIHRoYXQgbmFtZSBjb21lIHVwIGluIHRoZSBrZXJuZWwgY29kZSBiZWZvcmUsIGFuZCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IGl0IGludGVyYWN0cyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgTVBUQ1AgcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4KCkJlZm9yZSBJIGp1bXAgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIGhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBmb3IgdGhlIGVzc2VudGlhbCBNUFRDUCBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWVkZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBtb2R1bGVzIGludm9sdmVkIGFuZCB0aGUgZGVwZW5kYW5jaWVzIHRoZXkgbWF5IGhhdmUuIFRoYXQgbWF5IHF1aWNrbHkgY2xhcmlmeSBpZiBzb21ldGhpbmcgZWxzZSBpcyBhdCBwbGF5LCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSB0aGF0IEkgc2hvdWxkIGxvb2sgaW50by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBNUFRDUGAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bGwgaGVhZCBpcyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGtleSBtb2R1bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93ICpleGFjdGx5KiB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgTVBUQ1BgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSB0aG9zZSByZWxhdGlvbnNoaXBzIHByZXR0eSBjbGVhcmx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE1QVENQYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHBhdGNoIGRldGFpbHMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoaW5ncyBsaWtlIFJUTyBib3VuZHMgYW5kIGBXQVJOX09OX09OQ0VgIHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHRvIHRhcmdldDogYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGxvb2sgbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBleHBvc2luZyBzdWJ0bGUgYnVncy4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBBaCwgeWVzLCBpdCYjMzk7cyByaWdodCBoZXJlIGluIGBwcm90b2NvbC5oYC4gVGhhdCBtZWFucyBJIGNhbiYjMzk7dCBmdXp6IGl0IGRpcmVjdGx5LCBhcyB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgc3Vic3RpdHV0ZSBpdHMgZnVuY3Rpb25hbGl0eSBhdCB0aGUgY2FsbCBzaXRlLiBOb3QgaWRlYWwsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGF0IGxpbWl0YXRpb24uCgpBbHJpZ2h0LCBpZiBgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgaXMgb2ZmIHRoZSB0YWJsZSwgd2hhdCBhYm91dCBgbXB0Y3BfcG1fbmxfcm1fc3ViZmxvd19yZWNlaXZlZGA/IFRoYXQgbWlnaHQgYmUgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9jbG9zZV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz02NjI9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02ODQtXHRpZiAodXBkYXRlX3N1YmZsb3dzKVxubmV0L21wdGNwL3BtLmM6Njg1Olx0XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wbS5jLTY4Ni1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zOTk0PWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDUzLVx0aWYgKCFyZXQpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQwNTQ6XHRcdG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwNTUtZXJyX3Byb2hpYml0ZWQ6XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTI1MD11OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1Mi0vKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTI1MzpzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjU0LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjU5LVxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI2MDpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2MS17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNjM6XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjE4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzIzLVx0ICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3MjQ6XHRtcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjUtXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUxMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipGb2N1c2luZyBJbiBvbiBNUFRDUCBTdWJmbG93IENvbm5lY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIE1QVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcG9pbnRzIGluIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBtcHRjcF9maW5pc2hfam9pbmAgYW5kIGBfX21wdGNwX3N1YmZsb3dfY29ubmVjdGAgZnVuY3Rpb25zLiBUaGVzZSBzZWVtIGxpa2UgY3JpdGljYWwgcG9pbnRzIGluIHRoZSBzdWJmbG93IGpvaW5pbmcgcHJvY2VzcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gaGF2ZSBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZy4gSSYjMzk7bGwgYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBzaW5jZSBpdCBsb29rcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgZmxvdyBhbmQgaXMgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc2VsZWN0aW5nIGFuZCB2YWxpZGF0aW5nIHRoZSBuZXh0IHN1YmZsb3cuCgpJbiBhZGRpdGlvbiwgc2luY2UgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgY29ubmVjdGlvbi9kaXNjb25uZWN0aW9uIGlzc3VlcywgSSBzaG91bGQgYWxzbyBjaGVjayBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN1YmZsb3dzIGFyZSByZW1vdmVkIGFzIHdlbGwsIHRvIGJlIGFibGUgdG8gaGF2ZSBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYz05Mj1jb25zdCBzdHJ1Y3QgZ2VubF9vcHMgbXB0Y3BfcG1fbmxfb3BzWzExXSA9IHtcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTU4LVx0XHQudmFsaWRhdGVcdD0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYzoxNTk6XHRcdC5kb2l0XHRcdD0gbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQsXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTYwLVx0XHQucG9saWN5XHRcdD0gbXB0Y3BfcG1fcmVtb3ZlX25sX3BvbGljeSxcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg9NTI9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NTM6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTU0LWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTI4NT1tcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzA0LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjMwNTppbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBOZXRsaW5rIENhbGxiYWNrIGFuZCBTdWJmbG93IEhhbmRsaW5nKioKClJpZ2h0LCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBUaGF0JiMzOTtzIGEgbmV0bGluayBgZG9pdGAgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBmb3IgYSAmIzM0O3JlbW92ZSYjMzQ7IG9wZXJhdGlvbiwgd2hpY2ggbWVhbnMgaXQgZGVhbHMgd2l0aCBkZWxldGluZyBzb21ldGhpbmcuIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSBvZnRlbiB3aGVyZSB5b3UgY2FuIHN0YXJ0IGRpZ2dpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpNeSBuZXh0IHN0ZXAsIGFuZCB0aGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQsIGlzIHRvIGNoZWNrIGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYC4gVGhlIGdvYWwsIGluIGNvbnRleHQsIGlzIHRvIGRldGVybWluZSB3aGljaCBwcm9jZXNzZXMgaW50ZXJhY3QuIFNpbmNlIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAgaXMgaW52b2x2ZWQgaW4gcmVtb3Zpbmcgc29tZXRoaW5nLCBpdCBzdGFuZHMgdG8gcmVhc29uIHRoYXQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIG1pZ2h0IGJlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zdWJmbG93X2dldF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTY2PWJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTg2LSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTU4NzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU4OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwNi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2MDc6XHRcdHRyYWNlX21wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjA4LVx0XHRzc2sgPSAgbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04NTc9dm9pZCBtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTg1OC1cdFx0XHRcdCBib29sIHNjaGVkdWxlZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4NTk6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04NjAtc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4tLVxubmV0L21wdGNwL3NjaGVkLmM9MTk9c3RhdGljIGludCBtcHRjcF9zY2hlZF9kZWZhdWx0X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3NjaGVkLmMtMjItXG5uZXQvbXB0Y3Avc2NoZWQuYzoyMzpcdHNzayA9IG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQobXNrKTtcbm5ldC9tcHRjcC9zY2hlZC5jLTI0LVx0aWYgKCFzc2spXG4tLVxubmV0L21wdGNwL3NjaGVkLmM9MTY4PWludCBtcHRjcF9zY2hlZF9nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9zY2hlZC5jLTE3My1cbm5ldC9tcHRjcC9zY2hlZC5jOjE3NDpcdC8qIHRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgbW92ZWQgb3V0IG9mIG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQgKi9cbm5ldC9tcHRjcC9zY2hlZC5jLTE3NS1cdGlmIChfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgU2NoZWR1bGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTVBUQ1Agc3ViZmxvd3MgYXJlIG1hbmFnZWQgZm9yIHNlbmRpbmcgZGF0YS4gSXQgbG9va3MgbGlrZSBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbXB0Y3Bfc2NoZWRfZGVmYXVsdF9nZXRfc2VuZGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZWZhdWx0IHNjaGVkdWxlciBsaWtlbHkgbmVlZHMgdG8gZ2V0IGEgc3ViZmxvdyB0byBhY3R1YWxseSAqZG8qIHRoZSBzZW5kaW5nLiBUaGVuLCBsZXQgbWUgdGhpbmsgYSBtb21lbnQsIGBtcHRjcF9zY2hlZF9nZXRfc2VuZGAgc2VlbXMgbGlrZSBhbm90aGVyIGxpa2VseSBmdW5jdGlvbiBmb3IgbWUgdG8gbG9vayBpbnRvLCBpZiBJIHdhbnQgdG8gZGl2ZSBmdXJ0aGVyIGludG8gdGhlIHNjaGVkdWxpbmcgcHJvY2Vzcy4KCkJ1dCwgYmVmb3JlIEkgZ2V0IGxvc3QgaW4gdGhlIGJyb2FkZXIgc2NoZWR1bGluZyBsb2dpYywgYSBxdWljayBjaGVjayBvbiBgX19tcHRjcF9yZXRyYW5zYCBzZWVtcyBlc3NlbnRpYWwuIFJldHJhbnNtaXNzaW9ucyBjYW4gc2lnbmlmaWNhbnRseSBhZmZlY3Qgc3ViZmxvdyBzZWxlY3Rpb24gYW5kIHByaW9yaXRpemF0aW9uLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgc28gdW5kZXJzdGFuZGluZyBob3cgcmV0cmFuc21pc3Npb25zIGFyZSBoYW5kbGVkIHJlbGF0aXZlIHRvIHN1YmZsb3cgc2VsZWN0aW9uIGlzIGxpa2VseSB2ZXJ5IGltcG9ydGFudC4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGFuYWx5c2lzIGNvbnNpZGVycyB0aGF0LiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBjb21lIGJhY2sgdG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0xMDcwPW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA5MS1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA5MjpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA5My1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI1MTk9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTUzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjU1NDpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU1NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzOD1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODg6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODktXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODU4PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTE5LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkyMDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkyMS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Ni1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDc6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzExOT1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTYtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE1NzpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTgtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgwNz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODM5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NDA6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NDEtXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgxMz12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxNS1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjgxNjpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxNy12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUmV0cmFuc21pc3Npb24gT3Bwb3J0dW5pdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBNUFRDUCBjb2RlLCBgX19tcHRjcF9yZXRyYW5zYCBpbW1lZGlhdGVseSBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxpdmVzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgZm9yIHRoaXMuCgpCdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGVyZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYF9fbXB0Y3BfaW5pdF9zb2NrYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gUmV0cmFuc21pc3Npb25zIGFyZSBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIHByb3BlciBzb2NrZXQgc2V0dXAsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgc3RhdGUgaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIHJvb3QgY2F1c2UgbGllcyBpbiBob3cgdGhlIHNvY2tldCBpcyBiZWluZyBjb25maWd1cmVkLiBBIHF1aWNrIHJldmlldyBjYW4gc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX2luaXRfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzExOT1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTY4OnN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjkte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMyMjQ9c3RhdGljIGludCBtcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyMjgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjI5Olx0X19tcHRjcF9pbml0X3NvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzIzMC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI0NjpcdC8qIGZldGNoIHRoZSBjYSBuYW1lOyBkbyBpdCBvdXRzaWRlIF9fbXB0Y3BfaW5pdF9zb2NrKCksIHNvIHRoYXQgY2xvbmUgd2lsbFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0Ny1cdCAqIHByb3BhZ2F0ZSB0aGUgY29ycmVjdCB2YWx1ZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM2OTY9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzE0Olx0X19tcHRjcF9pbml0X3NvY2sobnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1QVENQIFNvY2tldCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE1QVENQIHNvY2tldHMgYXJlIGluaXRpYWxpemVkLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBib3RoIGBtcHRjcF9pbml0X3NvY2tgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdWx0aW1hdGVseSByZWx5IG9uIGEgY29tbW9uIGZ1bmN0aW9uOiBgX19tcHRjcF9pbml0X3NvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVkdWNlcyByZWR1bmRhbmN5IGFuZCBsaWtlbHkgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LiBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBzcGVjaWZpY2FsbHkgdGFnZ2VkIGFzIHRoZSBzb2NrZXQgaW5pdCBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3ViZmxvd3MgYXJlIGhhbmRsZWQuIFRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpcyBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YC4gVGhpcyBzb3VuZHMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIHN1YmZsb3cgdG8gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTY0NT12b2lkIG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy02NjEtXG5uZXQvbXB0Y3AvcG0uYzo2NjI6dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTY2My1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3NDQ9dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI3NTgtXHQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3NTk6XHRtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQobXB0Y3Bfc2soc2spLCBzdWJmbG93KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI3NjAtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTExNT1ib29sIG1wdGNwX3BtX25sX2NoZWNrX3dvcmtfcGVuZGluZyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjExMTY6dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1QVENQIENvZGUgUmVhY2hhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgY2FuIGFuYWx5emUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjb3JlIE1QVENQIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgZ2V0cyBjYWxsZWQgZnJvbSBgbXB0Y3BfY2xvc2Vfc3NrYCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGUgY29ubmVjdC4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAsIGBtcHRjcF9maW5pc2hfam9pbmAsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX2luaXRfc29ja2AuCgpMZXQmIzM5O3Mgc2VlOiBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCBtYWtlcyBzZW5zZS4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBjbG9zaW5nIHN1YmZsb3dzLCB3aGljaCBpcyBpbXBvcnRhbnQuIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBqb2luIGlzIGNvbXBsZXRlZC4gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgb24gcmV0cmFuc21pc3Npb25zLCBhIGNydWNpYWwgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgd2hlbiB3ZSBjcmVhdGUgYW4gTVBUQ1Agc29ja2V0LgoKTm93LCBmb3IgY29uZmlndXJhdGlvbiwgb2J2aW91c2x5LCBgTVBUQ1BgIGlzIHRoZSBiaWcgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3Mgc3VmZmljaWVudCB0byBidWlsZCBhbmQgdGVzdCB0aGVzZSBmZWF0dXJlcy4gQWgsIHJpZ2h0LCBgTVBUQ1BgIGRlcGVuZHMgb24gYElORVRgIHdoaWNoIEkga25ldywgYW5kIGBNUFRDUF9JUFY2YCB3b3VsZCBiZSB1c2VmdWwgZm9yIElQdjYgdGVzdGluZywgc28gSSYjMzk7bGwgYmUgaW5jbHVkaW5nIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwNwoJCQkJCQkJb3V0cHV0OiAyOTEKCQkJCQkJCXRob3VnaHRzOiAxNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFBhdGNoIEFuYWx5c2lzOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBtYWluIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkIGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAsIHNvIHRoYXQmIzM5O3MgdGhlIHNjb3BlIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc3RpY2sgb3V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIGBleHRyYV9zdWJmbG93c2AgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIHRoZSBzdGF0aWMgaW5saW5lIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB3aGljaCBpcyBjYWxsZWQgZnJvbSAgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGhhcmRlbiBzdWJmbG93IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBudW1iZXIgb2YgZXh0cmEgc3ViZmxvd3MgbWlnaHQgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgY3JpdGljYWwuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBjb25kaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgd2FybmluZ3MgZG9uJiMzOTt0IGZpcmUgc3B1cmlvdXNseSB1bmRlciBub3JtYWwgb3IgZXZlbiBhZHZlcnNhcmlhbCBjb25kaXRpb25zLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IFJUTyBib3VuZHMgYXJlIHNlZWRlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21wdGNwX2luaXRfc29ja2AsICBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgKHdoaWNoIGlzIGNhbGxlZCBieSBgX19tcHRjcF9yZXRyYW5zYCkgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byB1dGlsaXplIHN5c2N0bCB2YWx1ZXMgZm9yIGBpY3NrX3J0b19taW5gIGFuZCBgaWNza19ydG9fbWF4YCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgdmFsdWVzLiBUaGlzIGlzIGxpa2VseSBhaW1lZCBhdCBpbXByb3ZpbmcgYWRhcHRhYmlsaXR5IHRvIGRpZmZlcmVudCBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG92ZXJseSBhZ2dyZXNzaXZlIG9yIGNvbnNlcnZhdGl2ZSByZXRyYW5zbWlzc2lvbnMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcy4gV2UgbmVlZCB0byBmdXp6IHRpbWVvdXQgYmVoYXZpb3IgdG8gdmVyaWZ5IHRoZSBuZXcgc3lzY3RsIHZhbHVlcyBhcmUgYXBwcm9wcmlhdGVseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGFyZSBiZWhhdmluZyBjb3JyZWN0bHkgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucy4KClRoZXJlJiMzOTtzIGFsc28gYSByZW5hbWluZyBhbmQgc2NvcGluZyBjaGFuZ2U6IGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgIGlzIHJlbmFtZWQgYW5kIG1hZGUgc3RhdGljLCBhbmQgY2FuIG5vdyBiZSByZWFjaGVkIHRocm91Z2ggYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhpcyBpcyBsZXNzIGNyaXRpY2FsIGJ1dCBzdGlsbCBuZWVkcyBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuCgpCZXlvbmQgdGhlc2UgY29yZSBmdW5jdGlvbmFsIHNoaWZ0cywgdGhlcmUgYXJlIG5ldyBTTk1QIGNvdW50ZXJzIGluY3JlbWVudGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdGAsIGBzdWJmbG93X2NoZWNrX3JlcWAsIGBzdWJmbG93X2ZpbmlzaF9jb25uZWN0YCwgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AsIGFuZCBgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsYC4gV2hpbGUgdGhlc2UgY291bnRlcnMgdGhlbXNlbHZlcyBhcmVuJiMzOTt0IGZ1bmN0aW9uYWwgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLCB0aGV5IGRvIGluZGljYXRlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgb24gdmFyaW91cyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZWRnZSBjYXNlcy4gVGhlIHBhdGhzIGFyZSBhbHJlYWR5IGNvdmVyZWQgaW4gTVBUQ1AgY29ubmVjdGlvbiBmdXp6aW5nLCBzbyB3ZSBjYW4gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGZpcnN0LiBUaGUgbmV3IGNvdW50ZXJzIGNvdWxkIGluZm9ybSBmdXR1cmUgZnV6emluZyBjYW1wYWlnbnMgdGFyZ2V0aW5nIHNwZWNpZmljIGVkZ2UgY2FzZXMsIGJ1dCBmb3Igbm93LCB0aGV5IGFyZSBtb3N0bHkgaW5mb3JtYXRpdmUuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nOgoqICAgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGA6IEJlY2F1c2UgdGhlc2UgdHJpZ2dlciB0aGUgbmV3IGBXQVJOX09OX09OQ0VgIGNoZWNrcyBpbiBzdWJmbG93IG1hbmFnZW1lbnQuCiogICBgbXB0Y3BfaW5pdF9zb2NrYDogQXMgdGhlIGluaXRpYWwgUlRPIHZhbHVlIHNldHRpbmdzIGFyZSBub3cgYWZmZWN0ZWQuCiogICBgX19tcHRjcF9yZXRyYW5zYDogQXMgdGhlIFJUTyBzZXR0aW5ncyBhZmZlY3QgdGhlIGRhdGFmaW4gdGltZW91dCB3aGljaCBpcyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9ucy4KKiAgIGBtcHRjcF9maW5pc2hfam9pbmAgYW5kIGBfX21wdGNwX3N1YmZsb3dfY29ubmVjdGA6IEFzIHRoZXNlIG5vdyBjYWxsIHRoZSBgV0FSTl9PTl9PTkNFYC10cmlnZ2VyaW5nIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgYXJlYXMgdG8gY29uZmlybSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIHNwdXJpb3VzbHkgYW5kIHRoYXQgdGhlIFJUTyBjaGFuZ2VzIGJlaGF2ZSBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgbmV0d29yayBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzLiBUaGVzZSBhcmUgdGhlIGtleSBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0JiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX3JlbW92ZV9kb2l0JiMzNDssCiAgICAmIzM0O21wdGNwX2luaXRfc29jayYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZmluaXNoX2pvaW4mIzM0OywKICAgICYjMzQ7X19tcHRjcF9zdWJmbG93X2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9yZW1vdmVfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9pbml0X3NvY2smIzM0OywKICAgICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDssCiAgICAmIzM0O21wdGNwX2ZpbmlzaF9qb2luJiMzNDssCiAgICAmIzM0O19fbXB0Y3Bfc3ViZmxvd19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uOlxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXG4yLiBBZGRpbmcgbmV3IFNOTVAgTUlCIGNvdW50ZXJzIGZvciB2YXJpb3VzIE1QVENQIGV2ZW50cyAoZS5nLiwgTVBfSk9JTiBmYWlsdXJlcywgcmVzZXRzKSBhbmQgaW5jcmVtZW50aW5nIHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLlxuMy4gQWRkaW5nIHVuZGVyZmxvdyBjaGVja3MgKGBXQVJOX09OX09OQ0VgKSBmb3IgYHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cbjQuIFNlZWRpbmcgUlRPIGJvdW5kcyAoYGljc2tfcnRvX21pbmAsIGBpY3NrX3J0b19tYXhgKSBkdXJpbmcgTVBUQ1Agc29ja2V0IGluaXRpYWxpemF0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi40ODVkNTViNjZlYTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTE5LDEwICYjNDM7MTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7CiAKIC8qIE1QVENQIHNrX2J1ZmYgZXh0ZW5zaW9uIGRhdGEgKi8KIHN0cnVjdCBtcHRjcF9leHQgewotCXVuaW9uIHsKLQkJdTY0CWRhdGFfYWNrOwotCQl1MzIJZGF0YV9hY2szMjsKLQl9OwogCXU2NAkJZGF0YV9zZXE7CiAJdTMyCQlzdWJmbG93X3NlcTsKIAl1MTYJCWRhdGFfbGVuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmgKaW5kZXggMDQ1MjFhY2JhNDgzMi4uMjI4ODJiZDAzNDU5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oCkBAIC03NSw3ICYjNDM7NzUsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJVFBfQVJHUyhtcGV4dCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKHU2NCwgZGF0YV9hY2spCiAJCV9fZmllbGQodTY0LCBkYXRhX3NlcSkKIAkJX19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKQogCQlfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pCkBAIC05NCw3ICYjNDM7OTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LSZndDtkYXRhX2FjayA9IG1wZXh0LSZndDthY2s2NCA/IG1wZXh0LSZndDtkYXRhX2FjayA6IG1wZXh0LSZndDtkYXRhX2FjazMyOwogCQlfX2VudHJ5LSZndDtkYXRhX3NlcSA9IG1wZXh0LSZndDtkYXRhX3NlcTsKIAkJX19lbnRyeS0mZ3Q7c3ViZmxvd19zZXEgPSBtcGV4dC0mZ3Q7c3ViZmxvd19zZXE7CiAJCV9fZW50cnktJmd0O2RhdGFfbGVuID0gbXBleHQtJmd0O2RhdGFfbGVuOwpAQCAtMTEyLDggJiM0MzsxMTAsOCBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJCV9fZW50cnktJmd0O2luZmluaXRlX21hcCA9IG1wZXh0LSZndDtpbmZpbml0ZV9tYXA7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2RhdGFfYWNrPSVsbHUgZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXUmIzM0OywKLQkJICBfX2VudHJ5LSZndDtkYXRhX2FjaywgX19lbnRyeS0mZ3Q7ZGF0YV9zZXEsCiYjNDM7CVRQX3ByaW50aygmIzM0O2RhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1JiMzNDssCiYjNDM7CQkgIF9fZW50cnktJmd0O2RhdGFfc2VxLAogCQkgIF9fZW50cnktJmd0O3N1YmZsb3dfc2VxLCBfX2VudHJ5LSZndDtkYXRhX2xlbiwKIAkJICBfX2VudHJ5LSZndDtjc3VtLCBfX2VudHJ5LSZndDt1c2VfbWFwLAogCQkgIF9fZW50cnktJmd0O2RzbjY0LCBfX2VudHJ5LSZndDtkYXRhX2ZpbiwKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuYwppbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jCkBAIC0yMSwxNCAmIzQzOzIxLDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O01QRmFsbGJhY2tUb2tlbkluaXQmIzM0OywgTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklUKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBUQ1BSZXRyYW5zJiMzNDssIE1QVENQX01JQl9SRVRSQU5TU0VHUyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbk5vVG9rZW5Gb3VuZCYjMzQ7LCBNUFRDUF9NSUJfSk9JTk5PVE9LRU4pLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm9JZEZvdW5kJiMzNDssIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5SeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQmFja3VwUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5bkFja1J4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tCYWNrdXBSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrSE1hY0ZhaWx1cmUmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrTm9NUEpvaW4mIzM0OywgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja0hNYWNGYWlsdXJlJiMzNDssIE1QVENQX01JQl9KT0lOQUNLTUFDKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja05vTVBKb2luJiMzNDssIE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5BY2tOb0N0eCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5SZWplY3RlZCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlJFSkVDVEVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbk5vdEVzdGFibGlzaGVkJiMzNDssIE1QVENQX01JQl9NUEpPSU5OT1RFU1RBQkxJU0hFRCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5UeENyZWF0U2tFcnImIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5UeEJpbmRFcnImIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWEJJTkRFUlIpLApAQCAtODEsNyAmIzQzOzg2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7QmxhY2tob2xlJiMzNDssIE1QVENQX01JQl9CTEFDS0hPTEUpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUENhcGFibGVEYXRhRmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01ENVNpZ0ZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNRDVTaWdSZXNldCYjMzQ7LCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtEc3NGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfRFNTRkFMTEJBQ0spLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7RHNzUmVzZXQmIzM0OywgTVBUQ1BfTUlCX0RTU1JFU0VUKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oCmluZGV4IDNhMzQyNWUyNThhNzYuLjFlYmRiNTVlOTUzNDMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmgKQEAgLTE2LDE0ICYjNDM7MTYsMTkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCwJLyogQ291bGQgbm90IGluaXQvYWxsb2NhdGUgdG9rZW4gKi8KIAlNUFRDUF9NSUJfUkVUUkFOU1NFR1MsCQkvKiBTZWdtZW50cyByZXRyYW5zbWl0dGVkIGF0IHRoZSBNUFRDUC1sZXZlbCAqLwogCU1QVENQX01JQl9KT0lOTk9UT0tFTiwJCS8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQsCS8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IG5vIGxvY2FsIElEIHdhcyBmb3VuZCAqLwogCU1QVENQX01JQl9KT0lOU1lOUlgsCQkvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCwJLyogUmVjZWl2ZWQgYSBTWU4gJiM0MzsgTVBfSk9JTiAmIzQzOyBiYWNrdXAgZmxhZyAqLwogCU1QVENQX01JQl9KT0lOU1lOQUNLUlgsCQkvKiBSZWNlaXZlZCBhIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgsCS8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsCS8qIEhNQUMgd2FzIHdyb25nIG9uIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqLwomIzQzOwlNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4sCS8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIFNZTi9BQ0sgKi8KIAlNUFRDUF9NSUJfSk9JTkFDS1JYLAkJLyogUmVjZWl2ZWQgYW4gQUNLICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTkFDS01BQywJCS8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyAmIzQzOyBNUF9KT0lOICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiwJLyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gQUNLICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCwJLyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovCiAJTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCwJCS8qIFRoZSBQTSByZWplY3RlZCB0aGUgSk9JTiByZXF1ZXN0ICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5OT1RFU1RBQkxJU0hFRCwJLyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi8KIAlNUFRDUF9NSUJfSk9JTlNZTlRYLAkJLyogU2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIsCS8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSLAkvKiBOb3QgYWJsZSB0byBiaW5kKCkgdGhlIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KQEAgLTg0LDcgJiM0Mzs4OSw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHsKIAkJCQkJICogZXN0YWJsaXNoZWQgcGFja2V0CiAJCQkJCSAqLwogCU1QVENQX01JQl9NRDVTSUdGQUxMQkFDSywJLyogQ29uZmxpY3RpbmcgVENQIG9wdGlvbiBlbmFibGVkICovCiYjNDM7CU1QVENQX01JQl9NRDVTSUdSRVNFVCwJCS8qIE1QX1JTVDogTUQ1U0lHIGVuYWJsZWQgb24gbGlzdGVuZXIgKi8KIAlNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssCQkvKiBCYWQgb3IgbWlzc2luZyBEU1MgKi8KJiM0MzsJTVBUQ1BfTUlCX0RTU1JFU0VULAkJLyogTVBfUlNUOiBiYWQgZGF0YSBtYXBwaW5nICovCiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jCmluZGV4IGQxZjczYzNlMzlmYTMuLjhiNjg4NjgyNTVjNTAgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbS5jCkBAIC02NzAsNyAmIzQzOzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJaWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKSB7CiAJCWlmICh1cGRhdGVfc3ViZmxvd3MpIHsKIAkJCXNwaW5fbG9ja19iaCgmYW1wO3BtLSZndDtsb2NrKTsKLQkJCXBtLSZndDtleHRyYV9zdWJmbG93cy0tOwomIzQzOwkJCWlmICghV0FSTl9PTl9PTkNFKHBtLSZndDtleHRyYV9zdWJmbG93cyA9PSAwKSkKJiM0MzsJCQkJcG0tJmd0O2V4dHJhX3N1YmZsb3dzLS07CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3BtLSZndDtsb2NrKTsKIAkJfQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwpAQCAtMjgxLDggJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAotCQkJCXN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSkKJiM0MztzdGF0aWMgdm9pZAomIzQzO21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9OwogCWludCBhbm5vX25yID0gMDsKQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgaW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJbGlzdF9kZWxfcmN1KCZhbXA7bWF0Y2gtJmd0O2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7bXNrLSZndDtwbS5sb2NrKTsKIAotCW1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpOwomIzQzOwltcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7CiAKIAlyZWxlYXNlX3NvY2soc2spOwogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGVjODc0ZDJlYWQ2YTQuLmI0NzRkMDM2MjBhNzUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC01ODEsMTcgJiM0Mzs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKQogc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwomIzQzOwl1MzIgcnRvX21pbiA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3J0b19taW4pOwomIzQzOwl1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3J0b19tYXgpOwogCXUzMiByZXRyYW5zbWl0czsKIAomIzQzOwkvKiBUaGUgc3lzY3RscyBhcmUgdmFsaWRhdGVkIGluZGVwZW5kZW50bHk6IHJ0b19taW4gJmd0OyBydG9fbWF4IGlzCiYjNDM7CSAqIHBvc3NpYmxlLCBndWFyZCBhZ2FpbnN0IGlsb2cyKDApLgomIzQzOwkgKi8KIAlyZXRyYW5zbWl0cyA9IG1pbl90KHUzMiwgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cywKLQkJCSAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7CiYjNDM7CQkJICAgIGlsb2cyKG1heF90KHUzMiwgcnRvX21heCAvIHJ0b19taW4sIDEpKSk7CiAKLQltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTiAmbHQ7Jmx0OyByZXRyYW5zbWl0czsKJiM0MzsJbXB0Y3Bfc2soc2spLSZndDt0aW1lcl9pdmFsID0gcnRvX21pbiAmbHQ7Jmx0OyByZXRyYW5zbWl0czsKIH0KIAogc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dCkKIHsKLQltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSB0b3V0ICZndDsgMCA/IHRvdXQgOiBUQ1BfUlRPX01JTjsKJiM0MzsJbXB0Y3Bfc2soc2spLSZndDt0aW1lcl9pdmFsID0gdG91dCAmZ3Q7IDAgPyB0b3V0IDoKJiM0MzsJCQkJICAgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS0mZ3Q7aWNza19ydG9fbWluKTsKIH0KIAogc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdykKQEAgLTMxNjEsNyAmIzQzOzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21zay0mZ3Q7Y29ubl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21zay0mZ3Q7am9pbl9saXN0KTsKQEAgLTMxNzAsNyAmIzQzOzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQogCUlOSVRfV09SSygmYW1wO21zay0mZ3Q7d29yaywgbXB0Y3Bfd29ya2VyKTsKIAltc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7CiAJbXNrLSZndDtmaXJzdF9wZW5kaW5nID0gTlVMTDsKLQltc2stJmd0O3RpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTjsKJiM0MzsKJiM0MzsJLyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovCiYjNDM7CWljc2stJmd0O2ljc2tfcnRvX21pbiA9CiYjNDM7CQl1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzKSk7CiYjNDM7CWljc2stJmd0O2ljc2tfcnRvX21heCA9CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWF4X21zKSk7CiYjNDM7CW1zay0mZ3Q7dGltZXJfaXZhbCA9IGljc2stJmd0O2ljc2tfcnRvX21pbjsKIAltc2stJmd0O3NjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPOwogCW1zay0mZ3Q7YmFja2xvZ19sZW4gPSAwOwogCW1wdGNwX2luaXRfcnR0X2VzdChtc2spOwpAQCAtMzk4OCw2ICYjNDM7NDAwMiw3IEBAIGJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaykKIAogCS8qIG1wdGNwIHNvY2tldCBhbHJlYWR5IGNsb3Npbmc/ICovCiAJaWYgKCFtcHRjcF9pc19mdWxseV9lc3RhYmxpc2hlZChwYXJlbnQpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTsKIAkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTExNDksOCAmIzQzOzExNDksNiBAQCBpbnQgbXB0Y3BfcG1fYW5ub3VuY2VfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCQkJICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkciwKIAkJCSAgIGJvb2wgZWNobyk7CiBpbnQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpOwotdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAotCQkJCXN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSk7CiAKIC8qIHRoZSBkZWZhdWx0IHBhdGggbWFuYWdlciwgdXNlZCBpbiBtcHRjcF9wbV91bnJlZ2lzdGVyICovCiBleHRlcm4gc3RydWN0IG1wdGNwX3BtX29wcyBtcHRjcF9wbV9rZXJuZWw7CkBAIC0xMjU0LDcgJiM0MzsxMjUyLDggQEAgdTggbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spOwogLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKLQlpZiAoLS1tc2stJmd0O3BtLmV4dHJhX3N1YmZsb3dzICZsdDsgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpCiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKG1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgPT0gMCkgJmFtcDsmYW1wOwomIzQzOwkgICAgLS1tc2stJmd0O3BtLmV4dHJhX3N1YmZsb3dzICZsdDsgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpCiAJCVdSSVRFX09OQ0UobXNrLSZndDtwbS5hY2NlcHRfc3ViZmxvdywgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtOTYsNiAmIzQzOzk2LDcgQEAgc3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICpzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAlsb2NhbF9pZCA9IG1wdGNwX3BtX2dldF9sb2NhbF9pZChtc2ssIChzdHJ1Y3Qgc29ja19jb21tb24gKilyZXEpOwogCWlmIChsb2NhbF9pZCAmbHQ7IDApIHsKJiM0MzsJCVNVQkZMT1dfUkVRX0lOQ19TVEFUUyhyZXEsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpOwogCQlzb2NrX3B1dCgoc3RydWN0IHNvY2sgKiltc2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNjAsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCSAqIFRDUCBvcHRpb24gc3BhY2UuCiAJICovCiAJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcih0Y3Bfc2soc2tfbGlzdGVuZXIpLSZndDttZDVzaWdfaW5mbykpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChza19saXN0ZW5lciksIE1QVENQX01JQl9NRDVTSUdSRVNFVCk7CiAJCXN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NjMsNiAmIzQzOzU2NSw3IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl1OCBobWFjW1NIQTI1Nl9ESUdFU1RfU0laRV07CiAKIAkJaWYgKCEobXBfb3B0LnN1Ym9wdGlvbnMgJmFtcDsgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7CiYjNDM7CQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTsKIAkJCXN1YmZsb3ctJmd0O3Jlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7CiAJCQlnb3RvIGRvX3Jlc2V0OwogCQl9CkBAIC04NjUsNiAmIzQzOzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCSAqLwogCQlpZiAoIWN0eCB8fCBmYWxsYmFjaykgewogCQkJaWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7CiYjNDM7CQkJCWlmICghY3R4KQomIzQzOwkJCQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKJiM0MzsJCQkJCQkJTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTsKJiM0MzsJCQkJZWxzZQomIzQzOwkJCQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKJiM0MzsJCQkJCQkJTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTsKIAkJCQlzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTsKIAkJCQlnb3RvIGRpc3Bvc2VfY2hpbGQ7CiAJCQl9CkBAIC0xNDE2LDYgJiM0MzsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spCiAJCQkgKiBzdWJmbG93X2Vycm9yX3JlcG9ydCgpIHdpbGwgaW50cm9kdWNlIHRoZSBhcHByb3ByaWF0ZSBiYXJyaWVycwogCQkJICovCiAJCQlzdWJmbG93LSZndDtyZXNldF90cmFuc2llbnQgPSAwOwomIzQzOwkJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpOwogCQkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gc3RhdHVzID09IE1BUFBJTkdfTk9EU1MgPwogCQkJCQkJTVBUQ1BfUlNUX0VNSURETEVCT1ggOgogCQkJCQkJTVBUQ1BfUlNUX0VNUFRDUDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwpAQCAtMTI2NCw3ICYjNDM7MTI2NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Ntc2dfdHlwZXMoaW50IGZkLCBjb25zdCBzdHJ1Y3QgY2ZnX2Ntc2dfdHlwZXMgKmNtc2cpCiAKIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSkKIHsKLQljaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTsKJiM0MzsJY29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAmIzM5OywmIzM5Oyk7CiAJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKIAljZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxOwpAQCAtMTI5Miw3ICYjNDM7MTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSkKIAogc3RhdGljIHZvaWQgcGFyc2Vfc2V0c29ja19vcHRpb25zKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JY2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiYjNDM7CWNvbnN0IGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJaWYgKG5leHQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKQEAgLTIxMiw4ICYjNDM7MjEyLDggQEAgaWYgJGNoZWNrc3VtOyB0aGVuCiBmaQogCiBpZiAkY2FwdHVyZTsgdGhlbgotCXJuZGg9JiMzNDske25zMTo0fSYjMzQ7Ci0JbXB0Y3BfbGliX3ByX2luZm8gJiMzNDtQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tJiMzNDsKJiM0MzsJY2FwcHJlZml4PSYjMzQ7bXB0Y3BfY29ubmVjdC0ke25zMTo0fSYjMzQ7CiYjNDM7CW1wdGNwX2xpYl9wcl9pbmZvICYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS0mIzM0OwogZmkKIAogc2V0X2V0aHRvb2xfZmxhZ3MoKSB7CkBAIC0zNzIsOCAmIzQzOzM3Miw4IEBAIGRvX3RyYW5zZmVyKCkKIAkJCWNhcHVzZXI9JiMzNDstWiAkU1VET19VU0VSJiMzNDsKIAkJZmkKIAotCQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtybmRofS0ke2Nvbm5lY3Rvcl9uczowOjN9LSR7bGlzdGVuZXJfbnM6MDozfS0ke2NsX3Byb3RvfS0ke3Nydl9wcm90b30tJHtjb25uZWN0X2FkZHJ9LSR7cG9ydH0mIzM0OwotCQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICR7Y2FwdXNlcn0mIzM0OwogCiAJCWlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXAogCQkJLXcgJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXAmIzM0OyAmZ3Q7Jmd0OyAmIzM0OyR7Y2Fwb3V0fSYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYwppbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKQEAgLTM3Nyw3ICYjNDM7Mzc3LDggQEAgc3RhdGljIHZvaWQgZ2V0X3N1YmZsb3dfaW5mbyhjaGFyICpzdWJmbG93X2FkZHJzKQogCWludCByZXQ7CiAJaW50IGZkOwogCi0JcmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsICYjMzQ7JVteOl06JWQgJVteOl06JWQmIzM0Oywgc2FkZHIsICZhbXA7c3BvcnQsIGRhZGRyLCAmYW1wO2Rwb3J0KTsKJiM0MzsJcmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsICYjMzQ7JTYzW146XTolZCAlNjNbXjpdOiVkJiMzNDssCiYjNDM7CQkgICAgIHNhZGRyLCAmYW1wO3Nwb3J0LCBkYWRkciwgJmFtcDtkcG9ydCk7CiAJaWYgKHJldCAhPSA0KQogCQlkaWVfcGVycm9yKCYjMzQ7SVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCkBAIC03NSw2ICYjNDM7NzUsMTQgQEAgdW5zZXQgam9pbl9zeW5fdHgKIHVuc2V0IGpvaW5fY3JlYXRlX2VycgogdW5zZXQgam9pbl9iaW5kX2VycgogdW5zZXQgam9pbl9jb25uZWN0X2VycgomIzQzO3Vuc2V0IGpvaW5fc3luYWNrX25vX21wam9pbgomIzQzO3Vuc2V0IGpvaW5fYWNrX25vX21wam9pbgomIzQzO3Vuc2V0IGpvaW5fYWNrX25vX2N0eAomIzQzO3Vuc2V0IGpvaW5fbm90X2VzdGFibGlzaGVkCiYjNDM7dW5zZXQgam9pbl9ub19pZF9mb3VuZAomIzQzOwomIzQzO3Vuc2V0IHJzdF9tZDVzaWcKJiM0Mzt1bnNldCByc3RfZHNzCiAKIHVuc2V0IGZiX25zMQogdW5zZXQgZmJfbnMyCkBAIC05NzEsNyAmIzQzOzk3OSw3IEBAIGNvbmRfc3RhcnRfY2FwdHVyZSgpCiAJCWNhcGZpbGU9JChwcmludGYgJiMzNDttcF9qb2luLSUwMnUtJXMucGNhcCYjMzQ7ICYjMzQ7JE1QVENQX0xJQl9URVNUX0NPVU5URVImIzM0OyAmIzM0OyRucyYjMzQ7KQogCiAJCWVjaG8gJiMzNDtDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlJiMzNDsKLQkJaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7IHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13ICYjMzQ7JGNhcGZpbGUmIzM0OyAmZ3Q7ICYjMzQ7JGNhcG91dCYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgdGNwZHVtcCAtaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICRjYXB1c2VyIC13ICYjMzQ7JGNhcGZpbGUmIzM0OyAmZ3Q7ICYjMzQ7JGNhcG91dCYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CiAJCWNhcHBpZD0kIQogCiAJCXNsZWVwIDEKQEAgLTEzNTMsNiAmIzQzOzEzNjEsOCBAQCBjaGtfcnN0X25yKCkKIAlsb2NhbCByc3RfdHg9JDEKIAlsb2NhbCByc3Rfcng9JDIKIAlsb2NhbCBuc19pbnZlcnQ9JHszOi0mIzM0OyYjMzQ7fQomIzQzOwlsb2NhbCBtZDVzaWc9JHtyc3RfbWQ1c2lnOi0wfQomIzQzOwlsb2NhbCBkc3M9JHtyc3RfZHNzOi0wfQogCWxvY2FsIGNvdW50CiAJbG9jYWwgbnNfdHg9JG5zMQogCWxvY2FsIG5zX3J4PSRuczIKQEAgLTEzODksNiAmIzQzOzEzOTksMjEgQEAgY2hrX3JzdF9ucigpCiAJZWxzZQogCQlwcmludF9vawogCWZpCiYjNDM7CiYjNDM7CSMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvbgomIzQzOwkjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IE1ENVNpZ1Jlc2V0IGZpcmVzIG9uIHRoZSBsaXN0ZW5lcgomIzQzOwkjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS4KJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNRDVTaWdSZXNldCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRtZDVzaWcmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludF9jaGVjayAmIzM0O01ENVNpZ1Jlc2V0JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZyYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSAmIzM0O01QVGNwRXh0RHNzUmVzZXQmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskZHNzJiMzNDsgXTsgdGhlbgomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtEc3NSZXNldCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3MmIzM0OwomIzQzOwlmaQogfQogCiBjaGtfaW5maV9ucigpCkBAIC0xNTg3LDYgJiM0MzsxNjEyLDExIEBAIGNoa19qb2luX25yKCkKIAlsb2NhbCByc3RfbnI9JHtqb2luX3JzdF9ucjotMH0KIAlsb2NhbCBpbmZpX25yPSR7am9pbl9pbmZpX25yOi0wfQogCWxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH0KJiM0MzsJbG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH0KJiM0MzsJbG9jYWwgYWNrX25vX21wam9pbj0ke2pvaW5fYWNrX25vX21wam9pbjotMH0KJiM0MzsJbG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH0KJiM0MzsJbG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9CiYjNDM7CWxvY2FsIG5vX2lkX2ZvdW5kPSR7am9pbl9ub19pZF9mb3VuZDotMH0KIAlsb2NhbCByYz0ke0tTRlRfUEFTU30KIAlsb2NhbCBjb3VudAogCWxvY2FsIHdpdGhfY29va2llCkBAIC0xNjU1LDYgJiM0MzsxNjg1LDQ0IEBAIGNoa19qb2luX25yKCkKIAkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIHN5biByZWplY3RlZCBleHBlY3RlZCAkc3luX3JlaiYjMzQ7CiAJZmkKIAomIzQzOwkjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb24KJiM0MzsJIyBhdmFpbGFiaWxpdHkuICBGaXhlZCBuYW1lc3BhY2VzOiB0aGUgKlN5bkFjayogb25lIGZpcmVzIG9uIHRoZQomIzQzOwkjIGNsaWVudCByZWNlaXZpbmcgdGhlIFNZTi9BQ0ssIHRoZSBvdGhlcnMgb24gdGhlIHNlcnZlci4KJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9ICYjMzQ7TVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pbiYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRzeW5hY2tfbm9fbXBqb2luJiMzNDsgXTsgdGhlbgomIzQzOwkJcmM9JHtLU0ZUX0ZBSUx9CiYjNDM7CQlwcmludF9jaGVjayAmIzM0O3N5bmFjayBubyBtcGpvaW4mIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW4mIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbkFja05vTVBKb2luJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JGFja19ub19tcGpvaW4mIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7YWNrIG5vIG1wam9pbiYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkYWNrX25vX21wam9pbiYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSAmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9DdHgmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskYWNrX25vX2N0eCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDthY2sgbm8gY3R4JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gY3R4IGV4cGVjdGVkICRhY2tfbm9fY3R4JiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRub3RfZXN0YWJsaXNoZWQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7am9pbiBub3QgZXN0YWJsaXNoZWQmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5Ob0lkRm91bmQmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskbm9faWRfZm91bmQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7am9pbiBubyBpZCBmb3VuZCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gbm8gaWQgZm91bmQgZXhwZWN0ZWQgJG5vX2lkX2ZvdW5kJiMzNDsKJiM0MzsJZmkKJiM0MzsKIAlwcmludF9yZXN1bHRzICYjMzQ7am9pbiBSeCYjMzQ7ICR7cmN9CiAKIAlqb2luX3N5bl90eD0mIzM0OyR7am9pbl9zeW5fdHg6LSR7c3luX25yfX0mIzM0OyBcCkBAIC0yMzU5LDYgJiM0MzsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKCkKIAkJCWNoa19hZGRfbnIgNCA0CiAJCWZpCiAJZmkKJiM0MzsKJiM0MzsJIyBzaWduYWxsZWQgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBjbGllbnQsIHdoZXJlIGEgVENQLW9ubHkKJiM0MzsJIyBsaXN0ZW5lciBpcyBib3VuZCBhdCBpdDogdGhlIGNsaWVudCYjMzk7cyBNUF9KT0lOIHJvdXRlcyBsb2NhbGx5CiYjNDM7CSMgdG8gdGhlIGxpc3RlbmVyIGFuZCByZWNlaXZlcyBhIFNZTi9BQ0sgd2l0aG91dCBNUF9KT0lOLgomIzQzOwkjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLgomIzQzOwlpZiByZXNldCAmIzM0O3NpZ25hbCBhZGRyZXNzLCBUQ1Atb25seSBsaXN0ZW5lciBvbiBjbGllbnQmIzM0OzsgdGhlbgomIzQzOwkJbG9jYWwgZXh0cmFfYmluZAomIzQzOwkJbG9jYWwgcG9ydAomIzQzOwomIzQzOwkJcG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMQomIzQzOwkJcG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMQomIzQzOwkJcG1fbmxfYWRkX2VuZHBvaW50ICRuczEgMTAuMC4yLjIgZmxhZ3Mgc2lnbmFsCiYjNDM7CiYjNDM7CQlwb3J0PSQoZ2V0X3BvcnQpCiYjNDM7CQlpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgJiMzNDskcG9ydCYjMzQ7IFwKJiM0MzsJCQktcyBUQ1AgMTAuMC4yLjIgJmFtcDsKJiM0MzsJCWV4dHJhX2JpbmQ9JCEKJiM0MzsJCW1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuICYjMzQ7JG5zMiYjMzQ7ICYjMzQ7JHBvcnQmIzM0OwomIzQzOwomIzQzOwkJcnVuX3Rlc3RzICRuczEgJG5zMiAxMC4wLjEuMQomIzQzOwkJam9pbl9zeW5hY2tfbm9fbXBqb2luPTEgam9pbl9zeW5fdHg9MSBcCiYjNDM7CQkJY2hrX2pvaW5fbnIgMCAwIDAKJiM0MzsKJiM0MzsJCWtpbGwgJHtleHRyYV9iaW5kfSAyJmd0Oy9kZXYvbnVsbAomIzQzOwlmaQogfQogCiBsYW1pbmFyX2VuZHBfdGVzdHMoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2gKaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoCkBAIC0yNCw2ICYjNDM7MjQsNyBAQCBzbWFsbD0mIzM0OyYjMzQ7CiBzb3V0PSYjMzQ7JiMzNDsKIGNvdXQ9JiMzNDsmIzM0OwogY2Fwb3V0PSYjMzQ7JiMzNDsKJiM0MztjYXBwcmVmaXg9JiMzNDsmIzM0Owogc2l6ZT0wCiAKIHVzYWdlKCkgewpAQCAtNzAsNiAmIzQzOzcxLDExIEBAIHNldHVwKCkKIAogCW1wdGNwX2xpYl9uc19pbml0IG5zMSBuczIgbnMzCiAKJiM0MzsJaWYgJGNhcHR1cmU7IHRoZW4KJiM0MzsJCWNhcHByZWZpeD0mIzM0O3NpbXVsdF9mbG93cy0ke25zMTo0fSYjMzQ7CiYjNDM7CQltcHRjcF9saWJfcHJfaW5mbyAmIzM0O3BjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tJiMzNDsKJiM0MzsJZmkKJiM0MzsKIAlpcCBsaW5rIGFkZCBuczFldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwogCWlwIGxpbmsgYWRkIG5zMWV0aDIgbmV0bnMgJiMzNDskbnMxJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgyIG5ldG5zICYjMzQ7JG5zMiYjMzQ7CiAJaXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyAmIzM0OyRuczImIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgJiMzNDskbnMzJiMzNDsKQEAgLTEzNiwxNSAmIzQzOzE0MiwxNCBAQCBkb190cmFuc2ZlcigpCiAKIAlpZiAkY2FwdHVyZTsgdGhlbgogCQlsb2NhbCBjYXB1c2VyCi0JCWxvY2FsIHJuZGg9JiMzNDske25zMTo0fSYjMzQ7CiAJCWlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlbgogCQkJY2FwdXNlcj0mIzM0OyYjMzQ7CiAJCWVsc2UKIAkJCWNhcHVzZXI9JiMzNDstWiAkU1VET19VU0VSJiMzNDsKIAkJZmkKIAotCQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtybmRofS0ke3BvcnR9JiMzNDsKLQkJbG9jYWwgY2Fwb3B0PSYjMzQ7LWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn0mIzM0OwomIzQzOwkJbG9jYWwgY2FwZmlsZT0mIzM0OyR7Y2FwcHJlZml4fS0ke3BvcnR9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyAxMDggLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiAKIAkJaXAgbmV0bnMgZXhlYyAke25zM30gIHRjcGR1bXAgJHtjYXBvcHR9IC13ICYjMzQ7JHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwJiMzNDsgICZndDsmZ3Q7ICYjMzQ7JHtjYXBvdXR9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKIAkJbG9jYWwgY2FwcGlkX2xpc3RlbmVyPSQhCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiAxNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IE5vIERlZGljYXRlZCBTZXNzaW9uIFJlcXVpcmVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIHNlcmllcyBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1biwgd2hpY2ggd291bGQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcywgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG1vc3RseSBkZWFsaW5nIHdpdGg6CgoxLiAgKipSZW1vdmFsIG9mIGBkYXRhX2Fja2AgZmllbGQ6KiogVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbi4gVGhlIHJlbW92YWwgb2YgYGRhdGFfYWNrYCAoYW5kIGl0cyBhc3NvY2lhdGVkIGBkYXRhX2FjazMyYCB1bmlvbiBtZW1iZXIpIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50IGlzIGEgKipuZXQgcmVkdWN0aW9uKiogaW4gZGF0YSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGVzcyBkYXRhIGlzIGJldHRlciwgaW4gdGhpcyBjYXNlLiBXZSYjMzk7cmUgcmVtb3ZpbmcsIG5vdCBhZGRpbmcuIFRoZSB0cmFjZSBldmVudCBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdXNlci1zcGFjZSBleHBvc3VyZSBvZiBzZW5zaXRpdmUgZGF0YSwgYW5kIHRoZSBgc3RydWN0IG1wdGNwX2V4dGAgY2hhbmdlIGludm9sdmVzIGFuIGBza2JfZXh0X2FkZCgpYCBhbGxvY2F0aW9uLiBMZXNzIGRhdGEgaW4gdGhlIHNrYiBleHRlbnNpb24gaXMgYSBwb3NpdGl2ZSB0aGluZyBmb3IgcmVkdWNpbmcgbWVtb3J5IHVzYWdlLgoyLiAgKipTTk1QIE1JQiBJdGVtczoqKiBUaGVzZSBhcmUganVzdCBjb3VudGVycywgaW5jcmVtZW50ZWQgdXNpbmcgYE1QVENQX0lOQ19TVEFUU2AuIFRoZSBpbmZvcm1hdGlvbiBleHBvc2VkIHRocm91Z2ggYC9wcm9jL25ldC9zbm1wYCBvciBzaW1pbGFyIGlzIGVudGlyZWx5IGJlbmlnbi4gV2UmIzM5O3JlIG5vdCBsZWFraW5nIGFueXRoaW5nIHNlbnNpdGl2ZSB0byB1c2VyIHNwYWNlOyB3ZSYjMzk7cmUganVzdCBwcm92aWRpbmcgbW9yZSBzdGF0aXN0aWNzLgozLiAgKipVbmRlcmZsb3cgQ2hlY2tzICZhbXA7IFJUTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBgZXh0cmFfc3ViZmxvd3NgIGFyZSBkZWZlbnNpdmUgY29kaW5nIHByYWN0aWNlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBpY3NrLSZndDtpY3NrX3J0b19taW5gIGFuZCBgaWNzay0mZ3Q7aWNza19ydG9fbWF4YCB3aXRoIHZhbHVlcyBmcm9tIGBuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXNgIGlzIGEgKipwb3NpdGl2ZSoqLiBJdCAqcHJldmVudHMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGVyZSBwcmV2aW91c2x5IHRoZSB2YXJpYWJsZXMgbWlnaHQgaGF2ZSBiZWVuIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KCkNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCBsZXQmIzM5O3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgcG9pbnRzLgoKKiAgICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIFRoZSB0cmFjZSBldmVudCAqcmVtb3ZlcyogYSBmaWVsZCBhbmQgc28gdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGNvcGllZCBpcyBzbWFsbGVyIG5vdy4gVGhlIE1JQiBpdGVtcyBpbmNyZW1lbnQgY291bnRlcnMsIHdoaWNoIGlzIG5vdCBjb25jZXJuaW5nIGZvciBLTVNBTi4gVGhlIHJlbW92YWwgb2YgdGhlIGBkYXRhX2Fja2AgZmllbGQgaW4gdGhlIHNrYiBleHRlbnNpb24gaXMgYSByZWR1Y3Rpb24gaW4gc2l6ZS4KKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogV2UmIzM5O3JlIHJlbW92aW5nIGEgZmllbGQgZnJvbSBhbiBza2IgZXh0ZW5zaW9uLiBXZSBhcmUgbm93IGluaXRpYWxpemluZyBhbiBSVE8gYW5kIHRob3NlIHdlcmUgbm90IGluaXRpYWxpemVkIHByZXZpb3VzbHksIHdoaWNoIGFkZHJlc3NlcyBwcmV2aW91cyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCB1c2FnZS4gVGhlcmUgYXJlIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY3JlYXRlZC4KCldlJiMzOTtyZSBhZGRpbmcgY2hlY2tzIHRvIHVuZGVyZmxvdywgc28gbm90IGEgcHJvYmxlbS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb3VudGVycyBpcyBmaW5lLiBUaGUgUlRPIHNlZWRpbmcgaW5pdGlhbGl6ZXMgZmllbGRzLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgS01TQU4gcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoZSByZW1vdmFsIG9mIHRoZSBmaWVsZCBhbmQgdGhlIHNlZWRpbmcgb2YgdGhlIFJUTyBzaG91bGQgcmVkdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMgc2hvdWxkIGFkZXF1YXRlbHkgaGFuZGxlIGFueSBwb3RlbnRpYWwgYnVncyAobG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzKS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LgpJJiMzOTttIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZSBmb3IgdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MTcuNjczMDU0MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwNDcxNjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgICBcIm1wdGNwX3BtX25sX3JlbW92ZV9kb2l0XCIsXG4gICAgXCJtcHRjcF9pbml0X3NvY2tcIixcbiAgICBcIl9fbXB0Y3BfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZmluaXNoX2pvaW5cIixcbiAgICBcIl9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb246XFxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXFxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cXG4zLiBBZGRpbmcgdW5kZXJmbG93IGNoZWNrcyAoYFdBUk5fT05fT05DRWApIGZvciBgcG0tXFx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjE3LjY3MzA2MDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMDc4MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNjMjBiNjI1ZWY5ZDVmMWE0ZGE2OGJmYmZkOWQ3YjliZTc3YmMwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjQ4NWQ1NWI2NmVhNjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMTksMTAgKzE5LDYgQEAgc3RydWN0IHNlcV9maWxlO1xcbiBcXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xcbiBzdHJ1Y3QgbXB0Y3BfZXh0IHtcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHR1NjRcXHRkYXRhX2FjaztcXG4tXFx0XFx0dTMyXFx0ZGF0YV9hY2szMjtcXG4tXFx0fTtcXG4gXFx0dTY0XFx0XFx0ZGF0YV9zZXE7XFxuIFxcdHUzMlxcdFxcdHN1YmZsb3dfc2VxO1xcbiBcXHR1MTZcXHRcXHRkYXRhX2xlbjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxcbiBcXHRUUF9BUkdTKG1wZXh0KSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuLVxcdFxcdF9fZmllbGQodTY0LCBkYXRhX2FjaylcXG4gXFx0XFx0X19maWVsZCh1NjQsIGRhdGFfc2VxKVxcbiBcXHRcXHRfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpXFxuIFxcdFxcdF9fZmllbGQodTE2LCBkYXRhX2xlbilcXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG4tXFx0XFx0X19lbnRyeS1cXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cXHUwMDNlYWNrNjQgPyBtcGV4dC1cXHUwMDNlZGF0YV9hY2sgOiBtcGV4dC1cXHUwMDNlZGF0YV9hY2szMjtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlZGF0YV9zZXEgPSBtcGV4dC1cXHUwMDNlZGF0YV9zZXE7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXFx1MDAzZXN1YmZsb3dfc2VxO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VkYXRhX2xlbiA9IG1wZXh0LVxcdTAwM2VkYXRhX2xlbjtcXG5AQCAtMTEyLDggKzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlaW5maW5pdGVfbWFwID0gbXBleHQtXFx1MDAzZWluZmluaXRlX21hcDtcXG4gXFx0KSxcXG4gXFxuLVxcdFRQX3ByaW50ayhcXFwiZGF0YV9hY2s9JWxsdSBkYXRhX3NlcT0lbGx1IHN1YmZsb3dfc2VxPSV1IGRhdGFfbGVuPSV1IGNzdW09JXggdXNlX21hcD0ldSBkc242ND0ldSBkYXRhX2Zpbj0ldSB1c2VfYWNrPSV1IGFjazY0PSV1IG1wY19tYXA9JXUgZnJvemVuPSV1IHJlc2V0X3RyYW5zaWVudD0ldSByZXNldF9yZWFzb249JXUgY3N1bV9yZXFkPSV1IGluZmluaXRlX21hcD0ldVxcXCIsXFxuLVxcdFxcdCAgX19lbnRyeS1cXHUwMDNlZGF0YV9hY2ssIF9fZW50cnktXFx1MDAzZWRhdGFfc2VxLFxcbitcXHRUUF9wcmludGsoXFxcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XFxcIixcXG4rXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VkYXRhX3NlcSxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VzdWJmbG93X3NlcSwgX19lbnRyeS1cXHUwMDNlZGF0YV9sZW4sXFxuIFxcdFxcdCAgX19lbnRyeS1cXHUwMDNlY3N1bSwgX19lbnRyeS1cXHUwMDNldXNlX21hcCxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2Vkc242NCwgX19lbnRyeS1cXHUwMDNlZGF0YV9maW4sXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IDI1NjkzODViYWI3Y2EuLjYwOGNiNTY4ODk3Y2YgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTIxLDE0ICsyMSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEZhbGxiYWNrVG9rZW5Jbml0XFxcIiwgTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklUKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBUQ1BSZXRyYW5zXFxcIiwgTVBUQ1BfTUlCX1JFVFJBTlNTRUdTKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm9Ub2tlbkZvdW5kXFxcIiwgTVBUQ1BfTUlCX0pPSU5OT1RPS0VOKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm9JZEZvdW5kXFxcIiwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5blJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5SWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkJhY2t1cFJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja1J4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja0JhY2t1cFJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5BY2tOb01QSm9pblxcXCIsIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTiksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja1J4XFxcIiwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja0hNYWNGYWlsdXJlXFxcIiwgTVBUQ1BfTUlCX0pPSU5BQ0tNQUMpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5BY2tOb01QSm9pblxcXCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja05vQ3R4XFxcIiwgTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luUmVqZWN0ZWRcXFwiLCBNUFRDUF9NSUJfSk9JTlJFSkVDVEVEKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm90RXN0YWJsaXNoZWRcXFwiLCBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5UeFxcXCIsIE1QVENQX01JQl9KT0lOU1lOVFgpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcXFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5blR4QmluZEVyclxcXCIsIE1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSKSxcXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJCbGFja2hvbGVcXFwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBDYXBhYmxlRGF0YUZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1ENVNpZ0ZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTUQ1U2lnUmVzZXRcXFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJEc3NGYWxsYmFja1xcXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIkRzc1Jlc2V0XFxcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcXG5pbmRleCAzYTM0MjVlMjU4YTc2Li4xZWJkYjU1ZTk1MzQzIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxcbisrKyBiL25ldC9tcHRjcC9taWIuaFxcbkBAIC0xNiwxNCArMTYsMTkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xcbiBcXHRNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQsXFx0LyogQ291bGQgbm90IGluaXQvYWxsb2NhdGUgdG9rZW4gKi9cXG4gXFx0TVBUQ1BfTUlCX1JFVFJBTlNTRUdTLFxcdFxcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXFxuIFxcdE1QVENQX01JQl9KT0lOTk9UT0tFTixcXHRcXHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFxcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IG5vIGxvY2FsIElEIHdhcyBmb3VuZCAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFxcdFxcdC8qIFJlY2VpdmVkIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYLFxcdC8qIFJlY2VpdmVkIGEgU1lOICsgTVBfSk9JTiArIGJhY2t1cCBmbGFnICovXFxuIFxcdE1QVENQX01JQl9KT0lOU1lOQUNLUlgsXFx0XFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYLFxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyxcXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4sXFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTkFDS1JYLFxcdFxcdC8qIFJlY2VpdmVkIGFuIEFDSyArIE1QX0pPSU4gKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXFx0XFx0LyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICsgTVBfSk9JTiAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4sXFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gQUNLICovXFxuK1xcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCxcXHQvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCxcXHRcXHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQsXFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5TWU5UWCxcXHRcXHQvKiBTZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcXHQvKiBOb3QgYWJsZSB0byBjcmVhdGUgYSBzb2NrZXQgd2hlbiBzZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcXHQvKiBOb3QgYWJsZSB0byBiaW5kKCkgdGhlIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbkBAIC04NCw3ICs4OSw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcXG4gXFx0XFx0XFx0XFx0XFx0ICogZXN0YWJsaXNoZWQgcGFja2V0XFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRNUFRDUF9NSUJfTUQ1U0lHRkFMTEJBQ0ssXFx0LyogQ29uZmxpY3RpbmcgVENQIG9wdGlvbiBlbmFibGVkICovXFxuK1xcdE1QVENQX01JQl9NRDVTSUdSRVNFVCxcXHRcXHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXFxuIFxcdE1QVENQX01JQl9EU1NGQUxMQkFDSyxcXHRcXHQvKiBCYWQgb3IgbWlzc2luZyBEU1MgKi9cXG4rXFx0TVBUQ1BfTUlCX0RTU1JFU0VULFxcdFxcdC8qIE1QX1JTVDogYmFkIGRhdGEgbWFwcGluZyAqL1xcbiBcXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXFxuIFxcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xcbiBcXHRNUFRDUF9NSUJfV0lOUFJPQkUsXFx0XFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xcbmluZGV4IGQxZjczYzNlMzlmYTMuLjhiNjg4NjgyNTVjNTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xcbkBAIC02NzAsNyArNjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKSB7XFxuIFxcdFxcdGlmICh1cGRhdGVfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwbS1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdHBtLVxcdTAwM2VleHRyYV9zdWJmbG93cy0tO1xcbitcXHRcXHRcXHRpZiAoIVdBUk5fT05fT05DRShwbS1cXHUwMDNlZXh0cmFfc3ViZmxvd3MgPT0gMCkpXFxuK1xcdFxcdFxcdFxcdHBtLVxcdTAwM2VleHRyYV9zdWJmbG93cy0tO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cG0tXFx1MDAzZWxvY2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG5AQCAtMjgxLDggKzI4MSw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXFxuK3N0YXRpYyB2b2lkXFxuK21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xcbiBcXHRpbnQgYW5ub19uciA9IDA7XFxuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZtYXRjaC1cXHUwMDNlbGlzdCk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4tXFx0bXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7XFxuK1xcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcXG4gXFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTU4MSwxNyArNTgxLDIzIEBAIHN0YXRpYyBib29sIG1wdGNwX3BlbmRpbmdfZGF0YV9maW4oc3RydWN0IHNvY2sgKnNrLCB1NjQgKnNlcSlcXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbitcXHR1MzIgcnRvX21pbiA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3J0b19taW4pO1xcbitcXHR1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3J0b19tYXgpO1xcbiBcXHR1MzIgcmV0cmFuc21pdHM7XFxuIFxcbitcXHQvKiBUaGUgc3lzY3RscyBhcmUgdmFsaWRhdGVkIGluZGVwZW5kZW50bHk6IHJ0b19taW4gXFx1MDAzZSBydG9fbWF4IGlzXFxuK1xcdCAqIHBvc3NpYmxlLCBndWFyZCBhZ2FpbnN0IGlsb2cyKDApLlxcbitcXHQgKi9cXG4gXFx0cmV0cmFuc21pdHMgPSBtaW5fdCh1MzIsIGljc2stXFx1MDAzZWljc2tfcmV0cmFuc21pdHMsXFxuLVxcdFxcdFxcdCAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7XFxuK1xcdFxcdFxcdCAgICBpbG9nMihtYXhfdCh1MzIsIHJ0b19tYXggLyBydG9fbWluLCAxKSkpO1xcbiBcXG4tXFx0bXB0Y3Bfc2soc2spLVxcdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXFx1MDAzY1xcdTAwM2MgcmV0cmFuc21pdHM7XFxuK1xcdG1wdGNwX3NrKHNrKS1cXHUwMDNldGltZXJfaXZhbCA9IHJ0b19taW4gXFx1MDAzY1xcdTAwM2MgcmV0cmFuc21pdHM7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRvdXQpXFxuIHtcXG4tXFx0bXB0Y3Bfc2soc2spLVxcdTAwM2V0aW1lcl9pdmFsID0gdG91dCBcXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XFxuK1xcdG1wdGNwX3NrKHNrKS1cXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXFx1MDAzZSAwID8gdG91dCA6XFxuK1xcdFxcdFxcdFxcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcnRvX21pbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIG1wdGNwX3RpbWVvdXRfZnJvbV9zdWJmbG93KGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpXFxuQEAgLTMxNjEsNyArMzE2Nyw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bXNrLVxcdTAwM2Vjb25uX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bXNrLVxcdTAwM2Vqb2luX2xpc3QpO1xcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNm1zay1cXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcXG4gXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcbiBcXHRtc2stXFx1MDAzZWZpcnN0X3BlbmRpbmcgPSBOVUxMO1xcbi1cXHRtc2stXFx1MDAzZXRpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTjtcXG4rXFxuK1xcdC8qIG1zayBkb2VzIG5vdCBnbyB0aHJvdWdoIHRjcF9pbml0X3NvY2soKTsgc2VlZCBSVE8gYm91bmRzLiAqL1xcbitcXHRpY3NrLVxcdTAwM2VpY3NrX3J0b19taW4gPVxcbitcXHRcXHR1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzKSk7XFxuK1xcdGljc2stXFx1MDAzZWljc2tfcnRvX21heCA9XFxuK1xcdFxcdG1zZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcXG4rXFx0bXNrLVxcdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cXHUwMDNlaWNza19ydG9fbWluO1xcbiBcXHRtc2stXFx1MDAzZXNjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPO1xcbiBcXHRtc2stXFx1MDAzZWJhY2tsb2dfbGVuID0gMDtcXG4gXFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XFxuQEAgLTM5ODgsNiArNDAwMiw3IEBAIGJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaylcXG4gXFxuIFxcdC8qIG1wdGNwIHNvY2tldCBhbHJlYWR5IGNsb3Npbmc/ICovXFxuIFxcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcXG4gXFx0XFx0c3ViZmxvdy1cXHUwMDNlcmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5pbmRleCBiM2FmMzQ2MmJkZDE2Li4wNmExMDdkNGU4MzkyIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5AQCAtMTE0OSw4ICsxMTQ5LDYgQEAgaW50IG1wdGNwX3BtX2Fubm91bmNlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcXG4gXFx0XFx0XFx0ICAgYm9vbCBlY2hvKTtcXG4gaW50IG1wdGNwX3BtX3JlbW92ZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KTtcXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpO1xcbiBcXG4gLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi9cXG4gZXh0ZXJuIHN0cnVjdCBtcHRjcF9wbV9vcHMgbXB0Y3BfcG1fa2VybmVsO1xcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuIC8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4ge1xcbi1cXHRpZiAoLS1tc2stXFx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFxcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgPT0gMCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIC0tbXNrLVxcdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxcbiBcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlcG0uYWNjZXB0X3N1YmZsb3csIHRydWUpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFxuIFxcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XFxuIFxcdGlmIChsb2NhbF9pZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XFxuIFxcdFxcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0ICogVENQIG9wdGlvbiBzcGFjZS5cXG4gXFx0ICovXFxuIFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cXHUwMDNlbWQ1c2lnX2luZm8pKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChza19saXN0ZW5lciksIE1QVENQX01JQl9NRDVTSUdSRVNFVCk7XFxuIFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01NjMsNiArNTY1LDcgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdHU4IGhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFXTtcXG4gXFxuIFxcdFxcdGlmICghKG1wX29wdC5zdWJvcHRpb25zIFxcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XFxuK1xcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTik7XFxuIFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XFxuIFxcdFxcdFxcdGdvdG8gZG9fcmVzZXQ7XFxuIFxcdFxcdH1cXG5AQCAtODY1LDYgKzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xcbiBcXHRcXHRcXHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCFjdHgpXFxuK1xcdFxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XFxuK1xcdFxcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcXG4gXFx0XFx0XFx0XFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZGlzcG9zZV9jaGlsZDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0xNDE2LDYgKzE0MjUsNyBAQCBzdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaylcXG4gXFx0XFx0XFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XFxuK1xcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpO1xcbiBcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XFxuIFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX1JTVF9FTUlERExFQk9YIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfUlNUX0VNUFRDUDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcXG5pbmRleCBjYmU1NzNjNGFiM2FkLi5lYTRjYjZjMWJkNWUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXFxuQEAgLTEyNjQsNyArMTI2NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Ntc2dfdHlwZXMoaW50IGZkLCBjb25zdCBzdHJ1Y3QgY2ZnX2Ntc2dfdHlwZXMgKmNtc2cpXFxuIFxcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXFxuIHtcXG4tXFx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xcbitcXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICcsJyk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbiBcXG4gXFx0Y2ZnX2Ntc2dfdHlwZXMuY21zZ19lbmFibGVkID0gMTtcXG5AQCAtMTI5Miw3ICsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKVxcbiBcXG4gc3RhdGljIHZvaWQgcGFyc2Vfc2V0c29ja19vcHRpb25zKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4tXFx0Y2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAnLCcpO1xcbitcXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbiBcXG4gXFx0aWYgKG5leHQpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxcbmluZGV4IGQxNTg2NzhmYTZhYjAuLjdhMmE4NTFmYTBhZGIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxcbkBAIC0yMTIsOCArMjEyLDggQEAgaWYgJGNoZWNrc3VtOyB0aGVuXFxuIGZpXFxuIFxcbiBpZiAkY2FwdHVyZTsgdGhlblxcbi1cXHRybmRoPVxcXCIke25zMTo0fVxcXCJcXG4tXFx0bXB0Y3BfbGliX3ByX2luZm8gXFxcIlBhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS1cXFwiXFxuK1xcdGNhcHByZWZpeD1cXFwibXB0Y3BfY29ubmVjdC0ke25zMTo0fVxcXCJcXG4rXFx0bXB0Y3BfbGliX3ByX2luZm8gXFxcInBjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tXFxcIlxcbiBmaVxcbiBcXG4gc2V0X2V0aHRvb2xfZmxhZ3MoKSB7XFxuQEAgLTM3Miw4ICszNzIsOCBAQCBkb190cmFuc2ZlcigpXFxuIFxcdFxcdFxcdGNhcHVzZXI9XFxcIi1aICRTVURPX1VTRVJcXFwiXFxuIFxcdFxcdGZpXFxuIFxcbi1cXHRcXHRsb2NhbCBjYXBmaWxlPVxcXCIke3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVxcXCJcXG4tXFx0XFx0bG9jYWwgY2Fwb3B0PVxcXCItaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfVxcXCJcXG4rXFx0XFx0bG9jYWwgY2FwZmlsZT1cXFwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVxcXCJcXG4rXFx0XFx0bG9jYWwgY2Fwb3B0PVxcXCItaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cXFwiXFxuIFxcbiBcXHRcXHRpcCBuZXRucyBleGVjICR7bGlzdGVuZXJfbnN9IHRjcGR1bXAgJHtjYXBvcHR9IFxcXFxcXG4gXFx0XFx0XFx0LXcgXFxcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFxcXCIgXFx1MDAzZVxcdTAwM2UgXFxcIiR7Y2Fwb3V0fVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXFxuaW5kZXggNWUyMjJiYTk3N2U0ZS4uM2I4ZDJjOGE2MjE2MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbkBAIC0zNzcsNyArMzc3LDggQEAgc3RhdGljIHZvaWQgZ2V0X3N1YmZsb3dfaW5mbyhjaGFyICpzdWJmbG93X2FkZHJzKVxcbiBcXHRpbnQgcmV0O1xcbiBcXHRpbnQgZmQ7XFxuIFxcbi1cXHRyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgXFxcIiVbXjpdOiVkICVbXjpdOiVkXFxcIiwgc2FkZHIsIFxcdTAwMjZzcG9ydCwgZGFkZHIsIFxcdTAwMjZkcG9ydCk7XFxuK1xcdHJldCA9IHNzY2FuZihzdWJmbG93X2FkZHJzLCBcXFwiJTYzW146XTolZCAlNjNbXjpdOiVkXFxcIixcXG4rXFx0XFx0ICAgICBzYWRkciwgXFx1MDAyNnNwb3J0LCBkYWRkciwgXFx1MDAyNmRwb3J0KTtcXG4gXFx0aWYgKHJldCAhPSA0KVxcbiBcXHRcXHRkaWVfcGVycm9yKFxcXCJJUCBQT1JUIFBhaXJzIGhhcyBzdHlsZSBwcm9ibGVtcyFcXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG5pbmRleCA3ZGM5MWZhYzQ5MTdlLi4xOGNlNzEzNmEyYjBlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG5AQCAtNzUsNiArNzUsMTQgQEAgdW5zZXQgam9pbl9zeW5fdHhcXG4gdW5zZXQgam9pbl9jcmVhdGVfZXJyXFxuIHVuc2V0IGpvaW5fYmluZF9lcnJcXG4gdW5zZXQgam9pbl9jb25uZWN0X2Vyclxcbit1bnNldCBqb2luX3N5bmFja19ub19tcGpvaW5cXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXFxuK3Vuc2V0IGpvaW5fYWNrX25vX2N0eFxcbit1bnNldCBqb2luX25vdF9lc3RhYmxpc2hlZFxcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXFxuK1xcbit1bnNldCByc3RfbWQ1c2lnXFxuK3Vuc2V0IHJzdF9kc3NcXG4gXFxuIHVuc2V0IGZiX25zMVxcbiB1bnNldCBmYl9uczJcXG5AQCAtOTcxLDcgKzk3OSw3IEBAIGNvbmRfc3RhcnRfY2FwdHVyZSgpXFxuIFxcdFxcdGNhcGZpbGU9JChwcmludGYgXFxcIm1wX2pvaW4tJTAydS0lcy5wY2FwXFxcIiBcXFwiJE1QVENQX0xJQl9URVNUX0NPVU5URVJcXFwiIFxcXCIkbnNcXFwiKVxcbiBcXG4gXFx0XFx0ZWNobyBcXFwiQ2FwdHVyaW5nIHRyYWZmaWMgZm9yIHRlc3QgJE1QVENQX0xJQl9URVNUX0NPVU5URVIgaW50byAkY2FwZmlsZVxcXCJcXG4tXFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zXFxcIiB0Y3BkdW1wIC1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAkY2FwdXNlciAtdyBcXFwiJGNhcGZpbGVcXFwiIFxcdTAwM2UgXFxcIiRjYXBvdXRcXFwiIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbitcXHRcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIHRjcGR1bXAgLWkgYW55IC1zIDEyOCAtQiAzMjc2OCAkY2FwdXNlciAtdyBcXFwiJGNhcGZpbGVcXFwiIFxcdTAwM2UgXFxcIiRjYXBvdXRcXFwiIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbiBcXHRcXHRjYXBwaWQ9JCFcXG4gXFxuIFxcdFxcdHNsZWVwIDFcXG5AQCAtMTM1Myw2ICsxMzYxLDggQEAgY2hrX3JzdF9ucigpXFxuIFxcdGxvY2FsIHJzdF90eD0kMVxcbiBcXHRsb2NhbCByc3Rfcng9JDJcXG4gXFx0bG9jYWwgbnNfaW52ZXJ0PSR7MzotXFxcIlxcXCJ9XFxuK1xcdGxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9XFxuK1xcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XFxuIFxcdGxvY2FsIGNvdW50XFxuIFxcdGxvY2FsIG5zX3R4PSRuczFcXG4gXFx0bG9jYWwgbnNfcng9JG5zMlxcbkBAIC0xMzg5LDYgKzEzOTksMjEgQEAgY2hrX3JzdF9ucigpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJpbnRfb2tcXG4gXFx0ZmlcXG4rXFxuK1xcdCMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxcbitcXHQjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IE1ENVNpZ1Jlc2V0IGZpcmVzIG9uIHRoZSBsaXN0ZW5lclxcbitcXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cXG4rXFx0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFxcXCJNUFRjcEV4dE1ENVNpZ1Jlc2V0XFxcIilcXG4rXFx0aWYgWyAtbiBcXFwiJGNvdW50XFxcIiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjb3VudFxcXCIgIT0gXFxcIiRtZDVzaWdcXFwiIF07IHRoZW5cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcIk1ENVNpZ1Jlc2V0XFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZ1xcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcXFwiTVBUY3BFeHREc3NSZXNldFxcXCIpXFxuK1xcdGlmIFsgLW4gXFxcIiRjb3VudFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkY291bnRcXFwiICE9IFxcXCIkZHNzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHByaW50X2NoZWNrIFxcXCJEc3NSZXNldFxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3NcXFwiXFxuK1xcdGZpXFxuIH1cXG4gXFxuIGNoa19pbmZpX25yKClcXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcXG4gXFx0bG9jYWwgcnN0X25yPSR7am9pbl9yc3RfbnI6LTB9XFxuIFxcdGxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9XFxuIFxcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cXG4rXFx0bG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH1cXG4rXFx0bG9jYWwgYWNrX25vX21wam9pbj0ke2pvaW5fYWNrX25vX21wam9pbjotMH1cXG4rXFx0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cXG4rXFx0bG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9XFxuK1xcdGxvY2FsIG5vX2lkX2ZvdW5kPSR7am9pbl9ub19pZF9mb3VuZDotMH1cXG4gXFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XFxuIFxcdGxvY2FsIGNvdW50XFxuIFxcdGxvY2FsIHdpdGhfY29va2llXFxuQEAgLTE2NTUsNiArMTY4NSw0NCBAQCBjaGtfam9pbl9ucigpXFxuIFxcdFxcdGZhaWxfdGVzdCBcXFwiZ290ICRjb3VudCBKT0lOW3NdIHN5biByZWplY3RlZCBleHBlY3RlZCAkc3luX3JlalxcXCJcXG4gXFx0ZmlcXG4gXFxuK1xcdCMgUGVyLWV2ZW50IE1QVENQX1JTVF9FTVBUQ1AgSk9JTiBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxcbitcXHQjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IHRoZSAqU3luQWNrKiBvbmUgZmlyZXMgb24gdGhlXFxuK1xcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxcbitcXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXFxcIk1QVGNwRXh0TVBKb2luU3luQWNrTm9NUEpvaW5cXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJHN5bmFja19ub19tcGpvaW5cXFwiIF07IHRoZW5cXG4rXFx0XFx0cmM9JHtLU0ZUX0ZBSUx9XFxuK1xcdFxcdHByaW50X2NoZWNrIFxcXCJzeW5hY2sgbm8gbXBqb2luXFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgSk9JTltzXSBzeW5hY2sgbm8gbXBqb2luIGV4cGVjdGVkICRzeW5hY2tfbm9fbXBqb2luXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFxcXCJNUFRjcEV4dE1QSm9pbkFja05vTVBKb2luXFxcIilcXG4rXFx0aWYgWyAtbiBcXFwiJGNvdW50XFxcIiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjb3VudFxcXCIgIT0gXFxcIiRhY2tfbm9fbXBqb2luXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJjPSR7S1NGVF9GQUlMfVxcbitcXHRcXHRwcmludF9jaGVjayBcXFwiYWNrIG5vIG1wam9pblxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkYWNrX25vX21wam9pblxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcXFwiTVBUY3BFeHRNUEpvaW5BY2tOb0N0eFxcXCIpXFxuK1xcdGlmIFsgLW4gXFxcIiRjb3VudFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkY291bnRcXFwiICE9IFxcXCIkYWNrX25vX2N0eFxcXCIgXTsgdGhlblxcbitcXHRcXHRyYz0ke0tTRlRfRkFJTH1cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcImFjayBubyBjdHhcXFwiXFxuK1xcdFxcdGZhaWxfdGVzdCBcXFwiZ290ICRjb3VudCBKT0lOW3NdIGFjayBubyBjdHggZXhwZWN0ZWQgJGFja19ub19jdHhcXFwiXFxuK1xcdGZpXFxuK1xcbitcXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXFxcIk1QVGNwRXh0TVBKb2luTm90RXN0YWJsaXNoZWRcXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJG5vdF9lc3RhYmxpc2hlZFxcXCIgXTsgdGhlblxcbitcXHRcXHRyYz0ke0tTRlRfRkFJTH1cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcImpvaW4gbm90IGVzdGFibGlzaGVkXFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgSk9JTltzXSBub3QgZXN0YWJsaXNoZWQgZXhwZWN0ZWQgJG5vdF9lc3RhYmxpc2hlZFxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcXFwiTVBUY3BFeHRNUEpvaW5Ob0lkRm91bmRcXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJG5vX2lkX2ZvdW5kXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJjPSR7S1NGVF9GQUlMfVxcbitcXHRcXHRwcmludF9jaGVjayBcXFwiam9pbiBubyBpZCBmb3VuZFxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IEpPSU5bc10gbm8gaWQgZm91bmQgZXhwZWN0ZWQgJG5vX2lkX2ZvdW5kXFxcIlxcbitcXHRmaVxcbitcXG4gXFx0cHJpbnRfcmVzdWx0cyBcXFwiam9pbiBSeFxcXCIgJHtyY31cXG4gXFxuIFxcdGpvaW5fc3luX3R4PVxcXCIke2pvaW5fc3luX3R4Oi0ke3N5bl9ucn19XFxcIiBcXFxcXFxuQEAgLTIzNTksNiArMjQyNywzMSBAQCBzaWduYWxfYWRkcmVzc190ZXN0cygpXFxuIFxcdFxcdFxcdGNoa19hZGRfbnIgNCA0XFxuIFxcdFxcdGZpXFxuIFxcdGZpXFxuK1xcbitcXHQjIHNpZ25hbGxlZCBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGNsaWVudCwgd2hlcmUgYSBUQ1Atb25seVxcbitcXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxcbitcXHQjIHRvIHRoZSBsaXN0ZW5lciBhbmQgcmVjZWl2ZXMgYSBTWU4vQUNLIHdpdGhvdXQgTVBfSk9JTi5cXG4rXFx0IyBNUEpvaW5TeW5BY2tOb01QSm9pbiBpbmNyZW1lbnRzIG9uIHRoZSBjbGllbnQgc2lkZS5cXG4rXFx0aWYgcmVzZXQgXFxcInNpZ25hbCBhZGRyZXNzLCBUQ1Atb25seSBsaXN0ZW5lciBvbiBjbGllbnRcXFwiOyB0aGVuXFxuK1xcdFxcdGxvY2FsIGV4dHJhX2JpbmRcXG4rXFx0XFx0bG9jYWwgcG9ydFxcbitcXG4rXFx0XFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMVxcbitcXHRcXHRwbV9ubF9zZXRfbGltaXRzICRuczIgMSAxXFxuK1xcdFxcdHBtX25sX2FkZF9lbmRwb2ludCAkbnMxIDEwLjAuMi4yIGZsYWdzIHNpZ25hbFxcbitcXG4rXFx0XFx0cG9ydD0kKGdldF9wb3J0KVxcbitcXHRcXHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXFxcIiRwb3J0XFxcIiBcXFxcXFxuK1xcdFxcdFxcdC1zIFRDUCAxMC4wLjIuMiBcXHUwMDI2XFxuK1xcdFxcdGV4dHJhX2JpbmQ9JCFcXG4rXFx0XFx0bXB0Y3BfbGliX3dhaXRfbG9jYWxfcG9ydF9saXN0ZW4gXFxcIiRuczJcXFwiIFxcXCIkcG9ydFxcXCJcXG4rXFxuK1xcdFxcdHJ1bl90ZXN0cyAkbnMxICRuczIgMTAuMC4xLjFcXG4rXFx0XFx0am9pbl9zeW5hY2tfbm9fbXBqb2luPTEgam9pbl9zeW5fdHg9MSBcXFxcXFxuK1xcdFxcdFxcdGNoa19qb2luX25yIDAgMCAwXFxuK1xcbitcXHRcXHRraWxsICR7ZXh0cmFfYmluZH0gMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4gfVxcbiBcXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcXG5pbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoXFxuQEAgLTI0LDYgKzI0LDcgQEAgc21hbGw9XFxcIlxcXCJcXG4gc291dD1cXFwiXFxcIlxcbiBjb3V0PVxcXCJcXFwiXFxuIGNhcG91dD1cXFwiXFxcIlxcbitjYXBwcmVmaXg9XFxcIlxcXCJcXG4gc2l6ZT0wXFxuIFxcbiB1c2FnZSgpIHtcXG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxcbiBcXG4gXFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcXG4gXFxuK1xcdGlmICRjYXB0dXJlOyB0aGVuXFxuK1xcdFxcdGNhcHByZWZpeD1cXFwic2ltdWx0X2Zsb3dzLSR7bnMxOjR9XFxcIlxcbitcXHRcXHRtcHRjcF9saWJfcHJfaW5mbyBcXFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cXFwiXFxuK1xcdGZpXFxuK1xcbiBcXHRpcCBsaW5rIGFkZCBuczFldGgxIG5ldG5zIFxcXCIkbnMxXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDEgbmV0bnMgXFxcIiRuczJcXFwiXFxuIFxcdGlwIGxpbmsgYWRkIG5zMWV0aDIgbmV0bnMgXFxcIiRuczFcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcXFwiJG5zMlxcXCJcXG4gXFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcXFwiJG5zMlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczNldGgxIG5ldG5zIFxcXCIkbnMzXFxcIlxcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXFxuIFxcbiBcXHRpZiAkY2FwdHVyZTsgdGhlblxcbiBcXHRcXHRsb2NhbCBjYXB1c2VyXFxuLVxcdFxcdGxvY2FsIHJuZGg9XFxcIiR7bnMxOjR9XFxcIlxcbiBcXHRcXHRpZiBbIC16ICRTVURPX1VTRVIgXSA7IHRoZW5cXG4gXFx0XFx0XFx0Y2FwdXNlcj1cXFwiXFxcIlxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNhcHVzZXI9XFxcIi1aICRTVURPX1VTRVJcXFwiXFxuIFxcdFxcdGZpXFxuIFxcbi1cXHRcXHRsb2NhbCBjYXBmaWxlPVxcXCIke3JuZGh9LSR7cG9ydH1cXFwiXFxuLVxcdFxcdGxvY2FsIGNhcG9wdD1cXFwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cXFwiXFxuK1xcdFxcdGxvY2FsIGNhcGZpbGU9XFxcIiR7Y2FwcHJlZml4fS0ke3BvcnR9XFxcIlxcbitcXHRcXHRsb2NhbCBjYXBvcHQ9XFxcIi1pIGFueSAtcyAxMDggLUIgMzI3NjggJHtjYXB1c2VyfVxcXCJcXG4gXFxuIFxcdFxcdGlwIG5ldG5zIGV4ZWMgJHtuczN9ICB0Y3BkdW1wICR7Y2Fwb3B0fSAtdyBcXFwiJHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwXFxcIiAgXFx1MDAzZVxcdTAwM2UgXFxcIiR7Y2Fwb3V0fVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuIFxcdFxcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjoxOS4zMDY2NDYxMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzIyMTc3MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRcIixcbiAgICBcIm1wdGNwX2luaXRfc29ja1wiLFxuICAgIFwiX19tcHRjcF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9maW5pc2hfam9pblwiLFxuICAgIFwiX19tcHRjcF9zdWJmbG93X2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBJdCBhZGRzIGBXQVJOX09OX09OQ0VgIGNoZWNrcyBmb3Igc3ViZmxvdyBhY2NvdW50aW5nIGluIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIGFuZCBgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB0byBjYXRjaCB1bmRlcmZsb3dzLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIFJUTyBib3VuZHMgc2VlZGluZyB0byB1c2Ugc3lzY3RsIHZhbHVlcyBpbnN0ZWFkIG9mIGhhcmRjb2RlZCBjb25zdGFudHMsIGFmZmVjdGluZyB0aW1lb3V0IGNhbGN1bGF0aW9ucyBpbiBgX19tcHRjcF9pbml0X3NvY2tgLCBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAsIGFuZCBgX19tcHRjcF9zZXRfdGltZW91dGAuIEFkZGl0aW9uYWxseSwgaXQgcmVuYW1lcyBhbmQgcmVzdHJpY3RzIHRoZSBzY29wZSBvZiBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgTVBUQ1AgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFuZCB0aW1lb3V0IGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIGFuZCB0aW1lb3V0cyBiZWhhdmUgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCArMTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7XG4gXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xuIHN0cnVjdCBtcHRjcF9leHQge1xuLVx0dW5pb24ge1xuLVx0XHR1NjRcdGRhdGFfYWNrO1xuLVx0XHR1MzJcdGRhdGFfYWNrMzI7XG4tXHR9O1xuIFx0dTY0XHRcdGRhdGFfc2VxO1xuIFx0dTMyXHRcdHN1YmZsb3dfc2VxO1xuIFx0dTE2XHRcdGRhdGFfbGVuO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0VFBfQVJHUyhtcGV4dCksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuLVx0XHRfX2ZpZWxkKHU2NCwgZGF0YV9hY2spXG4gXHRcdF9fZmllbGQodTY0LCBkYXRhX3NlcSlcbiBcdFx0X19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKVxuIFx0XHRfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCArMTEwLDggQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWluZmluaXRlX21hcCA9IG1wZXh0LVx1MDAzZWluZmluaXRlX21hcDtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJkYXRhX2Fjaz0lbGx1IGRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbitcdFRQX3ByaW50ayhcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4rXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxLCBfX2VudHJ5LVx1MDAzZWRhdGFfbGVuLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlY3N1bSwgX19lbnRyeS1cdTAwM2V1c2VfbWFwLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlZHNuNjQsIF9fZW50cnktXHUwMDNlZGF0YV9maW4sXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC0yMSwxNCArMjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEZhbGxiYWNrVG9rZW5Jbml0XCIsIE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBUQ1BSZXRyYW5zXCIsIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9Ub2tlbkZvdW5kXCIsIE1QVENQX01JQl9KT0lOTk9UT0tFTiksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9JZEZvdW5kXCIsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blJ4XCIsIE1QVENQX01JQl9KT0lOU1lOUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkJhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja1J4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0JhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja1J4XCIsIE1QVENQX01JQl9KT0lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pLFxuK1x0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja05vQ3R4XCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luUmVqZWN0ZWRcIiwgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm90RXN0YWJsaXNoZWRcIiwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcIiwgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blR4QmluZEVyclwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIkJsYWNraG9sZVwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUENhcGFibGVEYXRhRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTUQ1U2lnRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNRDVTaWdSZXNldFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxuIFx0U05NUF9NSUJfSVRFTShcIkRzc0ZhbGxiYWNrXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4rXHRTTk1QX01JQl9JVEVNKFwiRHNzUmVzZXRcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgKzE2LDE5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCxcdC8qIENvdWxkIG5vdCBpbml0L2FsbG9jYXRlIHRva2VuICovXG4gXHRNUFRDUF9NSUJfUkVUUkFOU1NFR1MsXHRcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXG4gXHRNUFRDUF9NSUJfSk9JTk5PVE9LRU4sXHRcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovXG4rXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFx0LyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOLFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYW4gQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXHRcdC8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyArIE1QX0pPSU4gKi9cbitcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIEFDSyAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLFx0LyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovXG4gXHRNUFRDUF9NSUJfSk9JTlJFSkVDVEVELFx0XHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcdC8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcdC8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG5AQCAtODQsNyArODksOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRcdFx0XHRcdCAqIGVzdGFibGlzaGVkIHBhY2tldFxuIFx0XHRcdFx0XHQgKi9cbiBcdE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyxcdC8qIENvbmZsaWN0aW5nIFRDUCBvcHRpb24gZW5hYmxlZCAqL1xuK1x0TVBUQ1BfTUlCX01ENVNJR1JFU0VULFx0XHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXG4gXHRNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssXHRcdC8qIEJhZCBvciBtaXNzaW5nIERTUyAqL1xuK1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXG5pbmRleCBkMWY3M2MzZTM5ZmEzLi44YjY4ODY4MjU1YzUwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcbisrKyBiL25ldC9tcHRjcC9wbS5jXG5AQCAtNjcwLDcgKzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHtcbiBcdFx0aWYgKHVwZGF0ZV9zdWJmbG93cykge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRwbS1cdTAwM2VleHRyYV9zdWJmbG93cy0tO1xuK1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuK1x0XHRcdFx0cG0tXHUwMDNlZXh0cmFfc3ViZmxvd3MtLTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC0yODEsOCArMjgxLDkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xuIFx0aW50IGFubm9fbnIgPSAwO1xuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuK1x0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuIFxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlYzg3NGQyZWFkNmE0Li5iNDc0ZDAzNjIwYTc1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtNTgxLDE3ICs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxuIHN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbitcdHUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWF4KTtcbiBcdHUzMiByZXRyYW5zbWl0cztcbiBcbitcdC8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiBcdTAwM2UgcnRvX21heCBpc1xuK1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4rXHQgKi9cbiBcdHJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0ICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTtcbitcdFx0XHQgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTtcbiBcbi1cdG1wdGNwX3NrKHNrKS1cdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXHUwMDNjXHUwMDNjIHJldHJhbnNtaXRzO1xuK1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4rXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDpcbitcdFx0XHRcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19ydG9fbWluKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbkBAIC0zMTYxLDcgKzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlam9pbl9saXN0KTtcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuK1xuK1x0LyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovXG4rXHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4rXHRcdHVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21pbl91cykpO1xuK1x0aWNzay1cdTAwM2VpY3NrX3J0b19tYXggPVxuK1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbitcdG1zay1cdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cdTAwM2VpY3NrX3J0b19taW47XG4gXHRtc2stXHUwMDNlc2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87XG4gXHRtc2stXHUwMDNlYmFja2xvZ19sZW4gPSAwO1xuIFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XG5AQCAtMzk4OCw2ICs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKVxuIFxuIFx0LyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi9cbiBcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCArMTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcbiBcdFx0XHQgICBib29sIGVjaG8pO1xuIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7XG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTtcbiBcbiAvKiB0aGUgZGVmYXVsdCBwYXRoIG1hbmFnZXIsIHVzZWQgaW4gbXB0Y3BfcG1fdW5yZWdpc3RlciAqL1xuIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDtcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0aWYgKC0tbXNrLVx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFx1MDAzYyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSlcbitcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAtLW1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXBtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XG4gXHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbitcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdCAqIFRDUCBvcHRpb24gc3BhY2UuXG4gXHQgKi9cbiBcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cdTAwM2VtZDVzaWdfaW5mbykpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTtcbiBcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2Myw2ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XG4gXHRcdFx0Z290byBkb19yZXNldDtcbiBcdFx0fVxuQEAgLTg2NSw2ICs4NjgsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFjdHggfHwgZmFsbGJhY2spIHtcbiBcdFx0XHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcbitcdFx0XHRcdGlmICghY3R4KVxuK1x0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuK1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTtcbitcdFx0XHRcdGVsc2VcbitcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbitcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0XHRcdGdvdG8gZGlzcG9zZV9jaGlsZDtcbiBcdFx0XHR9XG5AQCAtMTQxNiw2ICsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XG4gXHRcdFx0XHRcdFx0TVBUQ1BfUlNUX0VNSURETEVCT1ggOlxuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTVBUQ1A7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5AQCAtMTI2NCw3ICsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZylcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXG4ge1xuLVx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuK1x0Y29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRjZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxO1xuQEAgLTEyOTIsNyArMTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4rXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbiBcbiBcdGlmIChuZXh0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuQEAgLTIxMiw4ICsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW5cbiBmaVxuIFxuIGlmICRjYXB0dXJlOyB0aGVuXG4tXHRybmRoPVwiJHtuczE6NH1cIlxuLVx0bXB0Y3BfbGliX3ByX2luZm8gXCJQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tXCJcbitcdGNhcHByZWZpeD1cIm1wdGNwX2Nvbm5lY3QtJHtuczE6NH1cIlxuK1x0bXB0Y3BfbGliX3ByX2luZm8gXCJwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LVwiXG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCArMzcyLDggQEAgZG9fdHJhbnNmZXIoKVxuIFx0XHRcdGNhcHVzZXI9XCItWiAkU1VET19VU0VSXCJcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cIiR7cm5kaH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwiXG4rXHRcdGxvY2FsIGNhcG9wdD1cIi1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwiXG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXFxcbiBcdFx0XHQtdyBcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFwiIFx1MDAzZVx1MDAzZSBcIiR7Y2Fwb3V0fVwiIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJVteOl06JWQgJVteOl06JWRcIiwgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuK1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJTYzW146XTolZCAlNjNbXjpdOiVkXCIsXG4rXHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwiSVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbkBAIC03NSw2ICs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4rdW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fY3R4XG4rdW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWRcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXG4rXG4rdW5zZXQgcnN0X21kNXNpZ1xuK3Vuc2V0IHJzdF9kc3NcbiBcbiB1bnNldCBmYl9uczFcbiB1bnNldCBmYl9uczJcbkBAIC05NzEsNyArOTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcIm1wX2pvaW4tJTAydS0lcy5wY2FwXCIgXCIkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwiIFwiJG5zXCIpXG4gXG4gXHRcdGVjaG8gXCJDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlXCJcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13IFwiJGNhcGZpbGVcIiBcdTAwM2UgXCIkY2Fwb3V0XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgXCIkY2FwZmlsZVwiIFx1MDAzZSBcIiRjYXBvdXRcIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgKzEzNjEsOCBAQCBjaGtfcnN0X25yKClcbiBcdGxvY2FsIHJzdF90eD0kMVxuIFx0bG9jYWwgcnN0X3J4PSQyXG4gXHRsb2NhbCBuc19pbnZlcnQ9JHszOi1cIlwifVxuK1x0bG9jYWwgbWQ1c2lnPSR7cnN0X21kNXNpZzotMH1cbitcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgbnNfdHg9JG5zMVxuIFx0bG9jYWwgbnNfcng9JG5zMlxuQEAgLTEzODksNiArMTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4rXG4rXHQjIE1QVENQX1JTVF9FTVBUQ1AgcmVzZXQtZXZlbnQgY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4rXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TUQ1U2lnUmVzZXRcIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkbWQ1c2lnXCIgXTsgdGhlblxuK1x0XHRwcmludF9jaGVjayBcIk1ENVNpZ1Jlc2V0XCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXCJNUFRjcEV4dERzc1Jlc2V0XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGRzc1wiIF07IHRoZW5cbitcdFx0cHJpbnRfY2hlY2sgXCJEc3NSZXNldFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzc1wiXG4rXHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcbiBcdGxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfVxuIFx0bG9jYWwgaW5maV9ucj0ke2pvaW5faW5maV9ucjotMH1cbiBcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cbitcdGxvY2FsIHN5bmFja19ub19tcGpvaW49JHtqb2luX3N5bmFja19ub19tcGpvaW46LTB9XG4rXHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuK1x0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cbitcdGxvY2FsIG5vdF9lc3RhYmxpc2hlZD0ke2pvaW5fbm90X2VzdGFibGlzaGVkOi0wfVxuK1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgKzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKVxuIFx0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqXCJcbiBcdGZpXG4gXG4rXHQjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogdGhlICpTeW5BY2sqIG9uZSBmaXJlcyBvbiB0aGVcbitcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9IFwiTVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pblwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRzeW5hY2tfbm9fbXBqb2luXCIgXTsgdGhlblxuK1x0XHRyYz0ke0tTRlRfRkFJTH1cbitcdFx0cHJpbnRfY2hlY2sgXCJzeW5hY2sgbm8gbXBqb2luXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW5cIlxuK1x0ZmlcbitcbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkYWNrX25vX21wam9pblwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiYWNrIG5vIG1wam9pblwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbkFja05vQ3R4XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGFja19ub19jdHhcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImFjayBubyBjdHhcIlxuK1x0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwiXG4rXHRmaVxuK1xuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwiTVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub3RfZXN0YWJsaXNoZWRcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImpvaW4gbm90IGVzdGFibGlzaGVkXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub19pZF9mb3VuZFwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiam9pbiBubyBpZCBmb3VuZFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmRcIlxuK1x0ZmlcbitcbiBcdHByaW50X3Jlc3VsdHMgXCJqb2luIFJ4XCIgJHtyY31cbiBcbiBcdGpvaW5fc3luX3R4PVwiJHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fVwiIFxcXG5AQCAtMjM1OSw2ICsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKClcbiBcdFx0XHRjaGtfYWRkX25yIDQgNFxuIFx0XHRmaVxuIFx0ZmlcbitcbitcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4rXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxuK1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4rXHQjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLlxuK1x0aWYgcmVzZXQgXCJzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCI7IHRoZW5cbitcdFx0bG9jYWwgZXh0cmFfYmluZFxuK1x0XHRsb2NhbCBwb3J0XG4rXG4rXHRcdHBtX25sX3NldF9saW1pdHMgJG5zMSAwIDFcbitcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuK1x0XHRwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWxcbitcbitcdFx0cG9ydD0kKGdldF9wb3J0KVxuK1x0XHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXCIkcG9ydFwiIFxcXG4rXHRcdFx0LXMgVENQIDEwLjAuMi4yIFx1MDAyNlxuK1x0XHRleHRyYV9iaW5kPSQhXG4rXHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwiJG5zMlwiIFwiJHBvcnRcIlxuK1xuK1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4rXHRcdGpvaW5fc3luYWNrX25vX21wam9pbj0xIGpvaW5fc3luX3R4PTEgXFxcbitcdFx0XHRjaGtfam9pbl9uciAwIDAgMFxuK1xuK1x0XHRraWxsICR7ZXh0cmFfYmluZH0gMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbiB9XG4gXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbkBAIC0yNCw2ICsyNCw3IEBAIHNtYWxsPVwiXCJcbiBzb3V0PVwiXCJcbiBjb3V0PVwiXCJcbiBjYXBvdXQ9XCJcIlxuK2NhcHByZWZpeD1cIlwiXG4gc2l6ZT0wXG4gXG4gdXNhZ2UoKSB7XG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbitcdGlmICRjYXB0dXJlOyB0aGVuXG4rXHRcdGNhcHByZWZpeD1cInNpbXVsdF9mbG93cy0ke25zMTo0fVwiXG4rXHRcdG1wdGNwX2xpYl9wcl9pbmZvIFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cIlxuK1x0ZmlcbitcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCIkbnMxXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zIFwiJG5zMlwiXG4gXHRpcCBsaW5rIGFkZCBuczFldGgyIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcIiRuczJcIlxuIFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcIiRuczJcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgXCIkbnMzXCJcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXG4gXG4gXHRpZiAkY2FwdHVyZTsgdGhlblxuIFx0XHRsb2NhbCBjYXB1c2VyXG4tXHRcdGxvY2FsIHJuZGg9XCIke25zMTo0fVwiXG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCJcIlxuIFx0XHRlbHNlXG4gXHRcdFx0Y2FwdXNlcj1cIi1aICRTVURPX1VTRVJcIlxuIFx0XHRmaVxuIFxuLVx0XHRsb2NhbCBjYXBmaWxlPVwiJHtybmRofS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7cG9ydH1cIlxuK1x0XHRsb2NhbCBjYXBvcHQ9XCItaSBhbnkgLXMgMTA4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgXCIke2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcIiAgXHUwMDNlXHUwMDNlIFwiJHtjYXBvdXR9XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MTkuMzA2NjQ4ODI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3ODAxMTg2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmFpciBiaXQgb2YgdGhlIE1QVENQIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFjcm9zcyBzZXZlcmFsIGtleSBhcmVhczogdGhlIGhlYWRlcnMsIE1JQiAoTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBCYXNlKSBpbnRlcmFjdGlvbnMsIHBhdGggbWFuYWdlbWVudCwgYW5kIHRoZSBjb3JlIHByb3RvY29sIGxvZ2ljLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgbWl4IG9mIGNsZWFudXAsIG9ic2VydmFiaWxpdHkgaW1wcm92ZW1lbnRzLCBhbmQgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50cyB0byB0aGUgVENQL01QVENQIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHJlbW92YWwgb2YgYGRhdGFfYWNrYCBhbmQgYGRhdGFfYWNrMzJgIGZyb20gYG1wdGNwX2V4dGAgYW5kIGl0cyB0cmFjZXBvaW50LiBUaGlzIGlzIGxpa2VseSBhIHNpbXBsaWZpY2F0aW9uIG9yIHJlZmFjdG9yaW5nLCBhc3N1bWluZyB0aG9zZSBmaWVsZHMgd2VyZSBlaXRoZXIgcmVkdW5kYW50IG9yIG5vIGxvbmdlciByZWxldmFudC4gVGhlc2UgYXJlIGNvc21ldGljLCB1bmxpa2VseSB0byBiZSBpbXBhY3RmdWwuXG5cblRoZSBhZGRpdGlvbiBvZiBuZXcgU05NUCBNSUIgY291bnRlcnMgaXMgcHJpbWFyaWx5IGFib3V0IHByb3ZpZGluZyBiZXR0ZXIgdmlzaWJpbGl0eSBpbnRvIE1QVENQJ3MgaW50ZXJuYWwgc3RhdGUuIFRoaXMgaXMgZ29vZCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgdGhlIGFkZGl0aW9uIGl0c2VsZiB3b24ndCBiZSBzb21ldGhpbmcgdG8gZnV6eiBkaXJlY3RseS4gVGhpcyBpcyBnb29kIHN0dWZmLlxuXG5Ob3csIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgaXMgdGhlIGNvZGUgaW4gYG5ldC9tcHRjcC9wbS5jYCB3aXRoIHRoZSBhZGRlZCBgV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApYCBjaGVjayBiZWZvcmUgZGVjcmVtZW50aW5nLiBUaGlzIGlzIGEgcG90ZW50aWFsIGJ1ZyB0cmFwLiBUaGlzIGlzIHNjcmVhbWluZyBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiBpbmRpY2F0ZSBhIHByb2JsZW0gaW4gaG93IHRoZSBrZXJuZWwgaXMgdHJhY2tpbmcgc3ViZmxvd3MuIERlZmluaXRlbHkgYSBoaWdoIHByaW9yaXR5IGFyZWEuXG5cblRoZSByZW5hbWUgb2YgYG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCBhbmQgbWFraW5nIGl0IGBzdGF0aWNgIGluIGBwbV91c2Vyc3BhY2UuY2AgaXMganVzdCBjb2RlIGh5Z2llbmUuXG5cblRoZSBjaGFuZ2VzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgYXJlIHdoYXQgSSdtIHJlYWxseSBmb2N1c2luZyBvbi4gVGhlIHNoaWZ0IHRvIHVzaW5nIGBpY3NrLVx1MDAzZWljc2tfcnRvX21pbmAgYW5kIGBpY3NrLVx1MDAzZWljc2tfcnRvX21heGAgKGJhc2VkIG9uIHN5c3RlbSB0dW5pbmcgd2l0aCBgc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYHN5c2N0bF90Y3BfcnRvX21heF9tc2ApIGluc3RlYWQgb2YgaGFyZGNvZGVkIFRDUCBSVE8gdmFsdWVzIGluIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCdzIGVzc2VudGlhbGx5IGFsbG93aW5nIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byAqdHVuZSogdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHRocm91Z2ggdGhlIHN5c3RlbSB3aWRlIG5ldHdvcmsgcGFyYW1ldGVycy4gVGhpcyBjaGFuZ2VzIHRoZSB0aW1pbmcgb2YgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCB3aGljaCBjYW4gYmUgZ29vZCBvciBiYWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgbmV0d29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdHJ5IGFuZCBnZW5lcmF0ZSB0aW1pbmcgcmVsYXRlZCBpc3N1ZXMuIFRoZXNlIFJUTyBjaGFuZ2VzIHdpbGwgbGlrZWx5IGFmZmVjdCBvdmVyYWxsIGNvbm5lY3Rpb24gcGVyZm9ybWFuY2UgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMsIHNvIHRoaXMgYmVhcnMgY2xvc2VyIHNjcnV0aW55LlxuXG5UaGUgaW5jcmVtZW50IG9mIGBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRURgIGluIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgZm9yIG1vbml0b3JpbmcgcHVycG9zZXMgYW5kIGxpa2VseSB3b24ndCBhZmZlY3QgdXMuXG5cbkluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIHRoZSBgV0FSTl9PTl9PTkNFYCBjaGVjayBpcyByZXBlYXRlZCwgYW5kIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgaGFzIGdvbmUgYXdheS5cblxuVGhlIGluY3JlbWVudGluZyBvZiB2YXJpb3VzIE1JQiBjb3VudGVycyBpbiBgc3ViZmxvdy5jYCBiYXNlZCBvbiBkaWZmZXJlbnQgY29ubmVjdGlvbiBzdGF0ZXMgKGUuZy4sIGBNUEpPSU5OT0lERk9VTkRgLCBgTUQ1U0lHUkVTRVRgLCBldGMuKSBpcyBwdXJlbHkgZm9yIFNOTVAvTUlCIHJlcG9ydGluZyBhbmQgbW9uaXRvcmluZyBhbmQgaXMgbm90IGEgcHJpb3JpdHkgZm9yIGZ1enppbmcuXG5cbk15IHByaW9yaXRpZXMgZm9yIGZ1enppbmc6XG5cbjEuICAqKlRyaWdnZXJpbmcgdGhlIGBXQVJOX09OX09OQ0VgKio6IEkgd2FudCB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzYCBnbyB0byB6ZXJvIHVuZXhwZWN0ZWRseSBiZWZvcmUgdGhlIGRlY3JlbWVudCBoYXBwZW5zLiBUaGlzIGxpa2VseSBtZWFucyBjb3JydXB0aW5nIHRoZSBzdWJmbG93IGFjY291bnRpbmcgb3IgY2F1c2luZyB0aGUgcmVtb3ZhbCBvZiBhbiBleHRyYSBzdWJmbG93LiBUaGUgZnVuY3Rpb25zIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaW5jbHVkZSBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCwgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgYW5kIGl0cyBjYWxsZXJzIChgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AsIGBtcHRjcF9wbV9ubF9ybV9zdWJmbG93X3JlY2VpdmVkYCwgZXRjLikgc2luY2UgdGhleSBhcmUgcmVsYXRlZCB0byBzdWJmbG93IG1hbmFnZW1lbnQuXG4yLiAgKipFeHBsb3JpbmcgdGhlIFJUTyBCb3VuZHMgQ2hhbmdlKio6IEkgbmVlZCB0byB0ZXN0IGhvdyB0aGUgbmV3IFJUTyBjYWxjdWxhdGlvbnMgaW1wYWN0IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy4gSSB3aWxsIGZvY3VzIG9uIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgLlxuXG5JJ2xsIGJlIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgaW50byB0aGUgY2FsbHMgaW4gYG5ldC9tcHRjcC9wbS5jYCBhbmQgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGFjY291bnRpbmcgZm9yIHN1YmZsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjozNC4wODY3NzA5OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9NjYyPXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02ODQtXFx0aWYgKHVwZGF0ZV9zdWJmbG93cylcXG5uZXQvbXB0Y3AvcG0uYzo2ODU6XFx0XFx0X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3BtLmMtNjg2LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTI1MD11OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjUyLS8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI1MzpzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1NC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjYzOlxcdF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhtc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjM0LjE0NDAzNjg0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTMxOTUxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIEZsb3cgTWFuYWdlbWVudCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZyB3aXRoaW4gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHNlZW0gbGlrZSBzdHJvbmcgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGxpa2VseSBoYW5kbGUgdGhlIHN1YmZsb3cgbWFuYWdlbWVudCwgd2hpY2ggaXMgb2Z0ZW4gYSBib3R0bGVuZWNrLiBIb3dldmVyLCBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aG9zZSwgSSBzaG91bGQgYWxzbyB2ZXJpZnkgdGhlIHJvbGUgb2YgdGltZW91dCBtZWNoYW5pc21zLiBJIHdpbGwgY2hlY2sgYm90aCBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byBzZWUgaWYgdGhvc2Ugcm91dGluZXMgYXJlIHBhcnQgb2YgdGhlIGJvdHRsZW5lY2suIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRpbWVvdXRzIGFyZSBjb250cmlidXRpbmcgdG8gYSBuZWdhdGl2ZSBzdWJmbG93IGV4cGVyaWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MzguMzM3MjMzODI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDI0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz01NjE9c3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgwLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjU4MTpzdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01ODIte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjkyMD1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMS1cXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzAwMjpcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDAzLVxcdFxcdFxcdG1wdGNwX3NlbmRfYWNrKG1zayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjM4LjQxNDI2ODA2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjU0NjAzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1QVENQIFJldHJhbnNtaXNzaW9uIFRpbWVvdXRzKipcblxuT2theSwgc28gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBoYW5kbGluZyByZXRyYW5zbWlzc2lvbnMgaW4gTVBUQ1AsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgX19tcHRjcF9zZXRfdGltZW91dGAsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRpbWVvdXQgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHRpbWVvdXQgbWVjaGFuaXNtcyBhcmUgcmVhbGx5IHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHRpbWVvdXRzIGFyZSBzZXQgaXMga2V5IHRvIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYW5kIGRpYWdub3NpbmcgYW55IGNvbmdlc3Rpb24tcmVsYXRlZCBpc3N1ZXMuIEknbGwgZm9jdXMgb24gaG93IGBfX21wdGNwX3NldF90aW1lb3V0YCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IHRpbWVvdXQgdHlwZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NDEuOTc5NzMxMjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODMyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3Bfc2V0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz01ODE9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01OTYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NTk3OnN0YXRpYyB2b2lkIF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRvdXQpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNTk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTYxMT1zdGF0aWMgdm9pZCBtcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTctXFx0XFx0dG91dCA9IG1heCh0b3V0LCBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhzdWJmbG93KSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NjE4OlxcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTYxOS19XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTg3PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjI4LVxcdH1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjI5OlxcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjQyLjA0MzU2Nzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI3Mzg2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIFRpbWVvdXQgYW5kIFN1YmZsb3cgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRpbWVvdXQgbWVjaGFuaXNtcyBhbmQgc3ViZmxvdyBtYW5hZ2VtZW50IGFyZSBoYW5kbGVkIHdpdGhpbiBNUFRDUCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEl0IHNlZW1zIHRoYXQgYm90aCBgbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgdXRpbGl6ZSB0aGUgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGZ1bmN0aW9uLCB3aGljaCB3YXJyYW50cyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGNhbGxpbmcgcG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgbWlnaHQgYmUgYSBwcm9taXNpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZy4gSSdsbCBmb2N1cyBvbiB0aGF0IG9uZSBmb3Igbm93LlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gYXJlYXMsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBSaWdodCwgSSByZWNhbGwgaXQgd2FzIG9yaWdpbmFsbHkgbmFtZWQgYG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCwgYW5kIGl0IGhhcyBzaW5jZSBiZWVuIG1hZGUgc3RhdGljLiBUaGF0J3MgcmVsZXZhbnQuIEkgc2VlIHRoYXQgaXQncyBub3cgY2FsbGVkIGZyb20gYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgY2hhaW4gb2YgY2FsbHMsIGFzIEknbSB0aGlua2luZyBvZiBob3cgdGhlIGFkZHJlc3NlcyBhcmUgYmVpbmcgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NDYuMDQ2MzA5MDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE0NjUwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTI4ND1zdGF0aWMgdm9pZFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyODU6bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTI4Ni1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0zMDU9aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzQzLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozNDQ6XFx0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zNDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjQ2LjIzNzc3OTQ2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY4ODMxNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIFJlbW92YWwqKlxuXG5SaWdodCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzIG9mIE1QVENQLiBJJ3ZlIHNlZW4gdGhhdCBuYW1lIGNvbWUgdXAgaW4gdGhlIGtlcm5lbCBjb2RlIGJlZm9yZSwgYW5kIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgaGlnaGx5IGxpa2VseSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIE1QVENQIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5CZWZvcmUgSSBqdW1wIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBob3dldmVyLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIGZvciB0aGUgZXNzZW50aWFsIE1QVENQIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIG5lZWRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIG1vZHVsZXMgaW52b2x2ZWQgYW5kIHRoZSBkZXBlbmRhbmNpZXMgdGhleSBtYXkgaGF2ZS4gVGhhdCBtYXkgcXVpY2tseSBjbGFyaWZ5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGF0IHBsYXksIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIHRoYXQgSSBzaG91bGQgbG9vayBpbnRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjUwLjEwNjYxNDIzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MjY2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTAuMTg2MjQ3ODY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjMzMTc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgTVBUQ1BgIGFzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gcG9pbnQuIE5hdHVyYWxseSwgdGhlIGZpcnN0IHBsYWNlIEknbGwgaGVhZCBpcyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGtleSBtb2R1bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93ICpleGFjdGx5KiB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgTVBUQ1BgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSB0aG9zZSByZWxhdGlvbnNoaXBzIHByZXR0eSBjbGVhcmx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjo1My41NDk1Njc5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTMuNTQ5NjI0MDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjc5MzE2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1QVENQYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHBhdGNoIGRldGFpbHMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoaW5ncyBsaWtlIFJUTyBib3VuZHMgYW5kIGBXQVJOX09OX09OQ0VgIHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5JJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB0YXJnZXQ6IGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgLCBgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AsIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAsIGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZXhwb3Npbmcgc3VidGxlIGJ1Z3MuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBBaCwgeWVzLCBpdCdzIHJpZ2h0IGhlcmUgaW4gYHByb3RvY29sLmhgLiBUaGF0IG1lYW5zIEkgY2FuJ3QgZnV6eiBpdCBkaXJlY3RseSwgYXMgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IHN1YnN0aXR1dGUgaXRzIGZ1bmN0aW9uYWxpdHkgYXQgdGhlIGNhbGwgc2l0ZS4gTm90IGlkZWFsLCBidXQgSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0IGxpbWl0YXRpb24uXG5cbkFscmlnaHQsIGlmIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCBpcyBvZmYgdGhlIHRhYmxlLCB3aGF0IGFib3V0IGBtcHRjcF9wbV9ubF9ybV9zdWJmbG93X3JlY2VpdmVkYD8gVGhhdCBtaWdodCBiZSBhIG1vcmUgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjo1OC43MTc1NTkyMTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE1NTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9jbG9zZV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9NjYyPXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02ODQtXFx0aWYgKHVwZGF0ZV9zdWJmbG93cylcXG5uZXQvbXB0Y3AvcG0uYzo2ODU6XFx0XFx0X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3BtLmMtNjg2LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk5ND1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDUzLVxcdGlmICghcmV0KSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA1NDpcXHRcXHRtcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA1NS1lcnJfcHJvaGliaXRlZDpcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyNTA9dTggbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1Mi0vKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNTM6c3RhdGljIGlubGluZSB2b2lkIF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNTQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjYwOnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2MS17XFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI2MzpcXHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjY0LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjE4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjMtXFx0ICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzI0OlxcdG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjUtXFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTguODE3NzIwMDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDg3MTI5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRm9jdXNpbmcgSW4gb24gTVBUQ1AgU3ViZmxvdyBDb25uZWN0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgTVBUQ1AgY29ubmVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YCBmdW5jdGlvbnMuIFRoZXNlIHNlZW0gbGlrZSBjcml0aWNhbCBwb2ludHMgaW4gdGhlIHN1YmZsb3cgam9pbmluZyBwcm9jZXNzLCBhbmQgd2lsbCBhbGxvdyBtZSB0byBoYXZlIGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nLiBJJ2xsIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIHNpbmNlIGl0IGxvb2tzIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpcyBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBzZWxlY3RpbmcgYW5kIHZhbGlkYXRpbmcgdGhlIG5leHQgc3ViZmxvdy5cblxuSW4gYWRkaXRpb24sIHNpbmNlIEknbSBjb25jZXJuZWQgYWJvdXQgY29ubmVjdGlvbi9kaXNjb25uZWN0aW9uIGlzc3VlcywgSSBzaG91bGQgYWxzbyBjaGVjayBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3ViZmxvd3MgYXJlIHJlbW92ZWQgYXMgd2VsbCwgdG8gYmUgYWJsZSB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjExLjkwNDg1Mjg4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMTg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM9OTI9Y29uc3Qgc3RydWN0IGdlbmxfb3BzIG1wdGNwX3BtX25sX29wc1sxMV0gPSB7XFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTU4LVxcdFxcdC52YWxpZGF0ZVxcdD0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM6MTU5OlxcdFxcdC5kb2l0XFx0XFx0PSBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdCxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTYwLVxcdFxcdC5wb2xpY3lcXHRcXHQ9IG1wdGNwX3BtX3JlbW92ZV9ubF9wb2xpY3ksXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg9NTI9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUzOmludCBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNTQtaW50IG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yODU9bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzA0LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozMDU6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTMwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjExLjk2ODk3ODg4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA0NTMzNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgTmV0bGluayBDYWxsYmFjayBhbmQgU3ViZmxvdyBIYW5kbGluZyoqXG5cblJpZ2h0LCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBUaGF0J3MgYSBuZXRsaW5rIGBkb2l0YCBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciBhIFwicmVtb3ZlXCIgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCBkZWFscyB3aXRoIGRlbGV0aW5nIHNvbWV0aGluZy4gTmV0bGluayBjYWxsYmFja3MgYXJlIG9mdGVuIHdoZXJlIHlvdSBjYW4gc3RhcnQgZGlnZ2luZyB0byBmaW5kIGNvcmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0LCBpcyB0byBjaGVjayBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAuIFRoZSBnb2FsLCBpbiBjb250ZXh0LCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggcHJvY2Vzc2VzIGludGVyYWN0LiBTaW5jZSBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIGludm9sdmVkIGluIHJlbW92aW5nIHNvbWV0aGluZywgaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGF0IGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYCBtaWdodCBiZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzoxNy42NzM1MTYyMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzk1MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTY2PWJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1ODYtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTU4NzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1ODgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwNi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjA3OlxcdFxcdHRyYWNlX21wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3ViZmxvdyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwOC1cXHRcXHRzc2sgPSAgbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTg1Nz12b2lkIG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTg1OC1cXHRcXHRcXHRcXHQgYm9vbCBzY2hlZHVsZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjg1OTpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04NjAtc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuLS1cXG5uZXQvbXB0Y3Avc2NoZWQuYz0xOT1zdGF0aWMgaW50IG1wdGNwX3NjaGVkX2RlZmF1bHRfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jLTIyLVxcbm5ldC9tcHRjcC9zY2hlZC5jOjIzOlxcdHNzayA9IG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQobXNrKTtcXG5uZXQvbXB0Y3Avc2NoZWQuYy0yNC1cXHRpZiAoIXNzaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jPTE2OD1pbnQgbXB0Y3Bfc2NoZWRfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jLTE3My1cXG5uZXQvbXB0Y3Avc2NoZWQuYzoxNzQ6XFx0LyogdGhlIGZvbGxvd2luZyBjaGVjayBpcyBtb3ZlZCBvdXQgb2YgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZCAqL1xcbm5ldC9tcHRjcC9zY2hlZC5jLTE3NS1cXHRpZiAoX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjE3LjczODkxNTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ0NDQ1MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgU2NoZWR1bGluZyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gaG93IE1QVENQIHN1YmZsb3dzIGFyZSBtYW5hZ2VkIGZvciBzZW5kaW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1wdGNwX3NjaGVkX2RlZmF1bHRfZ2V0X3NlbmRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgZGVmYXVsdCBzY2hlZHVsZXIgbGlrZWx5IG5lZWRzIHRvIGdldCBhIHN1YmZsb3cgdG8gYWN0dWFsbHkgKmRvKiB0aGUgc2VuZGluZy4gVGhlbiwgbGV0IG1lIHRoaW5rIGEgbW9tZW50LCBgbXB0Y3Bfc2NoZWRfZ2V0X3NlbmRgIHNlZW1zIGxpa2UgYW5vdGhlciBsaWtlbHkgZnVuY3Rpb24gZm9yIG1lIHRvIGxvb2sgaW50bywgaWYgSSB3YW50IHRvIGRpdmUgZnVydGhlciBpbnRvIHRoZSBzY2hlZHVsaW5nIHByb2Nlc3MuXG5cbkJ1dCwgYmVmb3JlIEkgZ2V0IGxvc3QgaW4gdGhlIGJyb2FkZXIgc2NoZWR1bGluZyBsb2dpYywgYSBxdWljayBjaGVjayBvbiBgX19tcHRjcF9yZXRyYW5zYCBzZWVtcyBlc3NlbnRpYWwuIFJldHJhbnNtaXNzaW9ucyBjYW4gc2lnbmlmaWNhbnRseSBhZmZlY3Qgc3ViZmxvdyBzZWxlY3Rpb24gYW5kIHByaW9yaXRpemF0aW9uLiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LCBzbyB1bmRlcnN0YW5kaW5nIGhvdyByZXRyYW5zbWlzc2lvbnMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gc3ViZmxvdyBzZWxlY3Rpb24gaXMgbGlrZWx5IHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gYmUgc3VyZSBhbnkgYW5hbHlzaXMgY29uc2lkZXJzIHRoYXQuIEknbGwgbWFrZSBhIG5vdGUgdG8gY29tZSBiYWNrIHRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MjMuNDgzMzY0NTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIzMDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDcwPW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMDkxLVxcdFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXN0YWxlID0gMTtcXG5uZXQvbXB0Y3AvcG0uYzoxMDkyOlxcdFxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xcbm5ldC9tcHRjcC9wbS5jLTEwOTMtXFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKG5ldCwgTVBUQ1BfTUlCX1NVQkZMT1dTVEFMRSk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNTE5PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTUzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1NTQ6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTU1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2Mzg9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjg4OlxcdG5lZWRfcHVzaCA9IChmbGFncyBcXHUwMDI2IE1QVENQX0NGX1BVU0gpIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODktXFx0aWYgKCFkaXNwb3NlX2l0KSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODU4PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MTktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkyMDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MjEte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Ni1cXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDc6XFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxMTk9c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTYtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9XT1JLX1JUWCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxNTc6XFx0XFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTU4LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgwNz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MzktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQklUKE1QVENQX1JFVFJBTlNNSVQpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NDA6XFx0XFx0XFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODQxLVxcdFxcdGlmIChzcG9vbF9ibCBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXFx1MDAyNnNrYnMsIFxcdTAwMjZtb3ZlZCkpIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgxMz12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtODE1LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTY6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODE3LXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjIzLjU0NTYwMDIxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5Nzc3NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUmV0cmFuc21pc3Npb24gT3Bwb3J0dW5pdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgTVBUQ1AgY29kZSwgYF9fbXB0Y3BfcmV0cmFuc2AgaW1tZWRpYXRlbHkgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxpdmVzLCBzbyBpdCdzIHByb2JhYmx5IHdoZXJlIEknbGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBjb250ZXh0IGZvciB0aGlzLlxuXG5CdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGVyZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYF9fbXB0Y3BfaW5pdF9zb2NrYC4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIHNvY2tldCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBSZXRyYW5zbWlzc2lvbnMgYXJlIG9idmlvdXNseSBkZXBlbmRlbnQgb24gcHJvcGVyIHNvY2tldCBzZXR1cCwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQgbWlnaHQgYmUgdGhhdCB0aGUgcm9vdCBjYXVzZSBsaWVzIGluIGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuIEEgcXVpY2sgcmV2aWV3IGNhbiBzYXZlIG1lIGEgbG90IG9mIHRpbWUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MjcuNDg1MzgwNjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTIyNDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX2luaXRfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxMTk9c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE2ODpzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjI0PXN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyMjgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzIyOTpcXHRfX21wdGNwX2luaXRfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzIzMC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyNDUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI0NjpcXHQvKiBmZXRjaCB0aGUgY2EgbmFtZTsgZG8gaXQgb3V0c2lkZSBfX21wdGNwX2luaXRfc29jaygpLCBzbyB0aGF0IGNsb25lIHdpbGxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ3LVxcdCAqIHByb3BhZ2F0ZSB0aGUgY29ycmVjdCB2YWx1ZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzY5Nj1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzEzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MTQ6XFx0X19tcHRjcF9pbml0X3NvY2sobnNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzoyNy41NDY2MTEwMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDg4MTU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTVBUQ1AgU29ja2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE1QVENQIHNvY2tldHMgYXJlIGluaXRpYWxpemVkLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBib3RoIGBtcHRjcF9pbml0X3NvY2tgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdWx0aW1hdGVseSByZWx5IG9uIGEgY29tbW9uIGZ1bmN0aW9uOiBgX19tcHRjcF9pbml0X3NvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVkdWNlcyByZWR1bmRhbmN5IGFuZCBsaWtlbHkgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LiBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBzcGVjaWZpY2FsbHkgdGFnZ2VkIGFzIHRoZSBzb2NrZXQgaW5pdCBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdWJmbG93cyBhcmUgaGFuZGxlZC4gVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlzIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgLiBUaGlzIHNvdW5kcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggc3ViZmxvdyB0byB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MzEuMzYxNDk2MzE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMwNDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz02NDU9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02NjEtXFxubmV0L21wdGNwL3BtLmM6NjYyOnZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtNjYzLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjc0ND12b2lkIG1wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNzU4LVxcdCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3NTk6XFx0bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KG1wdGNwX3NrKHNrKSwgc3ViZmxvdyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjc2MC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMTU9Ym9vbCBtcHRjcF9wbV9ubF9jaGVja193b3JrX3BlbmRpbmcoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTExNjp2b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozMS40MzY4MDUxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4MjE0NjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNUFRDUCBDb2RlIFJlYWNoYWJpbGl0eSBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gYW5hbHl6ZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGNvcmUgTVBUQ1AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBnZXRzIGNhbGxlZCBmcm9tIGBtcHRjcF9jbG9zZV9zc2tgLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb2RlIGNvbm5lY3QuXG5cblRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YCwgYG1wdGNwX2ZpbmlzaF9qb2luYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfaW5pdF9zb2NrYC5cblxuTGV0J3Mgc2VlOiBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCBtYWtlcyBzZW5zZS4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBjbG9zaW5nIHN1YmZsb3dzLCB3aGljaCBpcyBpbXBvcnRhbnQuIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBqb2luIGlzIGNvbXBsZXRlZC4gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgb24gcmV0cmFuc21pc3Npb25zLCBhIGNydWNpYWwgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgd2hlbiB3ZSBjcmVhdGUgYW4gTVBUQ1Agc29ja2V0LlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBvYnZpb3VzbHksIGBNUFRDUGAgaXMgdGhlIGJpZyBvbmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIHRlc3QgdGhlc2UgZmVhdHVyZXMuIEFoLCByaWdodCwgYE1QVENQYCBkZXBlbmRzIG9uIGBJTkVUYCB3aGljaCBJIGtuZXcsIGFuZCBgTVBUQ1BfSVBWNmAgd291bGQgYmUgdXNlZnVsIGZvciBJUHY2IHRlc3RpbmcsIHNvIEknbGwgYmUgaW5jbHVkaW5nIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBgbmV0L21wdGNwL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBpZGVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozOC4wMTg5NTQ5MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozOC4wMTkwMzMyOTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzNzY4NDI0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXM6IEZ1bmN0aW9uYWwgQ2hhbmdlcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBtYWluIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkIGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAsIHNvIHRoYXQncyB0aGUgc2NvcGUgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc3RpY2sgb3V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIGBleHRyYV9zdWJmbG93c2AgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIHRoZSBzdGF0aWMgaW5saW5lIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB3aGljaCBpcyBjYWxsZWQgZnJvbSAgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGhhcmRlbiBzdWJmbG93IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBudW1iZXIgb2YgZXh0cmEgc3ViZmxvd3MgbWlnaHQgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgY3JpdGljYWwuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBjb25kaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgd2FybmluZ3MgZG9uJ3QgZmlyZSBzcHVyaW91c2x5IHVuZGVyIG5vcm1hbCBvciBldmVuIGFkdmVyc2FyaWFsIGNvbmRpdGlvbnMuXG5cblRoZW4sIHRoZXJlJ3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IFJUTyBib3VuZHMgYXJlIHNlZWRlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21wdGNwX2luaXRfc29ja2AsICBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgKHdoaWNoIGlzIGNhbGxlZCBieSBgX19tcHRjcF9yZXRyYW5zYCkgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byB1dGlsaXplIHN5c2N0bCB2YWx1ZXMgZm9yIGBpY3NrX3J0b19taW5gIGFuZCBgaWNza19ydG9fbWF4YCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgdmFsdWVzLiBUaGlzIGlzIGxpa2VseSBhaW1lZCBhdCBpbXByb3ZpbmcgYWRhcHRhYmlsaXR5IHRvIGRpZmZlcmVudCBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG92ZXJseSBhZ2dyZXNzaXZlIG9yIGNvbnNlcnZhdGl2ZSByZXRyYW5zbWlzc2lvbnMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcy4gV2UgbmVlZCB0byBmdXp6IHRpbWVvdXQgYmVoYXZpb3IgdG8gdmVyaWZ5IHRoZSBuZXcgc3lzY3RsIHZhbHVlcyBhcmUgYXBwcm9wcmlhdGVseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGFyZSBiZWhhdmluZyBjb3JyZWN0bHkgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucy5cblxuVGhlcmUncyBhbHNvIGEgcmVuYW1pbmcgYW5kIHNjb3BpbmcgY2hhbmdlOiBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCBpcyByZW5hbWVkIGFuZCBtYWRlIHN0YXRpYywgYW5kIGNhbiBub3cgYmUgcmVhY2hlZCB0aHJvdWdoIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAuIFRoaXMgaXMgbGVzcyBjcml0aWNhbCBidXQgc3RpbGwgbmVlZHMgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5CZXlvbmQgdGhlc2UgY29yZSBmdW5jdGlvbmFsIHNoaWZ0cywgdGhlcmUgYXJlIG5ldyBTTk1QIGNvdW50ZXJzIGluY3JlbWVudGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdGAsIGBzdWJmbG93X2NoZWNrX3JlcWAsIGBzdWJmbG93X2ZpbmlzaF9jb25uZWN0YCwgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AsIGFuZCBgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsYC4gV2hpbGUgdGhlc2UgY291bnRlcnMgdGhlbXNlbHZlcyBhcmVuJ3QgZnVuY3Rpb25hbCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UsIHRoZXkgZG8gaW5kaWNhdGUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBvbiB2YXJpb3VzIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBlZGdlIGNhc2VzLiBUaGUgcGF0aHMgYXJlIGFscmVhZHkgY292ZXJlZCBpbiBNUFRDUCBjb25uZWN0aW9uIGZ1enppbmcsIHNvIHdlIGNhbiBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgZmlyc3QuIFRoZSBuZXcgY291bnRlcnMgY291bGQgaW5mb3JtIGZ1dHVyZSBmdXp6aW5nIGNhbXBhaWducyB0YXJnZXRpbmcgc3BlY2lmaWMgZWRnZSBjYXNlcywgYnV0IGZvciBub3csIHRoZXkgYXJlIG1vc3RseSBpbmZvcm1hdGl2ZS5cblxuU28sIGluIHN1bW1hcnksIEknbSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nOlxuKiAgIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIGFuZCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgOiBCZWNhdXNlIHRoZXNlIHRyaWdnZXIgdGhlIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgaW4gc3ViZmxvdyBtYW5hZ2VtZW50LlxuKiAgIGBtcHRjcF9pbml0X3NvY2tgOiBBcyB0aGUgaW5pdGlhbCBSVE8gdmFsdWUgc2V0dGluZ3MgYXJlIG5vdyBhZmZlY3RlZC5cbiogICBgX19tcHRjcF9yZXRyYW5zYDogQXMgdGhlIFJUTyBzZXR0aW5ncyBhZmZlY3QgdGhlIGRhdGFmaW4gdGltZW91dCB3aGljaCBpcyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9ucy5cbiogICBgbXB0Y3BfZmluaXNoX2pvaW5gIGFuZCBgX19tcHRjcF9zdWJmbG93X2Nvbm5lY3RgOiBBcyB0aGVzZSBub3cgY2FsbCB0aGUgYFdBUk5fT05fT05DRWAtdHJpZ2dlcmluZyBmdW5jdGlvbi5cblxuSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgYXJlYXMgdG8gY29uZmlybSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIHNwdXJpb3VzbHkgYW5kIHRoYXQgdGhlIFJUTyBjaGFuZ2VzIGJlaGF2ZSBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgbmV0d29yayBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzLiBUaGVzZSBhcmUgdGhlIGtleSBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDA3LCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzo1Ni4zOTU4Nzg4MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1MzUzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0XCIsXG4gICAgXCJtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdFwiLFxuICAgIFwibXB0Y3BfaW5pdF9zb2NrXCIsXG4gICAgXCJfX21wdGNwX3JldHJhbnNcIixcbiAgICBcIm1wdGNwX2ZpbmlzaF9qb2luXCIsXG4gICAgXCJfX21wdGNwX3N1YmZsb3dfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgICBcIm1wdGNwX3BtX25sX3JlbW92ZV9kb2l0XCIsXG4gICAgXCJtcHRjcF9pbml0X3NvY2tcIixcbiAgICBcIl9fbXB0Y3BfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZmluaXNoX2pvaW5cIixcbiAgICBcIl9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6NTYuNTI4NDIwODA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MTc4NjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjU2LjUyODg5MzIwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODE5MTMwOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uOlxcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxcbjIuIEFkZGluZyBuZXcgU05NUCBNSUIgY291bnRlcnMgZm9yIHZhcmlvdXMgTVBUQ1AgZXZlbnRzIChlLmcuLCBNUF9KT0lOIGZhaWx1cmVzLCByZXNldHMpIGFuZCBpbmNyZW1lbnRpbmcgdGhlbSBpbiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgcGF0aHMuXFxuMy4gQWRkaW5nIHVuZGVyZmxvdyBjaGVja3MgKGBXQVJOX09OX09OQ0VgKSBmb3IgYHBtLVxcdTAwM2VleHRyYV9zdWJmbG93c2AuXFxuNC4gU2VlZGluZyBSVE8gYm91bmRzIChgaWNza19ydG9fbWluYCwgYGljc2tfcnRvX21heGApIGR1cmluZyBNUFRDUCBzb2NrZXQgaW5pdGlhbGl6YXRpb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCArMTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7XG4gXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xuIHN0cnVjdCBtcHRjcF9leHQge1xuLVx0dW5pb24ge1xuLVx0XHR1NjRcdGRhdGFfYWNrO1xuLVx0XHR1MzJcdGRhdGFfYWNrMzI7XG4tXHR9O1xuIFx0dTY0XHRcdGRhdGFfc2VxO1xuIFx0dTMyXHRcdHN1YmZsb3dfc2VxO1xuIFx0dTE2XHRcdGRhdGFfbGVuO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0VFBfQVJHUyhtcGV4dCksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuLVx0XHRfX2ZpZWxkKHU2NCwgZGF0YV9hY2spXG4gXHRcdF9fZmllbGQodTY0LCBkYXRhX3NlcSlcbiBcdFx0X19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKVxuIFx0XHRfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCArMTEwLDggQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWluZmluaXRlX21hcCA9IG1wZXh0LVx1MDAzZWluZmluaXRlX21hcDtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJkYXRhX2Fjaz0lbGx1IGRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbitcdFRQX3ByaW50ayhcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4rXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxLCBfX2VudHJ5LVx1MDAzZWRhdGFfbGVuLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlY3N1bSwgX19lbnRyeS1cdTAwM2V1c2VfbWFwLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlZHNuNjQsIF9fZW50cnktXHUwMDNlZGF0YV9maW4sXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC0yMSwxNCArMjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEZhbGxiYWNrVG9rZW5Jbml0XCIsIE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBUQ1BSZXRyYW5zXCIsIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9Ub2tlbkZvdW5kXCIsIE1QVENQX01JQl9KT0lOTk9UT0tFTiksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9JZEZvdW5kXCIsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blJ4XCIsIE1QVENQX01JQl9KT0lOU1lOUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkJhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja1J4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0JhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja1J4XCIsIE1QVENQX01JQl9KT0lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pLFxuK1x0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja05vQ3R4XCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luUmVqZWN0ZWRcIiwgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm90RXN0YWJsaXNoZWRcIiwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcIiwgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blR4QmluZEVyclwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIkJsYWNraG9sZVwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUENhcGFibGVEYXRhRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTUQ1U2lnRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNRDVTaWdSZXNldFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxuIFx0U05NUF9NSUJfSVRFTShcIkRzc0ZhbGxiYWNrXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4rXHRTTk1QX01JQl9JVEVNKFwiRHNzUmVzZXRcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgKzE2LDE5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCxcdC8qIENvdWxkIG5vdCBpbml0L2FsbG9jYXRlIHRva2VuICovXG4gXHRNUFRDUF9NSUJfUkVUUkFOU1NFR1MsXHRcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXG4gXHRNUFRDUF9NSUJfSk9JTk5PVE9LRU4sXHRcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovXG4rXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFx0LyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOLFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYW4gQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXHRcdC8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyArIE1QX0pPSU4gKi9cbitcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIEFDSyAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLFx0LyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovXG4gXHRNUFRDUF9NSUJfSk9JTlJFSkVDVEVELFx0XHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcdC8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcdC8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG5AQCAtODQsNyArODksOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRcdFx0XHRcdCAqIGVzdGFibGlzaGVkIHBhY2tldFxuIFx0XHRcdFx0XHQgKi9cbiBcdE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyxcdC8qIENvbmZsaWN0aW5nIFRDUCBvcHRpb24gZW5hYmxlZCAqL1xuK1x0TVBUQ1BfTUlCX01ENVNJR1JFU0VULFx0XHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXG4gXHRNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssXHRcdC8qIEJhZCBvciBtaXNzaW5nIERTUyAqL1xuK1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXG5pbmRleCBkMWY3M2MzZTM5ZmEzLi44YjY4ODY4MjU1YzUwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcbisrKyBiL25ldC9tcHRjcC9wbS5jXG5AQCAtNjcwLDcgKzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHtcbiBcdFx0aWYgKHVwZGF0ZV9zdWJmbG93cykge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRwbS1cdTAwM2VleHRyYV9zdWJmbG93cy0tO1xuK1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuK1x0XHRcdFx0cG0tXHUwMDNlZXh0cmFfc3ViZmxvd3MtLTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC0yODEsOCArMjgxLDkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xuIFx0aW50IGFubm9fbnIgPSAwO1xuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuK1x0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuIFxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlYzg3NGQyZWFkNmE0Li5iNDc0ZDAzNjIwYTc1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtNTgxLDE3ICs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxuIHN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbitcdHUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWF4KTtcbiBcdHUzMiByZXRyYW5zbWl0cztcbiBcbitcdC8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiBcdTAwM2UgcnRvX21heCBpc1xuK1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4rXHQgKi9cbiBcdHJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0ICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTtcbitcdFx0XHQgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTtcbiBcbi1cdG1wdGNwX3NrKHNrKS1cdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXHUwMDNjXHUwMDNjIHJldHJhbnNtaXRzO1xuK1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4rXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDpcbitcdFx0XHRcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19ydG9fbWluKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbkBAIC0zMTYxLDcgKzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlam9pbl9saXN0KTtcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuK1xuK1x0LyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovXG4rXHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4rXHRcdHVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21pbl91cykpO1xuK1x0aWNzay1cdTAwM2VpY3NrX3J0b19tYXggPVxuK1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbitcdG1zay1cdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cdTAwM2VpY3NrX3J0b19taW47XG4gXHRtc2stXHUwMDNlc2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87XG4gXHRtc2stXHUwMDNlYmFja2xvZ19sZW4gPSAwO1xuIFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XG5AQCAtMzk4OCw2ICs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKVxuIFxuIFx0LyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi9cbiBcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCArMTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcbiBcdFx0XHQgICBib29sIGVjaG8pO1xuIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7XG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTtcbiBcbiAvKiB0aGUgZGVmYXVsdCBwYXRoIG1hbmFnZXIsIHVzZWQgaW4gbXB0Y3BfcG1fdW5yZWdpc3RlciAqL1xuIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDtcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0aWYgKC0tbXNrLVx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFx1MDAzYyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSlcbitcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAtLW1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXBtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XG4gXHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbitcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdCAqIFRDUCBvcHRpb24gc3BhY2UuXG4gXHQgKi9cbiBcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cdTAwM2VtZDVzaWdfaW5mbykpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTtcbiBcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2Myw2ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XG4gXHRcdFx0Z290byBkb19yZXNldDtcbiBcdFx0fVxuQEAgLTg2NSw2ICs4NjgsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFjdHggfHwgZmFsbGJhY2spIHtcbiBcdFx0XHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcbitcdFx0XHRcdGlmICghY3R4KVxuK1x0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuK1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTtcbitcdFx0XHRcdGVsc2VcbitcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbitcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0XHRcdGdvdG8gZGlzcG9zZV9jaGlsZDtcbiBcdFx0XHR9XG5AQCAtMTQxNiw2ICsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XG4gXHRcdFx0XHRcdFx0TVBUQ1BfUlNUX0VNSURETEVCT1ggOlxuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTVBUQ1A7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5AQCAtMTI2NCw3ICsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZylcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXG4ge1xuLVx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuK1x0Y29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRjZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxO1xuQEAgLTEyOTIsNyArMTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4rXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbiBcbiBcdGlmIChuZXh0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuQEAgLTIxMiw4ICsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW5cbiBmaVxuIFxuIGlmICRjYXB0dXJlOyB0aGVuXG4tXHRybmRoPVwiJHtuczE6NH1cIlxuLVx0bXB0Y3BfbGliX3ByX2luZm8gXCJQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tXCJcbitcdGNhcHByZWZpeD1cIm1wdGNwX2Nvbm5lY3QtJHtuczE6NH1cIlxuK1x0bXB0Y3BfbGliX3ByX2luZm8gXCJwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LVwiXG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCArMzcyLDggQEAgZG9fdHJhbnNmZXIoKVxuIFx0XHRcdGNhcHVzZXI9XCItWiAkU1VET19VU0VSXCJcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cIiR7cm5kaH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwiXG4rXHRcdGxvY2FsIGNhcG9wdD1cIi1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwiXG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXFxcbiBcdFx0XHQtdyBcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFwiIFx1MDAzZVx1MDAzZSBcIiR7Y2Fwb3V0fVwiIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJVteOl06JWQgJVteOl06JWRcIiwgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuK1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJTYzW146XTolZCAlNjNbXjpdOiVkXCIsXG4rXHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwiSVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbkBAIC03NSw2ICs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4rdW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fY3R4XG4rdW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWRcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXG4rXG4rdW5zZXQgcnN0X21kNXNpZ1xuK3Vuc2V0IHJzdF9kc3NcbiBcbiB1bnNldCBmYl9uczFcbiB1bnNldCBmYl9uczJcbkBAIC05NzEsNyArOTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcIm1wX2pvaW4tJTAydS0lcy5wY2FwXCIgXCIkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwiIFwiJG5zXCIpXG4gXG4gXHRcdGVjaG8gXCJDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlXCJcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13IFwiJGNhcGZpbGVcIiBcdTAwM2UgXCIkY2Fwb3V0XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgXCIkY2FwZmlsZVwiIFx1MDAzZSBcIiRjYXBvdXRcIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgKzEzNjEsOCBAQCBjaGtfcnN0X25yKClcbiBcdGxvY2FsIHJzdF90eD0kMVxuIFx0bG9jYWwgcnN0X3J4PSQyXG4gXHRsb2NhbCBuc19pbnZlcnQ9JHszOi1cIlwifVxuK1x0bG9jYWwgbWQ1c2lnPSR7cnN0X21kNXNpZzotMH1cbitcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgbnNfdHg9JG5zMVxuIFx0bG9jYWwgbnNfcng9JG5zMlxuQEAgLTEzODksNiArMTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4rXG4rXHQjIE1QVENQX1JTVF9FTVBUQ1AgcmVzZXQtZXZlbnQgY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4rXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TUQ1U2lnUmVzZXRcIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkbWQ1c2lnXCIgXTsgdGhlblxuK1x0XHRwcmludF9jaGVjayBcIk1ENVNpZ1Jlc2V0XCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXCJNUFRjcEV4dERzc1Jlc2V0XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGRzc1wiIF07IHRoZW5cbitcdFx0cHJpbnRfY2hlY2sgXCJEc3NSZXNldFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzc1wiXG4rXHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcbiBcdGxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfVxuIFx0bG9jYWwgaW5maV9ucj0ke2pvaW5faW5maV9ucjotMH1cbiBcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cbitcdGxvY2FsIHN5bmFja19ub19tcGpvaW49JHtqb2luX3N5bmFja19ub19tcGpvaW46LTB9XG4rXHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuK1x0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cbitcdGxvY2FsIG5vdF9lc3RhYmxpc2hlZD0ke2pvaW5fbm90X2VzdGFibGlzaGVkOi0wfVxuK1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgKzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKVxuIFx0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqXCJcbiBcdGZpXG4gXG4rXHQjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogdGhlICpTeW5BY2sqIG9uZSBmaXJlcyBvbiB0aGVcbitcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9IFwiTVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pblwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRzeW5hY2tfbm9fbXBqb2luXCIgXTsgdGhlblxuK1x0XHRyYz0ke0tTRlRfRkFJTH1cbitcdFx0cHJpbnRfY2hlY2sgXCJzeW5hY2sgbm8gbXBqb2luXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW5cIlxuK1x0ZmlcbitcbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkYWNrX25vX21wam9pblwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiYWNrIG5vIG1wam9pblwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbkFja05vQ3R4XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGFja19ub19jdHhcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImFjayBubyBjdHhcIlxuK1x0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwiXG4rXHRmaVxuK1xuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwiTVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub3RfZXN0YWJsaXNoZWRcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImpvaW4gbm90IGVzdGFibGlzaGVkXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub19pZF9mb3VuZFwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiam9pbiBubyBpZCBmb3VuZFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmRcIlxuK1x0ZmlcbitcbiBcdHByaW50X3Jlc3VsdHMgXCJqb2luIFJ4XCIgJHtyY31cbiBcbiBcdGpvaW5fc3luX3R4PVwiJHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fVwiIFxcXG5AQCAtMjM1OSw2ICsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKClcbiBcdFx0XHRjaGtfYWRkX25yIDQgNFxuIFx0XHRmaVxuIFx0ZmlcbitcbitcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4rXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxuK1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4rXHQjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLlxuK1x0aWYgcmVzZXQgXCJzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCI7IHRoZW5cbitcdFx0bG9jYWwgZXh0cmFfYmluZFxuK1x0XHRsb2NhbCBwb3J0XG4rXG4rXHRcdHBtX25sX3NldF9saW1pdHMgJG5zMSAwIDFcbitcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuK1x0XHRwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWxcbitcbitcdFx0cG9ydD0kKGdldF9wb3J0KVxuK1x0XHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXCIkcG9ydFwiIFxcXG4rXHRcdFx0LXMgVENQIDEwLjAuMi4yIFx1MDAyNlxuK1x0XHRleHRyYV9iaW5kPSQhXG4rXHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwiJG5zMlwiIFwiJHBvcnRcIlxuK1xuK1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4rXHRcdGpvaW5fc3luYWNrX25vX21wam9pbj0xIGpvaW5fc3luX3R4PTEgXFxcbitcdFx0XHRjaGtfam9pbl9uciAwIDAgMFxuK1xuK1x0XHRraWxsICR7ZXh0cmFfYmluZH0gMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbiB9XG4gXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbkBAIC0yNCw2ICsyNCw3IEBAIHNtYWxsPVwiXCJcbiBzb3V0PVwiXCJcbiBjb3V0PVwiXCJcbiBjYXBvdXQ9XCJcIlxuK2NhcHByZWZpeD1cIlwiXG4gc2l6ZT0wXG4gXG4gdXNhZ2UoKSB7XG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbitcdGlmICRjYXB0dXJlOyB0aGVuXG4rXHRcdGNhcHByZWZpeD1cInNpbXVsdF9mbG93cy0ke25zMTo0fVwiXG4rXHRcdG1wdGNwX2xpYl9wcl9pbmZvIFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cIlxuK1x0ZmlcbitcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCIkbnMxXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zIFwiJG5zMlwiXG4gXHRpcCBsaW5rIGFkZCBuczFldGgyIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcIiRuczJcIlxuIFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcIiRuczJcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgXCIkbnMzXCJcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXG4gXG4gXHRpZiAkY2FwdHVyZTsgdGhlblxuIFx0XHRsb2NhbCBjYXB1c2VyXG4tXHRcdGxvY2FsIHJuZGg9XCIke25zMTo0fVwiXG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCJcIlxuIFx0XHRlbHNlXG4gXHRcdFx0Y2FwdXNlcj1cIi1aICRTVURPX1VTRVJcIlxuIFx0XHRmaVxuIFxuLVx0XHRsb2NhbCBjYXBmaWxlPVwiJHtybmRofS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7cG9ydH1cIlxuK1x0XHRsb2NhbCBjYXBvcHQ9XCItaSBhbnkgLXMgMTA4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgXCIke2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcIiAgXHUwMDNlXHUwMDNlIFwiJHtjYXBvdXR9XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6NTYuNTI4ODk0NDA5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTkxMjgxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IE5vIERlZGljYXRlZCBTZXNzaW9uIFJlcXVpcmVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBzZXJpZXMgZG93biBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4sIHdoaWNoIHdvdWxkIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcywgYW5kIGl0IGxvb2tzIGxpa2Ugd2UncmUgbW9zdGx5IGRlYWxpbmcgd2l0aDpcblxuMS4gICoqUmVtb3ZhbCBvZiBgZGF0YV9hY2tgIGZpZWxkOioqIFRoaXMgaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSByZW1vdmFsIG9mIGBkYXRhX2Fja2AgKGFuZCBpdHMgYXNzb2NpYXRlZCBgZGF0YV9hY2szMmAgdW5pb24gbWVtYmVyKSBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGBtcHRjcF9kdW1wX21wZXh0YCB0cmFjZSBldmVudCBpcyBhICoqbmV0IHJlZHVjdGlvbioqIGluIGRhdGEgYW5kIHBvdGVudGlhbCBpc3N1ZXMuIExlc3MgZGF0YSBpcyBiZXR0ZXIsIGluIHRoaXMgY2FzZS4gV2UncmUgcmVtb3ZpbmcsIG5vdCBhZGRpbmcuIFRoZSB0cmFjZSBldmVudCBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1c2VyLXNwYWNlIGV4cG9zdXJlIG9mIHNlbnNpdGl2ZSBkYXRhLCBhbmQgdGhlIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBjaGFuZ2UgaW52b2x2ZXMgYW4gYHNrYl9leHRfYWRkKClgIGFsbG9jYXRpb24uIExlc3MgZGF0YSBpbiB0aGUgc2tiIGV4dGVuc2lvbiBpcyBhIHBvc2l0aXZlIHRoaW5nIGZvciByZWR1Y2luZyBtZW1vcnkgdXNhZ2UuXG4yLiAgKipTTk1QIE1JQiBJdGVtczoqKiBUaGVzZSBhcmUganVzdCBjb3VudGVycywgaW5jcmVtZW50ZWQgdXNpbmcgYE1QVENQX0lOQ19TVEFUU2AuIFRoZSBpbmZvcm1hdGlvbiBleHBvc2VkIHRocm91Z2ggYC9wcm9jL25ldC9zbm1wYCBvciBzaW1pbGFyIGlzIGVudGlyZWx5IGJlbmlnbi4gV2UncmUgbm90IGxlYWtpbmcgYW55dGhpbmcgc2Vuc2l0aXZlIHRvIHVzZXIgc3BhY2U7IHdlJ3JlIGp1c3QgcHJvdmlkaW5nIG1vcmUgc3RhdGlzdGljcy5cbjMuICAqKlVuZGVyZmxvdyBDaGVja3MgXHUwMDI2IFJUTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBgZXh0cmFfc3ViZmxvd3NgIGFyZSBkZWZlbnNpdmUgY29kaW5nIHByYWN0aWNlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBpY3NrLVx1MDAzZWljc2tfcnRvX21pbmAgYW5kIGBpY3NrLVx1MDAzZWljc2tfcnRvX21heGAgd2l0aCB2YWx1ZXMgZnJvbSBgbmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21heF9tc2AgaXMgYSAqKnBvc2l0aXZlKiouIEl0ICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoZXJlIHByZXZpb3VzbHkgdGhlIHZhcmlhYmxlcyBtaWdodCBoYXZlIGJlZW4gdW5pbml0aWFsaXplZC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuXG5Db25zaWRlcmluZyBhbGwgb2YgdGhpcywgbGV0J3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgcG9pbnRzLlxuXG4qICAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gVGhlIHRyYWNlIGV2ZW50ICpyZW1vdmVzKiBhIGZpZWxkIGFuZCBzbyB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgY29waWVkIGlzIHNtYWxsZXIgbm93LiBUaGUgTUlCIGl0ZW1zIGluY3JlbWVudCBjb3VudGVycywgd2hpY2ggaXMgbm90IGNvbmNlcm5pbmcgZm9yIEtNU0FOLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYGRhdGFfYWNrYCBmaWVsZCBpbiB0aGUgc2tiIGV4dGVuc2lvbiBpcyBhIHJlZHVjdGlvbiBpbiBzaXplLlxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogV2UncmUgcmVtb3ZpbmcgYSBmaWVsZCBmcm9tIGFuIHNrYiBleHRlbnNpb24uIFdlIGFyZSBub3cgaW5pdGlhbGl6aW5nIGFuIFJUTyBhbmQgdGhvc2Ugd2VyZSBub3QgaW5pdGlhbGl6ZWQgcHJldmlvdXNseSwgd2hpY2ggYWRkcmVzc2VzIHByZXZpb3VzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHVzYWdlLiBUaGVyZSBhcmUgbm8gYnVmZmVyIGFsbG9jYXRpb25zIG9yIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkLlxuXG5XZSdyZSBhZGRpbmcgY2hlY2tzIHRvIHVuZGVyZmxvdywgc28gbm90IGEgcHJvYmxlbS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb3VudGVycyBpcyBmaW5lLiBUaGUgUlRPIHNlZWRpbmcgaW5pdGlhbGl6ZXMgZmllbGRzLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIHJpc2tzLiBUaGUgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVtb3ZhbCBvZiB0aGUgZmllbGQgYW5kIHRoZSBzZWVkaW5nIG9mIHRoZSBSVE8gc2hvdWxkIHJlZHVjZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIHJlYWRzLiBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cbkknbSBzZXR0aW5nIE5lZWRzS01TQU49ZmFsc2UgZm9yIHRoaXMgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMywiT3V0cHV0VG9rZW5zIjoyODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTQ6MTQuNzIwMTc5MTM5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb246XFxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXFxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cXG4zLiBBZGRpbmcgdW5kZXJmbG93IGNoZWNrcyAoYFdBUk5fT05fT05DRWApIGZvciBgcG0tXFx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcXG4xLiBSZW1vdmluZyB0aGUgdW51c2VkIGBkYXRhX2Fja2AgZmllbGQgZnJvbSBgc3RydWN0IG1wdGNwX2V4dGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGBtcHRjcF9kdW1wX21wZXh0YCB0cmFjZSBldmVudC5cXG4yLiBBZGRpbmcgbmV3IFNOTVAgTUlCIGNvdW50ZXJzIGZvciB2YXJpb3VzIE1QVENQIGV2ZW50cyAoZS5nLiwgTVBfSk9JTiBmYWlsdXJlcywgcmVzZXRzKSBhbmQgaW5jcmVtZW50aW5nIHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLlxcbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cXHUwMDNlZXh0cmFfc3ViZmxvd3NgLlxcbjQuIFNlZWRpbmcgUlRPIGJvdW5kcyAoYGljc2tfcnRvX21pbmAsIGBpY3NrX3J0b19tYXhgKSBkdXJpbmcgTVBUQ1Agc29ja2V0IGluaXRpYWxpemF0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByZW1vdmFsIG9mIGZpZWxkcyBmcm9tIHRoZSB0cmFjZSBldmVudCBhbmQgc2tiIGV4dGVuc2lvbiByZWR1Y2VzIHRoZSBtZW1vcnkgZm9vdHByaW50LCBhbmQgdGhlIFJUTyBib3VuZHMgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyBmaWVsZHMgYXJlIHByb3Blcmx5IHNlZWRlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 17:09:29 +0000 UTC FinishedAt: 2026-08-12 17:14:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "094f3a75-7951-49c9-ac96-83f2a0a43d97" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_pm_subflow_check_next", "mptcp_pm_nl_remove_doit", "mptcp_init_sock", "__mptcp_retrans", "mptcp_finish_join", "__mptcp_subflow_connect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfaW5pdF9zb2NrJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9maW5pc2hfam9pbiYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3N1YmZsb3dfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjYzIwYjYyNWVmOWQ1ZjFhNGRhNjhiZmJmZDlkN2I5YmU3N2JjMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCAmIzQzOzE5LDYgQEAgc3RydWN0IHNlcV9maWxlO1xuIFxuIC8qIE1QVENQIHNrX2J1ZmYgZXh0ZW5zaW9uIGRhdGEgKi9cbiBzdHJ1Y3QgbXB0Y3BfZXh0IHtcbi1cdHVuaW9uIHtcbi1cdFx0dTY0XHRkYXRhX2Fjaztcbi1cdFx0dTMyXHRkYXRhX2FjazMyO1xuLVx0fTtcbiBcdHU2NFx0XHRkYXRhX3NlcTtcbiBcdHUzMlx0XHRzdWJmbG93X3NlcTtcbiBcdHUxNlx0XHRkYXRhX2xlbjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuaW5kZXggMDQ1MjFhY2JhNDgzMi4uMjI4ODJiZDAzNDU5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcbkBAIC03NSw3ICYjNDM7NzUsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHRUUF9BUkdTKG1wZXh0KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4tXHRcdF9fZmllbGQodTY0LCBkYXRhX2FjaylcbiBcdFx0X19maWVsZCh1NjQsIGRhdGFfc2VxKVxuIFx0XHRfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpXG4gXHRcdF9fZmllbGQodTE2LCBkYXRhX2xlbilcbkBAIC05NCw3ICYjNDM7OTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCAmIzQzOzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCxcbiBcdFx0X19lbnRyeS1cdTAwM2VpbmZpbml0ZV9tYXAgPSBtcGV4dC1cdTAwM2VpbmZpbml0ZV9tYXA7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwmIzM0O2RhdGFfYWNrPSVsbHUgZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXVcJiMzNDssXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7ZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXVcJiMzNDssXG4mIzQzO1x0XHQgIF9fZW50cnktXHUwMDNlZGF0YV9zZXEsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VzdWJmbG93X3NlcSwgX19lbnRyeS1cdTAwM2VkYXRhX2xlbixcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZWNzdW0sIF9fZW50cnktXHUwMDNldXNlX21hcCxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZWRzbjY0LCBfX2VudHJ5LVx1MDAzZWRhdGFfZmluLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggMjU2OTM4NWJhYjdjYS4uNjA4Y2I1Njg4OTdjZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtMjEsMTQgJiM0MzsyMSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEZhbGxiYWNrVG9rZW5Jbml0XCYjMzQ7LCBNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUFRDUFJldHJhbnNcJiMzNDssIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbk5vVG9rZW5Gb3VuZFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5OT1RPS0VOKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbk5vSWRGb3VuZFwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5blJ4XCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlJYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luQmFja3VwUnhcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5TeW5BY2tSeFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5bkFja0JhY2t1cFJ4XCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luQWNrSE1hY0ZhaWx1cmVcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pblN5bkFja05vTVBKb2luXCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5BY2tSeFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbkFja0hNYWNGYWlsdXJlXCYjMzQ7LCBNUFRDUF9NSUJfSk9JTkFDS01BQyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5BY2tOb01QSm9pblwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O01QSm9pbkFja05vQ3R4XCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5SZWplY3RlZFwmIzM0OywgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5Ob3RFc3RhYmxpc2hlZFwmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luVHhcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFgpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtNUEpvaW5TeW5UeENyZWF0U2tFcnJcJiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFhDUkVBVFNLRVJSKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBKb2luU3luVHhCaW5kRXJyXCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyAmIzQzOzg2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmxhY2tob2xlXCYjMzQ7LCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TVBDYXBhYmxlRGF0YUZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfTVBDQVBBQkxFREFUQUZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7TUQ1U2lnRmFsbGJhY2tcJiMzNDssIE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtNRDVTaWdSZXNldFwmIzM0OywgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RHNzRmFsbGJhY2tcJiMzNDssIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtEc3NSZXNldFwmIzM0OywgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgJiM0MzsxNiwxOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQsXHQvKiBDb3VsZCBub3QgaW5pdC9hbGxvY2F0ZSB0b2tlbiAqL1xuIFx0TVBUQ1BfTUlCX1JFVFJBTlNTRUdTLFx0XHQvKiBTZWdtZW50cyByZXRyYW5zbWl0dGVkIGF0IHRoZSBNUFRDUC1sZXZlbCAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5OT1RPS0VOLFx0XHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCAqL1xuJiM0MztcdE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQsXHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCBubyBsb2NhbCBJRCB3YXMgZm91bmQgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOUlgsXHRcdC8qIFJlY2VpdmVkIGEgU1lOICYjNDM7IE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTkFDS1JYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyxcdC8qIEhNQUMgd2FzIHdyb25nIG9uIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqL1xuJiM0MztcdE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIFNZTi9BQ0sgKi9cbiBcdE1QVENQX01JQl9KT0lOQUNLUlgsXHRcdC8qIFJlY2VpdmVkIGFuIEFDSyAmIzQzOyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTkFDS01BQyxcdFx0LyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICYjNDM7IE1QX0pPSU4gKi9cbiYjNDM7XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4sXHQvKiBNUF9SU1Q6IG1pc3NpbmcgTVBfSk9JTiBpbiBBQ0sgKi9cbiYjNDM7XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgsXHQvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi9cbiBcdE1QVENQX01JQl9KT0lOUkVKRUNURUQsXHRcdC8qIFRoZSBQTSByZWplY3RlZCB0aGUgSk9JTiByZXF1ZXN0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIsXHQvKiBOb3QgYWJsZSB0byBjcmVhdGUgYSBzb2NrZXQgd2hlbiBzZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSLFx0LyogTm90IGFibGUgdG8gYmluZCgpIHRoZSBhZGRyZXNzIHdoZW4gc2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovXG5AQCAtODQsNyAmIzQzOzg5LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0XHRcdFx0XHQgKiBlc3RhYmxpc2hlZCBwYWNrZXRcbiBcdFx0XHRcdFx0ICovXG4gXHRNUFRDUF9NSUJfTUQ1U0lHRkFMTEJBQ0ssXHQvKiBDb25mbGljdGluZyBUQ1Agb3B0aW9uIGVuYWJsZWQgKi9cbiYjNDM7XHRNUFRDUF9NSUJfTUQ1U0lHUkVTRVQsXHRcdC8qIE1QX1JTVDogTUQ1U0lHIGVuYWJsZWQgb24gbGlzdGVuZXIgKi9cbiBcdE1QVENQX01JQl9EU1NGQUxMQkFDSyxcdFx0LyogQmFkIG9yIG1pc3NpbmcgRFNTICovXG4mIzQzO1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xuaW5kZXggZDFmNzNjM2UzOWZhMy4uOGI2ODg2ODI1NWM1MCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG0uY1xuQEAgLTY3MCw3ICYjNDM7NjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdGlmIChtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSkge1xuIFx0XHRpZiAodXBkYXRlX3N1YmZsb3dzKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBtLVx1MDAzZWxvY2spO1xuLVx0XHRcdHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzLS07XG4mIzQzO1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuJiM0MztcdFx0XHRcdHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzLS07XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cG0tXHUwMDNlbG9jayk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5AQCAtMjgxLDggJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tXHRcdFx0XHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9ybV9saXN0IGFsaXN0ID0geyAubnIgPSAwIH07XG4gXHRpbnQgYW5ub19uciA9IDA7XG5AQCAtMzQwLDcgJiM0MzszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuJiM0MztcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcbiBcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTU4MSwxNyAmIzQzOzU4MSwyMyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuJiM0MztcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbiYjNDM7XHR1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfcnRvX21heCk7XG4gXHR1MzIgcmV0cmFuc21pdHM7XG4gXG4mIzQzO1x0LyogVGhlIHN5c2N0bHMgYXJlIHZhbGlkYXRlZCBpbmRlcGVuZGVudGx5OiBydG9fbWluIFx1MDAzZSBydG9fbWF4IGlzXG4mIzQzO1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4mIzQzO1x0ICovXG4gXHRyZXRyYW5zbWl0cyA9IG1pbl90KHUzMiwgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdCAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7XG4mIzQzO1x0XHRcdCAgICBpbG9nMihtYXhfdCh1MzIsIHJ0b19tYXggLyBydG9fbWluLCAxKSkpO1xuIFxuLVx0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTiBcdTAwM2NcdTAwM2MgcmV0cmFuc21pdHM7XG4mIzQzO1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4mIzQzO1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSB0b3V0IFx1MDAzZSAwID8gdG91dCA6XG4mIzQzO1x0XHRcdFx0ICAgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3J0b19taW4pO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuQEAgLTMxNjEsNyAmIzQzOzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4mIzQzO1x0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1zay1cdTAwM2Vqb2luX2xpc3QpO1xuQEAgLTMxNzAsNyAmIzQzOzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuJiM0MztcbiYjNDM7XHQvKiBtc2sgZG9lcyBub3QgZ28gdGhyb3VnaCB0Y3BfaW5pdF9zb2NrKCk7IHNlZWQgUlRPIGJvdW5kcy4gKi9cbiYjNDM7XHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4mIzQzO1x0XHR1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19taW5fdXMpKTtcbiYjNDM7XHRpY3NrLVx1MDAzZWljc2tfcnRvX21heCA9XG4mIzQzO1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbiYjNDM7XHRtc2stXHUwMDNldGltZXJfaXZhbCA9IGljc2stXHUwMDNlaWNza19ydG9fbWluO1xuIFx0bXNrLVx1MDAzZXNjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPO1xuIFx0bXNrLVx1MDAzZWJhY2tsb2dfbGVuID0gMDtcbiBcdG1wdGNwX2luaXRfcnR0X2VzdChtc2spO1xuQEAgLTM5ODgsNiAmIzQzOzQwMDIsNyBAQCBib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXG4gXG4gXHQvKiBtcHRjcCBzb2NrZXQgYWxyZWFkeSBjbG9zaW5nPyAqL1xuIFx0aWYgKCFtcHRjcF9pc19mdWxseV9lc3RhYmxpc2hlZChwYXJlbnQpKSB7XG4mIzQzO1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCAmIzQzOzExNDksNiBAQCBpbnQgbXB0Y3BfcG1fYW5ub3VuY2VfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIsXG4gXHRcdFx0ICAgYm9vbCBlY2hvKTtcbiBpbnQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpO1xuLXZvaWQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi1cdFx0XHRcdHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSk7XG4gXG4gLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi9cbiBleHRlcm4gc3RydWN0IG1wdGNwX3BtX29wcyBtcHRjcF9wbV9rZXJuZWw7XG5AQCAtMTI1NCw3ICYjNDM7MTI1Miw4IEBAIHU4IG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiAvKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRpZiAoLS1tc2stXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgLS1tc2stXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxuIFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VwbS5hY2NlcHRfc3ViZmxvdywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCBlMWYyMGZmOGZkYjQyLi5hZjgxYWQ1ZTY5OWQxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTk2LDYgJiM0Mzs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFxuIFx0bG9jYWxfaWQgPSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcbiBcdGlmIChsb2NhbF9pZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHQgKiBUQ1Agb3B0aW9uIHNwYWNlLlxuIFx0ICovXG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKHRjcF9zayhza19saXN0ZW5lciktXHUwMDNlbWQ1c2lnX2luZm8pKSB7XG4mIzQzO1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2tfbGlzdGVuZXIpLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpO1xuIFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTYzLDYgJiM0Mzs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4mIzQzO1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRcdGdvdG8gZG9fcmVzZXQ7XG4gXHRcdH1cbkBAIC04NjUsNiAmIzQzOzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xuIFx0XHRcdGlmIChmYWxsYmFja19pc19mYXRhbCkge1xuJiM0MztcdFx0XHRcdGlmICghY3R4KVxuJiM0MztcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xuJiM0MztcdFx0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4mIzQzO1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xuIFx0XHRcdFx0Z290byBkaXNwb3NlX2NoaWxkO1xuIFx0XHRcdH1cbkBAIC0xNDE2LDYgJiM0MzsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4mIzQzO1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlcmVzZXRfcmVhc29uID0gc3RhdHVzID09IE1BUFBJTkdfTk9EU1MgP1xuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTUlERExFQk9YIDpcbiBcdFx0XHRcdFx0XHRNUFRDUF9SU1RfRU1QVENQO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5pbmRleCBjYmU1NzNjNGFiM2FkLi5lYTRjYjZjMWJkNWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuQEAgLTEyNjQsNyAmIzQzOzEyNjQsNyBAQCBzdGF0aWMgdm9pZCBhcHBseV9jbXNnX3R5cGVzKGludCBmZCwgY29uc3Qgc3RydWN0IGNmZ19jbXNnX3R5cGVzICpjbXNnKVxuIFxuIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTtcbiYjNDM7XHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTtcbiBcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuIFxuIFx0Y2ZnX2Ntc2dfdHlwZXMuY21zZ19lbmFibGVkID0gMTtcbkBAIC0xMjkyLDcgJiM0MzsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKVxuIFxuIHN0YXRpYyB2b2lkIHBhcnNlX3NldHNvY2tfb3B0aW9ucyhjb25zdCBjaGFyICpuYW1lKVxuIHtcbi1cdGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRpZiAobmV4dCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcbmluZGV4IGQxNTg2NzhmYTZhYjAuLjdhMmE4NTFmYTBhZGIgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcbkBAIC0yMTIsOCAmIzQzOzIxMiw4IEBAIGlmICRjaGVja3N1bTsgdGhlblxuIGZpXG4gXG4gaWYgJGNhcHR1cmU7IHRoZW5cbi1cdHJuZGg9XCYjMzQ7JHtuczE6NH1cJiMzNDtcbi1cdG1wdGNwX2xpYl9wcl9pbmZvIFwmIzM0O1BhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS1cJiMzNDtcbiYjNDM7XHRjYXBwcmVmaXg9XCYjMzQ7bXB0Y3BfY29ubmVjdC0ke25zMTo0fVwmIzM0O1xuJiM0MztcdG1wdGNwX2xpYl9wcl9pbmZvIFwmIzM0O3BjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tXCYjMzQ7XG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCAmIzQzOzM3Miw4IEBAIGRvX3RyYW5zZmVyKClcbiBcdFx0XHRjYXB1c2VyPVwmIzM0Oy1aICRTVURPX1VTRVJcJiMzNDtcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cJiMzNDske3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwmIzM0O1xuLVx0XHRsb2NhbCBjYXBvcHQ9XCYjMzQ7LWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cJiMzNDtcbiYjNDM7XHRcdGxvY2FsIGNhcGZpbGU9XCYjMzQ7JHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwmIzM0O1xuJiM0MztcdFx0bG9jYWwgY2Fwb3B0PVwmIzM0Oy1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwmIzM0O1xuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bGlzdGVuZXJfbnN9IHRjcGR1bXAgJHtjYXBvcHR9IFxcXG4gXHRcdFx0LXcgXCYjMzQ7JHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwXCYjMzQ7IFx1MDAzZVx1MDAzZSBcJiMzNDske2NhcG91dH1cJiMzNDsgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcbmluZGV4IDVlMjIyYmE5NzdlNGUuLjNiOGQyYzhhNjIxNjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5AQCAtMzc3LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwmIzM0OyVbXjpdOiVkICVbXjpdOiVkXCYjMzQ7LCBzYWRkciwgXHUwMDI2c3BvcnQsIGRhZGRyLCBcdTAwMjZkcG9ydCk7XG4mIzQzO1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwmIzM0OyU2M1teOl06JWQgJTYzW146XTolZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwmIzM0O0lQIFBPUlQgUGFpcnMgaGFzIHN0eWxlIHByb2JsZW1zIVwmIzM0Oyk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuaW5kZXggN2RjOTFmYWM0OTE3ZS4uMThjZTcxMzZhMmIwZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuQEAgLTc1LDYgJiM0Mzs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4mIzQzO3Vuc2V0IGpvaW5fc3luYWNrX25vX21wam9pblxuJiM0Mzt1bnNldCBqb2luX2Fja19ub19tcGpvaW5cbiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fY3R4XG4mIzQzO3Vuc2V0IGpvaW5fbm90X2VzdGFibGlzaGVkXG4mIzQzO3Vuc2V0IGpvaW5fbm9faWRfZm91bmRcbiYjNDM7XG4mIzQzO3Vuc2V0IHJzdF9tZDVzaWdcbiYjNDM7dW5zZXQgcnN0X2Rzc1xuIFxuIHVuc2V0IGZiX25zMVxuIHVuc2V0IGZiX25zMlxuQEAgLTk3MSw3ICYjNDM7OTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcJiMzNDttcF9qb2luLSUwMnUtJXMucGNhcFwmIzM0OyBcJiMzNDskTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwmIzM0OyBcJiMzNDskbnNcJiMzNDspXG4gXG4gXHRcdGVjaG8gXCYjMzQ7Q2FwdHVyaW5nIHRyYWZmaWMgZm9yIHRlc3QgJE1QVENQX0xJQl9URVNUX0NPVU5URVIgaW50byAkY2FwZmlsZVwmIzM0O1xuLVx0XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc1wmIzM0OyB0Y3BkdW1wIC1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAkY2FwdXNlciAtdyBcJiMzNDskY2FwZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGNhcG91dFwmIzM0OyAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiYjNDM7XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IHRjcGR1bXAgLWkgYW55IC1zIDEyOCAtQiAzMjc2OCAkY2FwdXNlciAtdyBcJiMzNDskY2FwZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGNhcG91dFwmIzM0OyAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgJiM0MzsxMzYxLDggQEAgY2hrX3JzdF9ucigpXG4gXHRsb2NhbCByc3RfdHg9JDFcbiBcdGxvY2FsIHJzdF9yeD0kMlxuIFx0bG9jYWwgbnNfaW52ZXJ0PSR7MzotXCYjMzQ7XCYjMzQ7fVxuJiM0MztcdGxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9XG4mIzQzO1x0bG9jYWwgZHNzPSR7cnN0X2RzczotMH1cbiBcdGxvY2FsIGNvdW50XG4gXHRsb2NhbCBuc190eD0kbnMxXG4gXHRsb2NhbCBuc19yeD0kbnMyXG5AQCAtMTM4OSw2ICYjNDM7MTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4mIzQzO1xuJiM0MztcdCMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxuJiM0MztcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4mIzQzO1x0IyAoc2VydmVyKSwgRHNzUmVzZXQgb24gdGhlIGRhdGEgcmVjZWl2ZXIgKGNsaWVudCkuXG4mIzQzO1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwmIzM0O01QVGNwRXh0TUQ1U2lnUmVzZXRcJiMzNDspXG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskY291bnRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskY291bnRcJiMzNDsgIT0gXCYjMzQ7JG1kNXNpZ1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtNRDVTaWdSZXNldFwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZ1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcJiMzNDtNUFRjcEV4dERzc1Jlc2V0XCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRkc3NcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cHJpbnRfY2hlY2sgXCYjMzQ7RHNzUmVzZXRcJiMzNDtcbiYjNDM7XHRcdGZhaWxfdGVzdCBcJiMzNDtnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3NcJiMzNDtcbiYjNDM7XHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICYjNDM7MTYxMiwxMSBAQCBjaGtfam9pbl9ucigpXG4gXHRsb2NhbCByc3RfbnI9JHtqb2luX3JzdF9ucjotMH1cbiBcdGxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9XG4gXHRsb2NhbCBjb3JydXB0ZWRfcGt0cz0ke2pvaW5fY29ycnVwdGVkX3BrdHM6LTB9XG4mIzQzO1x0bG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH1cbiYjNDM7XHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuJiM0MztcdGxvY2FsIGFja19ub19jdHg9JHtqb2luX2Fja19ub19jdHg6LTB9XG4mIzQzO1x0bG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9XG4mIzQzO1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgJiM0MzsxNjg1LDQ0IEBAIGNoa19qb2luX25yKClcbiBcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBzeW4gcmVqZWN0ZWQgZXhwZWN0ZWQgJHN5bl9yZWpcJiMzNDtcbiBcdGZpXG4gXG4mIzQzO1x0IyBQZXItZXZlbnQgTVBUQ1BfUlNUX0VNUFRDUCBKT0lOIGNvdW50ZXJzOyBkZWZhdWx0IDAsIGdhdGVkIG9uXG4mIzQzO1x0IyBhdmFpbGFiaWxpdHkuICBGaXhlZCBuYW1lc3BhY2VzOiB0aGUgKlN5bkFjayogb25lIGZpcmVzIG9uIHRoZVxuJiM0MztcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcJiMzNDtNUFRjcEV4dE1QSm9pblN5bkFja05vTVBKb2luXCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRzeW5hY2tfbm9fbXBqb2luXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJjPSR7S1NGVF9GQUlMfVxuJiM0MztcdFx0cHJpbnRfY2hlY2sgXCYjMzQ7c3luYWNrIG5vIG1wam9pblwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBzeW5hY2sgbm8gbXBqb2luIGV4cGVjdGVkICRzeW5hY2tfbm9fbXBqb2luXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cJiMzNDspXG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskY291bnRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskY291bnRcJiMzNDsgIT0gXCYjMzQ7JGFja19ub19tcGpvaW5cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDthY2sgbm8gbXBqb2luXCYjMzQ7XG4mIzQzO1x0XHRmYWlsX3Rlc3QgXCYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIGFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJGFja19ub19tcGpvaW5cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCYjMzQ7TVBUY3BFeHRNUEpvaW5BY2tOb0N0eFwmIzM0OylcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyRjb3VudFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRjb3VudFwmIzM0OyAhPSBcJiMzNDskYWNrX25vX2N0eFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRyYz0ke0tTRlRfRkFJTH1cbiYjNDM7XHRcdHByaW50X2NoZWNrIFwmIzM0O2FjayBubyBjdHhcJiMzNDtcbiYjNDM7XHRcdGZhaWxfdGVzdCBcJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcJiMzNDtNUFRjcEV4dE1QSm9pbk5vdEVzdGFibGlzaGVkXCYjMzQ7KVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JGNvdW50XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNvdW50XCYjMzQ7ICE9IFwmIzM0OyRub3RfZXN0YWJsaXNoZWRcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtqb2luIG5vdCBlc3RhYmxpc2hlZFwmIzM0O1xuJiM0MztcdFx0ZmFpbF90ZXN0IFwmIzM0O2dvdCAkY291bnQgSk9JTltzXSBub3QgZXN0YWJsaXNoZWQgZXhwZWN0ZWQgJG5vdF9lc3RhYmxpc2hlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcJiMzNDtNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwmIzM0OylcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyRjb3VudFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRjb3VudFwmIzM0OyAhPSBcJiMzNDskbm9faWRfZm91bmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4mIzQzO1x0XHRwcmludF9jaGVjayBcJiMzNDtqb2luIG5vIGlkIGZvdW5kXCYjMzQ7XG4mIzQzO1x0XHRmYWlsX3Rlc3QgXCYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIG5vIGlkIGZvdW5kIGV4cGVjdGVkICRub19pZF9mb3VuZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuIFx0cHJpbnRfcmVzdWx0cyBcJiMzNDtqb2luIFJ4XCYjMzQ7ICR7cmN9XG4gXG4gXHRqb2luX3N5bl90eD1cJiMzNDske2pvaW5fc3luX3R4Oi0ke3N5bl9ucn19XCYjMzQ7IFxcXG5AQCAtMjM1OSw2ICYjNDM7MjQyNywzMSBAQCBzaWduYWxfYWRkcmVzc190ZXN0cygpXG4gXHRcdFx0Y2hrX2FkZF9uciA0IDRcbiBcdFx0ZmlcbiBcdGZpXG4mIzQzO1xuJiM0MztcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4mIzQzO1x0IyBsaXN0ZW5lciBpcyBib3VuZCBhdCBpdDogdGhlIGNsaWVudCYjMzk7cyBNUF9KT0lOIHJvdXRlcyBsb2NhbGx5XG4mIzQzO1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4mIzQzO1x0IyBNUEpvaW5TeW5BY2tOb01QSm9pbiBpbmNyZW1lbnRzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiYjNDM7XHRpZiByZXNldCBcJiMzNDtzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRsb2NhbCBleHRyYV9iaW5kXG4mIzQzO1x0XHRsb2NhbCBwb3J0XG4mIzQzO1xuJiM0MztcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMVxuJiM0MztcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuJiM0MztcdFx0cG1fbmxfYWRkX2VuZHBvaW50ICRuczEgMTAuMC4yLjIgZmxhZ3Mgc2lnbmFsXG4mIzQzO1xuJiM0MztcdFx0cG9ydD0kKGdldF9wb3J0KVxuJiM0MztcdFx0aXAgbmV0bnMgZXhlYyAke25zMn0gLi9tcHRjcF9jb25uZWN0IC1sIC10IC0xIC1wIFwmIzM0OyRwb3J0XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdC1zIFRDUCAxMC4wLjIuMiBcdTAwMjZcbiYjNDM7XHRcdGV4dHJhX2JpbmQ9JCFcbiYjNDM7XHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwmIzM0OyRuczJcJiMzNDsgXCYjMzQ7JHBvcnRcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4mIzQzO1x0XHRqb2luX3N5bmFja19ub19tcGpvaW49MSBqb2luX3N5bl90eD0xIFxcXG4mIzQzO1x0XHRcdGNoa19qb2luX25yIDAgMCAwXG4mIzQzO1xuJiM0MztcdFx0a2lsbCAke2V4dHJhX2JpbmR9IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuIH1cbiBcbiBsYW1pbmFyX2VuZHBfdGVzdHMoKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoXG5pbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAIHNtYWxsPVwmIzM0O1wmIzM0O1xuIHNvdXQ9XCYjMzQ7XCYjMzQ7XG4gY291dD1cJiMzNDtcJiMzNDtcbiBjYXBvdXQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO2NhcHByZWZpeD1cJiMzNDtcJiMzNDtcbiBzaXplPTBcbiBcbiB1c2FnZSgpIHtcbkBAIC03MCw2ICYjNDM7NzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbiYjNDM7XHRpZiAkY2FwdHVyZTsgdGhlblxuJiM0MztcdFx0Y2FwcHJlZml4PVwmIzM0O3NpbXVsdF9mbG93cy0ke25zMTo0fVwmIzM0O1xuJiM0MztcdFx0bXB0Y3BfbGliX3ByX2luZm8gXCYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCYjMzQ7JG5zMVwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDEgbmV0bnMgXCYjMzQ7JG5zMlwmIzM0O1xuIFx0aXAgbGluayBhZGQgbnMxZXRoMiBuZXRucyBcJiMzNDskbnMxXCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcJiMzNDskbnMyXCYjMzQ7XG4gXHRpcCBsaW5rIGFkZCBuczJldGgzIG5ldG5zIFwmIzM0OyRuczJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczNldGgxIG5ldG5zIFwmIzM0OyRuczNcJiMzNDtcbkBAIC0xMzYsMTUgJiM0MzsxNDIsMTQgQEAgZG9fdHJhbnNmZXIoKVxuIFxuIFx0aWYgJGNhcHR1cmU7IHRoZW5cbiBcdFx0bG9jYWwgY2FwdXNlclxuLVx0XHRsb2NhbCBybmRoPVwmIzM0OyR7bnMxOjR9XCYjMzQ7XG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCYjMzQ7XCYjMzQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRjYXB1c2VyPVwmIzM0Oy1aICRTVURPX1VTRVJcJiMzNDtcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cJiMzNDske3JuZGh9LSR7cG9ydH1cJiMzNDtcbi1cdFx0bG9jYWwgY2Fwb3B0PVwmIzM0Oy1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAke2NhcHVzZXJ9XCYjMzQ7XG4mIzQzO1x0XHRsb2NhbCBjYXBmaWxlPVwmIzM0OyR7Y2FwcHJlZml4fS0ke3BvcnR9XCYjMzQ7XG4mIzQzO1x0XHRsb2NhbCBjYXBvcHQ9XCYjMzQ7LWkgYW55IC1zIDEwOCAtQiAzMjc2OCAke2NhcHVzZXJ9XCYjMzQ7XG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtuczN9ICB0Y3BkdW1wICR7Y2Fwb3B0fSAtdyBcJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcJiMzNDsgIFx1MDAzZVx1MDAzZSBcJiMzNDske2NhcG91dH1cJiMzNDsgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0JiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX3JlbW92ZV9kb2l0JiMzNDssCiAgICAmIzM0O21wdGNwX2luaXRfc29jayYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZmluaXNoX2pvaW4mIzM0OywKICAgICYjMzQ7X19tcHRjcF9zdWJmbG93X2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYzIwYjYyNWVmOWQ1ZjFhNGRhNjhiZmJmZDlkN2I5YmU3N2JjMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oCmluZGV4IDcxYjlmYzVhNTc5NjMuLjQ4NWQ1NWI2NmVhNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaApAQCAtMTksMTAgJiM0MzsxOSw2IEBAIHN0cnVjdCBzZXFfZmlsZTsKIAogLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqLwogc3RydWN0IG1wdGNwX2V4dCB7Ci0JdW5pb24gewotCQl1NjQJZGF0YV9hY2s7Ci0JCXUzMglkYXRhX2FjazMyOwotCX07CiAJdTY0CQlkYXRhX3NlcTsKIAl1MzIJCXN1YmZsb3dfc2VxOwogCXUxNgkJZGF0YV9sZW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaAppbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmgKQEAgLTc1LDcgJiM0Mzs3NSw2IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAlUUF9BUkdTKG1wZXh0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQodTY0LCBkYXRhX2FjaykKIAkJX19maWVsZCh1NjQsIGRhdGFfc2VxKQogCQlfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpCiAJCV9fZmllbGQodTE2LCBkYXRhX2xlbikKQEAgLTk0LDcgJiM0Mzs5Myw2IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktJmd0O2RhdGFfYWNrID0gbXBleHQtJmd0O2FjazY0ID8gbXBleHQtJmd0O2RhdGFfYWNrIDogbXBleHQtJmd0O2RhdGFfYWNrMzI7CiAJCV9fZW50cnktJmd0O2RhdGFfc2VxID0gbXBleHQtJmd0O2RhdGFfc2VxOwogCQlfX2VudHJ5LSZndDtzdWJmbG93X3NlcSA9IG1wZXh0LSZndDtzdWJmbG93X3NlcTsKIAkJX19lbnRyeS0mZ3Q7ZGF0YV9sZW4gPSBtcGV4dC0mZ3Q7ZGF0YV9sZW47CkBAIC0xMTIsOCAmIzQzOzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCwKIAkJX19lbnRyeS0mZ3Q7aW5maW5pdGVfbWFwID0gbXBleHQtJmd0O2luZmluaXRlX21hcDsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7ZGF0YV9hY2s9JWxsdSBkYXRhX3NlcT0lbGx1IHN1YmZsb3dfc2VxPSV1IGRhdGFfbGVuPSV1IGNzdW09JXggdXNlX21hcD0ldSBkc242ND0ldSBkYXRhX2Zpbj0ldSB1c2VfYWNrPSV1IGFjazY0PSV1IG1wY19tYXA9JXUgZnJvemVuPSV1IHJlc2V0X3RyYW5zaWVudD0ldSByZXNldF9yZWFzb249JXUgY3N1bV9yZXFkPSV1IGluZmluaXRlX21hcD0ldSYjMzQ7LAotCQkgIF9fZW50cnktJmd0O2RhdGFfYWNrLCBfX2VudHJ5LSZndDtkYXRhX3NlcSwKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7ZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXUmIzM0OywKJiM0MzsJCSAgX19lbnRyeS0mZ3Q7ZGF0YV9zZXEsCiAJCSAgX19lbnRyeS0mZ3Q7c3ViZmxvd19zZXEsIF9fZW50cnktJmd0O2RhdGFfbGVuLAogCQkgIF9fZW50cnktJmd0O2NzdW0sIF9fZW50cnktJmd0O3VzZV9tYXAsCiAJCSAgX19lbnRyeS0mZ3Q7ZHNuNjQsIF9fZW50cnktJmd0O2RhdGFfZmluLApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jCmluZGV4IDI1NjkzODViYWI3Y2EuLjYwOGNiNTY4ODk3Y2YgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTIxLDE0ICYjNDM7MjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBGYWxsYmFja1Rva2VuSW5pdCYjMzQ7LCBNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUFRDUFJldHJhbnMmIzM0OywgTVBUQ1BfTUlCX1JFVFJBTlNTRUdTKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm9Ub2tlbkZvdW5kJiMzNDssIE1QVENQX01JQl9KT0lOTk9UT0tFTiksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5Ob0lkRm91bmQmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blJ4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5CYWNrdXBSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5bkFja0JhY2t1cFJ4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tITWFjRmFpbHVyZSYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tOb01QSm9pbiYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5BY2tSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTkFDS1JYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrSE1hY0ZhaWx1cmUmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tNQUMpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrTm9NUEpvaW4mIzM0OywgTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja05vQ3R4JiMzNDssIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblJlamVjdGVkJiMzNDssIE1QVENQX01JQl9KT0lOUkVKRUNURUQpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm90RXN0YWJsaXNoZWQmIzM0OywgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luVHgmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4Q3JlYXRTa0VyciYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4QmluZEVyciYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksCkBAIC04MSw3ICYjNDM7ODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0gewogCVNOTVBfTUlCX0lURU0oJiMzNDtCbGFja2hvbGUmIzM0OywgTVBUQ1BfTUlCX0JMQUNLSE9MRSksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QQ2FwYWJsZURhdGFGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfTVBDQVBBQkxFREFUQUZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TUQ1U2lnRmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01ENVNpZ1Jlc2V0JiMzNDssIE1QVENQX01JQl9NRDVTSUdSRVNFVCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O0Rzc0ZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9EU1NGQUxMQkFDSyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtEc3NSZXNldCYjMzQ7LCBNUFRDUF9NSUJfRFNTUkVTRVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtTaW11bHRDb25uZWN0RmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O0ZhbGxiYWNrRmFpbGVkJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O1dpblByb2JlJiMzNDssIE1QVENQX01JQl9XSU5QUk9CRSksCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmgKaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtMTYsMTQgJiM0MzsxNiwxOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklULAkvKiBDb3VsZCBub3QgaW5pdC9hbGxvY2F0ZSB0b2tlbiAqLwogCU1QVENQX01JQl9SRVRSQU5TU0VHUywJCS8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovCiAJTVBUQ1BfTUlCX0pPSU5OT1RPS0VOLAkJLyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgdGhlIHRva2VuIHdhcyBub3QgZm91bmQgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCwJLyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5SWCwJCS8qIFJlY2VpdmVkIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYLAkvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCwJCS8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCwJLyogUmVjZWl2ZWQgYSBTWU4vQUNLICYjNDM7IE1QX0pPSU4gJiM0MzsgYmFja3VwIGZsYWcgKi8KIAlNUFRDUF9NSUJfSk9JTlNZTkFDS01BQywJLyogSE1BQyB3YXMgd3Jvbmcgb24gU1lOL0FDSyAmIzQzOyBNUF9KT0lOICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTiwJLyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqLwogCU1QVENQX01JQl9KT0lOQUNLUlgsCQkvKiBSZWNlaXZlZCBhbiBBQ0sgJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOQUNLTUFDLAkJLyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICYjNDM7IE1QX0pPSU4gKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOLAkvKiBNUF9SU1Q6IG1pc3NpbmcgTVBfSk9JTiBpbiBBQ0sgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLAkvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi8KIAlNUFRDUF9NSUJfSk9JTlJFSkVDVEVELAkJLyogVGhlIFBNIHJlamVjdGVkIHRoZSBKT0lOIHJlcXVlc3QgKi8KJiM0MzsJTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELAkvKiBNUF9SU1Q6IEpPSU4gb24gbm90LWZ1bGx5LWVzdGFibGlzaGVkIG1zayAqLwogCU1QVENQX01JQl9KT0lOU1lOVFgsCQkvKiBTZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiwJLyogTm90IGFibGUgdG8gY3JlYXRlIGEgc29ja2V0IHdoZW4gc2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5UWEJJTkRFUlIsCS8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqLwpAQCAtODQsNyAmIzQzOzg5LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCQkJCQkgKiBlc3RhYmxpc2hlZCBwYWNrZXQKIAkJCQkJICovCiAJTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLLAkvKiBDb25mbGljdGluZyBUQ1Agb3B0aW9uIGVuYWJsZWQgKi8KJiM0MzsJTVBUQ1BfTUlCX01ENVNJR1JFU0VULAkJLyogTVBfUlNUOiBNRDVTSUcgZW5hYmxlZCBvbiBsaXN0ZW5lciAqLwogCU1QVENQX01JQl9EU1NGQUxMQkFDSywJCS8qIEJhZCBvciBtaXNzaW5nIERTUyAqLwomIzQzOwlNUFRDUF9NSUJfRFNTUkVTRVQsCQkvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi8KIAlNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLAkvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqLwogCU1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCwJLyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovCiAJTVBUQ1BfTUlCX1dJTlBST0JFLAkJLyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi8KZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmMKaW5kZXggZDFmNzNjM2UzOWZhMy4uOGI2ODg2ODI1NWM1MCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmMKQEAgLTY3MCw3ICYjNDM7NjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHsKIAkJaWYgKHVwZGF0ZV9zdWJmbG93cykgewogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7cG0tJmd0O2xvY2spOwotCQkJcG0tJmd0O2V4dHJhX3N1YmZsb3dzLS07CiYjNDM7CQkJaWYgKCFXQVJOX09OX09OQ0UocG0tJmd0O2V4dHJhX3N1YmZsb3dzID09IDApKQomIzQzOwkJCQlwbS0mZ3Q7ZXh0cmFfc3ViZmxvd3MtLTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7cG0tJmd0O2xvY2spOwogCQl9CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwppbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCkBAIC0yODEsOCAmIzQzOzI4MSw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCi0JCQkJc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KQomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KQogewogCXN0cnVjdCBtcHRjcF9ybV9saXN0IGFsaXN0ID0geyAubnIgPSAwIH07CiAJaW50IGFubm9fbnIgPSAwOwpAQCAtMzQwLDcgJiM0MzszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlsaXN0X2RlbF9yY3UoJmFtcDttYXRjaC0mZ3Q7bGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwogCi0JbXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7CiYjNDM7CW1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTU4MSwxNyAmIzQzOzU4MSwyMyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpCiBzdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CXUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfcnRvX21pbik7CiYjNDM7CXUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfcnRvX21heCk7CiAJdTMyIHJldHJhbnNtaXRzOwogCiYjNDM7CS8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiAmZ3Q7IHJ0b19tYXggaXMKJiM0MzsJICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuCiYjNDM7CSAqLwogCXJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAotCQkJICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTsKJiM0MzsJCQkgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTsKIAotCW1wdGNwX3NrKHNrKS0mZ3Q7dGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOICZsdDsmbHQ7IHJldHJhbnNtaXRzOwomIzQzOwltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSBydG9fbWluICZsdDsmbHQ7IHJldHJhbnNtaXRzOwogfQogCiBzdGF0aWMgdm9pZCBfX21wdGNwX3NldF90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgbG9uZyB0b3V0KQogewotCW1wdGNwX3NrKHNrKS0mZ3Q7dGltZXJfaXZhbCA9IHRvdXQgJmd0OyAwID8gdG91dCA6IFRDUF9SVE9fTUlOOwomIzQzOwltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSB0b3V0ICZndDsgMCA/IHRvdXQgOgomIzQzOwkJCQkgICBSRUFEX09OQ0UoaW5ldF9jc2soc2spLSZndDtpY3NrX3J0b19taW4pOwogfQogCiBzdGF0aWMgbG9uZyBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KQpAQCAtMzE2MSw3ICYjNDM7MzE2Nyw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKJiM0MzsJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7bXNrLSZndDtjb25uX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bXNrLSZndDtqb2luX2xpc3QpOwpAQCAtMzE3MCw3ICYjNDM7MzE3OCwxMyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAJSU5JVF9XT1JLKCZhbXA7bXNrLSZndDt3b3JrLCBtcHRjcF93b3JrZXIpOwogCW1zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDsKIAltc2stJmd0O2ZpcnN0X3BlbmRpbmcgPSBOVUxMOwotCW1zay0mZ3Q7dGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOOwomIzQzOwomIzQzOwkvKiBtc2sgZG9lcyBub3QgZ28gdGhyb3VnaCB0Y3BfaW5pdF9zb2NrKCk7IHNlZWQgUlRPIGJvdW5kcy4gKi8KJiM0MzsJaWNzay0mZ3Q7aWNza19ydG9fbWluID0KJiM0MzsJCXVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19taW5fdXMpKTsKJiM0MzsJaWNzay0mZ3Q7aWNza19ydG9fbWF4ID0KJiM0MzsJCW1zZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTsKJiM0MzsJbXNrLSZndDt0aW1lcl9pdmFsID0gaWNzay0mZ3Q7aWNza19ydG9fbWluOwogCW1zay0mZ3Q7c2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87CiAJbXNrLSZndDtiYWNrbG9nX2xlbiA9IDA7CiAJbXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7CkBAIC0zOTg4LDYgJiM0Mzs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKQogCiAJLyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi8KIAlpZiAoIW1wdGNwX2lzX2Z1bGx5X2VzdGFibGlzaGVkKHBhcmVudCkpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChwYXJlbnQpLCBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQpOwogCQlzdWJmbG93LSZndDtyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCBiM2FmMzQ2MmJkZDE2Li4wNmExMDdkNGU4MzkyIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTE0OSw4ICYjNDM7MTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJCQkgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyLAogCQkJICAgYm9vbCBlY2hvKTsKIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7Ci12b2lkIG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCi0JCQkJc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTsKIAogLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi8KIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDsKQEAgLTEyNTQsNyAmIzQzOzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiAvKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewotCWlmICgtLW1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgJmx0OyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSkKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UobXNrLSZndDtwbS5leHRyYV9zdWJmbG93cyA9PSAwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAtLW1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgJmx0OyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSkKIAkJV1JJVEVfT05DRShtc2stJmd0O3BtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uYWY4MWFkNWU2OTlkMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC05Niw2ICYjNDM7OTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAogCWxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7CiAJaWYgKGxvY2FsX2lkICZsdDsgMCkgewomIzQzOwkJU1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7CiAJCXNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE2MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJICogVENQIG9wdGlvbiBzcGFjZS4KIAkgKi8KIAlpZiAocmN1X2FjY2Vzc19wb2ludGVyKHRjcF9zayhza19saXN0ZW5lciktJmd0O21kNXNpZ19pbmZvKSkgewomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTsKIAkJc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU2Myw2ICYjNDM7NTY1LDcgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJCXU4IGhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFXTsKIAogCQlpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBKX1NZTkFDSykpIHsKJiM0MzsJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pOwogCQkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDsKIAkJCWdvdG8gZG9fcmVzZXQ7CiAJCX0KQEAgLTg2NSw2ICYjNDM7ODY4LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJICovCiAJCWlmICghY3R4IHx8IGZhbGxiYWNrKSB7CiAJCQlpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHsKJiM0MzsJCQkJaWYgKCFjdHgpCiYjNDM7CQkJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLAomIzQzOwkJCQkJCQlNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLAomIzQzOwkJCQkJCQlNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pOwogCQkJCXN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApOwogCQkJCWdvdG8gZGlzcG9zZV9jaGlsZDsKIAkJCX0KQEAgLTE0MTYsNiAmIzQzOzE0MjUsNyBAQCBzdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaykKIAkJCSAqIHN1YmZsb3dfZXJyb3JfcmVwb3J0KCkgd2lsbCBpbnRyb2R1Y2UgdGhlIGFwcHJvcHJpYXRlIGJhcnJpZXJzCiAJCQkgKi8KIAkJCXN1YmZsb3ctJmd0O3Jlc2V0X3RyYW5zaWVudCA9IDA7CiYjNDM7CQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7CiAJCQlzdWJmbG93LSZndDtyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/CiAJCQkJCQlNUFRDUF9SU1RfRU1JRERMRUJPWCA6CiAJCQkJCQlNUFRDUF9SU1RfRU1QVENQOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKaW5kZXggY2JlNTczYzRhYjNhZC4uZWE0Y2I2YzFiZDVlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCkBAIC0xMjY0LDcgJiM0MzsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZykKIAogc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKQogewotCWNoYXIgKm5leHQgPSBzdHJjaHIodHlwZSwgJiMzOTssJiMzOTspOwomIzQzOwljb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAogCWNmZ19jbXNnX3R5cGVzLmNtc2dfZW5hYmxlZCA9IDE7CkBAIC0xMjkyLDcgJiM0MzsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKQogCiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSkKIHsKLQljaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICYjMzk7LCYjMzk7KTsKJiM0MzsJY29uc3QgY2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiAJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKIAlpZiAobmV4dCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaAppbmRleCBkMTU4Njc4ZmE2YWIwLi43YTJhODUxZmEwYWRiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaApAQCAtMjEyLDggJiM0MzsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW4KIGZpCiAKIGlmICRjYXB0dXJlOyB0aGVuCi0Jcm5kaD0mIzM0OyR7bnMxOjR9JiMzNDsKLQltcHRjcF9saWJfcHJfaW5mbyAmIzM0O1BhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS0mIzM0OwomIzQzOwljYXBwcmVmaXg9JiMzNDttcHRjcF9jb25uZWN0LSR7bnMxOjR9JiMzNDsKJiM0MzsJbXB0Y3BfbGliX3ByX2luZm8gJiMzNDtwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LSYjMzQ7CiBmaQogCiBzZXRfZXRodG9vbF9mbGFncygpIHsKQEAgLTM3Miw4ICYjNDM7MzcyLDggQEAgZG9fdHJhbnNmZXIoKQogCQkJY2FwdXNlcj0mIzM0Oy1aICRTVURPX1VTRVImIzM0OwogCQlmaQogCi0JCWxvY2FsIGNhcGZpbGU9JiMzNDske3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fSYjMzQ7Ci0JCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAke2NhcHVzZXJ9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcGZpbGU9JiMzNDske2NhcHByZWZpeH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiAKIAkJaXAgbmV0bnMgZXhlYyAke2xpc3RlbmVyX25zfSB0Y3BkdW1wICR7Y2Fwb3B0fSBcCiAJCQktdyAmIzM0OyR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcCYjMzQ7ICZndDsmZ3Q7ICYjMzQ7JHtjYXBvdXR9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCmluZGV4IDVlMjIyYmE5NzdlNGUuLjNiOGQyYzhhNjIxNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYwpAQCAtMzc3LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpCiAJaW50IHJldDsKIAlpbnQgZmQ7CiAKLQlyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgJiMzNDslW146XTolZCAlW146XTolZCYjMzQ7LCBzYWRkciwgJmFtcDtzcG9ydCwgZGFkZHIsICZhbXA7ZHBvcnQpOwomIzQzOwlyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgJiMzNDslNjNbXjpdOiVkICU2M1teOl06JWQmIzM0OywKJiM0MzsJCSAgICAgc2FkZHIsICZhbXA7c3BvcnQsIGRhZGRyLCAmYW1wO2Rwb3J0KTsKIAlpZiAocmV0ICE9IDQpCiAJCWRpZV9wZXJyb3IoJiMzNDtJUCBQT1JUIFBhaXJzIGhhcyBzdHlsZSBwcm9ibGVtcyEmIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKaW5kZXggN2RjOTFmYWM0OTE3ZS4uMThjZTcxMzZhMmIwZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2gKQEAgLTc1LDYgJiM0Mzs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eAogdW5zZXQgam9pbl9jcmVhdGVfZXJyCiB1bnNldCBqb2luX2JpbmRfZXJyCiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyCiYjNDM7dW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luCiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fbXBqb2luCiYjNDM7dW5zZXQgam9pbl9hY2tfbm9fY3R4CiYjNDM7dW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWQKJiM0Mzt1bnNldCBqb2luX25vX2lkX2ZvdW5kCiYjNDM7CiYjNDM7dW5zZXQgcnN0X21kNXNpZwomIzQzO3Vuc2V0IHJzdF9kc3MKIAogdW5zZXQgZmJfbnMxCiB1bnNldCBmYl9uczIKQEAgLTk3MSw3ICYjNDM7OTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKCkKIAkJY2FwZmlsZT0kKHByaW50ZiAmIzM0O21wX2pvaW4tJTAydS0lcy5wY2FwJiMzNDsgJiMzNDskTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiYjMzQ7ICYjMzQ7JG5zJiMzNDspCiAKIAkJZWNobyAmIzM0O0NhcHR1cmluZyB0cmFmZmljIGZvciB0ZXN0ICRNUFRDUF9MSUJfVEVTVF9DT1VOVEVSIGludG8gJGNhcGZpbGUmIzM0OwotCQlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgdGNwZHVtcCAtaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJGNhcHVzZXIgLXcgJiMzNDskY2FwZmlsZSYjMzQ7ICZndDsgJiMzNDskY2Fwb3V0JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMmIzM0OyB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgJiMzNDskY2FwZmlsZSYjMzQ7ICZndDsgJiMzNDskY2Fwb3V0JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKIAkJY2FwcGlkPSQhCiAKIAkJc2xlZXAgMQpAQCAtMTM1Myw2ICYjNDM7MTM2MSw4IEBAIGNoa19yc3RfbnIoKQogCWxvY2FsIHJzdF90eD0kMQogCWxvY2FsIHJzdF9yeD0kMgogCWxvY2FsIG5zX2ludmVydD0kezM6LSYjMzQ7JiMzNDt9CiYjNDM7CWxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9CiYjNDM7CWxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9CiAJbG9jYWwgY291bnQKIAlsb2NhbCBuc190eD0kbnMxCiAJbG9jYWwgbnNfcng9JG5zMgpAQCAtMTM4OSw2ICYjNDM7MTM5OSwyMSBAQCBjaGtfcnN0X25yKCkKIAllbHNlCiAJCXByaW50X29rCiAJZmkKJiM0MzsKJiM0MzsJIyBNUFRDUF9SU1RfRU1QVENQIHJlc2V0LWV2ZW50IGNvdW50ZXJzOyBkZWZhdWx0IDAsIGdhdGVkIG9uCiYjNDM7CSMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyCiYjNDM7CSMgKHNlcnZlciksIERzc1Jlc2V0IG9uIHRoZSBkYXRhIHJlY2VpdmVyIChjbGllbnQpLgomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1ENVNpZ1Jlc2V0JiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JG1kNXNpZyYjMzQ7IF07IHRoZW4KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7TUQ1U2lnUmVzZXQmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9ICYjMzQ7TVBUY3BFeHREc3NSZXNldCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRkc3MmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludF9jaGVjayAmIzM0O0Rzc1Jlc2V0JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzcyYjMzQ7CiYjNDM7CWZpCiB9CiAKIGNoa19pbmZpX25yKCkKQEAgLTE1ODcsNiAmIzQzOzE2MTIsMTEgQEAgY2hrX2pvaW5fbnIoKQogCWxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfQogCWxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9CiAJbG9jYWwgY29ycnVwdGVkX3BrdHM9JHtqb2luX2NvcnJ1cHRlZF9wa3RzOi0wfQomIzQzOwlsb2NhbCBzeW5hY2tfbm9fbXBqb2luPSR7am9pbl9zeW5hY2tfbm9fbXBqb2luOi0wfQomIzQzOwlsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfQomIzQzOwlsb2NhbCBhY2tfbm9fY3R4PSR7am9pbl9hY2tfbm9fY3R4Oi0wfQomIzQzOwlsb2NhbCBub3RfZXN0YWJsaXNoZWQ9JHtqb2luX25vdF9lc3RhYmxpc2hlZDotMH0KJiM0MzsJbG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfQogCWxvY2FsIHJjPSR7S1NGVF9QQVNTfQogCWxvY2FsIGNvdW50CiAJbG9jYWwgd2l0aF9jb29raWUKQEAgLTE2NTUsNiAmIzQzOzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKQogCQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqJiMzNDsKIAlmaQogCiYjNDM7CSMgUGVyLWV2ZW50IE1QVENQX1JTVF9FTVBUQ1AgSk9JTiBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvbgomIzQzOwkjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IHRoZSAqU3luQWNrKiBvbmUgZmlyZXMgb24gdGhlCiYjNDM7CSMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLgomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gJiMzNDtNUFRjcEV4dE1QSm9pblN5bkFja05vTVBKb2luJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JHN5bmFja19ub19tcGpvaW4mIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7c3luYWNrIG5vIG1wam9pbiYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gc3luYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkc3luYWNrX25vX21wam9pbiYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSAmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW4mIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskYWNrX25vX21wam9pbiYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDthY2sgbm8gbXBqb2luJiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5BY2tOb0N0eCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRhY2tfbm9fY3R4JiMzNDsgXTsgdGhlbgomIzQzOwkJcmM9JHtLU0ZUX0ZBSUx9CiYjNDM7CQlwcmludF9jaGVjayAmIzM0O2FjayBubyBjdHgmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIGFjayBubyBjdHggZXhwZWN0ZWQgJGFja19ub19jdHgmIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbk5vdEVzdGFibGlzaGVkJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JG5vdF9lc3RhYmxpc2hlZCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtqb2luIG5vdCBlc3RhYmxpc2hlZCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gbm90IGVzdGFibGlzaGVkIGV4cGVjdGVkICRub3RfZXN0YWJsaXNoZWQmIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRub19pZF9mb3VuZCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtqb2luIG5vIGlkIGZvdW5kJiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmQmIzM0OwomIzQzOwlmaQomIzQzOwogCXByaW50X3Jlc3VsdHMgJiMzNDtqb2luIFJ4JiMzNDsgJHtyY30KIAogCWpvaW5fc3luX3R4PSYjMzQ7JHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fSYjMzQ7IFwKQEAgLTIzNTksNiAmIzQzOzI0MjcsMzEgQEAgc2lnbmFsX2FkZHJlc3NfdGVzdHMoKQogCQkJY2hrX2FkZF9uciA0IDQKIAkJZmkKIAlmaQomIzQzOwomIzQzOwkjIHNpZ25hbGxlZCBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGNsaWVudCwgd2hlcmUgYSBUQ1Atb25seQomIzQzOwkjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50JiMzOTtzIE1QX0pPSU4gcm91dGVzIGxvY2FsbHkKJiM0MzsJIyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uCiYjNDM7CSMgTVBKb2luU3luQWNrTm9NUEpvaW4gaW5jcmVtZW50cyBvbiB0aGUgY2xpZW50IHNpZGUuCiYjNDM7CWlmIHJlc2V0ICYjMzQ7c2lnbmFsIGFkZHJlc3MsIFRDUC1vbmx5IGxpc3RlbmVyIG9uIGNsaWVudCYjMzQ7OyB0aGVuCiYjNDM7CQlsb2NhbCBleHRyYV9iaW5kCiYjNDM7CQlsb2NhbCBwb3J0CiYjNDM7CiYjNDM7CQlwbV9ubF9zZXRfbGltaXRzICRuczEgMCAxCiYjNDM7CQlwbV9ubF9zZXRfbGltaXRzICRuczIgMSAxCiYjNDM7CQlwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWwKJiM0MzsKJiM0MzsJCXBvcnQ9JChnZXRfcG9ydCkKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJHtuczJ9IC4vbXB0Y3BfY29ubmVjdCAtbCAtdCAtMSAtcCAmIzM0OyRwb3J0JiMzNDsgXAomIzQzOwkJCS1zIFRDUCAxMC4wLjIuMiAmYW1wOwomIzQzOwkJZXh0cmFfYmluZD0kIQomIzQzOwkJbXB0Y3BfbGliX3dhaXRfbG9jYWxfcG9ydF9saXN0ZW4gJiMzNDskbnMyJiMzNDsgJiMzNDskcG9ydCYjMzQ7CiYjNDM7CiYjNDM7CQlydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xCiYjNDM7CQlqb2luX3N5bmFja19ub19tcGpvaW49MSBqb2luX3N5bl90eD0xIFwKJiM0MzsJCQljaGtfam9pbl9uciAwIDAgMAomIzQzOwomIzQzOwkJa2lsbCAke2V4dHJhX2JpbmR9IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiB9CiAKIGxhbWluYXJfZW5kcF90ZXN0cygpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaAppbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2gKQEAgLTI0LDYgJiM0MzsyNCw3IEBAIHNtYWxsPSYjMzQ7JiMzNDsKIHNvdXQ9JiMzNDsmIzM0OwogY291dD0mIzM0OyYjMzQ7CiBjYXBvdXQ9JiMzNDsmIzM0OwomIzQzO2NhcHByZWZpeD0mIzM0OyYjMzQ7CiBzaXplPTAKIAogdXNhZ2UoKSB7CkBAIC03MCw2ICYjNDM7NzEsMTEgQEAgc2V0dXAoKQogCiAJbXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczMKIAomIzQzOwlpZiAkY2FwdHVyZTsgdGhlbgomIzQzOwkJY2FwcHJlZml4PSYjMzQ7c2ltdWx0X2Zsb3dzLSR7bnMxOjR9JiMzNDsKJiM0MzsJCW1wdGNwX2xpYl9wcl9pbmZvICYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS0mIzM0OwomIzQzOwlmaQomIzQzOwogCWlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgJiMzNDskbnMxJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zICYjMzQ7JG5zMiYjMzQ7CiAJaXAgbGluayBhZGQgbnMxZXRoMiBuZXRucyAmIzM0OyRuczEmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDIgbmV0bnMgJiMzNDskbnMyJiMzNDsKIAlpcCBsaW5rIGFkZCBuczJldGgzIG5ldG5zICYjMzQ7JG5zMiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMzZXRoMSBuZXRucyAmIzM0OyRuczMmIzM0OwpAQCAtMTM2LDE1ICYjNDM7MTQyLDE0IEBAIGRvX3RyYW5zZmVyKCkKIAogCWlmICRjYXB0dXJlOyB0aGVuCiAJCWxvY2FsIGNhcHVzZXIKLQkJbG9jYWwgcm5kaD0mIzM0OyR7bnMxOjR9JiMzNDsKIAkJaWYgWyAteiAkU1VET19VU0VSIF0gOyB0aGVuCiAJCQljYXB1c2VyPSYjMzQ7JiMzNDsKIAkJZWxzZQogCQkJY2FwdXNlcj0mIzM0Oy1aICRTVURPX1VTRVImIzM0OwogCQlmaQogCi0JCWxvY2FsIGNhcGZpbGU9JiMzNDske3JuZGh9LSR7cG9ydH0mIzM0OwotCQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtjYXBwcmVmaXh9LSR7cG9ydH0mIzM0OwomIzQzOwkJbG9jYWwgY2Fwb3B0PSYjMzQ7LWkgYW55IC1zIDEwOCAtQiAzMjc2OCAke2NhcHVzZXJ9JiMzNDsKIAogCQlpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXAmIzM0OyAgJmd0OyZndDsgJiMzNDske2NhcG91dH0mIzM0OyAyJmd0OyZhbXA7MSAmYW1wOwogCQlsb2NhbCBjYXBwaWRfbGlzdGVuZXI9JCEKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmYWlyIGJpdCBvZiB0aGUgTVBUQ1Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiB0aGUgaGVhZGVycywgTUlCIChNYW5hZ2VtZW50IEluZm9ybWF0aW9uIEJhc2UpIGludGVyYWN0aW9ucywgcGF0aCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNvcmUgcHJvdG9jb2wgbG9naWMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgbWl4IG9mIGNsZWFudXAsIG9ic2VydmFiaWxpdHkgaW1wcm92ZW1lbnRzLCBhbmQgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50cyB0byB0aGUgVENQL01QVENQIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zLgoKRmlyc3QsIEkgc2VlIHRoZSByZW1vdmFsIG9mIGBkYXRhX2Fja2AgYW5kIGBkYXRhX2FjazMyYCBmcm9tIGBtcHRjcF9leHRgIGFuZCBpdHMgdHJhY2Vwb2ludC4gVGhpcyBpcyBsaWtlbHkgYSBzaW1wbGlmaWNhdGlvbiBvciByZWZhY3RvcmluZywgYXNzdW1pbmcgdGhvc2UgZmllbGRzIHdlcmUgZWl0aGVyIHJlZHVuZGFudCBvciBubyBsb25nZXIgcmVsZXZhbnQuIFRoZXNlIGFyZSBjb3NtZXRpYywgdW5saWtlbHkgdG8gYmUgaW1wYWN0ZnVsLgoKVGhlIGFkZGl0aW9uIG9mIG5ldyBTTk1QIE1JQiBjb3VudGVycyBpcyBwcmltYXJpbHkgYWJvdXQgcHJvdmlkaW5nIGJldHRlciB2aXNpYmlsaXR5IGludG8gTVBUQ1AmIzM5O3MgaW50ZXJuYWwgc3RhdGUuIFRoaXMgaXMgZ29vZCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgdGhlIGFkZGl0aW9uIGl0c2VsZiB3b24mIzM5O3QgYmUgc29tZXRoaW5nIHRvIGZ1enogZGlyZWN0bHkuIFRoaXMgaXMgZ29vZCBzdHVmZi4KCk5vdywgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpcyB0aGUgY29kZSBpbiBgbmV0L21wdGNwL3BtLmNgIHdpdGggdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UocG0tJmd0O2V4dHJhX3N1YmZsb3dzID09IDApYCBjaGVjayBiZWZvcmUgZGVjcmVtZW50aW5nLiBUaGlzIGlzIGEgcG90ZW50aWFsIGJ1ZyB0cmFwLiBUaGlzIGlzIHNjcmVhbWluZyBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiBpbmRpY2F0ZSBhIHByb2JsZW0gaW4gaG93IHRoZSBrZXJuZWwgaXMgdHJhY2tpbmcgc3ViZmxvd3MuIERlZmluaXRlbHkgYSBoaWdoIHByaW9yaXR5IGFyZWEuCgpUaGUgcmVuYW1lIG9mIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgYW5kIG1ha2luZyBpdCBgc3RhdGljYCBpbiBgcG1fdXNlcnNwYWNlLmNgIGlzIGp1c3QgY29kZSBoeWdpZW5lLgoKVGhlIGNoYW5nZXMgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBhcmUgd2hhdCBJJiMzOTttIHJlYWxseSBmb2N1c2luZyBvbi4gVGhlIHNoaWZ0IHRvIHVzaW5nIGBpY3NrLSZndDtpY3NrX3J0b19taW5gIGFuZCBgaWNzay0mZ3Q7aWNza19ydG9fbWF4YCAoYmFzZWQgb24gc3lzdGVtIHR1bmluZyB3aXRoIGBzeXNjdGxfdGNwX3J0b19taW5fdXNgIGFuZCBgc3lzY3RsX3RjcF9ydG9fbWF4X21zYCkgaW5zdGVhZCBvZiBoYXJkY29kZWQgVENQIFJUTyB2YWx1ZXMgaW4gYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBgX19tcHRjcF9zZXRfdGltZW91dGAgYW5kIGBfX21wdGNwX2luaXRfc29ja2AgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFsbG93aW5nIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byAqdHVuZSogdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHRocm91Z2ggdGhlIHN5c3RlbSB3aWRlIG5ldHdvcmsgcGFyYW1ldGVycy4gVGhpcyBjaGFuZ2VzIHRoZSB0aW1pbmcgb2YgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCB3aGljaCBjYW4gYmUgZ29vZCBvciBiYWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgbmV0d29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdHJ5IGFuZCBnZW5lcmF0ZSB0aW1pbmcgcmVsYXRlZCBpc3N1ZXMuIFRoZXNlIFJUTyBjaGFuZ2VzIHdpbGwgbGlrZWx5IGFmZmVjdCBvdmVyYWxsIGNvbm5lY3Rpb24gcGVyZm9ybWFuY2UgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMsIHNvIHRoaXMgYmVhcnMgY2xvc2VyIHNjcnV0aW55LgoKVGhlIGluY3JlbWVudCBvZiBgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEYCBpbiBgbXB0Y3BfZmluaXNoX2pvaW5gIGlzIGZvciBtb25pdG9yaW5nIHB1cnBvc2VzIGFuZCBsaWtlbHkgd29uJiMzOTt0IGFmZmVjdCB1cy4KCkluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIHRoZSBgV0FSTl9PTl9PTkNFYCBjaGVjayBpcyByZXBlYXRlZCwgYW5kIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgaGFzIGdvbmUgYXdheS4KClRoZSBpbmNyZW1lbnRpbmcgb2YgdmFyaW91cyBNSUIgY291bnRlcnMgaW4gYHN1YmZsb3cuY2AgYmFzZWQgb24gZGlmZmVyZW50IGNvbm5lY3Rpb24gc3RhdGVzIChlLmcuLCBgTVBKT0lOTk9JREZPVU5EYCwgYE1ENVNJR1JFU0VUYCwgZXRjLikgaXMgcHVyZWx5IGZvciBTTk1QL01JQiByZXBvcnRpbmcgYW5kIG1vbml0b3JpbmcgYW5kIGlzIG5vdCBhIHByaW9yaXR5IGZvciBmdXp6aW5nLgoKTXkgcHJpb3JpdGllcyBmb3IgZnV6emluZzoKCjEuICAqKlRyaWdnZXJpbmcgdGhlIGBXQVJOX09OX09OQ0VgKio6IEkgd2FudCB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYHBtLSZndDtleHRyYV9zdWJmbG93c2AgZ28gdG8gemVybyB1bmV4cGVjdGVkbHkgYmVmb3JlIHRoZSBkZWNyZW1lbnQgaGFwcGVucy4gVGhpcyBsaWtlbHkgbWVhbnMgY29ycnVwdGluZyB0aGUgc3ViZmxvdyBhY2NvdW50aW5nIG9yIGNhdXNpbmcgdGhlIHJlbW92YWwgb2YgYW4gZXh0cmEgc3ViZmxvdy4gVGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGluY2x1ZGUgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGFuZCBpdHMgY2FsbGVycyAoYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgLCBgbXB0Y3BfcG1fbmxfcm1fc3ViZmxvd19yZWNlaXZlZGAsIGV0Yy4pIHNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gc3ViZmxvdyBtYW5hZ2VtZW50LgoyLiAgKipFeHBsb3JpbmcgdGhlIFJUTyBCb3VuZHMgQ2hhbmdlKio6IEkgbmVlZCB0byB0ZXN0IGhvdyB0aGUgbmV3IFJUTyBjYWxjdWxhdGlvbnMgaW1wYWN0IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy4gSSB3aWxsIGZvY3VzIG9uIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgLgoKSSYjMzk7bGwgYmUgc3RhcnRpbmcgYnkgbG9va2luZyBpbnRvIHRoZSBjYWxscyBpbiBgbmV0L21wdGNwL3BtLmNgIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3Igc3ViZmxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz02NjI9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02ODQtXHRpZiAodXBkYXRlX3N1YmZsb3dzKVxubmV0L21wdGNwL3BtLmM6Njg1Olx0XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wbS5jLTY4Ni1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjUwPXU4IG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjUyLS8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNTQte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyNjA9c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNjM6XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBNUFRDUCBGbG93IE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZyB3aXRoaW4gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCBzZWVtIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBsaWtlbHkgaGFuZGxlIHRoZSBzdWJmbG93IG1hbmFnZW1lbnQsIHdoaWNoIGlzIG9mdGVuIGEgYm90dGxlbmVjay4gSG93ZXZlciwgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhvc2UsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IHRoZSByb2xlIG9mIHRpbWVvdXQgbWVjaGFuaXNtcy4gSSB3aWxsIGNoZWNrIGJvdGggYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgIGFuZCBgX19tcHRjcF9zZXRfdGltZW91dGAgdG8gc2VlIGlmIHRob3NlIHJvdXRpbmVzIGFyZSBwYXJ0IG9mIHRoZSBib3R0bGVuZWNrLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aW1lb3V0cyBhcmUgY29udHJpYnV0aW5nIHRvIGEgbmVnYXRpdmUgc3ViZmxvdyBleHBlcmllbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTU2MT1zdGF0aWMgYm9vbCBtcHRjcF9wZW5kaW5nX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaywgdTY0ICpzZXEpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6NTgxOnN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTIwPXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMS1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMwMDI6XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDAzLVx0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxOTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTVBUQ1AgUmV0cmFuc21pc3Npb24gVGltZW91dHMqKgoKT2theSwgc28gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaGFuZGxpbmcgcmV0cmFuc21pc3Npb25zIGluIE1QVENQLCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBfX21wdGNwX3NldF90aW1lb3V0YCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGltZW91dCBjb25maWd1cmF0aW9uIGluIHRoaXMgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHRpbWVvdXQgbWVjaGFuaXNtcyBhcmUgcmVhbGx5IHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHRpbWVvdXRzIGFyZSBzZXQgaXMga2V5IHRvIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYW5kIGRpYWdub3NpbmcgYW55IGNvbmdlc3Rpb24tcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBgX19tcHRjcF9zZXRfdGltZW91dGAgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lb3V0IHR5cGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3Bfc2V0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTU4MT1zdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01OTYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo1OTc6c3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTU5OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NjExPXN0YXRpYyB2b2lkIG1wdGNwX3NldF90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTctXHRcdHRvdXQgPSBtYXgodG91dCwgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coc3ViZmxvdykpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NjE4Olx0X19tcHRjcF9zZXRfdGltZW91dChzaywgdG91dCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTktfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODc9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjI4LVx0fVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTYyOTpcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTYzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgVGltZW91dCBhbmQgU3ViZmxvdyBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aW1lb3V0IG1lY2hhbmlzbXMgYW5kIHN1YmZsb3cgbWFuYWdlbWVudCBhcmUgaGFuZGxlZCB3aXRoaW4gTVBUQ1AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBJdCBzZWVtcyB0aGF0IGJvdGggYG1wdGNwX3NldF90aW1lb3V0YCBhbmQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIHV0aWxpemUgdGhlIGBfX21wdGNwX3NldF90aW1lb3V0YCBmdW5jdGlvbiwgd2hpY2ggd2FycmFudHMgYSBjbG9zZXIgaW5zcGVjdGlvbiBvZiB0aG9zZSBjYWxsaW5nIHBvaW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIG1pZ2h0IGJlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGZvY3VzIG9uIHRoYXQgb25lIGZvciBub3cuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gYXJlYXMsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YC4gUmlnaHQsIEkgcmVjYWxsIGl0IHdhcyBvcmlnaW5hbGx5IG5hbWVkIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAsIGFuZCBpdCBoYXMgc2luY2UgYmVlbiBtYWRlIHN0YXRpYy4gVGhhdCYjMzk7cyByZWxldmFudC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBub3cgY2FsbGVkIGZyb20gYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGF0IGNoYWluIG9mIGNhbGxzLCBhcyBJJiMzOTttIHRoaW5raW5nIG9mIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSBiZWluZyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yODQ9c3RhdGljIHZvaWRcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyODU6bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjg2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMwNT1pbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzQzLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjM0NDpcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zNDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVBUQ1AgUmVtb3ZhbCoqCgpSaWdodCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzIG9mIE1QVENQLiBJJiMzOTt2ZSBzZWVuIHRoYXQgbmFtZSBjb21lIHVwIGluIHRoZSBrZXJuZWwgY29kZSBiZWZvcmUsIGFuZCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IGl0IGludGVyYWN0cyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgTVBUQ1AgcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4KCkJlZm9yZSBJIGp1bXAgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIGhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBmb3IgdGhlIGVzc2VudGlhbCBNUFRDUCBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWVkZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBtb2R1bGVzIGludm9sdmVkIGFuZCB0aGUgZGVwZW5kYW5jaWVzIHRoZXkgbWF5IGhhdmUuIFRoYXQgbWF5IHF1aWNrbHkgY2xhcmlmeSBpZiBzb21ldGhpbmcgZWxzZSBpcyBhdCBwbGF5LCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSB0aGF0IEkgc2hvdWxkIGxvb2sgaW50by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBNUFRDUGAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bGwgaGVhZCBpcyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGtleSBtb2R1bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93ICpleGFjdGx5KiB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgTVBUQ1BgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSB0aG9zZSByZWxhdGlvbnNoaXBzIHByZXR0eSBjbGVhcmx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE1QVENQYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHBhdGNoIGRldGFpbHMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoaW5ncyBsaWtlIFJUTyBib3VuZHMgYW5kIGBXQVJOX09OX09OQ0VgIHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHRvIHRhcmdldDogYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGxvb2sgbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBleHBvc2luZyBzdWJ0bGUgYnVncy4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBBaCwgeWVzLCBpdCYjMzk7cyByaWdodCBoZXJlIGluIGBwcm90b2NvbC5oYC4gVGhhdCBtZWFucyBJIGNhbiYjMzk7dCBmdXp6IGl0IGRpcmVjdGx5LCBhcyB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgc3Vic3RpdHV0ZSBpdHMgZnVuY3Rpb25hbGl0eSBhdCB0aGUgY2FsbCBzaXRlLiBOb3QgaWRlYWwsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGF0IGxpbWl0YXRpb24uCgpBbHJpZ2h0LCBpZiBgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgaXMgb2ZmIHRoZSB0YWJsZSwgd2hhdCBhYm91dCBgbXB0Y3BfcG1fbmxfcm1fc3ViZmxvd19yZWNlaXZlZGA/IFRoYXQgbWlnaHQgYmUgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9jbG9zZV9zdWJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz02NjI9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02ODQtXHRpZiAodXBkYXRlX3N1YmZsb3dzKVxubmV0L21wdGNwL3BtLmM6Njg1Olx0XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wbS5jLTY4Ni1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zOTk0PWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDUzLVx0aWYgKCFyZXQpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQwNTQ6XHRcdG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwNTUtZXJyX3Byb2hpYml0ZWQ6XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTI1MD11OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1Mi0vKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTI1MzpzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjU0LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjU5LVxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI2MDpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2MS17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNjM6XHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjE4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzIzLVx0ICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3MjQ6XHRtcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjUtXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUxMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipGb2N1c2luZyBJbiBvbiBNUFRDUCBTdWJmbG93IENvbm5lY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIE1QVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcG9pbnRzIGluIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBtcHRjcF9maW5pc2hfam9pbmAgYW5kIGBfX21wdGNwX3N1YmZsb3dfY29ubmVjdGAgZnVuY3Rpb25zLiBUaGVzZSBzZWVtIGxpa2UgY3JpdGljYWwgcG9pbnRzIGluIHRoZSBzdWJmbG93IGpvaW5pbmcgcHJvY2VzcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gaGF2ZSBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZy4gSSYjMzk7bGwgYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBzaW5jZSBpdCBsb29rcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgZmxvdyBhbmQgaXMgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc2VsZWN0aW5nIGFuZCB2YWxpZGF0aW5nIHRoZSBuZXh0IHN1YmZsb3cuCgpJbiBhZGRpdGlvbiwgc2luY2UgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgY29ubmVjdGlvbi9kaXNjb25uZWN0aW9uIGlzc3VlcywgSSBzaG91bGQgYWxzbyBjaGVjayBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN1YmZsb3dzIGFyZSByZW1vdmVkIGFzIHdlbGwsIHRvIGJlIGFibGUgdG8gaGF2ZSBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYz05Mj1jb25zdCBzdHJ1Y3QgZ2VubF9vcHMgbXB0Y3BfcG1fbmxfb3BzWzExXSA9IHtcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTU4LVx0XHQudmFsaWRhdGVcdD0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYzoxNTk6XHRcdC5kb2l0XHRcdD0gbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQsXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTYwLVx0XHQucG9saWN5XHRcdD0gbXB0Y3BfcG1fcmVtb3ZlX25sX3BvbGljeSxcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg9NTI9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NTM6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTU0LWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTI4NT1tcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzA0LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjMwNTppbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBOZXRsaW5rIENhbGxiYWNrIGFuZCBTdWJmbG93IEhhbmRsaW5nKioKClJpZ2h0LCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBUaGF0JiMzOTtzIGEgbmV0bGluayBgZG9pdGAgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBmb3IgYSAmIzM0O3JlbW92ZSYjMzQ7IG9wZXJhdGlvbiwgd2hpY2ggbWVhbnMgaXQgZGVhbHMgd2l0aCBkZWxldGluZyBzb21ldGhpbmcuIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSBvZnRlbiB3aGVyZSB5b3UgY2FuIHN0YXJ0IGRpZ2dpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpNeSBuZXh0IHN0ZXAsIGFuZCB0aGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQsIGlzIHRvIGNoZWNrIGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYC4gVGhlIGdvYWwsIGluIGNvbnRleHQsIGlzIHRvIGRldGVybWluZSB3aGljaCBwcm9jZXNzZXMgaW50ZXJhY3QuIFNpbmNlIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAgaXMgaW52b2x2ZWQgaW4gcmVtb3Zpbmcgc29tZXRoaW5nLCBpdCBzdGFuZHMgdG8gcmVhc29uIHRoYXQgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIG1pZ2h0IGJlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zdWJmbG93X2dldF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTY2PWJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTg2LSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTU4NzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU4OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwNi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2MDc6XHRcdHRyYWNlX21wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjA4LVx0XHRzc2sgPSAgbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04NTc9dm9pZCBtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTg1OC1cdFx0XHRcdCBib29sIHNjaGVkdWxlZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4NTk6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04NjAtc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4tLVxubmV0L21wdGNwL3NjaGVkLmM9MTk9c3RhdGljIGludCBtcHRjcF9zY2hlZF9kZWZhdWx0X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3NjaGVkLmMtMjItXG5uZXQvbXB0Y3Avc2NoZWQuYzoyMzpcdHNzayA9IG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQobXNrKTtcbm5ldC9tcHRjcC9zY2hlZC5jLTI0LVx0aWYgKCFzc2spXG4tLVxubmV0L21wdGNwL3NjaGVkLmM9MTY4PWludCBtcHRjcF9zY2hlZF9nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9zY2hlZC5jLTE3My1cbm5ldC9tcHRjcC9zY2hlZC5jOjE3NDpcdC8qIHRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgbW92ZWQgb3V0IG9mIG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQgKi9cbm5ldC9tcHRjcC9zY2hlZC5jLTE3NS1cdGlmIChfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgU2NoZWR1bGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTVBUQ1Agc3ViZmxvd3MgYXJlIG1hbmFnZWQgZm9yIHNlbmRpbmcgZGF0YS4gSXQgbG9va3MgbGlrZSBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbXB0Y3Bfc2NoZWRfZGVmYXVsdF9nZXRfc2VuZGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZWZhdWx0IHNjaGVkdWxlciBsaWtlbHkgbmVlZHMgdG8gZ2V0IGEgc3ViZmxvdyB0byBhY3R1YWxseSAqZG8qIHRoZSBzZW5kaW5nLiBUaGVuLCBsZXQgbWUgdGhpbmsgYSBtb21lbnQsIGBtcHRjcF9zY2hlZF9nZXRfc2VuZGAgc2VlbXMgbGlrZSBhbm90aGVyIGxpa2VseSBmdW5jdGlvbiBmb3IgbWUgdG8gbG9vayBpbnRvLCBpZiBJIHdhbnQgdG8gZGl2ZSBmdXJ0aGVyIGludG8gdGhlIHNjaGVkdWxpbmcgcHJvY2Vzcy4KCkJ1dCwgYmVmb3JlIEkgZ2V0IGxvc3QgaW4gdGhlIGJyb2FkZXIgc2NoZWR1bGluZyBsb2dpYywgYSBxdWljayBjaGVjayBvbiBgX19tcHRjcF9yZXRyYW5zYCBzZWVtcyBlc3NlbnRpYWwuIFJldHJhbnNtaXNzaW9ucyBjYW4gc2lnbmlmaWNhbnRseSBhZmZlY3Qgc3ViZmxvdyBzZWxlY3Rpb24gYW5kIHByaW9yaXRpemF0aW9uLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgc28gdW5kZXJzdGFuZGluZyBob3cgcmV0cmFuc21pc3Npb25zIGFyZSBoYW5kbGVkIHJlbGF0aXZlIHRvIHN1YmZsb3cgc2VsZWN0aW9uIGlzIGxpa2VseSB2ZXJ5IGltcG9ydGFudC4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGFuYWx5c2lzIGNvbnNpZGVycyB0aGF0LiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBjb21lIGJhY2sgdG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0xMDcwPW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA5MS1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA5MjpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA5My1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI1MTk9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTUzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjU1NDpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU1NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzOD1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODg6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODktXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODU4PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTE5LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkyMDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkyMS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Ni1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDc6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzExOT1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTYtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE1NzpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTgtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgwNz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODM5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NDA6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NDEtXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgxMz12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxNS1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjgxNjpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxNy12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUmV0cmFuc21pc3Npb24gT3Bwb3J0dW5pdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBNUFRDUCBjb2RlLCBgX19tcHRjcF9yZXRyYW5zYCBpbW1lZGlhdGVseSBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxpdmVzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgZm9yIHRoaXMuCgpCdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGVyZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYF9fbXB0Y3BfaW5pdF9zb2NrYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gUmV0cmFuc21pc3Npb25zIGFyZSBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIHByb3BlciBzb2NrZXQgc2V0dXAsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgc3RhdGUgaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIHJvb3QgY2F1c2UgbGllcyBpbiBob3cgdGhlIHNvY2tldCBpcyBiZWluZyBjb25maWd1cmVkLiBBIHF1aWNrIHJldmlldyBjYW4gc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX2luaXRfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzExOT1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTY4OnN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjkte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMyMjQ9c3RhdGljIGludCBtcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyMjgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMjI5Olx0X19tcHRjcF9pbml0X3NvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzIzMC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI0NjpcdC8qIGZldGNoIHRoZSBjYSBuYW1lOyBkbyBpdCBvdXRzaWRlIF9fbXB0Y3BfaW5pdF9zb2NrKCksIHNvIHRoYXQgY2xvbmUgd2lsbFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0Ny1cdCAqIHByb3BhZ2F0ZSB0aGUgY29ycmVjdCB2YWx1ZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM2OTY9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzE0Olx0X19tcHRjcF9pbml0X3NvY2sobnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1QVENQIFNvY2tldCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE1QVENQIHNvY2tldHMgYXJlIGluaXRpYWxpemVkLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBib3RoIGBtcHRjcF9pbml0X3NvY2tgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdWx0aW1hdGVseSByZWx5IG9uIGEgY29tbW9uIGZ1bmN0aW9uOiBgX19tcHRjcF9pbml0X3NvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVkdWNlcyByZWR1bmRhbmN5IGFuZCBsaWtlbHkgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LiBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBzcGVjaWZpY2FsbHkgdGFnZ2VkIGFzIHRoZSBzb2NrZXQgaW5pdCBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3ViZmxvd3MgYXJlIGhhbmRsZWQuIFRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpcyBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YC4gVGhpcyBzb3VuZHMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIHN1YmZsb3cgdG8gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTY0NT12b2lkIG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy02NjEtXG5uZXQvbXB0Y3AvcG0uYzo2NjI6dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTY2My1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3NDQ9dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI3NTgtXHQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3NTk6XHRtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQobXB0Y3Bfc2soc2spLCBzdWJmbG93KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI3NjAtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTExNT1ib29sIG1wdGNwX3BtX25sX2NoZWNrX3dvcmtfcGVuZGluZyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjExMTY6dm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1QVENQIENvZGUgUmVhY2hhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgY2FuIGFuYWx5emUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjb3JlIE1QVENQIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgZ2V0cyBjYWxsZWQgZnJvbSBgbXB0Y3BfY2xvc2Vfc3NrYCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGUgY29ubmVjdC4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAsIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAsIGBtcHRjcF9maW5pc2hfam9pbmAsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX2luaXRfc29ja2AuCgpMZXQmIzM5O3Mgc2VlOiBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCBtYWtlcyBzZW5zZS4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBjbG9zaW5nIHN1YmZsb3dzLCB3aGljaCBpcyBpbXBvcnRhbnQuIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBqb2luIGlzIGNvbXBsZXRlZC4gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgb24gcmV0cmFuc21pc3Npb25zLCBhIGNydWNpYWwgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgd2hlbiB3ZSBjcmVhdGUgYW4gTVBUQ1Agc29ja2V0LgoKTm93LCBmb3IgY29uZmlndXJhdGlvbiwgb2J2aW91c2x5LCBgTVBUQ1BgIGlzIHRoZSBiaWcgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3Mgc3VmZmljaWVudCB0byBidWlsZCBhbmQgdGVzdCB0aGVzZSBmZWF0dXJlcy4gQWgsIHJpZ2h0LCBgTVBUQ1BgIGRlcGVuZHMgb24gYElORVRgIHdoaWNoIEkga25ldywgYW5kIGBNUFRDUF9JUFY2YCB3b3VsZCBiZSB1c2VmdWwgZm9yIElQdjYgdGVzdGluZywgc28gSSYjMzk7bGwgYmUgaW5jbHVkaW5nIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwNwoJCQkJCQkJb3V0cHV0OiAyOTEKCQkJCQkJCXRob3VnaHRzOiAxNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFBhdGNoIEFuYWx5c2lzOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBtYWluIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkIGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAsIHNvIHRoYXQmIzM5O3MgdGhlIHNjb3BlIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc3RpY2sgb3V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIGBleHRyYV9zdWJmbG93c2AgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIHRoZSBzdGF0aWMgaW5saW5lIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB3aGljaCBpcyBjYWxsZWQgZnJvbSAgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGhhcmRlbiBzdWJmbG93IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBudW1iZXIgb2YgZXh0cmEgc3ViZmxvd3MgbWlnaHQgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgY3JpdGljYWwuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBjb25kaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgd2FybmluZ3MgZG9uJiMzOTt0IGZpcmUgc3B1cmlvdXNseSB1bmRlciBub3JtYWwgb3IgZXZlbiBhZHZlcnNhcmlhbCBjb25kaXRpb25zLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IFJUTyBib3VuZHMgYXJlIHNlZWRlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21wdGNwX2luaXRfc29ja2AsICBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgKHdoaWNoIGlzIGNhbGxlZCBieSBgX19tcHRjcF9yZXRyYW5zYCkgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byB1dGlsaXplIHN5c2N0bCB2YWx1ZXMgZm9yIGBpY3NrX3J0b19taW5gIGFuZCBgaWNza19ydG9fbWF4YCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgdmFsdWVzLiBUaGlzIGlzIGxpa2VseSBhaW1lZCBhdCBpbXByb3ZpbmcgYWRhcHRhYmlsaXR5IHRvIGRpZmZlcmVudCBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG92ZXJseSBhZ2dyZXNzaXZlIG9yIGNvbnNlcnZhdGl2ZSByZXRyYW5zbWlzc2lvbnMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcy4gV2UgbmVlZCB0byBmdXp6IHRpbWVvdXQgYmVoYXZpb3IgdG8gdmVyaWZ5IHRoZSBuZXcgc3lzY3RsIHZhbHVlcyBhcmUgYXBwcm9wcmlhdGVseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGFyZSBiZWhhdmluZyBjb3JyZWN0bHkgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucy4KClRoZXJlJiMzOTtzIGFsc28gYSByZW5hbWluZyBhbmQgc2NvcGluZyBjaGFuZ2U6IGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgIGlzIHJlbmFtZWQgYW5kIG1hZGUgc3RhdGljLCBhbmQgY2FuIG5vdyBiZSByZWFjaGVkIHRocm91Z2ggYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhpcyBpcyBsZXNzIGNyaXRpY2FsIGJ1dCBzdGlsbCBuZWVkcyBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuCgpCZXlvbmQgdGhlc2UgY29yZSBmdW5jdGlvbmFsIHNoaWZ0cywgdGhlcmUgYXJlIG5ldyBTTk1QIGNvdW50ZXJzIGluY3JlbWVudGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdGAsIGBzdWJmbG93X2NoZWNrX3JlcWAsIGBzdWJmbG93X2ZpbmlzaF9jb25uZWN0YCwgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AsIGFuZCBgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsYC4gV2hpbGUgdGhlc2UgY291bnRlcnMgdGhlbXNlbHZlcyBhcmVuJiMzOTt0IGZ1bmN0aW9uYWwgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLCB0aGV5IGRvIGluZGljYXRlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgb24gdmFyaW91cyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZWRnZSBjYXNlcy4gVGhlIHBhdGhzIGFyZSBhbHJlYWR5IGNvdmVyZWQgaW4gTVBUQ1AgY29ubmVjdGlvbiBmdXp6aW5nLCBzbyB3ZSBjYW4gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGZpcnN0LiBUaGUgbmV3IGNvdW50ZXJzIGNvdWxkIGluZm9ybSBmdXR1cmUgZnV6emluZyBjYW1wYWlnbnMgdGFyZ2V0aW5nIHNwZWNpZmljIGVkZ2UgY2FzZXMsIGJ1dCBmb3Igbm93LCB0aGV5IGFyZSBtb3N0bHkgaW5mb3JtYXRpdmUuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nOgoqICAgYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGA6IEJlY2F1c2UgdGhlc2UgdHJpZ2dlciB0aGUgbmV3IGBXQVJOX09OX09OQ0VgIGNoZWNrcyBpbiBzdWJmbG93IG1hbmFnZW1lbnQuCiogICBgbXB0Y3BfaW5pdF9zb2NrYDogQXMgdGhlIGluaXRpYWwgUlRPIHZhbHVlIHNldHRpbmdzIGFyZSBub3cgYWZmZWN0ZWQuCiogICBgX19tcHRjcF9yZXRyYW5zYDogQXMgdGhlIFJUTyBzZXR0aW5ncyBhZmZlY3QgdGhlIGRhdGFmaW4gdGltZW91dCB3aGljaCBpcyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9ucy4KKiAgIGBtcHRjcF9maW5pc2hfam9pbmAgYW5kIGBfX21wdGNwX3N1YmZsb3dfY29ubmVjdGA6IEFzIHRoZXNlIG5vdyBjYWxsIHRoZSBgV0FSTl9PTl9PTkNFYC10cmlnZ2VyaW5nIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgYXJlYXMgdG8gY29uZmlybSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIHNwdXJpb3VzbHkgYW5kIHRoYXQgdGhlIFJUTyBjaGFuZ2VzIGJlaGF2ZSBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgbmV0d29yayBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzLiBUaGVzZSBhcmUgdGhlIGtleSBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0JiMzNDssCiAgICAmIzM0O21wdGNwX3BtX25sX3JlbW92ZV9kb2l0JiMzNDssCiAgICAmIzM0O21wdGNwX2luaXRfc29jayYjMzQ7LAogICAgJiMzNDtfX21wdGNwX3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZmluaXNoX2pvaW4mIzM0OywKICAgICYjMzQ7X19tcHRjcF9zdWJmbG93X2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dCYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9ubF9yZW1vdmVfZG9pdCYjMzQ7LAogICAgJiMzNDttcHRjcF9pbml0X3NvY2smIzM0OywKICAgICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDssCiAgICAmIzM0O21wdGNwX2ZpbmlzaF9qb2luJiMzNDssCiAgICAmIzM0O19fbXB0Y3Bfc3ViZmxvd19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uOlxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXG4yLiBBZGRpbmcgbmV3IFNOTVAgTUlCIGNvdW50ZXJzIGZvciB2YXJpb3VzIE1QVENQIGV2ZW50cyAoZS5nLiwgTVBfSk9JTiBmYWlsdXJlcywgcmVzZXRzKSBhbmQgaW5jcmVtZW50aW5nIHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLlxuMy4gQWRkaW5nIHVuZGVyZmxvdyBjaGVja3MgKGBXQVJOX09OX09OQ0VgKSBmb3IgYHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cbjQuIFNlZWRpbmcgUlRPIGJvdW5kcyAoYGljc2tfcnRvX21pbmAsIGBpY3NrX3J0b19tYXhgKSBkdXJpbmcgTVBUQ1Agc29ja2V0IGluaXRpYWxpemF0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi40ODVkNTViNjZlYTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTE5LDEwICYjNDM7MTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7CiAKIC8qIE1QVENQIHNrX2J1ZmYgZXh0ZW5zaW9uIGRhdGEgKi8KIHN0cnVjdCBtcHRjcF9leHQgewotCXVuaW9uIHsKLQkJdTY0CWRhdGFfYWNrOwotCQl1MzIJZGF0YV9hY2szMjsKLQl9OwogCXU2NAkJZGF0YV9zZXE7CiAJdTMyCQlzdWJmbG93X3NlcTsKIAl1MTYJCWRhdGFfbGVuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmgKaW5kZXggMDQ1MjFhY2JhNDgzMi4uMjI4ODJiZDAzNDU5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oCkBAIC03NSw3ICYjNDM7NzUsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJVFBfQVJHUyhtcGV4dCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKHU2NCwgZGF0YV9hY2spCiAJCV9fZmllbGQodTY0LCBkYXRhX3NlcSkKIAkJX19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKQogCQlfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pCkBAIC05NCw3ICYjNDM7OTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LSZndDtkYXRhX2FjayA9IG1wZXh0LSZndDthY2s2NCA/IG1wZXh0LSZndDtkYXRhX2FjayA6IG1wZXh0LSZndDtkYXRhX2FjazMyOwogCQlfX2VudHJ5LSZndDtkYXRhX3NlcSA9IG1wZXh0LSZndDtkYXRhX3NlcTsKIAkJX19lbnRyeS0mZ3Q7c3ViZmxvd19zZXEgPSBtcGV4dC0mZ3Q7c3ViZmxvd19zZXE7CiAJCV9fZW50cnktJmd0O2RhdGFfbGVuID0gbXBleHQtJmd0O2RhdGFfbGVuOwpAQCAtMTEyLDggJiM0MzsxMTAsOCBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsCiAJCV9fZW50cnktJmd0O2luZmluaXRlX21hcCA9IG1wZXh0LSZndDtpbmZpbml0ZV9tYXA7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2RhdGFfYWNrPSVsbHUgZGF0YV9zZXE9JWxsdSBzdWJmbG93X3NlcT0ldSBkYXRhX2xlbj0ldSBjc3VtPSV4IHVzZV9tYXA9JXUgZHNuNjQ9JXUgZGF0YV9maW49JXUgdXNlX2Fjaz0ldSBhY2s2ND0ldSBtcGNfbWFwPSV1IGZyb3plbj0ldSByZXNldF90cmFuc2llbnQ9JXUgcmVzZXRfcmVhc29uPSV1IGNzdW1fcmVxZD0ldSBpbmZpbml0ZV9tYXA9JXUmIzM0OywKLQkJICBfX2VudHJ5LSZndDtkYXRhX2FjaywgX19lbnRyeS0mZ3Q7ZGF0YV9zZXEsCiYjNDM7CVRQX3ByaW50aygmIzM0O2RhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1JiMzNDssCiYjNDM7CQkgIF9fZW50cnktJmd0O2RhdGFfc2VxLAogCQkgIF9fZW50cnktJmd0O3N1YmZsb3dfc2VxLCBfX2VudHJ5LSZndDtkYXRhX2xlbiwKIAkJICBfX2VudHJ5LSZndDtjc3VtLCBfX2VudHJ5LSZndDt1c2VfbWFwLAogCQkgIF9fZW50cnktJmd0O2RzbjY0LCBfX2VudHJ5LSZndDtkYXRhX2ZpbiwKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuYwppbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jCkBAIC0yMSwxNCAmIzQzOzIxLDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O01QRmFsbGJhY2tUb2tlbkluaXQmIzM0OywgTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklUKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBUQ1BSZXRyYW5zJiMzNDssIE1QVENQX01JQl9SRVRSQU5TU0VHUyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbk5vVG9rZW5Gb3VuZCYjMzQ7LCBNUFRDUF9NSUJfSk9JTk5PVE9LRU4pLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luTm9JZEZvdW5kJiMzNDssIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5SeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTlJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQmFja3VwUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5bkFja1J4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5BY2tCYWNrdXBSeCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrSE1hY0ZhaWx1cmUmIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luU3luQWNrTm9NUEpvaW4mIzM0OywgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7TVBKb2luQWNrUngmIzM0OywgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja0hNYWNGYWlsdXJlJiMzNDssIE1QVENQX01JQl9KT0lOQUNLTUFDKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbkFja05vTVBKb2luJiMzNDssIE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5BY2tOb0N0eCYjMzQ7LCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5SZWplY3RlZCYjMzQ7LCBNUFRDUF9NSUJfSk9JTlJFSkVDVEVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pbk5vdEVzdGFibGlzaGVkJiMzNDssIE1QVENQX01JQl9NUEpPSU5OT1RFU1RBQkxJU0hFRCksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01QSm9pblN5blR4JiMzNDssIE1QVENQX01JQl9KT0lOU1lOVFgpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5UeENyZWF0U2tFcnImIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUEpvaW5TeW5UeEJpbmRFcnImIzM0OywgTVBUQ1BfTUlCX0pPSU5TWU5UWEJJTkRFUlIpLApAQCAtODEsNyAmIzQzOzg2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7QmxhY2tob2xlJiMzNDssIE1QVENQX01JQl9CTEFDS0hPTEUpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtNUENhcGFibGVEYXRhRmFsbGJhY2smIzM0OywgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksCiAJU05NUF9NSUJfSVRFTSgmIzM0O01ENVNpZ0ZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtNRDVTaWdSZXNldCYjMzQ7LCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtEc3NGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfRFNTRkFMTEJBQ0spLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7RHNzUmVzZXQmIzM0OywgTVBUQ1BfTUlCX0RTU1JFU0VUKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oCmluZGV4IDNhMzQyNWUyNThhNzYuLjFlYmRiNTVlOTUzNDMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmgKQEAgLTE2LDE0ICYjNDM7MTYsMTkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCwJLyogQ291bGQgbm90IGluaXQvYWxsb2NhdGUgdG9rZW4gKi8KIAlNUFRDUF9NSUJfUkVUUkFOU1NFR1MsCQkvKiBTZWdtZW50cyByZXRyYW5zbWl0dGVkIGF0IHRoZSBNUFRDUC1sZXZlbCAqLwogCU1QVENQX01JQl9KT0lOTk9UT0tFTiwJCS8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQsCS8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IG5vIGxvY2FsIElEIHdhcyBmb3VuZCAqLwogCU1QVENQX01JQl9KT0lOU1lOUlgsCQkvKiBSZWNlaXZlZCBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCwJLyogUmVjZWl2ZWQgYSBTWU4gJiM0MzsgTVBfSk9JTiAmIzQzOyBiYWNrdXAgZmxhZyAqLwogCU1QVENQX01JQl9KT0lOU1lOQUNLUlgsCQkvKiBSZWNlaXZlZCBhIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgsCS8qIFJlY2VpdmVkIGEgU1lOL0FDSyAmIzQzOyBNUF9KT0lOICYjNDM7IGJhY2t1cCBmbGFnICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsCS8qIEhNQUMgd2FzIHdyb25nIG9uIFNZTi9BQ0sgJiM0MzsgTVBfSk9JTiAqLwomIzQzOwlNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4sCS8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIFNZTi9BQ0sgKi8KIAlNUFRDUF9NSUJfSk9JTkFDS1JYLAkJLyogUmVjZWl2ZWQgYW4gQUNLICYjNDM7IE1QX0pPSU4gKi8KIAlNUFRDUF9NSUJfSk9JTkFDS01BQywJCS8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyAmIzQzOyBNUF9KT0lOICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiwJLyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gQUNLICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCwJLyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovCiAJTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCwJCS8qIFRoZSBQTSByZWplY3RlZCB0aGUgSk9JTiByZXF1ZXN0ICovCiYjNDM7CU1QVENQX01JQl9NUEpPSU5OT1RFU1RBQkxJU0hFRCwJLyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi8KIAlNUFRDUF9NSUJfSk9JTlNZTlRYLAkJLyogU2VuZGluZyBhIFNZTiAmIzQzOyBNUF9KT0lOICovCiAJTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIsCS8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gJiM0MzsgTVBfSk9JTiAqLwogCU1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSLAkvKiBOb3QgYWJsZSB0byBiaW5kKCkgdGhlIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIGEgU1lOICYjNDM7IE1QX0pPSU4gKi8KQEAgLTg0LDcgJiM0Mzs4OSw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHsKIAkJCQkJICogZXN0YWJsaXNoZWQgcGFja2V0CiAJCQkJCSAqLwogCU1QVENQX01JQl9NRDVTSUdGQUxMQkFDSywJLyogQ29uZmxpY3RpbmcgVENQIG9wdGlvbiBlbmFibGVkICovCiYjNDM7CU1QVENQX01JQl9NRDVTSUdSRVNFVCwJCS8qIE1QX1JTVDogTUQ1U0lHIGVuYWJsZWQgb24gbGlzdGVuZXIgKi8KIAlNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssCQkvKiBCYWQgb3IgbWlzc2luZyBEU1MgKi8KJiM0MzsJTVBUQ1BfTUlCX0RTU1JFU0VULAkJLyogTVBfUlNUOiBiYWQgZGF0YSBtYXBwaW5nICovCiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jCmluZGV4IGQxZjczYzNlMzlmYTMuLjhiNjg4NjgyNTVjNTAgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbS5jCkBAIC02NzAsNyAmIzQzOzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJaWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKSB7CiAJCWlmICh1cGRhdGVfc3ViZmxvd3MpIHsKIAkJCXNwaW5fbG9ja19iaCgmYW1wO3BtLSZndDtsb2NrKTsKLQkJCXBtLSZndDtleHRyYV9zdWJmbG93cy0tOwomIzQzOwkJCWlmICghV0FSTl9PTl9PTkNFKHBtLSZndDtleHRyYV9zdWJmbG93cyA9PSAwKSkKJiM0MzsJCQkJcG0tJmd0O2V4dHJhX3N1YmZsb3dzLS07CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3BtLSZndDtsb2NrKTsKIAkJfQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwpAQCAtMjgxLDggJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAotCQkJCXN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSkKJiM0MztzdGF0aWMgdm9pZAomIzQzO21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9OwogCWludCBhbm5vX25yID0gMDsKQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgaW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJbGlzdF9kZWxfcmN1KCZhbXA7bWF0Y2gtJmd0O2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7bXNrLSZndDtwbS5sb2NrKTsKIAotCW1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpOwomIzQzOwltcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7CiAKIAlyZWxlYXNlX3NvY2soc2spOwogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGVjODc0ZDJlYWQ2YTQuLmI0NzRkMDM2MjBhNzUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC01ODEsMTcgJiM0Mzs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKQogc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwomIzQzOwl1MzIgcnRvX21pbiA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3J0b19taW4pOwomIzQzOwl1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3J0b19tYXgpOwogCXUzMiByZXRyYW5zbWl0czsKIAomIzQzOwkvKiBUaGUgc3lzY3RscyBhcmUgdmFsaWRhdGVkIGluZGVwZW5kZW50bHk6IHJ0b19taW4gJmd0OyBydG9fbWF4IGlzCiYjNDM7CSAqIHBvc3NpYmxlLCBndWFyZCBhZ2FpbnN0IGlsb2cyKDApLgomIzQzOwkgKi8KIAlyZXRyYW5zbWl0cyA9IG1pbl90KHUzMiwgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cywKLQkJCSAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7CiYjNDM7CQkJICAgIGlsb2cyKG1heF90KHUzMiwgcnRvX21heCAvIHJ0b19taW4sIDEpKSk7CiAKLQltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTiAmbHQ7Jmx0OyByZXRyYW5zbWl0czsKJiM0MzsJbXB0Y3Bfc2soc2spLSZndDt0aW1lcl9pdmFsID0gcnRvX21pbiAmbHQ7Jmx0OyByZXRyYW5zbWl0czsKIH0KIAogc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dCkKIHsKLQltcHRjcF9zayhzayktJmd0O3RpbWVyX2l2YWwgPSB0b3V0ICZndDsgMCA/IHRvdXQgOiBUQ1BfUlRPX01JTjsKJiM0MzsJbXB0Y3Bfc2soc2spLSZndDt0aW1lcl9pdmFsID0gdG91dCAmZ3Q7IDAgPyB0b3V0IDoKJiM0MzsJCQkJICAgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS0mZ3Q7aWNza19ydG9fbWluKTsKIH0KIAogc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdykKQEAgLTMxNjEsNyAmIzQzOzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21zay0mZ3Q7Y29ubl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21zay0mZ3Q7am9pbl9saXN0KTsKQEAgLTMxNzAsNyAmIzQzOzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQogCUlOSVRfV09SSygmYW1wO21zay0mZ3Q7d29yaywgbXB0Y3Bfd29ya2VyKTsKIAltc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7CiAJbXNrLSZndDtmaXJzdF9wZW5kaW5nID0gTlVMTDsKLQltc2stJmd0O3RpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTjsKJiM0MzsKJiM0MzsJLyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovCiYjNDM7CWljc2stJmd0O2ljc2tfcnRvX21pbiA9CiYjNDM7CQl1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzKSk7CiYjNDM7CWljc2stJmd0O2ljc2tfcnRvX21heCA9CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWF4X21zKSk7CiYjNDM7CW1zay0mZ3Q7dGltZXJfaXZhbCA9IGljc2stJmd0O2ljc2tfcnRvX21pbjsKIAltc2stJmd0O3NjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPOwogCW1zay0mZ3Q7YmFja2xvZ19sZW4gPSAwOwogCW1wdGNwX2luaXRfcnR0X2VzdChtc2spOwpAQCAtMzk4OCw2ICYjNDM7NDAwMiw3IEBAIGJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaykKIAogCS8qIG1wdGNwIHNvY2tldCBhbHJlYWR5IGNsb3Npbmc/ICovCiAJaWYgKCFtcHRjcF9pc19mdWxseV9lc3RhYmxpc2hlZChwYXJlbnQpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTsKIAkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTExNDksOCAmIzQzOzExNDksNiBAQCBpbnQgbXB0Y3BfcG1fYW5ub3VuY2VfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCQkJICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkciwKIAkJCSAgIGJvb2wgZWNobyk7CiBpbnQgbXB0Y3BfcG1fcmVtb3ZlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpOwotdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAotCQkJCXN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSk7CiAKIC8qIHRoZSBkZWZhdWx0IHBhdGggbWFuYWdlciwgdXNlZCBpbiBtcHRjcF9wbV91bnJlZ2lzdGVyICovCiBleHRlcm4gc3RydWN0IG1wdGNwX3BtX29wcyBtcHRjcF9wbV9rZXJuZWw7CkBAIC0xMjU0LDcgJiM0MzsxMjUyLDggQEAgdTggbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spOwogLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKLQlpZiAoLS1tc2stJmd0O3BtLmV4dHJhX3N1YmZsb3dzICZsdDsgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpCiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKG1zay0mZ3Q7cG0uZXh0cmFfc3ViZmxvd3MgPT0gMCkgJmFtcDsmYW1wOwomIzQzOwkgICAgLS1tc2stJmd0O3BtLmV4dHJhX3N1YmZsb3dzICZsdDsgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpCiAJCVdSSVRFX09OQ0UobXNrLSZndDtwbS5hY2NlcHRfc3ViZmxvdywgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtOTYsNiAmIzQzOzk2LDcgQEAgc3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICpzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAlsb2NhbF9pZCA9IG1wdGNwX3BtX2dldF9sb2NhbF9pZChtc2ssIChzdHJ1Y3Qgc29ja19jb21tb24gKilyZXEpOwogCWlmIChsb2NhbF9pZCAmbHQ7IDApIHsKJiM0MzsJCVNVQkZMT1dfUkVRX0lOQ19TVEFUUyhyZXEsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpOwogCQlzb2NrX3B1dCgoc3RydWN0IHNvY2sgKiltc2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNjAsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCSAqIFRDUCBvcHRpb24gc3BhY2UuCiAJICovCiAJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcih0Y3Bfc2soc2tfbGlzdGVuZXIpLSZndDttZDVzaWdfaW5mbykpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChza19saXN0ZW5lciksIE1QVENQX01JQl9NRDVTSUdSRVNFVCk7CiAJCXN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NjMsNiAmIzQzOzU2NSw3IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl1OCBobWFjW1NIQTI1Nl9ESUdFU1RfU0laRV07CiAKIAkJaWYgKCEobXBfb3B0LnN1Ym9wdGlvbnMgJmFtcDsgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7CiYjNDM7CQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTsKIAkJCXN1YmZsb3ctJmd0O3Jlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7CiAJCQlnb3RvIGRvX3Jlc2V0OwogCQl9CkBAIC04NjUsNiAmIzQzOzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCSAqLwogCQlpZiAoIWN0eCB8fCBmYWxsYmFjaykgewogCQkJaWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7CiYjNDM7CQkJCWlmICghY3R4KQomIzQzOwkJCQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKJiM0MzsJCQkJCQkJTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTsKJiM0MzsJCQkJZWxzZQomIzQzOwkJCQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKJiM0MzsJCQkJCQkJTVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTsKIAkJCQlzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTsKIAkJCQlnb3RvIGRpc3Bvc2VfY2hpbGQ7CiAJCQl9CkBAIC0xNDE2LDYgJiM0MzsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spCiAJCQkgKiBzdWJmbG93X2Vycm9yX3JlcG9ydCgpIHdpbGwgaW50cm9kdWNlIHRoZSBhcHByb3ByaWF0ZSBiYXJyaWVycwogCQkJICovCiAJCQlzdWJmbG93LSZndDtyZXNldF90cmFuc2llbnQgPSAwOwomIzQzOwkJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpOwogCQkJc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uID0gc3RhdHVzID09IE1BUFBJTkdfTk9EU1MgPwogCQkJCQkJTVBUQ1BfUlNUX0VNSURETEVCT1ggOgogCQkJCQkJTVBUQ1BfUlNUX0VNUFRDUDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwpAQCAtMTI2NCw3ICYjNDM7MTI2NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Ntc2dfdHlwZXMoaW50IGZkLCBjb25zdCBzdHJ1Y3QgY2ZnX2Ntc2dfdHlwZXMgKmNtc2cpCiAKIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSkKIHsKLQljaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICYjMzk7LCYjMzk7KTsKJiM0MzsJY29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAmIzM5OywmIzM5Oyk7CiAJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKIAljZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxOwpAQCAtMTI5Miw3ICYjNDM7MTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSkKIAogc3RhdGljIHZvaWQgcGFyc2Vfc2V0c29ja19vcHRpb25zKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JY2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiYjNDM7CWNvbnN0IGNoYXIgKm5leHQgPSBzdHJjaHIobmFtZSwgJiMzOTssJiMzOTspOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJaWYgKG5leHQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2gKQEAgLTIxMiw4ICYjNDM7MjEyLDggQEAgaWYgJGNoZWNrc3VtOyB0aGVuCiBmaQogCiBpZiAkY2FwdHVyZTsgdGhlbgotCXJuZGg9JiMzNDske25zMTo0fSYjMzQ7Ci0JbXB0Y3BfbGliX3ByX2luZm8gJiMzNDtQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tJiMzNDsKJiM0MzsJY2FwcHJlZml4PSYjMzQ7bXB0Y3BfY29ubmVjdC0ke25zMTo0fSYjMzQ7CiYjNDM7CW1wdGNwX2xpYl9wcl9pbmZvICYjMzQ7cGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS0mIzM0OwogZmkKIAogc2V0X2V0aHRvb2xfZmxhZ3MoKSB7CkBAIC0zNzIsOCAmIzQzOzM3Miw4IEBAIGRvX3RyYW5zZmVyKCkKIAkJCWNhcHVzZXI9JiMzNDstWiAkU1VET19VU0VSJiMzNDsKIAkJZmkKIAotCQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtybmRofS0ke2Nvbm5lY3Rvcl9uczowOjN9LSR7bGlzdGVuZXJfbnM6MDozfS0ke2NsX3Byb3RvfS0ke3Nydl9wcm90b30tJHtjb25uZWN0X2FkZHJ9LSR7cG9ydH0mIzM0OwotCQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fSYjMzQ7CiYjNDM7CQlsb2NhbCBjYXBvcHQ9JiMzNDstaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICR7Y2FwdXNlcn0mIzM0OwogCiAJCWlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXAogCQkJLXcgJiMzNDske2NhcGZpbGV9LWxpc3RlbmVyLnBjYXAmIzM0OyAmZ3Q7Jmd0OyAmIzM0OyR7Y2Fwb3V0fSYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuYwppbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKQEAgLTM3Nyw3ICYjNDM7Mzc3LDggQEAgc3RhdGljIHZvaWQgZ2V0X3N1YmZsb3dfaW5mbyhjaGFyICpzdWJmbG93X2FkZHJzKQogCWludCByZXQ7CiAJaW50IGZkOwogCi0JcmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsICYjMzQ7JVteOl06JWQgJVteOl06JWQmIzM0Oywgc2FkZHIsICZhbXA7c3BvcnQsIGRhZGRyLCAmYW1wO2Rwb3J0KTsKJiM0MzsJcmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsICYjMzQ7JTYzW146XTolZCAlNjNbXjpdOiVkJiMzNDssCiYjNDM7CQkgICAgIHNhZGRyLCAmYW1wO3Nwb3J0LCBkYWRkciwgJmFtcDtkcG9ydCk7CiAJaWYgKHJldCAhPSA0KQogCQlkaWVfcGVycm9yKCYjMzQ7SVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoCkBAIC03NSw2ICYjNDM7NzUsMTQgQEAgdW5zZXQgam9pbl9zeW5fdHgKIHVuc2V0IGpvaW5fY3JlYXRlX2VycgogdW5zZXQgam9pbl9iaW5kX2VycgogdW5zZXQgam9pbl9jb25uZWN0X2VycgomIzQzO3Vuc2V0IGpvaW5fc3luYWNrX25vX21wam9pbgomIzQzO3Vuc2V0IGpvaW5fYWNrX25vX21wam9pbgomIzQzO3Vuc2V0IGpvaW5fYWNrX25vX2N0eAomIzQzO3Vuc2V0IGpvaW5fbm90X2VzdGFibGlzaGVkCiYjNDM7dW5zZXQgam9pbl9ub19pZF9mb3VuZAomIzQzOwomIzQzO3Vuc2V0IHJzdF9tZDVzaWcKJiM0Mzt1bnNldCByc3RfZHNzCiAKIHVuc2V0IGZiX25zMQogdW5zZXQgZmJfbnMyCkBAIC05NzEsNyAmIzQzOzk3OSw3IEBAIGNvbmRfc3RhcnRfY2FwdHVyZSgpCiAJCWNhcGZpbGU9JChwcmludGYgJiMzNDttcF9qb2luLSUwMnUtJXMucGNhcCYjMzQ7ICYjMzQ7JE1QVENQX0xJQl9URVNUX0NPVU5URVImIzM0OyAmIzM0OyRucyYjMzQ7KQogCiAJCWVjaG8gJiMzNDtDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlJiMzNDsKLQkJaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7IHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13ICYjMzQ7JGNhcGZpbGUmIzM0OyAmZ3Q7ICYjMzQ7JGNhcG91dCYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgdGNwZHVtcCAtaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICRjYXB1c2VyIC13ICYjMzQ7JGNhcGZpbGUmIzM0OyAmZ3Q7ICYjMzQ7JGNhcG91dCYjMzQ7IDImZ3Q7JmFtcDsxICZhbXA7CiAJCWNhcHBpZD0kIQogCiAJCXNsZWVwIDEKQEAgLTEzNTMsNiAmIzQzOzEzNjEsOCBAQCBjaGtfcnN0X25yKCkKIAlsb2NhbCByc3RfdHg9JDEKIAlsb2NhbCByc3Rfcng9JDIKIAlsb2NhbCBuc19pbnZlcnQ9JHszOi0mIzM0OyYjMzQ7fQomIzQzOwlsb2NhbCBtZDVzaWc9JHtyc3RfbWQ1c2lnOi0wfQomIzQzOwlsb2NhbCBkc3M9JHtyc3RfZHNzOi0wfQogCWxvY2FsIGNvdW50CiAJbG9jYWwgbnNfdHg9JG5zMQogCWxvY2FsIG5zX3J4PSRuczIKQEAgLTEzODksNiAmIzQzOzEzOTksMjEgQEAgY2hrX3JzdF9ucigpCiAJZWxzZQogCQlwcmludF9vawogCWZpCiYjNDM7CiYjNDM7CSMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvbgomIzQzOwkjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IE1ENVNpZ1Jlc2V0IGZpcmVzIG9uIHRoZSBsaXN0ZW5lcgomIzQzOwkjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS4KJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNRDVTaWdSZXNldCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRtZDVzaWcmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludF9jaGVjayAmIzM0O01ENVNpZ1Jlc2V0JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZyYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSAmIzM0O01QVGNwRXh0RHNzUmVzZXQmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskZHNzJiMzNDsgXTsgdGhlbgomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDtEc3NSZXNldCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3MmIzM0OwomIzQzOwlmaQogfQogCiBjaGtfaW5maV9ucigpCkBAIC0xNTg3LDYgJiM0MzsxNjEyLDExIEBAIGNoa19qb2luX25yKCkKIAlsb2NhbCByc3RfbnI9JHtqb2luX3JzdF9ucjotMH0KIAlsb2NhbCBpbmZpX25yPSR7am9pbl9pbmZpX25yOi0wfQogCWxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH0KJiM0MzsJbG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH0KJiM0MzsJbG9jYWwgYWNrX25vX21wam9pbj0ke2pvaW5fYWNrX25vX21wam9pbjotMH0KJiM0MzsJbG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH0KJiM0MzsJbG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9CiYjNDM7CWxvY2FsIG5vX2lkX2ZvdW5kPSR7am9pbl9ub19pZF9mb3VuZDotMH0KIAlsb2NhbCByYz0ke0tTRlRfUEFTU30KIAlsb2NhbCBjb3VudAogCWxvY2FsIHdpdGhfY29va2llCkBAIC0xNjU1LDYgJiM0MzsxNjg1LDQ0IEBAIGNoa19qb2luX25yKCkKIAkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIHN5biByZWplY3RlZCBleHBlY3RlZCAkc3luX3JlaiYjMzQ7CiAJZmkKIAomIzQzOwkjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb24KJiM0MzsJIyBhdmFpbGFiaWxpdHkuICBGaXhlZCBuYW1lc3BhY2VzOiB0aGUgKlN5bkFjayogb25lIGZpcmVzIG9uIHRoZQomIzQzOwkjIGNsaWVudCByZWNlaXZpbmcgdGhlIFNZTi9BQ0ssIHRoZSBvdGhlcnMgb24gdGhlIHNlcnZlci4KJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9ICYjMzQ7TVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pbiYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRzeW5hY2tfbm9fbXBqb2luJiMzNDsgXTsgdGhlbgomIzQzOwkJcmM9JHtLU0ZUX0ZBSUx9CiYjNDM7CQlwcmludF9jaGVjayAmIzM0O3N5bmFjayBubyBtcGpvaW4mIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW4mIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwljb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gJiMzNDtNUFRjcEV4dE1QSm9pbkFja05vTVBKb2luJiMzNDspCiYjNDM7CWlmIFsgLW4gJiMzNDskY291bnQmIzM0OyBdICZhbXA7JmFtcDsgWyAmIzM0OyRjb3VudCYjMzQ7ICE9ICYjMzQ7JGFja19ub19tcGpvaW4mIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7YWNrIG5vIG1wam9pbiYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkYWNrX25vX21wam9pbiYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSAmIzM0O01QVGNwRXh0TVBKb2luQWNrTm9DdHgmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskYWNrX25vX2N0eCYjMzQ7IF07IHRoZW4KJiM0MzsJCXJjPSR7S1NGVF9GQUlMfQomIzQzOwkJcHJpbnRfY2hlY2sgJiMzNDthY2sgbm8gY3R4JiMzNDsKJiM0MzsJCWZhaWxfdGVzdCAmIzM0O2dvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gY3R4IGV4cGVjdGVkICRhY2tfbm9fY3R4JiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZCYjMzQ7KQomIzQzOwlpZiBbIC1uICYjMzQ7JGNvdW50JiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskY291bnQmIzM0OyAhPSAmIzM0OyRub3RfZXN0YWJsaXNoZWQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7am9pbiBub3QgZXN0YWJsaXNoZWQmIzM0OwomIzQzOwkJZmFpbF90ZXN0ICYjMzQ7Z290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJY291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9ICYjMzQ7TVBUY3BFeHRNUEpvaW5Ob0lkRm91bmQmIzM0OykKJiM0MzsJaWYgWyAtbiAmIzM0OyRjb3VudCYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGNvdW50JiMzNDsgIT0gJiMzNDskbm9faWRfZm91bmQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyYz0ke0tTRlRfRkFJTH0KJiM0MzsJCXByaW50X2NoZWNrICYjMzQ7am9pbiBubyBpZCBmb3VuZCYjMzQ7CiYjNDM7CQlmYWlsX3Rlc3QgJiMzNDtnb3QgJGNvdW50IEpPSU5bc10gbm8gaWQgZm91bmQgZXhwZWN0ZWQgJG5vX2lkX2ZvdW5kJiMzNDsKJiM0MzsJZmkKJiM0MzsKIAlwcmludF9yZXN1bHRzICYjMzQ7am9pbiBSeCYjMzQ7ICR7cmN9CiAKIAlqb2luX3N5bl90eD0mIzM0OyR7am9pbl9zeW5fdHg6LSR7c3luX25yfX0mIzM0OyBcCkBAIC0yMzU5LDYgJiM0MzsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKCkKIAkJCWNoa19hZGRfbnIgNCA0CiAJCWZpCiAJZmkKJiM0MzsKJiM0MzsJIyBzaWduYWxsZWQgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBjbGllbnQsIHdoZXJlIGEgVENQLW9ubHkKJiM0MzsJIyBsaXN0ZW5lciBpcyBib3VuZCBhdCBpdDogdGhlIGNsaWVudCYjMzk7cyBNUF9KT0lOIHJvdXRlcyBsb2NhbGx5CiYjNDM7CSMgdG8gdGhlIGxpc3RlbmVyIGFuZCByZWNlaXZlcyBhIFNZTi9BQ0sgd2l0aG91dCBNUF9KT0lOLgomIzQzOwkjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLgomIzQzOwlpZiByZXNldCAmIzM0O3NpZ25hbCBhZGRyZXNzLCBUQ1Atb25seSBsaXN0ZW5lciBvbiBjbGllbnQmIzM0OzsgdGhlbgomIzQzOwkJbG9jYWwgZXh0cmFfYmluZAomIzQzOwkJbG9jYWwgcG9ydAomIzQzOwomIzQzOwkJcG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMQomIzQzOwkJcG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMQomIzQzOwkJcG1fbmxfYWRkX2VuZHBvaW50ICRuczEgMTAuMC4yLjIgZmxhZ3Mgc2lnbmFsCiYjNDM7CiYjNDM7CQlwb3J0PSQoZ2V0X3BvcnQpCiYjNDM7CQlpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgJiMzNDskcG9ydCYjMzQ7IFwKJiM0MzsJCQktcyBUQ1AgMTAuMC4yLjIgJmFtcDsKJiM0MzsJCWV4dHJhX2JpbmQ9JCEKJiM0MzsJCW1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuICYjMzQ7JG5zMiYjMzQ7ICYjMzQ7JHBvcnQmIzM0OwomIzQzOwomIzQzOwkJcnVuX3Rlc3RzICRuczEgJG5zMiAxMC4wLjEuMQomIzQzOwkJam9pbl9zeW5hY2tfbm9fbXBqb2luPTEgam9pbl9zeW5fdHg9MSBcCiYjNDM7CQkJY2hrX2pvaW5fbnIgMCAwIDAKJiM0MzsKJiM0MzsJCWtpbGwgJHtleHRyYV9iaW5kfSAyJmd0Oy9kZXYvbnVsbAomIzQzOwlmaQogfQogCiBsYW1pbmFyX2VuZHBfdGVzdHMoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2gKaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoCkBAIC0yNCw2ICYjNDM7MjQsNyBAQCBzbWFsbD0mIzM0OyYjMzQ7CiBzb3V0PSYjMzQ7JiMzNDsKIGNvdXQ9JiMzNDsmIzM0OwogY2Fwb3V0PSYjMzQ7JiMzNDsKJiM0MztjYXBwcmVmaXg9JiMzNDsmIzM0Owogc2l6ZT0wCiAKIHVzYWdlKCkgewpAQCAtNzAsNiAmIzQzOzcxLDExIEBAIHNldHVwKCkKIAogCW1wdGNwX2xpYl9uc19pbml0IG5zMSBuczIgbnMzCiAKJiM0MzsJaWYgJGNhcHR1cmU7IHRoZW4KJiM0MzsJCWNhcHByZWZpeD0mIzM0O3NpbXVsdF9mbG93cy0ke25zMTo0fSYjMzQ7CiYjNDM7CQltcHRjcF9saWJfcHJfaW5mbyAmIzM0O3BjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tJiMzNDsKJiM0MzsJZmkKJiM0MzsKIAlpcCBsaW5rIGFkZCBuczFldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwogCWlwIGxpbmsgYWRkIG5zMWV0aDIgbmV0bnMgJiMzNDskbnMxJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgyIG5ldG5zICYjMzQ7JG5zMiYjMzQ7CiAJaXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyAmIzM0OyRuczImIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgJiMzNDskbnMzJiMzNDsKQEAgLTEzNiwxNSAmIzQzOzE0MiwxNCBAQCBkb190cmFuc2ZlcigpCiAKIAlpZiAkY2FwdHVyZTsgdGhlbgogCQlsb2NhbCBjYXB1c2VyCi0JCWxvY2FsIHJuZGg9JiMzNDske25zMTo0fSYjMzQ7CiAJCWlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlbgogCQkJY2FwdXNlcj0mIzM0OyYjMzQ7CiAJCWVsc2UKIAkJCWNhcHVzZXI9JiMzNDstWiAkU1VET19VU0VSJiMzNDsKIAkJZmkKIAotCQlsb2NhbCBjYXBmaWxlPSYjMzQ7JHtybmRofS0ke3BvcnR9JiMzNDsKLQkJbG9jYWwgY2Fwb3B0PSYjMzQ7LWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn0mIzM0OwomIzQzOwkJbG9jYWwgY2FwZmlsZT0mIzM0OyR7Y2FwcHJlZml4fS0ke3BvcnR9JiMzNDsKJiM0MzsJCWxvY2FsIGNhcG9wdD0mIzM0Oy1pIGFueSAtcyAxMDggLUIgMzI3NjggJHtjYXB1c2VyfSYjMzQ7CiAKIAkJaXAgbmV0bnMgZXhlYyAke25zM30gIHRjcGR1bXAgJHtjYXBvcHR9IC13ICYjMzQ7JHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwJiMzNDsgICZndDsmZ3Q7ICYjMzQ7JHtjYXBvdXR9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKIAkJbG9jYWwgY2FwcGlkX2xpc3RlbmVyPSQhCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiAxNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IE5vIERlZGljYXRlZCBTZXNzaW9uIFJlcXVpcmVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIHNlcmllcyBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1biwgd2hpY2ggd291bGQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcywgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG1vc3RseSBkZWFsaW5nIHdpdGg6CgoxLiAgKipSZW1vdmFsIG9mIGBkYXRhX2Fja2AgZmllbGQ6KiogVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbi4gVGhlIHJlbW92YWwgb2YgYGRhdGFfYWNrYCAoYW5kIGl0cyBhc3NvY2lhdGVkIGBkYXRhX2FjazMyYCB1bmlvbiBtZW1iZXIpIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50IGlzIGEgKipuZXQgcmVkdWN0aW9uKiogaW4gZGF0YSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGVzcyBkYXRhIGlzIGJldHRlciwgaW4gdGhpcyBjYXNlLiBXZSYjMzk7cmUgcmVtb3ZpbmcsIG5vdCBhZGRpbmcuIFRoZSB0cmFjZSBldmVudCBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdXNlci1zcGFjZSBleHBvc3VyZSBvZiBzZW5zaXRpdmUgZGF0YSwgYW5kIHRoZSBgc3RydWN0IG1wdGNwX2V4dGAgY2hhbmdlIGludm9sdmVzIGFuIGBza2JfZXh0X2FkZCgpYCBhbGxvY2F0aW9uLiBMZXNzIGRhdGEgaW4gdGhlIHNrYiBleHRlbnNpb24gaXMgYSBwb3NpdGl2ZSB0aGluZyBmb3IgcmVkdWNpbmcgbWVtb3J5IHVzYWdlLgoyLiAgKipTTk1QIE1JQiBJdGVtczoqKiBUaGVzZSBhcmUganVzdCBjb3VudGVycywgaW5jcmVtZW50ZWQgdXNpbmcgYE1QVENQX0lOQ19TVEFUU2AuIFRoZSBpbmZvcm1hdGlvbiBleHBvc2VkIHRocm91Z2ggYC9wcm9jL25ldC9zbm1wYCBvciBzaW1pbGFyIGlzIGVudGlyZWx5IGJlbmlnbi4gV2UmIzM5O3JlIG5vdCBsZWFraW5nIGFueXRoaW5nIHNlbnNpdGl2ZSB0byB1c2VyIHNwYWNlOyB3ZSYjMzk7cmUganVzdCBwcm92aWRpbmcgbW9yZSBzdGF0aXN0aWNzLgozLiAgKipVbmRlcmZsb3cgQ2hlY2tzICZhbXA7IFJUTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBgZXh0cmFfc3ViZmxvd3NgIGFyZSBkZWZlbnNpdmUgY29kaW5nIHByYWN0aWNlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBpY3NrLSZndDtpY3NrX3J0b19taW5gIGFuZCBgaWNzay0mZ3Q7aWNza19ydG9fbWF4YCB3aXRoIHZhbHVlcyBmcm9tIGBuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXNgIGlzIGEgKipwb3NpdGl2ZSoqLiBJdCAqcHJldmVudHMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGVyZSBwcmV2aW91c2x5IHRoZSB2YXJpYWJsZXMgbWlnaHQgaGF2ZSBiZWVuIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KCkNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCBsZXQmIzM5O3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgcG9pbnRzLgoKKiAgICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIFRoZSB0cmFjZSBldmVudCAqcmVtb3ZlcyogYSBmaWVsZCBhbmQgc28gdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGNvcGllZCBpcyBzbWFsbGVyIG5vdy4gVGhlIE1JQiBpdGVtcyBpbmNyZW1lbnQgY291bnRlcnMsIHdoaWNoIGlzIG5vdCBjb25jZXJuaW5nIGZvciBLTVNBTi4gVGhlIHJlbW92YWwgb2YgdGhlIGBkYXRhX2Fja2AgZmllbGQgaW4gdGhlIHNrYiBleHRlbnNpb24gaXMgYSByZWR1Y3Rpb24gaW4gc2l6ZS4KKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogV2UmIzM5O3JlIHJlbW92aW5nIGEgZmllbGQgZnJvbSBhbiBza2IgZXh0ZW5zaW9uLiBXZSBhcmUgbm93IGluaXRpYWxpemluZyBhbiBSVE8gYW5kIHRob3NlIHdlcmUgbm90IGluaXRpYWxpemVkIHByZXZpb3VzbHksIHdoaWNoIGFkZHJlc3NlcyBwcmV2aW91cyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCB1c2FnZS4gVGhlcmUgYXJlIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY3JlYXRlZC4KCldlJiMzOTtyZSBhZGRpbmcgY2hlY2tzIHRvIHVuZGVyZmxvdywgc28gbm90IGEgcHJvYmxlbS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb3VudGVycyBpcyBmaW5lLiBUaGUgUlRPIHNlZWRpbmcgaW5pdGlhbGl6ZXMgZmllbGRzLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgS01TQU4gcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoZSByZW1vdmFsIG9mIHRoZSBmaWVsZCBhbmQgdGhlIHNlZWRpbmcgb2YgdGhlIFJUTyBzaG91bGQgcmVkdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMgc2hvdWxkIGFkZXF1YXRlbHkgaGFuZGxlIGFueSBwb3RlbnRpYWwgYnVncyAobG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzKS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LgpJJiMzOTttIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZSBmb3IgdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cdTAwM2VleHRyYV9zdWJmbG93c2AuXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MTcuNjczMDU0MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwNDcxNjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgICBcIm1wdGNwX3BtX25sX3JlbW92ZV9kb2l0XCIsXG4gICAgXCJtcHRjcF9pbml0X3NvY2tcIixcbiAgICBcIl9fbXB0Y3BfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZmluaXNoX2pvaW5cIixcbiAgICBcIl9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb246XFxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXFxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cXG4zLiBBZGRpbmcgdW5kZXJmbG93IGNoZWNrcyAoYFdBUk5fT05fT05DRWApIGZvciBgcG0tXFx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjE3LjY3MzA2MDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMDc4MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNjMjBiNjI1ZWY5ZDVmMWE0ZGE2OGJmYmZkOWQ3YjliZTc3YmMwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoxMjoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjQ4NWQ1NWI2NmVhNjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMTksMTAgKzE5LDYgQEAgc3RydWN0IHNlcV9maWxlO1xcbiBcXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xcbiBzdHJ1Y3QgbXB0Y3BfZXh0IHtcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHR1NjRcXHRkYXRhX2FjaztcXG4tXFx0XFx0dTMyXFx0ZGF0YV9hY2szMjtcXG4tXFx0fTtcXG4gXFx0dTY0XFx0XFx0ZGF0YV9zZXE7XFxuIFxcdHUzMlxcdFxcdHN1YmZsb3dfc2VxO1xcbiBcXHR1MTZcXHRcXHRkYXRhX2xlbjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxcbiBcXHRUUF9BUkdTKG1wZXh0KSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuLVxcdFxcdF9fZmllbGQodTY0LCBkYXRhX2FjaylcXG4gXFx0XFx0X19maWVsZCh1NjQsIGRhdGFfc2VxKVxcbiBcXHRcXHRfX2ZpZWxkKHUzMiwgc3ViZmxvd19zZXEpXFxuIFxcdFxcdF9fZmllbGQodTE2LCBkYXRhX2xlbilcXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG4tXFx0XFx0X19lbnRyeS1cXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cXHUwMDNlYWNrNjQgPyBtcGV4dC1cXHUwMDNlZGF0YV9hY2sgOiBtcGV4dC1cXHUwMDNlZGF0YV9hY2szMjtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlZGF0YV9zZXEgPSBtcGV4dC1cXHUwMDNlZGF0YV9zZXE7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXFx1MDAzZXN1YmZsb3dfc2VxO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VkYXRhX2xlbiA9IG1wZXh0LVxcdTAwM2VkYXRhX2xlbjtcXG5AQCAtMTEyLDggKzExMCw4IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MobXB0Y3BfZHVtcF9tcGV4dCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlaW5maW5pdGVfbWFwID0gbXBleHQtXFx1MDAzZWluZmluaXRlX21hcDtcXG4gXFx0KSxcXG4gXFxuLVxcdFRQX3ByaW50ayhcXFwiZGF0YV9hY2s9JWxsdSBkYXRhX3NlcT0lbGx1IHN1YmZsb3dfc2VxPSV1IGRhdGFfbGVuPSV1IGNzdW09JXggdXNlX21hcD0ldSBkc242ND0ldSBkYXRhX2Zpbj0ldSB1c2VfYWNrPSV1IGFjazY0PSV1IG1wY19tYXA9JXUgZnJvemVuPSV1IHJlc2V0X3RyYW5zaWVudD0ldSByZXNldF9yZWFzb249JXUgY3N1bV9yZXFkPSV1IGluZmluaXRlX21hcD0ldVxcXCIsXFxuLVxcdFxcdCAgX19lbnRyeS1cXHUwMDNlZGF0YV9hY2ssIF9fZW50cnktXFx1MDAzZWRhdGFfc2VxLFxcbitcXHRUUF9wcmludGsoXFxcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XFxcIixcXG4rXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VkYXRhX3NlcSxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VzdWJmbG93X3NlcSwgX19lbnRyeS1cXHUwMDNlZGF0YV9sZW4sXFxuIFxcdFxcdCAgX19lbnRyeS1cXHUwMDNlY3N1bSwgX19lbnRyeS1cXHUwMDNldXNlX21hcCxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2Vkc242NCwgX19lbnRyeS1cXHUwMDNlZGF0YV9maW4sXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IDI1NjkzODViYWI3Y2EuLjYwOGNiNTY4ODk3Y2YgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTIxLDE0ICsyMSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEZhbGxiYWNrVG9rZW5Jbml0XFxcIiwgTVBUQ1BfTUlCX1RPS0VORkFMTEJBQ0tJTklUKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBUQ1BSZXRyYW5zXFxcIiwgTVBUQ1BfTUlCX1JFVFJBTlNTRUdTKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm9Ub2tlbkZvdW5kXFxcIiwgTVBUQ1BfTUlCX0pPSU5OT1RPS0VOKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm9JZEZvdW5kXFxcIiwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5blJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5SWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkJhY2t1cFJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5CQUNLVVBSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja1J4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja0JhY2t1cFJ4XFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXFxcIiwgTVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5BY2tOb01QSm9pblxcXCIsIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTiksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja1J4XFxcIiwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja0hNYWNGYWlsdXJlXFxcIiwgTVBUQ1BfTUlCX0pPSU5BQ0tNQUMpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5BY2tOb01QSm9pblxcXCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTiksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pbkFja05vQ3R4XFxcIiwgTVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luUmVqZWN0ZWRcXFwiLCBNUFRDUF9NSUJfSk9JTlJFSkVDVEVEKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTVBKb2luTm90RXN0YWJsaXNoZWRcXFwiLCBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5UeFxcXCIsIE1QVENQX01JQl9KT0lOU1lOVFgpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcXFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUiksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1QSm9pblN5blR4QmluZEVyclxcXCIsIE1QVENQX01JQl9KT0lOU1lOVFhCSU5ERVJSKSxcXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJCbGFja2hvbGVcXFwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiTVBDYXBhYmxlRGF0YUZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIk1ENVNpZ0ZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiTUQ1U2lnUmVzZXRcXFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJEc3NGYWxsYmFja1xcXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIkRzc1Jlc2V0XFxcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcXG5pbmRleCAzYTM0MjVlMjU4YTc2Li4xZWJkYjU1ZTk1MzQzIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxcbisrKyBiL25ldC9tcHRjcC9taWIuaFxcbkBAIC0xNiwxNCArMTYsMTkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xcbiBcXHRNUFRDUF9NSUJfVE9LRU5GQUxMQkFDS0lOSVQsXFx0LyogQ291bGQgbm90IGluaXQvYWxsb2NhdGUgdG9rZW4gKi9cXG4gXFx0TVBUQ1BfTUlCX1JFVFJBTlNTRUdTLFxcdFxcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXFxuIFxcdE1QVENQX01JQl9KT0lOTk9UT0tFTixcXHRcXHQvKiBSZWNlaXZlZCBNUF9KT0lOIGJ1dCB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFxcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IG5vIGxvY2FsIElEIHdhcyBmb3VuZCAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFxcdFxcdC8qIFJlY2VpdmVkIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkJBQ0tVUFJYLFxcdC8qIFJlY2VpdmVkIGEgU1lOICsgTVBfSk9JTiArIGJhY2t1cCBmbGFnICovXFxuIFxcdE1QVENQX01JQl9KT0lOU1lOQUNLUlgsXFx0XFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkFDS0JBQ0tVUFJYLFxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTkFDS01BQyxcXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4sXFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTkFDS1JYLFxcdFxcdC8qIFJlY2VpdmVkIGFuIEFDSyArIE1QX0pPSU4gKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXFx0XFx0LyogSE1BQyB3YXMgd3Jvbmcgb24gQUNLICsgTVBfSk9JTiAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4sXFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gQUNLICovXFxuK1xcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCxcXHQvKiBNUF9SU1Q6IG5vIHN1YmZsb3cgY29udGV4dCBvbiBBQ0sgKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCxcXHRcXHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xcbitcXHRNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRUQsXFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cXG4gXFx0TVBUQ1BfTUlCX0pPSU5TWU5UWCxcXHRcXHQvKiBTZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcXHQvKiBOb3QgYWJsZSB0byBjcmVhdGUgYSBzb2NrZXQgd2hlbiBzZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbiBcXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcXHQvKiBOb3QgYWJsZSB0byBiaW5kKCkgdGhlIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIGEgU1lOICsgTVBfSk9JTiAqL1xcbkBAIC04NCw3ICs4OSw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcXG4gXFx0XFx0XFx0XFx0XFx0ICogZXN0YWJsaXNoZWQgcGFja2V0XFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRNUFRDUF9NSUJfTUQ1U0lHRkFMTEJBQ0ssXFx0LyogQ29uZmxpY3RpbmcgVENQIG9wdGlvbiBlbmFibGVkICovXFxuK1xcdE1QVENQX01JQl9NRDVTSUdSRVNFVCxcXHRcXHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXFxuIFxcdE1QVENQX01JQl9EU1NGQUxMQkFDSyxcXHRcXHQvKiBCYWQgb3IgbWlzc2luZyBEU1MgKi9cXG4rXFx0TVBUQ1BfTUlCX0RTU1JFU0VULFxcdFxcdC8qIE1QX1JTVDogYmFkIGRhdGEgbWFwcGluZyAqL1xcbiBcXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXFxuIFxcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xcbiBcXHRNUFRDUF9NSUJfV0lOUFJPQkUsXFx0XFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xcbmluZGV4IGQxZjczYzNlMzlmYTMuLjhiNjg4NjgyNTVjNTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xcbkBAIC02NzAsNyArNjcwLDggQEAgdm9pZCBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKSB7XFxuIFxcdFxcdGlmICh1cGRhdGVfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwbS1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdHBtLVxcdTAwM2VleHRyYV9zdWJmbG93cy0tO1xcbitcXHRcXHRcXHRpZiAoIVdBUk5fT05fT05DRShwbS1cXHUwMDNlZXh0cmFfc3ViZmxvd3MgPT0gMCkpXFxuK1xcdFxcdFxcdFxcdHBtLVxcdTAwM2VleHRyYV9zdWJmbG93cy0tO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cG0tXFx1MDAzZWxvY2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuaW5kZXggMjIwM2NjMmQyNzQ4NS4uYjk0ZmJiNDgzYmY5NCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG5AQCAtMjgxLDggKzI4MSw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpXFxuK3N0YXRpYyB2b2lkXFxuK21wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xcbiBcXHRpbnQgYW5ub19uciA9IDA7XFxuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZtYXRjaC1cXHUwMDNlbGlzdCk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbiBcXG4tXFx0bXB0Y3BfcG1fcmVtb3ZlX2FkZHJfZW50cnkobXNrLCBtYXRjaCk7XFxuK1xcdG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeShtc2ssIG1hdGNoKTtcXG4gXFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggZWM4NzRkMmVhZDZhNC4uYjQ3NGQwMzYyMGE3NSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTU4MSwxNyArNTgxLDIzIEBAIHN0YXRpYyBib29sIG1wdGNwX3BlbmRpbmdfZGF0YV9maW4oc3RydWN0IHNvY2sgKnNrLCB1NjQgKnNlcSlcXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbitcXHR1MzIgcnRvX21pbiA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3J0b19taW4pO1xcbitcXHR1MzIgcnRvX21heCA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3J0b19tYXgpO1xcbiBcXHR1MzIgcmV0cmFuc21pdHM7XFxuIFxcbitcXHQvKiBUaGUgc3lzY3RscyBhcmUgdmFsaWRhdGVkIGluZGVwZW5kZW50bHk6IHJ0b19taW4gXFx1MDAzZSBydG9fbWF4IGlzXFxuK1xcdCAqIHBvc3NpYmxlLCBndWFyZCBhZ2FpbnN0IGlsb2cyKDApLlxcbitcXHQgKi9cXG4gXFx0cmV0cmFuc21pdHMgPSBtaW5fdCh1MzIsIGljc2stXFx1MDAzZWljc2tfcmV0cmFuc21pdHMsXFxuLVxcdFxcdFxcdCAgICBpbG9nMihUQ1BfUlRPX01BWCAvIFRDUF9SVE9fTUlOKSk7XFxuK1xcdFxcdFxcdCAgICBpbG9nMihtYXhfdCh1MzIsIHJ0b19tYXggLyBydG9fbWluLCAxKSkpO1xcbiBcXG4tXFx0bXB0Y3Bfc2soc2spLVxcdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXFx1MDAzY1xcdTAwM2MgcmV0cmFuc21pdHM7XFxuK1xcdG1wdGNwX3NrKHNrKS1cXHUwMDNldGltZXJfaXZhbCA9IHJ0b19taW4gXFx1MDAzY1xcdTAwM2MgcmV0cmFuc21pdHM7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRvdXQpXFxuIHtcXG4tXFx0bXB0Y3Bfc2soc2spLVxcdTAwM2V0aW1lcl9pdmFsID0gdG91dCBcXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XFxuK1xcdG1wdGNwX3NrKHNrKS1cXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXFx1MDAzZSAwID8gdG91dCA6XFxuK1xcdFxcdFxcdFxcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcnRvX21pbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIG1wdGNwX3RpbWVvdXRfZnJvbV9zdWJmbG93KGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpXFxuQEAgLTMxNjEsNyArMzE2Nyw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bXNrLVxcdTAwM2Vjb25uX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bXNrLVxcdTAwM2Vqb2luX2xpc3QpO1xcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNm1zay1cXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcXG4gXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcbiBcXHRtc2stXFx1MDAzZWZpcnN0X3BlbmRpbmcgPSBOVUxMO1xcbi1cXHRtc2stXFx1MDAzZXRpbWVyX2l2YWwgPSBUQ1BfUlRPX01JTjtcXG4rXFxuK1xcdC8qIG1zayBkb2VzIG5vdCBnbyB0aHJvdWdoIHRjcF9pbml0X3NvY2soKTsgc2VlZCBSVE8gYm91bmRzLiAqL1xcbitcXHRpY3NrLVxcdTAwM2VpY3NrX3J0b19taW4gPVxcbitcXHRcXHR1c2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzKSk7XFxuK1xcdGljc2stXFx1MDAzZWljc2tfcnRvX21heCA9XFxuK1xcdFxcdG1zZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcXG4rXFx0bXNrLVxcdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cXHUwMDNlaWNza19ydG9fbWluO1xcbiBcXHRtc2stXFx1MDAzZXNjYWxpbmdfcmF0aW8gPSBUQ1BfREVGQVVMVF9TQ0FMSU5HX1JBVElPO1xcbiBcXHRtc2stXFx1MDAzZWJhY2tsb2dfbGVuID0gMDtcXG4gXFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XFxuQEAgLTM5ODgsNiArNDAwMiw3IEBAIGJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNzaylcXG4gXFxuIFxcdC8qIG1wdGNwIHNvY2tldCBhbHJlYWR5IGNsb3Npbmc/ICovXFxuIFxcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcXG4gXFx0XFx0c3ViZmxvdy1cXHUwMDNlcmVzZXRfcmVhc29uID0gTVBUQ1BfUlNUX0VNUFRDUDtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5pbmRleCBiM2FmMzQ2MmJkZDE2Li4wNmExMDdkNGU4MzkyIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5AQCAtMTE0OSw4ICsxMTQ5LDYgQEAgaW50IG1wdGNwX3BtX2Fubm91bmNlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcXG4gXFx0XFx0XFx0ICAgYm9vbCBlY2hvKTtcXG4gaW50IG1wdGNwX3BtX3JlbW92ZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KTtcXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqZW50cnkpO1xcbiBcXG4gLyogdGhlIGRlZmF1bHQgcGF0aCBtYW5hZ2VyLCB1c2VkIGluIG1wdGNwX3BtX3VucmVnaXN0ZXIgKi9cXG4gZXh0ZXJuIHN0cnVjdCBtcHRjcF9wbV9vcHMgbXB0Y3BfcG1fa2VybmVsO1xcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuIC8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4ge1xcbi1cXHRpZiAoLS1tc2stXFx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFxcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cXHUwMDNlcG0uZXh0cmFfc3ViZmxvd3MgPT0gMCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIC0tbXNrLVxcdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcXHUwMDNjIG1wdGNwX3BtX2dldF9saW1pdF9leHRyYV9zdWJmbG93cyhtc2spKVxcbiBcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlcG0uYWNjZXB0X3N1YmZsb3csIHRydWUpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFxuIFxcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XFxuIFxcdGlmIChsb2NhbF9pZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XFxuIFxcdFxcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0ICogVENQIG9wdGlvbiBzcGFjZS5cXG4gXFx0ICovXFxuIFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cXHUwMDNlbWQ1c2lnX2luZm8pKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChza19saXN0ZW5lciksIE1QVENQX01JQl9NRDVTSUdSRVNFVCk7XFxuIFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01NjMsNiArNTY1LDcgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdHU4IGhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFXTtcXG4gXFxuIFxcdFxcdGlmICghKG1wX29wdC5zdWJvcHRpb25zIFxcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XFxuK1xcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEpPSU5TWU5BQ0tOT01QSk9JTik7XFxuIFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XFxuIFxcdFxcdFxcdGdvdG8gZG9fcmVzZXQ7XFxuIFxcdFxcdH1cXG5AQCAtODY1LDYgKzg2OCwxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xcbiBcXHRcXHRcXHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCFjdHgpXFxuK1xcdFxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XFxuK1xcdFxcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcXG4gXFx0XFx0XFx0XFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZGlzcG9zZV9jaGlsZDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0xNDE2LDYgKzE0MjUsNyBAQCBzdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaylcXG4gXFx0XFx0XFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XFxuK1xcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzc2spLCBNUFRDUF9NSUJfRFNTUkVTRVQpO1xcbiBcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XFxuIFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX1JTVF9FTUlERExFQk9YIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfUlNUX0VNUFRDUDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcXG5pbmRleCBjYmU1NzNjNGFiM2FkLi5lYTRjYjZjMWJkNWUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXFxuQEAgLTEyNjQsNyArMTI2NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Ntc2dfdHlwZXMoaW50IGZkLCBjb25zdCBzdHJ1Y3QgY2ZnX2Ntc2dfdHlwZXMgKmNtc2cpXFxuIFxcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXFxuIHtcXG4tXFx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xcbitcXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKHR5cGUsICcsJyk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbiBcXG4gXFx0Y2ZnX2Ntc2dfdHlwZXMuY21zZ19lbmFibGVkID0gMTtcXG5AQCAtMTI5Miw3ICsxMjkyLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY21zZ190eXBlcyhjb25zdCBjaGFyICp0eXBlKVxcbiBcXG4gc3RhdGljIHZvaWQgcGFyc2Vfc2V0c29ja19vcHRpb25zKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4tXFx0Y2hhciAqbmV4dCA9IHN0cmNocihuYW1lLCAnLCcpO1xcbitcXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbiBcXG4gXFx0aWYgKG5leHQpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxcbmluZGV4IGQxNTg2NzhmYTZhYjAuLjdhMmE4NTFmYTBhZGIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxcbkBAIC0yMTIsOCArMjEyLDggQEAgaWYgJGNoZWNrc3VtOyB0aGVuXFxuIGZpXFxuIFxcbiBpZiAkY2FwdHVyZTsgdGhlblxcbi1cXHRybmRoPVxcXCIke25zMTo0fVxcXCJcXG4tXFx0bXB0Y3BfbGliX3ByX2luZm8gXFxcIlBhY2tldCBjYXB0dXJlIGZpbGVzIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtybmRofS1cXFwiXFxuK1xcdGNhcHByZWZpeD1cXFwibXB0Y3BfY29ubmVjdC0ke25zMTo0fVxcXCJcXG4rXFx0bXB0Y3BfbGliX3ByX2luZm8gXFxcInBjYXAgd2lsbCBoYXZlIHRoaXMgcHJlZml4OiAke2NhcHByZWZpeH0tXFxcIlxcbiBmaVxcbiBcXG4gc2V0X2V0aHRvb2xfZmxhZ3MoKSB7XFxuQEAgLTM3Miw4ICszNzIsOCBAQCBkb190cmFuc2ZlcigpXFxuIFxcdFxcdFxcdGNhcHVzZXI9XFxcIi1aICRTVURPX1VTRVJcXFwiXFxuIFxcdFxcdGZpXFxuIFxcbi1cXHRcXHRsb2NhbCBjYXBmaWxlPVxcXCIke3JuZGh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVxcXCJcXG4tXFx0XFx0bG9jYWwgY2Fwb3B0PVxcXCItaSBhbnkgLXMgNjU1MzUgLUIgMzI3NjggJHtjYXB1c2VyfVxcXCJcXG4rXFx0XFx0bG9jYWwgY2FwZmlsZT1cXFwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVxcXCJcXG4rXFx0XFx0bG9jYWwgY2Fwb3B0PVxcXCItaSBhbnkgLXMgMTI4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cXFwiXFxuIFxcbiBcXHRcXHRpcCBuZXRucyBleGVjICR7bGlzdGVuZXJfbnN9IHRjcGR1bXAgJHtjYXBvcHR9IFxcXFxcXG4gXFx0XFx0XFx0LXcgXFxcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFxcXCIgXFx1MDAzZVxcdTAwM2UgXFxcIiR7Y2Fwb3V0fVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXFxuaW5kZXggNWUyMjJiYTk3N2U0ZS4uM2I4ZDJjOGE2MjE2MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbkBAIC0zNzcsNyArMzc3LDggQEAgc3RhdGljIHZvaWQgZ2V0X3N1YmZsb3dfaW5mbyhjaGFyICpzdWJmbG93X2FkZHJzKVxcbiBcXHRpbnQgcmV0O1xcbiBcXHRpbnQgZmQ7XFxuIFxcbi1cXHRyZXQgPSBzc2NhbmYoc3ViZmxvd19hZGRycywgXFxcIiVbXjpdOiVkICVbXjpdOiVkXFxcIiwgc2FkZHIsIFxcdTAwMjZzcG9ydCwgZGFkZHIsIFxcdTAwMjZkcG9ydCk7XFxuK1xcdHJldCA9IHNzY2FuZihzdWJmbG93X2FkZHJzLCBcXFwiJTYzW146XTolZCAlNjNbXjpdOiVkXFxcIixcXG4rXFx0XFx0ICAgICBzYWRkciwgXFx1MDAyNnNwb3J0LCBkYWRkciwgXFx1MDAyNmRwb3J0KTtcXG4gXFx0aWYgKHJldCAhPSA0KVxcbiBcXHRcXHRkaWVfcGVycm9yKFxcXCJJUCBQT1JUIFBhaXJzIGhhcyBzdHlsZSBwcm9ibGVtcyFcXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG5pbmRleCA3ZGM5MWZhYzQ5MTdlLi4xOGNlNzEzNmEyYjBlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcXG5AQCAtNzUsNiArNzUsMTQgQEAgdW5zZXQgam9pbl9zeW5fdHhcXG4gdW5zZXQgam9pbl9jcmVhdGVfZXJyXFxuIHVuc2V0IGpvaW5fYmluZF9lcnJcXG4gdW5zZXQgam9pbl9jb25uZWN0X2Vyclxcbit1bnNldCBqb2luX3N5bmFja19ub19tcGpvaW5cXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXFxuK3Vuc2V0IGpvaW5fYWNrX25vX2N0eFxcbit1bnNldCBqb2luX25vdF9lc3RhYmxpc2hlZFxcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXFxuK1xcbit1bnNldCByc3RfbWQ1c2lnXFxuK3Vuc2V0IHJzdF9kc3NcXG4gXFxuIHVuc2V0IGZiX25zMVxcbiB1bnNldCBmYl9uczJcXG5AQCAtOTcxLDcgKzk3OSw3IEBAIGNvbmRfc3RhcnRfY2FwdHVyZSgpXFxuIFxcdFxcdGNhcGZpbGU9JChwcmludGYgXFxcIm1wX2pvaW4tJTAydS0lcy5wY2FwXFxcIiBcXFwiJE1QVENQX0xJQl9URVNUX0NPVU5URVJcXFwiIFxcXCIkbnNcXFwiKVxcbiBcXG4gXFx0XFx0ZWNobyBcXFwiQ2FwdHVyaW5nIHRyYWZmaWMgZm9yIHRlc3QgJE1QVENQX0xJQl9URVNUX0NPVU5URVIgaW50byAkY2FwZmlsZVxcXCJcXG4tXFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zXFxcIiB0Y3BkdW1wIC1pIGFueSAtcyA2NTUzNSAtQiAzMjc2OCAkY2FwdXNlciAtdyBcXFwiJGNhcGZpbGVcXFwiIFxcdTAwM2UgXFxcIiRjYXBvdXRcXFwiIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbitcXHRcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIHRjcGR1bXAgLWkgYW55IC1zIDEyOCAtQiAzMjc2OCAkY2FwdXNlciAtdyBcXFwiJGNhcGZpbGVcXFwiIFxcdTAwM2UgXFxcIiRjYXBvdXRcXFwiIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbiBcXHRcXHRjYXBwaWQ9JCFcXG4gXFxuIFxcdFxcdHNsZWVwIDFcXG5AQCAtMTM1Myw2ICsxMzYxLDggQEAgY2hrX3JzdF9ucigpXFxuIFxcdGxvY2FsIHJzdF90eD0kMVxcbiBcXHRsb2NhbCByc3Rfcng9JDJcXG4gXFx0bG9jYWwgbnNfaW52ZXJ0PSR7MzotXFxcIlxcXCJ9XFxuK1xcdGxvY2FsIG1kNXNpZz0ke3JzdF9tZDVzaWc6LTB9XFxuK1xcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XFxuIFxcdGxvY2FsIGNvdW50XFxuIFxcdGxvY2FsIG5zX3R4PSRuczFcXG4gXFx0bG9jYWwgbnNfcng9JG5zMlxcbkBAIC0xMzg5LDYgKzEzOTksMjEgQEAgY2hrX3JzdF9ucigpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJpbnRfb2tcXG4gXFx0ZmlcXG4rXFxuK1xcdCMgTVBUQ1BfUlNUX0VNUFRDUCByZXNldC1ldmVudCBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxcbitcXHQjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IE1ENVNpZ1Jlc2V0IGZpcmVzIG9uIHRoZSBsaXN0ZW5lclxcbitcXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cXG4rXFx0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFxcXCJNUFRjcEV4dE1ENVNpZ1Jlc2V0XFxcIilcXG4rXFx0aWYgWyAtbiBcXFwiJGNvdW50XFxcIiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjb3VudFxcXCIgIT0gXFxcIiRtZDVzaWdcXFwiIF07IHRoZW5cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcIk1ENVNpZ1Jlc2V0XFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgTUQ1U2lnUmVzZXQgZXhwZWN0ZWQgJG1kNXNpZ1xcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMyfSBcXFwiTVBUY3BFeHREc3NSZXNldFxcXCIpXFxuK1xcdGlmIFsgLW4gXFxcIiRjb3VudFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkY291bnRcXFwiICE9IFxcXCIkZHNzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHByaW50X2NoZWNrIFxcXCJEc3NSZXNldFxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IERzc1Jlc2V0IGV4cGVjdGVkICRkc3NcXFwiXFxuK1xcdGZpXFxuIH1cXG4gXFxuIGNoa19pbmZpX25yKClcXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcXG4gXFx0bG9jYWwgcnN0X25yPSR7am9pbl9yc3RfbnI6LTB9XFxuIFxcdGxvY2FsIGluZmlfbnI9JHtqb2luX2luZmlfbnI6LTB9XFxuIFxcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cXG4rXFx0bG9jYWwgc3luYWNrX25vX21wam9pbj0ke2pvaW5fc3luYWNrX25vX21wam9pbjotMH1cXG4rXFx0bG9jYWwgYWNrX25vX21wam9pbj0ke2pvaW5fYWNrX25vX21wam9pbjotMH1cXG4rXFx0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cXG4rXFx0bG9jYWwgbm90X2VzdGFibGlzaGVkPSR7am9pbl9ub3RfZXN0YWJsaXNoZWQ6LTB9XFxuK1xcdGxvY2FsIG5vX2lkX2ZvdW5kPSR7am9pbl9ub19pZF9mb3VuZDotMH1cXG4gXFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XFxuIFxcdGxvY2FsIGNvdW50XFxuIFxcdGxvY2FsIHdpdGhfY29va2llXFxuQEAgLTE2NTUsNiArMTY4NSw0NCBAQCBjaGtfam9pbl9ucigpXFxuIFxcdFxcdGZhaWxfdGVzdCBcXFwiZ290ICRjb3VudCBKT0lOW3NdIHN5biByZWplY3RlZCBleHBlY3RlZCAkc3luX3JlalxcXCJcXG4gXFx0ZmlcXG4gXFxuK1xcdCMgUGVyLWV2ZW50IE1QVENQX1JTVF9FTVBUQ1AgSk9JTiBjb3VudGVyczsgZGVmYXVsdCAwLCBnYXRlZCBvblxcbitcXHQjIGF2YWlsYWJpbGl0eS4gIEZpeGVkIG5hbWVzcGFjZXM6IHRoZSAqU3luQWNrKiBvbmUgZmlyZXMgb24gdGhlXFxuK1xcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxcbitcXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXFxcIk1QVGNwRXh0TVBKb2luU3luQWNrTm9NUEpvaW5cXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJHN5bmFja19ub19tcGpvaW5cXFwiIF07IHRoZW5cXG4rXFx0XFx0cmM9JHtLU0ZUX0ZBSUx9XFxuK1xcdFxcdHByaW50X2NoZWNrIFxcXCJzeW5hY2sgbm8gbXBqb2luXFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgSk9JTltzXSBzeW5hY2sgbm8gbXBqb2luIGV4cGVjdGVkICRzeW5hY2tfbm9fbXBqb2luXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFxcXCJNUFRjcEV4dE1QSm9pbkFja05vTVBKb2luXFxcIilcXG4rXFx0aWYgWyAtbiBcXFwiJGNvdW50XFxcIiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjb3VudFxcXCIgIT0gXFxcIiRhY2tfbm9fbXBqb2luXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJjPSR7S1NGVF9GQUlMfVxcbitcXHRcXHRwcmludF9jaGVjayBcXFwiYWNrIG5vIG1wam9pblxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIG1wam9pbiBleHBlY3RlZCAkYWNrX25vX21wam9pblxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcXFwiTVBUY3BFeHRNUEpvaW5BY2tOb0N0eFxcXCIpXFxuK1xcdGlmIFsgLW4gXFxcIiRjb3VudFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkY291bnRcXFwiICE9IFxcXCIkYWNrX25vX2N0eFxcXCIgXTsgdGhlblxcbitcXHRcXHRyYz0ke0tTRlRfRkFJTH1cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcImFjayBubyBjdHhcXFwiXFxuK1xcdFxcdGZhaWxfdGVzdCBcXFwiZ290ICRjb3VudCBKT0lOW3NdIGFjayBubyBjdHggZXhwZWN0ZWQgJGFja19ub19jdHhcXFwiXFxuK1xcdGZpXFxuK1xcbitcXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXFxcIk1QVGNwRXh0TVBKb2luTm90RXN0YWJsaXNoZWRcXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJG5vdF9lc3RhYmxpc2hlZFxcXCIgXTsgdGhlblxcbitcXHRcXHRyYz0ke0tTRlRfRkFJTH1cXG4rXFx0XFx0cHJpbnRfY2hlY2sgXFxcImpvaW4gbm90IGVzdGFibGlzaGVkXFxcIlxcbitcXHRcXHRmYWlsX3Rlc3QgXFxcImdvdCAkY291bnQgSk9JTltzXSBub3QgZXN0YWJsaXNoZWQgZXhwZWN0ZWQgJG5vdF9lc3RhYmxpc2hlZFxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcXFwiTVBUY3BFeHRNUEpvaW5Ob0lkRm91bmRcXFwiKVxcbitcXHRpZiBbIC1uIFxcXCIkY291bnRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGNvdW50XFxcIiAhPSBcXFwiJG5vX2lkX2ZvdW5kXFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJjPSR7S1NGVF9GQUlMfVxcbitcXHRcXHRwcmludF9jaGVjayBcXFwiam9pbiBubyBpZCBmb3VuZFxcXCJcXG4rXFx0XFx0ZmFpbF90ZXN0IFxcXCJnb3QgJGNvdW50IEpPSU5bc10gbm8gaWQgZm91bmQgZXhwZWN0ZWQgJG5vX2lkX2ZvdW5kXFxcIlxcbitcXHRmaVxcbitcXG4gXFx0cHJpbnRfcmVzdWx0cyBcXFwiam9pbiBSeFxcXCIgJHtyY31cXG4gXFxuIFxcdGpvaW5fc3luX3R4PVxcXCIke2pvaW5fc3luX3R4Oi0ke3N5bl9ucn19XFxcIiBcXFxcXFxuQEAgLTIzNTksNiArMjQyNywzMSBAQCBzaWduYWxfYWRkcmVzc190ZXN0cygpXFxuIFxcdFxcdFxcdGNoa19hZGRfbnIgNCA0XFxuIFxcdFxcdGZpXFxuIFxcdGZpXFxuK1xcbitcXHQjIHNpZ25hbGxlZCBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGNsaWVudCwgd2hlcmUgYSBUQ1Atb25seVxcbitcXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxcbitcXHQjIHRvIHRoZSBsaXN0ZW5lciBhbmQgcmVjZWl2ZXMgYSBTWU4vQUNLIHdpdGhvdXQgTVBfSk9JTi5cXG4rXFx0IyBNUEpvaW5TeW5BY2tOb01QSm9pbiBpbmNyZW1lbnRzIG9uIHRoZSBjbGllbnQgc2lkZS5cXG4rXFx0aWYgcmVzZXQgXFxcInNpZ25hbCBhZGRyZXNzLCBUQ1Atb25seSBsaXN0ZW5lciBvbiBjbGllbnRcXFwiOyB0aGVuXFxuK1xcdFxcdGxvY2FsIGV4dHJhX2JpbmRcXG4rXFx0XFx0bG9jYWwgcG9ydFxcbitcXG4rXFx0XFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMxIDAgMVxcbitcXHRcXHRwbV9ubF9zZXRfbGltaXRzICRuczIgMSAxXFxuK1xcdFxcdHBtX25sX2FkZF9lbmRwb2ludCAkbnMxIDEwLjAuMi4yIGZsYWdzIHNpZ25hbFxcbitcXG4rXFx0XFx0cG9ydD0kKGdldF9wb3J0KVxcbitcXHRcXHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXFxcIiRwb3J0XFxcIiBcXFxcXFxuK1xcdFxcdFxcdC1zIFRDUCAxMC4wLjIuMiBcXHUwMDI2XFxuK1xcdFxcdGV4dHJhX2JpbmQ9JCFcXG4rXFx0XFx0bXB0Y3BfbGliX3dhaXRfbG9jYWxfcG9ydF9saXN0ZW4gXFxcIiRuczJcXFwiIFxcXCIkcG9ydFxcXCJcXG4rXFxuK1xcdFxcdHJ1bl90ZXN0cyAkbnMxICRuczIgMTAuMC4xLjFcXG4rXFx0XFx0am9pbl9zeW5hY2tfbm9fbXBqb2luPTEgam9pbl9zeW5fdHg9MSBcXFxcXFxuK1xcdFxcdFxcdGNoa19qb2luX25yIDAgMCAwXFxuK1xcbitcXHRcXHRraWxsICR7ZXh0cmFfYmluZH0gMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4gfVxcbiBcXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcXG5pbmRleCA3YjlhYWJlMTAxNzA0Li4zZWEzZDFlZmUzMmUxIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoXFxuQEAgLTI0LDYgKzI0LDcgQEAgc21hbGw9XFxcIlxcXCJcXG4gc291dD1cXFwiXFxcIlxcbiBjb3V0PVxcXCJcXFwiXFxuIGNhcG91dD1cXFwiXFxcIlxcbitjYXBwcmVmaXg9XFxcIlxcXCJcXG4gc2l6ZT0wXFxuIFxcbiB1c2FnZSgpIHtcXG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxcbiBcXG4gXFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcXG4gXFxuK1xcdGlmICRjYXB0dXJlOyB0aGVuXFxuK1xcdFxcdGNhcHByZWZpeD1cXFwic2ltdWx0X2Zsb3dzLSR7bnMxOjR9XFxcIlxcbitcXHRcXHRtcHRjcF9saWJfcHJfaW5mbyBcXFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cXFwiXFxuK1xcdGZpXFxuK1xcbiBcXHRpcCBsaW5rIGFkZCBuczFldGgxIG5ldG5zIFxcXCIkbnMxXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zMmV0aDEgbmV0bnMgXFxcIiRuczJcXFwiXFxuIFxcdGlwIGxpbmsgYWRkIG5zMWV0aDIgbmV0bnMgXFxcIiRuczFcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcXFwiJG5zMlxcXCJcXG4gXFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcXFwiJG5zMlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczNldGgxIG5ldG5zIFxcXCIkbnMzXFxcIlxcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXFxuIFxcbiBcXHRpZiAkY2FwdHVyZTsgdGhlblxcbiBcXHRcXHRsb2NhbCBjYXB1c2VyXFxuLVxcdFxcdGxvY2FsIHJuZGg9XFxcIiR7bnMxOjR9XFxcIlxcbiBcXHRcXHRpZiBbIC16ICRTVURPX1VTRVIgXSA7IHRoZW5cXG4gXFx0XFx0XFx0Y2FwdXNlcj1cXFwiXFxcIlxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNhcHVzZXI9XFxcIi1aICRTVURPX1VTRVJcXFwiXFxuIFxcdFxcdGZpXFxuIFxcbi1cXHRcXHRsb2NhbCBjYXBmaWxlPVxcXCIke3JuZGh9LSR7cG9ydH1cXFwiXFxuLVxcdFxcdGxvY2FsIGNhcG9wdD1cXFwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cXFwiXFxuK1xcdFxcdGxvY2FsIGNhcGZpbGU9XFxcIiR7Y2FwcHJlZml4fS0ke3BvcnR9XFxcIlxcbitcXHRcXHRsb2NhbCBjYXBvcHQ9XFxcIi1pIGFueSAtcyAxMDggLUIgMzI3NjggJHtjYXB1c2VyfVxcXCJcXG4gXFxuIFxcdFxcdGlwIG5ldG5zIGV4ZWMgJHtuczN9ICB0Y3BkdW1wICR7Y2Fwb3B0fSAtdyBcXFwiJHtjYXBmaWxlfS1saXN0ZW5lci5wY2FwXFxcIiAgXFx1MDAzZVxcdTAwM2UgXFxcIiR7Y2Fwb3V0fVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuIFxcdFxcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjoxOS4zMDY2NDYxMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzIyMTc3MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dFwiLFxuICAgIFwibXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRcIixcbiAgICBcIm1wdGNwX2luaXRfc29ja1wiLFxuICAgIFwiX19tcHRjcF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9maW5pc2hfam9pblwiLFxuICAgIFwiX19tcHRjcF9zdWJmbG93X2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBJdCBhZGRzIGBXQVJOX09OX09OQ0VgIGNoZWNrcyBmb3Igc3ViZmxvdyBhY2NvdW50aW5nIGluIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIGFuZCBgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB0byBjYXRjaCB1bmRlcmZsb3dzLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIFJUTyBib3VuZHMgc2VlZGluZyB0byB1c2Ugc3lzY3RsIHZhbHVlcyBpbnN0ZWFkIG9mIGhhcmRjb2RlZCBjb25zdGFudHMsIGFmZmVjdGluZyB0aW1lb3V0IGNhbGN1bGF0aW9ucyBpbiBgX19tcHRjcF9pbml0X3NvY2tgLCBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAsIGFuZCBgX19tcHRjcF9zZXRfdGltZW91dGAuIEFkZGl0aW9uYWxseSwgaXQgcmVuYW1lcyBhbmQgcmVzdHJpY3RzIHRoZSBzY29wZSBvZiBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgTVBUQ1AgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFuZCB0aW1lb3V0IGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIGFuZCB0aW1lb3V0cyBiZWhhdmUgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCArMTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7XG4gXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xuIHN0cnVjdCBtcHRjcF9leHQge1xuLVx0dW5pb24ge1xuLVx0XHR1NjRcdGRhdGFfYWNrO1xuLVx0XHR1MzJcdGRhdGFfYWNrMzI7XG4tXHR9O1xuIFx0dTY0XHRcdGRhdGFfc2VxO1xuIFx0dTMyXHRcdHN1YmZsb3dfc2VxO1xuIFx0dTE2XHRcdGRhdGFfbGVuO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0VFBfQVJHUyhtcGV4dCksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuLVx0XHRfX2ZpZWxkKHU2NCwgZGF0YV9hY2spXG4gXHRcdF9fZmllbGQodTY0LCBkYXRhX3NlcSlcbiBcdFx0X19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKVxuIFx0XHRfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCArMTEwLDggQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWluZmluaXRlX21hcCA9IG1wZXh0LVx1MDAzZWluZmluaXRlX21hcDtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJkYXRhX2Fjaz0lbGx1IGRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbitcdFRQX3ByaW50ayhcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4rXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxLCBfX2VudHJ5LVx1MDAzZWRhdGFfbGVuLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlY3N1bSwgX19lbnRyeS1cdTAwM2V1c2VfbWFwLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlZHNuNjQsIF9fZW50cnktXHUwMDNlZGF0YV9maW4sXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC0yMSwxNCArMjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEZhbGxiYWNrVG9rZW5Jbml0XCIsIE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBUQ1BSZXRyYW5zXCIsIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9Ub2tlbkZvdW5kXCIsIE1QVENQX01JQl9KT0lOTk9UT0tFTiksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9JZEZvdW5kXCIsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blJ4XCIsIE1QVENQX01JQl9KT0lOU1lOUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkJhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja1J4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0JhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja1J4XCIsIE1QVENQX01JQl9KT0lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pLFxuK1x0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja05vQ3R4XCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luUmVqZWN0ZWRcIiwgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm90RXN0YWJsaXNoZWRcIiwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcIiwgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blR4QmluZEVyclwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIkJsYWNraG9sZVwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUENhcGFibGVEYXRhRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTUQ1U2lnRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNRDVTaWdSZXNldFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxuIFx0U05NUF9NSUJfSVRFTShcIkRzc0ZhbGxiYWNrXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4rXHRTTk1QX01JQl9JVEVNKFwiRHNzUmVzZXRcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgKzE2LDE5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCxcdC8qIENvdWxkIG5vdCBpbml0L2FsbG9jYXRlIHRva2VuICovXG4gXHRNUFRDUF9NSUJfUkVUUkFOU1NFR1MsXHRcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXG4gXHRNUFRDUF9NSUJfSk9JTk5PVE9LRU4sXHRcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovXG4rXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFx0LyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOLFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYW4gQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXHRcdC8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyArIE1QX0pPSU4gKi9cbitcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIEFDSyAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLFx0LyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovXG4gXHRNUFRDUF9NSUJfSk9JTlJFSkVDVEVELFx0XHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcdC8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcdC8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG5AQCAtODQsNyArODksOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRcdFx0XHRcdCAqIGVzdGFibGlzaGVkIHBhY2tldFxuIFx0XHRcdFx0XHQgKi9cbiBcdE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyxcdC8qIENvbmZsaWN0aW5nIFRDUCBvcHRpb24gZW5hYmxlZCAqL1xuK1x0TVBUQ1BfTUlCX01ENVNJR1JFU0VULFx0XHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXG4gXHRNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssXHRcdC8qIEJhZCBvciBtaXNzaW5nIERTUyAqL1xuK1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXG5pbmRleCBkMWY3M2MzZTM5ZmEzLi44YjY4ODY4MjU1YzUwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcbisrKyBiL25ldC9tcHRjcC9wbS5jXG5AQCAtNjcwLDcgKzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHtcbiBcdFx0aWYgKHVwZGF0ZV9zdWJmbG93cykge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRwbS1cdTAwM2VleHRyYV9zdWJmbG93cy0tO1xuK1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuK1x0XHRcdFx0cG0tXHUwMDNlZXh0cmFfc3ViZmxvd3MtLTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC0yODEsOCArMjgxLDkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xuIFx0aW50IGFubm9fbnIgPSAwO1xuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuK1x0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuIFxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlYzg3NGQyZWFkNmE0Li5iNDc0ZDAzNjIwYTc1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtNTgxLDE3ICs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxuIHN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbitcdHUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWF4KTtcbiBcdHUzMiByZXRyYW5zbWl0cztcbiBcbitcdC8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiBcdTAwM2UgcnRvX21heCBpc1xuK1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4rXHQgKi9cbiBcdHJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0ICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTtcbitcdFx0XHQgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTtcbiBcbi1cdG1wdGNwX3NrKHNrKS1cdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXHUwMDNjXHUwMDNjIHJldHJhbnNtaXRzO1xuK1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4rXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDpcbitcdFx0XHRcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19ydG9fbWluKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbkBAIC0zMTYxLDcgKzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlam9pbl9saXN0KTtcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuK1xuK1x0LyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovXG4rXHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4rXHRcdHVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21pbl91cykpO1xuK1x0aWNzay1cdTAwM2VpY3NrX3J0b19tYXggPVxuK1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbitcdG1zay1cdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cdTAwM2VpY3NrX3J0b19taW47XG4gXHRtc2stXHUwMDNlc2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87XG4gXHRtc2stXHUwMDNlYmFja2xvZ19sZW4gPSAwO1xuIFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XG5AQCAtMzk4OCw2ICs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKVxuIFxuIFx0LyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi9cbiBcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCArMTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcbiBcdFx0XHQgICBib29sIGVjaG8pO1xuIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7XG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTtcbiBcbiAvKiB0aGUgZGVmYXVsdCBwYXRoIG1hbmFnZXIsIHVzZWQgaW4gbXB0Y3BfcG1fdW5yZWdpc3RlciAqL1xuIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDtcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0aWYgKC0tbXNrLVx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFx1MDAzYyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSlcbitcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAtLW1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXBtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XG4gXHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbitcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdCAqIFRDUCBvcHRpb24gc3BhY2UuXG4gXHQgKi9cbiBcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cdTAwM2VtZDVzaWdfaW5mbykpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTtcbiBcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2Myw2ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XG4gXHRcdFx0Z290byBkb19yZXNldDtcbiBcdFx0fVxuQEAgLTg2NSw2ICs4NjgsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFjdHggfHwgZmFsbGJhY2spIHtcbiBcdFx0XHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcbitcdFx0XHRcdGlmICghY3R4KVxuK1x0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuK1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTtcbitcdFx0XHRcdGVsc2VcbitcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbitcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0XHRcdGdvdG8gZGlzcG9zZV9jaGlsZDtcbiBcdFx0XHR9XG5AQCAtMTQxNiw2ICsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XG4gXHRcdFx0XHRcdFx0TVBUQ1BfUlNUX0VNSURETEVCT1ggOlxuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTVBUQ1A7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5AQCAtMTI2NCw3ICsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZylcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXG4ge1xuLVx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuK1x0Y29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRjZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxO1xuQEAgLTEyOTIsNyArMTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4rXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbiBcbiBcdGlmIChuZXh0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuQEAgLTIxMiw4ICsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW5cbiBmaVxuIFxuIGlmICRjYXB0dXJlOyB0aGVuXG4tXHRybmRoPVwiJHtuczE6NH1cIlxuLVx0bXB0Y3BfbGliX3ByX2luZm8gXCJQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tXCJcbitcdGNhcHByZWZpeD1cIm1wdGNwX2Nvbm5lY3QtJHtuczE6NH1cIlxuK1x0bXB0Y3BfbGliX3ByX2luZm8gXCJwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LVwiXG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCArMzcyLDggQEAgZG9fdHJhbnNmZXIoKVxuIFx0XHRcdGNhcHVzZXI9XCItWiAkU1VET19VU0VSXCJcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cIiR7cm5kaH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwiXG4rXHRcdGxvY2FsIGNhcG9wdD1cIi1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwiXG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXFxcbiBcdFx0XHQtdyBcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFwiIFx1MDAzZVx1MDAzZSBcIiR7Y2Fwb3V0fVwiIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJVteOl06JWQgJVteOl06JWRcIiwgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuK1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJTYzW146XTolZCAlNjNbXjpdOiVkXCIsXG4rXHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwiSVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbkBAIC03NSw2ICs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4rdW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fY3R4XG4rdW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWRcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXG4rXG4rdW5zZXQgcnN0X21kNXNpZ1xuK3Vuc2V0IHJzdF9kc3NcbiBcbiB1bnNldCBmYl9uczFcbiB1bnNldCBmYl9uczJcbkBAIC05NzEsNyArOTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcIm1wX2pvaW4tJTAydS0lcy5wY2FwXCIgXCIkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwiIFwiJG5zXCIpXG4gXG4gXHRcdGVjaG8gXCJDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlXCJcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13IFwiJGNhcGZpbGVcIiBcdTAwM2UgXCIkY2Fwb3V0XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgXCIkY2FwZmlsZVwiIFx1MDAzZSBcIiRjYXBvdXRcIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgKzEzNjEsOCBAQCBjaGtfcnN0X25yKClcbiBcdGxvY2FsIHJzdF90eD0kMVxuIFx0bG9jYWwgcnN0X3J4PSQyXG4gXHRsb2NhbCBuc19pbnZlcnQ9JHszOi1cIlwifVxuK1x0bG9jYWwgbWQ1c2lnPSR7cnN0X21kNXNpZzotMH1cbitcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgbnNfdHg9JG5zMVxuIFx0bG9jYWwgbnNfcng9JG5zMlxuQEAgLTEzODksNiArMTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4rXG4rXHQjIE1QVENQX1JTVF9FTVBUQ1AgcmVzZXQtZXZlbnQgY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4rXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TUQ1U2lnUmVzZXRcIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkbWQ1c2lnXCIgXTsgdGhlblxuK1x0XHRwcmludF9jaGVjayBcIk1ENVNpZ1Jlc2V0XCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXCJNUFRjcEV4dERzc1Jlc2V0XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGRzc1wiIF07IHRoZW5cbitcdFx0cHJpbnRfY2hlY2sgXCJEc3NSZXNldFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzc1wiXG4rXHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcbiBcdGxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfVxuIFx0bG9jYWwgaW5maV9ucj0ke2pvaW5faW5maV9ucjotMH1cbiBcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cbitcdGxvY2FsIHN5bmFja19ub19tcGpvaW49JHtqb2luX3N5bmFja19ub19tcGpvaW46LTB9XG4rXHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuK1x0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cbitcdGxvY2FsIG5vdF9lc3RhYmxpc2hlZD0ke2pvaW5fbm90X2VzdGFibGlzaGVkOi0wfVxuK1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgKzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKVxuIFx0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqXCJcbiBcdGZpXG4gXG4rXHQjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogdGhlICpTeW5BY2sqIG9uZSBmaXJlcyBvbiB0aGVcbitcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9IFwiTVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pblwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRzeW5hY2tfbm9fbXBqb2luXCIgXTsgdGhlblxuK1x0XHRyYz0ke0tTRlRfRkFJTH1cbitcdFx0cHJpbnRfY2hlY2sgXCJzeW5hY2sgbm8gbXBqb2luXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW5cIlxuK1x0ZmlcbitcbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkYWNrX25vX21wam9pblwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiYWNrIG5vIG1wam9pblwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbkFja05vQ3R4XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGFja19ub19jdHhcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImFjayBubyBjdHhcIlxuK1x0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwiXG4rXHRmaVxuK1xuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwiTVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub3RfZXN0YWJsaXNoZWRcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImpvaW4gbm90IGVzdGFibGlzaGVkXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub19pZF9mb3VuZFwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiam9pbiBubyBpZCBmb3VuZFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmRcIlxuK1x0ZmlcbitcbiBcdHByaW50X3Jlc3VsdHMgXCJqb2luIFJ4XCIgJHtyY31cbiBcbiBcdGpvaW5fc3luX3R4PVwiJHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fVwiIFxcXG5AQCAtMjM1OSw2ICsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKClcbiBcdFx0XHRjaGtfYWRkX25yIDQgNFxuIFx0XHRmaVxuIFx0ZmlcbitcbitcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4rXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxuK1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4rXHQjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLlxuK1x0aWYgcmVzZXQgXCJzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCI7IHRoZW5cbitcdFx0bG9jYWwgZXh0cmFfYmluZFxuK1x0XHRsb2NhbCBwb3J0XG4rXG4rXHRcdHBtX25sX3NldF9saW1pdHMgJG5zMSAwIDFcbitcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuK1x0XHRwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWxcbitcbitcdFx0cG9ydD0kKGdldF9wb3J0KVxuK1x0XHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXCIkcG9ydFwiIFxcXG4rXHRcdFx0LXMgVENQIDEwLjAuMi4yIFx1MDAyNlxuK1x0XHRleHRyYV9iaW5kPSQhXG4rXHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwiJG5zMlwiIFwiJHBvcnRcIlxuK1xuK1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4rXHRcdGpvaW5fc3luYWNrX25vX21wam9pbj0xIGpvaW5fc3luX3R4PTEgXFxcbitcdFx0XHRjaGtfam9pbl9uciAwIDAgMFxuK1xuK1x0XHRraWxsICR7ZXh0cmFfYmluZH0gMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbiB9XG4gXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbkBAIC0yNCw2ICsyNCw3IEBAIHNtYWxsPVwiXCJcbiBzb3V0PVwiXCJcbiBjb3V0PVwiXCJcbiBjYXBvdXQ9XCJcIlxuK2NhcHByZWZpeD1cIlwiXG4gc2l6ZT0wXG4gXG4gdXNhZ2UoKSB7XG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbitcdGlmICRjYXB0dXJlOyB0aGVuXG4rXHRcdGNhcHByZWZpeD1cInNpbXVsdF9mbG93cy0ke25zMTo0fVwiXG4rXHRcdG1wdGNwX2xpYl9wcl9pbmZvIFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cIlxuK1x0ZmlcbitcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCIkbnMxXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zIFwiJG5zMlwiXG4gXHRpcCBsaW5rIGFkZCBuczFldGgyIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcIiRuczJcIlxuIFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcIiRuczJcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgXCIkbnMzXCJcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXG4gXG4gXHRpZiAkY2FwdHVyZTsgdGhlblxuIFx0XHRsb2NhbCBjYXB1c2VyXG4tXHRcdGxvY2FsIHJuZGg9XCIke25zMTo0fVwiXG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCJcIlxuIFx0XHRlbHNlXG4gXHRcdFx0Y2FwdXNlcj1cIi1aICRTVURPX1VTRVJcIlxuIFx0XHRmaVxuIFxuLVx0XHRsb2NhbCBjYXBmaWxlPVwiJHtybmRofS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7cG9ydH1cIlxuK1x0XHRsb2NhbCBjYXBvcHQ9XCItaSBhbnkgLXMgMTA4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgXCIke2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcIiAgXHUwMDNlXHUwMDNlIFwiJHtjYXBvdXR9XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MTkuMzA2NjQ4ODI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3ODAxMTg2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmFpciBiaXQgb2YgdGhlIE1QVENQIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFjcm9zcyBzZXZlcmFsIGtleSBhcmVhczogdGhlIGhlYWRlcnMsIE1JQiAoTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBCYXNlKSBpbnRlcmFjdGlvbnMsIHBhdGggbWFuYWdlbWVudCwgYW5kIHRoZSBjb3JlIHByb3RvY29sIGxvZ2ljLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgbWl4IG9mIGNsZWFudXAsIG9ic2VydmFiaWxpdHkgaW1wcm92ZW1lbnRzLCBhbmQgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50cyB0byB0aGUgVENQL01QVENQIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHJlbW92YWwgb2YgYGRhdGFfYWNrYCBhbmQgYGRhdGFfYWNrMzJgIGZyb20gYG1wdGNwX2V4dGAgYW5kIGl0cyB0cmFjZXBvaW50LiBUaGlzIGlzIGxpa2VseSBhIHNpbXBsaWZpY2F0aW9uIG9yIHJlZmFjdG9yaW5nLCBhc3N1bWluZyB0aG9zZSBmaWVsZHMgd2VyZSBlaXRoZXIgcmVkdW5kYW50IG9yIG5vIGxvbmdlciByZWxldmFudC4gVGhlc2UgYXJlIGNvc21ldGljLCB1bmxpa2VseSB0byBiZSBpbXBhY3RmdWwuXG5cblRoZSBhZGRpdGlvbiBvZiBuZXcgU05NUCBNSUIgY291bnRlcnMgaXMgcHJpbWFyaWx5IGFib3V0IHByb3ZpZGluZyBiZXR0ZXIgdmlzaWJpbGl0eSBpbnRvIE1QVENQJ3MgaW50ZXJuYWwgc3RhdGUuIFRoaXMgaXMgZ29vZCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgdGhlIGFkZGl0aW9uIGl0c2VsZiB3b24ndCBiZSBzb21ldGhpbmcgdG8gZnV6eiBkaXJlY3RseS4gVGhpcyBpcyBnb29kIHN0dWZmLlxuXG5Ob3csIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgaXMgdGhlIGNvZGUgaW4gYG5ldC9tcHRjcC9wbS5jYCB3aXRoIHRoZSBhZGRlZCBgV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApYCBjaGVjayBiZWZvcmUgZGVjcmVtZW50aW5nLiBUaGlzIGlzIGEgcG90ZW50aWFsIGJ1ZyB0cmFwLiBUaGlzIGlzIHNjcmVhbWluZyBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiBpbmRpY2F0ZSBhIHByb2JsZW0gaW4gaG93IHRoZSBrZXJuZWwgaXMgdHJhY2tpbmcgc3ViZmxvd3MuIERlZmluaXRlbHkgYSBoaWdoIHByaW9yaXR5IGFyZWEuXG5cblRoZSByZW5hbWUgb2YgYG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCBhbmQgbWFraW5nIGl0IGBzdGF0aWNgIGluIGBwbV91c2Vyc3BhY2UuY2AgaXMganVzdCBjb2RlIGh5Z2llbmUuXG5cblRoZSBjaGFuZ2VzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgYXJlIHdoYXQgSSdtIHJlYWxseSBmb2N1c2luZyBvbi4gVGhlIHNoaWZ0IHRvIHVzaW5nIGBpY3NrLVx1MDAzZWljc2tfcnRvX21pbmAgYW5kIGBpY3NrLVx1MDAzZWljc2tfcnRvX21heGAgKGJhc2VkIG9uIHN5c3RlbSB0dW5pbmcgd2l0aCBgc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYHN5c2N0bF90Y3BfcnRvX21heF9tc2ApIGluc3RlYWQgb2YgaGFyZGNvZGVkIFRDUCBSVE8gdmFsdWVzIGluIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCdzIGVzc2VudGlhbGx5IGFsbG93aW5nIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byAqdHVuZSogdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHRocm91Z2ggdGhlIHN5c3RlbSB3aWRlIG5ldHdvcmsgcGFyYW1ldGVycy4gVGhpcyBjaGFuZ2VzIHRoZSB0aW1pbmcgb2YgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCB3aGljaCBjYW4gYmUgZ29vZCBvciBiYWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgbmV0d29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdHJ5IGFuZCBnZW5lcmF0ZSB0aW1pbmcgcmVsYXRlZCBpc3N1ZXMuIFRoZXNlIFJUTyBjaGFuZ2VzIHdpbGwgbGlrZWx5IGFmZmVjdCBvdmVyYWxsIGNvbm5lY3Rpb24gcGVyZm9ybWFuY2UgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMsIHNvIHRoaXMgYmVhcnMgY2xvc2VyIHNjcnV0aW55LlxuXG5UaGUgaW5jcmVtZW50IG9mIGBNUFRDUF9NSUJfTVBKT0lOTk9URVNUQUJMSVNIRURgIGluIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgZm9yIG1vbml0b3JpbmcgcHVycG9zZXMgYW5kIGxpa2VseSB3b24ndCBhZmZlY3QgdXMuXG5cbkluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIHRoZSBgV0FSTl9PTl9PTkNFYCBjaGVjayBpcyByZXBlYXRlZCwgYW5kIGBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeWAgaGFzIGdvbmUgYXdheS5cblxuVGhlIGluY3JlbWVudGluZyBvZiB2YXJpb3VzIE1JQiBjb3VudGVycyBpbiBgc3ViZmxvdy5jYCBiYXNlZCBvbiBkaWZmZXJlbnQgY29ubmVjdGlvbiBzdGF0ZXMgKGUuZy4sIGBNUEpPSU5OT0lERk9VTkRgLCBgTUQ1U0lHUkVTRVRgLCBldGMuKSBpcyBwdXJlbHkgZm9yIFNOTVAvTUlCIHJlcG9ydGluZyBhbmQgbW9uaXRvcmluZyBhbmQgaXMgbm90IGEgcHJpb3JpdHkgZm9yIGZ1enppbmcuXG5cbk15IHByaW9yaXRpZXMgZm9yIGZ1enppbmc6XG5cbjEuICAqKlRyaWdnZXJpbmcgdGhlIGBXQVJOX09OX09OQ0VgKio6IEkgd2FudCB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzYCBnbyB0byB6ZXJvIHVuZXhwZWN0ZWRseSBiZWZvcmUgdGhlIGRlY3JlbWVudCBoYXBwZW5zLiBUaGlzIGxpa2VseSBtZWFucyBjb3JydXB0aW5nIHRoZSBzdWJmbG93IGFjY291bnRpbmcgb3IgY2F1c2luZyB0aGUgcmVtb3ZhbCBvZiBhbiBleHRyYSBzdWJmbG93LiBUaGUgZnVuY3Rpb25zIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaW5jbHVkZSBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCwgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgYW5kIGl0cyBjYWxsZXJzIChgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AsIGBtcHRjcF9wbV9ubF9ybV9zdWJmbG93X3JlY2VpdmVkYCwgZXRjLikgc2luY2UgdGhleSBhcmUgcmVsYXRlZCB0byBzdWJmbG93IG1hbmFnZW1lbnQuXG4yLiAgKipFeHBsb3JpbmcgdGhlIFJUTyBCb3VuZHMgQ2hhbmdlKio6IEkgbmVlZCB0byB0ZXN0IGhvdyB0aGUgbmV3IFJUTyBjYWxjdWxhdGlvbnMgaW1wYWN0IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy4gSSB3aWxsIGZvY3VzIG9uIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgX19tcHRjcF9pbml0X3NvY2tgLlxuXG5JJ2xsIGJlIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgaW50byB0aGUgY2FsbHMgaW4gYG5ldC9tcHRjcC9wbS5jYCBhbmQgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGFjY291bnRpbmcgZm9yIHN1YmZsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjozNC4wODY3NzA5OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9NjYyPXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02ODQtXFx0aWYgKHVwZGF0ZV9zdWJmbG93cylcXG5uZXQvbXB0Y3AvcG0uYzo2ODU6XFx0XFx0X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3BtLmMtNjg2LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTI1MD11OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjUyLS8qIGNhbGxlZCB1bmRlciBQTSBsb2NrICovXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI1MzpzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1NC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjYyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjYzOlxcdF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhtc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNjQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjM0LjE0NDAzNjg0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTMxOTUxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIEZsb3cgTWFuYWdlbWVudCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZyB3aXRoaW4gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHNlZW0gbGlrZSBzdHJvbmcgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGxpa2VseSBoYW5kbGUgdGhlIHN1YmZsb3cgbWFuYWdlbWVudCwgd2hpY2ggaXMgb2Z0ZW4gYSBib3R0bGVuZWNrLiBIb3dldmVyLCBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aG9zZSwgSSBzaG91bGQgYWxzbyB2ZXJpZnkgdGhlIHJvbGUgb2YgdGltZW91dCBtZWNoYW5pc21zLiBJIHdpbGwgY2hlY2sgYm90aCBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byBzZWUgaWYgdGhvc2Ugcm91dGluZXMgYXJlIHBhcnQgb2YgdGhlIGJvdHRsZW5lY2suIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRpbWVvdXRzIGFyZSBjb250cmlidXRpbmcgdG8gYSBuZWdhdGl2ZSBzdWJmbG93IGV4cGVyaWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6MzguMzM3MjMzODI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDI0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz01NjE9c3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNTgwLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjU4MTpzdGF0aWMgdm9pZCBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01ODIte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjkyMD1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMS1cXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzAwMjpcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDAzLVxcdFxcdFxcdG1wdGNwX3NlbmRfYWNrKG1zayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjM4LjQxNDI2ODA2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjU0NjAzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1QVENQIFJldHJhbnNtaXNzaW9uIFRpbWVvdXRzKipcblxuT2theSwgc28gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBoYW5kbGluZyByZXRyYW5zbWlzc2lvbnMgaW4gTVBUQ1AsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgX19tcHRjcF9zZXRfdGltZW91dGAsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRpbWVvdXQgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHRpbWVvdXQgbWVjaGFuaXNtcyBhcmUgcmVhbGx5IHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHRpbWVvdXRzIGFyZSBzZXQgaXMga2V5IHRvIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYW5kIGRpYWdub3NpbmcgYW55IGNvbmdlc3Rpb24tcmVsYXRlZCBpc3N1ZXMuIEknbGwgZm9jdXMgb24gaG93IGBfX21wdGNwX3NldF90aW1lb3V0YCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IHRpbWVvdXQgdHlwZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NDEuOTc5NzMxMjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODMyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3Bfc2V0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz01ODE9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01OTYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NTk3OnN0YXRpYyB2b2lkIF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRvdXQpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNTk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTYxMT1zdGF0aWMgdm9pZCBtcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02MTctXFx0XFx0dG91dCA9IG1heCh0b3V0LCBtcHRjcF90aW1lb3V0X2Zyb21fc3ViZmxvdyhzdWJmbG93KSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NjE4OlxcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTYxOS19XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTg3PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjI4LVxcdH1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjI5OlxcdF9fbXB0Y3Bfc2V0X3RpbWVvdXQoc2ssIHRvdXQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjQyLjA0MzU2Nzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI3Mzg2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIFRpbWVvdXQgYW5kIFN1YmZsb3cgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRpbWVvdXQgbWVjaGFuaXNtcyBhbmQgc3ViZmxvdyBtYW5hZ2VtZW50IGFyZSBoYW5kbGVkIHdpdGhpbiBNUFRDUCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEl0IHNlZW1zIHRoYXQgYm90aCBgbXB0Y3Bfc2V0X3RpbWVvdXRgIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgdXRpbGl6ZSB0aGUgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgIGZ1bmN0aW9uLCB3aGljaCB3YXJyYW50cyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGNhbGxpbmcgcG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAgbWlnaHQgYmUgYSBwcm9taXNpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZy4gSSdsbCBmb2N1cyBvbiB0aGF0IG9uZSBmb3Igbm93LlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gYXJlYXMsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBSaWdodCwgSSByZWNhbGwgaXQgd2FzIG9yaWdpbmFsbHkgbmFtZWQgYG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCwgYW5kIGl0IGhhcyBzaW5jZSBiZWVuIG1hZGUgc3RhdGljLiBUaGF0J3MgcmVsZXZhbnQuIEkgc2VlIHRoYXQgaXQncyBub3cgY2FsbGVkIGZyb20gYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgY2hhaW4gb2YgY2FsbHMsIGFzIEknbSB0aGlua2luZyBvZiBob3cgdGhlIGFkZHJlc3NlcyBhcmUgYmVpbmcgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NDYuMDQ2MzA5MDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE0NjUwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTI4ND1zdGF0aWMgdm9pZFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyODU6bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTI4Ni1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0zMDU9aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzQzLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozNDQ6XFx0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0zNDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjQ2LjIzNzc3OTQ2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY4ODMxNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIFJlbW92YWwqKlxuXG5SaWdodCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzIG9mIE1QVENQLiBJJ3ZlIHNlZW4gdGhhdCBuYW1lIGNvbWUgdXAgaW4gdGhlIGtlcm5lbCBjb2RlIGJlZm9yZSwgYW5kIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgaGlnaGx5IGxpa2VseSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIE1QVENQIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5CZWZvcmUgSSBqdW1wIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBob3dldmVyLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIGZvciB0aGUgZXNzZW50aWFsIE1QVENQIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIG5lZWRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIG1vZHVsZXMgaW52b2x2ZWQgYW5kIHRoZSBkZXBlbmRhbmNpZXMgdGhleSBtYXkgaGF2ZS4gVGhhdCBtYXkgcXVpY2tseSBjbGFyaWZ5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGF0IHBsYXksIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIHRoYXQgSSBzaG91bGQgbG9vayBpbnRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEyOjUwLjEwNjYxNDIzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MjY2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTAuMTg2MjQ3ODY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjMzMTc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgTVBUQ1BgIGFzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gcG9pbnQuIE5hdHVyYWxseSwgdGhlIGZpcnN0IHBsYWNlIEknbGwgaGVhZCBpcyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGtleSBtb2R1bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93ICpleGFjdGx5KiB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgTVBUQ1BgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSB0aG9zZSByZWxhdGlvbnNoaXBzIHByZXR0eSBjbGVhcmx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjo1My41NDk1Njc5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTMuNTQ5NjI0MDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjc5MzE2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1QVENQYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHBhdGNoIGRldGFpbHMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoaW5ncyBsaWtlIFJUTyBib3VuZHMgYW5kIGBXQVJOX09OX09OQ0VgIHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5JJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB0YXJnZXQ6IGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgLCBgbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AsIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAsIGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZXhwb3Npbmcgc3VidGxlIGJ1Z3MuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBBaCwgeWVzLCBpdCdzIHJpZ2h0IGhlcmUgaW4gYHByb3RvY29sLmhgLiBUaGF0IG1lYW5zIEkgY2FuJ3QgZnV6eiBpdCBkaXJlY3RseSwgYXMgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IHN1YnN0aXR1dGUgaXRzIGZ1bmN0aW9uYWxpdHkgYXQgdGhlIGNhbGwgc2l0ZS4gTm90IGlkZWFsLCBidXQgSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0IGxpbWl0YXRpb24uXG5cbkFscmlnaHQsIGlmIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCBpcyBvZmYgdGhlIHRhYmxlLCB3aGF0IGFib3V0IGBtcHRjcF9wbV9ubF9ybV9zdWJmbG93X3JlY2VpdmVkYD8gVGhhdCBtaWdodCBiZSBhIG1vcmUgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMjo1OC43MTc1NTkyMTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE1NTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9jbG9zZV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9NjYyPXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02ODQtXFx0aWYgKHVwZGF0ZV9zdWJmbG93cylcXG5uZXQvbXB0Y3AvcG0uYzo2ODU6XFx0XFx0X19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3BtLmMtNjg2LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk5ND1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDUzLVxcdGlmICghcmV0KSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA1NDpcXHRcXHRtcHRjcF9wbV9jbG9zZV9zdWJmbG93KG1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDA1NS1lcnJfcHJvaGliaXRlZDpcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyNTA9dTggbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1Mi0vKiBjYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyNTM6c3RhdGljIGlubGluZSB2b2lkIF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyNTQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI1OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjYwOnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2MS17XFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTI2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTI2MzpcXHRfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjY0LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZXBtLmxvY2spO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjE4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjMtXFx0ICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzI0OlxcdG1wdGNwX3BtX2Nsb3NlX3N1YmZsb3cobXNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3MjUtXFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTI6NTguODE3NzIwMDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDg3MTI5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRm9jdXNpbmcgSW4gb24gTVBUQ1AgU3ViZmxvdyBDb25uZWN0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgTVBUQ1AgY29ubmVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YCBmdW5jdGlvbnMuIFRoZXNlIHNlZW0gbGlrZSBjcml0aWNhbCBwb2ludHMgaW4gdGhlIHN1YmZsb3cgam9pbmluZyBwcm9jZXNzLCBhbmQgd2lsbCBhbGxvdyBtZSB0byBoYXZlIGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nLiBJJ2xsIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIHNpbmNlIGl0IGxvb2tzIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpcyBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBzZWxlY3RpbmcgYW5kIHZhbGlkYXRpbmcgdGhlIG5leHQgc3ViZmxvdy5cblxuSW4gYWRkaXRpb24sIHNpbmNlIEknbSBjb25jZXJuZWQgYWJvdXQgY29ubmVjdGlvbi9kaXNjb25uZWN0aW9uIGlzc3VlcywgSSBzaG91bGQgYWxzbyBjaGVjayBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3ViZmxvd3MgYXJlIHJlbW92ZWQgYXMgd2VsbCwgdG8gYmUgYWJsZSB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjExLjkwNDg1Mjg4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMTg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM9OTI9Y29uc3Qgc3RydWN0IGdlbmxfb3BzIG1wdGNwX3BtX25sX29wc1sxMV0gPSB7XFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTU4LVxcdFxcdC52YWxpZGF0ZVxcdD0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM6MTU5OlxcdFxcdC5kb2l0XFx0XFx0PSBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdCxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTYwLVxcdFxcdC5wb2xpY3lcXHRcXHQ9IG1wdGNwX3BtX3JlbW92ZV9ubF9wb2xpY3ksXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg9NTI9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUzOmludCBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNTQtaW50IG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yODU9bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzA0LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozMDU6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTMwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjExLjk2ODk3ODg4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA0NTMzNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgTmV0bGluayBDYWxsYmFjayBhbmQgU3ViZmxvdyBIYW5kbGluZyoqXG5cblJpZ2h0LCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgLiBUaGF0J3MgYSBuZXRsaW5rIGBkb2l0YCBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciBhIFwicmVtb3ZlXCIgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCBkZWFscyB3aXRoIGRlbGV0aW5nIHNvbWV0aGluZy4gTmV0bGluayBjYWxsYmFja3MgYXJlIG9mdGVuIHdoZXJlIHlvdSBjYW4gc3RhcnQgZGlnZ2luZyB0byBmaW5kIGNvcmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0LCBpcyB0byBjaGVjayBgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZGAuIFRoZSBnb2FsLCBpbiBjb250ZXh0LCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggcHJvY2Vzc2VzIGludGVyYWN0LiBTaW5jZSBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIGludm9sdmVkIGluIHJlbW92aW5nIHNvbWV0aGluZywgaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGF0IGBtcHRjcF9zdWJmbG93X2dldF9zZW5kYCBtaWdodCBiZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzoxNy42NzM1MTYyMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzk1MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTY2PWJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1ODYtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTU4NzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1ODgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwNi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjA3OlxcdFxcdHRyYWNlX21wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3ViZmxvdyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTYwOC1cXHRcXHRzc2sgPSAgbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTg1Nz12b2lkIG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTg1OC1cXHRcXHRcXHRcXHQgYm9vbCBzY2hlZHVsZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjg1OTpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04NjAtc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuLS1cXG5uZXQvbXB0Y3Avc2NoZWQuYz0xOT1zdGF0aWMgaW50IG1wdGNwX3NjaGVkX2RlZmF1bHRfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jLTIyLVxcbm5ldC9tcHRjcC9zY2hlZC5jOjIzOlxcdHNzayA9IG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQobXNrKTtcXG5uZXQvbXB0Y3Avc2NoZWQuYy0yNC1cXHRpZiAoIXNzaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jPTE2OD1pbnQgbXB0Y3Bfc2NoZWRfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zY2hlZC5jLTE3My1cXG5uZXQvbXB0Y3Avc2NoZWQuYzoxNzQ6XFx0LyogdGhlIGZvbGxvd2luZyBjaGVjayBpcyBtb3ZlZCBvdXQgb2YgbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZCAqL1xcbm5ldC9tcHRjcC9zY2hlZC5jLTE3NS1cXHRpZiAoX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjE3LjczODkxNTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ0NDQ1MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgU2NoZWR1bGluZyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gaG93IE1QVENQIHN1YmZsb3dzIGFyZSBtYW5hZ2VkIGZvciBzZW5kaW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgYG1wdGNwX3N1YmZsb3dfZ2V0X3NlbmRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1wdGNwX3NjaGVkX2RlZmF1bHRfZ2V0X3NlbmRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgZGVmYXVsdCBzY2hlZHVsZXIgbGlrZWx5IG5lZWRzIHRvIGdldCBhIHN1YmZsb3cgdG8gYWN0dWFsbHkgKmRvKiB0aGUgc2VuZGluZy4gVGhlbiwgbGV0IG1lIHRoaW5rIGEgbW9tZW50LCBgbXB0Y3Bfc2NoZWRfZ2V0X3NlbmRgIHNlZW1zIGxpa2UgYW5vdGhlciBsaWtlbHkgZnVuY3Rpb24gZm9yIG1lIHRvIGxvb2sgaW50bywgaWYgSSB3YW50IHRvIGRpdmUgZnVydGhlciBpbnRvIHRoZSBzY2hlZHVsaW5nIHByb2Nlc3MuXG5cbkJ1dCwgYmVmb3JlIEkgZ2V0IGxvc3QgaW4gdGhlIGJyb2FkZXIgc2NoZWR1bGluZyBsb2dpYywgYSBxdWljayBjaGVjayBvbiBgX19tcHRjcF9yZXRyYW5zYCBzZWVtcyBlc3NlbnRpYWwuIFJldHJhbnNtaXNzaW9ucyBjYW4gc2lnbmlmaWNhbnRseSBhZmZlY3Qgc3ViZmxvdyBzZWxlY3Rpb24gYW5kIHByaW9yaXRpemF0aW9uLiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LCBzbyB1bmRlcnN0YW5kaW5nIGhvdyByZXRyYW5zbWlzc2lvbnMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gc3ViZmxvdyBzZWxlY3Rpb24gaXMgbGlrZWx5IHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gYmUgc3VyZSBhbnkgYW5hbHlzaXMgY29uc2lkZXJzIHRoYXQuIEknbGwgbWFrZSBhIG5vdGUgdG8gY29tZSBiYWNrIHRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MjMuNDgzMzY0NTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIzMDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDcwPW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMDkxLVxcdFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXN0YWxlID0gMTtcXG5uZXQvbXB0Y3AvcG0uYzoxMDkyOlxcdFxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xcbm5ldC9tcHRjcC9wbS5jLTEwOTMtXFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKG5ldCwgTVBUQ1BfTUlCX1NVQkZMT1dTVEFMRSk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNTE5PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTUzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1NTQ6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTU1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2Mzg9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjg4OlxcdG5lZWRfcHVzaCA9IChmbGFncyBcXHUwMDI2IE1QVENQX0NGX1BVU0gpIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODktXFx0aWYgKCFkaXNwb3NlX2l0KSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODU4PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MTktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkyMDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MjEte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Ni1cXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDc6XFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxMTk9c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTYtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9XT1JLX1JUWCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxNTc6XFx0XFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTU4LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgwNz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MzktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQklUKE1QVENQX1JFVFJBTlNNSVQpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NDA6XFx0XFx0XFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODQxLVxcdFxcdGlmIChzcG9vbF9ibCBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXFx1MDAyNnNrYnMsIFxcdTAwMjZtb3ZlZCkpIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgxMz12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtODE1LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTY6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODE3LXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjIzLjU0NTYwMDIxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5Nzc3NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUmV0cmFuc21pc3Npb24gT3Bwb3J0dW5pdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgTVBUQ1AgY29kZSwgYF9fbXB0Y3BfcmV0cmFuc2AgaW1tZWRpYXRlbHkgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxpdmVzLCBzbyBpdCdzIHByb2JhYmx5IHdoZXJlIEknbGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBjb250ZXh0IGZvciB0aGlzLlxuXG5CdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGVyZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYF9fbXB0Y3BfaW5pdF9zb2NrYC4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIHNvY2tldCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBSZXRyYW5zbWlzc2lvbnMgYXJlIG9idmlvdXNseSBkZXBlbmRlbnQgb24gcHJvcGVyIHNvY2tldCBzZXR1cCwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQgbWlnaHQgYmUgdGhhdCB0aGUgcm9vdCBjYXVzZSBsaWVzIGluIGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuIEEgcXVpY2sgcmV2aWV3IGNhbiBzYXZlIG1lIGEgbG90IG9mIHRpbWUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MjcuNDg1MzgwNjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTIyNDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX2luaXRfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxMTk9c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE2ODpzdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjI0PXN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyMjgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzIyOTpcXHRfX21wdGNwX2luaXRfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzIzMC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyNDUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI0NjpcXHQvKiBmZXRjaCB0aGUgY2EgbmFtZTsgZG8gaXQgb3V0c2lkZSBfX21wdGNwX2luaXRfc29jaygpLCBzbyB0aGF0IGNsb25lIHdpbGxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ3LVxcdCAqIHByb3BhZ2F0ZSB0aGUgY29ycmVjdCB2YWx1ZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzY5Nj1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzEzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MTQ6XFx0X19tcHRjcF9pbml0X3NvY2sobnNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzoyNy41NDY2MTEwMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDg4MTU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTVBUQ1AgU29ja2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE1QVENQIHNvY2tldHMgYXJlIGluaXRpYWxpemVkLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBib3RoIGBtcHRjcF9pbml0X3NvY2tgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdWx0aW1hdGVseSByZWx5IG9uIGEgY29tbW9uIGZ1bmN0aW9uOiBgX19tcHRjcF9pbml0X3NvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVkdWNlcyByZWR1bmRhbmN5IGFuZCBsaWtlbHkgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LiBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBzcGVjaWZpY2FsbHkgdGFnZ2VkIGFzIHRoZSBzb2NrZXQgaW5pdCBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdWJmbG93cyBhcmUgaGFuZGxlZC4gVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlzIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgLiBUaGlzIHNvdW5kcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggc3ViZmxvdyB0byB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6MzEuMzYxNDk2MzE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMwNDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz02NDU9dm9pZCBtcHRjcF9wbV9zdWJmbG93X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02NjEtXFxubmV0L21wdGNwL3BtLmM6NjYyOnZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtNjYzLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjc0ND12b2lkIG1wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNzU4LVxcdCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3NTk6XFx0bXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KG1wdGNwX3NrKHNrKSwgc3ViZmxvdyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjc2MC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMTU9Ym9vbCBtcHRjcF9wbV9ubF9jaGVja193b3JrX3BlbmRpbmcoc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTExNjp2b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozMS40MzY4MDUxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4MjE0NjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNUFRDUCBDb2RlIFJlYWNoYWJpbGl0eSBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gYW5hbHl6ZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGNvcmUgTVBUQ1AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBnZXRzIGNhbGxlZCBmcm9tIGBtcHRjcF9jbG9zZV9zc2tgLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb2RlIGNvbm5lY3QuXG5cblRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCwgYG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0YCwgYG1wdGNwX2ZpbmlzaF9qb2luYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfaW5pdF9zb2NrYC5cblxuTGV0J3Mgc2VlOiBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCBtYWtlcyBzZW5zZS4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBjbG9zaW5nIHN1YmZsb3dzLCB3aGljaCBpcyBpbXBvcnRhbnQuIGBtcHRjcF9maW5pc2hfam9pbmAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBqb2luIGlzIGNvbXBsZXRlZC4gYF9fbXB0Y3BfcmV0cmFuc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgb24gcmV0cmFuc21pc3Npb25zLCBhIGNydWNpYWwgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCBgbXB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgd2hlbiB3ZSBjcmVhdGUgYW4gTVBUQ1Agc29ja2V0LlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBvYnZpb3VzbHksIGBNUFRDUGAgaXMgdGhlIGJpZyBvbmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIHRlc3QgdGhlc2UgZmVhdHVyZXMuIEFoLCByaWdodCwgYE1QVENQYCBkZXBlbmRzIG9uIGBJTkVUYCB3aGljaCBJIGtuZXcsIGFuZCBgTVBUQ1BfSVBWNmAgd291bGQgYmUgdXNlZnVsIGZvciBJUHY2IHRlc3RpbmcsIHNvIEknbGwgYmUgaW5jbHVkaW5nIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBgbmV0L21wdGNwL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBpZGVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozOC4wMTg5NTQ5MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzozOC4wMTkwMzMyOTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzNzY4NDI0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXM6IEZ1bmN0aW9uYWwgQ2hhbmdlcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBtYWluIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkIGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAsIHNvIHRoYXQncyB0aGUgc2NvcGUgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc3RpY2sgb3V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIGBleHRyYV9zdWJmbG93c2AgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIHRoZSBzdGF0aWMgaW5saW5lIGBtcHRjcF9wbV9jbG9zZV9zdWJmbG93YCB3aGljaCBpcyBjYWxsZWQgZnJvbSAgYG1wdGNwX2ZpbmlzaF9qb2luYCBhbmQgYF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0YC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGhhcmRlbiBzdWJmbG93IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBudW1iZXIgb2YgZXh0cmEgc3ViZmxvd3MgbWlnaHQgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgY3JpdGljYWwuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBjb25kaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgd2FybmluZ3MgZG9uJ3QgZmlyZSBzcHVyaW91c2x5IHVuZGVyIG5vcm1hbCBvciBldmVuIGFkdmVyc2FyaWFsIGNvbmRpdGlvbnMuXG5cblRoZW4sIHRoZXJlJ3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IFJUTyBib3VuZHMgYXJlIHNlZWRlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21wdGNwX2luaXRfc29ja2AsICBgbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dGAgKHdoaWNoIGlzIGNhbGxlZCBieSBgX19tcHRjcF9yZXRyYW5zYCkgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YCB0byB1dGlsaXplIHN5c2N0bCB2YWx1ZXMgZm9yIGBpY3NrX3J0b19taW5gIGFuZCBgaWNza19ydG9fbWF4YCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgdmFsdWVzLiBUaGlzIGlzIGxpa2VseSBhaW1lZCBhdCBpbXByb3ZpbmcgYWRhcHRhYmlsaXR5IHRvIGRpZmZlcmVudCBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG92ZXJseSBhZ2dyZXNzaXZlIG9yIGNvbnNlcnZhdGl2ZSByZXRyYW5zbWlzc2lvbnMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcy4gV2UgbmVlZCB0byBmdXp6IHRpbWVvdXQgYmVoYXZpb3IgdG8gdmVyaWZ5IHRoZSBuZXcgc3lzY3RsIHZhbHVlcyBhcmUgYXBwcm9wcmlhdGVseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGFyZSBiZWhhdmluZyBjb3JyZWN0bHkgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucy5cblxuVGhlcmUncyBhbHNvIGEgcmVuYW1pbmcgYW5kIHNjb3BpbmcgY2hhbmdlOiBgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5YCBpcyByZW5hbWVkIGFuZCBtYWRlIHN0YXRpYywgYW5kIGNhbiBub3cgYmUgcmVhY2hlZCB0aHJvdWdoIGBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdGAuIFRoaXMgaXMgbGVzcyBjcml0aWNhbCBidXQgc3RpbGwgbmVlZHMgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5CZXlvbmQgdGhlc2UgY29yZSBmdW5jdGlvbmFsIHNoaWZ0cywgdGhlcmUgYXJlIG5ldyBTTk1QIGNvdW50ZXJzIGluY3JlbWVudGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdGAsIGBzdWJmbG93X2NoZWNrX3JlcWAsIGBzdWJmbG93X2ZpbmlzaF9jb25uZWN0YCwgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AsIGFuZCBgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsYC4gV2hpbGUgdGhlc2UgY291bnRlcnMgdGhlbXNlbHZlcyBhcmVuJ3QgZnVuY3Rpb25hbCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UsIHRoZXkgZG8gaW5kaWNhdGUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBvbiB2YXJpb3VzIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBlZGdlIGNhc2VzLiBUaGUgcGF0aHMgYXJlIGFscmVhZHkgY292ZXJlZCBpbiBNUFRDUCBjb25uZWN0aW9uIGZ1enppbmcsIHNvIHdlIGNhbiBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgZmlyc3QuIFRoZSBuZXcgY291bnRlcnMgY291bGQgaW5mb3JtIGZ1dHVyZSBmdXp6aW5nIGNhbXBhaWducyB0YXJnZXRpbmcgc3BlY2lmaWMgZWRnZSBjYXNlcywgYnV0IGZvciBub3csIHRoZXkgYXJlIG1vc3RseSBpbmZvcm1hdGl2ZS5cblxuU28sIGluIHN1bW1hcnksIEknbSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nOlxuKiAgIGBtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRgIGFuZCBgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXRgOiBCZWNhdXNlIHRoZXNlIHRyaWdnZXIgdGhlIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgaW4gc3ViZmxvdyBtYW5hZ2VtZW50LlxuKiAgIGBtcHRjcF9pbml0X3NvY2tgOiBBcyB0aGUgaW5pdGlhbCBSVE8gdmFsdWUgc2V0dGluZ3MgYXJlIG5vdyBhZmZlY3RlZC5cbiogICBgX19tcHRjcF9yZXRyYW5zYDogQXMgdGhlIFJUTyBzZXR0aW5ncyBhZmZlY3QgdGhlIGRhdGFmaW4gdGltZW91dCB3aGljaCBpcyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9ucy5cbiogICBgbXB0Y3BfZmluaXNoX2pvaW5gIGFuZCBgX19tcHRjcF9zdWJmbG93X2Nvbm5lY3RgOiBBcyB0aGVzZSBub3cgY2FsbCB0aGUgYFdBUk5fT05fT05DRWAtdHJpZ2dlcmluZyBmdW5jdGlvbi5cblxuSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgYXJlYXMgdG8gY29uZmlybSB0aGUgbmV3IHdhcm5pbmdzIGFyZSBub3QgdHJpZ2dlcmVkIHNwdXJpb3VzbHkgYW5kIHRoYXQgdGhlIFJUTyBjaGFuZ2VzIGJlaGF2ZSBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgbmV0d29yayBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzLiBUaGVzZSBhcmUgdGhlIGtleSBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDA3LCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoxMzo1Ni4zOTU4Nzg4MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1MzUzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0XCIsXG4gICAgXCJtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdFwiLFxuICAgIFwibXB0Y3BfaW5pdF9zb2NrXCIsXG4gICAgXCJfX21wdGNwX3JldHJhbnNcIixcbiAgICBcIm1wdGNwX2ZpbmlzaF9qb2luXCIsXG4gICAgXCJfX21wdGNwX3N1YmZsb3dfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIEl0IGFkZHMgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBzdWJmbG93IGFjY291bnRpbmcgaW4gYG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dGAgYW5kIGBfX21wdGNwX3BtX2Nsb3NlX3N1YmZsb3dgIHRvIGNhdGNoIHVuZGVyZmxvd3MuIEl0IGFsc28gdXBkYXRlcyB0aGUgUlRPIGJvdW5kcyBzZWVkaW5nIHRvIHVzZSBzeXNjdGwgdmFsdWVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNvbnN0YW50cywgYWZmZWN0aW5nIHRpbWVvdXQgY2FsY3VsYXRpb25zIGluIGBfX21wdGNwX2luaXRfc29ja2AsIGBtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0YCwgYW5kIGBfX21wdGNwX3NldF90aW1lb3V0YC4gQWRkaXRpb25hbGx5LCBpdCByZW5hbWVzIGFuZCByZXN0cmljdHMgdGhlIHNjb3BlIG9mIGBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2FkZHJfZW50cnlgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBNUFRDUCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYW5kIHRpbWVvdXQgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd2FybmluZ3MgYXJlIG5vdCB0cmlnZ2VyZWQgYW5kIHRpbWVvdXRzIGJlaGF2ZSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9zdWJmbG93X2NoZWNrX25leHRcIixcbiAgICBcIm1wdGNwX3BtX25sX3JlbW92ZV9kb2l0XCIsXG4gICAgXCJtcHRjcF9pbml0X3NvY2tcIixcbiAgICBcIl9fbXB0Y3BfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZmluaXNoX2pvaW5cIixcbiAgICBcIl9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1QVENQIHN1YnN5c3RlbS4gSXQgYWRkcyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgZm9yIHN1YmZsb3cgYWNjb3VudGluZyBpbiBgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0YCBhbmQgYF9fbXB0Y3BfcG1fY2xvc2Vfc3ViZmxvd2AgdG8gY2F0Y2ggdW5kZXJmbG93cy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBSVE8gYm91bmRzIHNlZWRpbmcgdG8gdXNlIHN5c2N0bCB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzLCBhZmZlY3RpbmcgdGltZW91dCBjYWxjdWxhdGlvbnMgaW4gYF9fbXB0Y3BfaW5pdF9zb2NrYCwgYG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXRgLCBhbmQgYF9fbXB0Y3Bfc2V0X3RpbWVvdXRgLiBBZGRpdGlvbmFsbHksIGl0IHJlbmFtZXMgYW5kIHJlc3RyaWN0cyB0aGUgc2NvcGUgb2YgYG1wdGNwX3VzZXJzcGFjZV9wbV9yZW1vdmVfYWRkcl9lbnRyeWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IE1QVENQIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgdGltZW91dCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3YXJuaW5ncyBhcmUgbm90IHRyaWdnZXJlZCBhbmQgdGltZW91dHMgYmVoYXZlIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6NTYuNTI4NDIwODA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MTc4NjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjEzOjU2LjUyODg5MzIwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODE5MTMwOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uOlxcbjEuIFJlbW92aW5nIHRoZSB1bnVzZWQgYGRhdGFfYWNrYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYG1wdGNwX2R1bXBfbXBleHRgIHRyYWNlIGV2ZW50LlxcbjIuIEFkZGluZyBuZXcgU05NUCBNSUIgY291bnRlcnMgZm9yIHZhcmlvdXMgTVBUQ1AgZXZlbnRzIChlLmcuLCBNUF9KT0lOIGZhaWx1cmVzLCByZXNldHMpIGFuZCBpbmNyZW1lbnRpbmcgdGhlbSBpbiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgcGF0aHMuXFxuMy4gQWRkaW5nIHVuZGVyZmxvdyBjaGVja3MgKGBXQVJOX09OX09OQ0VgKSBmb3IgYHBtLVxcdTAwM2VleHRyYV9zdWJmbG93c2AuXFxuNC4gU2VlZGluZyBSVE8gYm91bmRzIChgaWNza19ydG9fbWluYCwgYGljc2tfcnRvX21heGApIGR1cmluZyBNUFRDUCBzb2NrZXQgaW5pdGlhbGl6YXRpb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlbW92YWwgb2YgZmllbGRzIGZyb20gdGhlIHRyYWNlIGV2ZW50IGFuZCBza2IgZXh0ZW5zaW9uIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQsIGFuZCB0aGUgUlRPIGJvdW5kcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIGZpZWxkcyBhcmUgcHJvcGVybHkgc2VlZGVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2MyMGI2MjVlZjlkNWYxYTRkYTY4YmZiZmQ5ZDdiOWJlNzdiYzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MTI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uNDg1ZDU1YjY2ZWE2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0xOSwxMCArMTksNiBAQCBzdHJ1Y3Qgc2VxX2ZpbGU7XG4gXG4gLyogTVBUQ1Agc2tfYnVmZiBleHRlbnNpb24gZGF0YSAqL1xuIHN0cnVjdCBtcHRjcF9leHQge1xuLVx0dW5pb24ge1xuLVx0XHR1NjRcdGRhdGFfYWNrO1xuLVx0XHR1MzJcdGRhdGFfYWNrMzI7XG4tXHR9O1xuIFx0dTY0XHRcdGRhdGFfc2VxO1xuIFx0dTMyXHRcdHN1YmZsb3dfc2VxO1xuIFx0dTE2XHRcdGRhdGFfbGVuO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21wdGNwLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tcHRjcC5oXG5pbmRleCAwNDUyMWFjYmE0ODMyLi4yMjg4MmJkMDM0NTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbXB0Y3AuaFxuQEAgLTc1LDcgKzc1LDYgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0VFBfQVJHUyhtcGV4dCksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuLVx0XHRfX2ZpZWxkKHU2NCwgZGF0YV9hY2spXG4gXHRcdF9fZmllbGQodTY0LCBkYXRhX3NlcSlcbiBcdFx0X19maWVsZCh1MzIsIHN1YmZsb3dfc2VxKVxuIFx0XHRfX2ZpZWxkKHUxNiwgZGF0YV9sZW4pXG5AQCAtOTQsNyArOTMsNiBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKG1wdGNwX2R1bXBfbXBleHQsXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4tXHRcdF9fZW50cnktXHUwMDNlZGF0YV9hY2sgPSBtcGV4dC1cdTAwM2VhY2s2NCA/IG1wZXh0LVx1MDAzZWRhdGFfYWNrIDogbXBleHQtXHUwMDNlZGF0YV9hY2szMjtcbiBcdFx0X19lbnRyeS1cdTAwM2VkYXRhX3NlcSA9IG1wZXh0LVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxID0gbXBleHQtXHUwMDNlc3ViZmxvd19zZXE7XG4gXHRcdF9fZW50cnktXHUwMDNlZGF0YV9sZW4gPSBtcGV4dC1cdTAwM2VkYXRhX2xlbjtcbkBAIC0xMTIsOCArMTEwLDggQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhtcHRjcF9kdW1wX21wZXh0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWluZmluaXRlX21hcCA9IG1wZXh0LVx1MDAzZWluZmluaXRlX21hcDtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJkYXRhX2Fjaz0lbGx1IGRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX2FjaywgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbitcdFRQX3ByaW50ayhcImRhdGFfc2VxPSVsbHUgc3ViZmxvd19zZXE9JXUgZGF0YV9sZW49JXUgY3N1bT0leCB1c2VfbWFwPSV1IGRzbjY0PSV1IGRhdGFfZmluPSV1IHVzZV9hY2s9JXUgYWNrNjQ9JXUgbXBjX21hcD0ldSBmcm96ZW49JXUgcmVzZXRfdHJhbnNpZW50PSV1IHJlc2V0X3JlYXNvbj0ldSBjc3VtX3JlcWQ9JXUgaW5maW5pdGVfbWFwPSV1XCIsXG4rXHRcdCAgX19lbnRyeS1cdTAwM2VkYXRhX3NlcSxcbiBcdFx0ICBfX2VudHJ5LVx1MDAzZXN1YmZsb3dfc2VxLCBfX2VudHJ5LVx1MDAzZWRhdGFfbGVuLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlY3N1bSwgX19lbnRyeS1cdTAwM2V1c2VfbWFwLFxuIFx0XHQgIF9fZW50cnktXHUwMDNlZHNuNjQsIF9fZW50cnktXHUwMDNlZGF0YV9maW4sXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCAyNTY5Mzg1YmFiN2NhLi42MDhjYjU2ODg5N2NmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC0yMSwxNCArMjEsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEZhbGxiYWNrVG9rZW5Jbml0XCIsIE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBUQ1BSZXRyYW5zXCIsIE1QVENQX01JQl9SRVRSQU5TU0VHUyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9Ub2tlbkZvdW5kXCIsIE1QVENQX01JQl9KT0lOTk9UT0tFTiksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm9JZEZvdW5kXCIsIE1QVENQX01JQl9NUEpPSU5OT0lERk9VTkQpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blJ4XCIsIE1QVENQX01JQl9KT0lOU1lOUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkJhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja1J4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0JhY2t1cFJ4XCIsIE1QVENQX01JQl9KT0lOU1lOQUNLQkFDS1VQUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5bkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOU1lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOU1lOQUNLTk9NUEpPSU4pLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja1J4XCIsIE1QVENQX01JQl9KT0lOQUNLUlgpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja0hNYWNGYWlsdXJlXCIsIE1QVENQX01JQl9KT0lOQUNLTUFDKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5BY2tOb01QSm9pblwiLCBNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pLFxuK1x0U05NUF9NSUJfSVRFTShcIk1QSm9pbkFja05vQ3R4XCIsIE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCksXG4gXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luUmVqZWN0ZWRcIiwgTVBUQ1BfTUlCX0pPSU5SRUpFQ1RFRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiTVBKb2luTm90RXN0YWJsaXNoZWRcIiwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeFwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUEpvaW5TeW5UeENyZWF0U2tFcnJcIiwgTVBUQ1BfTUlCX0pPSU5TWU5UWENSRUFUU0tFUlIpLFxuIFx0U05NUF9NSUJfSVRFTShcIk1QSm9pblN5blR4QmluZEVyclwiLCBNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUiksXG5AQCAtODEsNyArODYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIkJsYWNraG9sZVwiLCBNUFRDUF9NSUJfQkxBQ0tIT0xFKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJNUENhcGFibGVEYXRhRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01QQ0FQQUJMRURBVEFGQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiTUQ1U2lnRmFsbGJhY2tcIiwgTVBUQ1BfTUlCX01ENVNJR0ZBTExCQUNLKSxcbitcdFNOTVBfTUlCX0lURU0oXCJNRDVTaWdSZXNldFwiLCBNUFRDUF9NSUJfTUQ1U0lHUkVTRVQpLFxuIFx0U05NUF9NSUJfSVRFTShcIkRzc0ZhbGxiYWNrXCIsIE1QVENQX01JQl9EU1NGQUxMQkFDSyksXG4rXHRTTk1QX01JQl9JVEVNKFwiRHNzUmVzZXRcIiwgTVBUQ1BfTUlCX0RTU1JFU0VUKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggM2EzNDI1ZTI1OGE3Ni4uMWViZGI1NWU5NTM0MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtMTYsMTQgKzE2LDE5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9UT0tFTkZBTExCQUNLSU5JVCxcdC8qIENvdWxkIG5vdCBpbml0L2FsbG9jYXRlIHRva2VuICovXG4gXHRNUFRDUF9NSUJfUkVUUkFOU1NFR1MsXHRcdC8qIFNlZ21lbnRzIHJldHJhbnNtaXR0ZWQgYXQgdGhlIE1QVENQLWxldmVsICovXG4gXHRNUFRDUF9NSUJfSk9JTk5PVE9LRU4sXHRcdC8qIFJlY2VpdmVkIE1QX0pPSU4gYnV0IHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kICovXG4rXHRNUFRDUF9NSUJfTVBKT0lOTk9JREZPVU5ELFx0LyogUmVjZWl2ZWQgTVBfSk9JTiBidXQgbm8gbG9jYWwgSUQgd2FzIGZvdW5kICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlJYLFx0XHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOQkFDS1VQUlgsXHQvKiBSZWNlaXZlZCBhIFNZTiArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYSBTWU4vQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tCQUNLVVBSWCxcdC8qIFJlY2VpdmVkIGEgU1lOL0FDSyArIE1QX0pPSU4gKyBiYWNrdXAgZmxhZyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5TWU5BQ0tNQUMsXHQvKiBITUFDIHdhcyB3cm9uZyBvbiBTWU4vQUNLICsgTVBfSk9JTiAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOLFx0LyogTVBfUlNUOiBtaXNzaW5nIE1QX0pPSU4gaW4gU1lOL0FDSyAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tSWCxcdFx0LyogUmVjZWl2ZWQgYW4gQUNLICsgTVBfSk9JTiAqL1xuIFx0TVBUQ1BfTUlCX0pPSU5BQ0tNQUMsXHRcdC8qIEhNQUMgd2FzIHdyb25nIG9uIEFDSyArIE1QX0pPSU4gKi9cbitcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTixcdC8qIE1QX1JTVDogbWlzc2luZyBNUF9KT0lOIGluIEFDSyAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYLFx0LyogTVBfUlNUOiBubyBzdWJmbG93IGNvbnRleHQgb24gQUNLICovXG4gXHRNUFRDUF9NSUJfSk9JTlJFSkVDVEVELFx0XHQvKiBUaGUgUE0gcmVqZWN0ZWQgdGhlIEpPSU4gcmVxdWVzdCAqL1xuK1x0TVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVELFx0LyogTVBfUlNUOiBKT0lOIG9uIG5vdC1mdWxseS1lc3RhYmxpc2hlZCBtc2sgKi9cbiBcdE1QVENQX01JQl9KT0lOU1lOVFgsXHRcdC8qIFNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQ1JFQVRTS0VSUixcdC8qIE5vdCBhYmxlIHRvIGNyZWF0ZSBhIHNvY2tldCB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG4gXHRNUFRDUF9NSUJfSk9JTlNZTlRYQklOREVSUixcdC8qIE5vdCBhYmxlIHRvIGJpbmQoKSB0aGUgYWRkcmVzcyB3aGVuIHNlbmRpbmcgYSBTWU4gKyBNUF9KT0lOICovXG5AQCAtODQsNyArODksOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRcdFx0XHRcdCAqIGVzdGFibGlzaGVkIHBhY2tldFxuIFx0XHRcdFx0XHQgKi9cbiBcdE1QVENQX01JQl9NRDVTSUdGQUxMQkFDSyxcdC8qIENvbmZsaWN0aW5nIFRDUCBvcHRpb24gZW5hYmxlZCAqL1xuK1x0TVBUQ1BfTUlCX01ENVNJR1JFU0VULFx0XHQvKiBNUF9SU1Q6IE1ENVNJRyBlbmFibGVkIG9uIGxpc3RlbmVyICovXG4gXHRNUFRDUF9NSUJfRFNTRkFMTEJBQ0ssXHRcdC8qIEJhZCBvciBtaXNzaW5nIERTUyAqL1xuK1x0TVBUQ1BfTUlCX0RTU1JFU0VULFx0XHQvKiBNUF9SU1Q6IGJhZCBkYXRhIG1hcHBpbmcgKi9cbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXG5pbmRleCBkMWY3M2MzZTM5ZmEzLi44YjY4ODY4MjU1YzUwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtLmNcbisrKyBiL25ldC9tcHRjcC9wbS5jXG5AQCAtNjcwLDcgKzY3MCw4IEBAIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpIHtcbiBcdFx0aWYgKHVwZGF0ZV9zdWJmbG93cykge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRwbS1cdTAwM2VleHRyYV9zdWJmbG93cy0tO1xuK1x0XHRcdGlmICghV0FSTl9PTl9PTkNFKHBtLVx1MDAzZWV4dHJhX3N1YmZsb3dzID09IDApKVxuK1x0XHRcdFx0cG0tXHUwMDNlZXh0cmFfc3ViZmxvd3MtLTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwbS1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCAyMjAzY2MyZDI3NDg1Li5iOTRmYmI0ODNiZjk0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC0yODEsOCArMjgxLDkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBhbGlzdCA9IHsgLm5yID0gMCB9O1xuIFx0aW50IGFubm9fbnIgPSAwO1xuQEAgLTM0MCw3ICszNDEsNyBAQCBpbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZtYXRjaC1cdTAwM2VsaXN0KTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiBcbi1cdG1wdGNwX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuK1x0bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KG1zaywgbWF0Y2gpO1xuIFxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlYzg3NGQyZWFkNmE0Li5iNDc0ZDAzNjIwYTc1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtNTgxLDE3ICs1ODEsMjMgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqc2VxKVxuIHN0YXRpYyB2b2lkIG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcdHUzMiBydG9fbWluID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWluKTtcbitcdHUzMiBydG9fbWF4ID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19ydG9fbWF4KTtcbiBcdHUzMiByZXRyYW5zbWl0cztcbiBcbitcdC8qIFRoZSBzeXNjdGxzIGFyZSB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseTogcnRvX21pbiBcdTAwM2UgcnRvX21heCBpc1xuK1x0ICogcG9zc2libGUsIGd1YXJkIGFnYWluc3QgaWxvZzIoMCkuXG4rXHQgKi9cbiBcdHJldHJhbnNtaXRzID0gbWluX3QodTMyLCBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0ICAgIGlsb2cyKFRDUF9SVE9fTUFYIC8gVENQX1JUT19NSU4pKTtcbitcdFx0XHQgICAgaWxvZzIobWF4X3QodTMyLCBydG9fbWF4IC8gcnRvX21pbiwgMSkpKTtcbiBcbi1cdG1wdGNwX3NrKHNrKS1cdTAwM2V0aW1lcl9pdmFsID0gVENQX1JUT19NSU4gXHUwMDNjXHUwMDNjIHJldHJhbnNtaXRzO1xuK1x0bXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWwgPSBydG9fbWluIFx1MDAzY1x1MDAzYyByZXRyYW5zbWl0cztcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19tcHRjcF9zZXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdG91dClcbiB7XG4tXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDogVENQX1JUT19NSU47XG4rXHRtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbCA9IHRvdXQgXHUwMDNlIDAgPyB0b3V0IDpcbitcdFx0XHRcdCAgIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19ydG9fbWluKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgbXB0Y3BfdGltZW91dF9mcm9tX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbkBAIC0zMTYxLDcgKzMxNjcsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlam9pbl9saXN0KTtcbkBAIC0zMTcwLDcgKzMxNzgsMTMgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xuIFx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4gXHRtc2stXHUwMDNlZmlyc3RfcGVuZGluZyA9IE5VTEw7XG4tXHRtc2stXHUwMDNldGltZXJfaXZhbCA9IFRDUF9SVE9fTUlOO1xuK1xuK1x0LyogbXNrIGRvZXMgbm90IGdvIHRocm91Z2ggdGNwX2luaXRfc29jaygpOyBzZWVkIFJUTyBib3VuZHMuICovXG4rXHRpY3NrLVx1MDAzZWljc2tfcnRvX21pbiA9XG4rXHRcdHVzZWNzX3RvX2ppZmZpZXMoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21pbl91cykpO1xuK1x0aWNzay1cdTAwM2VpY3NrX3J0b19tYXggPVxuK1x0XHRtc2Vjc190b19qaWZmaWVzKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3J0b19tYXhfbXMpKTtcbitcdG1zay1cdTAwM2V0aW1lcl9pdmFsID0gaWNzay1cdTAwM2VpY3NrX3J0b19taW47XG4gXHRtc2stXHUwMDNlc2NhbGluZ19yYXRpbyA9IFRDUF9ERUZBVUxUX1NDQUxJTkdfUkFUSU87XG4gXHRtc2stXHUwMDNlYmFja2xvZ19sZW4gPSAwO1xuIFx0bXB0Y3BfaW5pdF9ydHRfZXN0KG1zayk7XG5AQCAtMzk4OCw2ICs0MDAyLDcgQEAgYm9vbCBtcHRjcF9maW5pc2hfam9pbihzdHJ1Y3Qgc29jayAqc3NrKVxuIFxuIFx0LyogbXB0Y3Agc29ja2V0IGFscmVhZHkgY2xvc2luZz8gKi9cbiBcdGlmICghbXB0Y3BfaXNfZnVsbHlfZXN0YWJsaXNoZWQocGFyZW50KSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQocGFyZW50KSwgTVBUQ1BfTUlCX01QSk9JTk5PVEVTVEFCTElTSEVEKTtcbiBcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBNUFRDUF9SU1RfRU1QVENQO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggYjNhZjM0NjJiZGQxNi4uMDZhMTA3ZDRlODM5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNDksOCArMTE0OSw2IEBAIGludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcbiBcdFx0XHQgICBib29sIGVjaG8pO1xuIGludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCk7XG4tdm9pZCBtcHRjcF9wbV9yZW1vdmVfYWRkcl9lbnRyeShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLVx0XHRcdFx0c3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmVudHJ5KTtcbiBcbiAvKiB0aGUgZGVmYXVsdCBwYXRoIG1hbmFnZXIsIHVzZWQgaW4gbXB0Y3BfcG1fdW5yZWdpc3RlciAqL1xuIGV4dGVybiBzdHJ1Y3QgbXB0Y3BfcG1fb3BzIG1wdGNwX3BtX2tlcm5lbDtcbkBAIC0xMjU0LDcgKzEyNTIsOCBAQCB1OCBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gLyogY2FsbGVkIHVuZGVyIFBNIGxvY2sgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19tcHRjcF9wbV9jbG9zZV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0aWYgKC0tbXNrLVx1MDAzZXBtLmV4dHJhX3N1YmZsb3dzIFx1MDAzYyBtcHRjcF9wbV9nZXRfbGltaXRfZXh0cmFfc3ViZmxvd3MobXNrKSlcbitcdGlmICghV0FSTl9PTl9PTkNFKG1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyA9PSAwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAtLW1zay1cdTAwM2VwbS5leHRyYV9zdWJmbG93cyBcdTAwM2MgbXB0Y3BfcG1fZ2V0X2xpbWl0X2V4dHJhX3N1YmZsb3dzKG1zaykpXG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXBtLmFjY2VwdF9zdWJmbG93LCB0cnVlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmFmODFhZDVlNjk5ZDEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtOTYsNiArOTYsNyBAQCBzdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XG4gXHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbitcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX01QSk9JTk5PSURGT1VORCk7XG4gXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuQEAgLTE2MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdCAqIFRDUCBvcHRpb24gc3BhY2UuXG4gXHQgKi9cbiBcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIodGNwX3NrKHNrX2xpc3RlbmVyKS1cdTAwM2VtZDVzaWdfaW5mbykpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrX2xpc3RlbmVyKSwgTVBUQ1BfTUlCX01ENVNJR1JFU0VUKTtcbiBcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2Myw2ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIFxuIFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9TWU5BQ0spKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX01QSk9JTlNZTkFDS05PTVBKT0lOKTtcbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbiA9IE1QVENQX1JTVF9FTVBUQ1A7XG4gXHRcdFx0Z290byBkb19yZXNldDtcbiBcdFx0fVxuQEAgLTg2NSw2ICs4NjgsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFjdHggfHwgZmFsbGJhY2spIHtcbiBcdFx0XHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcbitcdFx0XHRcdGlmICghY3R4KVxuK1x0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuK1x0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PQ1RYKTtcbitcdFx0XHRcdGVsc2VcbitcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbitcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XG4gXHRcdFx0XHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcbiBcdFx0XHRcdGdvdG8gZGlzcG9zZV9jaGlsZDtcbiBcdFx0XHR9XG5AQCAtMTQxNiw2ICsxNDI1LDcgQEAgc3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXG4gXHRcdFx0ICogc3ViZmxvd19lcnJvcl9yZXBvcnQoKSB3aWxsIGludHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnNcbiBcdFx0XHQgKi9cbiBcdFx0XHRzdWJmbG93LVx1MDAzZXJlc2V0X3RyYW5zaWVudCA9IDA7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNzayksIE1QVENQX01JQl9EU1NSRVNFVCk7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24gPSBzdGF0dXMgPT0gTUFQUElOR19OT0RTUyA/XG4gXHRcdFx0XHRcdFx0TVBUQ1BfUlNUX0VNSURETEVCT1ggOlxuIFx0XHRcdFx0XHRcdE1QVENQX1JTVF9FTVBUQ1A7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbmluZGV4IGNiZTU3M2M0YWIzYWQuLmVhNGNiNmMxYmQ1ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5AQCAtMTI2NCw3ICsxMjY0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY21zZ190eXBlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBjZmdfY21zZ190eXBlcyAqY21zZylcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9jbXNnX3R5cGVzKGNvbnN0IGNoYXIgKnR5cGUpXG4ge1xuLVx0Y2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuK1x0Y29uc3QgY2hhciAqbmV4dCA9IHN0cmNocih0eXBlLCAnLCcpO1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4gXG4gXHRjZmdfY21zZ190eXBlcy5jbXNnX2VuYWJsZWQgPSAxO1xuQEAgLTEyOTIsNyArMTI5Miw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Ntc2dfdHlwZXMoY29uc3QgY2hhciAqdHlwZSlcbiBcbiBzdGF0aWMgdm9pZCBwYXJzZV9zZXRzb2NrX29wdGlvbnMoY29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4rXHRjb25zdCBjaGFyICpuZXh0ID0gc3RyY2hyKG5hbWUsICcsJyk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbiBcbiBcdGlmIChuZXh0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuaW5kZXggZDE1ODY3OGZhNmFiMC4uN2EyYTg1MWZhMGFkYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5zaFxuQEAgLTIxMiw4ICsyMTIsOCBAQCBpZiAkY2hlY2tzdW07IHRoZW5cbiBmaVxuIFxuIGlmICRjYXB0dXJlOyB0aGVuXG4tXHRybmRoPVwiJHtuczE6NH1cIlxuLVx0bXB0Y3BfbGliX3ByX2luZm8gXCJQYWNrZXQgY2FwdHVyZSBmaWxlcyB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7cm5kaH0tXCJcbitcdGNhcHByZWZpeD1cIm1wdGNwX2Nvbm5lY3QtJHtuczE6NH1cIlxuK1x0bXB0Y3BfbGliX3ByX2luZm8gXCJwY2FwIHdpbGwgaGF2ZSB0aGlzIHByZWZpeDogJHtjYXBwcmVmaXh9LVwiXG4gZmlcbiBcbiBzZXRfZXRodG9vbF9mbGFncygpIHtcbkBAIC0zNzIsOCArMzcyLDggQEAgZG9fdHJhbnNmZXIoKVxuIFx0XHRcdGNhcHVzZXI9XCItWiAkU1VET19VU0VSXCJcbiBcdFx0ZmlcbiBcbi1cdFx0bG9jYWwgY2FwZmlsZT1cIiR7cm5kaH0tJHtjb25uZWN0b3JfbnM6MDozfS0ke2xpc3RlbmVyX25zOjA6M30tJHtjbF9wcm90b30tJHtzcnZfcHJvdG99LSR7Y29ubmVjdF9hZGRyfS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7Y29ubmVjdG9yX25zOjA6M30tJHtsaXN0ZW5lcl9uczowOjN9LSR7Y2xfcHJvdG99LSR7c3J2X3Byb3RvfS0ke2Nvbm5lY3RfYWRkcn0tJHtwb3J0fVwiXG4rXHRcdGxvY2FsIGNhcG9wdD1cIi1pIGFueSAtcyAxMjggLUIgMzI3NjggJHtjYXB1c2VyfVwiXG4gXG4gXHRcdGlwIG5ldG5zIGV4ZWMgJHtsaXN0ZW5lcl9uc30gdGNwZHVtcCAke2NhcG9wdH0gXFxcbiBcdFx0XHQtdyBcIiR7Y2FwZmlsZX0tbGlzdGVuZXIucGNhcFwiIFx1MDAzZVx1MDAzZSBcIiR7Y2Fwb3V0fVwiIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCA1ZTIyMmJhOTc3ZTRlLi4zYjhkMmM4YTYyMTYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgdm9pZCBnZXRfc3ViZmxvd19pbmZvKGNoYXIgKnN1YmZsb3dfYWRkcnMpXG4gXHRpbnQgcmV0O1xuIFx0aW50IGZkO1xuIFxuLVx0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJVteOl06JWQgJVteOl06JWRcIiwgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuK1x0cmV0ID0gc3NjYW5mKHN1YmZsb3dfYWRkcnMsIFwiJTYzW146XTolZCAlNjNbXjpdOiVkXCIsXG4rXHRcdCAgICAgc2FkZHIsIFx1MDAyNnNwb3J0LCBkYWRkciwgXHUwMDI2ZHBvcnQpO1xuIFx0aWYgKHJldCAhPSA0KVxuIFx0XHRkaWVfcGVycm9yKFwiSVAgUE9SVCBQYWlycyBoYXMgc3R5bGUgcHJvYmxlbXMhXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9qb2luLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbmluZGV4IDdkYzkxZmFjNDkxN2UuLjE4Y2U3MTM2YTJiMGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3Bfam9pbi5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2pvaW4uc2hcbkBAIC03NSw2ICs3NSwxNCBAQCB1bnNldCBqb2luX3N5bl90eFxuIHVuc2V0IGpvaW5fY3JlYXRlX2VyclxuIHVuc2V0IGpvaW5fYmluZF9lcnJcbiB1bnNldCBqb2luX2Nvbm5lY3RfZXJyXG4rdW5zZXQgam9pbl9zeW5hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fbXBqb2luXG4rdW5zZXQgam9pbl9hY2tfbm9fY3R4XG4rdW5zZXQgam9pbl9ub3RfZXN0YWJsaXNoZWRcbit1bnNldCBqb2luX25vX2lkX2ZvdW5kXG4rXG4rdW5zZXQgcnN0X21kNXNpZ1xuK3Vuc2V0IHJzdF9kc3NcbiBcbiB1bnNldCBmYl9uczFcbiB1bnNldCBmYl9uczJcbkBAIC05NzEsNyArOTc5LDcgQEAgY29uZF9zdGFydF9jYXB0dXJlKClcbiBcdFx0Y2FwZmlsZT0kKHByaW50ZiBcIm1wX2pvaW4tJTAydS0lcy5wY2FwXCIgXCIkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUlwiIFwiJG5zXCIpXG4gXG4gXHRcdGVjaG8gXCJDYXB0dXJpbmcgdHJhZmZpYyBmb3IgdGVzdCAkTVBUQ1BfTElCX1RFU1RfQ09VTlRFUiBpbnRvICRjYXBmaWxlXCJcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHRjcGR1bXAgLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICRjYXB1c2VyIC13IFwiJGNhcGZpbGVcIiBcdTAwM2UgXCIkY2Fwb3V0XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiB0Y3BkdW1wIC1pIGFueSAtcyAxMjggLUIgMzI3NjggJGNhcHVzZXIgLXcgXCIkY2FwZmlsZVwiIFx1MDAzZSBcIiRjYXBvdXRcIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbiBcdFx0Y2FwcGlkPSQhXG4gXG4gXHRcdHNsZWVwIDFcbkBAIC0xMzUzLDYgKzEzNjEsOCBAQCBjaGtfcnN0X25yKClcbiBcdGxvY2FsIHJzdF90eD0kMVxuIFx0bG9jYWwgcnN0X3J4PSQyXG4gXHRsb2NhbCBuc19pbnZlcnQ9JHszOi1cIlwifVxuK1x0bG9jYWwgbWQ1c2lnPSR7cnN0X21kNXNpZzotMH1cbitcdGxvY2FsIGRzcz0ke3JzdF9kc3M6LTB9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgbnNfdHg9JG5zMVxuIFx0bG9jYWwgbnNfcng9JG5zMlxuQEAgLTEzODksNiArMTM5OSwyMSBAQCBjaGtfcnN0X25yKClcbiBcdGVsc2VcbiBcdFx0cHJpbnRfb2tcbiBcdGZpXG4rXG4rXHQjIE1QVENQX1JTVF9FTVBUQ1AgcmVzZXQtZXZlbnQgY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogTUQ1U2lnUmVzZXQgZmlyZXMgb24gdGhlIGxpc3RlbmVyXG4rXHQjIChzZXJ2ZXIpLCBEc3NSZXNldCBvbiB0aGUgZGF0YSByZWNlaXZlciAoY2xpZW50KS5cbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TUQ1U2lnUmVzZXRcIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkbWQ1c2lnXCIgXTsgdGhlblxuK1x0XHRwcmludF9jaGVjayBcIk1ENVNpZ1Jlc2V0XCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBNRDVTaWdSZXNldCBleHBlY3RlZCAkbWQ1c2lnXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMn0gXCJNUFRjcEV4dERzc1Jlc2V0XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGRzc1wiIF07IHRoZW5cbitcdFx0cHJpbnRfY2hlY2sgXCJEc3NSZXNldFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgRHNzUmVzZXQgZXhwZWN0ZWQgJGRzc1wiXG4rXHRmaVxuIH1cbiBcbiBjaGtfaW5maV9ucigpXG5AQCAtMTU4Nyw2ICsxNjEyLDExIEBAIGNoa19qb2luX25yKClcbiBcdGxvY2FsIHJzdF9ucj0ke2pvaW5fcnN0X25yOi0wfVxuIFx0bG9jYWwgaW5maV9ucj0ke2pvaW5faW5maV9ucjotMH1cbiBcdGxvY2FsIGNvcnJ1cHRlZF9wa3RzPSR7am9pbl9jb3JydXB0ZWRfcGt0czotMH1cbitcdGxvY2FsIHN5bmFja19ub19tcGpvaW49JHtqb2luX3N5bmFja19ub19tcGpvaW46LTB9XG4rXHRsb2NhbCBhY2tfbm9fbXBqb2luPSR7am9pbl9hY2tfbm9fbXBqb2luOi0wfVxuK1x0bG9jYWwgYWNrX25vX2N0eD0ke2pvaW5fYWNrX25vX2N0eDotMH1cbitcdGxvY2FsIG5vdF9lc3RhYmxpc2hlZD0ke2pvaW5fbm90X2VzdGFibGlzaGVkOi0wfVxuK1x0bG9jYWwgbm9faWRfZm91bmQ9JHtqb2luX25vX2lkX2ZvdW5kOi0wfVxuIFx0bG9jYWwgcmM9JHtLU0ZUX1BBU1N9XG4gXHRsb2NhbCBjb3VudFxuIFx0bG9jYWwgd2l0aF9jb29raWVcbkBAIC0xNjU1LDYgKzE2ODUsNDQgQEAgY2hrX2pvaW5fbnIoKVxuIFx0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gc3luIHJlamVjdGVkIGV4cGVjdGVkICRzeW5fcmVqXCJcbiBcdGZpXG4gXG4rXHQjIFBlci1ldmVudCBNUFRDUF9SU1RfRU1QVENQIEpPSU4gY291bnRlcnM7IGRlZmF1bHQgMCwgZ2F0ZWQgb25cbitcdCMgYXZhaWxhYmlsaXR5LiAgRml4ZWQgbmFtZXNwYWNlczogdGhlICpTeW5BY2sqIG9uZSBmaXJlcyBvbiB0aGVcbitcdCMgY2xpZW50IHJlY2VpdmluZyB0aGUgU1lOL0FDSywgdGhlIG90aGVycyBvbiB0aGUgc2VydmVyLlxuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczJ9IFwiTVBUY3BFeHRNUEpvaW5TeW5BY2tOb01QSm9pblwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRzeW5hY2tfbm9fbXBqb2luXCIgXTsgdGhlblxuK1x0XHRyYz0ke0tTRlRfRkFJTH1cbitcdFx0cHJpbnRfY2hlY2sgXCJzeW5hY2sgbm8gbXBqb2luXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIHN5bmFjayBubyBtcGpvaW4gZXhwZWN0ZWQgJHN5bmFja19ub19tcGpvaW5cIlxuK1x0ZmlcbitcbitcdGNvdW50PSQobXB0Y3BfbGliX2dldF9jb3VudGVyICR7bnMxfSBcIk1QVGNwRXh0TVBKb2luQWNrTm9NUEpvaW5cIilcbitcdGlmIFsgLW4gXCIkY291bnRcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGNvdW50XCIgIT0gXCIkYWNrX25vX21wam9pblwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiYWNrIG5vIG1wam9pblwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBhY2sgbm8gbXBqb2luIGV4cGVjdGVkICRhY2tfbm9fbXBqb2luXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbkFja05vQ3R4XCIpXG4rXHRpZiBbIC1uIFwiJGNvdW50XCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRjb3VudFwiICE9IFwiJGFja19ub19jdHhcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImFjayBubyBjdHhcIlxuK1x0XHRmYWlsX3Rlc3QgXCJnb3QgJGNvdW50IEpPSU5bc10gYWNrIG5vIGN0eCBleHBlY3RlZCAkYWNrX25vX2N0eFwiXG4rXHRmaVxuK1xuK1x0Y291bnQ9JChtcHRjcF9saWJfZ2V0X2NvdW50ZXIgJHtuczF9IFwiTVBUY3BFeHRNUEpvaW5Ob3RFc3RhYmxpc2hlZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub3RfZXN0YWJsaXNoZWRcIiBdOyB0aGVuXG4rXHRcdHJjPSR7S1NGVF9GQUlMfVxuK1x0XHRwcmludF9jaGVjayBcImpvaW4gbm90IGVzdGFibGlzaGVkXCJcbitcdFx0ZmFpbF90ZXN0IFwiZ290ICRjb3VudCBKT0lOW3NdIG5vdCBlc3RhYmxpc2hlZCBleHBlY3RlZCAkbm90X2VzdGFibGlzaGVkXCJcbitcdGZpXG4rXG4rXHRjb3VudD0kKG1wdGNwX2xpYl9nZXRfY291bnRlciAke25zMX0gXCJNUFRjcEV4dE1QSm9pbk5vSWRGb3VuZFwiKVxuK1x0aWYgWyAtbiBcIiRjb3VudFwiIF0gXHUwMDI2XHUwMDI2IFsgXCIkY291bnRcIiAhPSBcIiRub19pZF9mb3VuZFwiIF07IHRoZW5cbitcdFx0cmM9JHtLU0ZUX0ZBSUx9XG4rXHRcdHByaW50X2NoZWNrIFwiam9pbiBubyBpZCBmb3VuZFwiXG4rXHRcdGZhaWxfdGVzdCBcImdvdCAkY291bnQgSk9JTltzXSBubyBpZCBmb3VuZCBleHBlY3RlZCAkbm9faWRfZm91bmRcIlxuK1x0ZmlcbitcbiBcdHByaW50X3Jlc3VsdHMgXCJqb2luIFJ4XCIgJHtyY31cbiBcbiBcdGpvaW5fc3luX3R4PVwiJHtqb2luX3N5bl90eDotJHtzeW5fbnJ9fVwiIFxcXG5AQCAtMjM1OSw2ICsyNDI3LDMxIEBAIHNpZ25hbF9hZGRyZXNzX3Rlc3RzKClcbiBcdFx0XHRjaGtfYWRkX25yIDQgNFxuIFx0XHRmaVxuIFx0ZmlcbitcbitcdCMgc2lnbmFsbGVkIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgY2xpZW50LCB3aGVyZSBhIFRDUC1vbmx5XG4rXHQjIGxpc3RlbmVyIGlzIGJvdW5kIGF0IGl0OiB0aGUgY2xpZW50J3MgTVBfSk9JTiByb3V0ZXMgbG9jYWxseVxuK1x0IyB0byB0aGUgbGlzdGVuZXIgYW5kIHJlY2VpdmVzIGEgU1lOL0FDSyB3aXRob3V0IE1QX0pPSU4uXG4rXHQjIE1QSm9pblN5bkFja05vTVBKb2luIGluY3JlbWVudHMgb24gdGhlIGNsaWVudCBzaWRlLlxuK1x0aWYgcmVzZXQgXCJzaWduYWwgYWRkcmVzcywgVENQLW9ubHkgbGlzdGVuZXIgb24gY2xpZW50XCI7IHRoZW5cbitcdFx0bG9jYWwgZXh0cmFfYmluZFxuK1x0XHRsb2NhbCBwb3J0XG4rXG4rXHRcdHBtX25sX3NldF9saW1pdHMgJG5zMSAwIDFcbitcdFx0cG1fbmxfc2V0X2xpbWl0cyAkbnMyIDEgMVxuK1x0XHRwbV9ubF9hZGRfZW5kcG9pbnQgJG5zMSAxMC4wLjIuMiBmbGFncyBzaWduYWxcbitcbitcdFx0cG9ydD0kKGdldF9wb3J0KVxuK1x0XHRpcCBuZXRucyBleGVjICR7bnMyfSAuL21wdGNwX2Nvbm5lY3QgLWwgLXQgLTEgLXAgXCIkcG9ydFwiIFxcXG4rXHRcdFx0LXMgVENQIDEwLjAuMi4yIFx1MDAyNlxuK1x0XHRleHRyYV9iaW5kPSQhXG4rXHRcdG1wdGNwX2xpYl93YWl0X2xvY2FsX3BvcnRfbGlzdGVuIFwiJG5zMlwiIFwiJHBvcnRcIlxuK1xuK1x0XHRydW5fdGVzdHMgJG5zMSAkbnMyIDEwLjAuMS4xXG4rXHRcdGpvaW5fc3luYWNrX25vX21wam9pbj0xIGpvaW5fc3luX3R4PTEgXFxcbitcdFx0XHRjaGtfam9pbl9uciAwIDAgMFxuK1xuK1x0XHRraWxsICR7ZXh0cmFfYmluZH0gMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbiB9XG4gXG4gbGFtaW5hcl9lbmRwX3Rlc3RzKClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3Avc2ltdWx0X2Zsb3dzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL3NpbXVsdF9mbG93cy5zaFxuaW5kZXggN2I5YWFiZTEwMTcwNC4uM2VhM2QxZWZlMzJlMSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9zaW11bHRfZmxvd3Muc2hcbkBAIC0yNCw2ICsyNCw3IEBAIHNtYWxsPVwiXCJcbiBzb3V0PVwiXCJcbiBjb3V0PVwiXCJcbiBjYXBvdXQ9XCJcIlxuK2NhcHByZWZpeD1cIlwiXG4gc2l6ZT0wXG4gXG4gdXNhZ2UoKSB7XG5AQCAtNzAsNiArNzEsMTEgQEAgc2V0dXAoKVxuIFxuIFx0bXB0Y3BfbGliX25zX2luaXQgbnMxIG5zMiBuczNcbiBcbitcdGlmICRjYXB0dXJlOyB0aGVuXG4rXHRcdGNhcHByZWZpeD1cInNpbXVsdF9mbG93cy0ke25zMTo0fVwiXG4rXHRcdG1wdGNwX2xpYl9wcl9pbmZvIFwicGNhcCB3aWxsIGhhdmUgdGhpcyBwcmVmaXg6ICR7Y2FwcHJlZml4fS1cIlxuK1x0ZmlcbitcbiBcdGlwIGxpbmsgYWRkIG5zMWV0aDEgbmV0bnMgXCIkbnMxXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBuczJldGgxIG5ldG5zIFwiJG5zMlwiXG4gXHRpcCBsaW5rIGFkZCBuczFldGgyIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbnMyZXRoMiBuZXRucyBcIiRuczJcIlxuIFx0aXAgbGluayBhZGQgbnMyZXRoMyBuZXRucyBcIiRuczJcIiB0eXBlIHZldGggcGVlciBuYW1lIG5zM2V0aDEgbmV0bnMgXCIkbnMzXCJcbkBAIC0xMzYsMTUgKzE0MiwxNCBAQCBkb190cmFuc2ZlcigpXG4gXG4gXHRpZiAkY2FwdHVyZTsgdGhlblxuIFx0XHRsb2NhbCBjYXB1c2VyXG4tXHRcdGxvY2FsIHJuZGg9XCIke25zMTo0fVwiXG4gXHRcdGlmIFsgLXogJFNVRE9fVVNFUiBdIDsgdGhlblxuIFx0XHRcdGNhcHVzZXI9XCJcIlxuIFx0XHRlbHNlXG4gXHRcdFx0Y2FwdXNlcj1cIi1aICRTVURPX1VTRVJcIlxuIFx0XHRmaVxuIFxuLVx0XHRsb2NhbCBjYXBmaWxlPVwiJHtybmRofS0ke3BvcnR9XCJcbi1cdFx0bG9jYWwgY2Fwb3B0PVwiLWkgYW55IC1zIDY1NTM1IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuK1x0XHRsb2NhbCBjYXBmaWxlPVwiJHtjYXBwcmVmaXh9LSR7cG9ydH1cIlxuK1x0XHRsb2NhbCBjYXBvcHQ9XCItaSBhbnkgLXMgMTA4IC1CIDMyNzY4ICR7Y2FwdXNlcn1cIlxuIFxuIFx0XHRpcCBuZXRucyBleGVjICR7bnMzfSAgdGNwZHVtcCAke2NhcG9wdH0gLXcgXCIke2NhcGZpbGV9LWxpc3RlbmVyLnBjYXBcIiAgXHUwMDNlXHUwMDNlIFwiJHtjYXBvdXR9XCIgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4gXHRcdGxvY2FsIGNhcHBpZF9saXN0ZW5lcj0kIVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTM6NTYuNTI4ODk0NDA5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTkxMjgxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IE5vIERlZGljYXRlZCBTZXNzaW9uIFJlcXVpcmVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBzZXJpZXMgZG93biBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4sIHdoaWNoIHdvdWxkIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcywgYW5kIGl0IGxvb2tzIGxpa2Ugd2UncmUgbW9zdGx5IGRlYWxpbmcgd2l0aDpcblxuMS4gICoqUmVtb3ZhbCBvZiBgZGF0YV9hY2tgIGZpZWxkOioqIFRoaXMgaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSByZW1vdmFsIG9mIGBkYXRhX2Fja2AgKGFuZCBpdHMgYXNzb2NpYXRlZCBgZGF0YV9hY2szMmAgdW5pb24gbWVtYmVyKSBmcm9tIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBhbmQgdGhlIGBtcHRjcF9kdW1wX21wZXh0YCB0cmFjZSBldmVudCBpcyBhICoqbmV0IHJlZHVjdGlvbioqIGluIGRhdGEgYW5kIHBvdGVudGlhbCBpc3N1ZXMuIExlc3MgZGF0YSBpcyBiZXR0ZXIsIGluIHRoaXMgY2FzZS4gV2UncmUgcmVtb3ZpbmcsIG5vdCBhZGRpbmcuIFRoZSB0cmFjZSBldmVudCBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1c2VyLXNwYWNlIGV4cG9zdXJlIG9mIHNlbnNpdGl2ZSBkYXRhLCBhbmQgdGhlIGBzdHJ1Y3QgbXB0Y3BfZXh0YCBjaGFuZ2UgaW52b2x2ZXMgYW4gYHNrYl9leHRfYWRkKClgIGFsbG9jYXRpb24uIExlc3MgZGF0YSBpbiB0aGUgc2tiIGV4dGVuc2lvbiBpcyBhIHBvc2l0aXZlIHRoaW5nIGZvciByZWR1Y2luZyBtZW1vcnkgdXNhZ2UuXG4yLiAgKipTTk1QIE1JQiBJdGVtczoqKiBUaGVzZSBhcmUganVzdCBjb3VudGVycywgaW5jcmVtZW50ZWQgdXNpbmcgYE1QVENQX0lOQ19TVEFUU2AuIFRoZSBpbmZvcm1hdGlvbiBleHBvc2VkIHRocm91Z2ggYC9wcm9jL25ldC9zbm1wYCBvciBzaW1pbGFyIGlzIGVudGlyZWx5IGJlbmlnbi4gV2UncmUgbm90IGxlYWtpbmcgYW55dGhpbmcgc2Vuc2l0aXZlIHRvIHVzZXIgc3BhY2U7IHdlJ3JlIGp1c3QgcHJvdmlkaW5nIG1vcmUgc3RhdGlzdGljcy5cbjMuICAqKlVuZGVyZmxvdyBDaGVja3MgXHUwMDI2IFJUTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgYFdBUk5fT05fT05DRWAgY2hlY2tzIGZvciBgZXh0cmFfc3ViZmxvd3NgIGFyZSBkZWZlbnNpdmUgY29kaW5nIHByYWN0aWNlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBpY3NrLVx1MDAzZWljc2tfcnRvX21pbmAgYW5kIGBpY3NrLVx1MDAzZWljc2tfcnRvX21heGAgd2l0aCB2YWx1ZXMgZnJvbSBgbmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9ydG9fbWluX3VzYCBhbmQgYG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcnRvX21heF9tc2AgaXMgYSAqKnBvc2l0aXZlKiouIEl0ICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoZXJlIHByZXZpb3VzbHkgdGhlIHZhcmlhYmxlcyBtaWdodCBoYXZlIGJlZW4gdW5pbml0aWFsaXplZC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuXG5Db25zaWRlcmluZyBhbGwgb2YgdGhpcywgbGV0J3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgcG9pbnRzLlxuXG4qICAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gVGhlIHRyYWNlIGV2ZW50ICpyZW1vdmVzKiBhIGZpZWxkIGFuZCBzbyB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgY29waWVkIGlzIHNtYWxsZXIgbm93LiBUaGUgTUlCIGl0ZW1zIGluY3JlbWVudCBjb3VudGVycywgd2hpY2ggaXMgbm90IGNvbmNlcm5pbmcgZm9yIEtNU0FOLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYGRhdGFfYWNrYCBmaWVsZCBpbiB0aGUgc2tiIGV4dGVuc2lvbiBpcyBhIHJlZHVjdGlvbiBpbiBzaXplLlxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogV2UncmUgcmVtb3ZpbmcgYSBmaWVsZCBmcm9tIGFuIHNrYiBleHRlbnNpb24uIFdlIGFyZSBub3cgaW5pdGlhbGl6aW5nIGFuIFJUTyBhbmQgdGhvc2Ugd2VyZSBub3QgaW5pdGlhbGl6ZWQgcHJldmlvdXNseSwgd2hpY2ggYWRkcmVzc2VzIHByZXZpb3VzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHVzYWdlLiBUaGVyZSBhcmUgbm8gYnVmZmVyIGFsbG9jYXRpb25zIG9yIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkLlxuXG5XZSdyZSBhZGRpbmcgY2hlY2tzIHRvIHVuZGVyZmxvdywgc28gbm90IGEgcHJvYmxlbS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb3VudGVycyBpcyBmaW5lLiBUaGUgUlRPIHNlZWRpbmcgaW5pdGlhbGl6ZXMgZmllbGRzLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIHJpc2tzLiBUaGUgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVtb3ZhbCBvZiB0aGUgZmllbGQgYW5kIHRoZSBzZWVkaW5nIG9mIHRoZSBSVE8gc2hvdWxkIHJlZHVjZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIHJlYWRzLiBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cbkknbSBzZXR0aW5nIE5lZWRzS01TQU49ZmFsc2UgZm9yIHRoaXMgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMywiT3V0cHV0VG9rZW5zIjoyODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MTQ6MTQuNzIwMTc5MTM5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb246XFxuMS4gUmVtb3ZpbmcgdGhlIHVudXNlZCBgZGF0YV9hY2tgIGZpZWxkIGZyb20gYHN0cnVjdCBtcHRjcF9leHRgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgbXB0Y3BfZHVtcF9tcGV4dGAgdHJhY2UgZXZlbnQuXFxuMi4gQWRkaW5nIG5ldyBTTk1QIE1JQiBjb3VudGVycyBmb3IgdmFyaW91cyBNUFRDUCBldmVudHMgKGUuZy4sIE1QX0pPSU4gZmFpbHVyZXMsIHJlc2V0cykgYW5kIGluY3JlbWVudGluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy5cXG4zLiBBZGRpbmcgdW5kZXJmbG93IGNoZWNrcyAoYFdBUk5fT05fT05DRWApIGZvciBgcG0tXFx1MDAzZWV4dHJhX3N1YmZsb3dzYC5cXG40LiBTZWVkaW5nIFJUTyBib3VuZHMgKGBpY3NrX3J0b19taW5gLCBgaWNza19ydG9fbWF4YCkgZHVyaW5nIE1QVENQIHNvY2tldCBpbml0aWFsaXphdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVtb3ZhbCBvZiBmaWVsZHMgZnJvbSB0aGUgdHJhY2UgZXZlbnQgYW5kIHNrYiBleHRlbnNpb24gcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCwgYW5kIHRoZSBSVE8gYm91bmRzIGluaXRpYWxpemF0aW9uIGVuc3VyZXMgZmllbGRzIGFyZSBwcm9wZXJseSBzZWVkZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcykgd291bGQgYmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgZm9jdXNlcyBvbjpcXG4xLiBSZW1vdmluZyB0aGUgdW51c2VkIGBkYXRhX2Fja2AgZmllbGQgZnJvbSBgc3RydWN0IG1wdGNwX2V4dGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGBtcHRjcF9kdW1wX21wZXh0YCB0cmFjZSBldmVudC5cXG4yLiBBZGRpbmcgbmV3IFNOTVAgTUlCIGNvdW50ZXJzIGZvciB2YXJpb3VzIE1QVENQIGV2ZW50cyAoZS5nLiwgTVBfSk9JTiBmYWlsdXJlcywgcmVzZXRzKSBhbmQgaW5jcmVtZW50aW5nIHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLlxcbjMuIEFkZGluZyB1bmRlcmZsb3cgY2hlY2tzIChgV0FSTl9PTl9PTkNFYCkgZm9yIGBwbS1cXHUwMDNlZXh0cmFfc3ViZmxvd3NgLlxcbjQuIFNlZWRpbmcgUlRPIGJvdW5kcyAoYGljc2tfcnRvX21pbmAsIGBpY3NrX3J0b19tYXhgKSBkdXJpbmcgTVBUQ1Agc29ja2V0IGluaXRpYWxpemF0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByZW1vdmFsIG9mIGZpZWxkcyBmcm9tIHRoZSB0cmFjZSBldmVudCBhbmQgc2tiIGV4dGVuc2lvbiByZWR1Y2VzIHRoZSBtZW1vcnkgZm9vdHByaW50LCBhbmQgdGhlIFJUTyBib3VuZHMgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyBmaWVsZHMgYXJlIHByb3Blcmx5IHNlZWRlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[1] Phase: Succeeded StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 17:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 17:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2] Phase: Succeeded StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 17:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 17:14:25 +0000 UTC FinishedAt: 2026-08-12 17:14:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow89gjm/series-workflow89gjm-convert-artifact-1751721977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 17:14:35 +0000 UTC FinishedAt: 2026-08-12 17:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 17:14:35 +0000 UTC FinishedAt: 2026-08-12 17:30:51 +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:*2dec92d4-71d8-4286-b5e7-b05c0ff85102,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-workflow89gjm/series-workflow89gjm-convert-artifact-1751721977/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": "136298ee-51dd-4b26-a34d-39e5020644c0", "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-workflow89gjm/series-workflow89gjm-build-action-109166871/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 17:14:35 +0000 UTC FinishedAt: 2026-08-12 17:30:41 +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:*2dec92d4-71d8-4286-b5e7-b05c0ff85102,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-workflow89gjm/series-workflow89gjm-convert-artifact-1751721977/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": "136298ee-51dd-4b26-a34d-39e5020644c0", "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-workflow89gjm/series-workflow89gjm-build-action-109166871/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 17:30:51 +0000 UTC FinishedAt: 2026-08-12 17:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 17:30:51 +0000 UTC FinishedAt: 2026-08-12 17:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 17:30:51 +0000 UTC FinishedAt: 2026-08-12 17:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 17:30:51 +0000 UTC FinishedAt: 2026-08-12 17:30:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow89gjm/series-workflow89gjm-convert-artifact-1344319436/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 17:31:02 +0000 UTC FinishedAt: 2026-08-12 17:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 17:31:02 +0000 UTC FinishedAt: 2026-08-12 17:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*136298ee-51dd-4b26-a34d-39e5020644c0,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-workflow89gjm/series-workflow89gjm-build-action-109166871/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-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 17:33:08 +0000 UTC FinishedAt: 2026-08-12 17:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 17:33:08 +0000 UTC FinishedAt: 2026-08-12 17:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 17:33:08 +0000 UTC FinishedAt: 2026-08-12 17:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 17:33:08 +0000 UTC FinishedAt: 2026-08-12 17:49:30 +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:*2dec92d4-71d8-4286-b5e7-b05c0ff85102,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-workflow89gjm/series-workflow89gjm-convert-artifact-1344319436/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": "0e7c130f-86ea-452a-b460-e180067f4774", "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-workflow89gjm/series-workflow89gjm-build-action-846921192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 17:33:08 +0000 UTC FinishedAt: 2026-08-12 17:49:20 +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:*2dec92d4-71d8-4286-b5e7-b05c0ff85102,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-workflow89gjm/series-workflow89gjm-convert-artifact-1344319436/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": "0e7c130f-86ea-452a-b460-e180067f4774", "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-workflow89gjm/series-workflow89gjm-build-action-846921192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 17:49:30 +0000 UTC FinishedAt: 2026-08-12 17:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 17:49:30 +0000 UTC FinishedAt: 2026-08-12 17:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 17:49:30 +0000 UTC FinishedAt: 2026-08-12 17:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 17:49:30 +0000 UTC FinishedAt: 2026-08-12 17:51:21 +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:*0e7c130f-86ea-452a-b460-e180067f4774,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-workflow89gjm/series-workflow89gjm-build-action-846921192/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-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +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_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"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:*136298ee-51dd-4b26-a34d-39e5020644c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0e7c130f-86ea-452a-b460-e180067f4774,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-workflow89gjm/series-workflow89gjm-build-action-109166871/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-workflow89gjm/series-workflow89gjm-build-action-846921192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 17:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 17:51:35 +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_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"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-workflow89gjm/series-workflow89gjm-convert-artifact-3867239989/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 17:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 17:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 17:51:31 +0000 UTC FinishedAt: 2026-08-12 17:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 17:51:41 +0000 UTC FinishedAt: 2026-08-12 20:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89gjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_pm_subflow_check_next","mptcp_pm_nl_remove_doit","mptcp_init_sock","__mptcp_retrans","mptcp_finish_join","__mptcp_subflow_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"094f3a75-7951-49c9-ac96-83f2a0a43d97","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 17:51:41 +0000 UTC FinishedAt: 2026-08-12 20:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*136298ee-51dd-4b26-a34d-39e5020644c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0e7c130f-86ea-452a-b460-e180067f4774,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-workflow89gjm/series-workflow89gjm-build-action-109166871/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-workflow89gjm/series-workflow89gjm-build-action-846921192/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-workflow89gjm/series-workflow89gjm-convert-artifact-3867239989/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,}